{"version":3,"file":"js/ysf.a6f5f807.js","mappings":"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AAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,QACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,QACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,SACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,SACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,SACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CACD6N,GAAI,oBACJ9N,IAAK,OACLC,KAAM,gBACL,CAC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","sources":["webpack://kefu-visitor/./node_modules/@ysf/error-boundary/es/index.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/common/constants.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/common/utils.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/core/overlay.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/core/position.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/core/element.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/core/popover.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/core/stage.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/index.js","webpack://kefu-visitor/./node_modules/@ysf/guide/es/compontents/guide.js","webpack://kefu-visitor/./node_modules/@ysf/helper/es/common.js","webpack://kefu-visitor/./node_modules/@ysf/helper/es/emoji.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/provider.js","webpack://kefu-visitor/./node_modules/@ysf/fetch/es/internal/_fetchBase.js","webpack://kefu-visitor/./node_modules/@ysf/fetch/es/utils.js","webpack://kefu-visitor/./node_modules/@ysf/fetch/node_modules/@ysf/helper/es/cookie.js","webpack://kefu-visitor/./node_modules/@ysf/fetch/es/fetch.js","webpack://kefu-visitor/./node_modules/@ysf/fetch/es/index.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/node_modules/@ysf/helper/es/cookie.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/api.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/I18nProviderSlim.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/context.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/i18nDate.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/i18nString.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/useI18n.js","webpack://kefu-visitor/./node_modules/@ysf/i18n/es/utils.js","webpack://kefu-visitor/./node_modules/@ysf/logdb/es/LogDb.js","webpack://kefu-visitor/./node_modules/@ysf/message-image/es/index.js"],"sourcesContent":["import _assertThisInitialized from \"@babel/runtime/helpers/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.object.is.js\";\nimport \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport React from 'react';\n\n// 出错后显示的元素类型\n\n// 判断依赖\nvar changeArray = function changeArray(a, b) {\n var _a, _b, _a2;\n if (a === void 0) {\n a = [];\n }\n if (b === void 0) {\n b = [];\n }\n return ((_a = a) === null || _a === void 0 ? void 0 : _a.length) !== ((_b = b) === null || _b === void 0 ? void 0 : _b.length) || ((_a2 = a) === null || _a2 === void 0 ? void 0 : _a2.some(function (it, index) {\n return !Object.is(it, b[index]);\n }));\n};\n\n// 初始状态\nvar initialState = {\n error: null\n};\nvar ErrorBoundary = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(ErrorBoundary, _React$Component);\n function ErrorBoundary() {\n var _this;\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n _defineProperty(_assertThisInitialized(_this), \"state\", initialState);\n _defineProperty(_assertThisInitialized(_this), \"updatedWithError\", false);\n _defineProperty(_assertThisInitialized(_this), \"resetErrorBoundary\", function () {\n var _this$props$onReset, _this$props;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n (_this$props$onReset = (_this$props = _this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call.apply(_this$props$onReset, [_this$props].concat(args));\n _this.reset();\n });\n return _this;\n }\n ErrorBoundary.getDerivedStateFromError = function getDerivedStateFromError(error) {\n return {\n error: error\n };\n };\n var _proto = ErrorBoundary.prototype;\n _proto.componentDidCatch = function componentDidCatch(error, errorInfo) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, errorInfo.componentStack);\n };\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var error = this.state.error;\n var _this$props3 = this.props,\n resetKeys = _this$props3.resetKeys,\n onResetKeysChange = _this$props3.onResetKeysChange;\n if (error !== null && !this.updatedWithError) {\n this.updatedWithError = true;\n return;\n }\n if (error !== null && changeArray(prevProps.resetKeys, resetKeys)) {\n onResetKeysChange === null || onResetKeysChange === void 0 ? void 0 : onResetKeysChange(prevProps.resetKeys, resetKeys);\n this.reset();\n }\n };\n _proto.reset = function reset() {\n this.updatedWithError = false;\n this.setState(initialState);\n };\n _proto.render = function render() {\n var _this$props4 = this.props,\n fallback = _this$props4.fallback,\n FallbackComponent = _this$props4.FallbackComponent,\n fallbackRender = _this$props4.fallbackRender;\n var error = this.state.error;\n\n // 多种 fallback 的判断\n if (error !== null) {\n var fallbackProps = {\n error: error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if ( /*#__PURE__*/React.isValidElement(fallback)) {\n return fallback;\n }\n if (typeof fallbackRender === 'function') {\n return fallbackRender(fallbackProps);\n }\n if (FallbackComponent) {\n return /*#__PURE__*/React.createElement(FallbackComponent, fallbackProps);\n }\n\n // return
{t('TOGGLR_FAILURE', '数据异常,请刷新重试')}
\n return /*#__PURE__*/React.createElement(\"div\", null, \"\\u6570\\u636E\\u5F02\\u5E38\\uFF0C\\u8BF7\\u5237\\u65B0\\u91CD\\u8BD5\");\n }\n return /*#__PURE__*/React.createElement(React.Fragment, null, this.props.children);\n };\n return ErrorBoundary;\n}(React.Component); // HOC 高阶函数\nfunction withErrorBoundary(Component, errorBoundaryProps) {\n var Wrapped = function Wrapped(props) {\n return /*#__PURE__*/React.createElement(ErrorBoundary, errorBoundaryProps, /*#__PURE__*/React.createElement(Component, props));\n };\n\n // DevTools 显示的组件名,方便调试\n var name = Component.displayName || Component.name || 'Unknown';\n Wrapped.displayName = \"withErrorBoundary(\" + name + \")\";\n return Wrapped;\n}\n\n// 提供 ErrorBoundary 无法捕获的错误,在 React 声明周期抛出,以便 ErrorBoundary 捕获\nfunction useErrorHandler(givenError) {\n var _React$useState = React.useState(null),\n error = _React$useState[0],\n setError = _React$useState[1];\n if (givenError) throw givenError;\n if (error) throw error;\n return setError;\n}\nexport { withErrorBoundary, useErrorHandler };\nexport default ErrorBoundary;","export var OVERLAY_OPACITY = 0.75;\nexport var OVERLAY_PADDING = 10;\nexport var SHOULD_ANIMATE_OVERLAY = true;\nexport var SHOULD_OUTSIDE_CLICK_CLOSE = true;\nexport var ALLOW_KEYBOARD_CONTROL = true;\nexport var SHOULD_OUTSIDE_CLICK_NEXT = false;\nexport var SHOULD_HAS_MASK = true;\nexport var SHOW_STAGE = false;\nexport var SHOULD_DISABLE_HIGHLIGHTED_ELEMENT = false;\nexport var ESC_KEY_CODE = 27;\nexport var LEFT_KEY_CODE = 37;\nexport var RIGHT_KEY_CODE = 39;\nvar prefix = \"ysf-guide\";\nexport var ID_OVERLAY = prefix + \"-driver-page-overlay\";\nexport var ID_STAGE = prefix + \"-driver-highlighted-element-stage\";\nexport var ID_POPOVER = prefix + \"-driver-popover-item\";\nexport var CLASS_POPOVER_NO_MASK = \"driver-popover-item-no-mask\";\nexport var CLASS_DRIVER_HIGHLIGHTED_ELEMENT = prefix + \"-driver-highlighted-element\";\nexport var CLASS_DISABLE_HIGHLIGHTED_ELEMENT = prefix + \"-driver-highlighted-element-disable\";\nexport var CLASS_POSITION_RELATIVE = prefix + \"-driver-position-relative\";\nexport var CLASS_FIX_STACKING_CONTEXT = prefix + \"-driver-fix-stacking\";\nexport var CLASS_STAGE_NO_ANIMATION = prefix + \"-driver-stage-no-animation\";\nexport var CLASS_POPOVER_TIP = prefix + \"-driver-popover-tip\";\nexport var CLASS_POPOVER_TITLE = prefix + \"-driver-popover-title\";\nexport var CLASS_POPOVER_DESCRIPTION = prefix + \"-driver-popover-description\";\nexport var CLASS_POPOVER_FOOTER = prefix + \"-driver-popover-footer\";\nexport var CLASS_CLOSE_BTN = prefix + \"-driver-close-btn\";\nexport var CLASS_SKIP_BTN = prefix + \"-driver-skip-btn\";\nexport var CLASS_NEXT_STEP_BTN = prefix + \"-driver-next-btn\";\nexport var CLASS_PREV_STEP_BTN = prefix + \"-driver-prev-btn\";\nexport var CLASS_BTN_DISABLED = prefix + \"-driver-disabled\";\nexport var CLASS_NAVIGATION_BTNS = prefix + \"-driver-navigation-btns\";\nexport var CLASS_STAGE_INDEX = prefix + \"-driver-stage-index\";\n\n// NOTE: It must match the one set in the animations in CSS file\nexport var ANIMATION_DURATION_MS = 300;\n\n// language=HTML\n//
\n// export const POPOVER_HTML = (className = '', hasMask) => `\n//
\n//
\n//
Popover Title
\n//
Popover Description
\n//
\n//
跳过
\n// \n// \n// \n// \n//
\n//
`;\nexport var POPOVER_HTML = function POPOVER_HTML(className, noMaskClass) {\n if (className === void 0) {\n className = \"\";\n }\n return \"\\n
\\n
\\n
Popover Title
\\n
Popover Description
\\n
\\n
\\u8DF3\\u8FC7
\\n \\n \\n \\n \\n
\\n
\";\n};\nexport var OVERLAY_HTML = \"
\";\nexport var STAGE_HTML = \"
\";","import \"core-js/modules/es.string.trim.js\";\n/**\n * Turn a string into a node\n * @param {String} htmlString to convert\n * @return {HTMLElement|Node} Converted node element\n */\nexport var createNodeFromString = function createNodeFromString(htmlString) {\n var div = document.createElement(\"div\");\n div.innerHTML = htmlString.trim();\n\n // Change this to div.childNodes to support multiple top-level nodes\n return div.firstChild;\n};\n\n/**\n * Gets the CSS property from the given element\n * @param {HTMLElement|Node} element\n * @param {string} propertyName\n * @param {boolean} prefixVendor\n * @return {string}\n */\nexport var getStyleProperty = function getStyleProperty(element, propertyName, prefixVendor) {\n if (prefixVendor === void 0) {\n prefixVendor = false;\n }\n if (prefixVendor) {\n var prefixes = [\"\", \"-webkit-\", \"-ms-\", \"moz-\", \"-o-\"];\n for (var counter = 0; counter < prefixes.length; counter++) {\n var prefixedProperty = prefixes[counter] + propertyName;\n var foundValue = getStyleProperty(element, prefixedProperty);\n if (foundValue) {\n return foundValue;\n }\n }\n return \"\";\n }\n var propertyValue = \"\";\n if (element.currentStyle) {\n propertyValue = element.currentStyle[propertyName];\n } else if (document.defaultView && document.defaultView.getComputedStyle) {\n propertyValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propertyName);\n }\n return propertyValue && propertyValue.toLowerCase ? propertyValue.toLowerCase() : propertyValue;\n};\n\n/**\n * Checks if the passed element is dom object or not\n * @param element\n * @returns {boolean}\n */\nexport var isDomElement = function isDomElement(element) {\n return element && typeof element === \"object\" && \"nodeType\" in element;\n};","import \"core-js/modules/web.timers.js\";\nimport { ANIMATION_DURATION_MS, ID_OVERLAY, OVERLAY_HTML } from \"../common/constants\";\nimport { createNodeFromString } from \"../common/utils\";\n\n/**\n * Responsible for overlay creation and manipulation i.e.\n * cutting out the visible part, animating between the sections etc\n */\nvar Overlay = /*#__PURE__*/function () {\n /**\n * @param {Object} options\n * @param {Window} window\n * @param {Document} document\n */\n function Overlay(options, window, document) {\n this.options = options;\n this.highlightedElement = null; // currently highlighted dom element (instance of Element)\n this.lastHighlightedElement = null; // element that was highlighted before current one\n this.hideTimer = null;\n this.window = window;\n this.document = document;\n this.removeNode = this.removeNode.bind(this);\n }\n\n /**\n * Prepares the overlay\n * @private\n */\n var _proto = Overlay.prototype;\n _proto.attachNode = function attachNode() {\n var pageOverlay = this.document.getElementById(ID_OVERLAY);\n if (!this.options.mask && !this.options.noMaskOthersDisable) return;\n if (!pageOverlay) {\n pageOverlay = createNodeFromString(OVERLAY_HTML);\n document.body.appendChild(pageOverlay);\n }\n this.node = pageOverlay;\n this.node.style.opacity = \"0\";\n if (!this.options.animate) {\n // For non-animation cases remove the overlay because we achieve this overlay by having\n // a higher box-shadow on the stage. Why are we doing it that way? Because the stage that\n // is shown \"behind\" the highlighted element to make it pop out of the screen, it introduces\n // some stacking contexts issues. To avoid those issues we just make the stage background\n // transparent and achieve the overlay using the shadow so to make the element below it visible\n // through the stage even if there are stacking issues.\n if (this.node.parentElement) {\n this.node.parentElement.removeChild(this.node);\n }\n }\n }\n\n /**\n * Highlights the dom element on the screen\n * @param {Element} element\n * @public\n */;\n _proto.highlight = function highlight(element) {\n if (!element || !element.node) {\n console.warn(\"Invalid element to highlight. Must be an instance of `Element`\");\n return;\n }\n\n // If highlighted element is not changed from last time\n if (element.isSame(this.highlightedElement)) {\n return;\n }\n\n // There might be hide timer from last time\n // which might be getting triggered\n this.window.clearTimeout(this.hideTimer);\n\n // Trigger the hook for highlight started\n element.onHighlightStarted();\n\n // Old element has been deselected\n if (this.highlightedElement && !this.highlightedElement.isSame(this.lastHighlightedElement)) {\n this.highlightedElement.onDeselected();\n }\n\n // get the position of element around which we need to draw\n var position = element.getCalculatedPosition();\n if (!position.canHighlight()) {\n return;\n }\n this.lastHighlightedElement = this.highlightedElement;\n this.highlightedElement = element;\n this.show();\n\n // Element has been highlighted\n this.highlightedElement.onHighlighted();\n }\n\n /**\n * Shows the overlay on whole screen\n * @public\n */;\n _proto.show = function show() {\n var _this = this;\n if (this.node && this.node.parentElement) {\n return;\n }\n this.attachNode();\n if (this.options.mask) {\n window.setTimeout(function () {\n _this.node.style.opacity = \"\" + _this.options.opacity;\n _this.node.style.position = \"fixed\";\n _this.node.style.left = \"0\";\n _this.node.style.top = \"0\";\n _this.node.style.bottom = \"0\";\n _this.node.style.right = \"0\";\n });\n }\n }\n\n /**\n * Returns the currently selected element\n * @returns {null|*}\n * @public\n */;\n _proto.getHighlightedElement = function getHighlightedElement() {\n return this.highlightedElement;\n }\n\n /**\n * Gets the element that was highlighted before current element\n * @returns {null|*}\n * @public\n */;\n _proto.getLastHighlightedElement = function getLastHighlightedElement() {\n return this.lastHighlightedElement;\n }\n\n /**\n * Removes the overlay and cancel any listeners\n * @public\n */;\n _proto.clear = function clear(immediate) {\n if (immediate === void 0) {\n immediate = false;\n }\n // Callback for when overlay is about to be reset\n if (this.options.onReset) {\n this.options.onReset(this.highlightedElement);\n }\n\n // Deselect the highlighted element if any\n if (this.highlightedElement) {\n var hideStage = true;\n this.highlightedElement.onDeselected(hideStage);\n }\n this.highlightedElement = null;\n this.lastHighlightedElement = null;\n if (!this.node) {\n return;\n }\n\n // Clear any existing timers and remove node\n this.window.clearTimeout(this.hideTimer);\n if (this.options.animate && !immediate) {\n this.node.style.opacity = \"0\";\n this.hideTimer = this.window.setTimeout(this.removeNode, ANIMATION_DURATION_MS);\n } else {\n this.removeNode();\n }\n }\n\n /**\n * Removes the overlay node if it exists\n * @private\n */;\n _proto.removeNode = function removeNode() {\n if (this.node && this.node.parentElement) {\n this.node.parentElement.removeChild(this.node);\n }\n }\n\n /**\n * Refreshes the overlay i.e. sets the size according to current window size\n * And moves the highlight around if necessary\n * @public\n */;\n _proto.refresh = function refresh() {\n // If no highlighted element, cancel the refresh\n if (!this.highlightedElement) {\n return;\n }\n\n // Reposition the stage and show popover\n this.highlightedElement.showPopover();\n this.highlightedElement.showStage();\n };\n return Overlay;\n}();\nexport { Overlay as default };","/**\n * Responsible for validating positions and is used\n * when manipulating positions across the application\n */\nvar Position = /*#__PURE__*/function () {\n /**\n * @param {number} left\n * @param {number} top\n * @param {number} right\n * @param {number} bottom\n */\n function Position(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$left = _ref.left,\n left = _ref$left === void 0 ? 0 : _ref$left,\n _ref$top = _ref.top,\n top = _ref$top === void 0 ? 0 : _ref$top,\n _ref$right = _ref.right,\n right = _ref$right === void 0 ? 0 : _ref$right,\n _ref$bottom = _ref.bottom,\n bottom = _ref$bottom === void 0 ? 0 : _ref$bottom;\n this.left = left;\n this.right = right;\n this.top = top;\n this.bottom = bottom;\n }\n\n /**\n * Checks if the position is valid to be highlighted\n * @returns {boolean}\n * @public\n */\n var _proto = Position.prototype;\n _proto.canHighlight = function canHighlight() {\n return this.left < this.right && this.top < this.bottom;\n };\n return Position;\n}();\nexport { Position as default };","import \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport { ANIMATION_DURATION_MS, CLASS_DISABLE_HIGHLIGHTED_ELEMENT, CLASS_DRIVER_HIGHLIGHTED_ELEMENT, CLASS_FIX_STACKING_CONTEXT, CLASS_POSITION_RELATIVE } from \"../common/constants\";\nimport { getStyleProperty as _getStyleProperty } from \"../common/utils\";\nimport Position from \"./position\";\n\n/**\n * Wrapper around DOMElements to enrich them\n * with the functionality necessary\n */\nvar Element = /*#__PURE__*/function () {\n /**\n * DOM element object\n * @param {Node|HTMLElement} node\n * @param {Object} options\n * @param {Popover} popover\n * @param {Stage} stage\n * @param {Overlay} overlay\n * @param {Window} window\n * @param {Document} document\n */\n function Element(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n node = _ref.node,\n options = _ref.options,\n popover = _ref.popover,\n stage = _ref.stage,\n overlay = _ref.overlay,\n window = _ref.window,\n document = _ref.document;\n this.node = node;\n this.document = document;\n this.window = window;\n this.options = options;\n this.overlay = overlay;\n this.popover = popover;\n this.stage = stage;\n this.animationTimeout = null;\n }\n\n /**\n * Checks if the current element is visible in viewport\n * @returns {boolean}\n * @public\n */\n var _proto = Element.prototype;\n _proto.isInView = function isInView() {\n var top = this.node.offsetTop;\n var left = this.node.offsetLeft;\n var width = this.node.offsetWidth;\n var height = this.node.offsetHeight;\n var el = this.node;\n while (el.offsetParent) {\n el = el.offsetParent;\n top += el.offsetTop;\n left += el.offsetLeft;\n }\n return top >= this.window.pageYOffset && left >= this.window.pageXOffset && top + height <= this.window.pageYOffset + this.window.innerHeight && left + width <= this.window.pageXOffset + this.window.innerWidth;\n }\n\n /**\n * Manually scrolls to the position of element if `scrollIntoView` fails\n * @private\n */;\n _proto.scrollManually = function scrollManually() {\n var elementRect = this.node.getBoundingClientRect();\n var absoluteElementTop = elementRect.top + this.window.pageYOffset;\n var middle = absoluteElementTop - this.window.innerHeight / 2;\n this.window.scrollTo(0, middle);\n }\n\n /**\n * Brings the element to middle of the view port if not in view\n * @public\n */;\n _proto.bringInView = function bringInView() {\n // If the node is not there or already is in view\n if (!this.node || this.isInView()) {\n return;\n }\n\n // If browser does not support scrollIntoView\n if (!this.node.scrollIntoView) {\n this.scrollManually();\n return;\n }\n try {\n this.node.scrollIntoView(this.options.scrollIntoViewOptions || {\n behavior: \"instant\",\n block: \"center\"\n });\n } catch (e) {\n // `block` option is not allowed in older versions of firefox, scroll manually\n this.scrollManually();\n }\n }\n\n /**\n * Gets the calculated position on screen, around which\n * we need to draw\n * @public\n * @return {Position}\n */;\n _proto.getCalculatedPosition = function getCalculatedPosition() {\n var body = this.document.body;\n var documentElement = this.document.documentElement;\n var window = this.window;\n var scrollTop = this.window.pageYOffset || documentElement.scrollTop || body.scrollTop;\n var scrollLeft = window.pageXOffset || documentElement.scrollLeft || body.scrollLeft;\n var elementRect = this.node.getBoundingClientRect();\n return new Position({\n top: elementRect.top + scrollTop,\n left: elementRect.left + scrollLeft,\n right: elementRect.left + scrollLeft + elementRect.width,\n bottom: elementRect.top + scrollTop + elementRect.height\n });\n }\n\n /**\n * Gets the popover for the current element if any\n * @returns {Popover|*}\n * @public\n */;\n _proto.getPopover = function getPopover() {\n return this.popover;\n }\n\n /**\n * Is called when element is about to be deselected\n * i.e. when moving the focus to next element of closing\n * @public\n */;\n _proto.onDeselected = function onDeselected(hideStage) {\n if (hideStage === void 0) {\n hideStage = false;\n }\n this.hidePopover();\n if (hideStage) {\n this.hideStage();\n }\n this.removeHighlightClasses();\n\n // If there was any animation in progress, cancel that\n this.window.clearTimeout(this.animationTimeout);\n if (this.options.onDeselected) {\n this.options.onDeselected(this);\n }\n }\n\n /**\n * Checks if the given element is same as the current element\n * @param {Element} element\n * @returns {boolean}\n * @public\n */;\n _proto.isSame = function isSame(element) {\n if (!element || !element.node) {\n return false;\n }\n return element.node === this.node;\n }\n\n /**\n * Is called when the element is about to be highlighted\n * @public\n */;\n _proto.onHighlightStarted = function onHighlightStarted() {\n if (this.options.onHighlightStarted) {\n this.options.onHighlightStarted(this);\n }\n }\n\n /**\n * Is called when the element has been successfully highlighted\n * @public\n */;\n _proto.onHighlighted = function onHighlighted() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var highlightedElement = this;\n if (!highlightedElement.isInView()) {\n highlightedElement.bringInView();\n }\n\n // Show the popover and stage once the item has been\n // brought in the view, this would allow us to handle\n // the cases where the container has scroll overflow\n this.showPopover();\n this.showStage();\n this.addHighlightClasses();\n if (this.options.onHighlighted) {\n this.options.onHighlighted(this);\n }\n }\n\n /**\n * Removes the stacking context fix classes and the highlighter classes\n * @private\n */;\n _proto.removeHighlightClasses = function removeHighlightClasses() {\n this.node.classList.remove(CLASS_DRIVER_HIGHLIGHTED_ELEMENT);\n this.node.classList.remove(CLASS_POSITION_RELATIVE);\n this.node.classList.remove(CLASS_DISABLE_HIGHLIGHTED_ELEMENT);\n var stackFixes = this.document.querySelectorAll(\".\" + CLASS_FIX_STACKING_CONTEXT);\n for (var counter = 0; counter < stackFixes.length; counter++) {\n stackFixes[counter].classList.remove(CLASS_FIX_STACKING_CONTEXT);\n }\n }\n\n /**\n * Adds the highlight class on the current element and \"fixes\"\n * the parent nodes if they\n * @private\n */;\n _proto.addHighlightClasses = function addHighlightClasses() {\n this.node.classList.add(CLASS_DRIVER_HIGHLIGHTED_ELEMENT);\n if (this.options.disableHighlightedElement) {\n this.node.classList.add(CLASS_DISABLE_HIGHLIGHTED_ELEMENT);\n }\n\n // Don't make relative if element already has some position set\n if (this.canMakeRelative()) {\n this.node.classList.add(CLASS_POSITION_RELATIVE);\n }\n\n // Check and re-define the stacking context\n this.fixStackingContext();\n }\n\n /**\n * Walks through the parents of the current element and fixes\n * the stacking context\n * @private\n */;\n _proto.fixStackingContext = function fixStackingContext() {\n var parentNode = this.node.parentNode;\n while (parentNode) {\n if (!parentNode.tagName || parentNode.tagName.toLowerCase() === \"body\") {\n break;\n }\n var zIndex = _getStyleProperty(parentNode, \"z-index\");\n var opacity = parseFloat(_getStyleProperty(parentNode, \"opacity\"));\n var transform = _getStyleProperty(parentNode, \"transform\", true);\n var transformStyle = _getStyleProperty(parentNode, \"transform-style\", true);\n var transformBox = _getStyleProperty(parentNode, \"transform-box\", true);\n var filter = _getStyleProperty(parentNode, \"filter\", true);\n var perspective = _getStyleProperty(parentNode, \"perspective\", true);\n\n // Stacking context gets disturbed if\n // - Parent has z-index\n // - Opacity is below 0\n // - Filter/transform or perspective is applied\n if (/[0-9]+/.test(zIndex) || opacity < 1 || transform && transform !== \"none\" || transformStyle && transformStyle !== \"flat\" || transformBox && transformBox !== \"border-box\" || filter && filter !== \"none\" || perspective && perspective !== \"none\") {\n parentNode.classList.add(CLASS_FIX_STACKING_CONTEXT);\n }\n if (this.options.noFixStackingCss) {\n parentNode.classList.remove(CLASS_FIX_STACKING_CONTEXT);\n }\n parentNode = parentNode.parentNode;\n }\n }\n\n /**\n * Checks if we can make the current element relative or not\n * @return {boolean}\n * @private\n */;\n _proto.canMakeRelative = function canMakeRelative() {\n var currentPosition = this.getStyleProperty(\"position\");\n var avoidPositionsList = [\"absolute\", \"fixed\", \"relative\"];\n\n // Because if the element has any of these positions, making it\n // relative will break the UI\n return !avoidPositionsList.includes(currentPosition);\n }\n\n /**\n * Get current element's CSS attribute value\n * @param {string} property\n * @returns string\n * @private\n */;\n _proto.getStyleProperty = function getStyleProperty(property) {\n return _getStyleProperty(this.node, property);\n }\n\n /**\n * Shows the stage behind the element\n * @public\n */;\n _proto.showStage = function showStage() {\n this.stage.show(this.getCalculatedPosition());\n }\n\n /**\n * Gets the DOM Element behind this element\n * @returns {Node|HTMLElement|*}\n * @public\n */;\n _proto.getNode = function getNode() {\n return this.node;\n }\n\n /**\n * Hides the stage\n * @public\n */;\n _proto.hideStage = function hideStage() {\n this.stage.hide();\n }\n\n /**\n * Hides the popover if possible\n * @public\n */;\n _proto.hidePopover = function hidePopover() {\n if (!this.popover) {\n return;\n }\n this.popover.hide();\n }\n\n /**\n * Shows the popover on the current element\n * @public\n */;\n _proto.showPopover = function showPopover() {\n var _this = this;\n if (!this.popover) {\n return;\n }\n var showAtPosition = this.getCalculatedPosition();\n\n // For first highlight, show it immediately because there won't be any animation\n var showAfterMs = ANIMATION_DURATION_MS;\n // If animation is disabled or if it is the first display, show it immediately\n if (!this.options.animate || !this.overlay.lastHighlightedElement) {\n showAfterMs = 0;\n }\n\n // @todo remove timeout and handle with CSS\n this.animationTimeout = this.window.setTimeout(function () {\n _this.popover.show(showAtPosition);\n }, showAfterMs);\n }\n\n /**\n * @returns {{height: number, width: number}}\n * @public\n */;\n _proto.getFullPageSize = function getFullPageSize() {\n // eslint-disable-next-line prefer-destructuring\n var body = this.document.body;\n var html = this.document.documentElement;\n return {\n height: Math.max(body.scrollHeight, body.offsetHeight, html.scrollHeight, html.offsetHeight),\n width: Math.max(body.scrollWidth, body.offsetWidth, html.scrollWidth, html.offsetWidth)\n };\n }\n\n /**\n * Gets the size for popover\n * @returns {{height: number, width: number}}\n * @public\n */;\n _proto.getSize = function getSize() {\n return {\n height: Math.max(this.node.scrollHeight, this.node.offsetHeight),\n width: Math.max(this.node.scrollWidth, this.node.offsetWidth)\n };\n };\n return Element;\n}();\nexport { Element as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport \"core-js/modules/es.symbol.js\";\nimport \"core-js/modules/es.symbol.description.js\";\nimport Element from \"./element\";\nimport { CLASS_BTN_DISABLED, CLASS_NEXT_STEP_BTN, CLASS_POPOVER_DESCRIPTION, CLASS_POPOVER_FOOTER, CLASS_POPOVER_NO_MASK, CLASS_POPOVER_TIP, CLASS_POPOVER_TITLE, CLASS_PREV_STEP_BTN, CLASS_SKIP_BTN, ID_POPOVER, POPOVER_HTML } from \"../common/constants\";\nimport { createNodeFromString } from \"../common/utils\";\n\n/**\n * Popover that is displayed on top of the highlighted element\n */\nvar Popover = /*#__PURE__*/function (_Element) {\n _inheritsLoose(Popover, _Element);\n /**\n * @param {Object} options\n * @param {Window} window\n * @param {Document} document\n */\n function Popover(options, window, document) {\n var _this;\n _this = _Element.call(this) || this;\n _this.options = _extends({\n isFirst: true,\n isLast: true,\n totalCount: 1,\n currentIndex: 0,\n offset: 0,\n showButtons: true,\n skipBtnText: \"跳过\",\n doneBtnText: \"完成\",\n startBtnText: \"下一步\",\n nextBtnText: \"下一步\",\n prevBtnText: \"上一步\"\n }, options);\n if (_this.options.showStage) {\n _this.options.doneBtnText += \" (\" + _this.options.totalCount + \"/\" + _this.options.totalCount + \")\";\n _this.options.nextBtnText += \" (\" + (_this.options.currentIndex + 1) + \"/\" + _this.options.totalCount + \")\";\n }\n _this.window = window;\n _this.document = document;\n return _this;\n }\n\n /**\n * Prepares the dom element for popover\n * @private\n */\n var _proto = Popover.prototype;\n _proto.attachNode = function attachNode() {\n var popover = this.document.getElementById(ID_POPOVER);\n if (popover) {\n popover.parentElement.removeChild(popover);\n }\n // popover = createNodeFromString(POPOVER_HTML(this.options.className, !this.options.mask ? CLASS_POPOVER_NO_MASK: ''));\n popover = createNodeFromString(POPOVER_HTML(this.options.className, !this.options.mask ? CLASS_POPOVER_NO_MASK : \"\"));\n document.body.appendChild(popover);\n this.node = popover;\n this.tipNode = popover.querySelector(\".\" + CLASS_POPOVER_TIP);\n this.titleNode = popover.querySelector(\".\" + CLASS_POPOVER_TITLE);\n this.descriptionNode = popover.querySelector(\".\" + CLASS_POPOVER_DESCRIPTION);\n this.footerNode = popover.querySelector(\".\" + CLASS_POPOVER_FOOTER);\n this.nextBtnNode = popover.querySelector(\".\" + CLASS_NEXT_STEP_BTN);\n this.prevBtnNode = popover.querySelector(\".\" + CLASS_PREV_STEP_BTN);\n this.skipBtnNode = popover.querySelector(\".\" + CLASS_SKIP_BTN);\n };\n _proto.destoryNode = function destoryNode() {\n var popover = this.document.getElementById(ID_POPOVER);\n if (popover) {\n popover.parentElement.removeChild(popover);\n }\n }\n\n /**\n * Gets the title node for the popover\n * @returns {Element | null | *}\n * @public\n */;\n _proto.getTitleNode = function getTitleNode() {\n return this.titleNode;\n }\n\n /**\n * Gets the description node for the popover\n * @returns {Element | null | *}\n * @public\n */;\n _proto.getDescriptionNode = function getDescriptionNode() {\n return this.descriptionNode;\n }\n\n /**\n * Hides the popover\n * @public\n */;\n _proto.hide = function hide() {\n // If hide is called when the node isn't created yet\n if (!this.node) {\n return;\n }\n this.node.style.display = \"none\";\n }\n\n /**\n * Sets the default state for the popover\n * @private\n */;\n _proto.setInitialState = function setInitialState() {\n this.node.style.display = \"block\";\n this.node.style.left = \"0\";\n this.node.style.top = \"0\";\n this.node.style.bottom = \"\";\n this.node.style.right = \"\";\n\n // Remove the positional classes from tip\n this.node.querySelector(\".\" + CLASS_POPOVER_TIP).className = CLASS_POPOVER_TIP;\n }\n\n /**\n * 弹窗的形式展示popover\n */;\n _proto.alertShow = function alertShow() {\n this.attachNode();\n this.node.style.display = \"block\";\n this.node.style.left = \"50%\";\n this.node.style.top = \"50%\";\n this.node.style.transform = \"translateX(-50%) translateY(-50%)\";\n this.titleNode.innerHTML = this.options.title;\n this.descriptionNode.innerHTML = this.options.description || \"\";\n this.renderFooter();\n }\n\n /**\n * Shows the popover at the given position\n * @param {Position} position\n * @public\n */;\n _proto.show = function show(position) {\n this.attachNode();\n this.setInitialState();\n\n // Set the title and descriptions\n this.titleNode.innerHTML = this.options.title;\n this.descriptionNode.innerHTML = this.options.description || \"\";\n this.renderFooter();\n\n // Position the popover around the given position\n switch (this.options.position) {\n case \"left\":\n case \"left-top\":\n this.positionOnLeft(position);\n break;\n case \"left-center\":\n this.positionOnLeftCenter(position);\n break;\n case \"left-bottom\":\n this.positionOnLeftBottom(position);\n break;\n case \"right\":\n case \"right-top\":\n this.positionOnRight(position);\n break;\n case \"right-center\":\n this.positionOnRightCenter(position);\n break;\n case \"right-bottom\":\n this.positionOnRightBottom(position);\n break;\n case \"top\":\n case \"top-left\":\n this.positionOnTop(position);\n break;\n case \"top-center\":\n this.positionOnTopCenter(position);\n break;\n case \"top-right\":\n this.positionOnTopRight(position);\n break;\n case \"bottom\":\n case \"bottom-left\":\n this.positionOnBottom(position);\n break;\n case \"bottom-center\":\n this.positionOnBottomCenter(position);\n break;\n case \"bottom-right\":\n this.positionOnBottomRight(position);\n break;\n case \"mid-center\":\n this.positionOnMidCenter(position);\n break;\n case \"auto\":\n default:\n this.autoPosition(position);\n break;\n }\n\n // Bring the popover in view port once it is displayed\n this.bringInView();\n }\n\n /**\n * Enables, disables buttons, sets the text and\n * decides if to show them or not\n * @private\n */;\n _proto.renderFooter = function renderFooter() {\n this.nextBtnNode.innerHTML = this.options.nextBtnText;\n this.prevBtnNode.innerHTML = this.options.prevBtnText;\n this.skipBtnNode.innerHTML = this.options.skipBtnText;\n\n // const hasSteps = this.options.totalCount && this.options.totalCount !== 1;\n // const hasSteps = this.options.totalCount;\n\n // 只有一步的情况,隐藏跳过\n if (this.options.totalCount && this.options.totalCount === 1 || !this.options.totalCount) {\n this.skipBtnNode.style.display = \"none\";\n }\n if (this.options.showSkipBtn) {\n this.skipBtnNode.style.display = \"block\";\n }\n\n // If there was only one item, hide the buttons\n if (!this.options.showButtons) {\n this.footerNode.style.display = \"none\";\n return;\n }\n\n // If this is just a single highlighted element i.e. there\n // are no other steps to go to – just hide the navigation buttons\n // if (!hasSteps) {\n // this.nextBtnNode.style.display = 'none';\n // this.prevBtnNode.style.display = 'none';\n // // this.closeBtnNode.classList.add(CLASS_CLOSE_ONLY_BTN);\n // } else {\n // // @todo modify CSS to use block\n // this.nextBtnNode.style.display = 'inline-block';\n // this.prevBtnNode.style.display = 'inline-block';\n // // this.closeBtnNode.classList.remove(CLASS_CLOSE_ONLY_BTN);\n // }\n\n this.footerNode.style.display = \"block\";\n if (this.options.isFirst) {\n this.prevBtnNode.classList.add(CLASS_BTN_DISABLED);\n this.nextBtnNode.innerHTML = this.options.startBtnText;\n } else {\n this.prevBtnNode.classList.remove(CLASS_BTN_DISABLED);\n }\n if (this.options.isLast) {\n this.nextBtnNode.innerHTML = this.options.doneBtnText;\n } else {\n this.nextBtnNode.innerHTML = this.options.nextBtnText;\n }\n }\n\n /**\n * Shows the popover on the left of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnLeft = function positionOnLeft(elementPosition) {\n var popoverWidth = this.getSize().width;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.left = elementPosition.left - popoverWidth - popoverMargin + \"px\";\n this.node.style.top = elementPosition.top + this.options.offset - this.options.padding + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n this.tipNode.classList.add(\"right\");\n }\n\n /**\n * Shows the popover on the left of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnLeftBottom = function positionOnLeftBottom(elementPosition) {\n var popoverDimensions = this.getSize();\n var popoverWidth = popoverDimensions.width;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.left = elementPosition.left - popoverWidth - popoverMargin + \"px\";\n this.node.style.top = elementPosition.bottom + this.options.padding + this.options.offset - popoverDimensions.height + \"px\";\n this.node.style.bottom = \"\";\n this.node.style.right = \"\";\n this.tipNode.classList.add(\"right\", \"position-bottom\");\n }\n\n /**\n * Shows the popover on the left center of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnLeftCenter = function positionOnLeftCenter(elementPosition) {\n var popoverDimensions = this.getSize();\n var popoverWidth = popoverDimensions.width;\n var popoverHeight = popoverDimensions.height;\n var popoverCenter = popoverHeight / 2;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n var elementCenter = (elementPosition.bottom - elementPosition.top) / 2;\n var topCenterPosition = elementPosition.top - popoverCenter + elementCenter + this.options.offset;\n this.node.style.left = elementPosition.left - popoverWidth - popoverMargin + \"px\";\n this.node.style.top = topCenterPosition + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n this.tipNode.classList.add(\"right\", \"position-center\");\n }\n\n /**\n * Shows the popover on the right of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnRight = function positionOnRight(elementPosition) {\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.left = elementPosition.right + popoverMargin + \"px\";\n this.node.style.top = elementPosition.top + this.options.offset - this.options.padding + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n this.tipNode.classList.add(\"left\");\n }\n\n /**\n * Shows the popover on the right of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnRightCenter = function positionOnRightCenter(elementPosition) {\n var popoverDimensions = this.getSize();\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n var popoverHeight = popoverDimensions.height;\n var popoverCenter = popoverHeight / 2;\n var elementCenter = (elementPosition.bottom - elementPosition.top) / 2;\n var topCenterPosition = elementPosition.top - popoverCenter + elementCenter + this.options.offset;\n this.node.style.left = elementPosition.right + popoverMargin + \"px\";\n this.node.style.top = topCenterPosition + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n this.tipNode.classList.add(\"left\", \"position-center\");\n }\n\n /**\n * Shows the popover on the right of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnRightBottom = function positionOnRightBottom(elementPosition) {\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n var popoverDimensions = this.getSize();\n this.node.style.left = elementPosition.right + popoverMargin + \"px\";\n this.node.style.top = elementPosition.bottom + this.options.padding + this.options.offset - popoverDimensions.height + \"px\";\n this.node.style.bottom = \"\";\n this.node.style.right = \"\";\n this.tipNode.classList.add(\"left\", \"position-bottom\");\n }\n\n /**\n * Shows the popover on the top of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnTop = function positionOnTop(elementPosition) {\n var popoverHeight = this.getSize().height;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.top = elementPosition.top - popoverHeight - popoverMargin + \"px\";\n this.node.style.left = elementPosition.left - this.options.padding + this.options.offset + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n this.tipNode.classList.add(\"bottom\");\n }\n\n /**\n * Shows the popover on the top center of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnTopCenter = function positionOnTopCenter(elementPosition) {\n var dimensions = this.getSize();\n var popoverHeight = dimensions.height;\n var popoverWidth = dimensions.width / 2;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n var nodeCenter = this.options.offset + elementPosition.left + (elementPosition.right - elementPosition.left) / 2;\n this.node.style.top = elementPosition.top - popoverHeight - popoverMargin + \"px\";\n this.node.style.left = nodeCenter - popoverWidth - this.options.padding + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n\n // Add the tip at the top center\n this.tipNode.classList.add(\"bottom\", \"position-center\");\n }\n\n /**\n * Shows the popover on the top right of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnTopRight = function positionOnTopRight(elementPosition) {\n var dimensions = this.getSize();\n var popoverHeight = dimensions.height;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.top = elementPosition.top - popoverHeight - popoverMargin + \"px\";\n this.node.style.left = elementPosition.right + this.options.padding + this.options.offset - dimensions.width + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n\n // Add the tip at the top center\n this.tipNode.classList.add(\"bottom\", \"position-right\");\n }\n\n /**\n * Shows the popover on the bottom of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnBottom = function positionOnBottom(elementPosition) {\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.top = elementPosition.bottom + popoverMargin + \"px\";\n this.node.style.left = elementPosition.left - this.options.padding + this.options.offset + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n this.tipNode.classList.add(\"top\");\n }\n\n /**\n * Shows the popover on the bottom-center of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnBottomCenter = function positionOnBottomCenter(elementPosition) {\n var popoverWidth = this.getSize().width / 2;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n var nodeCenter = this.options.offset + elementPosition.left + (elementPosition.right - elementPosition.left) / 2;\n this.node.style.top = elementPosition.bottom + popoverMargin + \"px\";\n this.node.style.left = nodeCenter - popoverWidth - this.options.padding + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n\n // Add the tip at the top center\n this.tipNode.classList.add(\"top\", \"position-center\");\n }\n\n /**\n * Shows the popover on the bottom-right of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnBottomRight = function positionOnBottomRight(elementPosition) {\n var dimensions = this.getSize();\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n this.node.style.top = elementPosition.bottom + popoverMargin + \"px\";\n this.node.style.left = elementPosition.right + this.options.padding + this.options.offset - dimensions.width + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n\n // Add the tip at the top center\n this.tipNode.classList.add(\"top\", \"position-right\");\n }\n\n /**\n * Shows the popover on the mid-center of the given position\n * @param {Position} elementPosition\n * @private\n */;\n _proto.positionOnMidCenter = function positionOnMidCenter(elementPosition) {\n var popoverDimensions = this.getSize();\n var popoverHeight = popoverDimensions.height;\n var popoverWidth = popoverDimensions.width / 2;\n var popoverCenter = popoverHeight / 2;\n var elementCenter = (elementPosition.bottom - elementPosition.top) / 2;\n var topCenterPosition = elementPosition.top - popoverCenter + elementCenter + this.options.offset;\n var nodeCenter = this.options.offset + elementPosition.left + (elementPosition.right - elementPosition.left) / 2;\n this.node.style.top = topCenterPosition + \"px\";\n this.node.style.left = nodeCenter - popoverWidth - this.options.padding + \"px\";\n this.node.style.right = \"\";\n this.node.style.bottom = \"\";\n\n // Add the tip at the top center\n this.tipNode.classList.add(\"mid-center\");\n }\n\n /**\n * Automatically positions the popover around the given position\n * such that the element and popover remain in view\n * @todo add the left and right positioning decisions\n * @param {Position} elementPosition\n * @private\n */;\n _proto.autoPosition = function autoPosition(elementPosition) {\n var pageSize = this.getFullPageSize();\n var popoverSize = this.getSize();\n var pageHeight = pageSize.height;\n var popoverHeight = popoverSize.height;\n var popoverMargin = this.options.padding + 10; // adding 10 to give it a little distance from the element\n\n var pageHeightAfterPopOver = elementPosition.bottom + popoverHeight + popoverMargin;\n\n // If adding popover would go out of the window height, then show it to the top\n if (pageHeightAfterPopOver >= pageHeight) {\n this.positionOnTop(elementPosition);\n } else {\n this.positionOnBottom(elementPosition);\n }\n };\n return Popover;\n}(Element);\nexport { Popover as default };","import _inheritsLoose from \"@babel/runtime/helpers/inheritsLoose\";\nimport { CLASS_STAGE_NO_ANIMATION, ID_STAGE, STAGE_HTML } from \"../common/constants\";\nimport { createNodeFromString } from \"../common/utils\";\nimport Element from \"./element\";\n\n/**\n * Stage behind the highlighted element to give it a little\n * highlight from rest of the page\n */\nvar Stage = /*#__PURE__*/function (_Element) {\n _inheritsLoose(Stage, _Element);\n /**\n * @param {Object} options\n * @param {Window} window\n * @param {Document} document\n */\n function Stage(options, window, document) {\n var _this;\n _this = _Element.call(this) || this;\n _this.options = options;\n _this.window = window;\n _this.document = document;\n return _this;\n }\n\n /**\n * Prepares the DOM element if not already there\n * @private\n */\n var _proto = Stage.prototype;\n _proto.attachNode = function attachNode() {\n var stage = this.document.getElementById(ID_STAGE);\n if (!stage) {\n stage = createNodeFromString(STAGE_HTML);\n document.body.appendChild(stage);\n }\n this.node = stage;\n if (!this.options.animate) {\n this.node.classList.add(CLASS_STAGE_NO_ANIMATION);\n } else {\n this.node.classList.remove(CLASS_STAGE_NO_ANIMATION);\n }\n }\n\n /**\n * Simply hides the stage\n * @public\n */;\n _proto.hide = function hide() {\n if (!this.node || !this.node.parentElement) {\n return;\n }\n this.node.parentElement.removeChild(this.node);\n }\n\n /**\n * Makes it visible and sets the default properties\n * @private\n */;\n _proto.setInitialStyle = function setInitialStyle() {\n this.node.style.display = \"block\";\n this.node.style.left = \"0\";\n this.node.style.top = \"0\";\n this.node.style.bottom = \"\";\n this.node.style.right = \"\";\n }\n\n /**\n * Shows the stage at provided position\n * @param {Position} position\n * @public\n */;\n _proto.show = function show(position) {\n this.attachNode();\n this.setInitialStyle();\n\n // Make it two times the padding because, half will be given on left and half on right\n var requiredPadding = this.options.padding * 2;\n var width = position.right - position.left + requiredPadding;\n var height = position.bottom - position.top + requiredPadding;\n\n // Show the stage\n this.node.style.position = \"absolute\";\n this.node.style.width = width + \"px\";\n this.node.style.height = height + \"px\";\n this.node.style.top = position.top - requiredPadding / 2 + \"px\";\n this.node.style.left = position.left - requiredPadding / 2 + \"px\";\n if (this.options.mask) {\n this.node.style.backgroundColor = this.options.stageBackground;\n this.node.style.display = \"block\";\n } else {\n this.node.style.display = \"none\";\n }\n };\n return Stage;\n}(Element);\nexport { Stage as default };","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport Overlay from \"./core/overlay\";\nimport Element from \"./core/element\";\nimport Popover from \"./core/popover\";\nimport GuideModal from \"./compontents/guide\";\nimport { ALLOW_KEYBOARD_CONTROL, CLASS_CLOSE_BTN, CLASS_NEXT_STEP_BTN, CLASS_PREV_STEP_BTN, CLASS_SKIP_BTN, ESC_KEY_CODE, ID_POPOVER, LEFT_KEY_CODE, OVERLAY_OPACITY, OVERLAY_PADDING, RIGHT_KEY_CODE, SHOULD_ANIMATE_OVERLAY, SHOULD_DISABLE_HIGHLIGHTED_ELEMENT, SHOULD_HAS_MASK, SHOULD_OUTSIDE_CLICK_CLOSE, SHOULD_OUTSIDE_CLICK_NEXT, SHOW_STAGE } from \"./common/constants\";\nimport Stage from \"./core/stage\";\nimport { isDomElement } from \"./common/utils\";\nimport \"./index.less\";\n\n/**\n * Plugin class that drives the plugin\n */\nvar Driver = /*#__PURE__*/function () {\n /**\n * @param {Object} options\n */\n function Driver(options) {\n if (options === void 0) {\n options = {};\n }\n this.options = _extends({\n animate: SHOULD_ANIMATE_OVERLAY,\n // Whether to animate or not\n opacity: OVERLAY_OPACITY,\n // Overlay opacity\n padding: OVERLAY_PADDING,\n // Spacing around the element from the overlay\n scrollIntoViewOptions: null,\n // Options to be passed to `scrollIntoView`\n allowClose: SHOULD_OUTSIDE_CLICK_CLOSE,\n // Whether to close overlay on click outside the element\n keyboardControl: ALLOW_KEYBOARD_CONTROL,\n // Whether to allow controlling through keyboard or not\n overlayClickNext: SHOULD_OUTSIDE_CLICK_NEXT,\n // Whether to move next on click outside the element\n stageBackground: \"#ffffff\",\n // Background color for the stage\n mask: SHOULD_HAS_MASK,\n showStage: SHOW_STAGE,\n disableHighlightedElement: SHOULD_DISABLE_HIGHLIGHTED_ELEMENT,\n onHighlightStarted: function onHighlightStarted() {\n return null;\n },\n // When element is about to be highlighted\n onHighlighted: function onHighlighted() {\n return null;\n },\n // When element has been highlighted\n onDeselected: function onDeselected() {\n return null;\n },\n // When the element has been deselected\n onReset: function onReset() {\n return null;\n },\n // When overlay is about to be cleared\n onNext: function onNext() {\n return null;\n },\n // When next button is clicked\n onPrevious: function onPrevious() {\n return null;\n }\n }, options);\n this.document = document;\n this.window = window;\n this.isActivated = false;\n this.isAlertActivated = false;\n this.steps = []; // steps to be presented if any\n this.currentStep = 0; // index for the currently highlighted step\n this.currentMovePrevented = false; // If the current move was prevented\n\n this.overlay = new Overlay(this.options, window, document);\n this.onResize = this.onResize.bind(this);\n this.onKeyUp = this.onKeyUp.bind(this);\n this.onClick = this.onClick.bind(this);\n this.moveNext = this.moveNext.bind(this);\n this.movePrevious = this.movePrevious.bind(this);\n this.preventMove = this.preventMove.bind(this);\n\n // Event bindings\n this.bind();\n }\n\n /**\n * Getter for steps property\n * @readonly\n * @public\n */\n var _proto = Driver.prototype;\n _proto.getSteps = function getSteps() {\n return this.steps;\n }\n\n /**\n * Setter for steps property\n * @param steps\n * @public\n */;\n _proto.setSteps = function setSteps(steps) {\n this.steps = steps;\n }\n\n /**\n * Binds any DOM events listeners\n * @todo: add throttling in all the listeners\n * @private\n */;\n _proto.bind = function bind() {\n this.window.addEventListener(\"resize\", this.onResize, false);\n this.window.addEventListener(\"keyup\", this.onKeyUp, false);\n\n // Binding both touch and click results in popup getting shown and then immediately get hidden.\n // Adding the check to not bind the click event if the touch is supported i.e. on mobile devices\n // Issue: https://github.com/kamranahmedse/driver.js/issues/150\n if (!(\"ontouchstart\" in document.documentElement)) {\n this.window.addEventListener(\"click\", this.onClick, false);\n } else {\n this.window.addEventListener(\"touchstart\", this.onClick, false);\n }\n }\n\n /**\n * Removes the popover if clicked outside the highlighted element\n * or outside the\n * @param e\n * @private\n */;\n _proto.onClick = function onClick(e) {\n if (this.isAlertActivated) {\n // alert弹窗形式\n var _nextClicked = e.target.classList.contains(CLASS_NEXT_STEP_BTN);\n var _closeClicked = e.target.classList.contains(CLASS_CLOSE_BTN) || e.target.classList.contains(CLASS_SKIP_BTN);\n if (_closeClicked) {\n this.reset();\n this.popover.hide();\n if (this.popover.options.onSkip) {\n this.popover.options.onSkip();\n }\n return;\n }\n if (_nextClicked) {\n this.handleNext();\n this.popover.hide();\n if (this.popover.options.onNext) {\n this.popover.options.onNext();\n }\n }\n return;\n }\n if ((!this.isActivated || !this.hasHighlightedElement()) && !this.isAlertActivated) {\n return;\n }\n\n // Stop the event propagation on click/tap. `onClick` handles\n // both touch and click events – which on some browsers causes\n // the click to close the tour\n e.stopPropagation();\n var highlightedElement = this.overlay.getHighlightedElement();\n var popover = this.document.getElementById(ID_POPOVER);\n var clickedHighlightedElement = highlightedElement.node.contains(e.target);\n var clickedPopover = popover && popover.contains(e.target);\n\n // Perform the 'Next' operation when clicked outside the highlighted element\n if (!clickedHighlightedElement && !clickedPopover && this.options.overlayClickNext) {\n this.handleNext();\n return;\n }\n\n // Remove the overlay If clicked outside the highlighted element\n if (!clickedHighlightedElement && !clickedPopover && this.options.allowClose) {\n this.reset();\n return;\n }\n var nextClicked = e.target.classList && e.target.classList.contains(CLASS_NEXT_STEP_BTN);\n var prevClicked = e.target.classList && e.target.classList.contains(CLASS_PREV_STEP_BTN);\n var closeClicked = e.target.classList && e.target.classList.contains(CLASS_CLOSE_BTN);\n var skipClicked = e.target.classList && e.target.classList.contains(CLASS_SKIP_BTN);\n if (closeClicked) {\n this.reset();\n return;\n }\n if (skipClicked) {\n this.reset();\n this.handleSkip();\n return;\n }\n if (nextClicked) {\n this.handleNext();\n } else if (prevClicked) {\n this.handlePrevious();\n }\n }\n\n /**\n * Handler for the onResize DOM event\n * Makes sure highlighted element stays at valid position\n * @private\n */;\n _proto.onResize = function onResize() {\n if (!this.isActivated) {\n return;\n }\n this.refresh();\n }\n\n /**\n * Refreshes and repositions the popover and the overlay\n */;\n _proto.refresh = function refresh() {\n this.overlay.refresh();\n }\n\n /**\n * Clears the overlay on escape key process\n * @param event\n * @private\n */;\n _proto.onKeyUp = function onKeyUp(event) {\n // If driver is not active or keyboard control is disabled\n if (!this.isActivated || !this.options.keyboardControl) {\n return;\n }\n\n // If escape was pressed and it is allowed to click outside to close\n if (event.keyCode === ESC_KEY_CODE && this.options.allowClose) {\n this.reset();\n return;\n }\n\n // If there is no highlighted element or there is a highlighted element\n // without popover or if the popover does not allow buttons - ignore\n var highlightedElement = this.getHighlightedElement();\n if (!highlightedElement || !highlightedElement.popover) {\n return;\n }\n if (event.keyCode === RIGHT_KEY_CODE) {\n this.handleNext();\n } else if (event.keyCode === LEFT_KEY_CODE) {\n this.handlePrevious();\n }\n }\n\n /**\n * Moves to the previous step if possible\n * otherwise resets the overlay\n * @public\n */;\n _proto.movePrevious = function movePrevious() {\n var previousStep = this.steps[this.currentStep - 1];\n if (!previousStep) {\n this.reset();\n return;\n }\n this.overlay.highlight(previousStep);\n this.currentStep -= 1;\n }\n\n /**\n * Prevents the current move. Useful in `onNext` if you want to\n * perform some asynchronous task and manually move to next step\n * @public\n */;\n _proto.preventMove = function preventMove() {\n this.currentMovePrevented = true;\n }\n\n /**\n * Handles the internal \"move to next\" event\n * @private\n */;\n _proto.handleNext = function handleNext() {\n this.currentMovePrevented = false;\n\n // Call the bound `onNext` handler if available\n var currentStep = this.steps[this.currentStep];\n if (currentStep && currentStep.options && currentStep.options.onNext) {\n currentStep.options.onNext(this.overlay.highlightedElement);\n }\n if (this.currentMovePrevented) {\n return;\n }\n this.moveNext();\n };\n _proto.handleSkip = function handleSkip() {\n this.currentMovePrevented = false;\n\n // Call the bound `onSkip` handler if available\n var currentStep = this.steps[this.currentStep];\n if (currentStep && currentStep.options && currentStep.options.onSkip) {\n currentStep.options.onSkip();\n }\n }\n\n /**\n * Handles the internal \"move to previous\" event\n * @private\n */;\n _proto.handlePrevious = function handlePrevious() {\n this.currentMovePrevented = false;\n\n // Call the bound `onPrevious` handler if available\n var currentStep = this.steps[this.currentStep];\n if (currentStep && currentStep.options && currentStep.options.onPrevious) {\n currentStep.options.onPrevious(this.overlay.highlightedElement);\n }\n if (this.currentMovePrevented) {\n return;\n }\n this.movePrevious();\n }\n\n /**\n * Moves to the next step if possible\n * otherwise resets the overlay\n * @public\n */;\n _proto.moveNext = function moveNext() {\n var nextStep = this.steps[this.currentStep + 1];\n if (!nextStep) {\n this.reset();\n return;\n }\n this.overlay.highlight(nextStep);\n this.currentStep += 1;\n }\n\n /**\n * @returns {boolean}\n * @public\n */;\n _proto.hasNextStep = function hasNextStep() {\n return !!this.steps[this.currentStep + 1];\n }\n\n /**\n * @returns {boolean}\n * @public\n */;\n _proto.hasPreviousStep = function hasPreviousStep() {\n return !!this.steps[this.currentStep - 1];\n }\n\n /**\n * Resets the steps if any and clears the overlay\n * @param {boolean} immediate\n * @public\n */;\n _proto.reset = function reset(immediate) {\n if (immediate === void 0) {\n immediate = false;\n }\n this.currentStep = 0;\n this.isActivated = false;\n this.isAlertActivated = false;\n this.overlay.clear(immediate);\n }\n\n /**\n * Checks if there is any highlighted element or not\n * @returns {boolean}\n * @public\n */;\n _proto.hasHighlightedElement = function hasHighlightedElement() {\n var highlightedElement = this.overlay.getHighlightedElement();\n return highlightedElement && highlightedElement.node;\n }\n\n /**\n * Gets the currently highlighted element in overlay\n * @returns {Element}\n * @public\n */;\n _proto.getHighlightedElement = function getHighlightedElement() {\n return this.overlay.getHighlightedElement();\n }\n\n /**\n * Gets the element that was highlighted before currently highlighted element\n * @returns {Element}\n * @public\n */;\n _proto.getLastHighlightedElement = function getLastHighlightedElement() {\n return this.overlay.getLastHighlightedElement();\n }\n\n /**\n * Defines steps to be highlighted\n * @param {array} steps\n * @public\n */;\n _proto.defineSteps = function defineSteps(steps) {\n this.steps = [];\n for (var counter = 0; counter < steps.length; counter++) {\n var element = this.prepareElementFromStep(steps[counter], steps, counter);\n if (!element) {\n continue;\n }\n this.steps.push(element);\n }\n };\n _proto.getParentElementFromStep = function getParentElementFromStep() {\n console.log(\"getParentElementFromStep\");\n }\n\n /**\n * Prepares the step received from the user and returns an instance\n * of Element\n *\n * @param currentStep Step that is being prepared\n * @param allSteps List of all the steps\n * @param index Index of the current step\n * @returns {null|Element}\n * @private\n */;\n _proto.prepareElementFromStep = function prepareElementFromStep(currentStep, allSteps, index) {\n if (allSteps === void 0) {\n allSteps = [];\n }\n if (index === void 0) {\n index = 0;\n }\n var elementOptions = _extends({}, this.options);\n var querySelector = currentStep;\n // const parentElement = this.document;\n\n // If the `currentStep` is step definition\n // then grab the options and element from the definition\n var isStepDefinition = typeof currentStep !== \"string\" && !isDomElement(currentStep);\n if (!currentStep || isStepDefinition && !currentStep.element) {\n throw new Error(\"Element is required in step \" + index);\n }\n if (isStepDefinition) {\n querySelector = currentStep.element;\n elementOptions = _extends({}, this.options, currentStep);\n }\n\n // let domElement;\n // let parentQuerySelector;\n // if (currentStep.parentElement) {\n // parentQuerySelector = currentStep.parentElement; // 父类元素\n // parentElement = isDomElement(parentQuerySelector) ? parentQuerySelector : this.document.querySelector(parentQuerySelector); // 获取父类元素\n // if (!parentElement) {\n // console.warn(`parentElement to highlight ${querySelector} not found`);\n // return null;\n // }\n // domElement = parentElement.querySelector(currentStep.element); // 在父类上获取element元素\n // } else {\n // domElement = isDomElement(querySelector) ? querySelector : this.document.querySelector(querySelector);\n // }\n\n // If the given element is a query selector or a DOM element?\n var domElement = isDomElement(querySelector) ? querySelector : this.document.querySelector(querySelector);\n if (!domElement) {\n console.warn(\"Element to highlight \" + querySelector + \" not found\");\n return null;\n }\n var popover = null;\n if (elementOptions.popover && elementOptions.popover.title) {\n var mergedClassNames = [this.options.className, elementOptions.popover.className].filter(function (c) {\n return c;\n }).join(\" \");\n var popoverOptions = _extends({}, elementOptions, elementOptions.popover, {\n className: mergedClassNames,\n totalCount: allSteps.length,\n currentIndex: index,\n isFirst: index === 0,\n isLast: allSteps.length === 0 || index === allSteps.length - 1 // Only one item or last item\n });\n\n popover = new Popover(popoverOptions, this.window, this.document);\n this.popover = popover;\n }\n var stageOptions = _extends({}, elementOptions);\n var stage = new Stage(stageOptions, this.window, this.document);\n return new Element({\n node: domElement,\n options: elementOptions,\n popover: popover,\n stage: stage,\n overlay: this.overlay,\n window: this.window,\n document: this.document\n });\n }\n\n /**\n * Initiates highlighting steps from first step\n * @param {number} index at which highlight is to be started\n * @public\n */;\n _proto.start = function start(index) {\n if (index === void 0) {\n index = 0;\n }\n if (!this.steps || this.steps.length === 0) {\n throw new Error(\"There are no steps defined to iterate\");\n }\n this.isActivated = true;\n this.currentStep = index;\n this.overlay.highlight(this.steps[index]);\n };\n _proto.destory = function destory() {\n this.popover.destoryNode();\n this.overlay.removeNode();\n this.reset();\n }\n\n /**\n * Highlights the given element\n * @param {string|{element: string, popover: {}}} selector Query selector or a step definition\n * @public\n */;\n _proto.highlight = function highlight(selector) {\n this.isActivated = true;\n var element = this.prepareElementFromStep(selector);\n if (!element) {\n return;\n }\n this.overlay.highlight(element);\n };\n _proto.highlightAlert = function highlightAlert(popoverInfo) {\n this.isActivated = true;\n this.isAlertActivated = true;\n this.overlay.show();\n var popoverOptions = _extends({}, this.options, popoverInfo.popover, popoverInfo);\n var popover = new Popover(popoverOptions, this.window, this.document);\n this.popover = popover;\n this.popover.alertShow();\n };\n return Driver;\n}();\nexport { Driver as default, GuideModal };","import _extends from \"@babel/runtime/helpers/extends\";\nimport { useEffect, useRef } from \"react\";\nimport Guide from \"../index\";\nvar GuideModal = function GuideModal(props) {\n var options = props.options,\n highlight = props.highlight,\n defineSteps = props.defineSteps,\n highlightAlert = props.highlightAlert;\n var guideObj = useRef(null);\n useEffect(function () {\n guideObj.current = new Guide(_extends({\n mask: false,\n allowClose: false,\n position: \"right\",\n doneBtnText: \"知道了\"\n }, options));\n if (highlight) {\n guideObj.current.highlight(highlight);\n }\n if (highlightAlert) {\n guideObj.current.highlightAlert(highlightAlert);\n }\n if (defineSteps && defineSteps.length) {\n guideObj.current.defineSteps(defineSteps);\n guideObj.current.start();\n }\n return function () {\n guideObj && guideObj.current.destory();\n guideObj.current = null;\n };\n }, [options, highlight, defineSteps, highlightAlert]);\n return null;\n};\nexport default GuideModal;","import \"core-js/modules/es.array.filter.js\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.array.sort.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\n/**\n * 对数组按照首字母分类\n * @param {Array} array 要进行分类的数组\n * @param {Function} selector 如果数组元素为对象,则需告知取哪个值进行分类。如:(obj) => obj.pinyin\n * @return {Array}\n */\nfunction pySegSort(arr, selector) {\n var select = function select(val) {\n if (selector) return selector(val) || '#'; // 避免拼音为空的错误\n return val;\n };\n var lettersArr = 'abcdefghijklmnopqrstuvwxyz'.split('');\n var lettersMap = {};\n lettersArr.forEach(function (letter) {\n return lettersMap[letter] = true;\n });\n var sortedArr = arr.sort(function (a, b) {\n return select(a).localeCompare(select(b));\n });\n var groups = [];\n var notLetter = sortedArr.filter(function (val) {\n return !lettersMap[select(val)[0].toLowerCase()];\n });\n if (notLetter.length > 0) {\n groups.push({\n group: '#',\n values: notLetter\n });\n }\n lettersArr.forEach(function (l) {\n var result = {\n group: l,\n values: []\n };\n sortedArr.forEach(function (val) {\n if (l === select(val)[0].toLowerCase()) {\n result.values.push(val);\n }\n });\n if (result.values.length > 0) groups.push(result);\n });\n return groups;\n}\n\n/**\n * 获取 window 上的变量,获取window.a.b.c的语法糖,getWindowVar('a.b.c')\n * @param {String}\n * @returns {any}\n */\nfunction getWindowVar(str) {\n if (typeof str !== 'string') {\n throw new TypeError('param must be string');\n }\n var arr = str.split('.') || [];\n var returned = window;\n while (arr.length) {\n var key = arr.shift();\n try {\n if (returned && key) {\n returned = returned[key];\n }\n } catch (e) {\n // 出错时忽略\n }\n }\n return returned;\n}\nvar Common = {\n pySegSort: pySegSort,\n getWindowVar: getWindowVar\n};\nexport default Common;","import \"core-js/modules/es.array.find.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport xss from 'xss';\nvar EMOJI_PATH = 'https://res.qiyukf.net/static/websesssion/emoji/';\nvar plist = [{\n id: 'emoticon_emoji_01',\n tag: '[可爱]',\n file: 'emoji_01.png'\n}, {\n id: 'emoticon_emoji_0',\n tag: '[大笑]',\n file: 'emoji_00.png'\n}, {\n id: 'emoticon_emoji_02',\n tag: '[色]',\n file: 'emoji_02.png'\n}, {\n id: 'emoticon_emoji_03',\n tag: '[嘘]',\n file: 'emoji_03.png'\n}, {\n id: 'emoticon_emoji_04',\n tag: '[亲]',\n file: 'emoji_04.png'\n}, {\n id: 'emoticon_emoji_05',\n tag: '[呆]',\n file: 'emoji_05.png'\n}, {\n id: 'emoticon_emoji_06',\n tag: '[口水]',\n file: 'emoji_06.png'\n}, {\n id: 'emoticon_emoji_145',\n tag: '[汗]',\n file: 'emoji_145.png'\n}, {\n id: 'emoticon_emoji_07',\n tag: '[呲牙]',\n file: 'emoji_07.png'\n}, {\n id: 'emoticon_emoji_08',\n tag: '[鬼脸]',\n file: 'emoji_08.png'\n}, {\n id: 'emoticon_emoji_246',\n tag: '[斜眼笑]',\n file: 'emoji_246.png'\n}, {\n id: 'emoticon_emoji_240',\n tag: '[笑得满地打滚]',\n file: 'emoji_240.png'\n}, {\n id: 'emoticon_emoji_247',\n tag: '[微笑天使]',\n file: 'emoji_247.png'\n}, {\n id: 'emoticon_emoji_241',\n tag: '[好崇拜哦]',\n file: 'emoji_241.png'\n}, {\n id: 'emoticon_emoji_242',\n tag: '[滑稽]',\n file: 'emoji_242.png'\n}, {\n id: 'emoticon_emoji_235',\n tag: '[发财]',\n file: 'emoji_235.png'\n}, {\n id: 'emoticon_emoji_236',\n tag: '[想一想]',\n file: 'emoji_236.png'\n}, {\n id: 'emoticon_emoji_09',\n tag: '[害羞]',\n file: 'emoji_09.png'\n}, {\n id: 'emoticon_emoji_10',\n tag: '[偷笑]',\n file: 'emoji_10.png'\n}, {\n id: 'emoticon_emoji_11',\n tag: '[调皮]',\n file: 'emoji_11.png'\n}, {\n id: 'emoticon_emoji_12',\n tag: '[可怜]',\n file: 'emoji_12.png'\n}, {\n id: 'emoticon_emoji_14',\n tag: '[惊讶]',\n file: 'emoji_14.png'\n}, {\n id: 'emoticon_emoji_15',\n tag: '[流感]',\n file: 'emoji_15.png'\n}, {\n id: 'emoticon_emoji_16',\n tag: '[委屈]',\n file: 'emoji_16.png'\n}, {\n id: 'emoticon_emoji_17',\n tag: '[流泪]',\n file: 'emoji_17.png'\n}, {\n id: 'emoticon_emoji_18',\n tag: '[嚎哭]',\n file: 'emoji_18.png'\n}, {\n id: 'emoticon_emoji_19',\n tag: '[惊恐]',\n file: 'emoji_19.png'\n}, {\n id: 'emoticon_emoji_20',\n tag: '[怒]',\n file: 'emoji_20.png'\n}, {\n id: 'emoticon_emoji_21',\n tag: '[酷]',\n file: 'emoji_21.png'\n}, {\n id: 'emoticon_emoji_22',\n tag: '[不说]',\n file: 'emoji_22.png'\n}, {\n id: 'emoticon_emoji_23',\n tag: '[鄙视]',\n file: 'emoji_23.png'\n}, {\n id: 'emoticon_emoji_25',\n tag: '[奸笑]',\n file: 'emoji_25.png'\n}, {\n id: 'emoticon_emoji_26',\n tag: '[睡着]',\n file: 'emoji_26.png'\n}, {\n id: 'emoticon_emoji_27',\n tag: '[口罩]',\n file: 'emoji_27.png'\n}, {\n id: 'emoticon_emoji_237',\n tag: '[受伤]',\n file: 'emoji_237.png'\n}, {\n id: 'emoticon_emoji_243',\n tag: '[爆炸头]',\n file: 'emoji_243.png'\n}, {\n id: 'emoticon_emoji_28',\n tag: '[生气]',\n file: 'emoji_28.png'\n}, {\n id: 'emoticon_emoji_30',\n tag: '[疑问]',\n file: 'emoji_30.png'\n}, {\n id: 'emoticon_emoji_31',\n tag: '[怒骂]',\n file: 'emoji_31.png'\n}, {\n id: 'emoticon_emoji_32',\n tag: '[晕]',\n file: 'emoji_32.png'\n}, {\n id: 'emoticon_emoji_33',\n tag: '[呕吐]',\n file: 'emoji_33.png'\n}, {\n id: 'emoticon_emoji_162',\n tag: '[流汗]',\n file: 'emoji_162.png'\n}, {\n id: 'emoticon_emoji_163',\n tag: '[卖萌]',\n file: 'emoji_163.png'\n}, {\n id: 'emoticon_emoji_164',\n tag: '[默契眨眼]',\n file: 'emoji_164.png'\n}, {\n id: 'emoticon_emoji_166',\n tag: '[晚安]',\n file: 'emoji_166.png'\n}, {\n id: 'emoticon_emoji_116',\n tag: '[撇嘴]',\n file: 'new_emoji_01.png'\n}, {\n id: 'emoticon_emoji_117',\n tag: '[难过]',\n file: '1f641.png'\n}, {\n id: 'emoticon_emoji_118',\n tag: '[冷汗]',\n file: '1f628.png'\n}, {\n id: 'emoticon_emoji_119',\n tag: '[抓狂]',\n file: '1f629.png'\n}, {\n id: 'emoticon_emoji_120',\n tag: '[傲慢]',\n file: '1f615.png'\n}, {\n id: 'emoticon_emoji_121',\n tag: '[困]',\n file: '1f62a.png'\n}, {\n id: 'emoticon_emoji_123',\n tag: '[疯了]',\n file: '1f616.png'\n}, {\n id: 'emoticon_emoji_124',\n tag: '[白眼]',\n file: 'new_emoji_02.png'\n}, {\n id: 'emoticon_emoji_126',\n tag: '[再见]',\n file: 'new_emoji_06.png'\n}, {\n id: 'emoticon_emoji_248',\n tag: '[微笑的猫]',\n file: 'emoji_248.png'\n}, {\n id: 'emoticon_emoji_249',\n tag: '[笑出眼泪的猫]',\n file: 'emoji_249.png'\n}, {\n id: 'emoticon_emoji_250',\n tag: '[花痴的猫]',\n file: 'emoji_250.png'\n}, {\n id: 'emoticon_emoji_251',\n tag: '[亲亲猫]',\n file: 'emoji_251.png'\n}, {\n id: 'emoticon_emoji_127',\n tag: '[哼哼]',\n file: '1f63e.png'\n}, {\n id: 'emoticon_emoji_129',\n tag: '[饥饿]',\n file: 'new_emoji_03.png'\n}, {\n id: 'emoticon_emoji_143',\n tag: '[飞吻]',\n file: 'new_emoji_10.png'\n}, {\n id: 'emoticon_emoji_144',\n tag: '[微笑]',\n file: '1f642.png'\n}, {\n id: 'emoticon_emoji_145',\n tag: '[泪中带笑]',\n file: 'new_emoji_13.png'\n}, {\n id: 'emoticon_emoji_146',\n tag: '[吐舌头]',\n file: '1f61d.png'\n}, {\n id: 'emoticon_emoji_147',\n tag: '[忧郁]',\n file: 'new_emoji_11.png'\n}, {\n id: 'emoticon_emoji_148',\n tag: '[尴尬]',\n file: '1f630.png'\n}, {\n id: 'emoticon_emoji_149',\n tag: '[舒适]',\n file: '1f60c.png'\n}, {\n id: 'emoticon_emoji_150',\n tag: '[不悦]',\n file: '1f612.png'\n}, {\n id: 'emoticon_emoji_155',\n tag: '[拍掌]',\n file: 'new_emoji_09.png'\n}, {\n id: 'emoticon_emoji_122',\n tag: '[奋斗]',\n file: '1f4aa-1f3fc.png'\n}, {\n id: 'emoticon_emoji_130',\n tag: '[乒乓]',\n file: 'new_emoji_23.png'\n}, {\n id: 'emoticon_emoji_131',\n tag: '[猪头]',\n file: '1f437.png'\n}, {\n id: 'emoticon_emoji_221',\n tag: '[猴头]',\n file: 'emoji_221.png'\n}, {\n id: 'emoticon_emoji_222',\n tag: '[狗脸]',\n file: 'emoji_222.png'\n}, {\n id: 'emoticon_emoji_219',\n tag: '[老虎头]',\n file: 'emoji_219.png'\n}, {\n id: 'emoticon_emoji_220',\n tag: '[兔子头]',\n file: 'emoji_220.png'\n}, {\n id: 'emoticon_emoji_205',\n tag: '[幼苗]',\n file: 'emoji_205.png'\n}, {\n id: 'emoticon_emoji_206',\n tag: '[松树]',\n file: 'emoji_206.png'\n}, {\n id: 'emoticon_emoji_231',\n tag: '[花束]',\n file: 'emoji_231.png'\n}, {\n id: 'emoticon_emoji_208',\n tag: '[樱花]',\n file: 'emoji_208.png'\n}, {\n id: 'emoticon_emoji_218',\n tag: '[圆形花饰]',\n file: 'emoji_218.png'\n}, {\n id: 'emoticon_emoji_209',\n tag: '[芙蓉]',\n file: 'emoji_209.png'\n}, {\n id: 'emoticon_emoji_210',\n tag: '[向日葵]',\n file: 'emoji_210.png'\n}, {\n id: 'emoticon_emoji_211',\n tag: '[开花]',\n file: 'emoji_211.png'\n}, {\n id: 'emoticon_emoji_207',\n tag: '[郁金香]',\n file: 'emoji_207.png'\n}, {\n id: 'emoticon_emoji_132',\n tag: '[玫瑰]',\n file: 'new_emoji_25.png'\n}, {\n id: 'emoticon_emoji_133',\n tag: '[凋谢]',\n file: 'new_emoji_24.png'\n}, {\n id: 'emoticon_emoji_134',\n tag: '[瓢虫]',\n file: '1f41e.png'\n}, {\n id: 'emoticon_emoji_135',\n tag: '[月亮]',\n file: 'new_emoji_30.png'\n}, {\n id: 'emoticon_emoji_136',\n tag: '[礼物]',\n file: 'new_emoji_28.png'\n}, {\n id: 'emoticon_emoji_137',\n tag: '[拥抱]',\n file: 'new_emoji_08.png'\n}, {\n id: 'emoticon_emoji_140',\n tag: '[差劲]',\n file: 'new_emoji_20.png'\n}, {\n id: 'emoticon_emoji_141',\n tag: '[爱你]',\n file: 'new_emoji_21.png'\n}, {\n id: 'emoticon_emoji_142',\n tag: '[NO]',\n file: 'new_emoji_22.png'\n}, {\n id: 'emoticon_emoji_151',\n tag: '[幽灵]',\n file: '1f47b.png'\n}, {\n id: 'emoticon_emoji_229',\n tag: '[外星怪物]',\n file: 'emoji_229.png'\n}, {\n id: 'emoticon_emoji_238',\n tag: '[机器人]',\n file: 'emoji_238.png'\n}, {\n id: 'emoticon_emoji_152',\n tag: '[礼盒]',\n file: '1f49d.png'\n}, {\n id: 'emoticon_emoji_153',\n tag: '[拜托]',\n file: '1f64f-1f3fc.png'\n}, {\n id: 'emoticon_emoji_154',\n tag: '[气球]',\n file: '1f388.png'\n}, {\n id: 'emoticon_emoji_34',\n tag: '[强]',\n file: 'emoji_34.png'\n}, {\n id: 'emoticon_emoji_35',\n tag: '[弱]',\n file: 'emoji_35.png'\n}, {\n id: 'emoticon_emoji_36',\n tag: '[OK]',\n file: 'emoji_36.png'\n}, {\n id: 'emoticon_emoji_37',\n tag: '[拳头]',\n file: 'emoji_37.png'\n}, {\n id: 'emoticon_emoji_38',\n tag: '[胜利]',\n file: 'emoji_38.png'\n}, {\n id: 'emoticon_emoji_39',\n tag: '[鼓掌]',\n file: 'emoji_39.png'\n}, {\n id: 'emoticon_emoji_167',\n tag: '[握手]',\n file: 'emoji_167.png'\n}, {\n id: 'emoticon_emoji_252',\n tag: '[举双手]',\n file: 'emoji_252.png'\n}, {\n id: 'emoticon_emoji_228',\n tag: '[出拳]',\n file: 'emoji_228.png'\n}, {\n id: 'emoticon_emoji_239',\n tag: '[给我打电话]',\n file: 'emoji_239.png'\n}, {\n id: 'emoticon_emoji_226',\n tag: '[反手食指向左指]',\n file: 'emoji_226.png'\n}, {\n id: 'emoticon_emoji_227',\n tag: '[反手食指向右指]',\n file: 'emoji_227.png'\n}, {\n id: 'emoticon_emoji_224',\n tag: '[反手食指向上指]',\n file: 'emoji_224.png'\n}, {\n id: 'emoticon_emoji_225',\n tag: '[反手食指向下指]',\n file: 'emoji_225.png'\n}, {\n id: 'emoticon_emoji_223',\n tag: '[双眼]',\n file: 'emoji_223.png'\n}, {\n id: 'emoticon_emoji_40',\n tag: '[发怒]',\n file: 'emoji_40.png'\n}, {\n id: 'emoticon_emoji_41',\n tag: '[骷髅]',\n file: 'emoji_41.png'\n}, {\n id: 'emoticon_emoji_42',\n tag: '[便便]',\n file: 'emoji_42.png'\n}, {\n id: 'emoticon_emoji_43',\n tag: '[火]',\n file: 'emoji_43.png'\n}, {\n id: 'emoticon_emoji_44',\n tag: '[溜]',\n file: 'emoji_44.png'\n}, {\n id: 'emoticon_emoji_45',\n tag: '[爱心]',\n file: 'emoji_45.png'\n}, {\n id: 'emoticon_emoji_46',\n tag: '[心碎]',\n file: 'emoji_46.png'\n}, {\n id: 'emoticon_emoji_47',\n tag: '[钟情]',\n file: 'emoji_47.png'\n}, {\n id: 'emoticon_emoji_232',\n tag: '[心跳]',\n file: 'emoji_232.png'\n}, {\n id: 'emoticon_emoji_230',\n tag: '[情书]',\n file: 'emoji_230.png'\n}, {\n id: 'emoticon_emoji_48',\n tag: '[唇]',\n file: 'emoji_48.png'\n}, {\n id: 'emoticon_emoji_49',\n tag: '[戒指]',\n file: 'emoji_49.png'\n}, {\n id: 'emoticon_emoji_50',\n tag: '[钻石]',\n file: 'emoji_50.png'\n}, {\n id: 'emoticon_emoji_51',\n tag: '[太阳]',\n file: 'emoji_51.png'\n}, {\n id: 'emoticon_emoji_52',\n tag: '[有时晴]',\n file: 'emoji_52.png'\n}, {\n id: 'emoticon_emoji_53',\n tag: '[多云]',\n file: 'emoji_53.png'\n}, {\n id: 'emoticon_emoji_54',\n tag: '[雷]',\n file: 'emoji_54.png'\n}, {\n id: 'emoticon_emoji_55',\n tag: '[雨]',\n file: 'emoji_55.png'\n}, {\n id: 'emoticon_emoji_56',\n tag: '[雪花]',\n file: 'emoji_56.png'\n}, {\n id: 'emoticon_emoji_202',\n tag: '[星星]',\n file: 'emoji_202.png'\n}, {\n id: 'emoticon_emoji_204',\n tag: '[闪亮的星星]',\n file: 'emoji_204.png'\n}, {\n id: 'emoticon_emoji_203',\n tag: '[彩虹]',\n file: 'emoji_203.png'\n}, {\n id: 'emoticon_emoji_201',\n tag: '[闪亮]',\n file: 'emoji_201.png'\n}, {\n id: 'emoticon_emoji_245',\n tag: '[爆竹]',\n file: 'emoji_245.png'\n}, {\n id: 'emoticon_emoji_213',\n tag: '[拉炮彩带]',\n file: 'emoji_213.png'\n}, {\n id: 'emoticon_emoji_214',\n tag: '[五彩纸屑球]',\n file: 'emoji_214.png'\n}, {\n id: 'emoticon_emoji_244',\n tag: '[红包]',\n file: 'emoji_244.png'\n}, {\n id: 'emoticon_emoji_212',\n tag: '[蝴蝶结]',\n file: 'emoji_212.png'\n}, {\n id: 'emoticon_emoji_215',\n tag: '[票]',\n file: 'emoji_215.png'\n}, {\n id: 'emoticon_emoji_217',\n tag: '[奖杯]',\n file: 'emoji_217.png'\n}, {\n id: 'emoticon_emoji_216',\n tag: '[正中靶心的飞镖]',\n file: 'emoji_216.png'\n}, {\n id: 'emoticon_emoji_233',\n tag: '[水晶球]',\n file: 'emoji_233.png'\n}, {\n id: 'emoticon_emoji_234',\n tag: '[游戏操控杆]',\n file: 'emoji_234.png'\n}, {\n id: 'emoticon_emoji_57',\n tag: '[爱人]',\n file: 'emoji_57.png'\n}, {\n id: 'emoticon_emoji_58',\n tag: '[帽子]',\n file: 'emoji_58.png'\n}, {\n id: 'emoticon_emoji_59',\n tag: '[皇冠]',\n file: 'emoji_59.png'\n}, {\n id: 'emoticon_emoji_60',\n tag: '[篮球]',\n file: 'emoji_60.png'\n}, {\n id: 'emoticon_emoji_61',\n tag: '[足球]',\n file: 'emoji_61.png'\n}, {\n id: 'emoticon_emoji_62',\n tag: '[垒球]',\n file: 'emoji_62.png'\n}, {\n id: 'emoticon_emoji_63',\n tag: '[网球]',\n file: 'emoji_63.png'\n}, {\n id: 'emoticon_emoji_64',\n tag: '[台球]',\n file: 'emoji_64.png'\n}, {\n id: 'emoticon_emoji_65',\n tag: '[咖啡]',\n file: 'emoji_65.png'\n}, {\n id: 'emoticon_emoji_66',\n tag: '[啤酒]',\n file: 'emoji_66.png'\n}, {\n id: 'emoticon_emoji_67',\n tag: '[干杯]',\n file: 'emoji_67.png'\n}, {\n id: 'emoticon_emoji_68',\n tag: '[柠檬汁]',\n file: 'emoji_68.png'\n}, {\n id: 'emoticon_emoji_69',\n tag: '[餐具]',\n file: 'emoji_69.png'\n}, {\n id: 'emoticon_emoji_70',\n tag: '[汉堡]',\n file: 'emoji_70.png'\n}, {\n id: 'emoticon_emoji_71',\n tag: '[鸡腿]',\n file: 'emoji_71.png'\n}, {\n id: 'emoticon_emoji_72',\n tag: '[面条]',\n file: 'emoji_72.png'\n}, {\n id: 'emoticon_emoji_73',\n tag: '[冰淇淋]',\n file: 'emoji_73.png'\n}, {\n id: 'emoticon_emoji_74',\n tag: '[沙冰]',\n file: 'emoji_74.png'\n}, {\n id: 'emoticon_emoji_75',\n tag: '[生日蛋糕]',\n file: 'emoji_75.png'\n}, {\n id: 'emoticon_emoji_76',\n tag: '[蛋糕]',\n file: 'emoji_76.png'\n}, {\n id: 'emoticon_emoji_77',\n tag: '[糖果]',\n file: 'emoji_77.png'\n}, {\n id: 'emoticon_emoji_78',\n tag: '[葡萄]',\n file: 'emoji_78.png'\n}, {\n id: 'emoticon_emoji_79',\n tag: '[西瓜]',\n file: 'emoji_79.png'\n}, {\n id: 'emoticon_emoji_80',\n tag: '[光碟]',\n file: 'emoji_80.png'\n}, {\n id: 'emoticon_emoji_81',\n tag: '[手机]',\n file: 'emoji_81.png'\n}, {\n id: 'emoticon_emoji_82',\n tag: '[电话]',\n file: 'emoji_82.png'\n}, {\n id: 'emoticon_emoji_83',\n tag: '[电视]',\n file: 'emoji_83.png'\n}, {\n id: 'emoticon_emoji_84',\n tag: '[声音开启]',\n file: 'emoji_84.png'\n}, {\n id: 'emoticon_emoji_85',\n tag: '[声音关闭]',\n file: 'emoji_85.png'\n}, {\n id: 'emoticon_emoji_86',\n tag: '[铃铛]',\n file: 'emoji_86.png'\n}, {\n id: 'emoticon_emoji_87',\n tag: '[锁头]',\n file: 'emoji_87.png'\n}, {\n id: 'emoticon_emoji_88',\n tag: '[放大镜]',\n file: 'emoji_88.png'\n}, {\n id: 'emoticon_emoji_89',\n tag: '[灯泡]',\n file: 'emoji_89.png'\n}, {\n id: 'emoticon_emoji_90',\n tag: '[锤头]',\n file: 'emoji_90.png'\n}, {\n id: 'emoticon_emoji_91',\n tag: '[烟]',\n file: 'emoji_91.png'\n}, {\n id: 'emoticon_emoji_92',\n tag: '[炸弹]',\n file: 'emoji_92.png'\n}, {\n id: 'emoticon_emoji_93',\n tag: '[枪]',\n file: 'emoji_93.png'\n}, {\n id: 'emoticon_emoji_94',\n tag: '[刀]',\n file: 'emoji_94.png'\n}, {\n id: 'emoticon_emoji_95',\n tag: '[药]',\n file: 'emoji_95.png'\n}, {\n id: 'emoticon_emoji_96',\n tag: '[打针]',\n file: 'emoji_96.png'\n}, {\n id: 'emoticon_emoji_97',\n tag: '[钱袋]',\n file: 'emoji_97.png'\n}, {\n id: 'emoticon_emoji_98',\n tag: '[钞票]',\n file: 'emoji_98.png'\n}, {\n id: 'emoticon_emoji_99',\n tag: '[银行卡]',\n file: 'emoji_99.png'\n}, {\n id: 'emoticon_emoji_100',\n tag: '[手柄]',\n file: 'emoji_100.png'\n}, {\n id: 'emoticon_emoji_101',\n tag: '[麻将]',\n file: 'emoji_101.png'\n}, {\n id: 'emoticon_emoji_102',\n tag: '[调色板]',\n file: 'emoji_102.png'\n}, {\n id: 'emoticon_emoji_103',\n tag: '[电影]',\n file: 'emoji_103.png'\n}, {\n id: 'emoticon_emoji_104',\n tag: '[麦克风]',\n file: 'emoji_104.png'\n}, {\n id: 'emoticon_emoji_105',\n tag: '[耳机]',\n file: 'emoji_105.png'\n}, {\n id: 'emoticon_emoji_106',\n tag: '[音乐]',\n file: 'emoji_106.png'\n}, {\n id: 'emoticon_emoji_107',\n tag: '[吉他]',\n file: 'emoji_107.png'\n}, {\n id: 'emoticon_emoji_108',\n tag: '[火箭]',\n file: 'emoji_108.png'\n}, {\n id: 'emoticon_emoji_109',\n tag: '[飞机]',\n file: 'emoji_109.png'\n}, {\n id: 'emoticon_emoji_110',\n tag: '[火车]',\n file: 'emoji_110.png'\n}, {\n id: 'emoticon_emoji_111',\n tag: '[公交]',\n file: 'emoji_111.png'\n}, {\n id: 'emoticon_emoji_112',\n tag: '[轿车]',\n file: 'emoji_112.png'\n}, {\n id: 'emoticon_emoji_113',\n tag: '[出租车]',\n file: 'emoji_113.png'\n}, {\n id: 'emoticon_emoji_114',\n tag: '[警车]',\n file: 'emoji_114.png'\n}, {\n id: 'emoticon_emoji_115',\n tag: '[自行车]',\n file: 'emoji_115.png'\n}];\nexport var pmap = {\n emoticon_emoji_01: {\n tag: '[可爱]',\n file: 'emoji_01.png'\n },\n emoticon_emoji_00: {\n tag: '[大笑]',\n file: 'emoji_00.png'\n },\n emoticon_emoji_02: {\n tag: '[色]',\n file: 'emoji_02.png'\n },\n emoticon_emoji_03: {\n tag: '[嘘]',\n file: 'emoji_03.png'\n },\n emoticon_emoji_04: {\n tag: '[亲]',\n file: 'emoji_04.png'\n },\n emoticon_emoji_05: {\n tag: '[呆]',\n file: 'emoji_05.png'\n },\n emoticon_emoji_06: {\n tag: '[口水]',\n file: 'emoji_06.png'\n },\n emoticon_emoji_145: {\n tag: '[汗]',\n file: 'emoji_145.png'\n },\n emoticon_emoji_07: {\n tag: '[呲牙]',\n file: 'emoji_07.png'\n },\n emoticon_emoji_08: {\n tag: '[鬼脸]',\n file: 'emoji_08.png'\n },\n emoticon_emoji_09: {\n tag: '[害羞]',\n file: 'emoji_09.png'\n },\n emoticon_emoji_10: {\n tag: '[偷笑]',\n file: 'emoji_10.png'\n },\n emoticon_emoji_11: {\n tag: '[调皮]',\n file: 'emoji_11.png'\n },\n emoticon_emoji_12: {\n tag: '[可怜]',\n file: 'emoji_12.png'\n },\n emoticon_emoji_13: {\n tag: '[敲]',\n file: 'emoji_13.png'\n },\n emoticon_emoji_14: {\n tag: '[惊讶]',\n file: 'emoji_14.png'\n },\n emoticon_emoji_15: {\n tag: '[流感]',\n file: 'emoji_15.png'\n },\n emoticon_emoji_16: {\n tag: '[委屈]',\n file: 'emoji_16.png'\n },\n emoticon_emoji_17: {\n tag: '[流泪]',\n file: 'emoji_17.png'\n },\n emoticon_emoji_18: {\n tag: '[嚎哭]',\n file: 'emoji_18.png'\n },\n emoticon_emoji_19: {\n tag: '[惊恐]',\n file: 'emoji_19.png'\n },\n emoticon_emoji_20: {\n tag: '[怒]',\n file: 'emoji_20.png'\n },\n emoticon_emoji_21: {\n tag: '[酷]',\n file: 'emoji_21.png'\n },\n emoticon_emoji_22: {\n tag: '[不说]',\n file: 'emoji_22.png'\n },\n emoticon_emoji_23: {\n tag: '[鄙视]',\n file: 'emoji_23.png'\n },\n emoticon_emoji_24: {\n tag: '[阿弥陀佛]',\n file: 'emoji_24.png'\n },\n emoticon_emoji_25: {\n tag: '[奸笑]',\n file: 'emoji_25.png'\n },\n emoticon_emoji_26: {\n tag: '[睡着]',\n file: 'emoji_26.png'\n },\n emoticon_emoji_27: {\n tag: '[口罩]',\n file: 'emoji_27.png'\n },\n emoticon_emoji_28: {\n tag: '[生气]',\n file: 'emoji_28.png'\n },\n emoticon_emoji_29: {\n tag: '[抠鼻孔]',\n file: 'emoji_29.png'\n },\n emoticon_emoji_30: {\n tag: '[疑问]',\n file: 'emoji_30.png'\n },\n emoticon_emoji_31: {\n tag: '[怒骂]',\n file: 'emoji_31.png'\n },\n emoticon_emoji_32: {\n tag: '[晕]',\n file: 'emoji_32.png'\n },\n emoticon_emoji_33: {\n tag: '[呕吐]',\n file: 'emoji_33.png'\n },\n emoticon_emoji_160: {\n tag: '[拜一拜]',\n file: 'emoji_160.png'\n },\n emoticon_emoji_161: {\n tag: '[惊喜]',\n file: 'emoji_161.png'\n },\n emoticon_emoji_162: {\n tag: '[流汗]',\n file: 'emoji_162.png'\n },\n emoticon_emoji_163: {\n tag: '[卖萌]',\n file: 'emoji_163.png'\n },\n emoticon_emoji_164: {\n tag: '[默契眨眼]',\n file: 'emoji_164.png'\n },\n emoticon_emoji_165: {\n tag: '[烧香拜佛]',\n file: 'emoji_165.png'\n },\n emoticon_emoji_166: {\n tag: '[晚安]',\n file: 'emoji_166.png'\n },\n emoticon_emoji_34: {\n tag: '[强]',\n file: 'emoji_34.png'\n },\n emoticon_emoji_35: {\n tag: '[弱]',\n file: 'emoji_35.png'\n },\n emoticon_emoji_36: {\n tag: '[OK]',\n file: 'emoji_36.png'\n },\n emoticon_emoji_37: {\n tag: '[拳头]',\n file: 'emoji_37.png'\n },\n emoticon_emoji_38: {\n tag: '[胜利]',\n file: 'emoji_38.png'\n },\n emoticon_emoji_39: {\n tag: '[鼓掌]',\n file: 'emoji_39.png'\n },\n emoticon_emoji_200: {\n tag: '[握手]',\n file: 'emoji_200.png'\n },\n emoticon_emoji_40: {\n tag: '[发怒]',\n file: 'emoji_40.png'\n },\n emoticon_emoji_41: {\n tag: '[骷髅]',\n file: 'emoji_41.png'\n },\n emoticon_emoji_42: {\n tag: '[便便]',\n file: 'emoji_42.png'\n },\n emoticon_emoji_43: {\n tag: '[火]',\n file: 'emoji_43.png'\n },\n emoticon_emoji_44: {\n tag: '[溜]',\n file: 'emoji_44.png'\n },\n emoticon_emoji_45: {\n tag: '[爱心]',\n file: 'emoji_45.png'\n },\n emoticon_emoji_46: {\n tag: '[心碎]',\n file: 'emoji_46.png'\n },\n emoticon_emoji_47: {\n tag: '[钟情]',\n file: 'emoji_47.png'\n },\n emoticon_emoji_48: {\n tag: '[唇]',\n file: 'emoji_48.png'\n },\n emoticon_emoji_49: {\n tag: '[戒指]',\n file: 'emoji_49.png'\n },\n emoticon_emoji_50: {\n tag: '[钻石]',\n file: 'emoji_50.png'\n },\n emoticon_emoji_51: {\n tag: '[太阳]',\n file: 'emoji_51.png'\n },\n emoticon_emoji_52: {\n tag: '[有时晴]',\n file: 'emoji_52.png'\n },\n emoticon_emoji_53: {\n tag: '[多云]',\n file: 'emoji_53.png'\n },\n emoticon_emoji_54: {\n tag: '[雷]',\n file: 'emoji_54.png'\n },\n emoticon_emoji_55: {\n tag: '[雨]',\n file: 'emoji_55.png'\n },\n emoticon_emoji_56: {\n tag: '[雪花]',\n file: 'emoji_56.png'\n },\n emoticon_emoji_57: {\n tag: '[爱人]',\n file: 'emoji_57.png'\n },\n emoticon_emoji_58: {\n tag: '[帽子]',\n file: 'emoji_58.png'\n },\n emoticon_emoji_59: {\n tag: '[皇冠]',\n file: 'emoji_59.png'\n },\n emoticon_emoji_60: {\n tag: '[篮球]',\n file: 'emoji_60.png'\n },\n emoticon_emoji_61: {\n tag: '[足球]',\n file: 'emoji_61.png'\n },\n emoticon_emoji_62: {\n tag: '[垒球]',\n file: 'emoji_62.png'\n },\n emoticon_emoji_63: {\n tag: '[网球]',\n file: 'emoji_63.png'\n },\n emoticon_emoji_64: {\n tag: '[台球]',\n file: 'emoji_64.png'\n },\n emoticon_emoji_65: {\n tag: '[咖啡]',\n file: 'emoji_65.png'\n },\n emoticon_emoji_66: {\n tag: '[啤酒]',\n file: 'emoji_66.png'\n },\n emoticon_emoji_67: {\n tag: '[干杯]',\n file: 'emoji_67.png'\n },\n emoticon_emoji_68: {\n tag: '[柠檬汁]',\n file: 'emoji_68.png'\n },\n emoticon_emoji_69: {\n tag: '[餐具]',\n file: 'emoji_69.png'\n },\n emoticon_emoji_70: {\n tag: '[汉堡]',\n file: 'emoji_70.png'\n },\n emoticon_emoji_71: {\n tag: '[鸡腿]',\n file: 'emoji_71.png'\n },\n emoticon_emoji_72: {\n tag: '[面条]',\n file: 'emoji_72.png'\n },\n emoticon_emoji_73: {\n tag: '[冰淇淋]',\n file: 'emoji_73.png'\n },\n emoticon_emoji_74: {\n tag: '[沙冰]',\n file: 'emoji_74.png'\n },\n emoticon_emoji_75: {\n tag: '[生日蛋糕]',\n file: 'emoji_75.png'\n },\n emoticon_emoji_76: {\n tag: '[蛋糕]',\n file: 'emoji_76.png'\n },\n emoticon_emoji_77: {\n tag: '[糖果]',\n file: 'emoji_77.png'\n },\n emoticon_emoji_78: {\n tag: '[葡萄]',\n file: 'emoji_78.png'\n },\n emoticon_emoji_79: {\n tag: '[西瓜]',\n file: 'emoji_79.png'\n },\n emoticon_emoji_80: {\n tag: '[光碟]',\n file: 'emoji_80.png'\n },\n emoticon_emoji_81: {\n tag: '[手机]',\n file: 'emoji_81.png'\n },\n emoticon_emoji_82: {\n tag: '[电话]',\n file: 'emoji_82.png'\n },\n emoticon_emoji_83: {\n tag: '[电视]',\n file: 'emoji_83.png'\n },\n emoticon_emoji_84: {\n tag: '[声音开启]',\n file: 'emoji_84.png'\n },\n emoticon_emoji_85: {\n tag: '[声音关闭]',\n file: 'emoji_85.png'\n },\n emoticon_emoji_86: {\n tag: '[铃铛]',\n file: 'emoji_86.png'\n },\n emoticon_emoji_87: {\n tag: '[锁头]',\n file: 'emoji_87.png'\n },\n emoticon_emoji_88: {\n tag: '[放大镜]',\n file: 'emoji_88.png'\n },\n emoticon_emoji_89: {\n tag: '[灯泡]',\n file: 'emoji_89.png'\n },\n emoticon_emoji_90: {\n tag: '[锤头]',\n file: 'emoji_90.png'\n },\n emoticon_emoji_91: {\n tag: '[烟]',\n file: 'emoji_91.png'\n },\n emoticon_emoji_92: {\n tag: '[炸弹]',\n file: 'emoji_92.png'\n },\n emoticon_emoji_93: {\n tag: '[枪]',\n file: 'emoji_93.png'\n },\n emoticon_emoji_94: {\n tag: '[刀]',\n file: 'emoji_94.png'\n },\n emoticon_emoji_95: {\n tag: '[药]',\n file: 'emoji_95.png'\n },\n emoticon_emoji_96: {\n tag: '[打针]',\n file: 'emoji_96.png'\n },\n emoticon_emoji_97: {\n tag: '[钱袋]',\n file: 'emoji_97.png'\n },\n emoticon_emoji_98: {\n tag: '[钞票]',\n file: 'emoji_98.png'\n },\n emoticon_emoji_99: {\n tag: '[银行卡]',\n file: 'emoji_99.png'\n },\n emoticon_emoji_100: {\n tag: '[手柄]',\n file: 'emoji_100.png'\n },\n emoticon_emoji_101: {\n tag: '[麻将]',\n file: 'emoji_101.png'\n },\n emoticon_emoji_102: {\n tag: '[调色板]',\n file: 'emoji_102.png'\n },\n emoticon_emoji_103: {\n tag: '[电影]',\n file: 'emoji_103.png'\n },\n emoticon_emoji_104: {\n tag: '[麦克风]',\n file: 'emoji_104.png'\n },\n emoticon_emoji_105: {\n tag: '[耳机]',\n file: 'emoji_105.png'\n },\n emoticon_emoji_106: {\n tag: '[音乐]',\n file: 'emoji_106.png'\n },\n emoticon_emoji_107: {\n tag: '[吉他]',\n file: 'emoji_107.png'\n },\n emoticon_emoji_108: {\n tag: '[火箭]',\n file: 'emoji_108.png'\n },\n emoticon_emoji_109: {\n tag: '[飞机]',\n file: 'emoji_109.png'\n },\n emoticon_emoji_110: {\n tag: '[火车]',\n file: 'emoji_110.png'\n },\n emoticon_emoji_111: {\n tag: '[公交]',\n file: 'emoji_111.png'\n },\n emoticon_emoji_112: {\n tag: '[轿车]',\n file: 'emoji_112.png'\n },\n emoticon_emoji_113: {\n tag: '[出租车]',\n file: 'emoji_113.png'\n },\n emoticon_emoji_114: {\n tag: '[警车]',\n file: 'emoji_114.png'\n },\n emoticon_emoji_115: {\n tag: '[自行车]',\n file: 'emoji_115.png'\n },\n emoticon_emoji_116: {\n tag: '[撇嘴]',\n file: 'new_emoji_01.png'\n },\n emoticon_emoji_117: {\n tag: '[难过]',\n file: '1f641.png'\n },\n emoticon_emoji_118: {\n tag: '[冷汗]',\n file: '1f628.png'\n },\n emoticon_emoji_119: {\n tag: '[抓狂]',\n file: '1f629.png'\n },\n emoticon_emoji_120: {\n tag: '[傲慢]',\n file: '1f615.png'\n },\n emoticon_emoji_121: {\n tag: '[困]',\n file: '1f62a.png'\n },\n emoticon_emoji_122: {\n tag: '[疯了]',\n file: '1f616.png'\n },\n emoticon_emoji_123: {\n tag: '[奋斗]',\n file: '1f4aa-1f3fc.png'\n },\n emoticon_emoji_124: {\n tag: '[白眼]',\n file: 'new_emoji_02.png'\n },\n emoticon_emoji_125: {\n tag: '[衰]',\n file: 'new_emoji_05.png'\n },\n emoticon_emoji_126: {\n tag: '[再见]',\n file: 'new_emoji_06.png'\n },\n emoticon_emoji_127: {\n tag: '[哼哼]',\n file: '1f63e.png'\n },\n emoticon_emoji_128: {\n tag: '[阴险]',\n file: '1f608.png'\n },\n emoticon_emoji_129: {\n tag: '[饥饿]',\n file: 'new_emoji_03.png'\n },\n emoticon_emoji_130: {\n tag: '[乒乓]',\n file: 'new_emoji_23.png'\n },\n emoticon_emoji_131: {\n tag: '[猪头]',\n file: '1f437.png'\n },\n emoticon_emoji_132: {\n tag: '[玫瑰]',\n file: 'new_emoji_25.png'\n },\n emoticon_emoji_133: {\n tag: '[凋谢]',\n file: 'new_emoji_24.png'\n },\n emoticon_emoji_134: {\n tag: '[瓢虫]',\n file: '1f41e.png'\n },\n emoticon_emoji_135: {\n tag: '[月亮]',\n file: 'new_emoji_30.png'\n },\n emoticon_emoji_136: {\n tag: '[礼物]',\n file: 'new_emoji_28.png'\n },\n emoticon_emoji_137: {\n tag: '[拥抱]',\n file: 'new_emoji_08.png'\n },\n emoticon_emoji_138: {\n tag: '[抱拳]',\n file: 'new_emoji_18.png'\n },\n emoticon_emoji_139: {\n tag: '[勾引]',\n file: 'new_emoji_19.png'\n },\n emoticon_emoji_140: {\n tag: '[差劲]',\n file: 'new_emoji_20.png'\n },\n emoticon_emoji_141: {\n tag: '[爱你]',\n file: 'new_emoji_21.png'\n },\n emoticon_emoji_142: {\n tag: '[NO]',\n file: 'new_emoji_22.png'\n },\n emoticon_emoji_143: {\n tag: '[飞吻]',\n file: 'new_emoji_10.png'\n },\n emoticon_emoji_144: {\n tag: '[微笑]',\n file: '1f642.png'\n },\n emoticon_emoji_146: {\n tag: '[吐舌头]',\n file: '1f61d.png'\n },\n emoticon_emoji_147: {\n tag: '[忧郁]',\n file: 'new_emoji_11.png'\n },\n emoticon_emoji_148: {\n tag: '[尴尬]',\n file: '1f630.png'\n },\n emoticon_emoji_149: {\n tag: '[舒适]',\n file: '1f60c.png'\n },\n emoticon_emoji_150: {\n tag: '[不悦]',\n file: '1f612.png'\n },\n emoticon_emoji_151: {\n tag: '[幽灵]',\n file: '1f47b.png'\n },\n emoticon_emoji_152: {\n tag: '[礼盒]',\n file: '1f49d.png'\n },\n emoticon_emoji_153: {\n tag: '[拜托]',\n file: '1f64f-1f3fc.png'\n },\n emoticon_emoji_154: {\n tag: '[气球]',\n file: '1f388.png'\n },\n emoticon_emoji_155: {\n tag: '[拍掌]',\n file: 'new_emoji_09.png'\n },\n emoticon_emoji_156: {\n tag: '[泪中带笑]',\n file: '1f602.png'\n },\n emoticon_emoji_157: {\n tag: '[糗大了]',\n file: 'new_emoji_07.png'\n },\n emoticon_emoji_201: {\n tag: '[闪亮]',\n file: 'emoji_201.png'\n },\n emoticon_emoji_202: {\n tag: '[星星]',\n file: 'emoji_202.png'\n },\n emoticon_emoji_203: {\n tag: '[彩虹]',\n file: 'emoji_203.png'\n },\n emoticon_emoji_204: {\n tag: '[闪亮的星星]',\n file: 'emoji_204.png'\n },\n emoticon_emoji_205: {\n tag: '[幼苗]',\n file: 'emoji_205.png'\n },\n emoticon_emoji_206: {\n tag: '[松树]',\n file: 'emoji_206.png'\n },\n emoticon_emoji_207: {\n tag: '[郁金香]',\n file: 'emoji_207.png'\n },\n emoticon_emoji_208: {\n tag: '[樱花]',\n file: 'emoji_208.png'\n },\n emoticon_emoji_209: {\n tag: '[芙蓉]',\n file: 'emoji_209.png'\n },\n emoticon_emoji_210: {\n tag: '[向日葵]',\n file: 'emoji_210.png'\n },\n emoticon_emoji_211: {\n tag: '[开花]',\n file: 'emoji_211.png'\n },\n emoticon_emoji_212: {\n tag: '[蝴蝶结]',\n file: 'emoji_212.png'\n },\n emoticon_emoji_213: {\n tag: '[拉炮彩带]',\n file: 'emoji_213.png'\n },\n emoticon_emoji_214: {\n tag: '[五彩纸屑球]',\n file: 'emoji_214.png'\n },\n emoticon_emoji_215: {\n tag: '[票]',\n file: 'emoji_215.png'\n },\n emoticon_emoji_216: {\n tag: '[正中靶心的飞镖]',\n file: 'emoji_216.png'\n },\n emoticon_emoji_217: {\n tag: '[奖杯]',\n file: 'emoji_217.png'\n },\n emoticon_emoji_218: {\n tag: '[圆形花饰]',\n file: 'emoji_218.png'\n },\n emoticon_emoji_219: {\n tag: '[老虎头]',\n file: 'emoji_219.png'\n },\n emoticon_emoji_220: {\n tag: '[兔子头]',\n file: 'emoji_220.png'\n },\n emoticon_emoji_221: {\n tag: '[猴头]',\n file: 'emoji_221.png'\n },\n emoticon_emoji_222: {\n tag: '[狗脸]',\n file: 'emoji_222.png'\n },\n emoticon_emoji_223: {\n tag: '[双眼]',\n file: 'emoji_223.png'\n },\n emoticon_emoji_224: {\n tag: '[反手食指向上指]',\n file: 'emoji_224.png'\n },\n emoticon_emoji_225: {\n tag: '[反手食指向下指]',\n file: 'emoji_225.png'\n },\n emoticon_emoji_226: {\n tag: '[反手食指向左指]',\n file: 'emoji_226.png'\n },\n emoticon_emoji_227: {\n tag: '[反手食指向右指]',\n file: 'emoji_227.png'\n },\n emoticon_emoji_228: {\n tag: '[出拳]',\n file: 'emoji_228.png'\n },\n emoticon_emoji_229: {\n tag: '[外星怪物]',\n file: 'emoji_229.png'\n },\n emoticon_emoji_230: {\n tag: '[情书]',\n file: 'emoji_230.png'\n },\n emoticon_emoji_231: {\n tag: '[花束]',\n file: 'emoji_231.png'\n },\n emoticon_emoji_232: {\n tag: '[心跳]',\n file: 'emoji_232.png'\n },\n emoticon_emoji_233: {\n tag: '[水晶球]',\n file: 'emoji_233.png'\n },\n emoticon_emoji_234: {\n tag: '[游戏操控杆]',\n file: 'emoji_234.png'\n },\n emoticon_emoji_235: {\n tag: '[发财]',\n file: 'emoji_235.png'\n },\n emoticon_emoji_236: {\n tag: '[想一想]',\n file: 'emoji_236.png'\n },\n emoticon_emoji_237: {\n tag: '[受伤]',\n file: 'emoji_237.png'\n },\n emoticon_emoji_238: {\n tag: '[机器人]',\n file: 'emoji_238.png'\n },\n emoticon_emoji_239: {\n tag: '[给我打电话]',\n file: 'emoji_239.png'\n },\n emoticon_emoji_240: {\n tag: '[笑得满地打滚]',\n file: 'emoji_240.png'\n },\n emoticon_emoji_241: {\n tag: '[好崇拜哦]',\n file: 'emoji_241.png'\n },\n emoticon_emoji_242: {\n tag: '[滑稽]',\n file: 'emoji_242.png'\n },\n emoticon_emoji_243: {\n tag: '[爆炸头]',\n file: 'emoji_243.png'\n },\n emoticon_emoji_244: {\n tag: '[红包]',\n file: 'emoji_244.png'\n },\n emoticon_emoji_245: {\n tag: '[爆竹]',\n file: 'emoji_245.png'\n },\n emoticon_emoji_246: {\n tag: '[斜眼笑]',\n file: 'emoji_246.png'\n },\n emoticon_emoji_247: {\n tag: '[微笑天使]',\n file: 'emoji_247.png'\n },\n emoticon_emoji_248: {\n tag: '[微笑的猫]',\n file: 'emoji_248.png'\n },\n emoticon_emoji_249: {\n tag: '[笑出眼泪的猫]',\n file: 'emoji_249.png'\n },\n emoticon_emoji_250: {\n tag: '[花痴的猫]',\n file: 'emoji_250.png'\n },\n emoticon_emoji_251: {\n tag: '[亲亲猫]',\n file: 'emoji_251.png'\n },\n emoticon_emoji_252: {\n tag: '[举双手]',\n file: 'emoji_252.png'\n }\n};\nvar pmap2 = {\n '[大笑]': 'emoticon_emoji_00',\n '[可爱]': 'emoticon_emoji_01',\n '[色]': 'emoticon_emoji_02',\n '[嘘]': 'emoticon_emoji_03',\n '[亲]': 'emoticon_emoji_04',\n '[呆]': 'emoticon_emoji_05',\n '[口水]': 'emoticon_emoji_06',\n '[汗]': 'emoticon_emoji_145',\n '[呲牙]': 'emoticon_emoji_07',\n '[鬼脸]': 'emoticon_emoji_08',\n '[害羞]': 'emoticon_emoji_09',\n '[偷笑]': 'emoticon_emoji_10',\n '[调皮]': 'emoticon_emoji_11',\n '[可怜]': 'emoticon_emoji_12',\n '[敲]': 'emoticon_emoji_13',\n '[惊讶]': 'emoticon_emoji_14',\n '[流感]': 'emoticon_emoji_15',\n '[委屈]': 'emoticon_emoji_16',\n '[流泪]': 'emoticon_emoji_17',\n '[嚎哭]': 'emoticon_emoji_18',\n '[惊恐]': 'emoticon_emoji_19',\n '[怒]': 'emoticon_emoji_20',\n '[酷]': 'emoticon_emoji_21',\n '[不说]': 'emoticon_emoji_22',\n '[鄙视]': 'emoticon_emoji_23',\n '[阿弥陀佛]': 'emoticon_emoji_24',\n '[奸笑]': 'emoticon_emoji_25',\n '[睡着]': 'emoticon_emoji_26',\n '[口罩]': 'emoticon_emoji_27',\n '[生气]': 'emoticon_emoji_28',\n '[抠鼻孔]': 'emoticon_emoji_29',\n '[疑问]': 'emoticon_emoji_30',\n '[怒骂]': 'emoticon_emoji_31',\n '[晕]': 'emoticon_emoji_32',\n '[呕吐]': 'emoticon_emoji_33',\n '[拜一拜]': 'emoticon_emoji_160',\n '[惊喜]': 'emoticon_emoji_161',\n '[流汗]': 'emoticon_emoji_162',\n '[卖萌]': 'emoticon_emoji_163',\n '[默契眨眼]': 'emoticon_emoji_164',\n '[烧香拜佛]': 'emoticon_emoji_165',\n '[晚安]': 'emoticon_emoji_166',\n '[强]': 'emoticon_emoji_34',\n '[弱]': 'emoticon_emoji_35',\n '[OK]': 'emoticon_emoji_36',\n '[拳头]': 'emoticon_emoji_37',\n '[胜利]': 'emoticon_emoji_38',\n '[鼓掌]': 'emoticon_emoji_39',\n '[握手]': 'emoticon_emoji_200',\n '[发怒]': 'emoticon_emoji_40',\n '[骷髅]': 'emoticon_emoji_41',\n '[便便]': 'emoticon_emoji_42',\n '[火]': 'emoticon_emoji_43',\n '[溜]': 'emoticon_emoji_44',\n '[爱心]': 'emoticon_emoji_45',\n '[心碎]': 'emoticon_emoji_46',\n '[钟情]': 'emoticon_emoji_47',\n '[唇]': 'emoticon_emoji_48',\n '[戒指]': 'emoticon_emoji_49',\n '[钻石]': 'emoticon_emoji_50',\n '[太阳]': 'emoticon_emoji_51',\n '[有时晴]': 'emoticon_emoji_52',\n '[多云]': 'emoticon_emoji_53',\n '[雷]': 'emoticon_emoji_54',\n '[雨]': 'emoticon_emoji_55',\n '[雪花]': 'emoticon_emoji_56',\n '[爱人]': 'emoticon_emoji_57',\n '[帽子]': 'emoticon_emoji_58',\n '[皇冠]': 'emoticon_emoji_59',\n '[篮球]': 'emoticon_emoji_60',\n '[足球]': 'emoticon_emoji_61',\n '[垒球]': 'emoticon_emoji_62',\n '[网球]': 'emoticon_emoji_63',\n '[台球]': 'emoticon_emoji_64',\n '[咖啡]': 'emoticon_emoji_65',\n '[啤酒]': 'emoticon_emoji_66',\n '[干杯]': 'emoticon_emoji_67',\n '[柠檬汁]': 'emoticon_emoji_68',\n '[餐具]': 'emoticon_emoji_69',\n '[汉堡]': 'emoticon_emoji_70',\n '[鸡腿]': 'emoticon_emoji_71',\n '[面条]': 'emoticon_emoji_72',\n '[冰淇淋]': 'emoticon_emoji_73',\n '[沙冰]': 'emoticon_emoji_74',\n '[生日蛋糕]': 'emoticon_emoji_75',\n '[蛋糕]': 'emoticon_emoji_76',\n '[糖果]': 'emoticon_emoji_77',\n '[葡萄]': 'emoticon_emoji_78',\n '[西瓜]': 'emoticon_emoji_79',\n '[光碟]': 'emoticon_emoji_80',\n '[手机]': 'emoticon_emoji_81',\n '[电话]': 'emoticon_emoji_82',\n '[电视]': 'emoticon_emoji_83',\n '[声音开启]': 'emoticon_emoji_84',\n '[声音关闭]': 'emoticon_emoji_85',\n '[铃铛]': 'emoticon_emoji_86',\n '[锁头]': 'emoticon_emoji_87',\n '[放大镜]': 'emoticon_emoji_88',\n '[灯泡]': 'emoticon_emoji_89',\n '[锤头]': 'emoticon_emoji_90',\n '[烟]': 'emoticon_emoji_91',\n '[炸弹]': 'emoticon_emoji_92',\n '[枪]': 'emoticon_emoji_93',\n '[刀]': 'emoticon_emoji_94',\n '[药]': 'emoticon_emoji_95',\n '[打针]': 'emoticon_emoji_96',\n '[钱袋]': 'emoticon_emoji_97',\n '[钞票]': 'emoticon_emoji_98',\n '[银行卡]': 'emoticon_emoji_99',\n '[手柄]': 'emoticon_emoji_100',\n '[麻将]': 'emoticon_emoji_101',\n '[调色板]': 'emoticon_emoji_102',\n '[电影]': 'emoticon_emoji_103',\n '[麦克风]': 'emoticon_emoji_104',\n '[耳机]': 'emoticon_emoji_105',\n '[音乐]': 'emoticon_emoji_106',\n '[吉他]': 'emoticon_emoji_107',\n '[火箭]': 'emoticon_emoji_108',\n '[飞机]': 'emoticon_emoji_109',\n '[火车]': 'emoticon_emoji_110',\n '[公交]': 'emoticon_emoji_111',\n '[轿车]': 'emoticon_emoji_112',\n '[出租车]': 'emoticon_emoji_113',\n '[警车]': 'emoticon_emoji_114',\n '[自行车]': 'emoticon_emoji_115',\n '[撇嘴]': 'emoticon_emoji_116',\n '[难过]': 'emoticon_emoji_117',\n '[冷汗]': 'emoticon_emoji_118',\n '[抓狂]': 'emoticon_emoji_119',\n '[傲慢]': 'emoticon_emoji_120',\n '[困]': 'emoticon_emoji_121',\n '[疯了]': 'emoticon_emoji_122',\n '[奋斗]': 'emoticon_emoji_123',\n '[白眼]': 'emoticon_emoji_124',\n '[衰]': 'emoticon_emoji_125',\n '[再见]': 'emoticon_emoji_126',\n '[哼哼]': 'emoticon_emoji_127',\n '[阴险]': 'emoticon_emoji_128',\n '[饥饿]': 'emoticon_emoji_129',\n '[乒乓]': 'emoticon_emoji_130',\n '[猪头]': 'emoticon_emoji_131',\n '[玫瑰]': 'emoticon_emoji_132',\n '[凋谢]': 'emoticon_emoji_133',\n '[瓢虫]': 'emoticon_emoji_134',\n '[月亮]': 'emoticon_emoji_135',\n '[礼物]': 'emoticon_emoji_136',\n '[拥抱]': 'emoticon_emoji_137',\n '[抱拳]': 'emoticon_emoji_138',\n '[勾引]': 'emoticon_emoji_139',\n '[差劲]': 'emoticon_emoji_140',\n '[爱你]': 'emoticon_emoji_141',\n '[NO]': 'emoticon_emoji_142',\n '[飞吻]': 'emoticon_emoji_143',\n '[微笑]': 'emoticon_emoji_144',\n '[吐舌头]': 'emoticon_emoji_146',\n '[忧郁]': 'emoticon_emoji_147',\n '[尴尬]': 'emoticon_emoji_148',\n '[舒适]': 'emoticon_emoji_149',\n '[不悦]': 'emoticon_emoji_150',\n '[幽灵]': 'emoticon_emoji_151',\n '[礼盒]': 'emoticon_emoji_152',\n '[拜托]': 'emoticon_emoji_153',\n '[气球]': 'emoticon_emoji_154',\n '[拍掌]': 'emoticon_emoji_155',\n '[泪中带笑]': 'emoticon_emoji_156',\n '[糗大了]': 'emoticon_emoji_157',\n '[闪亮]': 'emoticon_emoji_201',\n '[星星]': 'emoticon_emoji_202',\n '[彩虹]': 'emoticon_emoji_203',\n '[闪亮的星星]': 'emoticon_emoji_204',\n '[幼苗]': 'emoticon_emoji_205',\n '[松树]': 'emoticon_emoji_206',\n '[郁金香]': 'emoticon_emoji_207',\n '[樱花]': 'emoticon_emoji_208',\n '[芙蓉]': 'emoticon_emoji_209',\n '[向日葵]': 'emoticon_emoji_210',\n '[开花]': 'emoticon_emoji_211',\n '[蝴蝶结]': 'emoticon_emoji_212',\n '[拉炮彩带]': 'emoticon_emoji_213',\n '[五彩纸屑球]': 'emoticon_emoji_214',\n '[票]': 'emoticon_emoji_215',\n '[正中靶心的飞镖]': 'emoticon_emoji_216',\n '[奖杯]': 'emoticon_emoji_217',\n '[圆形花饰]': 'emoticon_emoji_218',\n '[老虎头]': 'emoticon_emoji_219',\n '[兔子头]': 'emoticon_emoji_220',\n '[猴头]': 'emoticon_emoji_221',\n '[狗脸]': 'emoticon_emoji_222',\n '[双眼]': 'emoticon_emoji_223',\n '[反手食指向上指]': 'emoticon_emoji_224',\n '[反手食指向下指]': 'emoticon_emoji_225',\n '[反手食指向左指]': 'emoticon_emoji_226',\n '[反手食指向右指]': 'emoticon_emoji_227',\n '[出拳]': 'emoticon_emoji_228',\n '[外星怪物]': 'emoticon_emoji_229',\n '[情书]': 'emoticon_emoji_230',\n '[花束]': 'emoticon_emoji_231',\n '[心跳]': 'emoticon_emoji_232',\n '[水晶球]': 'emoticon_emoji_233',\n '[游戏操控杆]': 'emoticon_emoji_234',\n '[发财]': 'emoticon_emoji_235',\n '[想一想]': 'emoticon_emoji_236',\n '[受伤]': 'emoticon_emoji_237',\n '[机器人]': 'emoticon_emoji_238',\n '[给我打电话]': 'emoticon_emoji_239',\n '[笑得满地打滚]': 'emoticon_emoji_240',\n '[好崇拜哦]': 'emoticon_emoji_241',\n '[滑稽]': 'emoticon_emoji_242',\n '[爆炸头]': 'emoticon_emoji_243',\n '[红包]': 'emoticon_emoji_244',\n '[爆竹]': 'emoticon_emoji_245',\n '[斜眼笑]': 'emoticon_emoji_246',\n '[微笑天使]': 'emoticon_emoji_247',\n '[微笑的猫]': 'emoticon_emoji_248',\n '[笑出眼泪的猫]': 'emoticon_emoji_249',\n '[花痴的猫]': 'emoticon_emoji_250',\n '[亲亲猫]': 'emoticon_emoji_251',\n '[举双手]': 'emoticon_emoji_252'\n};\nvar getImgHTML = function getImgHTML(obj) {\n var img = \"\\\"\"\";\n return img;\n};\n\n// xss白名单\nvar defaultXssFilterOption = {\n whiteList: {\n a: ['href', 'target', 'class', 'style', 'download', 'contenteditable'],\n img: ['class', 'style', 'src', 'title', 'alt', 'width', 'height'],\n font: ['color', 'size'],\n div: ['class', 'style'],\n u: ['class', 'style'],\n b: ['class', 'style'],\n i: ['class', 'style'],\n ul: ['class', 'style'],\n ol: ['class', 'style'],\n li: ['class', 'style'],\n br: [],\n p: ['class', 'style'],\n span: ['class', 'style'],\n strong: ['class', 'style'],\n em: ['class', 'style'],\n mark: ['class', 'style'],\n video: ['class', 'controls', 'poster', 'height', 'width', 'type', 'name', 'title', 'src', 'url'],\n h1: ['class', 'style'],\n h2: ['class', 'style'],\n h3: ['class', 'style'],\n h4: ['class', 'style'],\n h5: ['class', 'style'],\n h6: ['class', 'style'],\n table: ['class', 'style'],\n tr: ['class', 'style'],\n td: ['class', 'style'],\n tbody: ['class', 'style']\n },\n // 自定义匹配到不在白名单上的属性时的处理方法\n onIgnoreTagAttr: function onIgnoreTagAttr(tag, name, value) {\n if (name.substr(0, 5) === 'data-') {\n // 通过内置的escapeAttrValue函数来对属性值进行转义\n // @ts-expect-error xss.escapeAttrValue 是存在的,xss 库的 .d.ts 文件有问题\n return name + \"=\\\"\" + xss.escapeAttrValue(value) + \"\\\"\";\n }\n },\n // 自定义匹配到标签的属性时的处理方法\n onTagAttr: function onTagAttr(tag, name, value) {\n if (tag === 'a' && name === 'href') {\n // XSS不对超链接href的协议做校验,客户的超链接各式各样\n // @ts-expect-error xss.escapeAttrValue 是存在的,xss 库的 .d.ts 文件有问题\n return name + \"=\\\"\" + xss.escapeAttrValue(value) + \"\\\"\";\n }\n }\n};\n\n/**\n * 文本转表情\n */\nexport var text2emoji = function () {\n var reg = /(\\[[^\\]]+\\])/gi;\n return function (string, customEmojiMap, xssFilterOption) {\n if (typeof string !== 'string') return '';\n string = string.replace(/alt=\"(\\[[^\\]]+\\])\"/gi, 'alt=\"\"');\n var options = xssFilterOption || defaultXssFilterOption;\n var html = string.replace(reg, function (all, $1) {\n if (pmap2[$1]) {\n var img = getImgHTML({\n id: pmap2[$1],\n tag: $1,\n src: EMOJI_PATH + pmap[pmap2[$1]].file\n });\n return img;\n } else if (customEmojiMap && customEmojiMap.length) {\n var ret = customEmojiMap.find(function (item) {\n return item.tag === $1;\n });\n if (ret) {\n return getImgHTML({\n id: $1,\n tag: $1,\n src: ret.url\n });\n } else {\n return $1;\n }\n } else {\n return $1;\n }\n });\n return xss(html, options);\n };\n}();\n\n/**\n * 文本转表情(不处理 xss 攻击)\n * 两个方法都保留,兼容下\n */\nvar formatEmoji = function () {\n var reg = /(\\[[^\\]]+\\])/gi;\n return function (string, customEmojiMap) {\n if (typeof string !== 'string') return '';\n string = string.replace(/alt=\"(\\[[^\\]]+\\])\"/gi, 'alt=\"\"');\n var html = string.replace(reg, function (all, $1) {\n if (pmap2[$1]) {\n var img = getImgHTML({\n id: pmap2[$1],\n tag: $1,\n src: EMOJI_PATH + pmap[pmap2[$1]].file\n });\n return img;\n } else if (customEmojiMap && customEmojiMap.length) {\n var ret = customEmojiMap.find(function (item) {\n return item.tag === $1;\n });\n if (ret) {\n return getImgHTML({\n id: $1,\n tag: $1,\n src: ret.url\n });\n } else {\n return $1;\n }\n } else {\n return $1;\n }\n });\n return html;\n };\n}();\n\n/**\n * 文本过滤表情\n */\n\nexport var textFilterEmoji = function textFilterEmoji(string, customEmojiMap, xssFilterOption) {\n var reg = /(\\[[^\\]]+\\])/gi;\n if (typeof string !== 'string') return '';\n string = string.replace(/alt=\"(\\[[^\\]]+\\])\"/gi, 'alt=\"\"');\n var options = xssFilterOption || defaultXssFilterOption;\n var html = string.replace(reg, function (all, $1) {\n if (pmap2[$1]) {\n return '';\n } else if (customEmojiMap && customEmojiMap.length) {\n var ret = customEmojiMap.find(function (item) {\n return item.tag === $1;\n });\n if (ret) {\n return '';\n } else {\n return $1;\n }\n } else {\n return $1;\n }\n });\n return xss(html, options);\n};\nvar Emoji = {\n text2emoji: text2emoji,\n formatEmoji: formatEmoji,\n textFilterEmoji: textFilterEmoji,\n plist: plist,\n pmap: pmap,\n pmap2: pmap2,\n defaultXssFilterOption: defaultXssFilterOption,\n EMOJI_PATH: EMOJI_PATH\n};\nexport default Emoji;","/* eslint-disable react/prop-types */\nimport * as React from 'react';\nimport { I18nContext } from './context';\nvar Provider = I18nContext.Provider;\nexport var I18nProvider = function I18nProvider(_ref) {\n var children = _ref.children,\n value = _ref.value;\n return /*#__PURE__*/React.createElement(Provider, {\n value: value\n }, children);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/web.timers.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.promise.js\";\nimport \"core-js/modules/es.function.name.js\";\n/**\n * 基础 fetch,返回结果包括 code message 和 result\n * @param url api 地址\n * @param option 配置参数\n * @return {Promise} 请求 Promise\n */\nvar fetchBase = function fetchBase(url, option) {\n var controller;\n var signal;\n var timeout = option.timeout;\n if (window.AbortController) {\n controller = new AbortController();\n signal = controller.signal;\n }\n // 在指定的时间后中止请求\n var timeoutId = setTimeout(function () {\n controller && controller.abort();\n }, timeout);\n // eslint-disable-next-line compat/compat\n return fetch(url, _extends({\n method: 'POST'\n }, option, {\n signal: signal\n })).then(function (resp) {\n if (resp.status !== 200) {\n throw resp;\n } else {\n return resp.json ? resp.json() : resp;\n }\n }).then(function (resp) {\n clearTimeout(timeoutId);\n if (typeof resp.code !== 'undefined' && resp.code !== 200) {\n throw resp;\n }\n return resp;\n }).catch(function (resp) {\n var _resp$message;\n if (resp.name === 'AbortError') {\n throw new Error(\"Request timed out --> \" + url);\n }\n var error = new Error((_resp$message = resp.message) !== null && _resp$message !== void 0 ? _resp$message : '系统繁忙,请稍后再试');\n error.code = resp.code;\n error.result = resp.result;\n // 兼容老逻辑\n error.promptTitle = resp.promptTitle;\n error.promptMsg = resp.promptMsg;\n error.redirectUrl = resp.redirectUrl;\n error.response = resp;\n throw error;\n });\n};\nexport default fetchBase;","import \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.slice.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.object.get-prototype-of.js\";\nexport function obj2query(obj) {\n var str = '';\n Object.keys(obj).forEach(function (k) {\n if (typeof obj[k] !== 'undefined') {\n str += encodeURIComponent(k) + \"=\" + encodeURIComponent(obj[k]) + \"&\";\n }\n });\n return str.slice(0, -1);\n}\nexport function query2obj(query) {\n var obj = {};\n query.split('&').forEach(function (part) {\n var brr = part.split('=');\n // if (!brr.length) return;\n var key = brr.shift();\n if (!key) return;\n obj[decodeURIComponent(key)] = decodeURIComponent(brr.join('='));\n });\n return obj;\n}\n\n/**\n *是否为纯粹的对象\n * @export\n * @param {*} obj\n * @return {*} true or false\n */\nexport function isPlainObject(obj) {\n if (!obj || typeof obj !== 'object') return false;\n var proto = Object.getPrototypeOf(obj);\n if (!proto) return true;\n var construct = Object.prototype.hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof construct === 'function' && construct === Object; // 构造函数是Object\n}\n\n/**\n *是否为纯粹的对象或数组\n * @export\n * @param {*} obj\n * @return {*} true or false\n */\nexport function isPlainObjectOrArray(obj) {\n // 支持参数类型为数组\n if (Array.isArray(obj)) {\n return true;\n }\n return isPlainObject(obj);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.slice.js\";\n// /*\n// 便捷操作cookie\n// key [string] 键值\n// value [string|number|object] 值\n// attributes [object]\n// - expires 数字,单位天\n// 可通过toGMTString() | toUTCString()转换成GMT格式的时间;\n// 若为空则是会话cookie,这种cookie在浏览器关闭后就清除了\n// - max-age 同expires,数字,单位秒,ie不支持\n// - domain 域名\n// 可设置为当前域名(默认)或当前域名的父域\n// - path 路径\n// 默认当前页面的path\n// - secure 安全\n// 设置cookie只在确保安全的请求中才会发送,如HTTPS.只有在当前网页是https协议时,才能设置\n// 默认为空\n// - httpOnly 标识js是够能获取\n// 使用在node端,client端无法设置该属性\n// \"key=name; expires=Thu, 26 Feb 2016 04:18:00 GMT;\n// domain=qiyukf.com; path=/; secure; httpOnly\"\n// */\n\nvar isDate = function isDate(v) {\n return Object.prototype.toString.call(v) === '[object Date]';\n};\nvar Cookie = {\n set: function set(key, value, option) {\n if (option === void 0) {\n option = {};\n }\n var nval = value;\n var nkey = key;\n var opts = _extends({\n path: '/'\n }, option);\n var expires = opts.expires;\n if (typeof expires === 'number') {\n expires = new Date(new Date().getTime() + expires * 864e5); // Date 格式\n }\n // 默认会话期\n opts.expires = isDate(expires) ? expires.toUTCString() : expires || '';\n // 如果是字符串\n if (typeof value === 'string') {\n nval = encodeURIComponent(nval);\n nkey = encodeURIComponent(nkey);\n } else {\n try {\n var tres = JSON.stringify(nval);\n if (/^[\\{\\[]/.test(tres)) {\n nval = tres;\n }\n } catch (e) {\n // console.log(e);\n }\n nval = encodeURIComponent(String(nval)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n nkey = encodeURIComponent(String(nkey)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\\(\\)]/g, escape);\n }\n // 设置attr\n var attr = '';\n Object.keys(opts).forEach(function (item) {\n if (opts[item]) {\n attr += \"; \" + item;\n // boolean不需要处理,如secure\n if (opts[item] !== true) {\n attr += \"=\" + opts[item].split(';')[0];\n }\n }\n });\n document.cookie = nkey + \"=\" + nval + attr;\n },\n get: function get(key) {\n var res = {};\n var decode = function decode(s) {\n return s.replace(/(%[0-9A-Z]{2})+/g, function (arg) {\n var str = arg;\n try {\n str = decodeURIComponent(arg);\n } catch (e) {\n // console.log(e);\n }\n return str;\n });\n };\n // cookie为空\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n for (var n = 0, len = cookies.length; n < len; n += 1) {\n var parts = cookies[n].split('=');\n var cookie = parts.slice(1).join('=');\n if (cookie.charAt(0) === '\"') {\n cookie = cookie.slice(1, -1);\n }\n var name = decode(parts[0]);\n cookie = decode(cookie);\n res[name] = cookie;\n if (key === name) {\n break;\n }\n }\n var result = key ? res[key] : res;\n return typeof result !== 'undefined' ? result : '';\n },\n getJSON: function getJSON(key) {\n var val = Cookie.get(key);\n try {\n return JSON.parse(val);\n } catch (e) {\n return e.message || '';\n }\n },\n remove: function remove(key, option) {\n if (option === void 0) {\n option = {};\n }\n Cookie.set(key, '', _extends({\n expires: -1\n }, option));\n }\n};\nexport default Cookie;","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport fetchBase from './internal/_fetchBase';\nimport { isPlainObject, isPlainObjectOrArray, obj2query } from './utils';\nimport { Cookie } from '@ysf/helper';\nvar initOption = {\n method: 'GET',\n params: {},\n data: {},\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n },\n responseType: 'JSON',\n credentials: 'include',\n // 默认带cookie\n csrfToken: true,\n // 默认传token\n // cache: 'no-cache',\n timeout: 25000 // 请求超时时间\n};\n\n/**\n * @description 基于fetch的请求\n * @param {string} url api 地址\n * @param {object} [option] 配置参数\n * @param {string} [option.method='GET'] 请求方式\n * @param {object} [option.params] 请求参数\n * @param {object} [option.data] 请求体\n * @param {object} [option.headers] 请求头,如:Content-Type:'application/json'\n * @param {string} [option.responseType='JSON'] 响应的数据类型\n * @param {string} [option.credentials='include'] 跨域请求\n * @param {string} [option.csrfToken=true] 传参是否包括token\n * @param {string} [option.timeout=25000] 请求超时时间\n * @return {Promise} 请求结果\n */\n\nvar fetch = function fetch(url, option) {\n // URL格式校验\n if (typeof url !== 'string') throw new Error(url + \" is not an string!\");\n var config = Object.assign({}, initOption, option || {});\n var _config$method = config.method,\n method = _config$method === void 0 ? 'GET' : _config$method,\n _config$params = config.params,\n params = _config$params === void 0 ? {} : _config$params,\n _config$data = config.data,\n data = _config$data === void 0 ? {} : _config$data,\n _config$headers = config.headers,\n headers = _config$headers === void 0 ? {} : _config$headers,\n _config$csrfToken = config.csrfToken,\n csrfToken = _config$csrfToken === void 0 ? true : _config$csrfToken;\n\n // 开发环境下增加code参数(企业域名),解决本地代理时后端无法识别企业域名的问题\n // if (process.env.NODE_ENV === 'development') {\n // const code = location.hostname.split('.')[0];\n // query = Object.assign({}, query, { code });\n // }\n\n // 处理请求的Url\n var getUrl = function getUrl() {\n // token从params拿,拿不到从cookie兜底\n var token = params.token || Cookie.get('__csrfToken') || '';\n // 对params参数进行处理\n var query = csrfToken ? _extends({}, params, {\n token: token\n }) : _extends({}, params);\n // 判断当前url中是否有问号,如果有就用&,如果没有就用问号,作为拼接参数的连接符\n var ask = url.includes('?') ? '&' : '?';\n // 如果params有参数,url后加问号\n if (!!query && Object.keys(query).length > 0) {\n // 把所有params参数添加到url中\n url += \"\" + ask + obj2query(query);\n }\n return url;\n };\n\n // 处理url请求参数\n if (/^(GET|DELETE|HEAD|OPTIONS|TRACE)$/i.test(method)) {\n if (!isPlainObject(params)) throw new Error('invalid params parameters!');\n if (isPlainObjectOrArray(data) && Object.keys(data).length && !Object.keys(params).length) {\n throw new Error('invalid content type!');\n }\n url = getUrl();\n }\n delete config.params;\n\n // 处理请求主体的数据格式\n var body;\n if (/^(POST|PUT|PATCH)$/i.test(method)) {\n if (!isPlainObjectOrArray(data)) throw new Error('invalid data parameters!');\n var contentType = headers['Content-Type'] || 'application/json';\n switch (contentType) {\n case 'application/x-www-form-urlencoded':\n headers['Content-Type'] = 'application/x-www-form-urlencoded';\n body = obj2query(data);\n break;\n case 'application/json':\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(data);\n break;\n // case 'multipart/form-data': // formData\n // body = new FormData();\n // Object.keys(data).forEach(key => {\n // body.append(key, data[key]);\n // });\n // break;\n default:\n break;\n }\n config.body = body || data; // body没有的话,data兜底\n url = getUrl();\n }\n return fetchBase(url, config);\n};\nexport default fetch;","import \"core-js/modules/es.object.assign.js\";\nimport fetch from './fetch';\n// method:POST Content-Type: application/x-www-form-urlencoded\nexport var postByForm = function postByForm(url, option) {\n var config = Object.assign({}, option || {}, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n return fetch(url, config);\n};\n\n// method:GET Content-Type: application/x-www-form-urlencoded\nexport var getByForm = function getByForm(url, option) {\n var config = Object.assign({}, option || {}, {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n return fetch(url, config);\n};\n\n// method:POST Content-Type: application/json\nexport var postByJSON = function postByJSON(url, option) {\n var config = Object.assign({}, option || {}, {\n method: 'POST'\n });\n return fetch(url, config);\n};\n\n// method:GET Content-Type: application/json\nexport var getByJSON = function getByJSON(url, option) {\n return fetch(url, option);\n};\n\n// method:POST Content-Type: multipart/form-data\nexport var postByFormData = function postByFormData(url, option) {\n var config = Object.assign({}, option || {}, {\n method: 'POST',\n headers: {\n 'Content-Type': 'false'\n }\n });\n return fetch(url, config);\n};\nexport default fetch;","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/web.dom-collections.for-each.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.slice.js\";\n// /*\n// 便捷操作cookie\n// key [string] 键值\n// value [string|number|object] 值\n// attributes [object]\n// - expires 数字,单位天\n// 可通过toGMTString() | toUTCString()转换成GMT格式的时间;\n// 若为空则是会话cookie,这种cookie在浏览器关闭后就清除了\n// - max-age 同expires,数字,单位秒,ie不支持\n// - domain 域名\n// 可设置为当前域名(默认)或当前域名的父域\n// - path 路径\n// 默认当前页面的path\n// - secure 安全\n// 设置cookie只在确保安全的请求中才会发送,如HTTPS.只有在当前网页是https协议时,才能设置\n// 默认为空\n// - httpOnly 标识js是够能获取\n// 使用在node端,client端无法设置该属性\n// \"key=name; expires=Thu, 26 Feb 2016 04:18:00 GMT;\n// domain=qiyukf.com; path=/; secure; httpOnly\"\n// */\n\nvar isDate = function isDate(v) {\n return Object.prototype.toString.call(v) === '[object Date]';\n};\nvar Cookie = {\n set: function set(key, value, option) {\n if (option === void 0) {\n option = {};\n }\n var nval = value;\n var nkey = key;\n var opts = _extends({\n path: '/'\n }, option);\n var expires = opts.expires;\n if (typeof expires === 'number') {\n expires = new Date(new Date().getTime() + expires * 864e5); // Date 格式\n }\n // 默认会话期\n opts.expires = isDate(expires) ? expires.toUTCString() : expires || '';\n // 如果是字符串\n if (typeof value === 'string') {\n nval = encodeURIComponent(nval);\n nkey = encodeURIComponent(nkey);\n } else {\n try {\n var tres = JSON.stringify(nval);\n if (/^[\\{\\[]/.test(tres)) {\n nval = tres;\n }\n } catch (e) {\n // console.log(e);\n }\n nval = encodeURIComponent(String(nval)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n nkey = encodeURIComponent(String(nkey)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\\(\\)]/g, escape);\n }\n // 设置attr\n var attr = '';\n Object.keys(opts).forEach(function (item) {\n if (opts[item]) {\n attr += \"; \" + item;\n // boolean不需要处理,如secure\n if (opts[item] !== true) {\n attr += \"=\" + opts[item].split(';')[0];\n }\n }\n });\n document.cookie = nkey + \"=\" + nval + attr;\n },\n get: function get(key) {\n var res = {};\n var decode = function decode(s) {\n return s.replace(/(%[0-9A-Z]{2})+/g, function (arg) {\n var str = arg;\n try {\n str = decodeURIComponent(arg);\n } catch (e) {\n // console.log(e);\n }\n return str;\n });\n };\n // cookie为空\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n for (var n = 0, len = cookies.length; n < len; n += 1) {\n var parts = cookies[n].split('=');\n var cookie = parts.slice(1).join('=');\n if (cookie.charAt(0) === '\"') {\n cookie = cookie.slice(1, -1);\n }\n var name = decode(parts[0]);\n cookie = decode(cookie);\n res[name] = cookie;\n if (key === name) {\n break;\n }\n }\n var result = key ? res[key] : res;\n return typeof result !== 'undefined' ? result : '';\n },\n getJSON: function getJSON(key) {\n var val = Cookie.get(key);\n try {\n return JSON.parse(val);\n } catch (e) {\n return e.message || '';\n }\n },\n remove: function remove(key, option) {\n if (option === void 0) {\n option = {};\n }\n Cookie.set(key, '', _extends({\n expires: -1\n }, option));\n }\n};\nexport default Cookie;","import _extends from \"@babel/runtime/helpers/extends\";\nimport fetchRequest from '@ysf/fetch';\nimport { Cookie } from '@ysf/helper';\nvar token = Cookie.get('__csrfToken') || '';\nexport var setToken = function setToken(tokenParams) {\n Cookie.set('__csrfToken', token || '');\n token = tokenParams;\n};\nexport var request = function request(url, option) {\n var _window, _window$setting;\n if (option === void 0) {\n option = {};\n }\n var _option = option,\n _option$params = _option.params,\n params = _option$params === void 0 ? {} : _option$params;\n // 把token塞一份到params\n option = _extends({}, option, {\n params: _extends({}, params, {\n token: params.token ? params.token : token || ((_window = window) === null || _window === void 0 ? void 0 : (_window$setting = _window.setting) === null || _window$setting === void 0 ? void 0 : _window$setting.token)\n })\n });\n return fetchRequest(url, option);\n};\n/**\n * 查询国际化的语言包\n * @param data\n */\nexport var queryLangJson = function queryLangJson(data) {\n return request('/jingwei/query/language/byLocationAndLang/get', {\n params: data\n });\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { I18nProvider as Provider } from './provider';\nimport { queryLangJson } from './api';\nimport i18nString from './i18nString';\nimport { formatResultData } from './utils';\nvar i18nSetLang = i18nString.i18nSetLang,\n i18nSetRtl = i18nString.i18nSetRtl;\nvar I18nProviderSlim = function I18nProviderSlim(_ref) {\n var children = _ref.children,\n defaultLangJson = _ref.defaultLangJson,\n defaultLang = _ref.defaultLang,\n ifSetHTMLLang = _ref.ifSetHTMLLang,\n ifSetRtl = _ref.ifSetRtl,\n i18nKey = _ref.i18nKey,\n loadingEle = _ref.loadingEle,\n onload = _ref.onload,\n token = _ref.token;\n var _useState = useState(defaultLang || 'zh-cn'),\n lang = _useState[0],\n setLang = _useState[1];\n var _useState2 = useState(defaultLangJson),\n langJson = _useState2[0],\n setLangJson = _useState2[1];\n var _useState3 = useState(false),\n load = _useState3[0],\n setLoad = _useState3[1];\n\n /**\n * 查询后端配置的语言\n */\n var queryJson = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n var params, _yield$queryLangJson, result, _formatResultData, normal;\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(!i18nKey || load)) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\");\n case 2:\n params = {\n locationList: i18nKey\n };\n if (token) {\n params.token = token;\n }\n _context.prev = 4;\n _context.next = 7;\n return queryLangJson(params);\n case 7:\n _yield$queryLangJson = _context.sent;\n result = _yield$queryLangJson.result;\n _formatResultData = formatResultData(result.translate), normal = _formatResultData.normal;\n normal && setLangJson(_extends({}, defaultLangJson, normal));\n result.language && setLang(result.language);\n setLoad(true);\n _context.next = 18;\n break;\n case 15:\n _context.prev = 15;\n _context.t0 = _context[\"catch\"](4);\n setLoad(true);\n case 18:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[4, 15]]);\n })), [i18nKey, load, defaultLangJson]);\n useEffect(function () {\n i18nKey && queryJson();\n }, [i18nKey, queryJson]);\n useEffect(function () {\n onload && onload(langJson);\n }, [langJson, onload]);\n useEffect(function () {\n // 没有接口请求直接本地使用的可以实现实时切换页面的语言\n !i18nKey && setLangJson(defaultLangJson);\n }, [defaultLangJson, i18nKey]);\n\n // 开启HTML的lang属性\n useEffect(function () {\n if (ifSetHTMLLang) {\n i18nSetLang(lang);\n }\n }, [ifSetHTMLLang]);\n\n // 开启RTL\n useEffect(function () {\n if (ifSetRtl) {\n i18nSetRtl(lang);\n }\n }, [ifSetRtl]);\n if (!load && i18nKey) {\n return loadingEle || /*#__PURE__*/React.createElement(\"span\", null, \"loading...\");\n }\n return /*#__PURE__*/React.createElement(Provider, {\n value: {\n langJson: langJson,\n lang: lang\n }\n }, children);\n};\nexport default I18nProviderSlim;","import React from 'react';\nexport var I18nContext = /*#__PURE__*/React.createContext({\n lang: 'zh-cn',\n langJson: {},\n t: function t(a) {\n return a;\n },\n tHTML: function tHTML(a) {\n return a;\n }\n});","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.number.is-nan.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.regexp.constructor.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.regexp.to-string.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport { BCP47_LANG_MAP, compatibleLang } from './utils';\nimport i18nString from './i18nString';\n// 时间入参\n\nvar i18nIsZh = i18nString.i18nIsZh;\n/**\n * 获取时间戳的小时\n * @param {Number} [value] 语言\n * @return {Number}\n */\nvar getHours = function getHours(value) {\n var date = new Date(value);\n return date.getHours();\n};\n\n/**\n * 获取日期相关建立的专业化术语map 用于antd中的moment.js\n * @param {String} [lang='zh-cn'] 语言\n * param {String} [key='format'] 获取的类型\n * param {Number} [special=0] 特殊类型\n * @return {String}\n */\nvar getI18nDateLocale = function getI18nDateLocale(lang, key, special) {\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n if (key === void 0) {\n key = 'format';\n }\n if (special === void 0) {\n special = 0;\n }\n var i18nDateLocaleMap = {\n 'zh-cn': {\n format: 'YYYY-MM-DD HH:mm',\n formatHiddenTime: 'YYYY-MM-DD',\n sameDay: '今天',\n lastDay: '昨天',\n sameDayTime: '今天 ${time}',\n lastDayTime: '昨天 ${time}'\n },\n 'zh-tw': {\n format: 'YYYY-MM-DD HH:mm',\n formatHiddenTime: 'YYYY-MM-DD',\n sameDay: '今天',\n lastDay: '昨天',\n sameDayTime: '今天 ${time}',\n lastDayTime: '昨天 ${time}'\n },\n // 英语\n en: {\n format: 'MM/DD/YYYY, HH:mm',\n formatHiddenTime: 'MM/DD/YYYY',\n sameDay: 'Today',\n lastDay: 'Yesterday',\n sameDayTime: 'Today at ${time}',\n lastDayTime: 'Yesterday at ${time}'\n },\n // 阿拉伯语\n ar: {\n format: 'YYYY-MM-DD HH:mm',\n formatHiddenTime: 'YYYY-MM-DD',\n sameDay: 'اليوم',\n lastDay: 'أمس',\n sameDayTime: 'اليوم عند الساعة ${time}',\n lastDayTime: 'اليوم عند الساعة ${time}'\n },\n // 德语\n de: {\n format: 'DD.MM.YYYY, HH:mm',\n formatHiddenTime: 'DD.MM.YYYY',\n sameDay: 'Heute',\n lastDay: 'Gestern',\n sameDayTime: 'Heute um ${time} Uhr',\n lastDayTime: 'Gestern um ${time} Uhr'\n },\n // 俄语\n ru: {\n format: 'DD.MM.YYYY, HH:mm',\n formatHiddenTime: 'DD.MM.YYYY',\n sameDay: 'Сегодня',\n lastDay: 'Вчера',\n sameDayTime: 'Сегодня, в ${time}',\n lastDayTime: 'Вчера, в ${time}'\n },\n // 法语\n fr: {\n format: 'DD/MM/YYYY HH:mm',\n formatHiddenTime: 'DD/MM/YYYY',\n sameDay: 'Aujourd’hui',\n lastDay: 'Hier',\n sameDayTime: 'Aujourd’hui à ${time}',\n lastDayTime: 'Hier à ${time}'\n },\n // 韩语\n ko: {\n format: 'YYYY. MM. DD. HH:mm',\n formatHiddenTime: 'YYYY. MM. DD.',\n sameDay: '오늘',\n lastDay: '어제',\n sameDayTime: '오늘 ${time}',\n lastDayTime: '어제 ${time}'\n },\n // 葡萄牙语\n pt: {\n format: 'DD/MM/YYYY, HH:mm',\n formatHiddenTime: 'DD/MM/YYYY',\n sameDay: 'Hoje',\n lastDay: 'Ontem',\n sameDayTime: 'Hoje às ${time}',\n lastDayTime: 'Ontem às ${time}'\n },\n // 日语\n ja: {\n format: 'YYYY/MM/DD HH:mm',\n formatHiddenTime: 'YYYY/MM/DD',\n sameDay: '今日',\n lastDay: '昨日',\n sameDayTime: '今日 ${time}',\n lastDayTime: '昨日 ${time}'\n },\n // 泰语\n th: {\n format: 'DD/MM/YYYY, HH:mm',\n formatHiddenTime: 'DD/MM/YYYY',\n sameDay: 'วันนี้',\n lastDay: 'เมื่อวาน',\n sameDayTime: 'วันนี้ เวลา ${time}',\n lastDayTime: 'เมื่อวานนี้ เวลา ${time}'\n },\n // 土耳其语\n tr: {\n format: 'DD.MM.YYYY, HH:mm',\n formatHiddenTime: 'DD.MM.YYYY',\n sameDay: 'Bugün',\n lastDay: 'Dün',\n sameDayTime: 'Bugün saat ${time}',\n lastDayTime: 'Dün ${time}'\n },\n // 西班牙语\n // hour为1特殊展示\n es: {\n format: 'DD/MM/YYYY, HH:mm',\n formatHiddenTime: 'DD/MM/YYYY',\n sameDay: 'Hoy',\n lastDay: 'Ayer',\n sameDayTime: special ? 'Hoy a la ${time}' : 'Hoy a las ${time}',\n lastDayTime: special ? 'Ayer a la ${time}' : 'Ayer a las ${time}'\n },\n // 印尼语\n id: {\n format: 'DD/MM/YYYY, HH.mm',\n formatHiddenTime: 'DD/MM/YYYY',\n sameDay: 'Hari ini',\n lastDay: 'Kemarin',\n sameDayTime: 'Hari ini pukul ${time}',\n lastDayTime: 'Kemarin pukul ${time}'\n },\n // 越南语\n vi: {\n format: 'HH:mm DD/MM/YYYY',\n formatHiddenTime: 'DD/MM/YYYY',\n sameDay: 'Hôm nay',\n lastDay: 'Hôm qua',\n sameDayTime: 'Hôm nay lúc ${time}',\n lastDayTime: 'Hôm qua lúc ${time}'\n },\n // 菲律宾语在BCP47中为fil\n tl: {\n format: 'MM/DD/YYYY, HH:mm',\n formatHiddenTime: 'MM/DD/YYYY',\n sameDay: 'Ngayong araw',\n lastDay: 'Kahapon',\n sameDayTime: '${time} ngayong araw',\n lastDayTime: '${time} kahapon'\n }\n };\n\n // 兼容lang不在map中的情况\n if (i18nDateLocaleMap[lang]) {\n return i18nDateLocaleMap[lang][key];\n } else {\n return i18nDateLocaleMap['zh-cn'][key];\n }\n};\n\n/**\n * 获取当前语种的日期通用格式\n * @param {String} [lang='zh-cn'] 语言\n * @param {Boolean} [ifShowTime=true] 语言\n * @return {String}\n */\nvar i18nGetLangFormat = function i18nGetLangFormat(lang, ifShowTime) {\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n if (ifShowTime === void 0) {\n ifShowTime = true;\n }\n // lang兼容处理\n lang = compatibleLang(lang);\n return getI18nDateLocale(lang, ifShowTime ? 'format' : 'formatHiddenTime');\n};\n\n// padStart 也可 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/padStart\n// 兼容性考虑,先自己实现下\nfunction pad(val, len) {\n var valTmp = String(val);\n var lenTmp = len || 2;\n while (valTmp.length < lenTmp) {\n valTmp = \"0\" + valTmp;\n }\n return valTmp;\n}\n\n/**\n * 时间戳转为日期的格式\n * @param value\n * @param format 可选 默认 'yyyy-MM-dd HH:mm'\n * @returns {*}\n */\nvar timestamp2date = function timestamp2date(value, format) {\n if (format === void 0) {\n format = 'yyyy-MM-dd HH:mm';\n }\n if (value && typeof value === 'string') {\n value = Number(value);\n }\n if (!value || Number.isNaN(value)) return '--';\n var maps = {\n yyyy: function yyyy(date) {\n return date.getFullYear();\n },\n MM: function MM(date) {\n return pad(date.getMonth() + 1);\n },\n dd: function dd(date) {\n return pad(date.getDate());\n },\n HH: function HH(date) {\n return pad(date.getHours());\n },\n mm: function mm(date) {\n return pad(date.getMinutes());\n },\n ss: function ss(date) {\n return pad(date.getSeconds());\n }\n };\n var trunk = new RegExp(Object.keys(maps).join('|'), 'g');\n value = new Date(value || +new Date());\n return format.replace(trunk, function (capture) {\n return maps[capture] ? maps[capture](value) : '';\n });\n};\n\n/**\n * 国际化处理日期\n * @param {Number} value 要转化的数值\n * @param {String} [lang='zh-cn'] 值不存在时,显示的内容\n * @param {String} [formatStr='yyyy-MM-dd HH:mm'] 中文时的时间日期格式\n * @param {Object} [options]\n * @return {String}\n */\nvar i18nDateTime = function i18nDateTime(timestamp, lang, formatStr, options) {\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n if (formatStr === void 0) {\n formatStr = 'yyyy-MM-dd HH:mm';\n }\n if (!timestamp || Number.isNaN(timestamp)) return '--';\n\n // lang兼容处理\n lang = compatibleLang(lang);\n\n // 传入formatStr不是字符串\n if (typeof formatStr !== 'string') {\n formatStr = 'yyyy-MM-dd HH:mm';\n }\n\n // 兼容Intl不存在的情况\n if (typeof Intl === 'undefined' || i18nString.i18nIsZh(lang) || i18nIsZh(lang)) {\n return timestamp2date(timestamp, formatStr);\n }\n if (timestamp && typeof timestamp === 'string') {\n timestamp = Number(timestamp);\n }\n var basicOption = {\n hour12: false,\n // 使用24小时制\n calendar: 'gregory' // 使用格里高利立\n };\n if (formatStr.includes('yyyy')) {\n basicOption.year = 'numeric';\n }\n if (formatStr.includes('MM')) {\n basicOption.month = '2-digit';\n }\n if (formatStr.includes('dd')) {\n basicOption.day = '2-digit';\n }\n if (formatStr.includes('HH')) {\n basicOption.hour = '2-digit';\n }\n if (formatStr.includes('mm')) {\n basicOption.minute = '2-digit';\n }\n if (formatStr.includes('ss')) {\n basicOption.second = '2-digit';\n }\n\n // @ts-expect-error\n var formatter = new Intl.DateTimeFormat(BCP47_LANG_MAP[lang] || 'zh-Hans-CN', _extends({}, basicOption, options));\n return formatter.format(timestamp);\n};\n\n/**\n * 判断两个时间戳是否跨年了\n * @param {[type]} startTime [description]\n * @param {[type]} endTime [description]\n * @return {[type]} [description]\n */\nvar crossYears = function crossYears(startTime, endTime) {\n return new Date(endTime).getFullYear() !== new Date(startTime).getFullYear();\n};\n\n/**\n * @description 时间戳转为固定日期格式:今年显示'MM-dd HH:mm', 非今年显示'yyyy-MM-dd HH:mm'\n * @param {Number} value - 时间\n * @param {String} [formatFromMonth='MM-dd HH:mm'] - 时间格式\n * @param {Boolean} [abbr=false] - 是否缩写成\"昨天\", \"今天\"\n * @param {Boolean} [hidenAbbrTime=false] - 是否隐藏\"昨天\", \"今天\"后的日期\n * @param {Boolean} [lang='zh-cn'] - 语言\n * @return {String} 格式后的时间\n */\nvar i18nTimestamp2fixedDate = function i18nTimestamp2fixedDate(value, formatFromMonth, abbr, hidenAbbrTime, lang) {\n if (formatFromMonth === void 0) {\n formatFromMonth = 'MM-dd HH:mm';\n }\n if (abbr === void 0) {\n abbr = false;\n }\n if (hidenAbbrTime === void 0) {\n hidenAbbrTime = false;\n }\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n // lang兼容处理\n lang = compatibleLang(lang);\n if (value && typeof value === 'string') {\n value = Number(value);\n }\n if (!value || Number.isNaN(value)) return '--';\n\n // 传入formatStr不是字符串\n if (typeof formatFromMonth !== 'string') {\n formatFromMonth = 'MM-dd HH:mm';\n }\n var nowTime = new Date().getTime();\n // 跨年\n if (crossYears(value, nowTime)) {\n return i18nDateTime(value, lang, \"yyyy-\" + formatFromMonth);\n } else if (abbr) {\n var nowYear = new Date().getFullYear();\n var nowMonth = new Date().getMonth();\n var nowDate = new Date().getDate();\n var newValue = new Date(value);\n var formatFromHour = formatFromMonth.replace(/^.+HH/, 'HH');\n // 同日\n if (nowYear === newValue.getFullYear() && nowMonth === newValue.getMonth() && nowDate === newValue.getDate()) {\n if (hidenAbbrTime) {\n return getI18nDateLocale(lang, 'sameDay');\n } else {\n return getI18nDateLocale(lang, 'sameDayTime', lang === 'es' && getHours(value) === 1 ? 1 : 0).replace('${time}', i18nDateTime(value, lang, formatFromHour));\n }\n // 昨日\n } else if (nowYear === newValue.getFullYear() && nowMonth === newValue.getMonth() && nowDate === newValue.getDate() + 1) {\n if (hidenAbbrTime) {\n return getI18nDateLocale(lang, 'lastDay');\n } else {\n return getI18nDateLocale(lang, 'lastDayTime', lang === 'es' && getHours(value) === 1 ? 1 : 0).replace('${time}', i18nDateTime(value, lang, formatFromHour));\n }\n }\n }\n // 格式化日期\n return i18nDateTime(value, lang, formatFromMonth);\n};\nvar i18nDate = {\n i18nDateTime: i18nDateTime,\n i18nTimestamp2fixedDate: i18nTimestamp2fixedDate,\n i18nGetLangFormat: i18nGetLangFormat\n};\nexport default i18nDate;","import \"core-js/modules/es.array.includes.js\";\nimport { compatibleLang } from './utils';\n/**\n * 判断是否为中文\n * @param {String} lang\n */\nvar i18nIsZh = function i18nIsZh(lang) {\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n // lang兼容处理\n lang = compatibleLang(lang);\n return lang.indexOf('zh-') === 0 || lang.indexOf('zh_') === 0;\n};\n\n/**\n * 是否是相对中文较长的语言\n * @param {String} lang\n */\nvar i18nIsLongLang = function i18nIsLongLang(lang) {\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n // lang兼容处理\n lang = compatibleLang(lang);\n\n // 语言相对中文较长的语言\n var LANGUAGE_LONG = ['en', 'ar', 'de', 'ru', 'fr', 'tl', 'pt', 'ja', 'th', 'tr', 'es', 'id', 'vi'];\n return LANGUAGE_LONG.includes(lang);\n};\n\n/**\n * 切换全角半角\n * @param {String} str\n * @param {String} type\n */\nvar toggleHalfFullWidth = function toggleHalfFullWidth(punctuation, type) {\n var c = punctuation.charCodeAt(0);\n if (c >= 65281 && c <= 65374 && type === 'toHalf') {\n punctuation = String.fromCharCode(c - 65248);\n }\n if (c >= 33 && c <= 126 && type === 'toFull') {\n punctuation = String.fromCharCode(c + 65248);\n }\n return punctuation;\n};\n\n/**\n * 根据语言切换标点符号和空格\n * @param {String} lang\n * @param {String} punctuation\n */\nvar i18nPunctuation = function i18nPunctuation(lang, punctuation) {\n if (lang === void 0) {\n lang = 'zh-cn';\n }\n // lang兼容处理\n lang = compatibleLang(lang);\n\n // 使用全角符号的语言\n var LANGUAGE_NOT_HAVE_LETTER = ['zh-cn', 'zh-tw', 'ja'];\n var type = LANGUAGE_NOT_HAVE_LETTER.includes(lang) ? 'toFull' : 'toHalf';\n // 半角符号语言需要空格字符分隔\n if (punctuation === ' ' || punctuation === '') {\n return type === 'toFull' ? '' : ' ';\n }\n // 中文顿号表示序号分隔时转为.\n if (punctuation === '、') {\n return type === 'toFull' ? '、' : '. ';\n }\n // 句号转换\n if (punctuation === '。' || punctuation === '.') {\n return type === 'toFull' ? '。' : '. ';\n }\n // 日语中用「」表示双引号\n if (lang === 'ja') {\n if (punctuation === '“') {\n return '「';\n } else if (punctuation === '”') {\n return '」';\n }\n }\n\n // 使用半角符号的在标点后添加空格\n return type === 'toFull' ? toggleHalfFullWidth(punctuation, type) : toggleHalfFullWidth(punctuation, type) + \" \";\n};\n\n/**\n * 设置html的lang属性\n * @param {String} lang\n */\nvar i18nSetLang = function i18nSetLang(lang) {\n var _document;\n // lang兼容处理\n lang = compatibleLang(lang);\n if ((_document = document) !== null && _document !== void 0 && _document.documentElement) {\n document.documentElement.lang = lang || 'zh-cn';\n }\n};\n\n/**\n * 设置html的dir属性\n * @param {String} lang\n */\nvar i18nSetRtl = function i18nSetRtl(lang) {\n var _document2;\n // lang兼容处理\n lang = compatibleLang(lang);\n if (lang === 'ar' && (_document2 = document) !== null && _document2 !== void 0 && _document2.documentElement) {\n document.documentElement.dir = 'rtl';\n }\n};\nvar i18nString = {\n i18nPunctuation: i18nPunctuation,\n i18nIsLongLang: i18nIsLongLang,\n i18nIsZh: i18nIsZh,\n i18nSetLang: i18nSetLang,\n i18nSetRtl: i18nSetRtl\n};\nexport default i18nString;","import \"core-js/modules/es.array.concat.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport React, { useCallback, useMemo } from 'react';\nimport { I18nContext } from './context';\nimport { formatNBSP, replaceSlot, replaceSlotHTML } from './utils';\nvar useI18n = function useI18n(props) {\n var _ref = props || {},\n i18nFromProps = _ref.i18n;\n var _ref2 = React.useContext(I18nContext) || {},\n lang = _ref2.lang,\n langJson = _ref2.langJson;\n var i18n = i18nFromProps || langJson;\n var getValue = useCallback(function (key, defaultValue) {\n var res = defaultValue || key;\n if (typeof i18n[key] !== 'undefined') {\n res = i18n[key];\n }\n res = formatNBSP(res);\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n if (args && args.length) {\n return replaceSlot.apply(void 0, [res].concat(args));\n }\n return res;\n }, [i18n]);\n\n // html富文本处理\n // 业务上去做XSS过滤\n var getHTML = useCallback(function (key, defaultValue) {\n var res = defaultValue || key;\n if (typeof i18n[key] !== 'undefined') {\n res = i18n[key];\n }\n res = formatNBSP(res);\n for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n if (args && args.length) {\n return replaceSlotHTML.apply(void 0, [res].concat(args));\n }\n return res;\n }, [i18n]);\n return useMemo(function () {\n if (!i18n || !Object.keys(i18n).length) {\n return {\n t: getValue,\n tHTML: getHTML,\n langJson: {},\n ready: false,\n lang: lang\n };\n }\n return {\n lang: lang,\n langJson: i18n,\n t: getValue,\n tHTML: getHTML\n };\n }, [getValue, i18n, lang]);\n};\nexport default useI18n;","import _extends from \"@babel/runtime/helpers/extends\";\nimport \"core-js/modules/es.array.includes.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.object.keys.js\";\nimport \"core-js/modules/es.regexp.exec.js\";\nimport \"core-js/modules/es.string.includes.js\";\nimport \"core-js/modules/es.string.replace.js\";\nimport \"core-js/modules/es.string.split.js\";\nimport React from 'react';\nvar PREFIX = 'ppfish&';\nexport function getDisplayName(Component) {\n return Component.displayName || Component.name || (typeof Component === 'string' && Component.length > 0 ? Component : 'Unknown');\n}\nexport function warn() {\n if (console && console.warn) {\n var _console;\n (_console = console).warn.apply(_console, arguments);\n }\n}\nvar alreadyWarned = {};\nexport function warnOnce() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return;\n if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date();\n warn.apply(void 0, args);\n}\n\n/**\n * 多级属性设置\n * @param obj\n * @param arr\n * @param value\n */\nexport function setAttr(obj, arr, value) {\n if (!Array.isArray(arr) || !arr.length) {\n return obj;\n }\n var data = obj;\n for (var i = 0, len = arr.length; i < len; i++) {\n if (i === len - 1) {\n data[arr[i]] = value;\n } else {\n var defaultData = arr[i] === 'MONTH_ARRAY' ? [] : {};\n data = data[arr[i]] = data[arr[i]] || defaultData;\n }\n }\n}\n\n/**\n * 格式化ppfish的国际化的key,树结构\n * @param langJson\n */\nexport function formatPpfish(langJson) {\n var res = {};\n var splitText = '&';\n if (!langJson || !Object.keys(langJson).length) {\n return res;\n }\n for (var _i = 0, _Object$keys = Object.keys(langJson); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n var splitKey = key.replace(/^ppfish&/i, '');\n if (!splitKey.includes(splitText)) {\n res[splitKey] = langJson[key];\n continue;\n }\n var keyArr = splitKey.split(splitText);\n setAttr(res, keyArr, langJson[key]);\n }\n return res;\n}\n\n/**\n * 把树形结构的对象打平\n * @param {Object} tree\n * @param {String} tag\n */\nexport function expandTreeKey(tree, tag) {\n if (tag === void 0) {\n tag = '&';\n }\n var res = {};\n if (!tree || !Object.keys(tree).length) {\n return res;\n }\n var expandFun = function expandFun(obj, hisKey) {\n for (var _i2 = 0, _Object$keys2 = Object.keys(obj); _i2 < _Object$keys2.length; _i2++) {\n var key = _Object$keys2[_i2];\n if (typeof obj[key] === 'object') {\n expandFun(obj[key], hisKey ? \"\" + hisKey + tag + key : key);\n } else {\n res[hisKey ? \"\" + hisKey + tag + key : key] = obj[key];\n }\n }\n };\n expandFun(tree, '');\n var ppfishRes = {};\n for (var _i3 = 0, _Object$keys3 = Object.keys(res); _i3 < _Object$keys3.length; _i3++) {\n var key = _Object$keys3[_i3];\n if (key) {\n ppfishRes[\"\" + PREFIX + key] = res[key];\n }\n }\n return ppfishRes;\n}\n\n/**\n * 多语言插槽匹配, ---${value}标识插槽\n * @param {String} val\n * @param {String | Number} args\n * @returns {String}\n */\nexport var replaceSlot = function replaceSlot(val) {\n // eslint-disable-next-line no-template-curly-in-string\n var KEY = /\\${\\w+}/;\n if (!KEY.test(val)) {\n return val;\n }\n var res = val;\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n for (var _i4 = 0, _args = args; _i4 < _args.length; _i4++) {\n var item = _args[_i4];\n res = res.replace(KEY, item);\n }\n return res;\n};\n\n/**\n * 多语言插槽匹配, ---${value}标识插槽\n * @param {String} val\n * @param {String | Number} args\n * @returns {String}\n */\nexport var replaceSlotHTML = function replaceSlotHTML(val) {\n // eslint-disable-next-line no-template-curly-in-string\n var KEY = /\\${\\w+}/;\n if (!KEY.test(val)) {\n return val;\n }\n var res = val;\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n for (var _i5 = 0, _args2 = args; _i5 < _args2.length; _i5++) {\n var item = _args2[_i5];\n res = res.replace(KEY, item);\n }\n var el = /*#__PURE__*/React.createElement('span', {\n dangerouslySetInnerHTML: {\n __html: res\n }\n });\n return Object.assign({}, el);\n};\n\n/**\n * 多语言平台接口查过来的数据处理\n * @param data\n */\nexport var formatResultData = function formatResultData(data) {\n var res = {};\n var ppfishKey = 'ppfish';\n if (!data || !Object.keys(data)) {\n return res;\n }\n for (var _i6 = 0, _Object$keys4 = Object.keys(data); _i6 < _Object$keys4.length; _i6++) {\n var key = _Object$keys4[_i6];\n if (key === ppfishKey && Object.keys(data[ppfishKey]).length) {\n res[ppfishKey] = data[ppfishKey];\n continue;\n }\n res.normal = _extends({}, res.normal || {}, data[key]);\n }\n if (res.ppfish) {\n res.ppfish = formatPpfish(res.ppfish);\n }\n return res;\n};\n\n/**\n * 格式化nbsp为普通空格\n * @param {String} lang\n */\nexport var formatNBSP = function formatNBSP(value) {\n return decodeURIComponent(encodeURIComponent(value).replace(/%C2%A0/g, '%20'));\n};\n\n/**\n * 格式化antd语言格式为 zh_CN 这种\n * @param {String} lang\n */\nexport var formatAntdLang = function formatAntdLang(lang) {\n if (lang.includes('-') || lang.includes('_')) {\n var arr = lang.replace('-', '_').split('_');\n return arr[0].toLowerCase() + \"_\" + arr[1].toUpperCase();\n }\n // antd语言包的映射\n var ANTD_LANG_MAP = {\n 'zh-cn': 'zh_CN',\n // 中文简体\n 'zh-tw': 'zh_TW',\n // 中文繁体\n en: 'en_US',\n // 英文\n ar: 'ar_EG',\n // 阿拉伯语\n de: 'de_DE',\n // 德语\n ru: 'ru_RU',\n // 俄语\n fr: 'fr_FR',\n // 法语\n ko: 'ko_KR',\n // 韩语\n pt: 'pt_PT',\n // 葡萄牙语\n ja: 'ja_JP',\n // 日语\n th: 'th_TH',\n // 泰语\n tr: 'tr_TR',\n // 土耳其语\n es: 'es_ES',\n // 西班牙语\n id: 'id_ID',\n // 印尼语\n vi: 'vi_VN' // 越南语\n };\n return ANTD_LANG_MAP[lang.toLowerCase()] || lang;\n};\n\n/**\n * BCP47语言标记的映射清单\n */\nexport var BCP47_LANG_MAP = {\n 'zh-cn': 'zh-Hans-CN',\n // 中文简体\n 'zh-tw': 'zh-Hant-TW',\n // 中文繁体\n en: 'en',\n // 英文\n ar: 'ar-eg',\n // 阿拉伯语\n de: 'de',\n // 德语\n ru: 'ru',\n // 俄语\n fr: 'fr',\n // 法语\n ko: 'ko',\n // 韩语\n pt: 'pt',\n // 葡萄牙语\n ja: 'ja',\n // 日语\n th: 'th',\n // 泰语\n tr: 'tr',\n // 土耳其语\n es: 'es',\n // 西班牙语\n id: 'id',\n // 印尼语\n vi: 'vi',\n // 越南语\n tl: 'fil' // 菲律宾语在BCP47中为fil\n};\n\n/**\n * 检测当前传入的语言是否是支持的语言\n * @param {String} lang 语言\n * @return {Boolean}\n */\nexport var supportLang = function supportLang(lang) {\n return Object.keys(BCP47_LANG_MAP).includes(lang);\n};\n\n/**\n * 函数传入lang兼容预处理\n * @param {String} lang 语言\n * @return {String}\n */\nexport var compatibleLang = function compatibleLang(lang) {\n // 传入参数不是字符串,直接返回true\n if (typeof lang !== 'string') {\n return 'zh-cn';\n }\n lang = lang.toLowerCase();\n if (!supportLang(lang)) {\n return 'zh-cn';\n }\n return lang;\n};","import _asyncToGenerator from \"@babel/runtime/helpers/asyncToGenerator\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _regeneratorRuntime from \"@babel/runtime/regenerator\";\nimport \"core-js/modules/es.array.iterator.js\";\nimport \"core-js/modules/es.array.join.js\";\nimport \"core-js/modules/es.array.map.js\";\nimport \"core-js/modules/es.function.name.js\";\nimport \"core-js/modules/es.number.constructor.js\";\nimport \"core-js/modules/es.object.assign.js\";\nimport \"core-js/modules/es.object.to-string.js\";\nimport \"core-js/modules/es.promise.js\";\nimport \"core-js/modules/es.string.iterator.js\";\nimport \"core-js/modules/web.dom-collections.iterator.js\";\nimport \"core-js/modules/web.url.js\";\nimport \"core-js/modules/web.url.to-json.js\";\nimport \"core-js/modules/web.url-search-params.js\";\n/* eslint-disable compat/compat */\n/* eslint-disable @typescript-eslint/no-this-alias */\n\nvar unavailableError = new Error('浏览器不支持indexedDB');\nexport var LogDb = /*#__PURE__*/function () {\n // 记录当前浏览器环境是否兼容\n\n function LogDb(_temp) {\n var _window$setting, _window$setting$user;\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$preserveDays = _ref.preserveDays,\n preserveDays = _ref$preserveDays === void 0 ? 7 : _ref$preserveDays,\n _ref$removeAmountWhen = _ref.removeAmountWhenFullFilled,\n removeAmountWhenFullFilled = _ref$removeAmountWhen === void 0 ? 10000 : _ref$removeAmountWhen,\n _ref$uid = _ref.uid,\n uid = _ref$uid === void 0 ? (_window$setting = window.setting) === null || _window$setting === void 0 ? void 0 : (_window$setting$user = _window$setting.user) === null || _window$setting$user === void 0 ? void 0 : _window$setting$user.id : _ref$uid;\n _defineProperty(this, \"preserveDays\", void 0);\n _defineProperty(this, \"removeAmountWhenFullFilled\", void 0);\n _defineProperty(this, \"uid\", void 0);\n _defineProperty(this, \"db\", void 0);\n // indexedDB实例\n _defineProperty(this, \"capability\", true);\n Object.assign(this, {\n preserveDays: preserveDays,\n removeAmountWhenFullFilled: removeAmountWhenFullFilled,\n uid: uid\n });\n if (this.getEnabled()) {\n this.init();\n }\n window.__logDb__ = this;\n }\n\n // 获取日志表\n // 从此时起,支持本地日志功能\n // 空闲时执行非紧急任务\n LogDb.executeWhenIdle = function executeWhenIdle(handler) {\n if (window.requestIdleCallback) {\n return window.requestIdleCallback(handler);\n }\n return handler();\n };\n var _proto = LogDb.prototype;\n _proto.getLogTable = function getLogTable(mode) {\n if (mode === void 0) {\n mode = 'readwrite';\n }\n var transaction = this.db.transaction(LogDb.logTableName, mode);\n return transaction.objectStore(LogDb.logTableName);\n }\n\n // 数据库不存在时,返回异常\n ;\n _proto.rejectWhenDbNotExist =\n /*#__PURE__*/\n function () {\n var _rejectWhenDbNotExist = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {\n return _regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (this.db) {\n _context.next = 5;\n break;\n }\n _context.next = 3;\n return this.init();\n case 3:\n if (this.db) {\n _context.next = 5;\n break;\n }\n return _context.abrupt(\"return\", Promise.reject(unavailableError));\n case 5:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function rejectWhenDbNotExist() {\n return _rejectWhenDbNotExist.apply(this, arguments);\n }\n return rejectWhenDbNotExist;\n }() // 获取并操作时间范围内的日志\n ;\n _proto.getLogs = function getLogs(query,\n // 查询条件\n operator // 日志操作函数\n ) {\n if (query === void 0) {\n query = {};\n }\n if (operator === void 0) {\n operator = Function.prototype;\n }\n var logDb = this;\n if (!logDb.capability) return Promise.resolve([]);\n return logDb.rejectWhenDbNotExist().then(function () {\n return new Promise(function (resolve, reject) {\n var logs = [];\n var _query = query,\n _query$index = _query.index,\n index = _query$index === void 0 ? 'createTime' : _query$index,\n _query$condition = _query.condition,\n condition = _query$condition === void 0 ? null : _query$condition;\n var logTable = logDb.getLogTable();\n var request = logTable.index(index).openCursor(condition);\n Object.assign(request, {\n onsuccess: function onsuccess(_ref2) {\n var target = _ref2.target;\n var cursor = target.result;\n if (cursor) {\n logs.push(cursor.value);\n // 执行副作用\n operator({\n db: logDb.db,\n cursor: cursor,\n logTable: logTable\n });\n cursor.continue();\n } else {\n // 遍历完成\n resolve(logs);\n }\n },\n onerror: function onerror(event) {\n reject(event);\n }\n });\n });\n });\n }\n\n // 创建文件并下载\n ;\n _proto.createFile = function createFile(content, fileName) {\n var link = document.createElement('a');\n var blob = new Blob([content], {\n type: 'text/plain'\n });\n Object.assign(link, {\n href: window.URL.createObjectURL(blob),\n download: fileName\n });\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n };\n _proto.getContent = /*#__PURE__*/function () {\n var _getContent = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {\n var range, section, isRange, query, logs, content, sectionMap, fileName;\n return _regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n range = _ref3.range, section = _ref3.section;\n isRange = Array.isArray(range); // range为数组,按时间范围+业务线筛选日志,否则按业务线筛选日志\n query = isRange ? {\n index: 'sectionAndCreateTime',\n condition: IDBKeyRange.bound([section, range[0]], [section, range[1]])\n } : {\n index: 'section',\n condition: IDBKeyRange.only(section)\n };\n _context2.next = 5;\n return this.getLogs(query);\n case 5:\n logs = _context2.sent;\n // 为方便查看,最近的日志放最上面\n content = logs.reverse().map(function (_ref4) {\n var content = _ref4.content;\n return content;\n }).join('\\n'); // 日志文件命名\n // 业务线日志_用户id_时间戳_log.txt,如果指定时间范围,时间戳为开始时间和结束时间的拼接\n sectionMap = {\n callcenter: '呼叫'\n };\n fileName = (sectionMap[section] || '前端') + \"\\u65E5\\u5FD7_\" + (this.uid || 'anonymous') + \"_\" + (isRange ? range.join('_') : Date.now()) + \"_log.txt\";\n return _context2.abrupt(\"return\", {\n content: content,\n fileName: fileName\n });\n case 10:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, this);\n }));\n function getContent(_x) {\n return _getContent.apply(this, arguments);\n }\n return getContent;\n }() // 获取是否开启本地日志\n ;\n _proto.getEnabled = function getEnabled() {\n return window.localStorage.getItem(LogDb.disabledKey) !== '1' && LogDb.available;\n }\n\n // 设置是否开启本地日志\n ;\n _proto.setEnabled = function setEnabled(enabled) {\n var _this = this;\n return new Promise(function (resolve) {\n if (_this.getEnabled() === enabled) return resolve(_this.db);\n if (enabled) {\n resolve(_this.init());\n } else {\n resolve(_this.destroy());\n }\n }).then(function (db) {\n window.localStorage.setItem(LogDb.disabledKey, String(Number(!enabled)));\n return db;\n });\n }\n\n // 初始化数据库\n ;\n _proto.init = function init() {\n var logDb = this;\n return new Promise(function (resolve) {\n if (!LogDb.available) {\n console.error('indexedDB初始化失败', unavailableError);\n resolve(undefined);\n }\n if (logDb.db) resolve(logDb.db);\n try {\n var request = window.indexedDB.open('Log', LogDb.version);\n // 更新数据库版本时,先触发onupgradeneeded,再触发onsuccess\n Object.assign(request, {\n onsuccess: function onsuccess(_ref5) {\n var target = _ref5.target;\n logDb.db = target.result;\n // 初始化成功,删除7天前的日志\n LogDb.executeWhenIdle(function () {\n var sevenDaysAgoTimestamp = Date.now() - logDb.preserveDays * 24 * 60 * 60 * 1000;\n logDb.removeLogs({\n query: {\n index: 'createTime',\n condition: IDBKeyRange.upperBound(sevenDaysAgoTimestamp)\n }\n });\n });\n resolve(logDb.db);\n },\n onerror: function onerror(event) {\n logDb.db = undefined;\n console.error('indexedDB初始化失败', event);\n resolve(undefined);\n },\n onupgradeneeded: function onupgradeneeded(_ref6) {\n var target = _ref6.target;\n logDb.db = target.result;\n if (!logDb.db.objectStoreNames.contains(LogDb.logTableName)) {\n var logTable = logDb.db.createObjectStore(LogDb.logTableName, {\n autoIncrement: true\n });\n // 创建索引,搜索数据使用\n logTable.createIndex('createTime', 'createTime');\n logTable.createIndex('section', 'section');\n logTable.createIndex('sectionAndCreateTime', ['section', 'createTime']);\n }\n }\n });\n } catch (error) {\n logDb.capability = false;\n logDb.db = undefined;\n console.error('indexedDB初始化失败', error);\n resolve(undefined);\n }\n });\n }\n\n // 销毁数据库\n ;\n _proto.destroy = function destroy() {\n if (!this.db) return;\n this.db.close();\n this.db = undefined;\n return this.db;\n }\n\n // 删除满足条件的最早number条日志\n ;\n _proto.removeLogs = function removeLogs(_ref7) {\n var _ref7$query = _ref7.query,\n query = _ref7$query === void 0 ? {} : _ref7$query,\n _ref7$number = _ref7.number,\n number = _ref7$number === void 0 ? Infinity : _ref7$number;\n var counter = 0;\n return this.getLogs(query, function (_ref8) {\n var cursor = _ref8.cursor,\n logTable = _ref8.logTable;\n if (counter < number) {\n logTable.delete(cursor.primaryKey);\n counter++;\n }\n });\n }\n\n // 新增一条日志\n ;\n _proto.addLog = function addLog(data) {\n if (!data.createTime) data.createTime = Date.now();\n var logDb = this;\n LogDb.executeWhenIdle(function () {\n return !logDb.capability ? Promise.resolve(data) : logDb.rejectWhenDbNotExist().then(function () {\n return new Promise(function (resolve, reject) {\n var logTable = logDb.getLogTable('readwrite');\n var request = logTable.add(data);\n Object.assign(request, {\n onsuccess: function onsuccess() {\n resolve(data);\n },\n onerror: function onerror(event) {\n if (event.target.error.name === 'QuotaExceededError') {\n // 储存空间已满\n // 删除最早的10000条数据后,再次添加日志\n resolve(logDb.removeLogs({\n number: logDb.removeAmountWhenFullFilled\n }).then(function () {\n return logDb.addLog(data);\n }));\n } else {\n reject(event);\n }\n }\n });\n });\n });\n });\n }\n\n // 导出日志\n ;\n _proto.exportLogs =\n /*#__PURE__*/\n function () {\n var _exportLogs = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref9) {\n var range, section, _yield$this$getConten, content, fileName;\n return _regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) switch (_context3.prev = _context3.next) {\n case 0:\n range = _ref9.range, section = _ref9.section;\n if (this.getEnabled()) {\n _context3.next = 3;\n break;\n }\n return _context3.abrupt(\"return\", Promise.reject(unavailableError));\n case 3:\n _context3.next = 5;\n return this.getContent({\n range: range,\n section: section\n });\n case 5:\n _yield$this$getConten = _context3.sent;\n content = _yield$this$getConten.content;\n fileName = _yield$this$getConten.fileName;\n this.createFile(content, fileName);\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }, _callee3, this);\n }));\n function exportLogs(_x2) {\n return _exportLogs.apply(this, arguments);\n }\n return exportLogs;\n }() // 输出blob\n ;\n _proto.getBlob =\n /*#__PURE__*/\n function () {\n var _getBlob = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref10) {\n var range, section, _yield$this$getConten2, content;\n return _regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) switch (_context4.prev = _context4.next) {\n case 0:\n range = _ref10.range, section = _ref10.section;\n if (this.getEnabled()) {\n _context4.next = 3;\n break;\n }\n return _context4.abrupt(\"return\", Promise.reject(unavailableError));\n case 3:\n _context4.next = 5;\n return this.getContent({\n range: range,\n section: section\n });\n case 5:\n _yield$this$getConten2 = _context4.sent;\n content = _yield$this$getConten2.content;\n return _context4.abrupt(\"return\", new Blob([content], {\n type: 'text/plain'\n }));\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }, _callee4, this);\n }));\n function getBlob(_x3) {\n return _getBlob.apply(this, arguments);\n }\n return getBlob;\n }();\n return LogDb;\n}();\n_defineProperty(LogDb, \"version\", 1);\n// 数据库版本号\n// Safari浏览器不支持在iframe中使用IndexedDB\n_defineProperty(LogDb, \"available\", Boolean(window.indexedDB && window.localStorage));\n_defineProperty(LogDb, \"logTableName\", 'log');\n_defineProperty(LogDb, \"disabledKey\", 'YSF-LOCALE-LOG-DISABLED');\n_defineProperty(LogDb, \"availableDate\", new Date(2023, 11, 1, 0, 0, 0, 0));\nexport var getLogDb = function getLogDb(props) {\n if (window.__logDb__) return window.__logDb__;\n return new LogDb(props);\n};","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"src\", \"onload\", \"retryInterval\", \"max\", \"className\", \"onclick\"];\nimport \"core-js/modules/web.timers.js\";\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport './index.less';\nvar LODING_IMG = 'https://res.qiyukf.net/operation/71c928a93165094a3ef1963d6352287a';\nvar FAIL_IMG = 'https://res.qiyukf.net/operation/041d73eb418d0ef23110dc35d1b87529';\nvar BTN_IMGx1 = 'https://res.qiyukf.net/operation/8ed2e6050ebdff0d1977e1c9aecdef0a?imageView&thumbnail=28x28';\nvar BTN_IMG = 'https://res.qiyukf.net/operation/8ed2e6050ebdff0d1977e1c9aecdef0a?imageView&thumbnail=56x56 2x,' + 'https://res.qiyukf.net/operation/8ed2e6050ebdff0d1977e1c9aecdef0a?imageView&thumbnail=84x84 3x';\nvar defaultProps = {\n retryInterval: 3000,\n max: 20,\n className: '',\n onload: function onload() {},\n onclick: function onclick() {},\n title: '',\n alt: ''\n};\n\nvar MessageImage = function MessageImage(props) {\n var src = props.src,\n onload = props.onload,\n retryInterval = props.retryInterval,\n max = props.max,\n className = props.className,\n onclick = props.onclick,\n other = _objectWithoutPropertiesLoose(props, _excluded);\n\n var _useState = useState('loading'),\n status = _useState[0],\n setStatus = _useState[1];\n\n var instanceRef = useRef({\n count: 0,\n image: null\n });\n var resetStatus = useCallback(function () {\n instanceRef.current = {\n count: 0,\n image: null\n };\n }, []);\n var reload = useCallback(function () {\n setStatus('loading');\n var image = new Image();\n instanceRef.current.image = image;\n\n image.onerror = function () {\n instanceRef.current.count++;\n\n if (instanceRef.current.count === max) {\n setStatus('fail');\n resetStatus();\n } else {\n setTimeout(function () {\n image.src = src;\n }, retryInterval);\n }\n };\n\n image.onload = function () {\n setStatus('success');\n resetStatus();\n };\n\n image.src = src;\n }, [src, max, retryInterval, resetStatus]);\n var view;\n\n if (status === 'loading') {\n view = /*#__PURE__*/React.createElement(\"img\", {\n src: LODING_IMG,\n alt: \"loading\",\n onLoad: onload,\n className: \"m-message-image_loading\"\n });\n } else if (status === 'fail') {\n view = /*#__PURE__*/React.createElement(\"div\", {\n className: \"m-message-image_failwrap\"\n }, /*#__PURE__*/React.createElement(\"img\", {\n src: FAIL_IMG,\n alt: \"fail\",\n onLoad: onload,\n className: \"m-message-image_fail\"\n }), /*#__PURE__*/React.createElement(\"img\", {\n className: \"m-message-image_retrybtn\",\n src: BTN_IMGx1,\n srcSet: BTN_IMG,\n onClick: reload\n }));\n } else {\n view = /*#__PURE__*/React.createElement(\"img\", _extends({\n src: src,\n onLoad: onload,\n onClick: onclick\n }, other, {\n className: \"m-message-image_pic\"\n }));\n }\n\n useEffect(function () {\n reload();\n return function () {\n instanceRef.current = {\n count: 0,\n image: null\n };\n };\n }, [reload]);\n return /*#__PURE__*/React.createElement(\"div\", {\n className: \"m-message-image \" + className\n }, view);\n};\n\nMessageImage.defaultProps = defaultProps;\nexport default MessageImage;"],"names":["initialState","error","ErrorBoundary","_React$Component","_this","_len","arguments","length","_args","Array","_key","call","apply","this","concat","_this$props$onReset","_this$props","_len2","args","_key2","props","onReset","reset","getDerivedStateFromError","_proto","prototype","componentDidCatch","errorInfo","_this$props$onError","_this$props2","onError","componentStack","componentDidUpdate","prevProps","a","b","_a","_b","_a2","state","_this$props3","resetKeys","onResetKeysChange","updatedWithError","some","it","index","Object","is","setState","render","_this$props4","fallback","FallbackComponent","fallbackRender","fallbackProps","resetErrorBoundary","children","prefix","ID_OVERLAY","ID_STAGE","ID_POPOVER","CLASS_DRIVER_HIGHLIGHTED_ELEMENT","CLASS_DISABLE_HIGHLIGHTED_ELEMENT","CLASS_POSITION_RELATIVE","CLASS_FIX_STACKING_CONTEXT","CLASS_STAGE_NO_ANIMATION","CLASS_POPOVER_TIP","CLASS_POPOVER_TITLE","CLASS_POPOVER_DESCRIPTION","CLASS_POPOVER_FOOTER","CLASS_CLOSE_BTN","CLASS_SKIP_BTN","CLASS_NEXT_STEP_BTN","CLASS_PREV_STEP_BTN","CLASS_BTN_DISABLED","CLASS_NAVIGATION_BTNS","OVERLAY_HTML","STAGE_HTML","createNodeFromString","htmlString","div","document","createElement","innerHTML","trim","firstChild","getStyleProperty","element","propertyName","prefixVendor","prefixes","counter","foundValue","propertyValue","currentStyle","defaultView","getComputedStyle","getPropertyValue","toLowerCase","isDomElement","Overlay","options","window","highlightedElement","lastHighlightedElement","hideTimer","removeNode","bind","attachNode","pageOverlay","getElementById","mask","noMaskOthersDisable","body","appendChild","node","style","opacity","animate","parentElement","removeChild","highlight","isSame","clearTimeout","onHighlightStarted","onDeselected","getCalculatedPosition","canHighlight","show","onHighlighted","console","warn","setTimeout","position","left","top","bottom","right","getHighlightedElement","getLastHighlightedElement","clear","immediate","refresh","showPopover","showStage","Position","_temp","_ref","_ref$left","_ref$top","_ref$right","_ref$bottom","Element","popover","stage","overlay","animationTimeout","isInView","offsetTop","offsetLeft","width","offsetWidth","height","offsetHeight","el","offsetParent","pageYOffset","pageXOffset","innerHeight","innerWidth","scrollManually","middle","getBoundingClientRect","scrollTo","bringInView","scrollIntoView","scrollIntoViewOptions","behavior","block","e","documentElement","scrollTop","scrollLeft","elementRect","getPopover","hideStage","hidePopover","removeHighlightClasses","addHighlightClasses","classList","remove","stackFixes","querySelectorAll","add","disableHighlightedElement","canMakeRelative","fixStackingContext","parentNode","tagName","zIndex","parseFloat","transform","transformStyle","transformBox","filter","perspective","test","noFixStackingCss","currentPosition","includes","property","getNode","hide","showAtPosition","showAfterMs","getFullPageSize","html","Math","max","scrollHeight","scrollWidth","getSize","Popover","_Element","isFirst","isLast","totalCount","currentIndex","offset","showButtons","skipBtnText","doneBtnText","startBtnText","nextBtnText","prevBtnText","className","noMaskClass","tipNode","querySelector","titleNode","descriptionNode","footerNode","nextBtnNode","prevBtnNode","skipBtnNode","destoryNode","getTitleNode","getDescriptionNode","display","setInitialState","alertShow","title","description","renderFooter","positionOnLeft","positionOnLeftCenter","positionOnLeftBottom","positionOnRight","positionOnRightCenter","positionOnRightBottom","positionOnTop","positionOnTopCenter","positionOnTopRight","positionOnBottom","positionOnBottomCenter","positionOnBottomRight","positionOnMidCenter","autoPosition","showSkipBtn","elementPosition","popoverWidth","popoverMargin","padding","popoverDimensions","popoverCenter","elementCenter","topCenterPosition","popoverHeight","dimensions","nodeCenter","pageSize","popoverSize","pageHeight","Stage","setInitialStyle","requiredPadding","backgroundColor","stageBackground","Driver","allowClose","keyboardControl","overlayClickNext","onNext","onPrevious","isActivated","isAlertActivated","steps","currentStep","currentMovePrevented","onResize","onKeyUp","onClick","moveNext","movePrevious","preventMove","getSteps","setSteps","addEventListener","_nextClicked","target","contains","onSkip","handleNext","hasHighlightedElement","stopPropagation","clickedHighlightedElement","clickedPopover","nextClicked","prevClicked","closeClicked","skipClicked","handleSkip","handlePrevious","event","keyCode","previousStep","nextStep","hasNextStep","hasPreviousStep","defineSteps","prepareElementFromStep","push","getParentElementFromStep","log","allSteps","elementOptions","isStepDefinition","Error","domElement","mergedClassNames","c","join","popoverOptions","stageOptions","start","destory","selector","highlightAlert","popoverInfo","guideObj","useRef","useEffect","current","Common","pySegSort","arr","select","val","lettersArr","split","lettersMap","forEach","letter","sortedArr","sort","localeCompare","groups","notLetter","group","values","l","result","getWindowVar","str","TypeError","returned","key","shift","reg","EMOJI_PATH","pmap","emoticon_emoji_01","tag","file","emoticon_emoji_00","emoticon_emoji_02","emoticon_emoji_03","emoticon_emoji_04","emoticon_emoji_05","emoticon_emoji_06","emoticon_emoji_145","emoticon_emoji_07","emoticon_emoji_08","emoticon_emoji_09","emoticon_emoji_10","emoticon_emoji_11","emoticon_emoji_12","emoticon_emoji_13","emoticon_emoji_14","emoticon_emoji_15","emoticon_emoji_16","emoticon_emoji_17","emoticon_emoji_18","emoticon_emoji_19","emoticon_emoji_20","emoticon_emoji_21","emoticon_emoji_22","emoticon_emoji_23","emoticon_emoji_24","emoticon_emoji_25","emoticon_emoji_26","emoticon_emoji_27","emoticon_emoji_28","emoticon_emoji_29","emoticon_emoji_30","emoticon_emoji_31","emoticon_emoji_32","emoticon_emoji_33","emoticon_emoji_160","emoticon_emoji_161","emoticon_emoji_162","emoticon_emoji_163","emoticon_emoji_164","emoticon_emoji_165","emoticon_emoji_166","emoticon_emoji_34","emoticon_emoji_35","emoticon_emoji_36","emoticon_emoji_37","emoticon_emoji_38","emoticon_emoji_39","emoticon_emoji_200","emoticon_emoji_40","emoticon_emoji_41","emoticon_emoji_42","emoticon_emoji_43","emoticon_emoji_44","emoticon_emoji_45","emoticon_emoji_46","emoticon_emoji_47","emoticon_emoji_48","emoticon_emoji_49","emoticon_emoji_50","emoticon_emoji_51","emoticon_emoji_52","emoticon_emoji_53","emoticon_emoji_54","emoticon_emoji_55","emoticon_emoji_56","emoticon_emoji_57","emoticon_emoji_58","emoticon_emoji_59","emoticon_emoji_60","emoticon_emoji_61","emoticon_emoji_62","emoticon_emoji_63","emoticon_emoji_64","emoticon_emoji_65","emoticon_emoji_66","emoticon_emoji_67","emoticon_emoji_68","emoticon_emoji_69","emoticon_emoji_70","emoticon_emoji_71","emoticon_emoji_72","emoticon_emoji_73","emoticon_emoji_74","emoticon_emoji_75","emoticon_emoji_76","emoticon_emoji_77","emoticon_emoji_78","emoticon_emoji_79","emoticon_emoji_80","emoticon_emoji_81","emoticon_emoji_82","emoticon_emoji_83","emoticon_emoji_84","emoticon_emoji_85","emoticon_emoji_86","emoticon_emoji_87","emoticon_emoji_88","emoticon_emoji_89","emoticon_emoji_90","emoticon_emoji_91","emoticon_emoji_92","emoticon_emoji_93","emoticon_emoji_94","emoticon_emoji_95","emoticon_emoji_96","emoticon_emoji_97","emoticon_emoji_98","emoticon_emoji_99","emoticon_emoji_100","emoticon_emoji_101","emoticon_emoji_102","emoticon_emoji_103","emoticon_emoji_104","emoticon_emoji_105","emoticon_emoji_106","emoticon_emoji_107","emoticon_emoji_108","emoticon_emoji_109","emoticon_emoji_110","emoticon_emoji_111","emoticon_emoji_112","emoticon_emoji_113","emoticon_emoji_114","emoticon_emoji_115","emoticon_emoji_116","emoticon_emoji_117","emoticon_emoji_118","emoticon_emoji_119","emoticon_emoji_120","emoticon_emoji_121","emoticon_emoji_122","emoticon_emoji_123","emoticon_emoji_124","emoticon_emoji_125","emoticon_emoji_126","emoticon_emoji_127","emoticon_emoji_128","emoticon_emoji_129","emoticon_emoji_130","emoticon_emoji_131","emoticon_emoji_132","emoticon_emoji_133","emoticon_emoji_134","emoticon_emoji_135","emoticon_emoji_136","emoticon_emoji_137","emoticon_emoji_138","emoticon_emoji_139","emoticon_emoji_140","emoticon_emoji_141","emoticon_emoji_142","emoticon_emoji_143","emoticon_emoji_144","emoticon_emoji_146","emoticon_emoji_147","emoticon_emoji_148","emoticon_emoji_149","emoticon_emoji_150","emoticon_emoji_151","emoticon_emoji_152","emoticon_emoji_153","emoticon_emoji_154","emoticon_emoji_155","emoticon_emoji_156","emoticon_emoji_157","emoticon_emoji_201","emoticon_emoji_202","emoticon_emoji_203","emoticon_emoji_204","emoticon_emoji_205","emoticon_emoji_206","emoticon_emoji_207","emoticon_emoji_208","emoticon_emoji_209","emoticon_emoji_210","emoticon_emoji_211","emoticon_emoji_212","emoticon_emoji_213","emoticon_emoji_214","emoticon_emoji_215","emoticon_emoji_216","emoticon_emoji_217","emoticon_emoji_218","emoticon_emoji_219","emoticon_emoji_220","emoticon_emoji_221","emoticon_emoji_222","emoticon_emoji_223","emoticon_emoji_224","emoticon_emoji_225","emoticon_emoji_226","emoticon_emoji_227","emoticon_emoji_228","emoticon_emoji_229","emoticon_emoji_230","emoticon_emoji_231","emoticon_emoji_232","emoticon_emoji_233","emoticon_emoji_234","emoticon_emoji_235","emoticon_emoji_236","emoticon_emoji_237","emoticon_emoji_238","emoticon_emoji_239","emoticon_emoji_240","emoticon_emoji_241","emoticon_emoji_242","emoticon_emoji_243","emoticon_emoji_244","emoticon_emoji_245","emoticon_emoji_246","emoticon_emoji_247","emoticon_emoji_248","emoticon_emoji_249","emoticon_emoji_250","emoticon_emoji_251","emoticon_emoji_252","pmap2","getImgHTML","obj","id","src","defaultXssFilterOption","whiteList","img","font","u","i","ul","ol","li","br","p","span","strong","em","mark","video","h1","h2","h3","h4","h5","h6","table","tr","td","tbody","onIgnoreTagAttr","name","value","substr","onTagAttr","text2emoji","string","customEmojiMap","xssFilterOption","replace","all","$1","ret","find","item","url","formatEmoji","Emoji","textFilterEmoji","plist","Provider","I18nProvider","option","controller","signal","timeout","AbortController","timeoutId","abort","fetch","method","then","resp","status","json","code","catch","_resp$message","message","promptTitle","promptMsg","redirectUrl","response","obj2query","keys","k","encodeURIComponent","slice","isPlainObject","proto","getPrototypeOf","construct","hasOwnProperty","constructor","isPlainObjectOrArray","isArray","set","v","nval","nkey","opts","path","expires","Date","getTime","toString","toUTCString","tres","JSON","stringify","String","decodeURIComponent","escape","attr","cookie","get","res","decode","s","arg","cookies","n","len","parts","charAt","getJSON","parse","initOption","params","data","headers","Accept","responseType","credentials","csrfToken","config","assign","_config$method","_config$params","_config$data","_config$headers","_config$csrfToken","getUrl","token","query","ask","queryLangJson","_window","_window$setting","_option$params","setting","request","i18nSetLang","i18nString","i18nSetRtl","defaultLangJson","defaultLang","ifSetHTMLLang","ifSetRtl","i18nKey","loadingEle","onload","_useState","useState","lang","setLang","_useState2","langJson","setLangJson","_useState3","load","setLoad","queryJson","useCallback","_callee","_yield$queryLangJson","_formatResultData","normal","_context","prev","next","abrupt","locationList","sent","translate","language","t0","stop","I18nContext","t","tHTML","i18nIsZh","getHours","getI18nDateLocale","special","i18nDateLocaleMap","format","formatHiddenTime","sameDay","lastDay","sameDayTime","lastDayTime","en","ar","de","ru","fr","ko","pt","ja","th","es","vi","tl","pad","valTmp","lenTmp","i18nDateTime","timestamp","formatStr","Number","isNaN","Intl","maps","yyyy","date","getFullYear","MM","getMonth","dd","getDate","HH","mm","getMinutes","ss","getSeconds","trunk","RegExp","capture","timestamp2date","basicOption","hour12","calendar","year","month","day","hour","minute","second","DateTimeFormat","i18nDate","i18nTimestamp2fixedDate","formatFromMonth","abbr","hidenAbbrTime","startTime","nowTime","nowYear","nowMonth","nowDate","newValue","formatFromHour","i18nGetLangFormat","ifShowTime","toggleHalfFullWidth","punctuation","type","charCodeAt","fromCharCode","i18nPunctuation","i18nIsLongLang","indexOf","_document","_document2","dir","i18nFromProps","i18n","_ref2","getValue","defaultValue","getHTML","useMemo","ready","setAttr","defaultData","replaceSlot","KEY","_i4","replaceSlotHTML","_len3","_key3","_i5","_args2","dangerouslySetInnerHTML","__html","formatResultData","ppfishKey","_i6","_Object$keys4","ppfish","_i","_Object$keys","splitKey","formatPpfish","formatNBSP","BCP47_LANG_MAP","compatibleLang","supportLang","unavailableError","LogDb","_window$setting$user","_ref$preserveDays","preserveDays","_ref$removeAmountWhen","removeAmountWhenFullFilled","_ref$uid","uid","user","getEnabled","init","__logDb__","executeWhenIdle","handler","requestIdleCallback","getLogTable","mode","db","transaction","logTableName","objectStore","rejectWhenDbNotExist","_rejectWhenDbNotExist","Promise","reject","getLogs","operator","Function","logDb","capability","resolve","logs","_query","_query$index","_query$condition","condition","logTable","openCursor","onsuccess","cursor","continue","onerror","createFile","content","fileName","link","blob","Blob","href","URL","createObjectURL","download","click","getContent","_getContent","_callee2","_ref3","range","section","isRange","_context2","IDBKeyRange","bound","only","reverse","map","_ref4","callcenter","now","_x","localStorage","getItem","disabledKey","available","setEnabled","enabled","destroy","setItem","undefined","indexedDB","open","version","_ref5","sevenDaysAgoTimestamp","removeLogs","upperBound","onupgradeneeded","_ref6","objectStoreNames","createObjectStore","autoIncrement","createIndex","close","_ref7","_ref7$query","_ref7$number","number","Infinity","_ref8","delete","primaryKey","addLog","createTime","exportLogs","_exportLogs","_callee3","_ref9","_yield$this$getConten","_context3","_x2","getBlob","_getBlob","_callee4","_ref10","_yield$this$getConten2","_context4","_x3","Boolean","getLogDb","_excluded","MessageImage","view","retryInterval","onclick","other","setStatus","instanceRef","count","image","resetStatus","reload","Image","alt","onLoad","srcSet","defaultProps"],"sourceRoot":""}