jobsys-mpower
Version:
Enhanced component based on Taro & NutUI
1 lines • 328 kB
Source Map (JSON)
{"version":3,"file":"index-e3c6cc71.cjs","sources":["../../../node_modules/.pnpm/@tarojs+shared@3.6.20/node_modules/@tarojs/shared/dist/shared.esm.js","../../../node_modules/.pnpm/@tarojs+runtime@3.6.20/node_modules/@tarojs/runtime/dist/runtime.esm.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/typeof.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../../../node_modules/.pnpm/@babel+runtime@7.22.6/node_modules/@babel/runtime/helpers/esm/createClass.js","../../../node_modules/.pnpm/@tarojs+api@3.6.20/node_modules/@tarojs/api/dist/index.esm.js","../../../node_modules/.pnpm/@tarojs+taro@3.6.20_postcss@8.4.31_vue@3.3.4/node_modules/@tarojs/taro/index.js"],"sourcesContent":["const DEFAULT_EMPTY_ARRAY = '[]';\nconst NO_DEFAULT_VALUE = '';\nconst DEFAULT_TRUE = '!0';\nconst DEFAULT_FALSE = '!1';\nconst touchEvents = {\n bindTouchStart: NO_DEFAULT_VALUE,\n bindTouchMove: NO_DEFAULT_VALUE,\n bindTouchEnd: NO_DEFAULT_VALUE,\n bindTouchCancel: NO_DEFAULT_VALUE,\n bindLongTap: NO_DEFAULT_VALUE\n};\nconst animation = {\n animation: NO_DEFAULT_VALUE,\n bindAnimationStart: NO_DEFAULT_VALUE,\n bindAnimationIteration: NO_DEFAULT_VALUE,\n bindAnimationEnd: NO_DEFAULT_VALUE,\n bindTransitionEnd: NO_DEFAULT_VALUE\n};\nfunction singleQuote(s) {\n return `'${s}'`;\n}\nconst View = Object.assign(Object.assign({ 'hover-class': singleQuote('none'), 'hover-stop-propagation': DEFAULT_FALSE, 'hover-start-time': '50', 'hover-stay-time': '400' }, touchEvents), animation);\nconst Icon = {\n type: NO_DEFAULT_VALUE,\n size: '23',\n color: NO_DEFAULT_VALUE\n};\nconst MapComp = Object.assign({ longitude: NO_DEFAULT_VALUE, latitude: NO_DEFAULT_VALUE, scale: '16', markers: DEFAULT_EMPTY_ARRAY, covers: NO_DEFAULT_VALUE, polyline: DEFAULT_EMPTY_ARRAY, circles: DEFAULT_EMPTY_ARRAY, controls: DEFAULT_EMPTY_ARRAY, 'include-points': DEFAULT_EMPTY_ARRAY, 'show-location': NO_DEFAULT_VALUE, 'layer-style': '1', bindMarkerTap: NO_DEFAULT_VALUE, bindControlTap: NO_DEFAULT_VALUE, bindCalloutTap: NO_DEFAULT_VALUE, bindUpdated: NO_DEFAULT_VALUE }, touchEvents);\nconst Progress = {\n percent: NO_DEFAULT_VALUE,\n 'stroke-width': '6',\n color: singleQuote('#09BB07'),\n activeColor: singleQuote('#09BB07'),\n backgroundColor: singleQuote('#EBEBEB'),\n active: DEFAULT_FALSE,\n 'active-mode': singleQuote('backwards'),\n 'show-info': DEFAULT_FALSE\n};\nconst RichText = {\n nodes: DEFAULT_EMPTY_ARRAY\n};\nconst Text = {\n selectable: DEFAULT_FALSE,\n space: NO_DEFAULT_VALUE,\n decode: DEFAULT_FALSE\n};\nconst Button = Object.assign({ size: singleQuote('default'), type: NO_DEFAULT_VALUE, plain: DEFAULT_FALSE, disabled: NO_DEFAULT_VALUE, loading: DEFAULT_FALSE, 'form-type': NO_DEFAULT_VALUE, 'open-type': NO_DEFAULT_VALUE, 'hover-class': singleQuote('button-hover'), 'hover-stop-propagation': DEFAULT_FALSE, 'hover-start-time': '20', 'hover-stay-time': '70', name: NO_DEFAULT_VALUE, bindagreeprivacyauthorization: NO_DEFAULT_VALUE }, touchEvents);\nconst Checkbox = {\n value: NO_DEFAULT_VALUE,\n disabled: NO_DEFAULT_VALUE,\n checked: DEFAULT_FALSE,\n color: singleQuote('#09BB07'),\n name: NO_DEFAULT_VALUE\n};\nconst CheckboxGroup = {\n bindChange: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Form = {\n 'report-submit': DEFAULT_FALSE,\n bindSubmit: NO_DEFAULT_VALUE,\n bindReset: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Input = {\n value: NO_DEFAULT_VALUE,\n type: singleQuote(NO_DEFAULT_VALUE),\n password: DEFAULT_FALSE,\n placeholder: NO_DEFAULT_VALUE,\n 'placeholder-style': NO_DEFAULT_VALUE,\n 'placeholder-class': singleQuote('input-placeholder'),\n disabled: NO_DEFAULT_VALUE,\n maxlength: '140',\n 'cursor-spacing': '0',\n focus: DEFAULT_FALSE,\n 'confirm-type': singleQuote('done'),\n 'confirm-hold': DEFAULT_FALSE,\n cursor: '-1',\n 'selection-start': '-1',\n 'selection-end': '-1',\n bindInput: NO_DEFAULT_VALUE,\n bindFocus: NO_DEFAULT_VALUE,\n bindBlur: NO_DEFAULT_VALUE,\n bindConfirm: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Label = {\n for: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Picker = {\n mode: singleQuote('selector'),\n disabled: NO_DEFAULT_VALUE,\n range: NO_DEFAULT_VALUE,\n 'range-key': NO_DEFAULT_VALUE,\n value: NO_DEFAULT_VALUE,\n start: NO_DEFAULT_VALUE,\n end: NO_DEFAULT_VALUE,\n fields: singleQuote('day'),\n 'custom-item': NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE,\n bindCancel: NO_DEFAULT_VALUE,\n bindChange: NO_DEFAULT_VALUE,\n bindColumnChange: NO_DEFAULT_VALUE\n};\nconst PickerView = {\n value: NO_DEFAULT_VALUE,\n 'indicator-style': NO_DEFAULT_VALUE,\n 'indicator-class': NO_DEFAULT_VALUE,\n 'mask-style': NO_DEFAULT_VALUE,\n 'mask-class': NO_DEFAULT_VALUE,\n bindChange: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst PickerViewColumn = {\n name: NO_DEFAULT_VALUE\n};\nconst Radio = {\n value: NO_DEFAULT_VALUE,\n checked: DEFAULT_FALSE,\n disabled: NO_DEFAULT_VALUE,\n color: singleQuote('#09BB07'),\n name: NO_DEFAULT_VALUE\n};\nconst RadioGroup = {\n bindChange: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Slider = {\n min: '0',\n max: '100',\n step: '1',\n disabled: NO_DEFAULT_VALUE,\n value: '0',\n activeColor: singleQuote('#1aad19'),\n backgroundColor: singleQuote('#e9e9e9'),\n 'block-size': '28',\n 'block-color': singleQuote('#ffffff'),\n 'show-value': DEFAULT_FALSE,\n bindChange: NO_DEFAULT_VALUE,\n bindChanging: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Switch = {\n checked: DEFAULT_FALSE,\n disabled: NO_DEFAULT_VALUE,\n type: singleQuote('switch'),\n color: singleQuote('#04BE02'),\n bindChange: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst Textarea = {\n value: NO_DEFAULT_VALUE,\n placeholder: NO_DEFAULT_VALUE,\n 'placeholder-style': NO_DEFAULT_VALUE,\n 'placeholder-class': singleQuote('textarea-placeholder'),\n disabled: NO_DEFAULT_VALUE,\n maxlength: '140',\n 'auto-focus': DEFAULT_FALSE,\n focus: DEFAULT_FALSE,\n 'auto-height': DEFAULT_FALSE,\n fixed: DEFAULT_FALSE,\n 'cursor-spacing': '0',\n cursor: '-1',\n 'selection-start': '-1',\n 'selection-end': '-1',\n bindFocus: NO_DEFAULT_VALUE,\n bindBlur: NO_DEFAULT_VALUE,\n bindLineChange: NO_DEFAULT_VALUE,\n bindInput: NO_DEFAULT_VALUE,\n bindConfirm: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE\n};\nconst CoverImage = {\n src: NO_DEFAULT_VALUE,\n bindLoad: 'eh',\n bindError: 'eh'\n};\nconst CoverView = Object.assign({ 'scroll-top': DEFAULT_FALSE }, touchEvents);\nconst MovableArea = {\n 'scale-area': DEFAULT_FALSE\n};\nconst MovableView = Object.assign(Object.assign({ direction: 'none', inertia: DEFAULT_FALSE, 'out-of-bounds': DEFAULT_FALSE, x: NO_DEFAULT_VALUE, y: NO_DEFAULT_VALUE, damping: '20', friction: '2', disabled: NO_DEFAULT_VALUE, scale: DEFAULT_FALSE, 'scale-min': '0.5', 'scale-max': '10', 'scale-value': '1', bindChange: NO_DEFAULT_VALUE, bindScale: NO_DEFAULT_VALUE, bindHTouchMove: NO_DEFAULT_VALUE, bindVTouchMove: NO_DEFAULT_VALUE, width: singleQuote('10px'), height: singleQuote('10px') }, touchEvents), animation);\nconst ScrollView = Object.assign(Object.assign({ 'scroll-x': DEFAULT_FALSE, 'scroll-y': DEFAULT_FALSE, 'upper-threshold': '50', 'lower-threshold': '50', 'scroll-top': NO_DEFAULT_VALUE, 'scroll-left': NO_DEFAULT_VALUE, 'scroll-into-view': NO_DEFAULT_VALUE, 'scroll-with-animation': DEFAULT_FALSE, 'enable-back-to-top': DEFAULT_FALSE, bindScrollToUpper: NO_DEFAULT_VALUE, bindScrollToLower: NO_DEFAULT_VALUE, bindScroll: NO_DEFAULT_VALUE }, touchEvents), animation);\nconst Swiper = Object.assign({ 'indicator-dots': DEFAULT_FALSE, 'indicator-color': singleQuote('rgba(0, 0, 0, .3)'), 'indicator-active-color': singleQuote('#000000'), autoplay: DEFAULT_FALSE, current: '0', interval: '5000', duration: '500', circular: DEFAULT_FALSE, vertical: DEFAULT_FALSE, 'previous-margin': singleQuote('0px'), 'next-margin': singleQuote('0px'), 'display-multiple-items': '1', bindChange: NO_DEFAULT_VALUE, bindTransition: NO_DEFAULT_VALUE, bindAnimationFinish: NO_DEFAULT_VALUE }, touchEvents);\nconst SwiperItem = {\n 'item-id': NO_DEFAULT_VALUE\n};\nconst Navigator = {\n url: NO_DEFAULT_VALUE,\n 'open-type': singleQuote('navigate'),\n delta: '1',\n 'hover-class': singleQuote('navigator-hover'),\n 'hover-stop-propagation': DEFAULT_FALSE,\n 'hover-start-time': '50',\n 'hover-stay-time': '600',\n bindSuccess: NO_DEFAULT_VALUE,\n bindFail: NO_DEFAULT_VALUE,\n bindComplete: NO_DEFAULT_VALUE\n};\nconst Audio = {\n id: NO_DEFAULT_VALUE,\n src: NO_DEFAULT_VALUE,\n loop: DEFAULT_FALSE,\n controls: DEFAULT_FALSE,\n poster: NO_DEFAULT_VALUE,\n name: NO_DEFAULT_VALUE,\n author: NO_DEFAULT_VALUE,\n bindError: NO_DEFAULT_VALUE,\n bindPlay: NO_DEFAULT_VALUE,\n bindPause: NO_DEFAULT_VALUE,\n bindTimeUpdate: NO_DEFAULT_VALUE,\n bindEnded: NO_DEFAULT_VALUE\n};\nconst Camera = {\n 'device-position': singleQuote('back'),\n flash: singleQuote('auto'),\n bindStop: NO_DEFAULT_VALUE,\n bindError: NO_DEFAULT_VALUE\n};\nconst Image = Object.assign({ src: NO_DEFAULT_VALUE, mode: singleQuote('scaleToFill'), 'lazy-load': DEFAULT_FALSE, bindError: NO_DEFAULT_VALUE, bindLoad: NO_DEFAULT_VALUE }, touchEvents);\nconst LivePlayer = Object.assign({ src: NO_DEFAULT_VALUE, autoplay: DEFAULT_FALSE, muted: DEFAULT_FALSE, orientation: singleQuote('vertical'), 'object-fit': singleQuote('contain'), 'background-mute': DEFAULT_FALSE, 'min-cache': '1', 'max-cache': '3', bindStateChange: NO_DEFAULT_VALUE, bindFullScreenChange: NO_DEFAULT_VALUE, bindNetStatus: NO_DEFAULT_VALUE }, animation);\nconst Video = Object.assign({ src: NO_DEFAULT_VALUE, duration: NO_DEFAULT_VALUE, controls: DEFAULT_TRUE, 'danmu-list': NO_DEFAULT_VALUE, 'danmu-btn': NO_DEFAULT_VALUE, 'enable-danmu': NO_DEFAULT_VALUE, autoplay: DEFAULT_FALSE, loop: DEFAULT_FALSE, muted: DEFAULT_FALSE, 'initial-time': '0', 'page-gesture': DEFAULT_FALSE, direction: NO_DEFAULT_VALUE, 'show-progress': DEFAULT_TRUE, 'show-fullscreen-btn': DEFAULT_TRUE, 'show-play-btn': DEFAULT_TRUE, 'show-center-play-btn': DEFAULT_TRUE, 'enable-progress-gesture': DEFAULT_TRUE, 'object-fit': singleQuote('contain'), poster: NO_DEFAULT_VALUE, 'show-mute-btn': DEFAULT_FALSE, bindPlay: NO_DEFAULT_VALUE, bindPause: NO_DEFAULT_VALUE, bindEnded: NO_DEFAULT_VALUE, bindTimeUpdate: NO_DEFAULT_VALUE, bindFullScreenChange: NO_DEFAULT_VALUE, bindWaiting: NO_DEFAULT_VALUE, bindError: NO_DEFAULT_VALUE }, animation);\nconst Canvas = Object.assign({ 'canvas-id': NO_DEFAULT_VALUE, 'disable-scroll': DEFAULT_FALSE, bindError: NO_DEFAULT_VALUE }, touchEvents);\nconst Ad = {\n 'unit-id': NO_DEFAULT_VALUE,\n 'ad-intervals': NO_DEFAULT_VALUE,\n bindLoad: NO_DEFAULT_VALUE,\n bindError: NO_DEFAULT_VALUE,\n bindClose: NO_DEFAULT_VALUE\n};\nconst WebView = {\n src: NO_DEFAULT_VALUE,\n bindMessage: NO_DEFAULT_VALUE,\n bindLoad: NO_DEFAULT_VALUE,\n bindError: NO_DEFAULT_VALUE\n};\nconst Block = {};\n// For Vue,因为 slot 标签被 vue 占用了\nconst SlotView = {\n name: NO_DEFAULT_VALUE\n};\n// For React\n// Slot 和 SlotView 最终都会编译成 <view slot={{ i.name }} />\n// 因为 <slot name=\"{{ i.name }}\" /> 适用性没有前者高(无法添加类和样式)\n// 不给 View 直接加 slot 属性的原因是性能损耗\nconst Slot = {\n name: NO_DEFAULT_VALUE\n};\nconst NativeSlot = {\n name: NO_DEFAULT_VALUE\n};\nconst internalComponents = {\n View,\n Icon,\n Progress,\n RichText,\n Text,\n Button,\n Checkbox,\n CheckboxGroup,\n Form,\n Input,\n Label,\n Picker,\n PickerView,\n PickerViewColumn,\n Radio,\n RadioGroup,\n Slider,\n Switch,\n CoverImage,\n Textarea,\n CoverView,\n MovableArea,\n MovableView,\n ScrollView,\n Swiper,\n SwiperItem,\n Navigator,\n Audio,\n Camera,\n Image,\n LivePlayer,\n Video,\n Canvas,\n Ad,\n WebView,\n Block,\n Map: MapComp,\n Slot,\n SlotView,\n NativeSlot,\n};\nconst controlledComponent = new Set([\n 'input',\n 'checkbox',\n 'picker',\n 'picker-view',\n 'radio',\n 'slider',\n 'switch',\n 'textarea'\n]);\nconst focusComponents = new Set([\n 'input',\n 'textarea'\n]);\nconst voidElements = new Set([\n 'progress',\n 'icon',\n 'rich-text',\n 'input',\n 'textarea',\n 'slider',\n 'switch',\n 'audio',\n 'ad',\n 'official-account',\n 'open-data',\n 'navigation-bar'\n]);\nconst nestElements = new Map([\n ['view', -1],\n ['catch-view', -1],\n ['cover-view', -1],\n ['static-view', -1],\n ['pure-view', -1],\n ['block', -1],\n ['text', -1],\n ['static-text', 6],\n ['slot', 8],\n ['slot-view', 8],\n ['label', 6],\n ['form', 4],\n ['scroll-view', 4],\n ['swiper', 4],\n ['swiper-item', 4]\n]);\n\nvar PLATFORM_TYPE;\n(function (PLATFORM_TYPE) {\n PLATFORM_TYPE[\"MINI\"] = \"mini\";\n PLATFORM_TYPE[\"WEB\"] = \"web\";\n PLATFORM_TYPE[\"RN\"] = \"rn\";\n PLATFORM_TYPE[\"HARMONY\"] = \"harmony\";\n PLATFORM_TYPE[\"QUICK\"] = \"quickapp\";\n})(PLATFORM_TYPE || (PLATFORM_TYPE = {}));\nconst PLATFORM_CONFIG_MAP = {\n h5: {\n type: PLATFORM_TYPE.WEB\n },\n harmony: {\n type: PLATFORM_TYPE.HARMONY\n },\n mini: {\n type: PLATFORM_TYPE.MINI\n },\n rn: {\n type: PLATFORM_TYPE.RN\n },\n quickapp: {\n type: PLATFORM_TYPE.QUICK\n }\n};\n\nclass Events {\n constructor(opts) {\n var _a;\n this.callbacks = (_a = opts === null || opts === void 0 ? void 0 : opts.callbacks) !== null && _a !== void 0 ? _a : {};\n }\n on(eventName, callback, context) {\n let event, tail, _eventName;\n if (!callback) {\n return this;\n }\n if (typeof eventName === 'symbol') {\n _eventName = [eventName];\n }\n else {\n _eventName = eventName.split(Events.eventSplitter);\n }\n this.callbacks || (this.callbacks = {});\n const calls = this.callbacks;\n while ((event = _eventName.shift())) {\n const list = calls[event];\n const node = list ? list.tail : {};\n node.next = tail = {};\n node.context = context;\n node.callback = callback;\n calls[event] = {\n tail,\n next: list ? list.next : node\n };\n }\n return this;\n }\n once(events, callback, context) {\n const wrapper = (...args) => {\n callback.apply(this, args);\n this.off(events, wrapper, context);\n };\n this.on(events, wrapper, context);\n return this;\n }\n off(events, callback, context) {\n let event, calls, _events;\n if (!(calls = this.callbacks)) {\n return this;\n }\n if (!(events || callback || context)) {\n delete this.callbacks;\n return this;\n }\n if (typeof events === 'symbol') {\n _events = [events];\n }\n else {\n _events = events ? events.split(Events.eventSplitter) : Object.keys(calls);\n }\n while ((event = _events.shift())) {\n let node = calls[event];\n delete calls[event];\n if (!node || !(callback || context)) {\n continue;\n }\n const tail = node.tail;\n while ((node = node.next) !== tail) {\n const cb = node.callback;\n const ctx = node.context;\n if ((callback && cb !== callback) || (context && ctx !== context)) {\n this.on(event, cb, ctx);\n }\n }\n }\n return this;\n }\n trigger(events, ...args) {\n let event, node, calls, _events;\n if (!(calls = this.callbacks)) {\n return this;\n }\n if (typeof events === 'symbol') {\n _events = [events];\n }\n else {\n _events = events.split(Events.eventSplitter);\n }\n while ((event = _events.shift())) {\n if ((node = calls[event])) {\n const tail = node.tail;\n while ((node = node.next) !== tail) {\n node.callback.apply(node.context || this, args);\n }\n }\n }\n return this;\n }\n}\nEvents.eventSplitter = ','; // Note: Harmony ACE API 8 开发板不支持使用正则 split 字符串 /\\s+/\n\nfunction isString(o) {\n return typeof o === 'string';\n}\nfunction isUndefined(o) {\n return typeof o === 'undefined';\n}\nfunction isNull(o) {\n return o === null;\n}\nfunction isObject(o) {\n return o !== null && typeof o === 'object';\n}\nfunction isBoolean(o) {\n return o === true || o === false;\n}\nfunction isFunction(o) {\n return typeof o === 'function';\n}\nfunction isNumber(o) {\n return typeof o === 'number';\n}\nfunction isBooleanStringLiteral(o) {\n return o === 'true' || o === 'false';\n}\nconst isArray = Array.isArray;\nconst isWebPlatform = () => process.env.TARO_ENV === 'h5' || process.env.TARO_PLATFORM === 'web';\n\nvar HOOK_TYPE;\n(function (HOOK_TYPE) {\n HOOK_TYPE[HOOK_TYPE[\"SINGLE\"] = 0] = \"SINGLE\";\n HOOK_TYPE[HOOK_TYPE[\"MULTI\"] = 1] = \"MULTI\";\n HOOK_TYPE[HOOK_TYPE[\"WATERFALL\"] = 2] = \"WATERFALL\";\n})(HOOK_TYPE || (HOOK_TYPE = {}));\nconst defaultMiniLifecycle = {\n app: [\n 'onLaunch',\n 'onShow',\n 'onHide'\n ],\n page: [\n 'onLoad',\n 'onUnload',\n 'onReady',\n 'onShow',\n 'onHide',\n [\n 'onPullDownRefresh',\n 'onReachBottom',\n 'onPageScroll',\n 'onResize',\n 'defer:onTabItemTap',\n 'onTitleClick',\n 'onOptionMenuClick',\n 'onPopMenuClick',\n 'onPullIntercept',\n 'onAddToFavorites'\n ],\n [\n 'onShareAppMessage',\n 'onShareTimeline'\n ]\n ],\n component: [\n 'attached',\n 'detached'\n ]\n};\nfunction TaroHook(type, initial) {\n return {\n type,\n initial: initial || null\n };\n}\nclass TaroHooks extends Events {\n constructor(hooks, opts) {\n super(opts);\n this.hooks = hooks;\n for (const hookName in hooks) {\n const { initial } = hooks[hookName];\n if (isFunction(initial)) {\n this.on(hookName, initial);\n }\n }\n }\n tapOneOrMany(hookName, callback) {\n const list = isFunction(callback) ? [callback] : callback;\n list.forEach(cb => this.on(hookName, cb));\n }\n tap(hookName, callback) {\n const hooks = this.hooks;\n const { type, initial } = hooks[hookName];\n if (type === HOOK_TYPE.SINGLE) {\n this.off(hookName);\n this.on(hookName, isFunction(callback) ? callback : callback[callback.length - 1]);\n }\n else {\n initial && this.off(hookName, initial);\n this.tapOneOrMany(hookName, callback);\n }\n }\n call(hookName, ...rest) {\n var _a;\n const hook = this.hooks[hookName];\n if (!hook)\n return;\n const { type } = hook;\n const calls = this.callbacks;\n if (!calls)\n return;\n const list = calls[hookName];\n if (list) {\n const tail = list.tail;\n let node = list.next;\n let args = rest;\n let res;\n while (node !== tail) {\n res = (_a = node.callback) === null || _a === void 0 ? void 0 : _a.apply(node.context || this, args);\n if (type === HOOK_TYPE.WATERFALL) {\n const params = [res];\n args = params;\n }\n node = node.next;\n }\n return res;\n }\n }\n isExist(hookName) {\n var _a;\n return Boolean((_a = this.callbacks) === null || _a === void 0 ? void 0 : _a[hookName]);\n }\n}\nconst hooks = new TaroHooks({\n getMiniLifecycle: TaroHook(HOOK_TYPE.SINGLE, defaultConfig => defaultConfig),\n getMiniLifecycleImpl: TaroHook(HOOK_TYPE.SINGLE, function () {\n return this.call('getMiniLifecycle', defaultMiniLifecycle);\n }),\n getLifecycle: TaroHook(HOOK_TYPE.SINGLE, (instance, lifecycle) => instance[lifecycle]),\n modifyRecursiveComponentConfig: TaroHook(HOOK_TYPE.SINGLE, (defaultConfig) => defaultConfig),\n getPathIndex: TaroHook(HOOK_TYPE.SINGLE, indexOfNode => `[${indexOfNode}]`),\n getEventCenter: TaroHook(HOOK_TYPE.SINGLE, Events => new Events()),\n isBubbleEvents: TaroHook(HOOK_TYPE.SINGLE, eventName => {\n /**\n * 支持冒泡的事件, 除 支付宝小程序外,其余的可冒泡事件都和微信保持一致\n * 详见 见 https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html\n */\n const BUBBLE_EVENTS = new Set([\n 'touchstart',\n 'touchmove',\n 'touchcancel',\n 'touchend',\n 'touchforcechange',\n 'tap',\n 'longpress',\n 'longtap',\n 'transitionend',\n 'animationstart',\n 'animationiteration',\n 'animationend'\n ]);\n return BUBBLE_EVENTS.has(eventName);\n }),\n getSpecialNodes: TaroHook(HOOK_TYPE.SINGLE, () => ['view', 'text', 'image']),\n onRemoveAttribute: TaroHook(HOOK_TYPE.SINGLE),\n batchedEventUpdates: TaroHook(HOOK_TYPE.SINGLE),\n mergePageInstance: TaroHook(HOOK_TYPE.SINGLE),\n modifyPageObject: TaroHook(HOOK_TYPE.SINGLE),\n createPullDownComponent: TaroHook(HOOK_TYPE.SINGLE),\n getDOMNode: TaroHook(HOOK_TYPE.SINGLE),\n modifyHydrateData: TaroHook(HOOK_TYPE.SINGLE),\n transferHydrateData: TaroHook(HOOK_TYPE.SINGLE),\n modifySetAttrPayload: TaroHook(HOOK_TYPE.SINGLE),\n modifyRmAttrPayload: TaroHook(HOOK_TYPE.SINGLE),\n onAddEvent: TaroHook(HOOK_TYPE.SINGLE),\n proxyToRaw: TaroHook(HOOK_TYPE.SINGLE, function (proxyObj) {\n return proxyObj;\n }),\n modifyMpEvent: TaroHook(HOOK_TYPE.MULTI),\n modifyMpEventImpl: TaroHook(HOOK_TYPE.SINGLE, function (e) {\n try {\n // 有些小程序的事件对象的某些属性只读\n this.call('modifyMpEvent', e);\n }\n catch (error) {\n console.warn('[Taro modifyMpEvent hook Error]: ' + (error === null || error === void 0 ? void 0 : error.message));\n }\n }),\n injectNewStyleProperties: TaroHook(HOOK_TYPE.SINGLE),\n modifyTaroEvent: TaroHook(HOOK_TYPE.MULTI),\n dispatchTaroEvent: TaroHook(HOOK_TYPE.SINGLE, (e, node) => {\n node.dispatchEvent(e);\n }),\n dispatchTaroEventFinish: TaroHook(HOOK_TYPE.MULTI),\n modifyDispatchEvent: TaroHook(HOOK_TYPE.MULTI),\n initNativeApi: TaroHook(HOOK_TYPE.MULTI),\n patchElement: TaroHook(HOOK_TYPE.MULTI),\n modifyAddEventListener: TaroHook(HOOK_TYPE.SINGLE),\n modifyRemoveEventListener: TaroHook(HOOK_TYPE.SINGLE),\n});\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\nconst noop = (..._) => { };\n/**\n * box creates a boxed value.\n *\n * @typeparam T Value type.\n * @param v Value.\n * @returns Boxed value.\n */\nconst box = (v) => ({ v });\n/**\n * box creates a boxed value.\n *\n * @typeparam T Value type.\n * @param b Boxed value.\n * @returns Value.\n */\nconst unbox = (b) => b.v;\nfunction toDashed(s) {\n return s.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\nfunction toCamelCase(s) {\n let camel = '';\n let nextCap = false;\n for (let i = 0; i < s.length; i++) {\n if (s[i] !== '-') {\n camel += nextCap ? s[i].toUpperCase() : s[i];\n nextCap = false;\n }\n else {\n nextCap = true;\n }\n }\n return camel;\n}\nconst toKebabCase = function (string) {\n return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n};\nfunction capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n}\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\n/**\n * ensure takes a condition and throw a error if the condition fails,\n * like failure::ensure: https://docs.rs/failure/0.1.1/failure/macro.ensure.html\n * @param condition condition.\n * @param msg error message.\n */\nfunction ensure(condition, msg) {\n if (!condition) {\n if (process.env.NODE_ENV !== 'production') {\n const reportIssue = '\\n如有疑问,请提交 issue 至:https://github.com/nervjs/taro/issues';\n throw new Error(msg + reportIssue);\n }\n else {\n throw new Error(msg);\n }\n }\n}\nfunction warn(condition, msg) {\n if (process.env.NODE_ENV !== 'production') {\n if (condition) {\n console.warn(`[taro warn] ${msg}`);\n }\n }\n}\nfunction queryToJson(str) {\n const dec = decodeURIComponent;\n const qp = str.split('&');\n const ret = {};\n let name;\n let val;\n for (let i = 0, l = qp.length, item; i < l; ++i) {\n item = qp[i];\n if (item.length) {\n const s = item.indexOf('=');\n if (s < 0) {\n name = dec(item);\n val = '';\n }\n else {\n name = dec(item.slice(0, s));\n val = dec(item.slice(s + 1));\n }\n if (typeof ret[name] === 'string') { // inline'd type check\n ret[name] = [ret[name]];\n }\n if (Array.isArray(ret[name])) {\n ret[name].push(val);\n }\n else {\n ret[name] = val;\n }\n }\n }\n return ret; // Object\n}\nlet _uniqueId = 1;\nconst _loadTime = (new Date()).getTime().toString();\nfunction getUniqueKey() {\n return _loadTime + (_uniqueId++);\n}\nconst cacheData = {};\nfunction cacheDataSet(key, val) {\n cacheData[key] = val;\n}\nfunction cacheDataGet(key, delelteAfterGet) {\n const temp = cacheData[key];\n delelteAfterGet && delete cacheData[key];\n return temp;\n}\nfunction cacheDataHas(key) {\n return key in cacheData;\n}\nfunction mergeInternalComponents(components) {\n Object.keys(components).forEach(name => {\n if (name in internalComponents) {\n Object.assign(internalComponents[name], components[name]);\n }\n else {\n internalComponents[name] = components[name];\n }\n });\n return internalComponents;\n}\nfunction getComponentsAlias(origin) {\n const mapping = {};\n const viewAttrs = origin.View;\n const extraList = {\n '#text': {},\n StaticView: viewAttrs,\n StaticImage: origin.Image,\n StaticText: origin.Text,\n PureView: viewAttrs,\n CatchView: viewAttrs\n };\n origin = Object.assign(Object.assign({}, origin), extraList);\n Object.keys(origin)\n .sort((a, b) => {\n const reg = /^(Static|Pure|Catch)*(View|Image|Text)$/;\n const isACommonly = reg.test(a);\n const isBCommonly = reg.test(b);\n if (isACommonly && isBCommonly) {\n return a > b ? 1 : -1;\n }\n else if (isACommonly) {\n return -1;\n }\n else if (isBCommonly) {\n return 1;\n }\n else {\n return a >= b ? 1 : -1;\n }\n })\n .forEach((key, num) => {\n const obj = {\n _num: String(num)\n };\n Object.keys(origin[key])\n .filter(attr => !(/^bind/.test(attr)) && !['focus', 'blur'].includes(attr))\n .sort()\n .forEach((attr, index) => {\n obj[toCamelCase(attr)] = 'p' + index;\n });\n mapping[toDashed(key)] = obj;\n });\n return mapping;\n}\nfunction getPlatformType(platform = 'weapp', configNameOrType = PLATFORM_TYPE.MINI) {\n if (Object.keys(PLATFORM_CONFIG_MAP).includes(platform)) {\n configNameOrType = platform;\n }\n const param = PLATFORM_CONFIG_MAP[configNameOrType] || {};\n return param.type || configNameOrType;\n}\nfunction mergeReconciler(hostConfig, hooksForTest) {\n const obj = hooksForTest || hooks;\n const keys = Object.keys(hostConfig);\n keys.forEach(key => {\n obj.tap(key, hostConfig[key]);\n });\n}\nfunction nonsupport(api) {\n return function () {\n console.warn(`小程序暂不支持 ${api}`);\n };\n}\nfunction setUniqueKeyToRoute(key, obj) {\n const routerParamsPrivateKey = '__key_';\n const useDataCacheApis = [\n 'navigateTo',\n 'redirectTo',\n 'reLaunch',\n 'switchTab'\n ];\n if (useDataCacheApis.indexOf(key) > -1) {\n const url = obj.url = obj.url || '';\n const hasMark = url.indexOf('?') > -1;\n const cacheKey = getUniqueKey();\n obj.url += (hasMark ? '&' : '?') + `${routerParamsPrivateKey}=${cacheKey}`;\n }\n}\nfunction indent(str, size) {\n return str.split('\\n')\n .map((line, index) => {\n const indent = index === 0 ? '' : Array(size).fill(' ').join('');\n return indent + line;\n })\n .join('\\n');\n}\n\nconst needPromiseApis = new Set([\n 'addPhoneContact',\n 'authorize',\n 'canvasGetImageData',\n 'canvasPutImageData',\n 'canvasToTempFilePath',\n 'checkSession',\n 'chooseAddress',\n 'chooseImage',\n 'chooseInvoiceTitle',\n 'chooseLocation',\n 'chooseVideo',\n 'clearStorage',\n 'closeBLEConnection',\n 'closeBluetoothAdapter',\n 'closeSocket',\n 'compressImage',\n 'connectSocket',\n 'createBLEConnection',\n 'downloadFile',\n 'exitMiniProgram',\n 'getAvailableAudioSources',\n 'getBLEDeviceCharacteristics',\n 'getBLEDeviceServices',\n 'getBatteryInfo',\n 'getBeacons',\n 'getBluetoothAdapterState',\n 'getBluetoothDevices',\n 'getClipboardData',\n 'getConnectedBluetoothDevices',\n 'getConnectedWifi',\n 'getExtConfig',\n 'getFileInfo',\n 'getImageInfo',\n 'getLocation',\n 'getNetworkType',\n 'getSavedFileInfo',\n 'getSavedFileList',\n 'getScreenBrightness',\n 'getSetting',\n 'getStorage',\n 'getStorageInfo',\n 'getSystemInfo',\n 'getUserInfo',\n 'getWifiList',\n 'hideHomeButton',\n 'hideShareMenu',\n 'hideTabBar',\n 'hideTabBarRedDot',\n 'loadFontFace',\n 'login',\n 'makePhoneCall',\n 'navigateBack',\n 'navigateBackMiniProgram',\n 'navigateTo',\n 'navigateToBookshelf',\n 'navigateToMiniProgram',\n 'notifyBLECharacteristicValueChange',\n 'hideKeyboard',\n 'hideLoading',\n 'hideNavigationBarLoading',\n 'hideToast',\n 'openBluetoothAdapter',\n 'openDocument',\n 'openLocation',\n 'openSetting',\n 'pageScrollTo',\n 'previewImage',\n 'queryBookshelf',\n 'reLaunch',\n 'readBLECharacteristicValue',\n 'redirectTo',\n 'removeSavedFile',\n 'removeStorage',\n 'removeTabBarBadge',\n 'requestSubscribeMessage',\n 'saveFile',\n 'saveImageToPhotosAlbum',\n 'saveVideoToPhotosAlbum',\n 'scanCode',\n 'sendSocketMessage',\n 'setBackgroundColor',\n 'setBackgroundTextStyle',\n 'setClipboardData',\n 'setEnableDebug',\n 'setInnerAudioOption',\n 'setKeepScreenOn',\n 'setNavigationBarColor',\n 'setNavigationBarTitle',\n 'setScreenBrightness',\n 'setStorage',\n 'setTabBarBadge',\n 'setTabBarItem',\n 'setTabBarStyle',\n 'showActionSheet',\n 'showFavoriteGuide',\n 'showLoading',\n 'showModal',\n 'showShareMenu',\n 'showTabBar',\n 'showTabBarRedDot',\n 'showToast',\n 'startBeaconDiscovery',\n 'startBluetoothDevicesDiscovery',\n 'startDeviceMotionListening',\n 'startPullDownRefresh',\n 'stopBeaconDiscovery',\n 'stopBluetoothDevicesDiscovery',\n 'stopCompass',\n 'startCompass',\n 'startAccelerometer',\n 'stopAccelerometer',\n 'showNavigationBarLoading',\n 'stopDeviceMotionListening',\n 'stopPullDownRefresh',\n 'switchTab',\n 'uploadFile',\n 'vibrateLong',\n 'vibrateShort',\n 'writeBLECharacteristicValue'\n]);\nfunction getCanIUseWebp(taro) {\n return function () {\n var _a;\n const res = (_a = taro.getSystemInfoSync) === null || _a === void 0 ? void 0 : _a.call(taro);\n if (!res) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('不支持 API canIUseWebp');\n }\n return false;\n }\n const { platform } = res;\n const platformLower = platform.toLowerCase();\n if (platformLower === 'android' || platformLower === 'devtools') {\n return true;\n }\n return false;\n };\n}\nfunction getNormalRequest(global) {\n return function request(options) {\n options = options\n ? (isString(options)\n ? { url: options }\n : options)\n : {};\n const originSuccess = options.success;\n const originFail = options.fail;\n const originComplete = options.complete;\n let requestTask;\n const p = new Promise((resolve, reject) => {\n options.success = res => {\n originSuccess && originSuccess(res);\n resolve(res);\n };\n options.fail = res => {\n originFail && originFail(res);\n reject(res);\n };\n options.complete = res => {\n originComplete && originComplete(res);\n };\n requestTask = global.request(options);\n });\n equipTaskMethodsIntoPromise(requestTask, p);\n p.abort = (cb) => {\n cb && cb();\n if (requestTask) {\n requestTask.abort();\n }\n return p;\n };\n return p;\n };\n}\nfunction processApis(taro, global, config = {}) {\n const patchNeedPromiseApis = config.needPromiseApis || [];\n const _needPromiseApis = new Set([...patchNeedPromiseApis, ...needPromiseApis]);\n const preserved = [\n 'getEnv',\n 'interceptors',\n 'Current',\n 'getCurrentInstance',\n 'options',\n 'nextTick',\n 'eventCenter',\n 'Events',\n 'preload',\n 'webpackJsonp'\n ];\n const apis = new Set(!config.isOnlyPromisify\n ? Object.keys(global).filter(api => preserved.indexOf(api) === -1)\n : patchNeedPromiseApis);\n if (config.modifyApis) {\n config.modifyApis(apis);\n }\n apis.forEach(key => {\n if (_needPromiseApis.has(key)) {\n const originKey = key;\n taro[originKey] = (options = {}, ...args) => {\n let key = originKey;\n // 第一个参数 options 为字符串,单独处理\n if (typeof options === 'string') {\n if (args.length) {\n return global[key](options, ...args);\n }\n return global[key](options);\n }\n // 改变 key 或 option 字段,如需要把支付宝标准的字段对齐微信标准的字段\n if (config.transformMeta) {\n const transformResult = config.transformMeta(key, options);\n key = transformResult.key;\n options = transformResult.options;\n // 新 key 可能不存在\n if (!global.hasOwnProperty(key)) {\n return nonsupport(key)();\n }\n }\n let task = null;\n const obj = Object.assign({}, options);\n // 为页面跳转相关的 API 设置一个随机数作为路由参数。为了给 runtime 区分页面。\n setUniqueKeyToRoute(key, options);\n // Promise 化\n const p = new Promise((resolve, reject) => {\n obj.success = res => {\n var _a, _b;\n (_a = config.modifyAsyncResult) === null || _a === void 0 ? void 0 : _a.call(config, key, res);\n (_b = options.success) === null || _b === void 0 ? void 0 : _b.call(options, res);\n if (key === 'connectSocket') {\n resolve(Promise.resolve().then(() => task ? Object.assign(task, res) : res));\n }\n else {\n resolve(res);\n }\n };\n obj.fail = res => {\n var _a;\n (_a = options.fail) === null || _a === void 0 ? void 0 : _a.call(options, res);\n reject(res);\n };\n obj.complete = res => {\n var _a;\n (_a = options.complete) === null || _a === void 0 ? void 0 : _a.call(options, res);\n };\n if (args.length) {\n task = global[key](obj, ...args);\n }\n else {\n task = global[key](obj);\n }\n });\n // 给 promise 对象挂载属性\n if (['uploadFile', 'downloadFile'].includes(key)) {\n equipTaskMethodsIntoPromise(task, p);\n p.progress = cb => {\n task === null || task === void 0 ? void 0 : task.onProgressUpdate(cb);\n return p;\n };\n p.abort = cb => {\n cb === null || cb === void 0 ? void 0 : cb();\n task === null || task === void 0 ? void 0 : task.abort();\n return p;\n };\n }\n return p;\n };\n }\n else {\n let platformKey = key;\n // 改变 key 或 option 字段,如需要把支付宝标准的字段对齐微信标准的字段\n if (config.transformMeta) {\n platformKey = config.transformMeta(key, {}).key;\n }\n // API 不存在\n if (!global.hasOwnProperty(platformKey)) {\n taro[key] = nonsupport(key);\n return;\n }\n if (isFunction(global[key])) {\n taro[key] = (...args) => {\n if (config.handleSyncApis) {\n return config.handleSyncApis(key, global, args);\n }\n else {\n return global[platformKey].apply(global, args);\n }\n };\n }\n else {\n taro[key] = global[platformKey];\n }\n }\n });\n !config.isOnlyPromisify && equipCommonApis(taro, global, config);\n}\n/**\n * 挂载常用 API\n * @param taro Taro 对象\n * @param global 小程序全局对象,如微信的 wx,支付宝的 my\n */\nfunction equipCommonApis(taro, global, apis = {}) {\n taro.canIUseWebp = getCanIUseWebp(taro);\n taro.getCurrentPages = getCurrentPages || nonsupport('getCurrentPages');\n taro.getApp = getApp || nonsupport('getApp');\n taro.env = global.env || {};\n try {\n taro.requirePlugin = requirePlugin || nonsupport('requirePlugin');\n }\n catch (error) {\n taro.requirePlugin = nonsupport('requirePlugin');\n }\n // request & interceptors\n const request = apis.request || getNormalRequest(global);\n function taroInterceptor(chain) {\n return request(chain.requestParams);\n }\n const link = new taro.Link(taroInterceptor);\n taro.request = link.request.bind(link);\n taro.addInterceptor = link.addInterceptor.bind(link);\n taro.cleanInterceptors = link.cleanInterceptors.bind(link);\n taro.miniGlobal = taro.options.miniGlobal = global;\n taro.getAppInfo = function () {\n return {\n platform: process.env.TARO_PLATFORM || 'MiniProgram',\n taroVersion: process.env.TARO_VERSION || 'unknown',\n designWidth: taro.config.designWidth\n };\n };\n taro.createSelectorQuery = delayRef(taro, global, 'createSelectorQuery', 'exec');\n taro.createIntersectionObserver = delayRef(taro, global, 'createIntersectionObserver', 'observe');\n}\n/**\n * 将Task对象中的方法挂载到promise对象中,适配小程序api原生返回结果\n * @param task Task对象 {RequestTask | DownloadTask | UploadTask}\n * @param promise Promise\n */\nfunction equipTaskMethodsIntoPromise(task, promise) {\n if (!task || !promise)\n return;\n const taskMethods = ['abort', 'onHeadersReceived', 'offHeadersReceived', 'onProgressUpdate', 'offProgressUpdate', 'onChunkReceived', 'offChunkReceived'];\n task && taskMethods.forEach(method => {\n if (method in task) {\n promise[method] = task[method].bind(task);\n }\n });\n}\nfunction delayRef(taro, global, name, method) {\n return function (...args) {\n const res = global[name](...args);\n const raw = res[method].bind(res);\n res[method] = function (...methodArgs) {\n taro.nextTick(() => raw(...methodArgs));\n };\n return res;\n };\n}\n\nexport { EMPTY_ARR, EMPTY_OBJ, Events, HOOK_TYPE, PLATFORM_CONFIG_MAP, PLATFORM_TYPE, TaroHook, TaroHooks, animation, box, cacheDataGet, cacheDataHas, cacheDataSet, capitalize, controlledComponent, ensure, focusComponents, getComponentsAlias, getPlatformType, getUniqueKey, hasOwn, hooks, indent, internalComponents, isArray, isBoolean, isBooleanStringLiteral, isFunction, isNull, isNumber, isObject, isString, isUndefined, isWebPlatform, mergeInternalComponents, mergeReconciler, nestElements, nonsupport, noop, processApis, queryToJson, setUniqueKeyToRoute, singleQuote, toCamelCase, toDashed, toKebabCase, touchEvents, unbox, voidElements, warn };\n//# sourceMappingURL=shared.esm.js.map\n","import { noop, isFunction, getComponentsAlias as getComponentsAlias$1, internalComponents, isWebPlatform, EMPTY_OBJ, hooks, toCamelCase, isObject, warn, isArray, ensure, isNull, isUndefined, toDashed, isString, controlledComponent, Events, isNumber } from '@tarojs/shared';\nexport { Events, hooks } from '@tarojs/shared';\n\nconst PROPERTY_THRESHOLD = 2046;\nconst TARO_RUNTIME = 'Taro runtime';\nconst HOOKS_APP_ID = 'taro-app';\nconst SET_DATA = '小程序 setData';\nconst PAGE_INIT = '页面初始化';\nconst ROOT_STR = 'root';\nconst HTML = 'html';\nconst HEAD = 'head';\nconst BODY = 'body';\nconst APP = 'app';\nconst CONTAINER = 'container';\nconst DOCUMENT_ELEMENT_NAME = '#document';\nconst DOCUMENT_FRAGMENT = 'document-fragment';\nconst ID = 'id';\nconst UID = 'uid';\nconst CLASS = 'class';\nconst STYLE = 'style';\nconst FOCUS = 'focus';\nconst VIEW = 'view';\nconst STATIC_VIEW = 'static-view';\nconst PURE_VIEW = 'pure-view';\nconst PROPS = 'props';\nconst DATASET = 'dataset';\nconst OBJECT = 'object';\nconst VALUE = 'value';\nconst INPUT = 'input';\nconst CHANGE = 'change';\nconst CUSTOM_WRAPPER = 'custom-wrapper';\nconst TARGET = 'target';\nconst CURRENT_TARGET = 'currentTarget';\nconst TYPE = 'type';\nconst CONFIRM = 'confirm';\nconst TIME_STAMP = 'timeStamp';\nconst KEY_CODE = 'keyCode';\nconst TOUCHMOVE = 'touchmove';\nconst DATE = 'Date';\nconst SET_TIMEOUT = 'setTimeout';\nconst CATCHMOVE = 'catchMove';\nconst CATCH_VIEW = 'catch-view';\nconst COMMENT = 'comment';\nconst ON_LOAD = 'onLoad';\nconst ON_READY = 'onReady';\nconst ON_SHOW = 'onShow';\nconst ON_HIDE = 'onHide';\nconst OPTIONS = 'options';\nconst EXTERNAL_CLASSES = 'externalClasses';\nconst EVENT_CALLBACK_RESULT = 'e_result';\nconst BEHAVIORS = 'behaviors';\nconst A = 'a';\n/**\n * 页面上下文切换时的行为\n */\nvar CONTEXT_ACTIONS;\n(function (CONTEXT_ACTIONS) {\n CONTEXT_ACTIONS[\"INIT\"] = \"0\";\n CONTEXT_ACTIONS[\"RESTORE\"] = \"1\";\n CONTEXT_ACTIONS[\"RECOVER\"] = \"2\";\n CONTEXT_ACTIONS[\"DESTORY\"] = \"3\";\n})(CONTEXT_ACTIONS || (CONTEXT_ACTIONS = {}));\n\nconst observers = [];\n/**\n * The MutationObserver provides the ability\n * to watch for changes being made to the DOM tree.\n * It will invoke a specified callback function\n * when DOM changes occur.\n * @see https://dom.spec.whatwg.org/#mutationobserver\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver\n */\nclass MutationObserverImpl {\n constructor(callback) {\n this.records = [];\n this.callback = callback;\n }\n /**\n * Configures the MutationObserver\n * to begin receiving notifications\n * through its callback function\n * when DOM changes matching the given options occur.\n *\n * Options matching is to be implemented.\n */\n observe(target, options) {\n this.disconnect();\n this.target = target;\n this.options = options || {};\n observers.push(this);\n }\n /**\n * Stop the MutationObserver instance\n * from receiving further notifications\n * until and unless observe() is called again.\n */\n disconnect() {\n this.target = null;\n const index = observers.indexOf(this);\n if (index >= 0) {\n observers.splice(index, 1);\n }\n }\n /**\n * Removes all pending notifications\n * from the MutationObserver's notification queue\n * and returns them in a new Array of MutationRecord objects.\n */\n takeRecords() {\n return this.records.splice(0, this.records.length);\n }\n}\n/** Match two TaroNodes by sid. */\nconst sidMatches = (observerTarget, target) => {\n return !!observerTarget && observerTarget.sid === (target === null || target === void 0 ? void 0 : target.sid);\n};\nconst isConcerned = (record, options) => {\n const { characterData, characterDataOldValue, attributes, attributeOldValue, childList } = options;\n switch (record.type) {\n case \"characterData\" /* MutationRecordType.CHARACTER_DATA */:\n if (characterData) {\n if (!characterDataOldValue)\n record.oldValue = null;\n return true;\n }\n return false;\n case \"attributes\" /* MutationRecordType.ATTRIBUTES */:\n if (attributes) {\n if (!attributeOldValue)\n record.oldValue = null;\n return true;\n }\n return false;\n case \"childList\" /* MutationRecordType.CHILD_LIST */:\n if (childList) {\n return true;\n }\n return false;\n }\n};\nlet pendingMuatations = false;\nfunction logMutation(observer, record) {\n observer.records.push(record);\n if (!pendingMuatations) {\n pendingMuatations = true;\n Promise\n .resolve()\n .then(() => {\n pendingMuatations = false;\n observers.forEach(observer => {\n return observer.callback(observer.takeRecords());\n });\n });\n }\n}\nfunction recordMutation(record) {\n observers.forEach(observer => {\n const { options } = observer;\n for (let t = record.target; t; t = t.parentNode) {\n if (sidMatches(observer.target, t) && isConcerned(record, options)) {\n logMutation(observer, record);\n break;\n }\n if (!options.subtree)\n break;\n }\n });\n}\n\nclass MutationObserver {\n constructor(callback) {\n if (ENABLE_MUTATION_OBSERVER) {\n this.core = new MutationObserverImpl(callback);\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[Taro Warning] 若要使用 MutationObserver,请在 Taro 编译配置中设置 \\'mini.runtime.enableMutationObserver: true\\'');\n }\n this.core = {\n observe: noop,\n disconnect: noop,\n takeRecords: noop\n };\n }\n }\n observe(...args) {\n this.core.observe(...args);\n }\n disconnect() {\n this.core.disconnect();\n }\n takeRecords() {\n return this.core.takeRecords();\n }\n static record(record) {\n recordMutation(record);\n }\n}\n\nconst incrementId = () => {\n const chatCodes = [];\n // A-Z\n for (let i = 65; i <= 90; i++) {\n chatCodes.push(i);\n }\n // a-z\n for (let i = 97; i <= 122; i++) {\n chatCodes.push(i);\n }\n const chatCodesLen = chatCodes.length - 1;\n const list = [0, 0];\n return () => {\n const target = list.map(item => chatCodes[item]);\n const res = String.fromCharCode(...target);\n let tailIdx = list.length - 1;\n list[tailIdx]++;\n while (list[tailIdx] > chatCodesLen) {\n list[tailIdx] = 0;\n tailIdx = tailIdx - 1;\n if (tailIdx < 0) {\n list.push(0);\n break;\n }\n list[tailIdx]++;\n }\n return res;\n };\n};\nfunction isElement(node) {\n return node.nodeType === 1 /* NodeType.ELEMENT_NODE */;\n}