ai-chat-bot-interface 1.7.11 → 1.7.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/components/icons/ClearIcon.vue","../src/components/icons/CloseIcon.vue","../src/components/icons/SendIcon.vue","../src/utils/request.js","../node_modules/viewerjs/dist/viewer.esm.js","../node_modules/v-viewer/dist/index.js","../src/components/icons/ArrowRight.vue","../src/components/DishesCard.vue","../src/components/DishesList.vue","../src/components/PlanCard.vue","../src/components/icons/tagIcon.vue","../src/components/icons/pictureIcon.vue","../src/components/icons/fileIcon.vue","../src/components/icons/progressRing.vue","../src/components/icons/addIcon.vue","../src/components/icons/closeBorderIcon.vue","../src/components/icons/newChat.vue","../src/components/OperateModule.vue","../src/components/icons/BackIcon.vue","../src/components/icons/loadingIcon2.vue","../src/components/imgeList.vue","../src/components/icons/ThinkingIcon.vue","../src/components/icons/OkIcon.vue","../src/components/assistantReplay/assistantReplay.vue","../src/utils/imagesViewer.js","../src/components/StoreList/StoreCard.vue","../src/components/StoreList/StoreList.vue","../node_modules/mdurl/lib/decode.mjs","../node_modules/mdurl/lib/encode.mjs","../node_modules/mdurl/lib/format.mjs","../node_modules/mdurl/lib/parse.mjs","../node_modules/uc.micro/properties/Any/regex.mjs","../node_modules/uc.micro/categories/Cc/regex.mjs","../node_modules/uc.micro/categories/Cf/regex.mjs","../node_modules/uc.micro/categories/P/regex.mjs","../node_modules/uc.micro/categories/S/regex.mjs","../node_modules/uc.micro/categories/Z/regex.mjs","../node_modules/entities/lib/esm/generated/decode-data-html.js","../node_modules/entities/lib/esm/generated/decode-data-xml.js","../node_modules/entities/lib/esm/decode_codepoint.js","../node_modules/entities/lib/esm/decode.js","../node_modules/markdown-it/lib/common/utils.mjs","../node_modules/markdown-it/lib/helpers/parse_link_label.mjs","../node_modules/markdown-it/lib/helpers/parse_link_destination.mjs","../node_modules/markdown-it/lib/helpers/parse_link_title.mjs","../node_modules/markdown-it/lib/renderer.mjs","../node_modules/markdown-it/lib/ruler.mjs","../node_modules/markdown-it/lib/token.mjs","../node_modules/markdown-it/lib/rules_core/state_core.mjs","../node_modules/markdown-it/lib/rules_core/normalize.mjs","../node_modules/markdown-it/lib/rules_core/block.mjs","../node_modules/markdown-it/lib/rules_core/inline.mjs","../node_modules/markdown-it/lib/rules_core/linkify.mjs","../node_modules/markdown-it/lib/rules_core/replacements.mjs","../node_modules/markdown-it/lib/rules_core/smartquotes.mjs","../node_modules/markdown-it/lib/rules_core/text_join.mjs","../node_modules/markdown-it/lib/parser_core.mjs","../node_modules/markdown-it/lib/rules_block/state_block.mjs","../node_modules/markdown-it/lib/rules_block/table.mjs","../node_modules/markdown-it/lib/rules_block/code.mjs","../node_modules/markdown-it/lib/rules_block/fence.mjs","../node_modules/markdown-it/lib/rules_block/blockquote.mjs","../node_modules/markdown-it/lib/rules_block/hr.mjs","../node_modules/markdown-it/lib/rules_block/list.mjs","../node_modules/markdown-it/lib/rules_block/reference.mjs","../node_modules/markdown-it/lib/common/html_blocks.mjs","../node_modules/markdown-it/lib/common/html_re.mjs","../node_modules/markdown-it/lib/rules_block/html_block.mjs","../node_modules/markdown-it/lib/rules_block/heading.mjs","../node_modules/markdown-it/lib/rules_block/lheading.mjs","../node_modules/markdown-it/lib/rules_block/paragraph.mjs","../node_modules/markdown-it/lib/parser_block.mjs","../node_modules/markdown-it/lib/rules_inline/state_inline.mjs","../node_modules/markdown-it/lib/rules_inline/text.mjs","../node_modules/markdown-it/lib/rules_inline/linkify.mjs","../node_modules/markdown-it/lib/rules_inline/newline.mjs","../node_modules/markdown-it/lib/rules_inline/escape.mjs","../node_modules/markdown-it/lib/rules_inline/backticks.mjs","../node_modules/markdown-it/lib/rules_inline/strikethrough.mjs","../node_modules/markdown-it/lib/rules_inline/emphasis.mjs","../node_modules/markdown-it/lib/rules_inline/link.mjs","../node_modules/markdown-it/lib/rules_inline/image.mjs","../node_modules/markdown-it/lib/rules_inline/autolink.mjs","../node_modules/markdown-it/lib/rules_inline/html_inline.mjs","../node_modules/markdown-it/lib/rules_inline/entity.mjs","../node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs","../node_modules/markdown-it/lib/rules_inline/fragments_join.mjs","../node_modules/markdown-it/lib/parser_inline.mjs","../node_modules/linkify-it/lib/re.mjs","../node_modules/linkify-it/index.mjs","../node_modules/punycode.js/punycode.es6.js","../node_modules/markdown-it/lib/index.mjs","../node_modules/markdown-it/lib/presets/default.mjs","../node_modules/markdown-it/lib/presets/zero.mjs","../node_modules/markdown-it/lib/presets/commonmark.mjs","../src/components/MarkdownPlan/MarkdownViewer.vue","../src/components/icons/ArrowDown.vue","../src/components/popup/popup.vue","../node_modules/vant/es/utils/basic.mjs","../node_modules/vant/es/utils/props.mjs","../node_modules/@vant/use/dist/index.esm.mjs","../node_modules/vant/es/utils/dom.mjs","../node_modules/vant/es/utils/format.mjs","../node_modules/vant/es/utils/deep-assign.mjs","../node_modules/vant/es/locale/lang/zh-CN.mjs","../node_modules/vant/es/locale/index.mjs","../node_modules/vant/es/utils/create.mjs","../node_modules/vant/es/utils/constant.mjs","../node_modules/vant/es/utils/interceptor.mjs","../node_modules/vant/es/utils/with-install.mjs","../node_modules/vant/es/composables/on-popup-reopen.mjs","../node_modules/vant/es/composables/use-expose.mjs","../node_modules/vant/es/composables/use-route.mjs","../node_modules/vant/es/badge/Badge.mjs","../node_modules/vant/es/badge/index.mjs","../node_modules/vant/es/composables/use-global-z-index.mjs","../node_modules/vant/es/config-provider/ConfigProvider.mjs","../node_modules/vant/es/icon/Icon.mjs","../node_modules/vant/es/icon/index.mjs","../node_modules/vant/es/loading/Loading.mjs","../node_modules/vant/es/loading/index.mjs","../node_modules/vant/es/popup/shared.mjs","../node_modules/vant/es/composables/use-touch.mjs","../node_modules/vant/es/composables/use-lock-scroll.mjs","../node_modules/vant/es/composables/use-lazy-render.mjs","../node_modules/vant/es/composables/use-scope-id.mjs","../node_modules/vant/es/overlay/Overlay.mjs","../node_modules/vant/es/overlay/index.mjs","../node_modules/vant/es/popup/Popup.mjs","../node_modules/vant/es/popup/index.mjs","../node_modules/vant/es/composables/use-id.mjs","../node_modules/vant/es/cell/Cell.mjs","../node_modules/vant/es/cell/index.mjs","../node_modules/vant/es/field/utils.mjs","../node_modules/vant/es/field/Field.mjs","../node_modules/vant/es/field/index.mjs","../node_modules/vant/es/toast/lock-click.mjs","../node_modules/vant/es/toast/Toast.mjs","../node_modules/vant/es/utils/mount-component.mjs","../node_modules/vant/es/toast/function-call.mjs","../node_modules/vant/es/toast/index.mjs","../src/components/personalForm/personalForm.vue","../src/ChatUi.vue","../src/index.js"],"sourcesContent":["<template>\r\n <svg\r\n class=\"icon-icon icon-icon-coz_broom\"\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M9 2V6L4 6C2.89543 6 2 6.89543 2 8V21C2 22.1046 2.89543 23 4 23H20C21.1046 23 22 22.1046 22 21V8C22 6.89543 21.1046 6 20 6L15 6V2C15 0.895431 14.1046 0 13 0H11C9.89543 0 9 0.895431 9 2ZM13 2V8H20V12H4V8H11V2H13ZM4 14H20V21H9V18C9 17.4477 8.55228 17 8 17C7.44772 17 7 17.4477 7 18V21H4L4 14Z\"\r\n ></path>\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4.96977 17.7929C4.57925 18.1834 4.57925 18.8166 4.96977 19.2071C5.3603 19.5976 5.99346 19.5976 6.38399 19.2071L12.1769 13.4142L17.9698 19.2071C18.3603 19.5976 18.9935 19.5976 19.384 19.2071C19.7745 18.8166 19.7745 18.1834 19.384 17.7929L13.5911 12L19.384 6.20711C19.7745 5.81658 19.7745 5.18342 19.384 4.79289C18.9935 4.40237 18.3603 4.40237 17.9698 4.79289L12.1769 10.5858L6.38399 4.79289C5.99347 4.40237 5.3603 4.40237 4.96978 4.79289C4.57925 5.18342 4.57925 5.81658 4.96978 6.20711L10.7627 12L4.96977 17.7929Z\"\r\n ></path>\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 32 32\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1 16C1 7.71573 7.71573 1 16 1C24.2843 1 31 7.71573 31 16C31 24.2843 24.2843 31 16 31C7.71573 31 1 24.2843 1 16Z\"\r\n fill=\"currentColor\"\r\n />\r\n <path\r\n d=\"M16.7066 8.29236L16 7.58578L15.2929 8.29289L9.29289 14.2929C8.90237 14.6834 8.90237 15.3166 9.29289 15.7071C9.68342 16.0976 10.3166 16.0976 10.7071 15.7071L15 11.4142L15 23C15 23.5523 15.4477 24 16 24C16.5523 24 17 23.5523 17 23L17 11.4142L21.2929 15.7071C21.6834 16.0976 22.3166 16.0976 22.7071 15.7071C23.0976 15.3166 23.0976 14.6834 22.7071 14.2929L16.7077 8.29351L16.7071 8.29289L16.7066 8.29236Z\"\r\n fill=\"#fff\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","// 封装 fetch 函数\r\nfunction customFetch(url, options = {}) {\r\n // 默认配置\r\n const defaultOptions = {\r\n method: 'GET', // 默认为 GET 请求\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n },\r\n body: null, // 默认没有请求体\r\n credentials: 'same-origin', // 默认同源策略\r\n mode: 'cors', // 默认跨域模式\r\n cache: 'default', // 默认缓存策略\r\n };\r\n\r\n // 合并用户传入的选项和默认选项\r\n const finalOptions = { ...defaultOptions, ...options };\r\n\r\n console.log('====finalOptions====', finalOptions);\r\n // 如果是 POST 请求,确保有 body\r\n if (finalOptions.method.toUpperCase() === 'POST' && !finalOptions.body) {\r\n throw new Error('POST request must have a body');\r\n }\r\n\r\n // 发送 fetch 请求\r\n return fetch(url, finalOptions)\r\n .then((response) => {\r\n if (!response.ok) {\r\n // 如果响应状态码不是 2xx,抛出错误\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n return response.json(); // 默认解析为 JSON\r\n })\r\n .catch((error) => {\r\n console.error('Fetch error:', error);\r\n throw error; // 向外抛出错误\r\n });\r\n}\r\n\r\n// 使用封装的 fetch 函数发送 GET 请求\r\nexport function get(url, options = {}) {\r\n return customFetch(url, { ...options, method: 'GET' });\r\n}\r\n\r\n// 使用封装的 fetch 函数发送 POST 请求\r\nexport function post(url, data = {}, options = {}) {\r\n return customFetch(url, {\r\n ...options,\r\n method: 'POST',\r\n body: JSON.stringify(data),\r\n });\r\n}\r\n","/*!\n * Viewer.js v1.11.7\n * https://fengyuanchen.github.io/viewerjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-11-24T04:32:19.116Z\n */\n\nfunction _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\n\nvar DEFAULTS = {\n /**\n * Enable a modal backdrop, specify `static` for a backdrop\n * which doesn't close the modal on click.\n * @type {boolean}\n */\n backdrop: true,\n /**\n * Show the button on the top-right of the viewer.\n * @type {boolean}\n */\n button: true,\n /**\n * Show the navbar.\n * @type {boolean | number}\n */\n navbar: true,\n /**\n * Specify the visibility and the content of the title.\n * @type {boolean | number | Function | Array}\n */\n title: true,\n /**\n * Show the toolbar.\n * @type {boolean | number | Object}\n */\n toolbar: true,\n /**\n * Custom class name(s) to add to the viewer's root element.\n * @type {string}\n */\n className: '',\n /**\n * Define where to put the viewer in modal mode.\n * @type {string | Element}\n */\n container: 'body',\n /**\n * Filter the images for viewing. Return true if the image is viewable.\n * @type {Function}\n */\n filter: null,\n /**\n * Enable to request fullscreen when play.\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/FullscreenOptions}\n * @type {boolean|FullscreenOptions}\n */\n fullscreen: true,\n /**\n * Define the extra attributes to inherit from the original image.\n * @type {Array}\n */\n inheritedAttributes: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap'],\n /**\n * Define the initial coverage of the viewing image.\n * @type {number}\n */\n initialCoverage: 0.9,\n /**\n * Define the initial index of the image for viewing.\n * @type {number}\n */\n initialViewIndex: 0,\n /**\n * Enable inline mode.\n * @type {boolean}\n */\n inline: false,\n /**\n * The amount of time to delay between automatically cycling an image when playing.\n * @type {number}\n */\n interval: 5000,\n /**\n * Enable keyboard support.\n * @type {boolean}\n */\n keyboard: true,\n /**\n * Focus the viewer when initialized.\n * @type {boolean}\n */\n focus: true,\n /**\n * Indicate if show a loading spinner when load image or not.\n * @type {boolean}\n */\n loading: true,\n /**\n * Indicate if enable loop viewing or not.\n * @type {boolean}\n */\n loop: true,\n /**\n * Min width of the viewer in inline mode.\n * @type {number}\n */\n minWidth: 200,\n /**\n * Min height of the viewer in inline mode.\n * @type {number}\n */\n minHeight: 100,\n /**\n * Enable to move the image.\n * @type {boolean}\n */\n movable: true,\n /**\n * Enable to rotate the image.\n * @type {boolean}\n */\n rotatable: true,\n /**\n * Enable to scale the image.\n * @type {boolean}\n */\n scalable: true,\n /**\n * Enable to zoom the image.\n * @type {boolean}\n */\n zoomable: true,\n /**\n * Enable to zoom the current image by dragging on the touch screen.\n * @type {boolean}\n */\n zoomOnTouch: true,\n /**\n * Enable to zoom the image by wheeling mouse.\n * @type {boolean}\n */\n zoomOnWheel: true,\n /**\n * Enable to slide to the next or previous image by swiping on the touch screen.\n * @type {boolean}\n */\n slideOnTouch: true,\n /**\n * Indicate if toggle the image size between its natural size\n * and initial size when double click on the image or not.\n * @type {boolean}\n */\n toggleOnDblclick: true,\n /**\n * Show the tooltip with image ratio (percentage) when zoom in or zoom out.\n * @type {boolean}\n */\n tooltip: true,\n /**\n * Enable CSS3 Transition for some special elements.\n * @type {boolean}\n */\n transition: true,\n /**\n * Define the CSS `z-index` value of viewer in modal mode.\n * @type {number}\n */\n zIndex: 2015,\n /**\n * Define the CSS `z-index` value of viewer in inline mode.\n * @type {number}\n */\n zIndexInline: 0,\n /**\n * Define the ratio when zoom the image by wheeling mouse.\n * @type {number}\n */\n zoomRatio: 0.1,\n /**\n * Define the min ratio of the image when zoom out.\n * @type {number}\n */\n minZoomRatio: 0.01,\n /**\n * Define the max ratio of the image when zoom in.\n * @type {number}\n */\n maxZoomRatio: 100,\n /**\n * Define where to get the original image URL for viewing.\n * @type {string | Function}\n */\n url: 'src',\n /**\n * Event shortcuts.\n * @type {Function}\n */\n ready: null,\n show: null,\n shown: null,\n hide: null,\n hidden: null,\n view: null,\n viewed: null,\n move: null,\n moved: null,\n rotate: null,\n rotated: null,\n scale: null,\n scaled: null,\n zoom: null,\n zoomed: null,\n play: null,\n stop: null\n};\n\nvar TEMPLATE = '<div class=\"viewer-container\" tabindex=\"-1\" touch-action=\"none\">' + '<div class=\"viewer-canvas\"></div>' + '<div class=\"viewer-footer\">' + '<div class=\"viewer-title\"></div>' + '<div class=\"viewer-toolbar\"></div>' + '<div class=\"viewer-navbar\">' + '<ul class=\"viewer-list\" role=\"navigation\"></ul>' + '</div>' + '</div>' + '<div class=\"viewer-tooltip\" role=\"alert\" aria-hidden=\"true\"></div>' + '<div class=\"viewer-button\" data-viewer-action=\"mix\" role=\"button\"></div>' + '<div class=\"viewer-player\"></div>' + '</div>';\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\nvar IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\nvar HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\nvar NAMESPACE = 'viewer';\n\n// Actions\nvar ACTION_MOVE = 'move';\nvar ACTION_SWITCH = 'switch';\nvar ACTION_ZOOM = 'zoom';\n\n// Classes\nvar CLASS_ACTIVE = \"\".concat(NAMESPACE, \"-active\");\nvar CLASS_CLOSE = \"\".concat(NAMESPACE, \"-close\");\nvar CLASS_FADE = \"\".concat(NAMESPACE, \"-fade\");\nvar CLASS_FIXED = \"\".concat(NAMESPACE, \"-fixed\");\nvar CLASS_FULLSCREEN = \"\".concat(NAMESPACE, \"-fullscreen\");\nvar CLASS_FULLSCREEN_EXIT = \"\".concat(NAMESPACE, \"-fullscreen-exit\");\nvar CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\nvar CLASS_HIDE_MD_DOWN = \"\".concat(NAMESPACE, \"-hide-md-down\");\nvar CLASS_HIDE_SM_DOWN = \"\".concat(NAMESPACE, \"-hide-sm-down\");\nvar CLASS_HIDE_XS_DOWN = \"\".concat(NAMESPACE, \"-hide-xs-down\");\nvar CLASS_IN = \"\".concat(NAMESPACE, \"-in\");\nvar CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\nvar CLASS_LOADING = \"\".concat(NAMESPACE, \"-loading\");\nvar CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\nvar CLASS_OPEN = \"\".concat(NAMESPACE, \"-open\");\nvar CLASS_SHOW = \"\".concat(NAMESPACE, \"-show\");\nvar CLASS_TRANSITION = \"\".concat(NAMESPACE, \"-transition\");\n\n// Native events\nvar EVENT_CLICK = 'click';\nvar EVENT_DBLCLICK = 'dblclick';\nvar EVENT_DRAG_START = 'dragstart';\nvar EVENT_FOCUSIN = 'focusin';\nvar EVENT_KEY_DOWN = 'keydown';\nvar EVENT_LOAD = 'load';\nvar EVENT_ERROR = 'error';\nvar EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\nvar EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\nvar EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\nvar EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\nvar EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\nvar EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\nvar EVENT_RESIZE = 'resize';\nvar EVENT_TRANSITION_END = 'transitionend';\nvar EVENT_WHEEL = 'wheel';\n\n// Custom events\nvar EVENT_READY = 'ready';\nvar EVENT_SHOW = 'show';\nvar EVENT_SHOWN = 'shown';\nvar EVENT_HIDE = 'hide';\nvar EVENT_HIDDEN = 'hidden';\nvar EVENT_VIEW = 'view';\nvar EVENT_VIEWED = 'viewed';\nvar EVENT_MOVE = 'move';\nvar EVENT_MOVED = 'moved';\nvar EVENT_ROTATE = 'rotate';\nvar EVENT_ROTATED = 'rotated';\nvar EVENT_SCALE = 'scale';\nvar EVENT_SCALED = 'scaled';\nvar EVENT_ZOOM = 'zoom';\nvar EVENT_ZOOMED = 'zoomed';\nvar EVENT_PLAY = 'play';\nvar EVENT_STOP = 'stop';\n\n// Data keys\nvar DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n\n// RegExps\nvar REGEXP_SPACES = /\\s\\s*/;\n\n// Misc\nvar BUTTONS = ['zoom-in', 'zoom-out', 'one-to-one', 'reset', 'prev', 'play', 'next', 'rotate-left', 'rotate-right', 'flip-horizontal', 'flip-vertical'];\n\n/**\n * Check if the given value is a string.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a string, else `false`.\n */\nfunction isString(value) {\n return typeof value === 'string';\n}\n\n/**\n * Check if the given value is not a number.\n */\nvar isNaN = Number.isNaN || WINDOW.isNaN;\n\n/**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\nfunction isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\nfunction isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\nfunction isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\n/**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\nfunction forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n var length = data.length;\n var i;\n for (i = 0; i < length; i += 1) {\n if (callback.call(data, data[i], i, data) === false) {\n break;\n }\n }\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n}\n\n/**\n * Extend the given object.\n * @param {*} obj - The object to be extended.\n * @param {*} args - The rest objects which will be merged to the first object.\n * @returns {Object} The extended object.\n */\nvar assign = Object.assign || function assign(obj) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(obj) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n obj[key] = arg[key];\n });\n }\n });\n }\n return obj;\n};\nvar REGEXP_SUFFIX = /^(?:width|height|left|top|marginLeft|marginTop)$/;\n\n/**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\nfunction setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value += 'px';\n }\n style[property] = value;\n });\n}\n\n/**\n * Escape a string for using in HTML.\n * @param {String} value - The string to escape.\n * @returns {String} Returns the escaped string.\n */\nfunction escapeHTMLEntities(value) {\n return isString(value) ? value.replace(/&(?!amp;|quot;|#39;|lt;|gt;)/g, '&amp;').replace(/\"/g, '&quot;').replace(/'/g, '&#39;').replace(/</g, '&lt;').replace(/>/g, '&gt;') : value;\n}\n\n/**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\nfunction hasClass(element, value) {\n if (!element || !value) {\n return false;\n }\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n}\n\n/**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\nfunction addClass(element, value) {\n if (!element || !value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n}\n\n/**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\nfunction removeClass(element, value) {\n if (!element || !value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n}\n\n/**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\nfunction toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n}\nvar REGEXP_HYPHENATE = /([a-z\\d])([A-Z])/g;\n\n/**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\nfunction hyphenate(value) {\n return value.replace(REGEXP_HYPHENATE, '$1-$2').toLowerCase();\n}\n\n/**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\nfunction getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(hyphenate(name)));\n}\n\n/**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\nfunction setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(hyphenate(name)), data);\n }\n}\nvar onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n}();\n\n/**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n}\n\n/**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\nfunction addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n}\n\n/**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @param {Object} options - The additional event options.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\nfunction dispatchEvent(element, type, data, options) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, _objectSpread2({\n bubbles: true,\n cancelable: true,\n detail: data\n }, options));\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n}\n\n/**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\nfunction getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n}\n\n/**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\nfunction getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n}\n\n/**\n * Get an image name from an image url.\n * @param {string} url - The target url.\n * @example\n * // picture.jpg\n * getImageNameFromURL('https://domain.com/path/to/picture.jpg?size=1280×960')\n * @returns {string} A string contains the image name.\n */\nfunction getImageNameFromURL(url) {\n return isString(url) ? decodeURIComponent(url.replace(/^.*\\//, '').replace(/[?&#].*$/, '')) : '';\n}\nvar IS_SAFARI = WINDOW.navigator && /Version\\/\\d+(\\.\\d+)+?\\s+Safari/i.test(WINDOW.navigator.userAgent);\n\n/**\n * Get an image's natural sizes.\n * @param {string} image - The target image.\n * @param {Object} options - The viewer options.\n * @param {Function} callback - The callback function.\n * @returns {HTMLImageElement} The new image.\n */\nfunction getImageNaturalSizes(image, options, callback) {\n var newImage = document.createElement('img');\n\n // Modern browsers (except Safari)\n if (image.naturalWidth && !IS_SAFARI) {\n callback(image.naturalWidth, image.naturalHeight);\n return newImage;\n }\n var body = document.body || document.documentElement;\n newImage.onload = function () {\n callback(newImage.width, newImage.height);\n if (!IS_SAFARI) {\n body.removeChild(newImage);\n }\n };\n forEach(options.inheritedAttributes, function (name) {\n var value = image.getAttribute(name);\n if (value !== null) {\n newImage.setAttribute(name, value);\n }\n });\n newImage.src = image.src;\n\n // iOS Safari will convert the image automatically\n // with its orientation once append it into DOM\n if (!IS_SAFARI) {\n newImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(newImage);\n }\n return newImage;\n}\n\n/**\n * Get the related class name of a responsive type number.\n * @param {string} type - The responsive type.\n * @returns {string} The related class name.\n */\nfunction getResponsiveClass(type) {\n switch (type) {\n case 2:\n return CLASS_HIDE_XS_DOWN;\n case 3:\n return CLASS_HIDE_SM_DOWN;\n case 4:\n return CLASS_HIDE_MD_DOWN;\n default:\n return '';\n }\n}\n\n/**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\nfunction getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var ratios = [];\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n ratios.push(ratio);\n });\n });\n ratios.sort(function (a, b) {\n return Math.abs(a) < Math.abs(b);\n });\n return ratios[0];\n}\n\n/**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\nfunction getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n timeStamp: Date.now(),\n startX: pageX,\n startY: pageY\n }, end);\n}\n\n/**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\nfunction getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n}\n\nvar render = {\n render: function render() {\n this.initContainer();\n this.initViewer();\n this.initList();\n this.renderViewer();\n },\n initBody: function initBody() {\n var ownerDocument = this.element.ownerDocument;\n var body = ownerDocument.body || ownerDocument.documentElement;\n this.body = body;\n this.scrollbarWidth = window.innerWidth - ownerDocument.documentElement.clientWidth;\n this.initialBodyPaddingRight = body.style.paddingRight;\n this.initialBodyComputedPaddingRight = window.getComputedStyle(body).paddingRight;\n },\n initContainer: function initContainer() {\n this.containerData = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n },\n initViewer: function initViewer() {\n var options = this.options,\n parent = this.parent;\n var viewerData;\n if (options.inline) {\n viewerData = {\n width: Math.max(parent.offsetWidth, options.minWidth),\n height: Math.max(parent.offsetHeight, options.minHeight)\n };\n this.parentData = viewerData;\n }\n if (this.fulled || !viewerData) {\n viewerData = this.containerData;\n }\n this.viewerData = assign({}, viewerData);\n },\n renderViewer: function renderViewer() {\n if (this.options.inline && !this.fulled) {\n setStyle(this.viewer, this.viewerData);\n }\n },\n initList: function initList() {\n var _this = this;\n var element = this.element,\n options = this.options,\n list = this.list;\n var items = [];\n\n // initList may be called in this.update, so should keep idempotent\n list.innerHTML = '';\n forEach(this.images, function (image, index) {\n var src = image.src;\n var alt = image.alt || getImageNameFromURL(src);\n var url = _this.getImageURL(image);\n if (src || url) {\n var item = document.createElement('li');\n var img = document.createElement('img');\n forEach(options.inheritedAttributes, function (name) {\n var value = image.getAttribute(name);\n if (value !== null) {\n img.setAttribute(name, value);\n }\n });\n if (options.navbar) {\n img.src = src || url;\n }\n img.alt = alt;\n img.setAttribute('data-original-url', url || src);\n item.setAttribute('data-index', index);\n item.setAttribute('data-viewer-action', 'view');\n item.setAttribute('role', 'button');\n if (options.keyboard) {\n item.setAttribute('tabindex', 0);\n }\n item.appendChild(img);\n list.appendChild(item);\n items.push(item);\n }\n });\n this.items = items;\n forEach(items, function (item) {\n var image = item.firstElementChild;\n var onLoad;\n var onError;\n setData(image, 'filled', true);\n if (options.loading) {\n addClass(item, CLASS_LOADING);\n }\n addListener(image, EVENT_LOAD, onLoad = function onLoad(event) {\n removeListener(image, EVENT_ERROR, onError);\n if (options.loading) {\n removeClass(item, CLASS_LOADING);\n }\n _this.loadImage(event);\n }, {\n once: true\n });\n addListener(image, EVENT_ERROR, onError = function onError() {\n removeListener(image, EVENT_LOAD, onLoad);\n if (options.loading) {\n removeClass(item, CLASS_LOADING);\n }\n }, {\n once: true\n });\n });\n if (options.transition) {\n addListener(element, EVENT_VIEWED, function () {\n addClass(list, CLASS_TRANSITION);\n }, {\n once: true\n });\n }\n },\n renderList: function renderList() {\n var index = this.index;\n var item = this.items[index];\n if (!item) {\n return;\n }\n var next = item.nextElementSibling;\n var gutter = parseInt(window.getComputedStyle(next || item).marginLeft, 10);\n var offsetWidth = item.offsetWidth;\n var outerWidth = offsetWidth + gutter;\n\n // Place the active item in the center of the screen\n setStyle(this.list, assign({\n width: outerWidth * this.length - gutter\n }, getTransforms({\n translateX: (this.viewerData.width - offsetWidth) / 2 - outerWidth * index\n })));\n },\n resetList: function resetList() {\n var list = this.list;\n list.innerHTML = '';\n removeClass(list, CLASS_TRANSITION);\n setStyle(list, getTransforms({\n translateX: 0\n }));\n },\n initImage: function initImage(done) {\n var _this2 = this;\n var options = this.options,\n image = this.image,\n viewerData = this.viewerData;\n var footerHeight = this.footer.offsetHeight;\n var viewerWidth = viewerData.width;\n var viewerHeight = Math.max(viewerData.height - footerHeight, footerHeight);\n var oldImageData = this.imageData || {};\n var sizingImage;\n this.imageInitializing = {\n abort: function abort() {\n sizingImage.onload = null;\n }\n };\n sizingImage = getImageNaturalSizes(image, options, function (naturalWidth, naturalHeight) {\n var aspectRatio = naturalWidth / naturalHeight;\n var initialCoverage = Math.max(0, Math.min(1, options.initialCoverage));\n var width = viewerWidth;\n var height = viewerHeight;\n _this2.imageInitializing = false;\n if (viewerHeight * aspectRatio > viewerWidth) {\n height = viewerWidth / aspectRatio;\n } else {\n width = viewerHeight * aspectRatio;\n }\n initialCoverage = isNumber(initialCoverage) ? initialCoverage : 0.9;\n width = Math.min(width * initialCoverage, naturalWidth);\n height = Math.min(height * initialCoverage, naturalHeight);\n var left = (viewerWidth - width) / 2;\n var top = (viewerHeight - height) / 2;\n var imageData = {\n left: left,\n top: top,\n x: left,\n y: top,\n width: width,\n height: height,\n oldRatio: 1,\n ratio: width / naturalWidth,\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\n };\n var initialImageData = assign({}, imageData);\n if (options.rotatable) {\n imageData.rotate = oldImageData.rotate || 0;\n initialImageData.rotate = 0;\n }\n if (options.scalable) {\n imageData.scaleX = oldImageData.scaleX || 1;\n imageData.scaleY = oldImageData.scaleY || 1;\n initialImageData.scaleX = 1;\n initialImageData.scaleY = 1;\n }\n _this2.imageData = imageData;\n _this2.initialImageData = initialImageData;\n if (done) {\n done();\n }\n });\n },\n renderImage: function renderImage(done) {\n var _this3 = this;\n var image = this.image,\n imageData = this.imageData;\n setStyle(image, assign({\n width: imageData.width,\n height: imageData.height,\n // XXX: Not to use translateX/Y to avoid image shaking when zooming\n marginLeft: imageData.x,\n marginTop: imageData.y\n }, getTransforms(imageData)));\n if (done) {\n if ((this.viewing || this.moving || this.rotating || this.scaling || this.zooming) && this.options.transition && hasClass(image, CLASS_TRANSITION)) {\n var onTransitionEnd = function onTransitionEnd() {\n _this3.imageRendering = false;\n done();\n };\n this.imageRendering = {\n abort: function abort() {\n removeListener(image, EVENT_TRANSITION_END, onTransitionEnd);\n }\n };\n addListener(image, EVENT_TRANSITION_END, onTransitionEnd, {\n once: true\n });\n } else {\n done();\n }\n }\n },\n resetImage: function resetImage() {\n var image = this.image;\n if (image) {\n if (this.viewing) {\n this.viewing.abort();\n }\n image.parentNode.removeChild(image);\n this.image = null;\n this.title.innerHTML = '';\n }\n }\n};\n\nvar events = {\n bind: function bind() {\n var options = this.options,\n viewer = this.viewer,\n canvas = this.canvas;\n var document = this.element.ownerDocument;\n addListener(viewer, EVENT_CLICK, this.onClick = this.click.bind(this));\n addListener(viewer, EVENT_DRAG_START, this.onDragStart = this.dragstart.bind(this));\n addListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown = this.pointerdown.bind(this));\n addListener(document, EVENT_POINTER_MOVE, this.onPointerMove = this.pointermove.bind(this));\n addListener(document, EVENT_POINTER_UP, this.onPointerUp = this.pointerup.bind(this));\n addListener(document, EVENT_KEY_DOWN, this.onKeyDown = this.keydown.bind(this));\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(viewer, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleOnDblclick) {\n addListener(canvas, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n },\n unbind: function unbind() {\n var options = this.options,\n viewer = this.viewer,\n canvas = this.canvas;\n var document = this.element.ownerDocument;\n removeListener(viewer, EVENT_CLICK, this.onClick);\n removeListener(viewer, EVENT_DRAG_START, this.onDragStart);\n removeListener(canvas, EVENT_POINTER_DOWN, this.onPointerDown);\n removeListener(document, EVENT_POINTER_MOVE, this.onPointerMove);\n removeListener(document, EVENT_POINTER_UP, this.onPointerUp);\n removeListener(document, EVENT_KEY_DOWN, this.onKeyDown);\n removeListener(window, EVENT_RESIZE, this.onResize);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(viewer, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleOnDblclick) {\n removeListener(canvas, EVENT_DBLCLICK, this.onDblclick);\n }\n }\n};\n\nvar handlers = {\n click: function click(event) {\n var options = this.options,\n imageData = this.imageData;\n var target = event.target;\n var action = getData(target, DATA_ACTION);\n if (!action && target.localName === 'img' && target.parentElement.localName === 'li') {\n target = target.parentElement;\n action = getData(target, DATA_ACTION);\n }\n\n // Cancel the emulated click when the native click event was triggered.\n if (IS_TOUCH_DEVICE && event.isTrusted && target === this.canvas) {\n clearTimeout(this.clickCanvasTimeout);\n }\n switch (action) {\n case 'mix':\n if (this.played) {\n this.stop();\n } else if (options.inline) {\n if (this.fulled) {\n this.exit();\n } else {\n this.full();\n }\n } else {\n this.hide();\n }\n break;\n case 'hide':\n if (!this.pointerMoved) {\n this.hide();\n }\n break;\n case 'view':\n this.view(getData(target, 'index'));\n break;\n case 'zoom-in':\n this.zoom(0.1, true);\n break;\n case 'zoom-out':\n this.zoom(-0.1, true);\n break;\n case 'one-to-one':\n this.toggle();\n break;\n case 'reset':\n this.reset();\n break;\n case 'prev':\n this.prev(options.loop);\n break;\n case 'play':\n this.play(options.fullscreen);\n break;\n case 'next':\n this.next(options.loop);\n break;\n case 'rotate-left':\n this.rotate(-90);\n break;\n case 'rotate-right':\n this.rotate(90);\n break;\n case 'flip-horizontal':\n this.scaleX(-imageData.scaleX || -1);\n break;\n case 'flip-vertical':\n this.scaleY(-imageData.scaleY || -1);\n break;\n default:\n if (this.played) {\n this.stop();\n }\n }\n },\n dblclick: function dblclick(event) {\n event.preventDefault();\n if (this.viewed && event.target === this.image) {\n // Cancel the emulated double click when the native dblclick event was triggered.\n if (IS_TOUCH_DEVICE && event.isTrusted) {\n clearTimeout(this.doubleClickImageTimeout);\n }\n\n // XXX: No pageX/Y properties in custom event, fallback to the original event.\n this.toggle(event.isTrusted ? event : event.detail && event.detail.originalEvent);\n }\n },\n load: function load() {\n var _this = this;\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = false;\n }\n var element = this.element,\n options = this.options,\n image = this.image,\n index = this.index,\n viewerData = this.viewerData;\n removeClass(image, CLASS_INVISIBLE);\n if (options.loading) {\n removeClass(this.canvas, CLASS_LOADING);\n }\n image.style.cssText = 'height:0;' + \"margin-left:\".concat(viewerData.width / 2, \"px;\") + \"margin-top:\".concat(viewerData.height / 2, \"px;\") + 'max-width:none!important;' + 'position:relative;' + 'width:0;';\n this.initImage(function () {\n toggleClass(image, CLASS_MOVE, options.movable);\n toggleClass(image, CLASS_TRANSITION, options.transition);\n _this.renderImage(function () {\n _this.viewed = true;\n _this.viewing = false;\n if (isFunction(options.viewed)) {\n addListener(element, EVENT_VIEWED, options.viewed, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_VIEWED, {\n originalImage: _this.images[index],\n index: index,\n image: image\n }, {\n cancelable: false\n });\n });\n });\n },\n loadImage: function loadImage(event) {\n var image = event.target;\n var parent = image.parentNode;\n var parentWidth = parent.offsetWidth || 30;\n var parentHeight = parent.offsetHeight || 50;\n var filled = !!getData(image, 'filled');\n getImageNaturalSizes(image, this.options, function (naturalWidth, naturalHeight) {\n var aspectRatio = naturalWidth / naturalHeight;\n var width = parentWidth;\n var height = parentHeight;\n if (parentHeight * aspectRatio > parentWidth) {\n if (filled) {\n width = parentHeight * aspectRatio;\n } else {\n height = parentWidth / aspectRatio;\n }\n } else if (filled) {\n height = parentWidth / aspectRatio;\n } else {\n width = parentHeight * aspectRatio;\n }\n setStyle(image, assign({\n width: width,\n height: height\n }, getTransforms({\n translateX: (parentWidth - width) / 2,\n translateY: (parentHeight - height) / 2\n })));\n });\n },\n keydown: function keydown(event) {\n var options = this.options;\n if (!options.keyboard) {\n return;\n }\n var keyCode = event.keyCode || event.which || event.charCode;\n switch (keyCode) {\n // Enter\n case 13:\n if (this.viewer.contains(event.target)) {\n this.click(event);\n }\n break;\n }\n if (!this.fulled) {\n return;\n }\n switch (keyCode) {\n // Escape\n case 27:\n if (this.played) {\n this.stop();\n } else if (options.inline) {\n if (this.fulled) {\n this.exit();\n }\n } else {\n this.hide();\n }\n break;\n\n // Space\n case 32:\n if (this.played) {\n this.stop();\n }\n break;\n\n // ArrowLeft\n case 37:\n if (this.played && this.playing) {\n this.playing.prev();\n } else {\n this.prev(options.loop);\n }\n break;\n\n // ArrowUp\n case 38:\n // Prevent scroll on Firefox\n event.preventDefault();\n\n // Zoom in\n this.zoom(options.zoomRatio, true);\n break;\n\n // ArrowRight\n case 39:\n if (this.played && this.playing) {\n this.playing.next();\n } else {\n this.next(options.loop);\n }\n break;\n\n // ArrowDown\n case 40:\n // Prevent scroll on Firefox\n event.preventDefault();\n\n // Zoom out\n this.zoom(-options.zoomRatio, true);\n break;\n\n // Ctrl + 0\n case 48:\n // Fall through\n\n // Ctrl + 1\n // eslint-disable-next-line no-fallthrough\n case 49:\n if (event.ctrlKey) {\n event.preventDefault();\n this.toggle();\n }\n break;\n }\n },\n dragstart: function dragstart(event) {\n if (event.target.localName === 'img') {\n event.preventDefault();\n }\n },\n pointerdown: function pointerdown(event) {\n var options = this.options,\n pointers = this.pointers;\n var buttons = event.buttons,\n button = event.button;\n this.pointerMoved = false;\n if (!this.viewed || this.showing || this.viewing || this.hiding\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n\n // Prevent default behaviours as page zooming in touch devices.\n event.preventDefault();\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n pointers[event.pointerId || 0] = getPointer(event);\n }\n var action = options.movable ? ACTION_MOVE : false;\n if (options.zoomOnTouch && options.zoomable && Object.keys(pointers).length > 1) {\n action = ACTION_ZOOM;\n } else if (options.slideOnTouch && (event.pointerType === 'touch' || event.type === 'touchstart') && this.isSwitchable()) {\n action = ACTION_SWITCH;\n }\n if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) {\n removeClass(this.image, CLASS_TRANSITION);\n }\n this.action = action;\n },\n pointermove: function pointermove(event) {\n var pointers = this.pointers,\n action = this.action;\n if (!this.viewed || !action) {\n return;\n }\n event.preventDefault();\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n pointerup: function pointerup(event) {\n var _this2 = this;\n var options = this.options,\n action = this.action,\n pointers = this.pointers;\n var pointer;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n pointer = pointers[touch.identifier];\n delete pointers[touch.identifier];\n });\n } else {\n pointer = pointers[event.pointerId || 0];\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (options.transition && (action === ACTION_MOVE || action === ACTION_ZOOM)) {\n addClass(this.image, CLASS_TRANSITION);\n }\n this.action = false;\n\n // Emulate click and double click in touch devices to support backdrop and image zooming (#210).\n if (IS_TOUCH_DEVICE && action !== ACTION_ZOOM && pointer && Date.now() - pointer.timeStamp < 500) {\n clearTimeout(this.clickCanvasTimeout);\n clearTimeout(this.doubleClickImageTimeout);\n if (options.toggleOnDblclick && this.viewed && event.target === this.image) {\n if (this.imageClicked) {\n this.imageClicked = false;\n\n // This timeout will be cleared later when a native dblclick event is triggering\n this.doubleClickImageTimeout = setTimeout(function () {\n dispatchEvent(_this2.image, EVENT_DBLCLICK, {\n originalEvent: event\n });\n }, 50);\n } else {\n this.imageClicked = true;\n\n // The default timing of a double click in Windows is 500 ms\n this.doubleClickImageTimeout = setTimeout(function () {\n _this2.imageClicked = false;\n }, 500);\n }\n } else {\n this.imageClicked = false;\n if (options.backdrop && options.backdrop !== 'static' && event.target === this.canvas) {\n // This timeout will be cleared later when a native click event is triggering\n this.clickCanvasTimeout = setTimeout(function () {\n dispatchEvent(_this2.canvas, EVENT_CLICK, {\n originalEvent: event\n });\n }, 50);\n }\n }\n }\n },\n resize: function resize() {\n var _this3 = this;\n if (!this.isShown || this.hiding) {\n return;\n }\n if (this.fulled) {\n this.close();\n this.initBody();\n this.open();\n }\n this.initContainer();\n this.initViewer();\n this.renderViewer();\n this.renderList();\n if (this.viewed) {\n this.initImage(function () {\n _this3.renderImage();\n });\n }\n if (this.played) {\n if (this.options.fullscreen && this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n this.stop();\n return;\n }\n forEach(this.player.getElementsByTagName('img'), function (image) {\n addListener(image, EVENT_LOAD, _this3.loadImage.bind(_this3), {\n once: true\n });\n dispatchEvent(image, EVENT_LOAD);\n });\n }\n },\n wheel: function wheel(event) {\n var _this4 = this;\n if (!this.viewed) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this4.wheeling = false;\n }, 50);\n var ratio = Number(this.options.zoomRatio) || 0.1;\n var delta = 1;\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, true, null, event);\n }\n};\n\nvar methods = {\n /** Show the viewer (only available in modal mode)\n * @param {boolean} [immediate=false] - Indicates if show the viewer immediately or not.\n * @returns {Viewer} this\n */\n show: function show() {\n var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var element = this.element,\n options = this.options;\n if (options.inline || this.showing || this.isShown || this.showing) {\n return this;\n }\n if (!this.ready) {\n this.build();\n if (this.ready) {\n this.show(immediate);\n }\n return this;\n }\n if (isFunction(options.show)) {\n addListener(element, EVENT_SHOW, options.show, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_SHOW) === false || !this.ready) {\n return this;\n }\n if (this.hiding) {\n this.transitioning.abort();\n }\n this.showing = true;\n this.open();\n var viewer = this.viewer;\n removeClass(viewer, CLASS_HIDE);\n viewer.setAttribute('role', 'dialog');\n viewer.setAttribute('aria-labelledby', this.title.id);\n viewer.setAttribute('aria-modal', true);\n viewer.removeAttribute('aria-hidden');\n if (options.transition && !immediate) {\n var shown = this.shown.bind(this);\n this.transitioning = {\n abort: function abort() {\n removeListener(viewer, EVENT_TRANSITION_END, shown);\n removeClass(viewer, CLASS_IN);\n }\n };\n addClass(viewer, CLASS_TRANSITION);\n\n // Force reflow to enable CSS3 transition\n viewer.initialOffsetWidth = viewer.offsetWidth;\n addListener(viewer, EVENT_TRANSITION_END, shown, {\n once: true\n });\n addClass(viewer, CLASS_IN);\n } else {\n addClass(viewer, CLASS_IN);\n this.shown();\n }\n return this;\n },\n /**\n * Hide the viewer (only available in modal mode)\n * @param {boolean} [immediate=false] - Indicates if hide the viewer immediately or not.\n * @returns {Viewer} this\n */\n hide: function hide() {\n var _this = this;\n var immediate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var element = this.element,\n options = this.options;\n if (options.inline || this.hiding || !(this.isShown || this.showing)) {\n return this;\n }\n if (isFunction(options.hide)) {\n addListener(element, EVENT_HIDE, options.hide, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_HIDE) === false) {\n return this;\n }\n if (this.showing) {\n this.transitioning.abort();\n }\n this.hiding = true;\n if (this.played) {\n this.stop();\n } else if (this.viewing) {\n this.viewing.abort();\n }\n var viewer = this.viewer,\n image = this.image;\n var hideImmediately = function hideImmediately() {\n removeClass(viewer, CLASS_IN);\n _this.hidden();\n };\n if (options.transition && !immediate) {\n var _onViewerTransitionEnd = function onViewerTransitionEnd(event) {\n // Ignore all propagating `transitionend` events (#275).\n if (event && event.target === viewer) {\n removeListener(viewer, EVENT_TRANSITION_END, _onViewerTransitionEnd);\n _this.hidden();\n }\n };\n var onImageTransitionEnd = function onImageTransitionEnd() {\n // In case of show the viewer by `viewer.show(true)` previously (#407).\n if (hasClass(viewer, CLASS_TRANSITION)) {\n addListener(viewer, EVENT_TRANSITION_END, _onViewerTransitionEnd);\n removeClass(viewer, CLASS_IN);\n } else {\n hideImmediately();\n }\n };\n this.transitioning = {\n abort: function abort() {\n if (_this.viewed && hasClass(image, CLASS_TRANSITION)) {\n removeListener(image, EVENT_TRANSITION_END, onImageTransitionEnd);\n } else if (hasClass(viewer, CLASS_TRANSITION)) {\n removeListener(viewer, EVENT_TRANSITION_END, _onViewerTransitionEnd);\n }\n }\n };\n\n // In case of hiding the viewer when holding on the image (#255),\n // note that the `CLASS_TRANSITION` class will be removed on pointer down.\n if (this.viewed && hasClass(image, CLASS_TRANSITION)) {\n addListener(image, EVENT_TRANSITION_END, onImageTransitionEnd, {\n once: true\n });\n this.zoomTo(0, false, null, null, true);\n } else {\n onImageTransitionEnd();\n }\n } else {\n hideImmediately();\n }\n return this;\n },\n /**\n * View one of the images with image's index\n * @param {number} index - The index of the image to view.\n * @returns {Viewer} this\n */\n view: function view() {\n var _this2 = this;\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.options.initialViewIndex;\n index = Number(index) || 0;\n if (this.hiding || this.played || index < 0 || index >= this.length || this.viewed && index === this.index) {\n return this;\n }\n if (!this.isShown) {\n this.index = index;\n return this.show();\n }\n if (this.viewing) {\n this.viewing.abort();\n }\n var element = this.element,\n options = this.options,\n title = this.title,\n canvas = this.canvas;\n var item = this.items[index];\n var img = item.querySelector('img');\n var url = getData(img, 'originalUrl');\n var alt = img.getAttribute('alt');\n var image = document.createElement('img');\n forEach(options.inheritedAttributes, function (name) {\n var value = img.getAttribute(name);\n if (value !== null) {\n image.setAttribute(name, value);\n }\n });\n image.src = url;\n image.alt = alt;\n if (isFunction(options.view)) {\n addListener(element, EVENT_VIEW, options.view, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_VIEW, {\n originalImage: this.images[index],\n index: index,\n image: image\n }) === false || !this.isShown || this.hiding || this.played) {\n return this;\n }\n var activeItem = this.items[this.index];\n if (activeItem) {\n removeClass(activeItem, CLASS_ACTIVE);\n activeItem.removeAttribute('aria-selected');\n }\n addClass(item, CLASS_ACTIVE);\n item.setAttribute('aria-selected', true);\n if (options.focus) {\n item.focus();\n }\n this.image = image;\n this.viewed = false;\n this.index = index;\n this.imageData = {};\n addClass(image, CLASS_INVISIBLE);\n if (options.loading) {\n addClass(canvas, CLASS_LOADING);\n }\n canvas.innerHTML = '';\n canvas.appendChild(image);\n\n // Center current item\n this.renderList();\n\n // Clear title\n title.innerHTML = '';\n\n // Generate title after viewed\n var onViewed = function onViewed() {\n var imageData = _this2.imageData;\n var render = Array.isArray(options.title) ? options.title[1] : options.title;\n title.innerHTML = escapeHTMLEntities(isFunction(render) ? render.call(_this2, image, imageData) : \"\".concat(alt, \" (\").concat(imageData.naturalWidth, \" \\xD7 \").concat(imageData.naturalHeight, \")\"));\n };\n var onLoad;\n var onError;\n addListener(element, EVENT_VIEWED, onViewed, {\n once: true\n });\n this.viewing = {\n abort: function abort() {\n removeListener(element, EVENT_VIEWED, onViewed);\n if (image.complete) {\n if (_this2.imageRendering) {\n _this2.imageRendering.abort();\n } else if (_this2.imageInitializing) {\n _this2.imageInitializing.abort();\n }\n } else {\n // Cancel download to save bandwidth.\n image.src = '';\n removeListener(image, EVENT_LOAD, onLoad);\n if (_this2.timeout) {\n clearTimeout(_this2.timeout);\n }\n }\n }\n };\n if (image.complete) {\n this.load();\n } else {\n addListener(image, EVENT_LOAD, onLoad = function onLoad() {\n removeListener(image, EVENT_ERROR, onError);\n _this2.load();\n }, {\n once: true\n });\n addListener(image, EVENT_ERROR, onError = function onError() {\n removeListener(image, EVENT_LOAD, onLoad);\n if (_this2.timeout) {\n clearTimeout(_this2.timeout);\n _this2.timeout = false;\n }\n removeClass(image, CLASS_INVISIBLE);\n if (options.loading) {\n removeClass(_this2.canvas, CLASS_LOADING);\n }\n }, {\n once: true\n });\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n\n // Make the image visible if it fails to load within 1s\n this.timeout = setTimeout(function () {\n removeClass(image, CLASS_INVISIBLE);\n _this2.timeout = false;\n }, 1000);\n }\n return this;\n },\n /**\n * View the previous image\n * @param {boolean} [loop=false] - Indicate if view the last one\n * when it is the first one at present.\n * @returns {Viewer} this\n */\n prev: function prev() {\n var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var index = this.index - 1;\n if (index < 0) {\n index = loop ? this.length - 1 : 0;\n }\n this.view(index);\n return this;\n },\n /**\n * View the next image\n * @param {boolean} [loop=false] - Indicate if view the first one\n * when it is the last one at present.\n * @returns {Viewer} this\n */\n next: function next() {\n var loop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var maxIndex = this.length - 1;\n var index = this.index + 1;\n if (index > maxIndex) {\n index = loop ? 0 : maxIndex;\n }\n this.view(index);\n return this;\n },\n /**\n * Move the image with relative offsets.\n * @param {number} x - The moving distance in the horizontal direction.\n * @param {number} [y=x] The moving distance in the vertical direction.\n * @returns {Viewer} this\n */\n move: function move(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var imageData = this.imageData;\n this.moveTo(isUndefined(x) ? x : imageData.x + Number(x), isUndefined(y) ? y : imageData.y + Number(y));\n return this;\n },\n /**\n * Move the image to an absolute point.\n * @param {number} x - The new position in the horizontal direction.\n * @param {number} [y=x] - The new position in the vertical direction.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n moveTo: function moveTo(x) {\n var _this3 = this;\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var _originalEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n x = Number(x);\n y = Number(y);\n if (this.viewed && !this.played && options.movable) {\n var oldX = imageData.x;\n var oldY = imageData.y;\n var changed = false;\n if (isNumber(x)) {\n changed = true;\n } else {\n x = oldX;\n }\n if (isNumber(y)) {\n changed = true;\n } else {\n y = oldY;\n }\n if (changed) {\n if (isFunction(options.move)) {\n addListener(element, EVENT_MOVE, options.move, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_MOVE, {\n x: x,\n y: y,\n oldX: oldX,\n oldY: oldY,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n imageData.x = x;\n imageData.y = y;\n imageData.left = x;\n imageData.top = y;\n this.moving = true;\n this.renderImage(function () {\n _this3.moving = false;\n if (isFunction(options.moved)) {\n addListener(element, EVENT_MOVED, options.moved, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_MOVED, {\n x: x,\n y: y,\n oldX: oldX,\n oldY: oldY,\n originalEvent: _originalEvent\n }, {\n cancelable: false\n });\n });\n }\n }\n return this;\n },\n /**\n * Rotate the image with a relative degree.\n * @param {number} degree - The rotate degree.\n * @returns {Viewer} this\n */\n rotate: function rotate(degree) {\n this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n return this;\n },\n /**\n * Rotate the image to an absolute degree.\n * @param {number} degree - The rotate degree.\n * @returns {Viewer} this\n */\n rotateTo: function rotateTo(degree) {\n var _this4 = this;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n degree = Number(degree);\n if (isNumber(degree) && this.viewed && !this.played && options.rotatable) {\n var oldDegree = imageData.rotate;\n if (isFunction(options.rotate)) {\n addListener(element, EVENT_ROTATE, options.rotate, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_ROTATE, {\n degree: degree,\n oldDegree: oldDegree\n }) === false) {\n return this;\n }\n imageData.rotate = degree;\n this.rotating = true;\n this.renderImage(function () {\n _this4.rotating = false;\n if (isFunction(options.rotated)) {\n addListener(element, EVENT_ROTATED, options.rotated, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_ROTATED, {\n degree: degree,\n oldDegree: oldDegree\n }, {\n cancelable: false\n });\n });\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Viewer} this\n */\n scaleX: function scaleX(_scaleX) {\n this.scale(_scaleX, this.imageData.scaleY);\n return this;\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Viewer} this\n */\n scaleY: function scaleY(_scaleY) {\n this.scale(this.imageData.scaleX, _scaleY);\n return this;\n },\n /**\n * Scale the image.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Viewer} this\n */\n scale: function scale(scaleX) {\n var _this5 = this;\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var element = this.element,\n options = this.options,\n imageData = this.imageData;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.viewed && !this.played && options.scalable) {\n var oldScaleX = imageData.scaleX;\n var oldScaleY = imageData.scaleY;\n var changed = false;\n if (isNumber(scaleX)) {\n changed = true;\n } else {\n scaleX = oldScaleX;\n }\n if (isNumber(scaleY)) {\n changed = true;\n } else {\n scaleY = oldScaleY;\n }\n if (changed) {\n if (isFunction(options.scale)) {\n addListener(element, EVENT_SCALE, options.scale, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_SCALE, {\n scaleX: scaleX,\n scaleY: scaleY,\n oldScaleX: oldScaleX,\n oldScaleY: oldScaleY\n }) === false) {\n return this;\n }\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n this.scaling = true;\n this.renderImage(function () {\n _this5.scaling = false;\n if (isFunction(options.scaled)) {\n addListener(element, EVENT_SCALED, options.scaled, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_SCALED, {\n scaleX: scaleX,\n scaleY: scaleY,\n oldScaleX: oldScaleX,\n oldScaleY: oldScaleY\n }, {\n cancelable: false\n });\n });\n }\n }\n return this;\n },\n /**\n * Zoom the image with a relative ratio.\n * @param {number} ratio - The target ratio.\n * @param {boolean} [showTooltip=false] - Indicates whether to show the tooltip.\n * @param {Object} [pivot] - The pivot point coordinate for zooming.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n zoom: function zoom(ratio) {\n var showTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var pivot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _originalEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var imageData = this.imageData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n this.zoomTo(imageData.width * ratio / imageData.naturalWidth, showTooltip, pivot, _originalEvent);\n return this;\n },\n /**\n * Zoom the image to an absolute ratio.\n * @param {number} ratio - The target ratio.\n * @param {boolean} [showTooltip] - Indicates whether to show the tooltip.\n * @param {Object} [pivot] - The pivot point coordinate for zooming.\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @param {Event} [_zoomable=false] - Indicates if the current zoom is available or not.\n * @returns {Viewer} this\n */\n zoomTo: function zoomTo(ratio) {\n var _this6 = this;\n var showTooltip = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var pivot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var _originalEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var _zoomable = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var element = this.element,\n options = this.options,\n pointers = this.pointers,\n imageData = this.imageData;\n var x = imageData.x,\n y = imageData.y,\n width = imageData.width,\n height = imageData.height,\n naturalWidth = imageData.naturalWidth,\n naturalHeight = imageData.naturalHeight;\n ratio = Math.max(0, ratio);\n if (isNumber(ratio) && this.viewed && !this.played && (_zoomable || options.zoomable)) {\n if (!_zoomable) {\n var minZoomRatio = Math.max(0.01, options.minZoomRatio);\n var maxZoomRatio = Math.min(100, options.maxZoomRatio);\n ratio = Math.min(Math.max(ratio, minZoomRatio), maxZoomRatio);\n }\n if (_originalEvent) {\n switch (_originalEvent.type) {\n case 'wheel':\n if (options.zoomRatio >= 0.055 && ratio > 0.95 && ratio < 1.05) {\n ratio = 1;\n }\n break;\n case 'pointermove':\n case 'touchmove':\n case 'mousemove':\n if (ratio > 0.99 && ratio < 1.01) {\n ratio = 1;\n }\n break;\n }\n }\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n var offsetWidth = newWidth - width;\n var offsetHeight = newHeight - height;\n var oldRatio = imageData.ratio;\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: oldRatio,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n this.zooming = true;\n if (_originalEvent) {\n var offset = getOffset(this.viewer);\n var center = pointers && Object.keys(pointers).length > 0 ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n imageData.x -= offsetWidth * ((center.pageX - offset.left - x) / width);\n imageData.y -= offsetHeight * ((center.pageY - offset.top - y) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n imageData.x -= offsetWidth * ((pivot.x - x) / width);\n imageData.y -= offsetHeight * ((pivot.y - y) / height);\n } else {\n // Zoom from the center of the image\n imageData.x -= offsetWidth / 2;\n imageData.y -= offsetHeight / 2;\n }\n imageData.left = imageData.x;\n imageData.top = imageData.y;\n imageData.width = newWidth;\n imageData.height = newHeight;\n imageData.oldRatio = oldRatio;\n imageData.ratio = ratio;\n this.renderImage(function () {\n _this6.zooming = false;\n if (isFunction(options.zoomed)) {\n addListener(element, EVENT_ZOOMED, options.zoomed, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_ZOOMED, {\n ratio: ratio,\n oldRatio: oldRatio,\n originalEvent: _originalEvent\n }, {\n cancelable: false\n });\n });\n if (showTooltip) {\n this.tooltip();\n }\n }\n return this;\n },\n /**\n * Play the images\n * @param {boolean|FullscreenOptions} [fullscreen=false] - Indicate if request fullscreen or not.\n * @returns {Viewer} this\n */\n play: function play() {\n var _this7 = this;\n var fullscreen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n if (!this.isShown || this.played) {\n return this;\n }\n var element = this.element,\n options = this.options;\n if (isFunction(options.play)) {\n addListener(element, EVENT_PLAY, options.play, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_PLAY) === false) {\n return this;\n }\n var player = this.player;\n var onLoad = this.loadImage.bind(this);\n var list = [];\n var total = 0;\n var index = 0;\n this.played = true;\n this.onLoadWhenPlay = onLoad;\n if (fullscreen) {\n this.requestFullscreen(fullscreen);\n }\n addClass(player, CLASS_SHOW);\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = document.createElement('img');\n image.src = getData(img, 'originalUrl');\n image.alt = img.getAttribute('alt');\n image.referrerPolicy = img.referrerPolicy;\n total += 1;\n addClass(image, CLASS_FADE);\n toggleClass(image, CLASS_TRANSITION, options.transition);\n if (hasClass(item, CLASS_ACTIVE)) {\n addClass(image, CLASS_IN);\n index = i;\n }\n list.push(image);\n addListener(image, EVENT_LOAD, onLoad, {\n once: true\n });\n player.appendChild(image);\n });\n if (isNumber(options.interval) && options.interval > 0) {\n var _prev = function prev() {\n clearTimeout(_this7.playing.timeout);\n removeClass(list[index], CLASS_IN);\n index -= 1;\n index = index >= 0 ? index : total - 1;\n addClass(list[index], CLASS_IN);\n _this7.playing.timeout = setTimeout(_prev, options.interval);\n };\n var _next = function next() {\n clearTimeout(_this7.playing.timeout);\n removeClass(list[index], CLASS_IN);\n index += 1;\n index = index < total ? index : 0;\n addClass(list[index], CLASS_IN);\n _this7.playing.timeout = setTimeout(_next, options.interval);\n };\n if (total > 1) {\n this.playing = {\n prev: _prev,\n next: _next,\n timeout: setTimeout(_next, options.interval)\n };\n }\n }\n return this;\n },\n // Stop play\n stop: function stop() {\n var _this8 = this;\n if (!this.played) {\n return this;\n }\n var element = this.element,\n options = this.options;\n if (isFunction(options.stop)) {\n addListener(element, EVENT_STOP, options.stop, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_STOP) === false) {\n return this;\n }\n var player = this.player;\n clearTimeout(this.playing.timeout);\n this.playing = false;\n this.played = false;\n forEach(player.getElementsByTagName('img'), function (image) {\n removeListener(image, EVENT_LOAD, _this8.onLoadWhenPlay);\n });\n removeClass(player, CLASS_SHOW);\n player.innerHTML = '';\n this.exitFullscreen();\n return this;\n },\n // Enter modal mode (only available in inline mode)\n full: function full() {\n var _this9 = this;\n var options = this.options,\n viewer = this.viewer,\n image = this.image,\n list = this.list;\n if (!this.isShown || this.played || this.fulled || !options.inline) {\n return this;\n }\n this.fulled = true;\n this.open();\n addClass(this.button, CLASS_FULLSCREEN_EXIT);\n if (options.transition) {\n removeClass(list, CLASS_TRANSITION);\n if (this.viewed) {\n removeClass(image, CLASS_TRANSITION);\n }\n }\n addClass(viewer, CLASS_FIXED);\n viewer.setAttribute('role', 'dialog');\n viewer.setAttribute('aria-labelledby', this.title.id);\n viewer.setAttribute('aria-modal', true);\n viewer.removeAttribute('style');\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n if (options.focus) {\n this.enforceFocus();\n }\n this.initContainer();\n this.viewerData = assign({}, this.containerData);\n this.renderList();\n if (this.viewed) {\n this.initImage(function () {\n _this9.renderImage(function () {\n if (options.transition) {\n setTimeout(function () {\n addClass(image, CLASS_TRANSITION);\n addClass(list, CLASS_TRANSITION);\n }, 0);\n }\n });\n });\n }\n return this;\n },\n // Exit modal mode (only available in inline mode)\n exit: function exit() {\n var _this10 = this;\n var options = this.options,\n viewer = this.viewer,\n image = this.image,\n list = this.list;\n if (!this.isShown || this.played || !this.fulled || !options.inline) {\n return this;\n }\n this.fulled = false;\n this.close();\n removeClass(this.button, CLASS_FULLSCREEN_EXIT);\n if (options.transition) {\n removeClass(list, CLASS_TRANSITION);\n if (this.viewed) {\n removeClass(image, CLASS_TRANSITION);\n }\n }\n if (options.focus) {\n this.clearEnforceFocus();\n }\n viewer.removeAttribute('role');\n viewer.removeAttribute('aria-labelledby');\n viewer.removeAttribute('aria-modal');\n removeClass(viewer, CLASS_FIXED);\n setStyle(viewer, {\n zIndex: options.zIndexInline\n });\n this.viewerData = assign({}, this.parentData);\n this.renderViewer();\n this.renderList();\n if (this.viewed) {\n this.initImage(function () {\n _this10.renderImage(function () {\n if (options.transition) {\n setTimeout(function () {\n addClass(image, CLASS_TRANSITION);\n addClass(list, CLASS_TRANSITION);\n }, 0);\n }\n });\n });\n }\n return this;\n },\n // Show the current ratio of the image with percentage\n tooltip: function tooltip() {\n var _this11 = this;\n var options = this.options,\n tooltipBox = this.tooltipBox,\n imageData = this.imageData;\n if (!this.viewed || this.played || !options.tooltip) {\n return this;\n }\n tooltipBox.textContent = \"\".concat(Math.round(imageData.ratio * 100), \"%\");\n if (!this.tooltipping) {\n if (options.transition) {\n if (this.fading) {\n dispatchEvent(tooltipBox, EVENT_TRANSITION_END);\n }\n addClass(tooltipBox, CLASS_SHOW);\n addClass(tooltipBox, CLASS_FADE);\n addClass(tooltipBox, CLASS_TRANSITION);\n tooltipBox.removeAttribute('aria-hidden');\n\n // Force reflow to enable CSS3 transition\n tooltipBox.initialOffsetWidth = tooltipBox.offsetWidth;\n addClass(tooltipBox, CLASS_IN);\n } else {\n addClass(tooltipBox, CLASS_SHOW);\n tooltipBox.removeAttribute('aria-hidden');\n }\n } else {\n clearTimeout(this.tooltipping);\n }\n this.tooltipping = setTimeout(function () {\n if (options.transition) {\n addListener(tooltipBox, EVENT_TRANSITION_END, function () {\n removeClass(tooltipBox, CLASS_SHOW);\n removeClass(tooltipBox, CLASS_FADE);\n removeClass(tooltipBox, CLASS_TRANSITION);\n tooltipBox.setAttribute('aria-hidden', true);\n _this11.fading = false;\n }, {\n once: true\n });\n removeClass(tooltipBox, CLASS_IN);\n _this11.fading = true;\n } else {\n removeClass(tooltipBox, CLASS_SHOW);\n tooltipBox.setAttribute('aria-hidden', true);\n }\n _this11.tooltipping = false;\n }, 1000);\n return this;\n },\n /**\n * Toggle the image size between its current size and natural size\n * @param {Event} [_originalEvent=null] - The original event if any.\n * @returns {Viewer} this\n */\n toggle: function toggle() {\n var _originalEvent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n if (this.imageData.ratio === 1) {\n this.zoomTo(this.imageData.oldRatio, true, null, _originalEvent);\n } else {\n this.zoomTo(1, true, null, _originalEvent);\n }\n return this;\n },\n // Reset the image to its initial state\n reset: function reset() {\n if (this.viewed && !this.played) {\n this.imageData = assign({}, this.initialImageData);\n this.renderImage();\n }\n return this;\n },\n // Update viewer when images changed\n update: function update() {\n var _this12 = this;\n var element = this.element,\n options = this.options,\n isImg = this.isImg;\n\n // Destroy viewer if the target image was deleted\n if (isImg && !element.parentNode) {\n return this.destroy();\n }\n var images = [];\n forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) {\n if (isFunction(options.filter)) {\n if (options.filter.call(_this12, image)) {\n images.push(image);\n }\n } else if (_this12.getImageURL(image)) {\n images.push(image);\n }\n });\n if (!images.length) {\n return this;\n }\n this.images = images;\n this.length = images.length;\n if (this.ready) {\n var changedIndexes = [];\n forEach(this.items, function (item, i) {\n var img = item.querySelector('img');\n var image = images[i];\n if (image && img) {\n if (image.src !== img.src\n\n // Title changed (#408)\n || image.alt !== img.alt) {\n changedIndexes.push(i);\n }\n } else {\n changedIndexes.push(i);\n }\n });\n setStyle(this.list, {\n width: 'auto'\n });\n this.initList();\n if (this.isShown) {\n if (this.length) {\n if (this.viewed) {\n var changedIndex = changedIndexes.indexOf(this.index);\n if (changedIndex >= 0) {\n this.viewed = false;\n this.view(Math.max(Math.min(this.index - changedIndex, this.length - 1), 0));\n } else {\n var activeItem = this.items[this.index];\n\n // Reactivate the current viewing item after reset the list.\n addClass(activeItem, CLASS_ACTIVE);\n activeItem.setAttribute('aria-selected', true);\n }\n }\n } else {\n this.image = null;\n this.viewed = false;\n this.index = 0;\n this.imageData = {};\n this.canvas.innerHTML = '';\n this.title.innerHTML = '';\n }\n }\n } else {\n this.build();\n }\n return this;\n },\n // Destroy the viewer\n destroy: function destroy() {\n var element = this.element,\n options = this.options;\n if (!element[NAMESPACE]) {\n return this;\n }\n this.destroyed = true;\n if (this.ready) {\n if (this.played) {\n this.stop();\n }\n if (options.inline) {\n if (this.fulled) {\n this.exit();\n }\n this.unbind();\n } else if (this.isShown) {\n if (this.viewing) {\n if (this.imageRendering) {\n this.imageRendering.abort();\n } else if (this.imageInitializing) {\n this.imageInitializing.abort();\n }\n }\n if (this.hiding) {\n this.transitioning.abort();\n }\n this.hidden();\n } else if (this.showing) {\n this.transitioning.abort();\n this.hidden();\n }\n this.ready = false;\n this.viewer.parentNode.removeChild(this.viewer);\n } else if (options.inline) {\n if (this.delaying) {\n this.delaying.abort();\n } else if (this.initializing) {\n this.initializing.abort();\n }\n }\n if (!options.inline) {\n removeListener(element, EVENT_CLICK, this.onStart);\n }\n element[NAMESPACE] = undefined;\n return this;\n }\n};\n\nvar others = {\n getImageURL: function getImageURL(image) {\n var url = this.options.url;\n if (isString(url)) {\n url = image.getAttribute(url);\n } else if (isFunction(url)) {\n url = url.call(this, image);\n } else {\n url = '';\n }\n return url;\n },\n enforceFocus: function enforceFocus() {\n var _this = this;\n this.clearEnforceFocus();\n addListener(document, EVENT_FOCUSIN, this.onFocusin = function (event) {\n var viewer = _this.viewer;\n var target = event.target;\n if (target === document || target === viewer || viewer.contains(target)) {\n return;\n }\n while (target) {\n // Avoid conflicts with other modals (#474, #540)\n if (target.getAttribute('tabindex') !== null || target.getAttribute('aria-modal') === 'true') {\n return;\n }\n target = target.parentElement;\n }\n viewer.focus();\n });\n },\n clearEnforceFocus: function clearEnforceFocus() {\n if (this.onFocusin) {\n removeListener(document, EVENT_FOCUSIN, this.onFocusin);\n this.onFocusin = null;\n }\n },\n open: function open() {\n var body = this.body;\n addClass(body, CLASS_OPEN);\n if (this.scrollbarWidth > 0) {\n body.style.paddingRight = \"\".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 0), \"px\");\n }\n },\n close: function close() {\n var body = this.body;\n removeClass(body, CLASS_OPEN);\n if (this.scrollbarWidth > 0) {\n body.style.paddingRight = this.initialBodyPaddingRight;\n }\n },\n shown: function shown() {\n var element = this.element,\n options = this.options,\n viewer = this.viewer;\n this.fulled = true;\n this.isShown = true;\n this.render();\n this.bind();\n this.showing = false;\n if (options.focus) {\n viewer.focus();\n this.enforceFocus();\n }\n if (isFunction(options.shown)) {\n addListener(element, EVENT_SHOWN, options.shown, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_SHOWN) === false) {\n return;\n }\n if (this.ready && this.isShown && !this.hiding) {\n this.view(this.index);\n }\n },\n hidden: function hidden() {\n var element = this.element,\n options = this.options,\n viewer = this.viewer;\n if (options.fucus) {\n this.clearEnforceFocus();\n }\n this.close();\n this.unbind();\n addClass(viewer, CLASS_HIDE);\n viewer.removeAttribute('role');\n viewer.removeAttribute('aria-labelledby');\n viewer.removeAttribute('aria-modal');\n viewer.setAttribute('aria-hidden', true);\n this.resetList();\n this.resetImage();\n this.fulled = false;\n this.viewed = false;\n this.isShown = false;\n this.hiding = false;\n if (!this.destroyed) {\n if (isFunction(options.hidden)) {\n addListener(element, EVENT_HIDDEN, options.hidden, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_HIDDEN, null, {\n cancelable: false\n });\n }\n },\n requestFullscreen: function requestFullscreen(options) {\n var document = this.element.ownerDocument;\n if (this.fulled && !(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n var documentElement = document.documentElement;\n\n // Element.requestFullscreen()\n if (documentElement.requestFullscreen) {\n // Avoid TypeError when convert `options` to dictionary\n if (isPlainObject(options)) {\n documentElement.requestFullscreen(options);\n } else {\n documentElement.requestFullscreen();\n }\n } else if (documentElement.webkitRequestFullscreen) {\n documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n } else if (documentElement.mozRequestFullScreen) {\n documentElement.mozRequestFullScreen();\n } else if (documentElement.msRequestFullscreen) {\n documentElement.msRequestFullscreen();\n }\n }\n },\n exitFullscreen: function exitFullscreen() {\n var document = this.element.ownerDocument;\n if (this.fulled && (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement)) {\n // Document.exitFullscreen()\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.msExitFullscreen) {\n document.msExitFullscreen();\n }\n }\n },\n change: function change(event) {\n var options = this.options,\n pointers = this.pointers;\n var pointer = pointers[Object.keys(pointers)[0]];\n\n // In the case of the `pointers` object is empty (#421)\n if (!pointer) {\n return;\n }\n var offsetX = pointer.endX - pointer.startX;\n var offsetY = pointer.endY - pointer.startY;\n switch (this.action) {\n // Move the current image\n case ACTION_MOVE:\n if (offsetX !== 0 || offsetY !== 0) {\n this.pointerMoved = true;\n this.move(offsetX, offsetY, event);\n }\n break;\n\n // Zoom the current image\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), false, null, event);\n break;\n case ACTION_SWITCH:\n {\n this.action = 'switched';\n var absoluteOffsetX = Math.abs(offsetX);\n if (absoluteOffsetX > 1 && absoluteOffsetX > Math.abs(offsetY)) {\n // Empty `pointers` as `touchend` event will not be fired after swiped in iOS browsers.\n this.pointers = {};\n if (offsetX > 1) {\n this.prev(options.loop);\n } else if (offsetX < -1) {\n this.next(options.loop);\n }\n }\n break;\n }\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n },\n isSwitchable: function isSwitchable() {\n var imageData = this.imageData,\n viewerData = this.viewerData;\n return this.length > 1 && imageData.x >= 0 && imageData.y >= 0 && imageData.width <= viewerData.width && imageData.height <= viewerData.height;\n }\n};\n\nvar AnotherViewer = WINDOW.Viewer;\nvar getUniqueID = function (id) {\n return function () {\n id += 1;\n return id;\n };\n}(-1);\nvar Viewer = /*#__PURE__*/function () {\n /**\n * Create a new Viewer.\n * @param {Element} element - The target element for viewing.\n * @param {Object} [options={}] - The configuration options.\n */\n function Viewer(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Viewer);\n if (!element || element.nodeType !== 1) {\n throw new Error('The first argument is required and must be an element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.action = false;\n this.fading = false;\n this.fulled = false;\n this.hiding = false;\n this.imageClicked = false;\n this.imageData = {};\n this.index = this.options.initialViewIndex;\n this.isImg = false;\n this.isShown = false;\n this.length = 0;\n this.moving = false;\n this.played = false;\n this.playing = false;\n this.pointers = {};\n this.ready = false;\n this.rotating = false;\n this.scaling = false;\n this.showing = false;\n this.timeout = false;\n this.tooltipping = false;\n this.viewed = false;\n this.viewing = false;\n this.wheeling = false;\n this.zooming = false;\n this.pointerMoved = false;\n this.id = getUniqueID();\n this.init();\n }\n return _createClass(Viewer, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n var element = this.element,\n options = this.options;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n\n // The `focus` option requires the `keyboard` option set to `true`.\n if (options.focus && !options.keyboard) {\n options.focus = false;\n }\n var isImg = element.localName === 'img';\n var images = [];\n forEach(isImg ? [element] : element.querySelectorAll('img'), function (image) {\n if (isFunction(options.filter)) {\n if (options.filter.call(_this, image)) {\n images.push(image);\n }\n } else if (_this.getImageURL(image)) {\n images.push(image);\n }\n });\n this.isImg = isImg;\n this.length = images.length;\n this.images = images;\n this.initBody();\n\n // Override `transition` option if it is not supported\n if (isUndefined(document.createElement(NAMESPACE).style.transition)) {\n options.transition = false;\n }\n if (options.inline) {\n var count = 0;\n var progress = function progress() {\n count += 1;\n if (count === _this.length) {\n var timeout;\n _this.initializing = false;\n _this.delaying = {\n abort: function abort() {\n clearTimeout(timeout);\n }\n };\n\n // build asynchronously to keep `this.viewer` is accessible in `ready` event handler.\n timeout = setTimeout(function () {\n _this.delaying = false;\n _this.build();\n }, 0);\n }\n };\n this.initializing = {\n abort: function abort() {\n forEach(images, function (image) {\n if (!image.complete) {\n removeListener(image, EVENT_LOAD, progress);\n removeListener(image, EVENT_ERROR, progress);\n }\n });\n }\n };\n forEach(images, function (image) {\n if (image.complete) {\n progress();\n } else {\n var onLoad;\n var onError;\n addListener(image, EVENT_LOAD, onLoad = function onLoad() {\n removeListener(image, EVENT_ERROR, onError);\n progress();\n }, {\n once: true\n });\n addListener(image, EVENT_ERROR, onError = function onError() {\n removeListener(image, EVENT_LOAD, onLoad);\n progress();\n }, {\n once: true\n });\n }\n });\n } else {\n addListener(element, EVENT_CLICK, this.onStart = function (_ref) {\n var target = _ref.target;\n if (target.localName === 'img' && (!isFunction(options.filter) || options.filter.call(_this, target))) {\n _this.view(_this.images.indexOf(target));\n }\n });\n }\n }\n }, {\n key: \"build\",\n value: function build() {\n if (this.ready) {\n return;\n }\n var element = this.element,\n options = this.options;\n var parent = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var viewer = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var title = viewer.querySelector(\".\".concat(NAMESPACE, \"-title\"));\n var toolbar = viewer.querySelector(\".\".concat(NAMESPACE, \"-toolbar\"));\n var navbar = viewer.querySelector(\".\".concat(NAMESPACE, \"-navbar\"));\n var button = viewer.querySelector(\".\".concat(NAMESPACE, \"-button\"));\n var canvas = viewer.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n this.parent = parent;\n this.viewer = viewer;\n this.title = title;\n this.toolbar = toolbar;\n this.navbar = navbar;\n this.button = button;\n this.canvas = canvas;\n this.footer = viewer.querySelector(\".\".concat(NAMESPACE, \"-footer\"));\n this.tooltipBox = viewer.querySelector(\".\".concat(NAMESPACE, \"-tooltip\"));\n this.player = viewer.querySelector(\".\".concat(NAMESPACE, \"-player\"));\n this.list = viewer.querySelector(\".\".concat(NAMESPACE, \"-list\"));\n viewer.id = \"\".concat(NAMESPACE).concat(this.id);\n title.id = \"\".concat(NAMESPACE, \"Title\").concat(this.id);\n addClass(title, !options.title ? CLASS_HIDE : getResponsiveClass(Array.isArray(options.title) ? options.title[0] : options.title));\n addClass(navbar, !options.navbar ? CLASS_HIDE : getResponsiveClass(options.navbar));\n toggleClass(button, CLASS_HIDE, !options.button);\n if (options.keyboard) {\n button.setAttribute('tabindex', 0);\n }\n if (options.backdrop) {\n addClass(viewer, \"\".concat(NAMESPACE, \"-backdrop\"));\n if (!options.inline && options.backdrop !== 'static') {\n setData(canvas, DATA_ACTION, 'hide');\n }\n }\n if (isString(options.className) && options.className) {\n // In case there are multiple class names\n options.className.split(REGEXP_SPACES).forEach(function (className) {\n addClass(viewer, className);\n });\n }\n if (options.toolbar) {\n var list = document.createElement('ul');\n var custom = isPlainObject(options.toolbar);\n var zoomButtons = BUTTONS.slice(0, 3);\n var rotateButtons = BUTTONS.slice(7, 9);\n var scaleButtons = BUTTONS.slice(9);\n if (!custom) {\n addClass(toolbar, getResponsiveClass(options.toolbar));\n }\n forEach(custom ? options.toolbar : BUTTONS, function (value, index) {\n var deep = custom && isPlainObject(value);\n var name = custom ? hyphenate(index) : value;\n var show = deep && !isUndefined(value.show) ? value.show : value;\n if (!show || !options.zoomable && zoomButtons.indexOf(name) !== -1 || !options.rotatable && rotateButtons.indexOf(name) !== -1 || !options.scalable && scaleButtons.indexOf(name) !== -1) {\n return;\n }\n var size = deep && !isUndefined(value.size) ? value.size : value;\n var click = deep && !isUndefined(value.click) ? value.click : value;\n var item = document.createElement('li');\n if (options.keyboard) {\n item.setAttribute('tabindex', 0);\n }\n item.setAttribute('role', 'button');\n addClass(item, \"\".concat(NAMESPACE, \"-\").concat(name));\n if (!isFunction(click)) {\n setData(item, DATA_ACTION, name);\n }\n if (isNumber(show)) {\n addClass(item, getResponsiveClass(show));\n }\n if (['small', 'large'].indexOf(size) !== -1) {\n addClass(item, \"\".concat(NAMESPACE, \"-\").concat(size));\n } else if (name === 'play') {\n addClass(item, \"\".concat(NAMESPACE, \"-large\"));\n }\n if (isFunction(click)) {\n addListener(item, EVENT_CLICK, click);\n }\n list.appendChild(item);\n });\n toolbar.appendChild(list);\n } else {\n addClass(toolbar, CLASS_HIDE);\n }\n if (!options.rotatable) {\n var rotates = toolbar.querySelectorAll('li[class*=\"rotate\"]');\n addClass(rotates, CLASS_INVISIBLE);\n forEach(rotates, function (rotate) {\n toolbar.appendChild(rotate);\n });\n }\n if (options.inline) {\n addClass(button, CLASS_FULLSCREEN);\n setStyle(viewer, {\n zIndex: options.zIndexInline\n });\n if (window.getComputedStyle(parent).position === 'static') {\n setStyle(parent, {\n position: 'relative'\n });\n }\n parent.insertBefore(viewer, element.nextSibling);\n } else {\n addClass(button, CLASS_CLOSE);\n addClass(viewer, CLASS_FIXED);\n addClass(viewer, CLASS_FADE);\n addClass(viewer, CLASS_HIDE);\n setStyle(viewer, {\n zIndex: options.zIndex\n });\n var container = options.container;\n if (isString(container)) {\n container = element.ownerDocument.querySelector(container);\n }\n if (!container) {\n container = this.body;\n }\n container.appendChild(viewer);\n }\n if (options.inline) {\n this.render();\n this.bind();\n this.isShown = true;\n }\n this.ready = true;\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n if (dispatchEvent(element, EVENT_READY) === false) {\n this.ready = false;\n return;\n }\n if (this.ready && options.inline) {\n this.view(this.index);\n }\n }\n\n /**\n * Get the no conflict viewer class.\n * @returns {Viewer} The viewer class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Viewer = AnotherViewer;\n return Viewer;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n}();\nassign(Viewer.prototype, render, events, handlers, methods, others);\n\nexport { Viewer as default };\n","import _ from \"viewerjs\";\nimport { default as on } from \"viewerjs\";\nimport { h as K, render as G, watch as x, nextTick as P, defineComponent as be, ref as me, onMounted as he, onUnmounted as we, openBlock as Te, createElementBlock as $e, renderSlot as Oe } from \"vue\";\nvar je = typeof global == \"object\" && global && global.Object === Object && global;\nconst re = je;\nvar _e = typeof self == \"object\" && self && self.Object === Object && self, Ae = re || _e || Function(\"return this\")();\nconst E = Ae;\nvar xe = E.Symbol;\nconst S = xe;\nvar te = Object.prototype, Pe = te.hasOwnProperty, Se = te.toString, O = S ? S.toStringTag : void 0;\nfunction Ie(e) {\n var r = Pe.call(e, O), t = e[O];\n try {\n e[O] = void 0;\n var n = !0;\n } catch {\n }\n var i = Se.call(e);\n return n && (r ? e[O] = t : delete e[O]), i;\n}\nvar Ee = Object.prototype, Me = Ee.toString;\nfunction Ve(e) {\n return Me.call(e);\n}\nvar Ce = \"[object Null]\", Be = \"[object Undefined]\", H = S ? S.toStringTag : void 0;\nfunction M(e) {\n return e == null ? e === void 0 ? Be : Ce : H && H in Object(e) ? Ie(e) : Ve(e);\n}\nfunction V(e) {\n return e != null && typeof e == \"object\";\n}\nvar Ue = \"[object Symbol]\";\nfunction Fe(e) {\n return typeof e == \"symbol\" || V(e) && M(e) == Ue;\n}\nvar Ne = Array.isArray;\nconst De = Ne;\nvar We = /\\s/;\nfunction Le(e) {\n for (var r = e.length; r-- && We.test(e.charAt(r)); )\n ;\n return r;\n}\nvar Re = /^\\s+/;\nfunction Ke(e) {\n return e && e.slice(0, Le(e) + 1).replace(Re, \"\");\n}\nfunction b(e) {\n var r = typeof e;\n return e != null && (r == \"object\" || r == \"function\");\n}\nvar q = 0 / 0, Ge = /^[-+]0x[0-9a-f]+$/i, He = /^0b[01]+$/i, qe = /^0o[0-7]+$/i, Je = parseInt;\nfunction J(e) {\n if (typeof e == \"number\")\n return e;\n if (Fe(e))\n return q;\n if (b(e)) {\n var r = typeof e.valueOf == \"function\" ? e.valueOf() : e;\n e = b(r) ? r + \"\" : r;\n }\n if (typeof e != \"string\")\n return e === 0 ? e : +e;\n e = Ke(e);\n var t = He.test(e);\n return t || qe.test(e) ? Je(e.slice(2), t ? 2 : 8) : Ge.test(e) ? q : +e;\n}\nfunction ne(e) {\n return e;\n}\nvar Xe = \"[object AsyncFunction]\", ze = \"[object Function]\", Qe = \"[object GeneratorFunction]\", Ye = \"[object Proxy]\";\nfunction ie(e) {\n if (!b(e))\n return !1;\n var r = M(e);\n return r == ze || r == Qe || r == Xe || r == Ye;\n}\nvar Ze = E[\"__core-js_shared__\"];\nconst F = Ze;\nvar X = function() {\n var e = /[^.]+$/.exec(F && F.keys && F.keys.IE_PROTO || \"\");\n return e ? \"Symbol(src)_1.\" + e : \"\";\n}();\nfunction ke(e) {\n return !!X && X in e;\n}\nvar er = Function.prototype, rr = er.toString;\nfunction tr(e) {\n if (e != null) {\n try {\n return rr.call(e);\n } catch {\n }\n try {\n return e + \"\";\n } catch {\n }\n }\n return \"\";\n}\nvar nr = /[\\\\^$.*+?()[\\]{}|]/g, ir = /^\\[object .+?Constructor\\]$/, or = Function.prototype, ar = Object.prototype, ur = or.toString, sr = ar.hasOwnProperty, cr = RegExp(\n \"^\" + ur.call(sr).replace(nr, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n);\nfunction fr(e) {\n if (!b(e) || ke(e))\n return !1;\n var r = ie(e) ? cr : ir;\n return r.test(tr(e));\n}\nfunction dr(e, r) {\n return e == null ? void 0 : e[r];\n}\nfunction lr(e, r) {\n var t = dr(e, r);\n return fr(t) ? t : void 0;\n}\nfunction pr(e, r, t) {\n switch (t.length) {\n case 0:\n return e.call(r);\n case 1:\n return e.call(r, t[0]);\n case 2:\n return e.call(r, t[0], t[1]);\n case 3:\n return e.call(r, t[0], t[1], t[2]);\n }\n return e.apply(r, t);\n}\nvar gr = 800, vr = 16, yr = Date.now;\nfunction br(e) {\n var r = 0, t = 0;\n return function() {\n var n = yr(), i = vr - (n - t);\n if (t = n, i > 0) {\n if (++r >= gr)\n return arguments[0];\n } else\n r = 0;\n return e.apply(void 0, arguments);\n };\n}\nfunction mr(e) {\n return function() {\n return e;\n };\n}\nvar hr = function() {\n try {\n var e = lr(Object, \"defineProperty\");\n return e({}, \"\", {}), e;\n } catch {\n }\n}();\nconst I = hr;\nvar wr = I ? function(e, r) {\n return I(e, \"toString\", {\n configurable: !0,\n enumerable: !1,\n value: mr(r),\n writable: !0\n });\n} : ne;\nconst Tr = wr;\nvar $r = br(Tr);\nconst Or = $r;\nvar jr = 9007199254740991, _r = /^(?:0|[1-9]\\d*)$/;\nfunction oe(e, r) {\n var t = typeof e;\n return r = r == null ? jr : r, !!r && (t == \"number\" || t != \"symbol\" && _r.test(e)) && e > -1 && e % 1 == 0 && e < r;\n}\nfunction ae(e, r, t) {\n r == \"__proto__\" && I ? I(e, r, {\n configurable: !0,\n enumerable: !0,\n value: t,\n writable: !0\n }) : e[r] = t;\n}\nfunction W(e, r) {\n return e === r || e !== e && r !== r;\n}\nvar Ar = Object.prototype, xr = Ar.hasOwnProperty;\nfunction ue(e, r, t) {\n var n = e[r];\n (!(xr.call(e, r) && W(n, t)) || t === void 0 && !(r in e)) && ae(e, r, t);\n}\nfunction Pr(e, r, t, n) {\n var i = !t;\n t || (t = {});\n for (var u = -1, c = r.length; ++u < c; ) {\n var a = r[u], d = n ? n(t[a], e[a], a, t, e) : void 0;\n d === void 0 && (d = e[a]), i ? ae(t, a, d) : ue(t, a, d);\n }\n return t;\n}\nvar z = Math.max;\nfunction Sr(e, r, t) {\n return r = z(r === void 0 ? e.length - 1 : r, 0), function() {\n for (var n = arguments, i = -1, u = z(n.length - r, 0), c = Array(u); ++i < u; )\n c[i] = n[r + i];\n i = -1;\n for (var a = Array(r + 1); ++i < r; )\n a[i] = n[i];\n return a[r] = t(c), pr(e, this, a);\n };\n}\nfunction se(e, r) {\n return Or(Sr(e, r, ne), e + \"\");\n}\nvar Ir = 9007199254740991;\nfunction ce(e) {\n return typeof e == \"number\" && e > -1 && e % 1 == 0 && e <= Ir;\n}\nfunction C(e) {\n return e != null && ce(e.length) && !ie(e);\n}\nfunction fe(e, r, t) {\n if (!b(t))\n return !1;\n var n = typeof r;\n return (n == \"number\" ? C(t) && oe(r, t.length) : n == \"string\" && r in t) ? W(t[r], e) : !1;\n}\nfunction Er(e) {\n return se(function(r, t) {\n var n = -1, i = t.length, u = i > 1 ? t[i - 1] : void 0, c = i > 2 ? t[2] : void 0;\n for (u = e.length > 3 && typeof u == \"function\" ? (i--, u) : void 0, c && fe(t[0], t[1], c) && (u = i < 3 ? void 0 : u, i = 1), r = Object(r); ++n < i; ) {\n var a = t[n];\n a && e(r, a, n, u);\n }\n return r;\n });\n}\nvar Mr = Object.prototype;\nfunction L(e) {\n var r = e && e.constructor, t = typeof r == \"function\" && r.prototype || Mr;\n return e === t;\n}\nfunction Vr(e, r) {\n for (var t = -1, n = Array(e); ++t < e; )\n n[t] = r(t);\n return n;\n}\nvar Cr = \"[object Arguments]\";\nfunction Q(e) {\n return V(e) && M(e) == Cr;\n}\nvar de = Object.prototype, Br = de.hasOwnProperty, Ur = de.propertyIsEnumerable, Fr = Q(function() {\n return arguments;\n}()) ? Q : function(e) {\n return V(e) && Br.call(e, \"callee\") && !Ur.call(e, \"callee\");\n};\nconst Nr = Fr;\nfunction Dr() {\n return !1;\n}\nvar le = typeof exports == \"object\" && exports && !exports.nodeType && exports, Y = le && typeof module == \"object\" && module && !module.nodeType && module, Wr = Y && Y.exports === le, Z = Wr ? E.Buffer : void 0, Lr = Z ? Z.isBuffer : void 0, Rr = Lr || Dr;\nconst Kr = Rr;\nvar Gr = \"[object Arguments]\", Hr = \"[object Array]\", qr = \"[object Boolean]\", Jr = \"[object Date]\", Xr = \"[object Error]\", zr = \"[object Function]\", Qr = \"[object Map]\", Yr = \"[object Number]\", Zr = \"[object Object]\", kr = \"[object RegExp]\", et = \"[object Set]\", rt = \"[object String]\", tt = \"[object WeakMap]\", nt = \"[object ArrayBuffer]\", it = \"[object DataView]\", ot = \"[object Float32Array]\", at = \"[object Float64Array]\", ut = \"[object Int8Array]\", st = \"[object Int16Array]\", ct = \"[object Int32Array]\", ft = \"[object Uint8Array]\", dt = \"[object Uint8ClampedArray]\", lt = \"[object Uint16Array]\", pt = \"[object Uint32Array]\", f = {};\nf[ot] = f[at] = f[ut] = f[st] = f[ct] = f[ft] = f[dt] = f[lt] = f[pt] = !0;\nf[Gr] = f[Hr] = f[nt] = f[qr] = f[it] = f[Jr] = f[Xr] = f[zr] = f[Qr] = f[Yr] = f[Zr] = f[kr] = f[et] = f[rt] = f[tt] = !1;\nfunction gt(e) {\n return V(e) && ce(e.length) && !!f[M(e)];\n}\nfunction vt(e) {\n return function(r) {\n return e(r);\n };\n}\nvar pe = typeof exports == \"object\" && exports && !exports.nodeType && exports, j = pe && typeof module == \"object\" && module && !module.nodeType && module, yt = j && j.exports === pe, N = yt && re.process, bt = function() {\n try {\n var e = j && j.require && j.require(\"util\").types;\n return e || N && N.binding && N.binding(\"util\");\n } catch {\n }\n}();\nconst k = bt;\nvar ee = k && k.isTypedArray, mt = ee ? vt(ee) : gt;\nconst ht = mt;\nvar wt = Object.prototype, Tt = wt.hasOwnProperty;\nfunction ge(e, r) {\n var t = De(e), n = !t && Nr(e), i = !t && !n && Kr(e), u = !t && !n && !i && ht(e), c = t || n || i || u, a = c ? Vr(e.length, String) : [], d = a.length;\n for (var s in e)\n (r || Tt.call(e, s)) && !(c && (s == \"length\" || i && (s == \"offset\" || s == \"parent\") || u && (s == \"buffer\" || s == \"byteLength\" || s == \"byteOffset\") || oe(s, d))) && a.push(s);\n return a;\n}\nfunction $t(e, r) {\n return function(t) {\n return e(r(t));\n };\n}\nvar Ot = $t(Object.keys, Object);\nconst jt = Ot;\nvar _t = Object.prototype, At = _t.hasOwnProperty;\nfunction xt(e) {\n if (!L(e))\n return jt(e);\n var r = [];\n for (var t in Object(e))\n At.call(e, t) && t != \"constructor\" && r.push(t);\n return r;\n}\nfunction Pt(e) {\n return C(e) ? ge(e) : xt(e);\n}\nvar St = Object.prototype, It = St.hasOwnProperty, Et = Er(function(e, r) {\n if (L(r) || C(r)) {\n Pr(r, Pt(r), e);\n return;\n }\n for (var t in r)\n It.call(r, t) && ue(e, t, r[t]);\n});\nconst Mt = Et;\nfunction Vt(e) {\n var r = [];\n if (e != null)\n for (var t in Object(e))\n r.push(t);\n return r;\n}\nvar Ct = Object.prototype, Bt = Ct.hasOwnProperty;\nfunction Ut(e) {\n if (!b(e))\n return Vt(e);\n var r = L(e), t = [];\n for (var n in e)\n n == \"constructor\" && (r || !Bt.call(e, n)) || t.push(n);\n return t;\n}\nfunction Ft(e) {\n return C(e) ? ge(e, !0) : Ut(e);\n}\nvar Nt = function() {\n return E.Date.now();\n};\nconst D = Nt;\nvar Dt = \"Expected a function\", Wt = Math.max, Lt = Math.min;\nfunction Rt(e, r, t) {\n var n, i, u, c, a, d, s = 0, m = !1, o = !1, l = !0;\n if (typeof e != \"function\")\n throw new TypeError(Dt);\n r = J(r) || 0, b(t) && (m = !!t.leading, o = \"maxWait\" in t, u = o ? Wt(J(t.maxWait) || 0, r) : u, l = \"trailing\" in t ? !!t.trailing : l);\n function g(p) {\n var y = n, $ = i;\n return n = i = void 0, s = p, c = e.apply($, y), c;\n }\n function v(p) {\n return s = p, a = setTimeout(T, r), m ? g(p) : c;\n }\n function h(p) {\n var y = p - d, $ = p - s, R = r - y;\n return o ? Lt(R, u - $) : R;\n }\n function w(p) {\n var y = p - d, $ = p - s;\n return d === void 0 || y >= r || y < 0 || o && $ >= u;\n }\n function T() {\n var p = D();\n if (w(p))\n return A(p);\n a = setTimeout(T, h(p));\n }\n function A(p) {\n return a = void 0, l && n ? g(p) : (n = i = void 0, c);\n }\n function B() {\n a !== void 0 && clearTimeout(a), s = 0, n = d = i = a = void 0;\n }\n function ye() {\n return a === void 0 ? c : A(D());\n }\n function U() {\n var p = D(), y = w(p);\n if (n = arguments, i = this, d = p, y) {\n if (a === void 0)\n return v(d);\n if (o)\n return clearTimeout(a), a = setTimeout(T, r), g(d);\n }\n return a === void 0 && (a = setTimeout(T, r)), c;\n }\n return U.cancel = B, U.flush = ye, U;\n}\nvar ve = Object.prototype, Kt = ve.hasOwnProperty, Gt = se(function(e, r) {\n e = Object(e);\n var t = -1, n = r.length, i = n > 2 ? r[2] : void 0;\n for (i && fe(r[0], r[1], i) && (n = 1); ++t < n; )\n for (var u = r[t], c = Ft(u), a = -1, d = c.length; ++a < d; ) {\n var s = c[a], m = e[s];\n (m === void 0 || W(m, ve[s]) && !Kt.call(e, s)) && (e[s] = u[s]);\n }\n return e;\n});\nconst Ht = Gt, qt = ({ images: e = [], options: r }) => {\n r = Mt(r, {\n inline: !1\n });\n const t = document.createElement(\"div\"), n = K(\n \"div\",\n {\n style: {\n display: \"none\"\n },\n class: [\"__viewer-token\"]\n },\n e.map((a) => K(\n \"img\",\n typeof a == \"string\" ? { src: a } : a\n ))\n );\n G(n, t);\n const i = t.firstElementChild;\n document.body.appendChild(i);\n const u = new _(i, r), c = u.destroy.bind(u);\n return u.destroy = function() {\n return c(), G(null, t), u;\n }, u.show(), i.addEventListener(\"hidden\", function() {\n this.viewer === u && u.destroy();\n }), u;\n}, Jt = ({ name: e = \"viewer\", debug: r = !1 } = {}) => {\n async function t(o, l, g = !1, v = !1) {\n await P(), !(v && !n(o)) && (g || !o[`$${e}`] ? (c(o), o[`$${e}`] = new _(o, l), s(\"Viewer created\")) : (o[`$${e}`].update(), s(\"Viewer updated\")));\n }\n function n(o) {\n const l = o.innerHTML.match(/<img([\\w\\W]+?)[\\\\/]?>/g), g = l ? l.join(\"\") : void 0;\n return o.__viewerImageDiffCache === g ? (s(\"Element change detected, but image(s) has not changed\"), !1) : (s(\"Image change detected\"), o.__viewerImageDiffCache = g, !0);\n }\n function i(o, l, g, v) {\n a(o);\n const h = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n if (!h) {\n s(\"Observer not supported\");\n return;\n }\n const w = new h((A) => {\n A.forEach((B) => {\n s(`Viewer mutation:${B.type}`), g(o, l, v, !0);\n });\n }), T = { attributes: !0, childList: !0, characterData: !0, subtree: !0 };\n w.observe(o, T), o.__viewerMutationObserver = w, s(\"Observer created\");\n }\n function u(o, l, g, v) {\n o.__viewerUnwatch = x(() => l.value, (h, w) => {\n s(\"Change detected by watcher: \", l.value), v(o, h, !0, !1);\n }, { deep: !0 }), s(\"Watcher created, expression: \", l.value);\n }\n function c(o) {\n !o[`$${e}`] || (o[`$${e}`].destroy(), delete o[`$${e}`], s(\"Viewer destroyed\"));\n }\n function a(o) {\n !o.__viewerMutationObserver || (o.__viewerMutationObserver.disconnect(), delete o.__viewerMutationObserver, s(\"observer destroyed\"));\n }\n function d(o) {\n !o.__viewerUnwatch || (o.__viewerUnwatch(), delete o.__viewerUnwatch, s(\"Watcher destroyed\"));\n }\n function s(...o) {\n r && console.log(...o);\n }\n return {\n mounted(o, l, g) {\n s(\"Viewer bind\");\n const v = Rt(t, 50);\n v(o, l.value), u(o, l, g, v), l.modifiers.static || i(o, l.value, v, l.modifiers.rebuild);\n },\n unmounted(o) {\n s(\"Viewer unbind\"), a(o), d(o), c(o);\n }\n };\n}, Xt = be({\n name: \"Viewer\",\n props: {\n images: {\n type: Array,\n default: () => []\n },\n rebuild: {\n type: Boolean,\n default: !1\n },\n trigger: {\n type: Object,\n default: null\n },\n options: {\n type: Object,\n default: () => null\n }\n },\n emits: [\"inited\"],\n setup(e, { emit: r }) {\n let t;\n const n = me();\n function i() {\n t = new _(n.value, e.options), r(\"inited\", t);\n }\n function u() {\n t && t.destroy();\n }\n function c() {\n u(), i();\n }\n function a() {\n t ? (t.update(), r(\"inited\", t)) : i();\n }\n function d() {\n e.rebuild ? c() : a();\n }\n const s = { deep: !0 };\n return x(() => e.images, () => {\n P(() => {\n d();\n });\n }, s), x(() => e.trigger, () => {\n P(() => {\n d();\n });\n }, s), x(() => e.options, () => {\n P(() => {\n c();\n });\n }, s), he(() => i()), we(() => u()), {\n root: n,\n createViewer: i,\n rebuildViewer: c,\n updateViewer: a,\n destroyViewer: u\n };\n }\n}), zt = (e, r) => {\n const t = e.__vccOpts || e;\n for (const [n, i] of r)\n t[n] = i;\n return t;\n}, Qt = { ref: \"root\" };\nfunction Yt(e, r, t, n, i, u) {\n return Te(), $e(\"div\", Qt, [\n Oe(e.$slots, \"default\", {\n images: e.images,\n options: e.options\n })\n ], 512);\n}\nconst Zt = /* @__PURE__ */ zt(Xt, [[\"render\", Yt]]), rn = {\n install(e, { name: r = \"viewer\", debug: t = !1, defaultOptions: n } = {}) {\n n && _.setDefaults(n), e.config.globalProperties[`$${r}Api`] = qt, e.component(r, Ht(Zt, { name: r })), e.directive(r, Jt({ name: r, debug: t }));\n },\n setDefaults(e) {\n _.setDefaults(e);\n }\n};\nexport {\n on as Viewer,\n qt as api,\n Zt as component,\n rn as default,\n Jt as directive\n};\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 25 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10.3193 16.5L14.8193 12L10.3193 7.5\"\r\n stroke=\"currentColor\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script setup></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <div\r\n :class=\"{ dishes_box: true, is_open: isOpen }\"\r\n :style=\"{ height: panelHeight }\"\r\n >\r\n <div class=\"dishes_wrap\" @click.stop=\"switchOpen\">\r\n <img\r\n class=\"img\"\r\n :src=\"info.primaryImgUrl\"\r\n alt=\"img\"\r\n @click.stop=\"previewImg(info.primaryImgUrl)\"\r\n />\r\n <div>\r\n <div class=\"name\">\r\n <span>{{ info.skuname }}</span>\r\n <span>×1</span>\r\n </div>\r\n <div class=\"sub\">{{ subStr }}</div>\r\n </div>\r\n </div>\r\n <div v-if=\"hasDetails\" class=\"dishes_details\" ref=\"contentRef\">\r\n <div v-show=\"!isOpen\" class=\"switch_open\" @click.stop=\"switchOpen\">\r\n <span>查看菜谱详情</span><arrow-right class=\"icon\" />\r\n </div>\r\n <div class=\"title\">制作工艺</div>\r\n <div v-if=\"makeCraft.makeVideosUrl\">\r\n <video :src=\"makeCraft.makeVideosUrl\" width=\"100%\" controls=\"true\" />\r\n </div>\r\n <img :src=\"makeCraft.craftUrl\" width=\"100%\" alt=\"craft\" />\r\n <!-- <div class=\"tips\">\r\n <span class=\"star\">*</span\r\n >一份的量偏小不便制作,因而基于3份的量来介绍,食用时取一份即可\r\n </div>\r\n <div class=\"title\">食材</div>\r\n <div class=\"text\">\r\n {{ materialText }}\r\n </div>\r\n <div class=\"title\">制作工艺</div>\r\n <div v-if=\"makeCraft.makeVideosUrl\">\r\n <video :src=\"makeCraft.makeVideosUrl\" width=\"100%\" controls=\"true\" />\r\n </div>\r\n <div\r\n v-for=\"(item, index) in makeCraft.makeCraftList\"\r\n :key=\"index\"\r\n class=\"step_row\"\r\n >\r\n <div class=\"step_item\">\r\n <div class=\"num\">第{{ index + 1 }}步</div>\r\n <div class=\"desc\">{{ item.content }}</div>\r\n </div>\r\n <div>\r\n <img\r\n v-for=\"(img, index) in getImageList(item.craftImg)\"\r\n :key=\"index\"\r\n :src=\"img\"\r\n width=\"100%\"\r\n alt=\"step image\"\r\n />\r\n </div>\r\n </div>-->\r\n <div class=\"collapse_btn\" @click.stop=\"isOpen = false\">收起</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, inject, nextTick, onMounted, ref } from 'vue';\r\nimport { api as viewerApi } from 'v-viewer';\r\nimport 'viewerjs/dist/viewer.css';\r\nimport ArrowRight from './icons/ArrowRight.vue';\r\nimport { post } from '../utils/request.js';\r\n\r\nconst props = defineProps({\r\n info: {\r\n type: Object,\r\n required: true,\r\n },\r\n defMsg: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n open: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n});\r\nconst isOpen = ref(props.open);\r\nconst contentRef = ref(null); // 用于引用内容 DOM 元素\r\nconst contentHeight = ref(0); // 存储内容的实际高度\r\nconst makeCraft = ref([]);\r\n\r\nonMounted(async () => {\r\n if (isOpen.value) {\r\n await querySkuMakeCraft();\r\n await getContentHeight();\r\n setTimeout(() => {\r\n scrollToEnd();\r\n }, 200);\r\n }\r\n});\r\n\r\nconst scrollToEnd = inject('triggerScrollToEnd');\r\nconst getContentHeight = () => {\r\n return new Promise(async (resolve) => {\r\n await nextTick();\r\n const imgList = [];\r\n if (\r\n makeCraft.value.hasOwnProperty('craftUrl') &&\r\n makeCraft.value.craftUrl\r\n ) {\r\n // makeCraft.value?.makeCraftList.forEach((item) => {\r\n // const imgs = getImageList(item.craftImg);\r\n // imgList.push(...imgs);\r\n // });\r\n imgList.push(makeCraft.value.craftUrl);\r\n }\r\n if (imgList.length) {\r\n await preloadImages(imgList);\r\n await nextTick();\r\n contentHeight.value = hasDetails.value\r\n ? contentRef.value.scrollHeight\r\n : 0;\r\n if (isOpen.value) {\r\n contentHeight.value += 26;\r\n }\r\n\r\n isOpen.value = true;\r\n } else {\r\n isOpen.value = false;\r\n }\r\n\r\n resolve();\r\n });\r\n};\r\n\r\nconst preloadImages = (urls) => {\r\n const promises = [];\r\n urls.forEach((url) => {\r\n const img = new Image();\r\n const promise = new Promise((resolve, reject) => {\r\n img.onload = () => resolve(img);\r\n img.onerror = () => reject(new Error(`加载${url}失败`));\r\n img.src = url;\r\n });\r\n promises.push(promise);\r\n });\r\n return Promise.all(promises);\r\n};\r\n// const Emits = defineEmits(['update:open']);\r\n\r\nconst subStr = computed(() => {\r\n return `${props.defMsg.energy}${props.info.energy}kcal,${props.defMsg.protein}${props.info.protein}g,${props.defMsg.fat}${props.info.fat}g,${props.defMsg.carbonwater}${props.info.carbonwater}g`;\r\n});\r\nconst materialText = computed(() => {\r\n const list = props.info?.makeMaterialList?.map(\r\n (item) => item.material + item.usage + 'g',\r\n );\r\n return (list || []).join('、');\r\n});\r\nconst hasDetails = computed(() => {\r\n return props.info.hasOwnProperty('cid') && props.info.cid;\r\n});\r\nconst panelHeight = computed(() => {\r\n let h = '92px';\r\n if (hasDetails.value) {\r\n h = isOpen.value ? contentHeight.value + 66 + 'px' : '118px';\r\n }\r\n return h;\r\n});\r\n\r\nconst previewImg = (url) => {\r\n viewerApi({\r\n images: [url],\r\n });\r\n};\r\n\r\nconst switchOpen = async () => {\r\n if (!isOpen.value) {\r\n await querySkuMakeCraft();\r\n getContentHeight();\r\n } else {\r\n isOpen.value = false;\r\n }\r\n};\r\n\r\nconst getImageList = (str) => {\r\n let list = [];\r\n try {\r\n list = JSON.parse(str);\r\n } catch (e) {\r\n console.warn('====== get image list error =======', e);\r\n }\r\n\r\n return list;\r\n};\r\n\r\nconst querySkuMakeCraft = async () => {\r\n if (\r\n !(\r\n makeCraft.value.hasOwnProperty('makeCraftList') &&\r\n makeCraft.value.hasOwnProperty('makeMaterialList')\r\n )\r\n ) {\r\n const res = await post('/api/cn.weis.api.Food/makeCraft', {\r\n method: 'makeCraft',\r\n params: [{ cid: props.info.cid }],\r\n token: localStorage.getItem('postToken'),\r\n });\r\n if (res.errCode === 0 && res.obj) {\r\n makeCraft.value = { ...res.obj };\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n@import '../assets/styles/public';\r\n\r\n.dishes {\r\n &_details {\r\n padding: 1px 10px;\r\n\r\n .switch_open {\r\n .flexrec();\r\n cursor: pointer;\r\n height: 26px;\r\n line-height: 26px;\r\n font-size: 10px;\r\n color: #666;\r\n .icon {\r\n font-size: 18px;\r\n }\r\n }\r\n .tips {\r\n vertical-align: middle;\r\n font-size: 13px;\r\n font-weight: 400;\r\n margin-top: 10px;\r\n .star {\r\n color: #ff0000;\r\n vertical-align: middle;\r\n margin-right: 0.4em;\r\n }\r\n }\r\n .title {\r\n font-weight: 600;\r\n font-size: 15px;\r\n color: #000;\r\n margin: 15px 0;\r\n }\r\n .text {\r\n font-weight: 400;\r\n font-size: 13px;\r\n color: #000;\r\n }\r\n .step {\r\n &_row {\r\n margin-bottom: 15px;\r\n }\r\n &_item {\r\n .flexrss();\r\n .num {\r\n width: 4em;\r\n color: #666;\r\n font-size: 13px;\r\n }\r\n .desc {\r\n flex: 1;\r\n font-size: 13px;\r\n color: #000;\r\n }\r\n }\r\n }\r\n .line {\r\n margin: 5px 0;\r\n border-bottom: 1px solid #fff;\r\n }\r\n .data {\r\n &_row {\r\n .flexrsc();\r\n gap: 10px;\r\n }\r\n &_item {\r\n .flexrsc();\r\n flex: 1;\r\n gap: 10px;\r\n line-height: 26px;\r\n .label {\r\n width: 72px;\r\n font-weight: 400;\r\n font-size: 13px;\r\n color: #666;\r\n }\r\n .content {\r\n flex: 1;\r\n width: 60px;\r\n font-weight: 400;\r\n font-size: 13px;\r\n color: #000;\r\n }\r\n }\r\n }\r\n .tag {\r\n padding: 0 15px;\r\n background-color: #fff;\r\n border-radius: 15px;\r\n line-height: 30px;\r\n font-weight: 400;\r\n font-size: 13px;\r\n color: #000;\r\n &_box {\r\n .flexrsc();\r\n gap: 10px;\r\n }\r\n }\r\n .collapse_btn {\r\n width: 100px;\r\n height: 32px;\r\n line-height: 32px;\r\n text-align: center;\r\n border-radius: 10px 10px 0 0;\r\n background-color: #e2e2e2;\r\n color: #999;\r\n margin: 20px auto 0;\r\n }\r\n }\r\n &_box {\r\n transition: height 100ms ease-in-out;\r\n height: 92px;\r\n background-color: #ededed;\r\n border-radius: 10px;\r\n margin: 10px 0;\r\n overflow: hidden;\r\n &.is_open {\r\n //height: auto;\r\n }\r\n }\r\n &_wrap {\r\n display: grid;\r\n grid-template-columns: 72px 1fr;\r\n grid-column-gap: 10px;\r\n background-color: @bg-color;\r\n border-radius: 10px;\r\n padding: 10px;\r\n box-sizing: border-box;\r\n min-height: 92px;\r\n\r\n .img {\r\n cursor: pointer;\r\n width: 100%;\r\n border-radius: 8px;\r\n }\r\n .name {\r\n .flexrbs();\r\n font-weight: 600;\r\n font-size: 14px;\r\n color: #000;\r\n line-height: 16px;\r\n }\r\n .sub {\r\n margin-top: 10px;\r\n font-weight: 400;\r\n font-size: 10px;\r\n color: #666;\r\n line-height: 12px;\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"dl_wrap\">\r\n <div class=\"dl_list\" :class=\"{ show_full: showFull }\">\r\n <template v-for=\"(cate, cIdx) in skuList\" :key=\"cate.category\">\r\n <div v-if=\"showDate(cIdx)\">\r\n <div v-if=\"cIdx > 0\" class=\"sep_line\"></div>\r\n <div class=\"date\">\r\n {{ cate.strDate.slice(4, 6) }}月{{ cate.strDate.slice(6) }}日\r\n </div>\r\n </div>\r\n <div v-if=\"cate.list && cate.list.length\" style=\"padding: 15px 0\">\r\n <p class=\"title\">\r\n {{ cate.categoryType }} {{ categoryEnergy(cate) }}kcal\r\n </p>\r\n <div>\r\n <template v-for=\"dList in cate.list\" :key=\"dList.id\">\r\n <dishes-card\r\n v-for=\"(info, idx) in dList.getCategoryList\"\r\n :key=\"idx\"\r\n :info=\"info\"\r\n :def-msg=\"defMsg\"\r\n :open=\"handleIsOpen(info, cate.category)\"\r\n />\r\n </template>\r\n </div>\r\n </div>\r\n </template>\r\n </div>\r\n <div\r\n class=\"dl_full\"\r\n :class=\"{ show_full: showFull }\"\r\n @click=\"showFull = !showFull\"\r\n >\r\n {{ showFull ? '收起菜谱' : '点击查看完整食谱' }}\r\n </div>\r\n <div\r\n v-if=\"isMini\"\r\n style=\"font-size: 10px; line-height: 16px; color: #f16868\"\r\n >\r\n 温馨提示:维小饭AI健康食谱为日常膳食调理方案,不能替代药物治疗或专业医疗建议。如有疾病,请及时就医并遵医嘱。<br />\r\n <strong>半价惊喜,下单即得!</strong>\r\n </div>\r\n <div v-if=\"isMini\" class=\"btn_group\">\r\n <div class=\"btn btn_1\" @click.stop=\"handleBtn('personalForm')\">\r\n <span class=\"name\">私人定制个性食谱</span>\r\n </div>\r\n <div class=\"btn btn_2\" @click.stop=\"handleBtn('ship_order')\">\r\n <span class=\"name\">去订餐</span>\r\n </div>\r\n </div>\r\n <div v-else class=\"btn_group\">\r\n <div\r\n v-if=\"channel !== 'hft'\"\r\n class=\"btn btn_1\"\r\n @click.stop=\"handleBtn('ship_order')\"\r\n >\r\n <span class=\"name\">配送下單</span>\r\n <span class=\"sub\">(直送到府)</span>\r\n </div>\r\n <div class=\"btn btn_2\" @click.stop=\"handleBtn('pick_order')\">\r\n <span class=\"name\">自提下單</span>\r\n <span class=\"sub\">(免運費)</span>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport DishesCard from './DishesCard.vue';\r\nimport { ref } from 'vue';\r\n\r\nconst props = defineProps({\r\n skuList: {\r\n type: Array,\r\n required: true,\r\n default: () => [],\r\n },\r\n isMini: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n channel: {\r\n type: String,\r\n default: 'web',\r\n },\r\n defMsg: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n});\r\nconst Emits = defineEmits(['select']);\r\nconst openSts = ref(false);\r\nconst showFull = ref(false);\r\nconst handleIsOpen = (info, category) => {\r\n return false;\r\n // if (openSts.value) {\r\n // return false;\r\n // } else if (category !== '01' && info.hasOwnProperty('cid') && info.cid) {\r\n // console.log('=== 6666 ===', info);\r\n // openSts.value = true;\r\n // return true;\r\n // } else {\r\n // return false;\r\n // }\r\n};\r\nconst categoryEnergy = (cate) => {\r\n let energy = 0;\r\n (cate?.list || []).forEach((list) => {\r\n (list?.getCategoryList || []).forEach((item) => {\r\n energy += item.energy || 0;\r\n });\r\n });\r\n return energy;\r\n};\r\nconst showDate = (idx) => {\r\n return (\r\n props.skuList\r\n .slice(0, idx)\r\n .findIndex((item) => item.strDate === props.skuList[idx].strDate) === -1\r\n );\r\n};\r\n\r\nconst handleBtn = (type) => {\r\n Emits('select', { type });\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n@import '../assets/styles/public';\r\n\r\n.dl {\r\n &_wrap {\r\n max-width: 320px;\r\n\r\n .sep_line {\r\n border-top: 1px solid #d9d9d9;\r\n margin: 20px auto;\r\n }\r\n .title {\r\n font-size: 16px;\r\n font-weight: bold;\r\n margin: 0;\r\n }\r\n .date {\r\n .title();\r\n margin: 15px auto 0;\r\n }\r\n .btn {\r\n .flexccc();\r\n cursor: pointer;\r\n width: 100%;\r\n height: 40px;\r\n border-radius: 19px;\r\n text-align: center;\r\n color: @primary-color;\r\n border: 1px solid @primary-color;\r\n background-color: #fff;\r\n .name {\r\n font-weight: 600;\r\n font-size: 14px;\r\n line-height: 18px;\r\n }\r\n .sub {\r\n font-weight: 400;\r\n font-size: 8px;\r\n line-height: 10px;\r\n }\r\n &_2 {\r\n color: #fff;\r\n background-color: @primary-color;\r\n }\r\n &_group {\r\n .flexrbc();\r\n gap: 10px;\r\n margin-top: 20px;\r\n }\r\n }\r\n }\r\n &_list {\r\n height: 384px;\r\n overflow: hidden;\r\n\r\n &.show_full {\r\n height: auto;\r\n overflow: initial;\r\n }\r\n }\r\n &_full {\r\n .flexrcc();\r\n cursor: pointer;\r\n width: 325px;\r\n height: 38px;\r\n line-height: 38px;\r\n margin: 10px 0;\r\n background: #fff;\r\n border-radius: 10px;\r\n text-align: center;\r\n font-weight: 400;\r\n font-size: 13px;\r\n color: #333;\r\n\r\n &::after {\r\n content: '';\r\n display: inline-block;\r\n width: 14px;\r\n height: 14px;\r\n background: url('https://prodstatic.weis1606.cn/api/smartFood/icon/arrow_left.svg')\r\n center / contain no-repeat;\r\n }\r\n\r\n &.show_full {\r\n &::after {\r\n transform: rotate(-90deg);\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"card\" style=\"margin-top: 15px\">\r\n <div class=\"row\">\r\n <div class=\"name\">每日攝入能量</div>\r\n <div class=\"content\">{{ info.totalIntake }} kcal</div>\r\n </div>\r\n </div>\r\n <div v-for=\"cate in info.planDetailList\" :key=\"category\" class=\"card\">\r\n <div class=\"title\">{{ textMap[cate.category] }}</div>\r\n <div class=\"row\">\r\n <div class=\"name\">{{ textMap[cate.category] }}熱量</div>\r\n <div class=\"content\">{{ cate.totalKcal }} kcal</div>\r\n </div>\r\n <div class=\"sep\" />\r\n <div class=\"row\">\r\n <div class=\"name\">{{ textMap.carbohydrateTotal }}</div>\r\n <div class=\"content\">{{ cate.carbohydrateTotal }} g</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"name\">{{ textMap.proteinTotal }}</div>\r\n <div class=\"content\">{{ cate.proteinTotal }} g</div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"name\">{{ textMap.fatTotal }}</div>\r\n <div class=\"content\">{{ cate.fatTotal }} g</div>\r\n </div>\r\n </div>\r\n <div class=\"btn_group\">\r\n <div class=\"btn btn_2\" @click.stop=\"handleSel\">用該方案配餐</div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nconst textMap = {\r\n '01': '早餐',\r\n '02': '午餐',\r\n '03': '晚餐',\r\n '04': '加餐',\r\n carbohydrateTotal: '碳水化合物',\r\n proteinTotal: '蛋白質',\r\n fatTotal: '脂肪',\r\n};\r\n\r\nconst props = defineProps({\r\n info: {\r\n type: Object,\r\n required: true,\r\n },\r\n defMsg: {\r\n type: Object,\r\n required: true,\r\n },\r\n});\r\nconst Emits = defineEmits(['select']);\r\nconst handleSel = () => {\r\n Emits('select', {});\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.card {\r\n padding: 10px 15px;\r\n margin-bottom: 10px;\r\n background-color: #fff;\r\n border-radius: 10px;\r\n .title {\r\n font-size: 14px;\r\n font-weight: 600;\r\n line-height: 24px;\r\n }\r\n .row {\r\n .flexrbc();\r\n margin: 10px 0;\r\n }\r\n .sep {\r\n border-bottom: 1px solid #ddd;\r\n }\r\n .name {\r\n font-weight: 400;\r\n font-size: 14px;\r\n color: #666;\r\n line-height: 24px;\r\n }\r\n .content {\r\n .name();\r\n color: #000;\r\n font-weight: 600;\r\n }\r\n}\r\n.btn {\r\n cursor: pointer;\r\n width: 100%;\r\n height: 38px;\r\n line-height: 38px;\r\n background-color: #e6f5eb;\r\n border-radius: 19px;\r\n text-align: center;\r\n font-weight: 600;\r\n font-size: 13px;\r\n color: #039938;\r\n\r\n &_2 {\r\n color: #fff;\r\n background-color: #039938;\r\n }\r\n\r\n &_group {\r\n display: grid;\r\n grid-template-columns: 1fr;\r\n grid-column-gap: 10px;\r\n margin-top: 20px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M5.75335 4.13651C5.8677 3.70974 6.31858 3.36377 6.76041 3.36377C7.20223 3.36377 7.4677 3.70974 7.35335 4.13651L7.14629 4.90928L10.3463 4.90928L10.5533 4.13651C10.6677 3.70974 11.1186 3.36377 11.5604 3.36377C12.0022 3.36377 12.2677 3.70974 12.1533 4.13651L11.9463 4.90928H12.8282C13.2701 4.90928 13.5355 5.25525 13.4212 5.68202C13.3068 6.10879 12.8559 6.45476 12.4141 6.45476H11.5322L10.704 9.54561H11.5859C12.0277 9.54561 12.2932 9.89157 12.1788 10.3183C12.0645 10.7451 11.6136 11.0911 11.1718 11.0911H10.2899L10.0828 11.8639C9.96844 12.2907 9.51757 12.6367 9.07574 12.6367C8.63391 12.6367 8.36844 12.2907 8.4828 11.8639L8.68988 11.0911L5.48986 11.0911L5.28278 11.8639C5.16843 12.2907 4.71756 12.6367 4.27573 12.6367C3.8339 12.6367 3.56843 12.2907 3.68278 11.8639L3.88986 11.0911H3.17178C2.72995 11.0911 2.46448 10.7451 2.57884 10.3183C2.69319 9.89157 3.14407 9.54561 3.58589 9.54561H4.30397L4.67327 8.16737C4.78763 7.7406 5.2385 7.39463 5.68033 7.39463C6.12215 7.39463 6.38763 7.7406 6.27327 8.16737L5.90398 9.54561L9.10399 9.54561L9.93218 6.45476L4.41412 6.45476C3.97229 6.45476 3.70682 6.10879 3.82117 5.68202C3.93553 5.25524 4.3864 4.90928 4.82823 4.90928H5.54629L5.75335 4.13651Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M2.875 6C2.875 4.34315 4.21815 3 5.875 3H19.875C21.5319 3 22.875 4.34315 22.875 6V18C22.875 19.6569 21.5319 21 19.875 21H5.875C4.21815 21 2.875 19.6569 2.875 18V6ZM5.875 5C5.32272 5 4.875 5.44772 4.875 6V16.0852L10.475 11.8852C11.8972 10.8185 13.8528 10.8185 15.275 11.8852L20.875 16.0852V6C20.875 5.44772 20.4273 5 19.875 5H5.875ZM8.28442 10.0852C9.11285 10.0852 9.78442 9.41363 9.78442 8.58521C9.78442 7.75678 9.11285 7.08521 8.28442 7.08521C7.456 7.08521 6.78442 7.75678 6.78442 8.58521C6.78442 9.41363 7.456 10.0852 8.28442 10.0852Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'pictureIcon',\r\n};\r\n</script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M18.0849 10.6565C19.9734 8.76795 19.9734 5.70607 18.0849 3.81756C16.1964 1.92905 13.1345 1.92905 11.246 3.81756L5.05399 10.0096C2.55177 12.5118 2.55177 16.5687 5.05399 19.0709C7.55622 21.5732 11.6131 21.5732 14.1154 19.0709L20.2421 12.9442C20.6326 12.5537 20.6326 11.9205 20.2421 11.53C19.8516 11.1394 19.2184 11.1394 18.8279 11.53L12.7011 17.6567C10.98 19.3779 8.18938 19.3779 6.46821 17.6567C4.74703 15.9355 4.74703 13.145 6.4682 11.4238L12.6602 5.23178C13.7677 4.12431 15.5632 4.12431 16.6707 5.23178C17.7781 6.33924 17.7781 8.13478 16.6707 9.24224L10.5401 15.3729C10.0481 15.8648 9.25051 15.8648 8.75856 15.3729C8.26661 14.8809 8.26661 14.0833 8.75856 13.5913L13.9435 8.40645C14.334 8.01592 14.334 7.38276 13.9435 6.99223C13.5529 6.60171 12.9198 6.60171 12.5292 6.99223L7.34435 12.1771C6.07135 13.4501 6.07135 15.5141 7.34435 16.7871C8.61735 18.0601 10.6813 18.0601 11.9543 16.7871L18.0849 10.6565Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n :width=\"size\"\r\n :height=\"size\"\r\n viewBox=\"0 0 100 100\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <!-- 绘制底层浅色圆环 -->\r\n <circle\r\n cx=\"50\"\r\n cy=\"50\"\r\n r=\"45\"\r\n fill=\"none\"\r\n :stroke=\"bgColor\"\r\n stroke-width=\"8\"\r\n />\r\n <!-- 绘制上层白色圆弧(带圆角端点) -->\r\n <path\r\n id=\"progressPath\"\r\n d=\"M 50 5\r\n a 45 45 0 1 1 0 90\r\n a 45 45 0 1 1 0 -90\"\r\n fill=\"none\"\r\n :stroke=\"color\"\r\n stroke-width=\"10\"\r\n stroke-linecap=\"round\"\r\n :stroke-dasharray=\"num.l\"\r\n :stroke-dashoffset=\"num.p\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed } from 'vue';\r\n\r\nconst props = defineProps({\r\n percent: {\r\n type: Number,\r\n default: 75,\r\n },\r\n size: {\r\n type: Number,\r\n default: 48,\r\n },\r\n color: {\r\n type: String,\r\n default: '#fff',\r\n },\r\n bgColor: {\r\n type: String,\r\n default: '#888',\r\n },\r\n});\r\n\r\nconst num = computed(() => {\r\n return {\r\n l: 2 * Math.PI * 45,\r\n p: (2 * Math.PI * 45 * (100 - props.percent)) / 100,\r\n };\r\n});\r\n</script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M13.5 4.5C13.5 3.67157 12.8284 3 12 3C11.1716 3 10.5 3.67157 10.5 4.5L10.5 10.5H4.5C3.67157 10.5 3 11.1716 3 12C3 12.8284 3.67157 13.5 4.5 13.5H10.5L10.5 19.5C10.5 20.3284 11.1716 21 12 21C12.8284 21 13.5 20.3284 13.5 19.5V13.5H19.5C20.3284 13.5 21 12.8284 21 12C21 11.1716 20.3284 10.5 19.5 10.5H13.5V4.5Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"15\"\r\n height=\"15\"\r\n rx=\"7.5\"\r\n fill=\"black\"\r\n fill-opacity=\"0.5\"\r\n />\r\n <rect\r\n x=\"0.5\"\r\n y=\"0.5\"\r\n width=\"15\"\r\n height=\"15\"\r\n rx=\"7.5\"\r\n stroke=\"currentColor\"\r\n />\r\n <path\r\n d=\"M10.8284 6.58588C11.2189 6.19535 11.2189 5.56219 10.8284 5.17167C10.4379 4.78114 9.80471 4.78114 9.41419 5.17167L8 6.58586L6.58581 5.17167C6.19529 4.78114 5.56212 4.78114 5.1716 5.17167C4.78107 5.56219 4.78107 6.19535 5.1716 6.58588L6.58579 8.00007L5.17155 9.41431C4.78103 9.80483 4.78103 10.438 5.17155 10.8285C5.56207 11.219 6.19524 11.219 6.58576 10.8285L8 9.41428L9.41424 10.8285C9.80476 11.219 10.4379 11.219 10.8285 10.8285C11.219 10.438 11.219 9.80483 10.8285 9.41431L9.41421 8.00007L10.8284 6.58588Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 33 32\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M21 7.64355C21 7.09127 21.4477 6.64355 22 6.64355C22.5523 6.64355 23 7.09127 23 7.64355V9.64355H25C25.5523 9.64355 26 10.0913 26 10.6436C26 11.1958 25.5523 11.6436 25 11.6436H23V13.6436C23 14.1958 22.5523 14.6436 22 14.6436C21.4477 14.6436 21 14.1958 21 13.6436V11.6436H19C18.4477 11.6436 18 11.1958 18 10.6436C18 10.0913 18.4477 9.64355 19 9.64355H21V7.64355ZM9 10.6436C9 10.0913 9.44772 9.64355 10 9.64355H16.164C16.7162 9.64355 17.164 9.19584 17.164 8.64355C17.164 8.09127 16.7162 7.64355 16.164 7.64355H10C8.34315 7.64355 7 8.9867 7 10.6436V22.8527C7 24.7723 9.0737 25.9757 10.7403 25.0233L15.035 22.5693C15.1861 22.4829 15.3571 22.4375 15.5311 22.4375H22C23.6569 22.4375 25 21.0944 25 19.4375V16.32C25 15.7677 24.5523 15.32 24 15.32C23.4477 15.32 23 15.7677 23 16.32V19.4375C23 19.9898 22.5523 20.4375 22 20.4375H15.5311C15.009 20.4375 14.496 20.5737 14.0427 20.8328L9.74807 23.2869C9.41474 23.4773 9 23.2366 9 22.8527V10.6436Z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\"></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <div class=\"om_wrap\">\r\n <div class=\"om_quick\">\r\n <div\r\n class=\"tag\"\r\n v-for=\"item in tagList\"\r\n :key=\"item.value\"\r\n @click.stop=\"handleTag(item)\"\r\n >\r\n <tag-icon class=\"icon\" />\r\n {{ item.name }}\r\n </div>\r\n </div>\r\n <div class=\"om_operate_box\">\r\n <div v-if=\"newChat\" class=\"new_chat\" @click.stop=\"newChatFunc\">\r\n <new-chat />\r\n </div>\r\n <div class=\"om_operate_wrap\">\r\n <div class=\"file_list_box\" :class=\"{ hidden: !uploadPlane }\">\r\n <div class=\"file_list\">\r\n <div\r\n v-for=\"(item, index) in uFileList\"\r\n :key=\"index\"\r\n class=\"file_card\"\r\n >\r\n <img v-if=\"(item.file_type).toLocaleLowerCase().includes('pdf')\" class=\"pdf\" :src=\"pdfIcon\" width=\"100%\" alt=\"img\" />\r\n <img v-else class=\"img\" :src=\"item.file_url\" width=\"100%\" alt=\"img\" />\r\n <div v-if=\"item.percent < 100\" class=\"process\">\r\n <progress-ring :percent=\"item.percent\" />\r\n </div>\r\n <close-border-icon\r\n v-else\r\n class=\"close\"\r\n @click.stop=\"clearFile(index)\"\r\n />\r\n </div>\r\n <div\r\n v-if=\"uFileList.length < 4\"\r\n class=\"file_add\"\r\n @click.stop=\"triggerUploadInput\"\r\n >\r\n <add-icon />\r\n </div>\r\n <div class=\"file_close\" @click.stop=\"closeUpload\">\r\n <close-icon />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"om_operate\">\r\n <textarea\r\n v-model=\"textValue\"\r\n ref=\"txtEle\"\r\n class=\"input\"\r\n rows=\"1\"\r\n :placeholder=\"defMsg.placeholder\"\r\n @input=\"handleInput\"\r\n @keyup.enter=\"sendMsg\"\r\n @focus=\"handleFocus\"\r\n @blur=\"handleBlur\"\r\n />\r\n <div class=\"btn_group\">\r\n <div class=\"btn\" @click.stop=\"sendMsg\">\r\n <send-icon v-if=\"isReq === '00'\" :style=\"{ color: textValue ? '#039938' : '#ccc' }\" />\r\n <send-loading-icon v-else\r\n :bg=\"loadingBtnInfo.bg\"\r\n :color=\"loadingBtnInfo.color\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"om_extra\" style=\"display: none\">\r\n <input\r\n ref=\"captureInput\"\r\n type=\"file\"\r\n accept=\"image/*\"\r\n capture=\"environment\"\r\n style=\"display: none\"\r\n @change=\"handleFile\"\r\n />\r\n\r\n <input\r\n ref=\"uploadInput\"\r\n type=\"file\"\r\n accept=\"image/*,application/pdf\"\r\n style=\"display: none\"\r\n @change=\"handleFileChange\"\r\n />\r\n <div\r\n v-for=\"card in extraList\"\r\n :key=\"card.type\"\r\n class=\"card\"\r\n @click.stop=\"triggerUploadInput\"\r\n >\r\n <div class=\"icon\">\r\n <component :is=\"card.icon\" />\r\n </div>\r\n <div class=\"text\">{{ card.name }}</div>\r\n </div>\r\n <progress-ring :percent=\"15\" />\r\n </div>\r\n <div class=\"om_ai_tips\">{{ defMsg.aiTips}}</div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport TagIcon from './icons/tagIcon.vue';\r\nimport SendIcon from './icons/SendIcon.vue';\r\nimport { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue';\r\nimport CameraIcon from './icons/cameraIcon.vue';\r\nimport PictureIcon from './icons/pictureIcon.vue';\r\nimport FileIcon from './icons/fileIcon.vue';\r\nimport ProgressRing from './icons/progressRing.vue';\r\nimport AddIcon from './icons/addIcon.vue';\r\nimport CloseBorderIcon from './icons/closeBorderIcon.vue';\r\nimport CloseIcon from './icons/CloseIcon.vue';\r\nimport NewChat from './icons/newChat.vue';\r\nimport SendLoadingIcon from \"./icons/sendLoadingIcon.vue\";\r\nconst pdfIcon = 'https://prodstatic.weis1606.cn/api/smartFood/icon/pdf_icon.png';\r\nconst extraList = [\r\n // { name: '相機', icon: CameraIcon, type: 'camera' },\r\n { name: '相冊', icon: PictureIcon, type: 'photo' },\r\n { name: '文件', icon: FileIcon, type: 'file' },\r\n];\r\n\r\nconst txtEle = ref(null);\r\nconst uploadInput = ref(null);\r\nconst captureInput = ref(null);\r\nconst uploadPlane = ref(false);\r\n\r\nconst uFileList = ref([]);\r\nconst props = defineProps({\r\n modelValue: {\r\n type: String,\r\n default: '',\r\n },\r\n token: {\r\n type: String,\r\n required: true,\r\n },\r\n tagList: {\r\n type: Array,\r\n required: true,\r\n },\r\n newChat: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n defMsg: {\r\n type: Object,\r\n required: true,\r\n },\r\n isReq:{\r\n type: String,\r\n default: '00'\r\n }\r\n});\r\nconst Emits = defineEmits(['update:modelValue', 'send', 'tag', 'call']);\r\n\r\nconst fetchOptions = computed(() => {\r\n return {\r\n headers: {\r\n Authorization: `Bearer ${props.token}`,\r\n 'Content-Type': 'multipart/form-data',\r\n },\r\n };\r\n});\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n resizeTextarea();\r\n },\r\n);\r\n\r\n/*\r\n* 00: 初始值;\r\n* 01: 已传达;\r\n* 02: 已发送;\r\n* 03:已接收;\r\n* 04: 读取中;\r\n* */\r\nconst loadingBtnInfo = computed(() => {\r\n switch (props.isReq) {\r\n case '01':\r\n return { bg: '#fff', color: '#ccc'};\r\n case '02':\r\n return { bg: '#666', color: '#CDEBD7'};\r\n case '03':\r\n return { bg: '#ccc', color: '#fff'};\r\n case '04':\r\n return { bg: '#E5F4EB', color: '#fff'};\r\n }\r\n})\r\n\r\nconst textValue = computed({\r\n get: () => {\r\n return props.modelValue;\r\n },\r\n set: (val) => {\r\n Emits('update:modelValue', val);\r\n resizeTextarea();\r\n },\r\n});\r\n\r\nonMounted(() => {\r\n resizeTextarea();\r\n});\r\nonUnmounted(() => {\r\n if (txtEle.value) {\r\n txtEle.value.style.height = 'auto'; // 恢复默认高度\r\n }\r\n});\r\n\r\nconst handleInput = (event) => {\r\n textValue.value = event.target.value.replace(/^\\n+|\\n+$/g, '');\r\n};\r\nconst handleTag = (info) => {\r\n if (info.type === 'upload') {\r\n showUpload();\r\n } else {\r\n Emits('tag', { ...info });\r\n }\r\n};\r\nconst sendMsg = () => {\r\n if (!textValue.value) {\r\n return;\r\n }\r\n if (\r\n uFileList.value.length &&\r\n uFileList.value.findIndex((f) => f.percent < 100) > -1\r\n ) {\r\n Emits('call', {\r\n message: props.defMsg.uploadingTips,\r\n reason: 'is_uploading',\r\n value: 'toast',\r\n type: 'call',\r\n });\r\n return;\r\n }\r\n const list = [{ content: textValue.value, text: textValue.value }];\r\n console.log(\"====== u file list =======\", uFileList.value);\r\n if (uFileList.value.length) {\r\n list.push({\r\n type: 'object_string',\r\n content: uFileList.value.map((file) => ({\r\n type: handleMsgType(file.file_type),\r\n name: file.file.name,\r\n file_id: file.data.id,\r\n file_url: file.file_url,\r\n })),\r\n });\r\n uploadPlane.value = false;\r\n }\r\n Emits('send', [...list]);\r\n clearAllFile();\r\n};\r\nconst handleFile = (e) => {\r\n const file = e.target.files[0];\r\n const reader = new FileReader();\r\n reader.onload = () => (previewUrl.value = reader.result);\r\n reader.readAsDataURL(file);\r\n};\r\nconst triggerUploadInput = () => {\r\n uploadInput.value ? uploadInput.value.click() : '';\r\n};\r\n\r\nconst handleFileChange = (e) => {\r\n const selFile = e.target.files[0];\r\n console.log('=== file ===', e);\r\n if (selFile) {\r\n uFileList.value.push({\r\n file: selFile,\r\n file_type: selFile.type,\r\n file_url: URL.createObjectURL(selFile),\r\n size: (selFile.size / 1024).toFixed(2),\r\n percent: 0,\r\n data: {},\r\n });\r\n console.log('=== 文件列表 ===', uFileList.value);\r\n handleUpload(uFileList.value.length - 1);\r\n }\r\n};\r\nconst handleUpload = async (idx) => {\r\n const file = uFileList.value[idx].file;\r\n console.log('========', file);\r\n if (!textValue.value) {\r\n textValue.value = props.defMsg.fileText;\r\n }\r\n const formDate = new FormData();\r\n formDate.append('file', file);\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('POST', 'https://api.coze.cn/v1/files/upload');\r\n xhr.setRequestHeader(\r\n 'Authorization',\r\n fetchOptions.value.headers.Authorization,\r\n );\r\n xhr.upload.onprogress = (e) => {\r\n if (e.lengthComputable) {\r\n const percent = Math.round((e.loaded / e.total) * 100);\r\n console.log(`======进度======:${percent}%`);\r\n uFileList.value[idx].percent = percent;\r\n }\r\n };\r\n xhr.onreadystatechange = function () {\r\n console.log('============', xhr);\r\n if (xhr.readyState === XMLHttpRequest.DONE) {\r\n if (xhr.status === 200) {\r\n console.log('上传成功:', xhr.responseText);\r\n const res = JSON.parse(xhr.response);\r\n uFileList.value[idx].data = res.data;\r\n } else {\r\n console.error('上传失败:', xhr.status);\r\n }\r\n }\r\n };\r\n xhr.send(formDate);\r\n};\r\nconst showUpload = () => {\r\n clearAllFile(true);\r\n uploadPlane.value = true;\r\n};\r\nconst closeUpload = () => {\r\n clearAllFile(true);\r\n uploadPlane.value = false;\r\n};\r\nconst clearAllFile = (deep = false) => {\r\n if (deep) {\r\n for (let i = uFileList.value.length - 1; i >= 0; i -= 1) {\r\n clearFile(i);\r\n }\r\n }\r\n uploadInput.value ? (uploadInput.value.value = '') : '';\r\n\r\n uFileList.value = [];\r\n};\r\n\r\nconst clearFile = (idx) => {\r\n URL.revokeObjectURL(uFileList.value[idx].file_url);\r\n uFileList.value.splice(idx, 1);\r\n uploadInput.value ? (uploadInput.value.value = '') : '';\r\n};\r\n\r\nconst newChatFunc = () => {\r\n Emits('call', {\r\n type: 'new_chat',\r\n });\r\n};\r\n\r\nconst resizeTextarea = () => {\r\n nextTick(() => {\r\n if (txtEle.value) {\r\n txtEle.value.style.height = 'auto';\r\n txtEle.value.style.height =\r\n Math.min(txtEle.value.scrollHeight, 72) + 'px';\r\n }\r\n });\r\n};\r\n\r\nconst handleFocus = () => {\r\n nextTick(() => {\r\n window.scrollTo({\r\n top: Math.round(\r\n 0.7 * window.innerHeight + 0.5476 * window.innerWidth - 416.4,\r\n ), // 滚动到页面的总高度\r\n behavior: 'smooth', // 平滑滚动效果\r\n });\r\n });\r\n};\r\nconst handleMsgType = (file_type) => {\r\n/* text:文本类型。\r\n * file:文件类型。\r\n * image:图片类型。\r\n * audio:音频类型。\r\n * */\r\n if(file_type.includes('image')) {\r\n return 'image'\r\n }else if(file_type.includes('application')) {\r\n return 'file'\r\n }else if(file_type.includes('audio')) {\r\n return 'audio'\r\n }\r\n}\r\nconst handleBlur = () => {};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n@import './OperateModule';\r\n</style>\r\n","<template>\r\n <svg\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n width=\"1em\"\r\n height=\"1em\"\r\n >\r\n <path\r\n d=\"M395.21518 513.604544l323.135538-312.373427c19.052938-18.416442 19.052938-48.273447 0-66.660212-19.053961-18.416442-49.910737-18.416442-68.964698 0L291.75176 480.290811c-19.052938 18.416442-19.052938 48.273447 0 66.660212l357.633237 345.688183c9.525957 9.207709 22.01234 13.796214 34.497699 13.796214 12.485359 0 24.971741-4.588505 34.466999-13.82896 19.052938-18.416442 19.052938-48.242747 0-66.660212L395.21518 513.604544z\"\r\n fill=\"currentColor\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\"></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1.5em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 440 440\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <!-- A 球 -->\r\n <circle\r\n id=\"ballA\"\r\n cx=\"220\"\r\n cy=\"220\"\r\n r=\"50\"\r\n fill=\"rgba(0,0,0,0.8)\"\r\n opacity=\"0.1\"\r\n >\r\n <!-- 位置动画 -->\r\n <animate\r\n attributeName=\"cx\"\r\n values=\"220; 40; 220; 400; 220\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"spline\"\r\n keySplines=\"0.25 0.1 0.25 1; 0.25 0.1 0.25 1; 0.25 0.1 0.25 1; 0.25 0.1 0.25 1\"\r\n />\r\n <!-- 大小动画 -->\r\n <animate\r\n attributeName=\"r\"\r\n values=\"50; 80; 100; 80; 50\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"spline\"\r\n keySplines=\"0.4 0.0 0.2 1; 0.4 0.0 0.2 1; 0.4 0.0 0.2 1; 0.4 0.0 0.2 1\"\r\n />\r\n <!-- 透明度动画 -->\r\n <animate\r\n attributeName=\"opacity\"\r\n values=\"0.1; 0.6; 1; 0.6; 0.1\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"spline\"\r\n keySplines=\"0.6 0.2 0.8 0.4; 0.6 0.2 0.8 0.4; 0.6 0.2 0.8 0.4; 0.6 0.2 0.8 0.4\"\r\n />\r\n </circle>\r\n\r\n <!-- B 球 -->\r\n <circle\r\n id=\"ballB\"\r\n cx=\"220\"\r\n cy=\"220\"\r\n r=\"100\"\r\n fill=\"rgba(0,0,0,0.8)\"\r\n opacity=\"1\"\r\n >\r\n <!-- 位置动画 -->\r\n <animate\r\n attributeName=\"cx\"\r\n values=\"220; 400; 220; 40; 220\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"spline\"\r\n keySplines=\"0.25 0.1 0.25 1; 0.25 0.1 0.25 1; 0.25 0.1 0.25 1; 0.25 0.1 0.25 1\"\r\n />\r\n <!-- 大小动画 -->\r\n <animate\r\n attributeName=\"r\"\r\n values=\"100; 80; 50; 80; 100\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"spline\"\r\n keySplines=\"0.4 0.0 0.2 1; 0.4 0.0 0.2 1; 0.4 0.0 0.2 1; 0.4 0.0 0.2 1\"\r\n />\r\n <!-- 透明度动画 -->\r\n <animate\r\n attributeName=\"opacity\"\r\n values=\"1; 0.6; 0.1; 0.6; 1\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"spline\"\r\n keySplines=\"0.6 0.2 0.8 0.4; 0.6 0.2 0.8 0.4; 0.6 0.2 0.8 0.4; 0.6 0.2 0.8 0.4\"\r\n />\r\n </circle>\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <div class=\"img_wrap\" :class=\"list.length > 1 ? 'grid_2' : 'grid_1'\">\r\n <img\r\n v-for=\"info in list\"\r\n :key=\"info.file_id\"\r\n class=\"img\"\r\n width=\"100%\"\r\n :src=\"caseExtra(info)\"\r\n :alt=\"info.name\"\r\n @click.stop=\"previewImg\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { api as viewerApi } from 'v-viewer';\r\nimport 'viewerjs/dist/viewer.css';\r\n\r\nconst props = defineProps({\r\n list: {\r\n type: Array,\r\n required: true,\r\n },\r\n});\r\nconst pdfIcon = 'https://prodstatic.weis1606.cn/api/smartFood/icon/pdf_icon.png';\r\n\r\nconst previewImg = () => {\r\n const imgList = props.list.filter((item) => item.type === 'image' && item.file_url);\r\n if(imgList.length) {\r\n viewerApi({\r\n images: imgList.map(item => item.file_url),\r\n });\r\n }\r\n};\r\nconst caseExtra = ({type, name, file_url}) => {\r\n console.log(props.list);\r\n let url = file_url;\r\n if(type === 'file' && name.toLowerCase().endsWith('pdf')) {\r\n url = pdfIcon;\r\n }\r\n return url;\r\n}\r\n\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.img_wrap {\r\n display: grid;\r\n gap: 10px;\r\n justify-content: right;\r\n padding: 10px 0;\r\n .img {\r\n cursor: pointer;\r\n }\r\n &.grid_1 {\r\n grid-template-columns: 200px;\r\n }\r\n &.grid_2 {\r\n display: grid;\r\n grid-template-columns: 100px 100px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M18.3752 6.19542C18.3663 5.84188 18.0971 5.61907 17.7113 5.62719C17.3249 5.63532 17.1259 5.87105 17.0624 6.22473C17.0295 6.40814 17.0401 6.60002 17.0382 6.78818C17.0349 7.1092 17.0373 7.43028 17.0373 7.75135C16.9871 7.77411 16.9369 7.79688 16.8867 7.81966C16.7181 7.65766 16.5524 7.4926 16.3805 7.33415C14.8317 5.90621 12.9939 5.37461 10.9359 5.69056C8.03017 6.13662 5.87726 8.55583 5.62463 11.5758C5.38764 14.4087 7.21523 17.1459 9.95849 18.0667C12.7336 18.9982 15.8214 17.914 17.3822 15.4574C17.4827 15.2992 17.5871 15.1369 17.6484 14.962C17.7675 14.6224 17.7077 14.3062 17.3722 14.1247C17.049 13.9499 16.7426 14.0201 16.5131 14.3168C16.3983 14.4652 16.3111 14.6344 16.204 14.7891C15.2363 16.1865 13.907 16.9479 12.206 17.0308C9.92842 17.1419 7.84057 15.6645 7.17679 13.487C6.49124 11.238 7.43946 8.81484 9.46764 7.6327C11.4392 6.48354 13.9702 6.81332 15.5656 8.43366C15.6825 8.55231 15.7612 8.70851 15.9506 8.98094C15.3277 8.98094 14.8482 8.95558 14.3726 8.98836C13.9335 9.01865 13.7009 9.27998 13.7045 9.64685C13.708 10.0041 13.9569 10.2996 14.3795 10.31C15.4824 10.3371 16.5866 10.3273 17.6901 10.3155C18.0536 10.3117 18.3546 10.1036 18.3656 9.74431C18.4019 8.56213 18.4048 7.37778 18.3752 6.19542Z\"\r\n fill=\"currentColor\"\r\n >\r\n <animateTransform\r\n attributeName=\"transform\"\r\n attributeType=\"XML\"\r\n type=\"rotate\"\r\n from=\"0 12 12\"\r\n to=\"360 12 12\"\r\n dur=\"1.5s\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </path>\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M3.78271 12C3.78271 13.0792 3.99526 14.1477 4.40822 15.1447C4.82118 16.1416 5.42646 17.0475 6.18951 17.8106C6.95256 18.5736 7.85843 19.1789 8.8554 19.5919C9.85238 20.0048 10.9209 20.2174 12 20.2174C13.0792 20.2174 14.1477 20.0048 15.1447 19.5919C16.1416 19.1789 17.0475 18.5736 17.8106 17.8106C18.5736 17.0475 19.1789 16.1416 19.5919 15.1447C20.0048 14.1477 20.2174 13.0792 20.2174 12C20.2174 10.9209 20.0048 9.85238 19.5919 8.8554C19.1789 7.85843 18.5736 6.95256 17.8106 6.18951C17.0475 5.42646 16.1416 4.82118 15.1447 4.40822C14.1477 3.99526 13.0792 3.78271 12 3.78271C10.9209 3.78271 9.85238 3.99526 8.8554 4.40822C7.85843 4.82118 6.95256 5.42646 6.18951 6.18951C5.42646 6.95256 4.82118 7.85843 4.40822 8.8554C3.99526 9.85238 3.78271 10.9209 3.78271 12Z\"\r\n fill=\"currentColor\"\r\n />\r\n <path\r\n d=\"M11.0677 14.4192L8.08502 11.4365C7.87938 11.2308 7.54542 11.2308 7.33978 11.4365C7.13414 11.6421 7.13414 11.9761 7.33978 12.1817L10.3225 15.1644C10.5281 15.3701 10.8621 15.3701 11.0677 15.1644C11.2751 14.9605 11.2751 14.6266 11.0677 14.4192Z\"\r\n fill=\"#fff\"\r\n />\r\n <path\r\n d=\"M16.6693 8.84027C16.4636 8.63462 16.1297 8.63462 15.924 8.84027L10.456 14.31C10.2503 14.5157 10.2503 14.8496 10.456 15.0553C10.6616 15.2609 10.9956 15.2609 11.2012 15.0553L16.6693 9.58727C16.8767 9.37986 16.8767 9.04591 16.6693 8.84027Z\"\r\n fill=\"#fff\"\r\n />\r\n </svg>\r\n</template>\r\n\r\n<script></script>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <p class=\"text\">\r\n <template v-for=\"(item, idx) in msgList\" :key=\"idx\">\r\n <template v-if=\"item.type === 'text'\">{{ item.content }}</template>\r\n <template v-if=\"item.type === 'link'\">\r\n <a class=\"link\" @click.stop=\"previewImg(item)\">{{ item.content }}</a>\r\n </template>\r\n </template>\r\n </p>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, ref } from 'vue';\r\nimport { api as viewerApi } from 'v-viewer';\r\nimport 'viewerjs/dist/viewer.css';\r\n\r\nconst props = defineProps({\r\n content: {\r\n type: String,\r\n default: '',\r\n },\r\n});\r\n\r\nconst images = ref([]);\r\nconst msgList = computed(() => {\r\n const regEx = /\\[([^\\]]+)]\\((https?:\\/\\/[^)]+)\\)/gi;\r\n const matches = [...props.content.matchAll(regEx)];\r\n let remaining = props.content;\r\n let pointer = 0;\r\n const result = [];\r\n if (matches.length) {\r\n matches.forEach((match, index) => {\r\n result.push({\r\n type: 'text',\r\n content: match.input.slice(pointer, match.index).replace(regEx, ''),\r\n });\r\n result.push({\r\n type: 'link',\r\n string: match[0],\r\n ...JSON.parse(match[0].replace(regEx, '{\"content\":\"[$1]\",\"url\":\"$2\"}')),\r\n });\r\n remaining = match.input.slice(match.index).replace(match[0], '');\r\n pointer = match.index;\r\n });\r\n if (remaining.length) {\r\n result.push({\r\n type: 'text',\r\n content: remaining,\r\n });\r\n }\r\n } else {\r\n result.push({\r\n type: 'text',\r\n content: remaining,\r\n });\r\n }\r\n return result;\r\n});\r\n\r\nconst previewImg = ({ url }) => {\r\n images.value = [url];\r\n viewerApi({\r\n images: images.value,\r\n });\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.text {\r\n word-break: break-all;\r\n white-space: pre-wrap;\r\n margin: 0;\r\n}\r\n.link {\r\n cursor: pointer;\r\n color: #039938;\r\n}\r\n</style>\r\n","import { api as viewerApi } from 'v-viewer';\r\nimport 'viewerjs/dist/viewer.css';\r\n\r\nexport const previewImg = (list) => {\r\n viewerApi({\r\n images: list,\r\n });\r\n};\r\n","<template>\r\n <div class=\"sc_wrap\" @click.stop=\"handleSelStore\">\r\n <div\r\n class=\"img\"\r\n :style=\"{\r\n background: `url(${\r\n info.signUrl || defImg\r\n }?x-oss-process=image/resize,w_144) no-repeat center`,\r\n backgroundSize: 'cover',\r\n }\"\r\n @click.stop=\"previewImg([info.signUrl || defImg])\"\r\n />\r\n <div>\r\n <div class=\"name\">{{ info.hpName }}</div>\r\n <div class=\"address\">{{ info.address }}</div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { previewImg } from '../../utils/imagesViewer';\r\n\r\nconst defImg =\r\n 'https://prodstatic.weis1606.cn/api/smartFood/images/logo_img.png';\r\nconst props = defineProps({\r\n info: {\r\n type: Object,\r\n required: true,\r\n },\r\n});\r\nconst Emits = defineEmits(['select']);\r\nconst handleSelStore = () => {\r\n Emits('select', {\r\n type: 'chat',\r\n content: props.info.hpName,\r\n text: props.info.hpName,\r\n });\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.sc_wrap {\r\n .flexrss();\r\n gap: 10px;\r\n cursor: default;\r\n padding: 10px;\r\n margin: 10px 0;\r\n border-radius: 10px;\r\n background-color: #fff;\r\n .img {\r\n cursor: pointer;\r\n width: 72px;\r\n height: 72px;\r\n flex-shrink: 0;\r\n border-radius: 10px;\r\n background-color: #d9d9d9;\r\n }\r\n .name {\r\n font-weight: 600;\r\n font-size: 14px;\r\n color: #000;\r\n line-height: 16px;\r\n }\r\n .address {\r\n margin-top: 10px;\r\n font-weight: 400;\r\n font-size: 10px;\r\n color: #666;\r\n line-height: 12px;\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div>请选择一个门店</div>\r\n <template v-for=\"info in list\" :key=\"info.hpName\">\r\n <store-card :info=\"info\" @select=\"handleSel\" />\r\n </template>\r\n</template>\r\n\r\n<script setup>\r\nimport StoreCard from './StoreCard.vue';\r\n// import data from './mock';\r\n// import { computed } from 'vue';\r\n// const list = computed(() => {\r\n// return data.storeList;\r\n// });\r\nconst props = defineProps({\r\n list: {\r\n type: Array,\r\n required: true,\r\n },\r\n});\r\nconst Emits = defineEmits(['select']);\r\nconst handleSel = (info) => {\r\n Emits('select', { ...info });\r\n};\r\n</script>\r\n\r\n<style scoped></style>\r\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n let cache = decodeCache[exclude]\n if (cache) { return cache }\n\n cache = decodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n cache.push(ch)\n }\n\n for (let i = 0; i < exclude.length; i++) {\n const ch = exclude.charCodeAt(i)\n cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n }\n\n return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n if (typeof exclude !== 'string') {\n exclude = decode.defaultChars\n }\n\n const cache = getDecodeCache(exclude)\n\n return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n let result = ''\n\n for (let i = 0, l = seq.length; i < l; i += 3) {\n const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n if (b1 < 0x80) {\n result += cache[b1]\n continue\n }\n\n if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n // 110xxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n if ((b2 & 0xC0) === 0x80) {\n const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n if (chr < 0x80) {\n result += '\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 3\n continue\n }\n }\n\n if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n result += '\\ufffd\\ufffd\\ufffd'\n } else {\n result += String.fromCharCode(chr)\n }\n\n i += 6\n continue\n }\n }\n\n if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n if (chr < 0x10000 || chr > 0x10FFFF) {\n result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n } else {\n chr -= 0x10000\n result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n }\n\n i += 9\n continue\n }\n }\n\n result += '\\ufffd'\n }\n\n return result\n })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n let cache = encodeCache[exclude]\n if (cache) { return cache }\n\n cache = encodeCache[exclude] = []\n\n for (let i = 0; i < 128; i++) {\n const ch = String.fromCharCode(i)\n\n if (/^[0-9a-z]$/i.test(ch)) {\n // always allow unencoded alphanumeric characters\n cache.push(ch)\n } else {\n cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n }\n }\n\n for (let i = 0; i < exclude.length; i++) {\n cache[exclude.charCodeAt(i)] = exclude[i]\n }\n\n return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n// - string - string to encode\n// - exclude - list of characters to ignore (in addition to a-zA-Z0-9)\n// - keepEscaped - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n if (typeof exclude !== 'string') {\n // encode(string, keepEscaped)\n keepEscaped = exclude\n exclude = encode.defaultChars\n }\n\n if (typeof keepEscaped === 'undefined') {\n keepEscaped = true\n }\n\n const cache = getEncodeCache(exclude)\n let result = ''\n\n for (let i = 0, l = string.length; i < l; i++) {\n const code = string.charCodeAt(i)\n\n if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n result += string.slice(i, i + 3)\n i += 2\n continue\n }\n }\n\n if (code < 128) {\n result += cache[code]\n continue\n }\n\n if (code >= 0xD800 && code <= 0xDFFF) {\n if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n const nextCode = string.charCodeAt(i + 1)\n if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n result += encodeURIComponent(string[i] + string[i + 1])\n i++\n continue\n }\n }\n result += '%EF%BF%BD'\n continue\n }\n\n result += encodeURIComponent(string[i])\n }\n\n return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n let result = ''\n\n result += url.protocol || ''\n result += url.slashes ? '//' : ''\n result += url.auth ? url.auth + '@' : ''\n\n if (url.hostname && url.hostname.indexOf(':') !== -1) {\n // ipv6 address\n result += '[' + url.hostname + ']'\n } else {\n result += url.hostname || ''\n }\n\n result += url.port ? ':' + url.port : ''\n result += url.pathname || ''\n result += url.search || ''\n result += url.hash || ''\n\n return result\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n// e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n// so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n// i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n// (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n// which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n this.protocol = null\n this.slashes = null\n this.auth = null\n this.port = null\n this.hostname = null\n this.hash = null\n this.search = null\n this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks. Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n if (url && url instanceof Url) return url\n\n const u = new Url()\n u.parse(url, slashesDenoteHost)\n return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n let lowerProto, hec, slashes\n let rest = url\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim()\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n const simplePath = simplePathPattern.exec(rest)\n if (simplePath) {\n this.pathname = simplePath[1]\n if (simplePath[2]) {\n this.search = simplePath[2]\n }\n return this\n }\n }\n\n let proto = protocolPattern.exec(rest)\n if (proto) {\n proto = proto[0]\n lowerProto = proto.toLowerCase()\n this.protocol = proto\n rest = rest.substr(proto.length)\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n /* eslint-disable-next-line no-useless-escape */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n slashes = rest.substr(0, 2) === '//'\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2)\n this.slashes = true\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n let hostEnd = -1\n for (let i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n let auth, atSign\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@')\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd)\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign)\n rest = rest.slice(atSign + 1)\n this.auth = auth\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1\n for (let i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i])\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n hostEnd = hec\n }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) {\n hostEnd = rest.length\n }\n\n if (rest[hostEnd - 1] === ':') { hostEnd-- }\n const host = rest.slice(0, hostEnd)\n rest = rest.slice(hostEnd)\n\n // pull out port.\n this.parseHost(host)\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || ''\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n const ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']'\n\n // validate a little.\n if (!ipv6Hostname) {\n const hostparts = this.hostname.split(/\\./)\n for (let i = 0, l = hostparts.length; i < l; i++) {\n const part = hostparts[i]\n if (!part) { continue }\n if (!part.match(hostnamePartPattern)) {\n let newpart = ''\n for (let j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x'\n } else {\n newpart += part[j]\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n const validParts = hostparts.slice(0, i)\n const notHost = hostparts.slice(i + 1)\n const bit = part.match(hostnamePartStart)\n if (bit) {\n validParts.push(bit[1])\n notHost.unshift(bit[2])\n }\n if (notHost.length) {\n rest = notHost.join('.') + rest\n }\n this.hostname = validParts.join('.')\n break\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = ''\n }\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n }\n }\n\n // chop off from the tail first.\n const hash = rest.indexOf('#')\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash)\n rest = rest.slice(0, hash)\n }\n const qm = rest.indexOf('?')\n if (qm !== -1) {\n this.search = rest.substr(qm)\n rest = rest.slice(0, qm)\n }\n if (rest) { this.pathname = rest }\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = ''\n }\n\n return this\n}\n\nUrl.prototype.parseHost = function (host) {\n let port = portPattern.exec(host)\n if (port) {\n port = port[0]\n if (port !== ':') {\n this.port = port.substr(1)\n }\n host = host.substr(0, host.length - port.length)\n }\n if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","export default /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/","export default /[\\0-\\x1F\\x7F-\\x9F]/","export default /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/","export default /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/","export default /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF76\\uDF7B-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE88\\uDE90-\\uDEBD\\uDEBF-\\uDEC5\\uDECE-\\uDEDB\\uDEE0-\\uDEE8\\uDEF0-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFCA]/","export default /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Generated using scripts/write-decode-map.ts\nexport default new Uint16Array(\n// prettier-ignore\n\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-xml.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 0xffff) {\n codePoint -= 0x10000;\n output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);\n codePoint = 0xdc00 | (codePoint & 0x3ff);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {\n return 0xfffd;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport default function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode_codepoint.js.map","import htmlDecodeTree from \"./generated/decode-data-html.js\";\nimport xmlDecodeTree from \"./generated/decode-data-xml.js\";\nimport decodeCodePoint, { replaceCodePoint, fromCodePoint, } from \"./decode_codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree, xmlDecodeTree, decodeCodePoint };\nexport { replaceCodePoint, fromCodePoint } from \"./decode_codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b100000;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param string The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(str, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (str.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(str, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(str, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(str, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(str, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(str, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(str, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(str, offset) {\n if (offset >= str.length) {\n return -1;\n }\n if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(str, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(str, offset);\n }\n addToNumericResult(str, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n parseInt(str.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(str, offset) {\n const startIdx = offset;\n while (offset < str.length) {\n const char = str.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(str, startIdx, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(str, startIdx, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param str The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(str, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < str.length; offset++, this.excess++) {\n const char = str.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let ret = \"\";\n const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str)));\n return function decodeWithTrie(str, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = str.indexOf(\"&\", offset)) >= 0) {\n ret += str.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const len = decoder.write(str, \n // Skip the \"&\"\n offset + 1);\n if (len < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + len;\n // If `len` is 0, skip the current `&` and continue.\n offset = len === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = ret + str.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n ret = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIdx, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIdx + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIdx;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midVal = decodeTree[mid];\n if (midVal < char) {\n lo = mid + 1;\n }\n else if (midVal > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = getDecoder(htmlDecodeTree);\nconst xmlDecoder = getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param str The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(str, mode = DecodingMode.Legacy) {\n return htmlDecoder(str, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(str) {\n return htmlDecoder(str, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(str) {\n return htmlDecoder(str, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param str The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(str) {\n return xmlDecoder(str, DecodingMode.Strict);\n}\n//# sourceMappingURL=decode.js.map","// Utilities\n//\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTML } from 'entities'\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\n\nfunction isString (obj) { return _class(obj) === '[object String]' }\n\nconst _hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction has (object, key) {\n return _hasOwnProperty.call(object, key)\n}\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be object')\n }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt (src, pos, newElements) {\n return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\nfunction isValidEntityCode (c) {\n /* eslint no-bitwise:0 */\n // broken sequence\n if (c >= 0xD800 && c <= 0xDFFF) { return false }\n // never used\n if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n // control codes\n if (c >= 0x00 && c <= 0x08) { return false }\n if (c === 0x0B) { return false }\n if (c >= 0x0E && c <= 0x1F) { return false }\n if (c >= 0x7F && c <= 0x9F) { return false }\n // out of range\n if (c > 0x10FFFF) { return false }\n return true\n}\n\nfunction fromCodePoint (c) {\n /* eslint no-bitwise:0 */\n if (c > 0xffff) {\n c -= 0x10000\n const surrogate1 = 0xd800 + (c >> 10)\n const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n return String.fromCharCode(surrogate1, surrogate2)\n }\n return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match, name) {\n if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n const code = name[1].toLowerCase() === 'x'\n ? parseInt(name.slice(2), 16)\n : parseInt(name.slice(1), 10)\n\n if (isValidEntityCode(code)) {\n return fromCodePoint(code)\n }\n\n return match\n }\n\n const decoded = decodeHTML(match)\n if (decoded !== match) {\n return decoded\n }\n\n return match\n}\n\n/* function replaceEntities(str) {\n if (str.indexOf('&') < 0) { return str; }\n\n return str.replace(ENTITY_RE, replaceEntityPattern);\n} */\n\nfunction unescapeMd (str) {\n if (str.indexOf('\\\\') < 0) { return str }\n return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\nfunction unescapeAll (str) {\n if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n if (escaped) { return escaped }\n return replaceEntityPattern(match, entity)\n })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;'\n}\n\nfunction replaceUnsafeChar (ch) {\n return HTML_REPLACEMENTS[ch]\n}\n\nfunction escapeHtml (str) {\n if (HTML_ESCAPE_TEST_RE.test(str)) {\n return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n }\n return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\nfunction escapeRE (str) {\n return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\nfunction isSpace (code) {\n switch (code) {\n case 0x09:\n case 0x20:\n return true\n }\n return false\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace (code) {\n if (code >= 0x2000 && code <= 0x200A) { return true }\n switch (code) {\n case 0x09: // \\t\n case 0x0A: // \\n\n case 0x0B: // \\v\n case 0x0C: // \\f\n case 0x0D: // \\r\n case 0x20:\n case 0xA0:\n case 0x1680:\n case 0x202F:\n case 0x205F:\n case 0x3000:\n return true\n }\n return false\n}\n\n/* eslint-disable max-len */\n\n// Currently without astral characters support.\nfunction isPunctChar (ch) {\n return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct (ch) {\n switch (ch) {\n case 0x21/* ! */:\n case 0x22/* \" */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x27/* ' */:\n case 0x28/* ( */:\n case 0x29/* ) */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2C/* , */:\n case 0x2D/* - */:\n case 0x2E/* . */:\n case 0x2F/* / */:\n case 0x3A/* : */:\n case 0x3B/* ; */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x3F/* ? */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7C/* | */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference (str) {\n // Trim and collapse whitespace\n //\n str = str.trim().replace(/\\s+/g, ' ')\n\n // In node v10 'ẞ'.toLowerCase() === 'Ṿ', which is presumed to be a bug\n // fixed in v12 (couldn't find any details).\n //\n // So treat this one as a special case\n // (remove this when node v10 is no longer supported).\n //\n if ('ẞ'.toLowerCase() === 'Ṿ') {\n str = str.replace(/ẞ/g, 'ß')\n }\n\n // .toLowerCase().toUpperCase() should get rid of all differences\n // between letter variants.\n //\n // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n // uppercased versions).\n //\n // Here's an example showing how it happens. Lets take greek letter omega:\n // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n //\n // Unicode entries:\n // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n //\n // Case-insensitive comparison should treat all of them as equivalent.\n //\n // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n // and .toUpperCase() doesn't change ϴ (already uppercase).\n //\n // Applying first lower then upper case normalizes any character:\n // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n //\n // Note: this is equivalent to unicode case folding; unicode normalization\n // is a different step that is not required here.\n //\n // Final result should be uppercased, because it's later stored in an object\n // (this avoid a conflict with Object.prototype members,\n // most notably, `__proto__`)\n //\n return str.toLowerCase().toUpperCase()\n}\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nconst lib = { mdurl, ucmicro }\n\nexport {\n lib,\n assign,\n isString,\n has,\n unescapeMd,\n unescapeAll,\n isValidEntityCode,\n fromCodePoint,\n escapeHtml,\n arrayReplaceAt,\n isSpace,\n isWhiteSpace,\n isMdAsciiPunct,\n isPunctChar,\n escapeRE,\n normalizeReference\n}\n","// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n\nexport default function parseLinkLabel (state, start, disableNested) {\n let level, found, marker, prevPos\n\n const max = state.posMax\n const oldPos = state.pos\n\n state.pos = start + 1\n level = 1\n\n while (state.pos < max) {\n marker = state.src.charCodeAt(state.pos)\n if (marker === 0x5D /* ] */) {\n level--\n if (level === 0) {\n found = true\n break\n }\n }\n\n prevPos = state.pos\n state.md.inline.skipToken(state)\n if (marker === 0x5B /* [ */) {\n if (prevPos === state.pos - 1) {\n // increase level if we find text `[`, which is not a part of any token\n level++\n } else if (disableNested) {\n state.pos = oldPos\n return -1\n }\n }\n }\n\n let labelEnd = -1\n\n if (found) {\n labelEnd = state.pos\n }\n\n // restore old state\n state.pos = oldPos\n\n return labelEnd\n}\n","// Parse link destination\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\nexport default function parseLinkDestination (str, start, max) {\n let code\n let pos = start\n\n const result = {\n ok: false,\n pos: 0,\n str: ''\n }\n\n if (str.charCodeAt(pos) === 0x3C /* < */) {\n pos++\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === 0x0A /* \\n */) { return result }\n if (code === 0x3C /* < */) { return result }\n if (code === 0x3E /* > */) {\n result.pos = pos + 1\n result.str = unescapeAll(str.slice(start + 1, pos))\n result.ok = true\n return result\n }\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos += 2\n continue\n }\n\n pos++\n }\n\n // no closing '>'\n return result\n }\n\n // this should be ... } else { ... branch\n\n let level = 0\n while (pos < max) {\n code = str.charCodeAt(pos)\n\n if (code === 0x20) { break }\n\n // ascii control characters\n if (code < 0x20 || code === 0x7F) { break }\n\n if (code === 0x5C /* \\ */ && pos + 1 < max) {\n if (str.charCodeAt(pos + 1) === 0x20) { break }\n pos += 2\n continue\n }\n\n if (code === 0x28 /* ( */) {\n level++\n if (level > 32) { return result }\n }\n\n if (code === 0x29 /* ) */) {\n if (level === 0) { break }\n level--\n }\n\n pos++\n }\n\n if (start === pos) { return result }\n if (level !== 0) { return result }\n\n result.str = unescapeAll(str.slice(start, pos))\n result.pos = pos\n result.ok = true\n return result\n}\n","// Parse link title\n//\n\nimport { unescapeAll } from '../common/utils.mjs'\n\n// Parse link title within `str` in [start, max] range,\n// or continue previous parsing if `prev_state` is defined (equal to result of last execution).\n//\nexport default function parseLinkTitle (str, start, max, prev_state) {\n let code\n let pos = start\n\n const state = {\n // if `true`, this is a valid link title\n ok: false,\n // if `true`, this link can be continued on the next line\n can_continue: false,\n // if `ok`, it's the position of the first character after the closing marker\n pos: 0,\n // if `ok`, it's the unescaped title\n str: '',\n // expected closing marker character code\n marker: 0\n }\n\n if (prev_state) {\n // this is a continuation of a previous parseLinkTitle call on the next line,\n // used in reference links only\n state.str = prev_state.str\n state.marker = prev_state.marker\n } else {\n if (pos >= max) { return state }\n\n let marker = str.charCodeAt(pos)\n if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n start++\n pos++\n\n // if opening marker is \"(\", switch it to closing marker \")\"\n if (marker === 0x28) { marker = 0x29 }\n\n state.marker = marker\n }\n\n while (pos < max) {\n code = str.charCodeAt(pos)\n if (code === state.marker) {\n state.pos = pos + 1\n state.str += unescapeAll(str.slice(start, pos))\n state.ok = true\n return state\n } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n return state\n } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n pos++\n }\n\n pos++\n }\n\n // no closing marker found, but this link title may continue on the next line (for references)\n state.can_continue = true\n state.str += unescapeAll(str.slice(start, pos))\n return state\n}\n","/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n\nimport { assign, unescapeAll, escapeHtml } from './common/utils.mjs'\n\nconst default_rules = {}\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '<code' + slf.renderAttrs(token) + '>' +\n escapeHtml(token.content) +\n '</code>'\n}\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n return '<pre' + slf.renderAttrs(token) + '><code>' +\n escapeHtml(tokens[idx].content) +\n '</code></pre>\\n'\n}\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n const info = token.info ? unescapeAll(token.info).trim() : ''\n let langName = ''\n let langAttrs = ''\n\n if (info) {\n const arr = info.split(/(\\s+)/g)\n langName = arr[0]\n langAttrs = arr.slice(2).join('')\n }\n\n let highlighted\n if (options.highlight) {\n highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content)\n } else {\n highlighted = escapeHtml(token.content)\n }\n\n if (highlighted.indexOf('<pre') === 0) {\n return highlighted + '\\n'\n }\n\n // If language exists, inject class gently, without modifying original token.\n // May be, one day we will add .deepClone() for token and simplify this part, but\n // now we prefer to keep things local.\n if (info) {\n const i = token.attrIndex('class')\n const tmpAttrs = token.attrs ? token.attrs.slice() : []\n\n if (i < 0) {\n tmpAttrs.push(['class', options.langPrefix + langName])\n } else {\n tmpAttrs[i] = tmpAttrs[i].slice()\n tmpAttrs[i][1] += ' ' + options.langPrefix + langName\n }\n\n // Fake token just to render attributes\n const tmpToken = {\n attrs: tmpAttrs\n }\n\n return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n }\n\n return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n const token = tokens[idx]\n\n // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n // should be placed on proper position for tests.\n //\n // Replace content with actual value\n\n token.attrs[token.attrIndex('alt')][1] =\n slf.renderInlineAsText(token.children, options, env)\n\n return slf.renderToken(tokens, idx, options)\n}\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n return options.xhtmlOut ? '<br />\\n' : '<br>\\n'\n}\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n'\n}\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n return escapeHtml(tokens[idx].content)\n}\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n return tokens[idx].content\n}\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer () {\n /**\n * Renderer#rules -> Object\n *\n * Contains render rules for tokens. Can be updated and extended.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.renderer.rules.strong_open = function () { return '<b>'; };\n * md.renderer.rules.strong_close = function () { return '</b>'; };\n *\n * var result = md.renderInline(...);\n * ```\n *\n * Each rule is called as independent static function with fixed signature:\n *\n * ```javascript\n * function my_token_render(tokens, idx, options, env, renderer) {\n * // ...\n * return renderedHTML;\n * }\n * ```\n *\n * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs)\n * for more details and examples.\n **/\n this.rules = assign({}, default_rules)\n}\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs (token) {\n let i, l, result\n\n if (!token.attrs) { return '' }\n\n result = ''\n\n for (i = 0, l = token.attrs.length; i < l; i++) {\n result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"'\n }\n\n return result\n}\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken (tokens, idx, options) {\n const token = tokens[idx]\n let result = ''\n\n // Tight list paragraphs\n if (token.hidden) {\n return ''\n }\n\n // Insert a newline between hidden paragraph and subsequent opening\n // block-level tag.\n //\n // For example, here we should insert a newline before blockquote:\n // - a\n // >\n //\n if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n result += '\\n'\n }\n\n // Add token name, e.g. `<img`\n result += (token.nesting === -1 ? '</' : '<') + token.tag\n\n // Encode attributes, e.g. `<img src=\"foo\"`\n result += this.renderAttrs(token)\n\n // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n if (token.nesting === 0 && options.xhtmlOut) {\n result += ' /'\n }\n\n // Check if we need to add a newline after this tag\n let needLf = false\n if (token.block) {\n needLf = true\n\n if (token.nesting === 1) {\n if (idx + 1 < tokens.length) {\n const nextToken = tokens[idx + 1]\n\n if (nextToken.type === 'inline' || nextToken.hidden) {\n // Block-level tag containing an inline tag.\n //\n needLf = false\n } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n //\n needLf = false\n }\n }\n }\n }\n\n result += needLf ? '>\\n' : '>'\n\n return result\n}\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options)\n }\n }\n\n return result\n}\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n let result = ''\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n switch (tokens[i].type) {\n case 'text':\n result += tokens[i].content\n break\n case 'image':\n result += this.renderInlineAsText(tokens[i].children, options, env)\n break\n case 'html_inline':\n case 'html_block':\n result += tokens[i].content\n break\n case 'softbreak':\n case 'hardbreak':\n result += '\\n'\n break\n default:\n // all other tokens are skipped\n }\n }\n\n return result\n}\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to render\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n let result = ''\n const rules = this.rules\n\n for (let i = 0, len = tokens.length; i < len; i++) {\n const type = tokens[i].type\n\n if (type === 'inline') {\n result += this.renderInline(tokens[i].children, options, env)\n } else if (typeof rules[type] !== 'undefined') {\n result += rules[type](tokens, i, options, env, this)\n } else {\n result += this.renderToken(tokens, i, options, env)\n }\n }\n\n return result\n}\n\nexport default Renderer\n","/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n\n/**\n * new Ruler()\n **/\nfunction Ruler () {\n // List of added rules. Each element is:\n //\n // {\n // name: XXX,\n // enabled: Boolean,\n // fn: Function(),\n // alt: [ name2, name3 ]\n // }\n //\n this.__rules__ = []\n\n // Cached rule chains.\n //\n // First level - chain name, '' for default.\n // Second level - diginal anchor for fast filtering by charcodes.\n //\n this.__cache__ = null\n}\n\n// Helper methods, should not be used directly\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n for (let i = 0; i < this.__rules__.length; i++) {\n if (this.__rules__[i].name === name) {\n return i\n }\n }\n return -1\n}\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n const self = this\n const chains = ['']\n\n // collect unique names\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n rule.alt.forEach(function (altName) {\n if (chains.indexOf(altName) < 0) {\n chains.push(altName)\n }\n })\n })\n\n self.__cache__ = {}\n\n chains.forEach(function (chain) {\n self.__cache__[chain] = []\n self.__rules__.forEach(function (rule) {\n if (!rule.enabled) { return }\n\n if (chain && rule.alt.indexOf(chain) < 0) { return }\n\n self.__cache__[chain].push(rule.fn)\n })\n })\n}\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n const index = this.__find__(name)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + name) }\n\n this.__rules__[index].fn = fn\n this.__rules__[index].alt = opt.alt || []\n this.__cache__ = null\n}\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n const index = this.__find__(beforeName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + beforeName) }\n\n this.__rules__.splice(index, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n const index = this.__find__(afterName)\n const opt = options || {}\n\n if (index === -1) { throw new Error('Parser rule not found: ' + afterName) }\n\n this.__rules__.splice(index + 1, 0, {\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n * //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n const opt = options || {}\n\n this.__rules__.push({\n name: ruleName,\n enabled: true,\n fn,\n alt: opt.alt || []\n })\n\n this.__cache__ = null\n}\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and enable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = true\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n this.__rules__.forEach(function (rule) { rule.enabled = false })\n\n this.enable(list, ignoreInvalid)\n}\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n if (!Array.isArray(list)) { list = [list] }\n\n const result = []\n\n // Search by name and disable\n list.forEach(function (name) {\n const idx = this.__find__(name)\n\n if (idx < 0) {\n if (ignoreInvalid) { return }\n throw new Error('Rules manager: invalid rule name ' + name)\n }\n this.__rules__[idx].enabled = false\n result.push(name)\n }, this)\n\n this.__cache__ = null\n return result\n}\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n if (this.__cache__ === null) {\n this.__compile__()\n }\n\n // Chain can be empty, if rules disabled. But we still have to return Array.\n return this.__cache__[chainName] || []\n}\n\nexport default Ruler\n","// Token class\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token (type, tag, nesting) {\n /**\n * Token#type -> String\n *\n * Type of the token (string, e.g. \"paragraph_open\")\n **/\n this.type = type\n\n /**\n * Token#tag -> String\n *\n * html tag name, e.g. \"p\"\n **/\n this.tag = tag\n\n /**\n * Token#attrs -> Array\n *\n * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n **/\n this.attrs = null\n\n /**\n * Token#map -> Array\n *\n * Source map info. Format: `[ line_begin, line_end ]`\n **/\n this.map = null\n\n /**\n * Token#nesting -> Number\n *\n * Level change (number in {-1, 0, 1} set), where:\n *\n * - `1` means the tag is opening\n * - `0` means the tag is self-closing\n * - `-1` means the tag is closing\n **/\n this.nesting = nesting\n\n /**\n * Token#level -> Number\n *\n * nesting level, the same as `state.level`\n **/\n this.level = 0\n\n /**\n * Token#children -> Array\n *\n * An array of child nodes (inline and img tokens)\n **/\n this.children = null\n\n /**\n * Token#content -> String\n *\n * In a case of self-closing tag (code, html, fence, etc.),\n * it has contents of this tag.\n **/\n this.content = ''\n\n /**\n * Token#markup -> String\n *\n * '*' or '_' for emphasis, fence string for fence, etc.\n **/\n this.markup = ''\n\n /**\n * Token#info -> String\n *\n * Additional information:\n *\n * - Info string for \"fence\" tokens\n * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n **/\n this.info = ''\n\n /**\n * Token#meta -> Object\n *\n * A place for plugins to store an arbitrary data\n **/\n this.meta = null\n\n /**\n * Token#block -> Boolean\n *\n * True for block-level tokens, false for inline tokens.\n * Used in renderer to calculate line breaks\n **/\n this.block = false\n\n /**\n * Token#hidden -> Boolean\n *\n * If it's true, ignore this element when rendering. Used for tight lists\n * to hide paragraphs.\n **/\n this.hidden = false\n}\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex (name) {\n if (!this.attrs) { return -1 }\n\n const attrs = this.attrs\n\n for (let i = 0, len = attrs.length; i < len; i++) {\n if (attrs[i][0] === name) { return i }\n }\n return -1\n}\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush (attrData) {\n if (this.attrs) {\n this.attrs.push(attrData)\n } else {\n this.attrs = [attrData]\n }\n}\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet (name, value) {\n const idx = this.attrIndex(name)\n const attrData = [name, value]\n\n if (idx < 0) {\n this.attrPush(attrData)\n } else {\n this.attrs[idx] = attrData\n }\n}\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet (name) {\n const idx = this.attrIndex(name)\n let value = null\n if (idx >= 0) {\n value = this.attrs[idx][1]\n }\n return value\n}\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin (name, value) {\n const idx = this.attrIndex(name)\n\n if (idx < 0) {\n this.attrPush([name, value])\n } else {\n this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value\n }\n}\n\nexport default Token\n","// Core state object\n//\n\nimport Token from '../token.mjs'\n\nfunction StateCore (src, md, env) {\n this.src = src\n this.env = env\n this.tokens = []\n this.inlineMode = false\n this.md = md // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token\n\nexport default StateCore\n","// Normalize input string\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst NEWLINES_RE = /\\r\\n?|\\n/g\nconst NULL_RE = /\\0/g\n\nexport default function normalize (state) {\n let str\n\n // Normalize newlines\n str = state.src.replace(NEWLINES_RE, '\\n')\n\n // Replace NULL characters\n str = str.replace(NULL_RE, '\\uFFFD')\n\n state.src = str\n}\n","export default function block (state) {\n let token\n\n if (state.inlineMode) {\n token = new state.Token('inline', '', 0)\n token.content = state.src\n token.map = [0, 1]\n token.children = []\n state.tokens.push(token)\n } else {\n state.md.block.parse(state.src, state.md, state.env, state.tokens)\n }\n}\n","export default function inline (state) {\n const tokens = state.tokens\n\n // Parse inlines\n for (let i = 0, l = tokens.length; i < l; i++) {\n const tok = tokens[i]\n if (tok.type === 'inline') {\n state.md.inline.parse(tok.content, state.md, state.env, tok.children)\n }\n }\n}\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport { arrayReplaceAt } from '../common/utils.mjs'\n\nfunction isLinkOpen (str) {\n return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state) {\n const blockTokens = state.tokens\n\n if (!state.md.options.linkify) { return }\n\n for (let j = 0, l = blockTokens.length; j < l; j++) {\n if (blockTokens[j].type !== 'inline' ||\n !state.md.linkify.pretest(blockTokens[j].content)) {\n continue\n }\n\n let tokens = blockTokens[j].children\n\n let htmlLinkLevel = 0\n\n // We scan from the end, to keep position when new tags added.\n // Use reversed logic in links start/end match\n for (let i = tokens.length - 1; i >= 0; i--) {\n const currentToken = tokens[i]\n\n // Skip content of markdown links\n if (currentToken.type === 'link_close') {\n i--\n while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n i--\n }\n continue\n }\n\n // Skip content of html tag links\n if (currentToken.type === 'html_inline') {\n if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n htmlLinkLevel--\n }\n if (isLinkClose(currentToken.content)) {\n htmlLinkLevel++\n }\n }\n if (htmlLinkLevel > 0) { continue }\n\n if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n const text = currentToken.content\n let links = state.md.linkify.match(text)\n\n // Now split string to nodes\n const nodes = []\n let level = currentToken.level\n let lastPos = 0\n\n // forbid escape sequence at the start of the string,\n // this avoids http\\://example.com/ from being linkified as\n // http:<a href=\"//example.com/\">//example.com/</a>\n if (links.length > 0 &&\n links[0].index === 0 &&\n i > 0 &&\n tokens[i - 1].type === 'text_special') {\n links = links.slice(1)\n }\n\n for (let ln = 0; ln < links.length; ln++) {\n const url = links[ln].url\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { continue }\n\n let urlText = links[ln].text\n\n // Linkifier might send raw hostnames like \"example.com\", where url\n // starts with domain name. So we prepend http:// in those cases,\n // and remove it afterwards.\n //\n if (!links[ln].schema) {\n urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '')\n } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '')\n } else {\n urlText = state.md.normalizeLinkText(urlText)\n }\n\n const pos = links[ln].index\n\n if (pos > lastPos) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos, pos)\n token.level = level\n nodes.push(token)\n }\n\n const token_o = new state.Token('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.level = level++\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n nodes.push(token_o)\n\n const token_t = new state.Token('text', '', 0)\n token_t.content = urlText\n token_t.level = level\n nodes.push(token_t)\n\n const token_c = new state.Token('link_close', 'a', -1)\n token_c.level = --level\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n nodes.push(token_c)\n\n lastPos = links[ln].lastIndex\n }\n if (lastPos < text.length) {\n const token = new state.Token('text', '', 0)\n token.content = text.slice(lastPos)\n token.level = level\n nodes.push(token)\n }\n\n // replace current node\n blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes)\n }\n }\n }\n}\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR = {\n c: '©',\n r: '®',\n tm: '™'\n}\n\nfunction replaceFn (match, name) {\n return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn)\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nfunction replace_rare (inlineTokens) {\n let inside_autolink = 0\n\n for (let i = inlineTokens.length - 1; i >= 0; i--) {\n const token = inlineTokens[i]\n\n if (token.type === 'text' && !inside_autolink) {\n if (RARE_RE.test(token.content)) {\n token.content = token.content\n .replace(/\\+-/g, '±')\n // .., ..., ....... -> …\n // but ?..... & !..... -> ?.. & !..\n .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n // em-dash\n .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n // en-dash\n .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013')\n }\n }\n\n if (token.type === 'link_open' && token.info === 'auto') {\n inside_autolink--\n }\n\n if (token.type === 'link_close' && token.info === 'auto') {\n inside_autolink++\n }\n }\n}\n\nexport default function replace (state) {\n let blkIdx\n\n if (!state.md.options.typographer) { return }\n\n for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline') { continue }\n\n if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n replace_scoped(state.tokens[blkIdx].children)\n }\n\n if (RARE_RE.test(state.tokens[blkIdx].content)) {\n replace_rare(state.tokens[blkIdx].children)\n }\n }\n}\n","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\nfunction replaceAt (str, index, ch) {\n return str.slice(0, index) + ch + str.slice(index + 1)\n}\n\nfunction process_inlines (tokens, state) {\n let j\n\n const stack = []\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n\n const thisLevel = tokens[i].level\n\n for (j = stack.length - 1; j >= 0; j--) {\n if (stack[j].level <= thisLevel) { break }\n }\n stack.length = j + 1\n\n if (token.type !== 'text') { continue }\n\n let text = token.content\n let pos = 0\n let max = text.length\n\n /* eslint no-labels:0,block-scoped-var:0 */\n OUTER:\n while (pos < max) {\n QUOTE_RE.lastIndex = pos\n const t = QUOTE_RE.exec(text)\n if (!t) { break }\n\n let canOpen = true\n let canClose = true\n pos = t.index + 1\n const isSingle = (t[0] === \"'\")\n\n // Find previous character,\n // default to space if it's the beginning of the line\n //\n let lastChar = 0x20\n\n if (t.index - 1 >= 0) {\n lastChar = text.charCodeAt(t.index - 1)\n } else {\n for (j = i - 1; j >= 0; j--) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // lastChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1)\n break\n }\n }\n\n // Find next character,\n // default to space if it's the end of the line\n //\n let nextChar = 0x20\n\n if (pos < max) {\n nextChar = text.charCodeAt(pos)\n } else {\n for (j = i + 1; j < tokens.length; j++) {\n if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // nextChar defaults to 0x20\n if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n nextChar = tokens[j].content.charCodeAt(0)\n break\n }\n }\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n if (isNextWhiteSpace) {\n canOpen = false\n } else if (isNextPunctChar) {\n if (!(isLastWhiteSpace || isLastPunctChar)) {\n canOpen = false\n }\n }\n\n if (isLastWhiteSpace) {\n canClose = false\n } else if (isLastPunctChar) {\n if (!(isNextWhiteSpace || isNextPunctChar)) {\n canClose = false\n }\n }\n\n if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n // special case: 1\"\" - count first quote as an inch\n canClose = canOpen = false\n }\n }\n\n if (canOpen && canClose) {\n // Replace quotes in the middle of punctuation sequence, but not\n // in the middle of the words, i.e.:\n //\n // 1. foo \" bar \" baz - not replaced\n // 2. foo-\"-bar-\"-baz - replaced\n // 3. foo\"bar\"baz - not replaced\n //\n canOpen = isLastPunctChar\n canClose = isNextPunctChar\n }\n\n if (!canOpen && !canClose) {\n // middle of word\n if (isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n continue\n }\n\n if (canClose) {\n // this could be a closing quote, rewind the stack to get a match\n for (j = stack.length - 1; j >= 0; j--) {\n let item = stack[j]\n if (stack[j].level < thisLevel) { break }\n if (item.single === isSingle && stack[j].level === thisLevel) {\n item = stack[j]\n\n let openQuote\n let closeQuote\n if (isSingle) {\n openQuote = state.md.options.quotes[2]\n closeQuote = state.md.options.quotes[3]\n } else {\n openQuote = state.md.options.quotes[0]\n closeQuote = state.md.options.quotes[1]\n }\n\n // replace token.content *before* tokens[item.token].content,\n // because, if they are pointing at the same token, replaceAt\n // could mess up indices when quote length != 1\n token.content = replaceAt(token.content, t.index, closeQuote)\n tokens[item.token].content = replaceAt(\n tokens[item.token].content, item.pos, openQuote)\n\n pos += closeQuote.length - 1\n if (item.token === i) { pos += openQuote.length - 1 }\n\n text = token.content\n max = text.length\n\n stack.length = j\n continue OUTER\n }\n }\n }\n\n if (canOpen) {\n stack.push({\n token: i,\n pos: t.index,\n single: isSingle,\n level: thisLevel\n })\n } else if (canClose && isSingle) {\n token.content = replaceAt(token.content, t.index, APOSTROPHE)\n }\n }\n }\n}\n\nexport default function smartquotes (state) {\n /* eslint max-depth:0 */\n if (!state.md.options.typographer) { return }\n\n for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n if (state.tokens[blkIdx].type !== 'inline' ||\n !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n continue\n }\n\n process_inlines(state.tokens[blkIdx].children, state)\n }\n}\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nexport default function text_join (state) {\n let curr, last\n const blockTokens = state.tokens\n const l = blockTokens.length\n\n for (let j = 0; j < l; j++) {\n if (blockTokens[j].type !== 'inline') continue\n\n const tokens = blockTokens[j].children\n const max = tokens.length\n\n for (curr = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text_special') {\n tokens[curr].type = 'text'\n }\n }\n\n for (curr = last = 0; curr < max; curr++) {\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n }\n}\n","/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateCore from './rules_core/state_core.mjs'\n\nimport r_normalize from './rules_core/normalize.mjs'\nimport r_block from './rules_core/block.mjs'\nimport r_inline from './rules_core/inline.mjs'\nimport r_linkify from './rules_core/linkify.mjs'\nimport r_replacements from './rules_core/replacements.mjs'\nimport r_smartquotes from './rules_core/smartquotes.mjs'\nimport r_text_join from './rules_core/text_join.mjs'\n\nconst _rules = [\n ['normalize', r_normalize],\n ['block', r_block],\n ['inline', r_inline],\n ['linkify', r_linkify],\n ['replacements', r_replacements],\n ['smartquotes', r_smartquotes],\n // `text_join` finds `text_special` tokens (for escape sequences)\n // and joins them with the rest of the text\n ['text_join', r_text_join]\n]\n\n/**\n * new Core()\n **/\nfunction Core () {\n /**\n * Core#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of core rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n}\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n const rules = this.ruler.getRules('')\n\n for (let i = 0, l = rules.length; i < l; i++) {\n rules[i](state)\n }\n}\n\nCore.prototype.State = StateCore\n\nexport default Core\n","// Parser state class\n\nimport Token from '../token.mjs'\nimport { isSpace } from '../common/utils.mjs'\n\nfunction StateBlock (src, md, env, tokens) {\n this.src = src\n\n // link to parser instance\n this.md = md\n\n this.env = env\n\n //\n // Internal state vartiables\n //\n\n this.tokens = tokens\n\n this.bMarks = [] // line begin offsets for fast jumps\n this.eMarks = [] // line end offsets for fast jumps\n this.tShift = [] // offsets of the first non-space characters (tabs not expanded)\n this.sCount = [] // indents for each line (tabs expanded)\n\n // An amount of virtual spaces (tabs expanded) between beginning\n // of each line (bMarks) and real beginning of that line.\n //\n // It exists only as a hack because blockquotes override bMarks\n // losing information in the process.\n //\n // It's used only when expanding tabs, you can think about it as\n // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n // means first tab should be expanded to 4-21%4 === 3 spaces.\n //\n this.bsCount = []\n\n // block parser variables\n\n // required block content indent (for example, if we are\n // inside a list, it would be positioned after list marker)\n this.blkIndent = 0\n this.line = 0 // line index in src\n this.lineMax = 0 // lines count\n this.tight = false // loose/tight mode for lists\n this.ddIndent = -1 // indent of the current dd block (-1 if there isn't any)\n this.listIndent = -1 // indent of the current list block (-1 if there isn't any)\n\n // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n // used in lists to determine if they interrupt a paragraph\n this.parentType = 'root'\n\n this.level = 0\n\n // Create caches\n // Generate markers.\n const s = this.src\n\n for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n const ch = s.charCodeAt(pos)\n\n if (!indent_found) {\n if (isSpace(ch)) {\n indent++\n\n if (ch === 0x09) {\n offset += 4 - offset % 4\n } else {\n offset++\n }\n continue\n } else {\n indent_found = true\n }\n }\n\n if (ch === 0x0A || pos === len - 1) {\n if (ch !== 0x0A) { pos++ }\n this.bMarks.push(start)\n this.eMarks.push(pos)\n this.tShift.push(indent)\n this.sCount.push(offset)\n this.bsCount.push(0)\n\n indent_found = false\n indent = 0\n offset = 0\n start = pos + 1\n }\n }\n\n // Push fake entry to simplify cache bounds checks\n this.bMarks.push(s.length)\n this.eMarks.push(s.length)\n this.tShift.push(0)\n this.sCount.push(0)\n this.bsCount.push(0)\n\n this.lineMax = this.bMarks.length - 1 // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n const token = new Token(type, tag, nesting)\n token.block = true\n\n if (nesting < 0) this.level-- // closing tag\n token.level = this.level\n if (nesting > 0) this.level++ // opening tag\n\n this.tokens.push(token)\n return token\n}\n\nStateBlock.prototype.isEmpty = function isEmpty (line) {\n return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]\n}\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines (from) {\n for (let max = this.lineMax; from < max; from++) {\n if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n break\n }\n }\n return from\n}\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces (pos) {\n for (let max = this.src.length; pos < max; pos++) {\n const ch = this.src.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n }\n return pos\n}\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack (pos, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1 }\n }\n return pos\n}\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars (pos, code) {\n for (let max = this.src.length; pos < max; pos++) {\n if (this.src.charCodeAt(pos) !== code) { break }\n }\n return pos\n}\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack (pos, code, min) {\n if (pos <= min) { return pos }\n\n while (pos > min) {\n if (code !== this.src.charCodeAt(--pos)) { return pos + 1 }\n }\n return pos\n}\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines (begin, end, indent, keepLastLF) {\n if (begin >= end) {\n return ''\n }\n\n const queue = new Array(end - begin)\n\n for (let i = 0, line = begin; line < end; line++, i++) {\n let lineIndent = 0\n const lineStart = this.bMarks[line]\n let first = lineStart\n let last\n\n if (line + 1 < end || keepLastLF) {\n // No need for bounds check because we have fake entry on tail.\n last = this.eMarks[line] + 1\n } else {\n last = this.eMarks[line]\n }\n\n while (first < last && lineIndent < indent) {\n const ch = this.src.charCodeAt(first)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4\n } else {\n lineIndent++\n }\n } else if (first - lineStart < this.tShift[line]) {\n // patched tShift masked characters to look like spaces (blockquotes, list markers)\n lineIndent++\n } else {\n break\n }\n\n first++\n }\n\n if (lineIndent > indent) {\n // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n // with indent=2 becomes ' \\tfoobar'\n queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last)\n } else {\n queue[i] = this.src.slice(first, last)\n }\n }\n\n return queue.join('')\n}\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token\n\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state, line) {\n const pos = state.bMarks[line] + state.tShift[line]\n const max = state.eMarks[line]\n\n return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str) {\n const result = []\n const max = str.length\n\n let pos = 0\n let ch = str.charCodeAt(pos)\n let isEscaped = false\n let lastPos = 0\n let current = ''\n\n while (pos < max) {\n if (ch === 0x7c/* | */) {\n if (!isEscaped) {\n // pipe separating cells, '|'\n result.push(current + str.substring(lastPos, pos))\n current = ''\n lastPos = pos + 1\n } else {\n // escaped pipe, '\\|'\n current += str.substring(lastPos, pos - 1)\n lastPos = pos\n }\n }\n\n isEscaped = (ch === 0x5c/* \\ */)\n pos++\n\n ch = str.charCodeAt(pos)\n }\n\n result.push(current + str.substring(lastPos))\n\n return result\n}\n\nexport default function table (state, startLine, endLine, silent) {\n // should have at least two lines\n if (startLine + 2 > endLine) { return false }\n\n let nextLine = startLine + 1\n\n if (state.sCount[nextLine] < state.blkIndent) { return false }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // first character of the second line should be '|', '-', ':',\n // and no other characters are allowed but spaces;\n // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const firstCh = state.src.charCodeAt(pos++)\n if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n if (pos >= state.eMarks[nextLine]) { return false }\n\n const secondCh = state.src.charCodeAt(pos++)\n if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n return false\n }\n\n // if first character is '-', then second character must not be a space\n // (due to parsing ambiguity with list)\n if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n while (pos < state.eMarks[nextLine]) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n pos++\n }\n\n let lineText = getLine(state, startLine + 1)\n let columns = lineText.split('|')\n const aligns = []\n for (let i = 0; i < columns.length; i++) {\n const t = columns[i].trim()\n if (!t) {\n // allow empty columns before and after table, but not in between columns;\n // e.g. allow ` |---| `, disallow ` ---||--- `\n if (i === 0 || i === columns.length - 1) {\n continue\n } else {\n return false\n }\n }\n\n if (!/^:?-+:?$/.test(t)) { return false }\n if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right')\n } else if (t.charCodeAt(0) === 0x3A/* : */) {\n aligns.push('left')\n } else {\n aligns.push('')\n }\n }\n\n lineText = getLine(state, startLine).trim()\n if (lineText.indexOf('|') === -1) { return false }\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // header row will define an amount of columns in the entire table,\n // and align row should be exactly the same (the rest of the rows can differ)\n const columnCount = columns.length\n if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n if (silent) { return true }\n\n const oldParentType = state.parentType\n state.parentType = 'table'\n\n // use 'blockquote' lists for termination because it's\n // the most similar to tables\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const token_to = state.push('table_open', 'table', 1)\n const tableLines = [startLine, 0]\n token_to.map = tableLines\n\n const token_tho = state.push('thead_open', 'thead', 1)\n token_tho.map = [startLine, startLine + 1]\n\n const token_htro = state.push('tr_open', 'tr', 1)\n token_htro.map = [startLine, startLine + 1]\n\n for (let i = 0; i < columns.length; i++) {\n const token_ho = state.push('th_open', 'th', 1)\n if (aligns[i]) {\n token_ho.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i].trim()\n token_il.children = []\n\n state.push('th_close', 'th', -1)\n }\n\n state.push('tr_close', 'tr', -1)\n state.push('thead_close', 'thead', -1)\n\n let tbodyLines\n let autocompletedCells = 0\n\n for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) { break }\n lineText = getLine(state, nextLine).trim()\n if (!lineText) { break }\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n columns = escapedSplit(lineText)\n if (columns.length && columns[0] === '') columns.shift()\n if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n // note: autocomplete count can be negative if user specifies more columns than header,\n // but that does not affect intended use (which is limiting expansion)\n autocompletedCells += columnCount - columns.length\n if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n if (nextLine === startLine + 2) {\n const token_tbo = state.push('tbody_open', 'tbody', 1)\n token_tbo.map = tbodyLines = [startLine + 2, 0]\n }\n\n const token_tro = state.push('tr_open', 'tr', 1)\n token_tro.map = [nextLine, nextLine + 1]\n\n for (let i = 0; i < columnCount; i++) {\n const token_tdo = state.push('td_open', 'td', 1)\n if (aligns[i]) {\n token_tdo.attrs = [['style', 'text-align:' + aligns[i]]]\n }\n\n const token_il = state.push('inline', '', 0)\n token_il.content = columns[i] ? columns[i].trim() : ''\n token_il.children = []\n\n state.push('td_close', 'td', -1)\n }\n state.push('tr_close', 'tr', -1)\n }\n\n if (tbodyLines) {\n state.push('tbody_close', 'tbody', -1)\n tbodyLines[1] = nextLine\n }\n\n state.push('table_close', 'table', -1)\n tableLines[1] = nextLine\n\n state.parentType = oldParentType\n state.line = nextLine\n return true\n}\n","// Code block (4 spaces padded)\n\nexport default function code (state, startLine, endLine/*, silent */) {\n if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n let nextLine = startLine + 1\n let last = nextLine\n\n while (nextLine < endLine) {\n if (state.isEmpty(nextLine)) {\n nextLine++\n continue\n }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n nextLine++\n last = nextLine\n continue\n }\n break\n }\n\n state.line = last\n\n const token = state.push('code_block', 'code', 0)\n token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n token.map = [startLine, state.line]\n\n return true\n}\n","// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (pos + 3 > max) { return false }\n\n const marker = state.src.charCodeAt(pos)\n\n if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n return false\n }\n\n // scan marker length\n let mem = pos\n pos = state.skipChars(pos, marker)\n\n let len = pos - mem\n\n if (len < 3) { return false }\n\n const markup = state.src.slice(mem, pos)\n const params = state.src.slice(pos, max)\n\n if (marker === 0x60 /* ` */) {\n if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n return false\n }\n }\n\n // Since start is found, we can report success here in validation mode\n if (silent) { return true }\n\n // search end of block\n let nextLine = startLine\n let haveEndMarker = false\n\n for (;;) {\n nextLine++\n if (nextLine >= endLine) {\n // unclosed block should be autoclosed by end of document.\n // also block seems to be autoclosed by end of parent\n break\n }\n\n pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n // non-empty line with negative indent should stop the list:\n // - ```\n // test\n break\n }\n\n if (state.src.charCodeAt(pos) !== marker) { continue }\n\n if (state.sCount[nextLine] - state.blkIndent >= 4) {\n // closing fence should be indented less than 4 spaces\n continue\n }\n\n pos = state.skipChars(pos, marker)\n\n // closing code fence must be at least as long as the opening one\n if (pos - mem < len) { continue }\n\n // make sure tail has spaces only\n pos = state.skipSpaces(pos)\n\n if (pos < max) { continue }\n\n haveEndMarker = true\n // found!\n break\n }\n\n // If a fence has heading spaces, they should be removed from its inner block\n len = state.sCount[startLine]\n\n state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n const token = state.push('fence', 'code', 0)\n token.info = params\n token.content = state.getLines(startLine + 1, nextLine, len, true)\n token.markup = markup\n token.map = [startLine, state.line]\n\n return true\n}\n","// Block quotes\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function blockquote (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n const oldLineMax = state.lineMax\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n // check the block quote marker\n if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false }\n\n // we know that it's going to be a valid blockquote,\n // so no point trying to find the end of it in silent mode\n if (silent) { return true }\n\n const oldBMarks = []\n const oldBSCount = []\n const oldSCount = []\n const oldTShift = []\n\n const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n const oldParentType = state.parentType\n state.parentType = 'blockquote'\n let lastLineEmpty = false\n let nextLine\n\n // Search the end of the block\n //\n // Block ends with either:\n // 1. an empty line outside:\n // ```\n // > test\n //\n // ```\n // 2. an empty line inside:\n // ```\n // >\n // test\n // ```\n // 3. another tag:\n // ```\n // > test\n // - - -\n // ```\n for (nextLine = startLine; nextLine < endLine; nextLine++) {\n // check if it's outdented, i.e. it's inside list item and indented\n // less than said list item:\n //\n // ```\n // 1. anything\n // > current blockquote\n // 2. checking this line\n // ```\n const isOutdented = state.sCount[nextLine] < state.blkIndent\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n\n if (pos >= max) {\n // Case 1: line is not inside the blockquote, and this line is empty.\n break\n }\n\n if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n // This line is inside the blockquote.\n\n // set offset past spaces and \">\"\n let initial = state.sCount[nextLine] + 1\n let spaceAfterMarker\n let adjustTab\n\n // skip one optional space after '>'\n if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n // ' > test '\n // ^ -- position start of line here:\n pos++\n initial++\n adjustTab = false\n spaceAfterMarker = true\n } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n spaceAfterMarker = true\n\n if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n // ' >\\t test '\n // ^ -- position start of line here (tab has width===1)\n pos++\n initial++\n adjustTab = false\n } else {\n // ' >\\t test '\n // ^ -- position start of line here + shift bsCount slightly\n // to make extra space appear\n adjustTab = true\n }\n } else {\n spaceAfterMarker = false\n }\n\n let offset = initial\n oldBMarks.push(state.bMarks[nextLine])\n state.bMarks[nextLine] = pos\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (isSpace(ch)) {\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4\n } else {\n offset++\n }\n } else {\n break\n }\n\n pos++\n }\n\n lastLineEmpty = pos >= max\n\n oldBSCount.push(state.bsCount[nextLine])\n state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0)\n\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] = offset - initial\n\n oldTShift.push(state.tShift[nextLine])\n state.tShift[nextLine] = pos - state.bMarks[nextLine]\n continue\n }\n\n // Case 2: line is not inside the blockquote, and the last line was empty.\n if (lastLineEmpty) { break }\n\n // Case 3: another tag found.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n if (terminate) {\n // Quirk to enforce \"hard termination mode\" for paragraphs;\n // normally if you call `tokenize(state, startLine, nextLine)`,\n // paragraphs will look below nextLine for paragraph continuation,\n // but if blockquote is terminated by another tag, they shouldn't\n state.lineMax = nextLine\n\n if (state.blkIndent !== 0) {\n // state.blkIndent was non-zero, we now set it to zero,\n // so we need to re-calculate all offsets to appear as\n // if indent wasn't changed\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n state.sCount[nextLine] -= state.blkIndent\n }\n\n break\n }\n\n oldBMarks.push(state.bMarks[nextLine])\n oldBSCount.push(state.bsCount[nextLine])\n oldTShift.push(state.tShift[nextLine])\n oldSCount.push(state.sCount[nextLine])\n\n // A negative indentation means that this is a paragraph continuation\n //\n state.sCount[nextLine] = -1\n }\n\n const oldIndent = state.blkIndent\n state.blkIndent = 0\n\n const token_o = state.push('blockquote_open', 'blockquote', 1)\n token_o.markup = '>'\n const lines = [startLine, 0]\n token_o.map = lines\n\n state.md.block.tokenize(state, startLine, nextLine)\n\n const token_c = state.push('blockquote_close', 'blockquote', -1)\n token_c.markup = '>'\n\n state.lineMax = oldLineMax\n state.parentType = oldParentType\n lines[1] = state.line\n\n // Restore original tShift; this might not be necessary since the parser\n // has already been here, but just to make sure we can do that.\n for (let i = 0; i < oldTShift.length; i++) {\n state.bMarks[i + startLine] = oldBMarks[i]\n state.tShift[i + startLine] = oldTShift[i]\n state.sCount[i + startLine] = oldSCount[i]\n state.bsCount[i + startLine] = oldBSCount[i]\n }\n state.blkIndent = oldIndent\n\n return true\n}\n","// Horizontal rule\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function hr (state, startLine, endLine, silent) {\n const max = state.eMarks[startLine]\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n const marker = state.src.charCodeAt(pos++)\n\n // Check hr marker\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x5F/* _ */) {\n return false\n }\n\n // markers can be mixed with spaces, but there should be at least 3 of them\n\n let cnt = 1\n while (pos < max) {\n const ch = state.src.charCodeAt(pos++)\n if (ch !== marker && !isSpace(ch)) { return false }\n if (ch === marker) { cnt++ }\n }\n\n if (cnt < 3) { return false }\n\n if (silent) { return true }\n\n state.line = startLine + 1\n\n const token = state.push('hr', 'hr', 0)\n token.map = [startLine, state.line]\n token.markup = Array(cnt + 1).join(String.fromCharCode(marker))\n\n return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.mjs'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state, startLine) {\n const max = state.eMarks[startLine]\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n const marker = state.src.charCodeAt(pos++)\n // Check bullet\n if (marker !== 0x2A/* * */ &&\n marker !== 0x2D/* - */ &&\n marker !== 0x2B/* + */) {\n return -1\n }\n\n if (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" -test \" - is not a list item\n return -1\n }\n }\n\n return pos\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker (state, startLine) {\n const start = state.bMarks[startLine] + state.tShift[startLine]\n const max = state.eMarks[startLine]\n let pos = start\n\n // List marker should have at least 2 chars (digit + dot)\n if (pos + 1 >= max) { return -1 }\n\n let ch = state.src.charCodeAt(pos++)\n\n if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1 }\n\n for (;;) {\n // EOL -> fail\n if (pos >= max) { return -1 }\n\n ch = state.src.charCodeAt(pos++)\n\n if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n // List marker should have no more than 9 digits\n // (prevents integer overflow in browsers)\n if (pos - start >= 10) { return -1 }\n\n continue\n }\n\n // found valid marker\n if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n break\n }\n\n return -1\n }\n\n if (pos < max) {\n ch = state.src.charCodeAt(pos)\n\n if (!isSpace(ch)) {\n // \" 1.test \" - is not a list item\n return -1\n }\n }\n return pos\n}\n\nfunction markTightParagraphs (state, idx) {\n const level = state.level + 2\n\n for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n state.tokens[i + 2].hidden = true\n state.tokens[i].hidden = true\n i += 2\n }\n }\n}\n\nexport default function list (state, startLine, endLine, silent) {\n let max, pos, start, token\n let nextLine = startLine\n let tight = true\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n // Special case:\n // - item 1\n // - item 2\n // - item 3\n // - item 4\n // - this one is a paragraph continuation\n if (state.listIndent >= 0 &&\n state.sCount[nextLine] - state.listIndent >= 4 &&\n state.sCount[nextLine] < state.blkIndent) {\n return false\n }\n\n let isTerminatingParagraph = false\n\n // limit conditions when list can interrupt\n // a paragraph (validation mode only)\n if (silent && state.parentType === 'paragraph') {\n // Next list item should still terminate previous list item;\n //\n // This code can fail if plugins use blkIndent as well as lists,\n // but I hope the spec gets fixed long before that happens.\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n isTerminatingParagraph = true\n }\n }\n\n // Detect list type and position after marker\n let isOrdered\n let markerValue\n let posAfterMarker\n if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n isOrdered = true\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n markerValue = Number(state.src.slice(start, posAfterMarker - 1))\n\n // If we're starting a new ordered list right after\n // a paragraph, it should start with 1.\n if (isTerminatingParagraph && markerValue !== 1) return false\n } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n isOrdered = false\n } else {\n return false\n }\n\n // If we're starting a new unordered list right after\n // a paragraph, first line should not be empty.\n if (isTerminatingParagraph) {\n if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false\n }\n\n // For validation mode we can terminate immediately\n if (silent) { return true }\n\n // We should terminate list on style change. Remember first one to compare.\n const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n // Start list\n const listTokIdx = state.tokens.length\n\n if (isOrdered) {\n token = state.push('ordered_list_open', 'ol', 1)\n if (markerValue !== 1) {\n token.attrs = [['start', markerValue]]\n }\n } else {\n token = state.push('bullet_list_open', 'ul', 1)\n }\n\n const listLines = [nextLine, 0]\n token.map = listLines\n token.markup = String.fromCharCode(markerCharCode)\n\n //\n // Iterate list items\n //\n\n let prevEmptyEnd = false\n const terminatorRules = state.md.block.ruler.getRules('list')\n\n const oldParentType = state.parentType\n state.parentType = 'list'\n\n while (nextLine < endLine) {\n pos = posAfterMarker\n max = state.eMarks[nextLine]\n\n const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n let offset = initial\n\n while (pos < max) {\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x09) {\n offset += 4 - (offset + state.bsCount[nextLine]) % 4\n } else if (ch === 0x20) {\n offset++\n } else {\n break\n }\n\n pos++\n }\n\n const contentStart = pos\n let indentAfterMarker\n\n if (contentStart >= max) {\n // trimming space in \"- \\n 3\" case, indent is 1 here\n indentAfterMarker = 1\n } else {\n indentAfterMarker = offset - initial\n }\n\n // If we have more than 4 spaces, the indent is 1\n // (the rest is just indented code block)\n if (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n // \" - test\"\n // ^^^^^ - calculating total length of this thing\n const indent = initial + indentAfterMarker\n\n // Run subparser & write tokens\n token = state.push('list_item_open', 'li', 1)\n token.markup = String.fromCharCode(markerCharCode)\n const itemLines = [nextLine, 0]\n token.map = itemLines\n if (isOrdered) {\n token.info = state.src.slice(start, posAfterMarker - 1)\n }\n\n // change current state, then restore it after parser subcall\n const oldTight = state.tight\n const oldTShift = state.tShift[nextLine]\n const oldSCount = state.sCount[nextLine]\n\n // - example list\n // ^ listIndent position will be here\n // ^ blkIndent position will be here\n //\n const oldListIndent = state.listIndent\n state.listIndent = state.blkIndent\n state.blkIndent = indent\n\n state.tight = true\n state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n state.sCount[nextLine] = offset\n\n if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n // workaround for this case\n // (list item is empty, list terminates before \"foo\"):\n // ~~~~~~~~\n // -\n //\n // foo\n // ~~~~~~~~\n state.line = Math.min(state.line + 2, endLine)\n } else {\n state.md.block.tokenize(state, nextLine, endLine, true)\n }\n\n // If any of list item is tight, mark list as tight\n if (!state.tight || prevEmptyEnd) {\n tight = false\n }\n // Item become loose if finish with empty line,\n // but we should filter last element, because it means list finish\n prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n state.blkIndent = state.listIndent\n state.listIndent = oldListIndent\n state.tShift[nextLine] = oldTShift\n state.sCount[nextLine] = oldSCount\n state.tight = oldTight\n\n token = state.push('list_item_close', 'li', -1)\n token.markup = String.fromCharCode(markerCharCode)\n\n nextLine = state.line\n itemLines[1] = nextLine\n\n if (nextLine >= endLine) { break }\n\n //\n // Try to check if list is terminated or continued.\n //\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n // fail if terminating block found\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n\n // fail if list has another type\n if (isOrdered) {\n posAfterMarker = skipOrderedListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n start = state.bMarks[nextLine] + state.tShift[nextLine]\n } else {\n posAfterMarker = skipBulletListMarker(state, nextLine)\n if (posAfterMarker < 0) { break }\n }\n\n if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break }\n }\n\n // Finalize list\n if (isOrdered) {\n token = state.push('ordered_list_close', 'ol', -1)\n } else {\n token = state.push('bullet_list_close', 'ul', -1)\n }\n token.markup = String.fromCharCode(markerCharCode)\n\n listLines[1] = nextLine\n state.line = nextLine\n\n state.parentType = oldParentType\n\n // mark paragraphs tight if needed\n if (tight) {\n markTightParagraphs(state, listTokIdx)\n }\n\n return true\n}\n","import { isSpace, normalizeReference } from '../common/utils.mjs'\n\nexport default function reference (state, startLine, _endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n let nextLine = startLine + 1\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n function getNextLine (nextLine) {\n const endLine = state.lineMax\n\n if (nextLine >= endLine || state.isEmpty(nextLine)) {\n // empty line or end of input\n return null\n }\n\n let isContinuation = false\n\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { isContinuation = true }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n if (!isContinuation) {\n const terminatorRules = state.md.block.ruler.getRules('reference')\n const oldParentType = state.parentType\n state.parentType = 'reference'\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n\n state.parentType = oldParentType\n if (terminate) {\n // terminated by another block\n return null\n }\n }\n\n const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n // max + 1 explicitly includes the newline\n return state.src.slice(pos, max + 1)\n }\n\n let str = state.src.slice(pos, max + 1)\n\n max = str.length\n let labelEnd = -1\n\n for (pos = 1; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x5B /* [ */) {\n return false\n } else if (ch === 0x5D /* ] */) {\n labelEnd = pos\n break\n } else if (ch === 0x0A /* \\n */) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (ch === 0x5C /* \\ */) {\n pos++\n if (pos < max && str.charCodeAt(pos) === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n }\n }\n }\n\n if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false }\n\n // [label]: destination 'title'\n // ^^^ skip optional whitespace here\n for (pos = labelEnd + 2; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^^^^^ parse this\n const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n if (!destRes.ok) { return false }\n\n const href = state.md.normalizeLink(destRes.str)\n if (!state.md.validateLink(href)) { return false }\n\n pos = destRes.pos\n\n // save cursor state, we could require to rollback later\n const destEndPos = pos\n const destEndLineNo = nextLine\n\n // [label]: destination 'title'\n // ^^^ skipping those spaces\n const start = pos\n for (; pos < max; pos++) {\n const ch = str.charCodeAt(pos)\n if (ch === 0x0A) {\n const lineContent = getNextLine(nextLine)\n if (lineContent !== null) {\n str += lineContent\n max = str.length\n nextLine++\n }\n } else if (isSpace(ch)) {\n /* eslint no-empty:0 */\n } else {\n break\n }\n }\n\n // [label]: destination 'title'\n // ^^^^^^^ parse this\n let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n while (titleRes.can_continue) {\n const lineContent = getNextLine(nextLine)\n if (lineContent === null) break\n str += lineContent\n pos = max\n max = str.length\n nextLine++\n titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n }\n let title\n\n if (pos < max && start !== pos && titleRes.ok) {\n title = titleRes.str\n pos = titleRes.pos\n } else {\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n }\n\n // skip trailing spaces until the rest of the line\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n if (title) {\n // garbage at the end of the line after title,\n // but it could still be a valid reference if we roll back\n title = ''\n pos = destEndPos\n nextLine = destEndLineNo\n while (pos < max) {\n const ch = str.charCodeAt(pos)\n if (!isSpace(ch)) { break }\n pos++\n }\n }\n }\n\n if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n // garbage at the end of the line\n return false\n }\n\n const label = normalizeReference(str.slice(1, labelEnd))\n if (!label) {\n // CommonMark 0.20 disallows empty labels\n return false\n }\n\n // Reference can not terminate anything. This check is for safety only.\n /* istanbul ignore if */\n if (silent) { return true }\n\n if (typeof state.env.references === 'undefined') {\n state.env.references = {}\n }\n if (typeof state.env.references[label] === 'undefined') {\n state.env.references[label] = { title, href }\n }\n\n state.line = nextLine\n return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\n 'address',\n 'article',\n 'aside',\n 'base',\n 'basefont',\n 'blockquote',\n 'body',\n 'caption',\n 'center',\n 'col',\n 'colgroup',\n 'dd',\n 'details',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'frame',\n 'frameset',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hr',\n 'html',\n 'iframe',\n 'legend',\n 'li',\n 'link',\n 'main',\n 'menu',\n 'menuitem',\n 'nav',\n 'noframes',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'param',\n 'search',\n 'section',\n 'summary',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'track',\n 'ul'\n]\n","// Regexps to match html elements\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')'\n\nconst attribute = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)'\n\nconst open_tag = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>'\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->'\nconst processing = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Za-z][^>]*>'\nconst cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n '|' + processing + '|' + declaration + '|' + cdata + ')')\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')')\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.mjs'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.mjs'\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES = [\n [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n [/^<!--/, /-->/, true],\n [/^<\\?/, /\\?>/, true],\n [/^<![A-Z]/, />/, true],\n [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n [new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true],\n [new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'), /^$/, false]\n]\n\nexport default function html_block (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n if (!state.md.options.html) { return false }\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n let lineText = state.src.slice(pos, max)\n\n let i = 0\n for (; i < HTML_SEQUENCES.length; i++) {\n if (HTML_SEQUENCES[i][0].test(lineText)) { break }\n }\n if (i === HTML_SEQUENCES.length) { return false }\n\n if (silent) {\n // true if this sequence can be a terminator, false otherwise\n return HTML_SEQUENCES[i][2]\n }\n\n let nextLine = startLine + 1\n\n // If we are here - we detected HTML block.\n // Let's roll down till block end.\n if (!HTML_SEQUENCES[i][1].test(lineText)) {\n for (; nextLine < endLine; nextLine++) {\n if (state.sCount[nextLine] < state.blkIndent) { break }\n\n pos = state.bMarks[nextLine] + state.tShift[nextLine]\n max = state.eMarks[nextLine]\n lineText = state.src.slice(pos, max)\n\n if (HTML_SEQUENCES[i][1].test(lineText)) {\n if (lineText.length !== 0) { nextLine++ }\n break\n }\n }\n }\n\n state.line = nextLine\n\n const token = state.push('html_block', '', 0)\n token.map = [startLine, nextLine]\n token.content = state.getLines(startLine, nextLine, state.blkIndent, true)\n\n return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function heading (state, startLine, endLine, silent) {\n let pos = state.bMarks[startLine] + state.tShift[startLine]\n let max = state.eMarks[startLine]\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n let ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n // count heading level\n let level = 1\n ch = state.src.charCodeAt(++pos)\n while (ch === 0x23/* # */ && pos < max && level <= 6) {\n level++\n ch = state.src.charCodeAt(++pos)\n }\n\n if (level > 6 || (pos < max && !isSpace(ch))) { return false }\n\n if (silent) { return true }\n\n // Let's cut tails like ' ### ' from the end of string\n\n max = state.skipSpacesBack(max, pos)\n const tmp = state.skipCharsBack(max, 0x23, pos) // #\n if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n max = tmp\n }\n\n state.line = startLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = '########'.slice(0, level)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = state.src.slice(pos, max).trim()\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = '########'.slice(0, level)\n\n return true\n}\n","// lheading (---, ===)\n\nexport default function lheading (state, startLine, endLine/*, silent */) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n\n // if it's indented more than 3 spaces, it should be a code block\n if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n const oldParentType = state.parentType\n state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n // jump line-by-line until empty one or EOF\n let level = 0\n let marker\n let nextLine = startLine + 1\n\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n //\n // Check for underline in setext header\n //\n if (state.sCount[nextLine] >= state.blkIndent) {\n let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n const max = state.eMarks[nextLine]\n\n if (pos < max) {\n marker = state.src.charCodeAt(pos)\n\n if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n pos = state.skipChars(pos, marker)\n pos = state.skipSpaces(pos)\n\n if (pos >= max) {\n level = (marker === 0x3D/* = */ ? 1 : 2)\n break\n }\n }\n }\n }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n if (!level) {\n // Didn't find valid underline\n return false\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine + 1\n\n const token_o = state.push('heading_open', 'h' + String(level), 1)\n token_o.markup = String.fromCharCode(marker)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line - 1]\n token_i.children = []\n\n const token_c = state.push('heading_close', 'h' + String(level), -1)\n token_c.markup = String.fromCharCode(marker)\n\n state.parentType = oldParentType\n\n return true\n}\n","// Paragraph\n\nexport default function paragraph (state, startLine, endLine) {\n const terminatorRules = state.md.block.ruler.getRules('paragraph')\n const oldParentType = state.parentType\n let nextLine = startLine + 1\n state.parentType = 'paragraph'\n\n // jump line-by-line until empty one or EOF\n for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n // this would be a code block normally, but after paragraph\n // it's considered a lazy continuation regardless of what's there\n if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n // quirk for blockquotes, this line should already be checked by that rule\n if (state.sCount[nextLine] < 0) { continue }\n\n // Some tags can terminate paragraph without empty line.\n let terminate = false\n for (let i = 0, l = terminatorRules.length; i < l; i++) {\n if (terminatorRules[i](state, nextLine, endLine, true)) {\n terminate = true\n break\n }\n }\n if (terminate) { break }\n }\n\n const content = state.getLines(startLine, nextLine, state.blkIndent, false).trim()\n\n state.line = nextLine\n\n const token_o = state.push('paragraph_open', 'p', 1)\n token_o.map = [startLine, state.line]\n\n const token_i = state.push('inline', '', 0)\n token_i.content = content\n token_i.map = [startLine, state.line]\n token_i.children = []\n\n state.push('paragraph_close', 'p', -1)\n\n state.parentType = oldParentType\n\n return true\n}\n","/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateBlock from './rules_block/state_block.mjs'\n\nimport r_table from './rules_block/table.mjs'\nimport r_code from './rules_block/code.mjs'\nimport r_fence from './rules_block/fence.mjs'\nimport r_blockquote from './rules_block/blockquote.mjs'\nimport r_hr from './rules_block/hr.mjs'\nimport r_list from './rules_block/list.mjs'\nimport r_reference from './rules_block/reference.mjs'\nimport r_html_block from './rules_block/html_block.mjs'\nimport r_heading from './rules_block/heading.mjs'\nimport r_lheading from './rules_block/lheading.mjs'\nimport r_paragraph from './rules_block/paragraph.mjs'\n\nconst _rules = [\n // First 2 params - rule name & source. Secondary array - list of rules,\n // which can be terminated by this one.\n ['table', r_table, ['paragraph', 'reference']],\n ['code', r_code],\n ['fence', r_fence, ['paragraph', 'reference', 'blockquote', 'list']],\n ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n ['hr', r_hr, ['paragraph', 'reference', 'blockquote', 'list']],\n ['list', r_list, ['paragraph', 'reference', 'blockquote']],\n ['reference', r_reference],\n ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n ['heading', r_heading, ['paragraph', 'reference', 'blockquote']],\n ['lheading', r_lheading],\n ['paragraph', r_paragraph]\n]\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock () {\n /**\n * ParserBlock#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of block rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() })\n }\n}\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n let line = startLine\n let hasEmptyLines = false\n\n while (line < endLine) {\n state.line = line = state.skipEmptyLines(line)\n if (line >= endLine) { break }\n\n // Termination condition for nested calls.\n // Nested calls currently used for blockquotes & lists\n if (state.sCount[line] < state.blkIndent) { break }\n\n // If nesting level exceeded - skip tail to the end. That's not ordinary\n // situation and we should not care about content.\n if (state.level >= maxNesting) {\n state.line = endLine\n break\n }\n\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.line`\n // - update `state.tokens`\n // - return true\n const prevLine = state.line\n let ok = false\n\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, line, endLine, false)\n if (ok) {\n if (prevLine >= state.line) {\n throw new Error(\"block rule didn't increment state.line\")\n }\n break\n }\n }\n\n // this can only happen if user disables paragraph rule\n if (!ok) throw new Error('none of the block rules matched')\n\n // set state.tight if we had an empty line before current tag\n // i.e. latest empty line should not count\n state.tight = !hasEmptyLines\n\n // paragraph might \"eat\" one newline after it in nested lists\n if (state.isEmpty(state.line - 1)) {\n hasEmptyLines = true\n }\n\n line = state.line\n\n if (line < endLine && state.isEmpty(line)) {\n hasEmptyLines = true\n line++\n state.line = line\n }\n }\n}\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n if (!src) { return }\n\n const state = new this.State(src, md, env, outTokens)\n\n this.tokenize(state, state.line, state.lineMax)\n}\n\nParserBlock.prototype.State = StateBlock\n\nexport default ParserBlock\n","// Inline parser state\n\nimport Token from '../token.mjs'\nimport { isWhiteSpace, isPunctChar, isMdAsciiPunct } from '../common/utils.mjs'\n\nfunction StateInline (src, md, env, outTokens) {\n this.src = src\n this.env = env\n this.md = md\n this.tokens = outTokens\n this.tokens_meta = Array(outTokens.length)\n\n this.pos = 0\n this.posMax = this.src.length\n this.level = 0\n this.pending = ''\n this.pendingLevel = 0\n\n // Stores { start: end } pairs. Useful for backtrack\n // optimization of pairs parse (emphasis, strikes).\n this.cache = {}\n\n // List of emphasis-like delimiters for current tag\n this.delimiters = []\n\n // Stack of delimiter lists for upper level tags\n this._prev_delimiters = []\n\n // backtick length => last seen position\n this.backticks = {}\n this.backticksScanned = false\n\n // Counter used to disable inline linkify-it execution\n // inside <a> and markdown links\n this.linkLevel = 0\n}\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n const token = new Token('text', '', 0)\n token.content = this.pending\n token.level = this.pendingLevel\n this.tokens.push(token)\n this.pending = ''\n return token\n}\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n if (this.pending) {\n this.pushPending()\n }\n\n const token = new Token(type, tag, nesting)\n let token_meta = null\n\n if (nesting < 0) {\n // closing tag\n this.level--\n this.delimiters = this._prev_delimiters.pop()\n }\n\n token.level = this.level\n\n if (nesting > 0) {\n // opening tag\n this.level++\n this._prev_delimiters.push(this.delimiters)\n this.delimiters = []\n token_meta = { delimiters: this.delimiters }\n }\n\n this.pendingLevel = this.level\n this.tokens.push(token)\n this.tokens_meta.push(token_meta)\n return token\n}\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n// - start - position to scan from (it should point at a valid marker);\n// - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n const max = this.posMax\n const marker = this.src.charCodeAt(start)\n\n // treat beginning of the line as a whitespace\n const lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20\n\n let pos = start\n while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n const count = pos - start\n\n // treat end of the line as a whitespace\n const nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n\n const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar))\n const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar))\n\n const isLastWhiteSpace = isWhiteSpace(lastChar)\n const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n const left_flanking =\n !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n const right_flanking =\n !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\n\n return { can_open, can_close, length: count }\n}\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar (ch) {\n switch (ch) {\n case 0x0A/* \\n */:\n case 0x21/* ! */:\n case 0x23/* # */:\n case 0x24/* $ */:\n case 0x25/* % */:\n case 0x26/* & */:\n case 0x2A/* * */:\n case 0x2B/* + */:\n case 0x2D/* - */:\n case 0x3A/* : */:\n case 0x3C/* < */:\n case 0x3D/* = */:\n case 0x3E/* > */:\n case 0x40/* @ */:\n case 0x5B/* [ */:\n case 0x5C/* \\ */:\n case 0x5D/* ] */:\n case 0x5E/* ^ */:\n case 0x5F/* _ */:\n case 0x60/* ` */:\n case 0x7B/* { */:\n case 0x7D/* } */:\n case 0x7E/* ~ */:\n return true\n default:\n return false\n }\n}\n\nexport default function text (state, silent) {\n let pos = state.pos\n\n while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n pos++\n }\n\n if (pos === state.pos) { return false }\n\n if (!silent) { state.pending += state.src.slice(state.pos, pos) }\n\n state.pos = pos\n\n return true\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParserInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n var pos = state.pos,\n idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n // first char is terminator -> empty text\n if (idx === 0) { return false; }\n\n // no terminator -> text till end of string\n if (idx < 0) {\n if (!silent) { state.pending += state.src.slice(pos); }\n state.pos = state.src.length;\n return true;\n }\n\n if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n state.pos += idx;\n\n return true;\n}; */\n","// Process links like https://example.org/\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nconst SCHEME_RE = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i\n\nexport default function linkify (state, silent) {\n if (!state.md.options.linkify) return false\n if (state.linkLevel > 0) return false\n\n const pos = state.pos\n const max = state.posMax\n\n if (pos + 3 > max) return false\n if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n const match = state.pending.match(SCHEME_RE)\n if (!match) return false\n\n const proto = match[1]\n\n const link = state.md.linkify.matchAtStart(state.src.slice(pos - proto.length))\n if (!link) return false\n\n let url = link.url\n\n // invalid link, but still detected by linkify somehow;\n // need to check to prevent infinite loop below\n if (url.length <= proto.length) return false\n\n // disallow '*' at the end of the link (conflicts with emphasis)\n url = url.replace(/\\*+$/, '')\n\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) return false\n\n if (!silent) {\n state.pending = state.pending.slice(0, -proto.length)\n\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'linkify'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'linkify'\n token_c.info = 'auto'\n }\n\n state.pos += url.length - proto.length\n return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.mjs'\n\nexport default function newline (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n const pmax = state.pending.length - 1\n const max = state.posMax\n\n // ' \\n' -> hardbreak\n // Lookup in pending chars is bad practice! Don't copy to other rules!\n // Pending string is stored in concat mode, indexed lookups will cause\n // convertion to flat mode.\n if (!silent) {\n if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n // Find whitespaces tail of pending chars.\n let ws = pmax - 1\n while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n state.pending = state.pending.slice(0, ws)\n state.push('hardbreak', 'br', 0)\n } else {\n state.pending = state.pending.slice(0, -1)\n state.push('softbreak', 'br', 0)\n }\n } else {\n state.push('softbreak', 'br', 0)\n }\n }\n\n pos++\n\n // skip heading spaces for next line\n while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }\n\n state.pos = pos\n return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.mjs'\n\nconst ESCAPED = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state, silent) {\n let pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n pos++\n\n // '\\' at the end of the inline block\n if (pos >= max) return false\n\n let ch1 = state.src.charCodeAt(pos)\n\n if (ch1 === 0x0A) {\n if (!silent) {\n state.push('hardbreak', 'br', 0)\n }\n\n pos++\n // skip leading whitespaces from next line\n while (pos < max) {\n ch1 = state.src.charCodeAt(pos)\n if (!isSpace(ch1)) break\n pos++\n }\n\n state.pos = pos\n return true\n }\n\n let escapedStr = state.src[pos]\n\n if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n const ch2 = state.src.charCodeAt(pos + 1)\n\n if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n escapedStr += state.src[pos + 1]\n pos++\n }\n }\n\n const origStr = '\\\\' + escapedStr\n\n if (!silent) {\n const token = state.push('text_special', '', 0)\n\n if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n token.content = escapedStr\n } else {\n token.content = origStr\n }\n\n token.markup = origStr\n token.info = 'escape'\n }\n\n state.pos = pos + 1\n return true\n}\n","// Parse backticks\n\nexport default function backtick (state, silent) {\n let pos = state.pos\n const ch = state.src.charCodeAt(pos)\n\n if (ch !== 0x60/* ` */) { return false }\n\n const start = pos\n pos++\n const max = state.posMax\n\n // scan marker length\n while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n const marker = state.src.slice(start, pos)\n const openerLength = marker.length\n\n if (state.backticksScanned && (state.backticks[openerLength] || 0) <= start) {\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n }\n\n let matchEnd = pos\n let matchStart\n\n // Nothing found in the cache, scan until the end of the line (or until marker is found)\n while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n matchEnd = matchStart + 1\n\n // scan marker length\n while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n const closerLength = matchEnd - matchStart\n\n if (closerLength === openerLength) {\n // Found matching closer length.\n if (!silent) {\n const token = state.push('code_inline', 'code', 0)\n token.markup = marker\n token.content = state.src.slice(pos, matchStart)\n .replace(/\\n/g, ' ')\n .replace(/^ (.+) $/, '$1')\n }\n state.pos = matchEnd\n return true\n }\n\n // Some different length found, put it in cache as upper limit of where closer can be found\n state.backticks[closerLength] = matchStart\n }\n\n // Scanned through the end, didn't find anything\n state.backticksScanned = true\n\n if (!silent) state.pending += marker\n state.pos += openerLength\n return true\n}\n","// ~~strike through~~\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x7E/* ~ */) { return false }\n\n const scanned = state.scanDelims(state.pos, true)\n let len = scanned.length\n const ch = String.fromCharCode(marker)\n\n if (len < 2) { return false }\n\n let token\n\n if (len % 2) {\n token = state.push('text', '', 0)\n token.content = ch\n len--\n }\n\n for (let i = 0; i < len; i += 2) {\n token = state.push('text', '', 0)\n token.content = ch + ch\n\n state.delimiters.push({\n marker,\n length: 0, // disable \"rule of 3\" length checks meant for emphasis\n token: state.tokens.length - 1,\n end: -1,\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n let token\n const loneMarkers = []\n const max = delimiters.length\n\n for (let i = 0; i < max; i++) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x7E/* ~ */) {\n continue\n }\n\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n token = state.tokens[startDelim.token]\n token.type = 's_open'\n token.tag = 's'\n token.nesting = 1\n token.markup = '~~'\n token.content = ''\n\n token = state.tokens[endDelim.token]\n token.type = 's_close'\n token.tag = 's'\n token.nesting = -1\n token.markup = '~~'\n token.content = ''\n\n if (state.tokens[endDelim.token - 1].type === 'text' &&\n state.tokens[endDelim.token - 1].content === '~') {\n loneMarkers.push(endDelim.token - 1)\n }\n }\n\n // If a marker sequence has an odd number of characters, it's splitted\n // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n // start of the sequence.\n //\n // So, we have to move all those markers after subsequent s_close tags.\n //\n while (loneMarkers.length) {\n const i = loneMarkers.pop()\n let j = i + 1\n\n while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n j++\n }\n\n j--\n\n if (i !== j) {\n token = state.tokens[j]\n state.tokens[j] = state.tokens[i]\n state.tokens[i] = token\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: strikethrough_tokenize,\n postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state, silent) {\n const start = state.pos\n const marker = state.src.charCodeAt(start)\n\n if (silent) { return false }\n\n if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n for (let i = 0; i < scanned.length; i++) {\n const token = state.push('text', '', 0)\n token.content = String.fromCharCode(marker)\n\n state.delimiters.push({\n // Char code of the starting marker (number).\n //\n marker,\n\n // Total length of these series of delimiters.\n //\n length: scanned.length,\n\n // A position of the token this delimiter corresponds to.\n //\n token: state.tokens.length - 1,\n\n // If this delimiter is matched as a valid opener, `end` will be\n // equal to its position, otherwise it's `-1`.\n //\n end: -1,\n\n // Boolean flags that determine if this delimiter could open or close\n // an emphasis.\n //\n open: scanned.can_open,\n close: scanned.can_close\n })\n }\n\n state.pos += scanned.length\n\n return true\n}\n\nfunction postProcess (state, delimiters) {\n const max = delimiters.length\n\n for (let i = max - 1; i >= 0; i--) {\n const startDelim = delimiters[i]\n\n if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n continue\n }\n\n // Process only opening markers\n if (startDelim.end === -1) {\n continue\n }\n\n const endDelim = delimiters[startDelim.end]\n\n // If the previous delimiter has the same marker and is adjacent to this one,\n // merge those into one strong delimiter.\n //\n // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n //\n const isStrong = i > 0 &&\n delimiters[i - 1].end === startDelim.end + 1 &&\n // check that first two markers match and adjacent\n delimiters[i - 1].marker === startDelim.marker &&\n delimiters[i - 1].token === startDelim.token - 1 &&\n // check that last two markers are adjacent (we can safely assume they match)\n delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n const ch = String.fromCharCode(startDelim.marker)\n\n const token_o = state.tokens[startDelim.token]\n token_o.type = isStrong ? 'strong_open' : 'em_open'\n token_o.tag = isStrong ? 'strong' : 'em'\n token_o.nesting = 1\n token_o.markup = isStrong ? ch + ch : ch\n token_o.content = ''\n\n const token_c = state.tokens[endDelim.token]\n token_c.type = isStrong ? 'strong_close' : 'em_close'\n token_c.tag = isStrong ? 'strong' : 'em'\n token_c.nesting = -1\n token_c.markup = isStrong ? ch + ch : ch\n token_c.content = ''\n\n if (isStrong) {\n state.tokens[delimiters[i - 1].token].content = ''\n state.tokens[delimiters[startDelim.end + 1].token].content = ''\n i--\n }\n }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n postProcess(state, state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n postProcess(state, tokens_meta[curr].delimiters)\n }\n }\n}\n\nexport default {\n tokenize: emphasis_tokenize,\n postProcess: emphasis_post_process\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n let code, label, res, ref\n let href = ''\n let title = ''\n let start = state.pos\n let parseReference = true\n\n if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n const oldPos = state.pos\n const max = state.posMax\n const labelStart = state.pos + 1\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n let pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // might have found a valid shortcut link, disable reference parsing\n parseReference = false\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n }\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n // parsing a valid shortcut link failed, fallback to reference\n parseReference = true\n }\n pos++\n }\n\n if (parseReference) {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n state.pos = labelStart\n state.posMax = labelEnd\n\n const token_o = state.push('link_open', 'a', 1)\n const attrs = [['href', href]]\n token_o.attrs = attrs\n if (title) {\n attrs.push(['title', title])\n }\n\n state.linkLevel++\n state.md.inline.tokenize(state)\n state.linkLevel--\n\n state.push('link_close', 'a', -1)\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process ![image](<src> \"title\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n let code, content, label, pos, ref, res, title, start\n let href = ''\n const oldPos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n const labelStart = state.pos + 2\n const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n // parser failed to find ']', so it's not a valid link\n if (labelEnd < 0) { return false }\n\n pos = labelEnd + 1\n if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n //\n // Inline link\n //\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n pos++\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n if (pos >= max) { return false }\n\n // [link]( <href> \"title\" )\n // ^^^^^^ parsing link destination\n start = pos\n res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n if (res.ok) {\n href = state.md.normalizeLink(res.str)\n if (state.md.validateLink(href)) {\n pos = res.pos\n } else {\n href = ''\n }\n }\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n start = pos\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n\n // [link]( <href> \"title\" )\n // ^^^^^^^ parsing link title\n res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n if (pos < max && start !== pos && res.ok) {\n title = res.str\n pos = res.pos\n\n // [link]( <href> \"title\" )\n // ^^ skipping these spaces\n for (; pos < max; pos++) {\n code = state.src.charCodeAt(pos)\n if (!isSpace(code) && code !== 0x0A) { break }\n }\n } else {\n title = ''\n }\n\n if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n state.pos = oldPos\n return false\n }\n pos++\n } else {\n //\n // Link reference\n //\n if (typeof state.env.references === 'undefined') { return false }\n\n if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n start = pos + 1\n pos = state.md.helpers.parseLinkLabel(state, pos)\n if (pos >= 0) {\n label = state.src.slice(start, pos++)\n } else {\n pos = labelEnd + 1\n }\n } else {\n pos = labelEnd + 1\n }\n\n // covers label === '' and label === undefined\n // (collapsed reference link and shortcut reference link respectively)\n if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n ref = state.env.references[normalizeReference(label)]\n if (!ref) {\n state.pos = oldPos\n return false\n }\n href = ref.href\n title = ref.title\n }\n\n //\n // We found the end of the link, and know for a fact it's a valid link;\n // so all that's left to do is to call tokenizer.\n //\n if (!silent) {\n content = state.src.slice(labelStart, labelEnd)\n\n const tokens = []\n state.md.inline.parse(\n content,\n state.md,\n state.env,\n tokens\n )\n\n const token = state.push('image', 'img', 0)\n const attrs = [['src', href], ['alt', '']]\n token.attrs = attrs\n token.children = tokens\n token.content = content\n\n if (title) {\n attrs.push(['title', title])\n }\n }\n\n state.pos = pos\n state.posMax = max\n return true\n}\n","// Process autolinks '<protocol:...>'\n\n/* eslint max-len:0 */\nconst EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state, silent) {\n let pos = state.pos\n\n if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n const start = state.pos\n const max = state.posMax\n\n for (;;) {\n if (++pos >= max) return false\n\n const ch = state.src.charCodeAt(pos)\n\n if (ch === 0x3C /* < */) return false\n if (ch === 0x3E /* > */) break\n }\n\n const url = state.src.slice(start + 1, pos)\n\n if (AUTOLINK_RE.test(url)) {\n const fullUrl = state.md.normalizeLink(url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n if (EMAIL_RE.test(url)) {\n const fullUrl = state.md.normalizeLink('mailto:' + url)\n if (!state.md.validateLink(fullUrl)) { return false }\n\n if (!silent) {\n const token_o = state.push('link_open', 'a', 1)\n token_o.attrs = [['href', fullUrl]]\n token_o.markup = 'autolink'\n token_o.info = 'auto'\n\n const token_t = state.push('text', '', 0)\n token_t.content = state.md.normalizeLinkText(url)\n\n const token_c = state.push('link_close', 'a', -1)\n token_c.markup = 'autolink'\n token_c.info = 'auto'\n }\n\n state.pos += url.length + 2\n return true\n }\n\n return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.mjs'\n\nfunction isLinkOpen (str) {\n return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str) {\n return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch) {\n /* eslint no-bitwise:0 */\n const lc = ch | 0x20 // to lower case\n return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state, silent) {\n if (!state.md.options.html) { return false }\n\n // Check start\n const max = state.posMax\n const pos = state.pos\n if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n pos + 2 >= max) {\n return false\n }\n\n // Quick fail on second char\n const ch = state.src.charCodeAt(pos + 1)\n if (ch !== 0x21/* ! */ &&\n ch !== 0x3F/* ? */ &&\n ch !== 0x2F/* / */ &&\n !isLetter(ch)) {\n return false\n }\n\n const match = state.src.slice(pos).match(HTML_TAG_RE)\n if (!match) { return false }\n\n if (!silent) {\n const token = state.push('html_inline', '', 0)\n token.content = match[0]\n\n if (isLinkOpen(token.content)) state.linkLevel++\n if (isLinkClose(token.content)) state.linkLevel--\n }\n state.pos += match[0].length\n return true\n}\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\nimport { decodeHTML } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.mjs'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state, silent) {\n const pos = state.pos\n const max = state.posMax\n\n if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n if (pos + 1 >= max) return false\n\n const ch = state.src.charCodeAt(pos + 1)\n\n if (ch === 0x23 /* # */) {\n const match = state.src.slice(pos).match(DIGITAL_RE)\n if (match) {\n if (!silent) {\n const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n const token = state.push('text_special', '', 0)\n token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n } else {\n const match = state.src.slice(pos).match(NAMED_RE)\n if (match) {\n const decoded = decodeHTML(match[0])\n if (decoded !== match[0]) {\n if (!silent) {\n const token = state.push('text_special', '', 0)\n token.content = decoded\n token.markup = match[0]\n token.info = 'entity'\n }\n state.pos += match[0].length\n return true\n }\n }\n }\n\n return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n const openersBottom = {}\n const max = delimiters.length\n\n if (!max) return\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n let headerIdx = 0\n let lastTokenIdx = -2 // needs any value lower than -1\n const jumps = []\n\n for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n const closer = delimiters[closerIdx]\n\n jumps.push(0)\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx\n }\n\n lastTokenIdx = closer.token\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0\n\n if (!closer.close) continue\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n /* eslint-disable-next-line no-prototype-builtins */\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n }\n\n const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n let newMinOpenerIdx = openerIdx\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n const opener = delimiters[openerIdx]\n\n if (opener.marker !== closer.marker) continue\n\n if (opener.open && opener.end < 0) {\n let isOddMatch = false\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n ? jumps[openerIdx - 1] + 1\n : 0\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump\n jumps[openerIdx] = lastJump\n\n closer.open = false\n opener.end = closerIdx\n opener.close = false\n newMinOpenerIdx = -1\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2\n break\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n }\n }\n}\n\nexport default function link_pairs (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n processDelimiters(state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(tokens_meta[curr].delimiters)\n }\n }\n}\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nexport default function fragments_join (state) {\n let curr, last\n let level = 0\n const tokens = state.tokens\n const max = state.tokens.length\n\n for (curr = last = 0; curr < max; curr++) {\n // re-calculate levels after emphasis/strikethrough turns some text nodes\n // into opening/closing tags\n if (tokens[curr].nesting < 0) level-- // closing tag\n tokens[curr].level = level\n if (tokens[curr].nesting > 0) level++ // opening tag\n\n if (tokens[curr].type === 'text' &&\n curr + 1 < max &&\n tokens[curr + 1].type === 'text') {\n // collapse two adjacent text nodes\n tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n } else {\n if (curr !== last) { tokens[last] = tokens[curr] }\n\n last++\n }\n }\n\n if (curr !== last) {\n tokens.length = last\n }\n}\n","/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n\nimport Ruler from './ruler.mjs'\nimport StateInline from './rules_inline/state_inline.mjs'\n\nimport r_text from './rules_inline/text.mjs'\nimport r_linkify from './rules_inline/linkify.mjs'\nimport r_newline from './rules_inline/newline.mjs'\nimport r_escape from './rules_inline/escape.mjs'\nimport r_backticks from './rules_inline/backticks.mjs'\nimport r_strikethrough from './rules_inline/strikethrough.mjs'\nimport r_emphasis from './rules_inline/emphasis.mjs'\nimport r_link from './rules_inline/link.mjs'\nimport r_image from './rules_inline/image.mjs'\nimport r_autolink from './rules_inline/autolink.mjs'\nimport r_html_inline from './rules_inline/html_inline.mjs'\nimport r_entity from './rules_inline/entity.mjs'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.mjs'\nimport r_fragments_join from './rules_inline/fragments_join.mjs'\n\n// Parser rules\n\nconst _rules = [\n ['text', r_text],\n ['linkify', r_linkify],\n ['newline', r_newline],\n ['escape', r_escape],\n ['backticks', r_backticks],\n ['strikethrough', r_strikethrough.tokenize],\n ['emphasis', r_emphasis.tokenize],\n ['link', r_link],\n ['image', r_image],\n ['autolink', r_autolink],\n ['html_inline', r_html_inline],\n ['entity', r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2 = [\n ['balance_pairs', r_balance_pairs],\n ['strikethrough', r_strikethrough.postProcess],\n ['emphasis', r_emphasis.postProcess],\n // rules for pairs separate '**' into its own text tokens, which may be left unused,\n // rule below merges unused segments back with the rest of the text\n ['fragments_join', r_fragments_join]\n]\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline () {\n /**\n * ParserInline#ruler -> Ruler\n *\n * [[Ruler]] instance. Keep configuration of inline rules.\n **/\n this.ruler = new Ruler()\n\n for (let i = 0; i < _rules.length; i++) {\n this.ruler.push(_rules[i][0], _rules[i][1])\n }\n\n /**\n * ParserInline#ruler2 -> Ruler\n *\n * [[Ruler]] instance. Second ruler used for post-processing\n * (e.g. in emphasis-like rules).\n **/\n this.ruler2 = new Ruler()\n\n for (let i = 0; i < _rules2.length; i++) {\n this.ruler2.push(_rules2[i][0], _rules2[i][1])\n }\n}\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n const pos = state.pos\n const rules = this.ruler.getRules('')\n const len = rules.length\n const maxNesting = state.md.options.maxNesting\n const cache = state.cache\n\n if (typeof cache[pos] !== 'undefined') {\n state.pos = cache[pos]\n return\n }\n\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n // Increment state.level and decrement it later to limit recursion.\n // It's harmless to do here, because no tokens are created. But ideally,\n // we'd need a separate private state variable for this purpose.\n //\n state.level++\n ok = rules[i](state, true)\n state.level--\n\n if (ok) {\n if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n } else {\n // Too much nesting, just skip until the end of the paragraph.\n //\n // NOTE: this will cause links to behave incorrectly in the following case,\n // when an amount of `[` is exactly equal to `maxNesting + 1`:\n //\n // [[[[[[[[[[[[[[[[[[[[[foo]()\n //\n // TODO: remove this workaround when CM standard will allow nested links\n // (we can replace it by preventing links from being parsed in\n // validation mode)\n //\n state.pos = state.posMax\n }\n\n if (!ok) { state.pos++ }\n cache[pos] = state.pos\n}\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n const rules = this.ruler.getRules('')\n const len = rules.length\n const end = state.posMax\n const maxNesting = state.md.options.maxNesting\n\n while (state.pos < end) {\n // Try all possible rules.\n // On success, rule should:\n //\n // - update `state.pos`\n // - update `state.tokens`\n // - return true\n const prevPos = state.pos\n let ok = false\n\n if (state.level < maxNesting) {\n for (let i = 0; i < len; i++) {\n ok = rules[i](state, false)\n if (ok) {\n if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n break\n }\n }\n }\n\n if (ok) {\n if (state.pos >= end) { break }\n continue\n }\n\n state.pending += state.src[state.pos++]\n }\n\n if (state.pending) {\n state.pushPending()\n }\n}\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n const state = new this.State(str, md, env, outTokens)\n\n this.tokenize(state)\n\n const rules = this.ruler2.getRules('')\n const len = rules.length\n\n for (let i = 0; i < len; i++) {\n rules[i](state)\n }\n}\n\nParserInline.prototype.State = StateInline\n\nexport default ParserInline\n","import { Any, Cc, Z, P } from 'uc.micro'\n\nexport default function (opts) {\n const re = {}\n opts = opts || {}\n\n re.src_Any = Any.source\n re.src_Cc = Cc.source\n re.src_Z = Z.source\n re.src_P = P.source\n\n // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n re.src_ZPCc = [re.src_Z, re.src_P, re.src_Cc].join('|')\n\n // \\p{\\Z\\Cc} (white spaces + control)\n re.src_ZCc = [re.src_Z, re.src_Cc].join('|')\n\n // Experimental. List of chars, completely prohibited in links\n // because can separate it from other part of text\n const text_separators = '[><\\uff5c]'\n\n // All possible word characters (everything without punctuation, spaces & controls)\n // Defined via punctuation & spaces to save space\n // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n re.src_pseudo_letter = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')'\n // The same as abothe but without [0-9]\n // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n re.src_ip4 =\n\n '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'\n\n // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n re.src_auth = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?'\n\n re.src_port =\n\n '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?'\n\n re.src_host_terminator =\n\n '(?=$|' + text_separators + '|' + re.src_ZPCc + ')' +\n '(?!' + (opts['---'] ? '-(?!--)|' : '-|') + '_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))'\n\n re.src_path =\n\n '(?:' +\n '[/?#]' +\n '(?:' +\n '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-;]).|' +\n '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n\n // allow `I'm_king` if no pair found\n \"\\\\'(?=\" + re.src_pseudo_letter + '|[-])|' +\n\n // google has many dots in \"google search\" links (#66, #81).\n // github has ... in commit range links,\n // Restrict to\n // - english\n // - percent-encoded\n // - parts of file path\n // - params separator\n // until more examples found.\n '\\\\.{2,}[a-zA-Z0-9%/&]|' +\n\n '\\\\.(?!' + re.src_ZCc + '|[.]|$)|' +\n (opts['---']\n ? '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n : '\\\\-+|'\n ) +\n // allow `,,,` in paths\n ',(?!' + re.src_ZCc + '|$)|' +\n\n // allow `;` if not followed by space-like char\n ';(?!' + re.src_ZCc + '|$)|' +\n\n // allow `!!!` in paths, but not at the end\n '\\\\!+(?!' + re.src_ZCc + '|[!]|$)|' +\n\n '\\\\?(?!' + re.src_ZCc + '|[?]|$)' +\n ')+' +\n '|\\\\/' +\n ')?'\n\n // Allow anything in markdown spec, forbid quote (\") at the first position\n // because emails enclosed in quotes are far more common\n re.src_email_name =\n\n '[\\\\-;:&=\\\\+\\\\$,\\\\.a-zA-Z0-9_][\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]*'\n\n re.src_xn =\n\n 'xn--[a-z0-9\\\\-]{1,59}'\n\n // More to read about domain names\n // http://serverfault.com/questions/638260/\n\n re.src_domain_root =\n\n // Allow letters & digits (http://test1)\n '(?:' +\n re.src_xn +\n '|' +\n re.src_pseudo_letter + '{1,63}' +\n ')'\n\n re.src_domain =\n\n '(?:' +\n re.src_xn +\n '|' +\n '(?:' + re.src_pseudo_letter + ')' +\n '|' +\n '(?:' + re.src_pseudo_letter + '(?:-|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n ')'\n\n re.src_host =\n\n '(?:' +\n // Don't need IP check, because digits are already allowed in normal domain names\n // src_ip4 +\n // '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/* _root */ + ')' +\n ')'\n\n re.tpl_host_fuzzy =\n\n '(?:' +\n re.src_ip4 +\n '|' +\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n ')'\n\n re.tpl_host_no_ip_fuzzy =\n\n '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))'\n\n re.src_host_strict =\n\n re.src_host + re.src_host_terminator\n\n re.tpl_host_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_host_terminator\n\n re.src_host_port_strict =\n\n re.src_host + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_fuzzy_strict =\n\n re.tpl_host_fuzzy + re.src_port + re.src_host_terminator\n\n re.tpl_host_port_no_ip_fuzzy_strict =\n\n re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator\n\n //\n // Main rules\n //\n\n // Rude test fuzzy links by host, for quick deny\n re.tpl_host_fuzzy_test =\n\n 'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))'\n\n re.tpl_email_fuzzy =\n\n '(^|' + text_separators + '|\"|\\\\(|' + re.src_ZCc + ')' +\n '(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')'\n\n re.tpl_link_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')'\n\n re.tpl_link_no_ip_fuzzy =\n // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n // but can start with > (markdown blockquote)\n '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')'\n\n return re\n}\n","import reFactory from './lib/re.mjs'\n\n//\n// Helpers\n//\n\n// Merge objects\n//\nfunction assign (obj /* from1, from2, from3, ... */) {\n const sources = Array.prototype.slice.call(arguments, 1)\n\n sources.forEach(function (source) {\n if (!source) { return }\n\n Object.keys(source).forEach(function (key) {\n obj[key] = source[key]\n })\n })\n\n return obj\n}\n\nfunction _class (obj) { return Object.prototype.toString.call(obj) }\nfunction isString (obj) { return _class(obj) === '[object String]' }\nfunction isObject (obj) { return _class(obj) === '[object Object]' }\nfunction isRegExp (obj) { return _class(obj) === '[object RegExp]' }\nfunction isFunction (obj) { return _class(obj) === '[object Function]' }\n\nfunction escapeRE (str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n//\n\nconst defaultOptions = {\n fuzzyLink: true,\n fuzzyEmail: true,\n fuzzyIP: false\n}\n\nfunction isOptionsObj (obj) {\n return Object.keys(obj || {}).reduce(function (acc, k) {\n /* eslint-disable-next-line no-prototype-builtins */\n return acc || defaultOptions.hasOwnProperty(k)\n }, false)\n}\n\nconst defaultSchemas = {\n 'http:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.http = new RegExp(\n '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n )\n }\n if (self.re.http.test(tail)) {\n return tail.match(self.re.http)[0].length\n }\n return 0\n }\n },\n 'https:': 'http:',\n 'ftp:': 'http:',\n '//': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.no_http) {\n // compile lazily, because \"host\"-containing variables can change on tlds update.\n self.re.no_http = new RegExp(\n '^' +\n self.re.src_auth +\n // Don't allow single-level domains, because of false positives like '//test'\n // with code comments\n '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n self.re.src_port +\n self.re.src_host_terminator +\n self.re.src_path,\n\n 'i'\n )\n }\n\n if (self.re.no_http.test(tail)) {\n // should not be `://` & `///`, that protects from errors in protocol name\n if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n return tail.match(self.re.no_http)[0].length\n }\n return 0\n }\n },\n 'mailto:': {\n validate: function (text, pos, self) {\n const tail = text.slice(pos)\n\n if (!self.re.mailto) {\n self.re.mailto = new RegExp(\n '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n )\n }\n if (self.re.mailto.test(tail)) {\n return tail.match(self.re.mailto)[0].length\n }\n return 0\n }\n }\n}\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\n/* eslint-disable-next-line max-len */\nconst tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|')\n\nfunction resetScanCache (self) {\n self.__index__ = -1\n self.__text_cache__ = ''\n}\n\nfunction createValidator (re) {\n return function (text, pos) {\n const tail = text.slice(pos)\n\n if (re.test(tail)) {\n return tail.match(re)[0].length\n }\n return 0\n }\n}\n\nfunction createNormalizer () {\n return function (match, self) {\n self.normalize(match)\n }\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile (self) {\n // Load & clone RE patterns.\n const re = self.re = reFactory(self.__opts__)\n\n // Define dynamic patterns\n const tlds = self.__tlds__.slice()\n\n self.onCompile()\n\n if (!self.__tlds_replaced__) {\n tlds.push(tlds_2ch_src_re)\n }\n tlds.push(re.src_xn)\n\n re.src_tlds = tlds.join('|')\n\n function untpl (tpl) { return tpl.replace('%TLDS%', re.src_tlds) }\n\n re.email_fuzzy = RegExp(untpl(re.tpl_email_fuzzy), 'i')\n re.link_fuzzy = RegExp(untpl(re.tpl_link_fuzzy), 'i')\n re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i')\n re.host_fuzzy_test = RegExp(untpl(re.tpl_host_fuzzy_test), 'i')\n\n //\n // Compile each schema\n //\n\n const aliases = []\n\n self.__compiled__ = {} // Reset compiled data\n\n function schemaError (name, val) {\n throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val)\n }\n\n Object.keys(self.__schemas__).forEach(function (name) {\n const val = self.__schemas__[name]\n\n // skip disabled methods\n if (val === null) { return }\n\n const compiled = { validate: null, link: null }\n\n self.__compiled__[name] = compiled\n\n if (isObject(val)) {\n if (isRegExp(val.validate)) {\n compiled.validate = createValidator(val.validate)\n } else if (isFunction(val.validate)) {\n compiled.validate = val.validate\n } else {\n schemaError(name, val)\n }\n\n if (isFunction(val.normalize)) {\n compiled.normalize = val.normalize\n } else if (!val.normalize) {\n compiled.normalize = createNormalizer()\n } else {\n schemaError(name, val)\n }\n\n return\n }\n\n if (isString(val)) {\n aliases.push(name)\n return\n }\n\n schemaError(name, val)\n })\n\n //\n // Compile postponed aliases\n //\n\n aliases.forEach(function (alias) {\n if (!self.__compiled__[self.__schemas__[alias]]) {\n // Silently fail on missed schemas to avoid errons on disable.\n // schemaError(alias, self.__schemas__[alias]);\n return\n }\n\n self.__compiled__[alias].validate =\n self.__compiled__[self.__schemas__[alias]].validate\n self.__compiled__[alias].normalize =\n self.__compiled__[self.__schemas__[alias]].normalize\n })\n\n //\n // Fake record for guessed links\n //\n self.__compiled__[''] = { validate: null, normalize: createNormalizer() }\n\n //\n // Build schema condition\n //\n const slist = Object.keys(self.__compiled__)\n .filter(function (name) {\n // Filter disabled & fake schemas\n return name.length > 0 && self.__compiled__[name]\n })\n .map(escapeRE)\n .join('|')\n // (?!_) cause 1.5x slowdown\n self.re.schema_test = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i')\n self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig')\n self.re.schema_at_start = RegExp('^' + self.re.schema_search.source, 'i')\n\n self.re.pretest = RegExp(\n '(' + self.re.schema_test.source + ')|(' + self.re.host_fuzzy_test.source + ')|@',\n 'i'\n )\n\n //\n // Cleanup\n //\n\n resetScanCache(self)\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match (self, shift) {\n const start = self.__index__\n const end = self.__last_index__\n const text = self.__text_cache__.slice(start, end)\n\n /**\n * Match#schema -> String\n *\n * Prefix (protocol) for matched string.\n **/\n this.schema = self.__schema__.toLowerCase()\n /**\n * Match#index -> Number\n *\n * First position of matched string.\n **/\n this.index = start + shift\n /**\n * Match#lastIndex -> Number\n *\n * Next position after matched string.\n **/\n this.lastIndex = end + shift\n /**\n * Match#raw -> String\n *\n * Matched string.\n **/\n this.raw = text\n /**\n * Match#text -> String\n *\n * Notmalized text of matched string.\n **/\n this.text = text\n /**\n * Match#url -> String\n *\n * Normalized url of matched string.\n **/\n this.url = text\n}\n\nfunction createMatch (self, shift) {\n const match = new Match(self, shift)\n\n self.__compiled__[match.schema].normalize(match, self)\n\n return match\n}\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n * for example). `linkify-it` makes shure that prefix is not preceeded with\n * alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n * - _String_ - just alias to existing rule\n * - _Object_\n * - _validate_ - validator function (should return matched length on success),\n * or `RegExp`.\n * - _normalize_ - optional function to normalize text & url of matched result\n * (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n * like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt (schemas, options) {\n if (!(this instanceof LinkifyIt)) {\n return new LinkifyIt(schemas, options)\n }\n\n if (!options) {\n if (isOptionsObj(schemas)) {\n options = schemas\n schemas = {}\n }\n }\n\n this.__opts__ = assign({}, defaultOptions, options)\n\n // Cache last tested result. Used to skip repeating steps on next `match` call.\n this.__index__ = -1\n this.__last_index__ = -1 // Next scan position\n this.__schema__ = ''\n this.__text_cache__ = ''\n\n this.__schemas__ = assign({}, defaultSchemas, schemas)\n this.__compiled__ = {}\n\n this.__tlds__ = tlds_default\n this.__tlds_replaced__ = false\n\n this.re = {}\n\n compile(this)\n}\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add (schema, definition) {\n this.__schemas__[schema] = definition\n compile(this)\n return this\n}\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set (options) {\n this.__opts__ = assign(this.__opts__, options)\n return this\n}\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) { return false }\n\n let m, ml, me, len, shift, next, re, tld_pos, at_pos\n\n // try to scan for link with schema - that's the most simple rule\n if (this.re.schema_test.test(text)) {\n re = this.re.schema_search\n re.lastIndex = 0\n while ((m = re.exec(text)) !== null) {\n len = this.testSchemaAt(text, m[2], re.lastIndex)\n if (len) {\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n break\n }\n }\n }\n\n if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n // guess schemaless links\n tld_pos = text.search(this.re.host_fuzzy_test)\n if (tld_pos >= 0) {\n // if tld is located after found link - no need to check fuzzy pattern\n if (this.__index__ < 0 || tld_pos < this.__index__) {\n if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n shift = ml.index + ml[1].length\n\n if (this.__index__ < 0 || shift < this.__index__) {\n this.__schema__ = ''\n this.__index__ = shift\n this.__last_index__ = ml.index + ml[0].length\n }\n }\n }\n }\n }\n\n if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n // guess schemaless emails\n at_pos = text.indexOf('@')\n if (at_pos >= 0) {\n // We can't skip this check, because this cases are possible:\n // 192.168.1.1@gmail.com, my.in@example.com\n if ((me = text.match(this.re.email_fuzzy)) !== null) {\n shift = me.index + me[1].length\n next = me.index + me[0].length\n\n if (this.__index__ < 0 || shift < this.__index__ ||\n (shift === this.__index__ && next > this.__last_index__)) {\n this.__schema__ = 'mailto:'\n this.__index__ = shift\n this.__last_index__ = next\n }\n }\n }\n }\n\n return this.__index__ >= 0\n}\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest (text) {\n return this.re.pretest.test(text)\n}\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt (text, schema, pos) {\n // If not supported schema check requested - terminate\n if (!this.__compiled__[schema.toLowerCase()]) {\n return 0\n }\n return this.__compiled__[schema.toLowerCase()].validate(text, pos, this)\n}\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n * protocol-neutral links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match (text) {\n const result = []\n let shift = 0\n\n // Try to take previous element from cache, if .test() called before\n if (this.__index__ >= 0 && this.__text_cache__ === text) {\n result.push(createMatch(this, shift))\n shift = this.__last_index__\n }\n\n // Cut head if cache was used\n let tail = shift ? text.slice(shift) : text\n\n // Scan string until end reached\n while (this.test(tail)) {\n result.push(createMatch(this, shift))\n\n tail = tail.slice(this.__last_index__)\n shift += this.__last_index__\n }\n\n if (result.length) {\n return result\n }\n\n return null\n}\n\n/**\n * LinkifyIt#matchAtStart(text) -> Match|null\n *\n * Returns fully-formed (not fuzzy) link if it starts at the beginning\n * of the string, and null otherwise.\n **/\nLinkifyIt.prototype.matchAtStart = function matchAtStart (text) {\n // Reset scan cache\n this.__text_cache__ = text\n this.__index__ = -1\n\n if (!text.length) return null\n\n const m = this.re.schema_at_start.exec(text)\n if (!m) return null\n\n const len = this.testSchemaAt(text, m[2], m[0].length)\n if (!len) return null\n\n this.__schema__ = m[2]\n this.__index__ = m.index + m[1].length\n this.__last_index__ = m.index + m[0].length + len\n\n return createMatch(this, 0)\n}\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n * are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds (list, keepOld) {\n list = Array.isArray(list) ? list : [list]\n\n if (!keepOld) {\n this.__tlds__ = list.slice()\n this.__tlds_replaced__ = true\n compile(this)\n return this\n }\n\n this.__tlds__ = this.__tlds__.concat(list)\n .sort()\n .filter(function (el, idx, arr) {\n return el !== arr[idx - 1]\n })\n .reverse()\n\n compile(this)\n return this\n}\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize (match) {\n // Do minimal possible changes by default. Need to collect feedback prior\n // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n if (!match.schema) { match.url = 'http://' + match.url }\n\n if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n match.url = 'mailto:' + match.url\n }\n}\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile () {\n}\n\nexport default LinkifyIt\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","// Main parser class\n\nimport * as utils from './common/utils.mjs'\nimport * as helpers from './helpers/index.mjs'\nimport Renderer from './renderer.mjs'\nimport ParserCore from './parser_core.mjs'\nimport ParserBlock from './parser_block.mjs'\nimport ParserInline from './parser_inline.mjs'\nimport LinkifyIt from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.mjs'\nimport cfg_zero from './presets/zero.mjs'\nimport cfg_commonmark from './presets/commonmark.mjs'\n\nconst config = {\n default: cfg_default,\n zero: cfg_zero,\n commonmark: cfg_commonmark\n}\n\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/\n\nfunction validateLink (url) {\n // url should be normalized at this point, and existing entities are decoded\n const str = url.trim().toLowerCase()\n\n return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n}\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\nfunction normalizeLink (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toASCII(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n return mdurl.encode(mdurl.format(parsed))\n}\n\nfunction normalizeLinkText (url) {\n const parsed = mdurl.parse(url, true)\n\n if (parsed.hostname) {\n // Encode hostnames in urls like:\n // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n //\n // We don't encode unknown schemas, because it's likely that we encode\n // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n //\n if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n try {\n parsed.hostname = punycode.toUnicode(parsed.hostname)\n } catch (er) { /**/ }\n }\n }\n\n // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\n}\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n * md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.mjs) -\n * configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.mjs) -\n * similar to GFM, used when no preset name given. Enables all available rules,\n * but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.mjs) -\n * all rules disabled. Useful to quickly setup your config via `.enable()`.\n * For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n * That's not safe! You may need external sanitizer to protect output from XSS.\n * It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n * (`<br />`). This is needed only for full CommonMark compatibility. In real\n * world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n * Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__ - `false`. Set `true` to enable [some language-neutral\n * replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.mjs) +\n * quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n * pairs, when typographer enabled and smartquotes on. For example, you can\n * use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n * `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n * Highlighter `function (str, lang)` should return escaped HTML. It can also\n * return empty string if the source was not changed and should be escaped\n * externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n * html: true,\n * linkify: true,\n * typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return hljs.highlight(str, { language: lang, ignoreIllegals: true }).value;\n * } catch (__) {}\n * }\n *\n * return ''; // use external default escaping\n * }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>` or `<code>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n * highlight: function (str, lang) {\n * if (lang && hljs.getLanguage(lang)) {\n * try {\n * return '<pre><code class=\"hljs\">' +\n * hljs.highlight(str, { language: lang, ignoreIllegals: true }).value +\n * '</code></pre>';\n * } catch (__) {}\n * }\n *\n * return '<pre><code class=\"hljs\">' + md.utils.escapeHtml(str) + '</code></pre>';\n * }\n * });\n * ```\n *\n **/\nfunction MarkdownIt (presetName, options) {\n if (!(this instanceof MarkdownIt)) {\n return new MarkdownIt(presetName, options)\n }\n\n if (!options) {\n if (!utils.isString(presetName)) {\n options = presetName || {}\n presetName = 'default'\n }\n }\n\n /**\n * MarkdownIt#inline -> ParserInline\n *\n * Instance of [[ParserInline]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.inline = new ParserInline()\n\n /**\n * MarkdownIt#block -> ParserBlock\n *\n * Instance of [[ParserBlock]]. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.block = new ParserBlock()\n\n /**\n * MarkdownIt#core -> Core\n *\n * Instance of [[Core]] chain executor. You may need it to add new rules when\n * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n * [[MarkdownIt.enable]].\n **/\n this.core = new ParserCore()\n\n /**\n * MarkdownIt#renderer -> Renderer\n *\n * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n * rules for new token types, generated by plugins.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * function myToken(tokens, idx, options, env, self) {\n * //...\n * return result;\n * };\n *\n * md.renderer.rules['my_token'] = myToken\n * ```\n *\n * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.mjs).\n **/\n this.renderer = new Renderer()\n\n /**\n * MarkdownIt#linkify -> LinkifyIt\n *\n * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.mjs)\n * rule.\n **/\n this.linkify = new LinkifyIt()\n\n /**\n * MarkdownIt#validateLink(url) -> Boolean\n *\n * Link validation function. CommonMark allows too much in links. By default\n * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n * except some embedded image types.\n *\n * You can change this behaviour:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * // enable everything\n * md.validateLink = function () { return true; }\n * ```\n **/\n this.validateLink = validateLink\n\n /**\n * MarkdownIt#normalizeLink(url) -> String\n *\n * Function used to encode link url to a machine-readable format,\n * which includes url-encoding, punycode, etc.\n **/\n this.normalizeLink = normalizeLink\n\n /**\n * MarkdownIt#normalizeLinkText(url) -> String\n *\n * Function used to decode link url to a human-readable format`\n **/\n this.normalizeLinkText = normalizeLinkText\n\n // Expose utils & helpers for easy acces from plugins\n\n /**\n * MarkdownIt#utils -> utils\n *\n * Assorted utility functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.mjs).\n **/\n this.utils = utils\n\n /**\n * MarkdownIt#helpers -> helpers\n *\n * Link components parser functions, useful to write plugins. See details\n * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n **/\n this.helpers = utils.assign({}, helpers)\n\n this.options = {}\n this.configure(presetName)\n\n if (options) { this.set(options) }\n}\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .set({ html: true, breaks: true })\n * .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n utils.assign(this.options, options)\n return this\n}\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you will - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n const self = this\n\n if (utils.isString(presets)) {\n const presetName = presets\n presets = config[presetName]\n if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name') }\n }\n\n if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty') }\n\n if (presets.options) { self.set(presets.options) }\n\n if (presets.components) {\n Object.keys(presets.components).forEach(function (name) {\n if (presets.components[name].rules) {\n self[name].ruler.enableOnly(presets.components[name].rules)\n }\n if (presets.components[name].rules2) {\n self[name].ruler2.enableOnly(presets.components[name].rules2)\n }\n })\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n * .enable(['sub', 'sup'])\n * .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.enable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.enable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed)\n }\n\n return this\n}\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n let result = []\n\n if (!Array.isArray(list)) { list = [list] }\n\n ['core', 'block', 'inline'].forEach(function (chain) {\n result = result.concat(this[chain].ruler.disable(list, true))\n }, this)\n\n result = result.concat(this.inline.ruler2.disable(list, true))\n\n const missed = list.filter(function (name) { return result.indexOf(name) < 0 })\n\n if (missed.length && !ignoreInvalid) {\n throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed)\n }\n return this\n}\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n * .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n * tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n * });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n const args = [this].concat(Array.prototype.slice.call(arguments, 1))\n plugin.apply(plugin, args)\n return this\n}\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and return list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n if (typeof src !== 'string') {\n throw new Error('Input data should be a String')\n }\n\n const state = new this.core.State(src, this, env)\n\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parse(src, env), this.options, env)\n}\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n const state = new this.core.State(src, this, env)\n\n state.inlineMode = true\n this.core.process(state)\n\n return state.tokens\n}\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n env = env || {}\n\n return this.renderer.render(this.parseInline(src, env), this.options, env)\n}\n\nexport default MarkdownIt\n","// markdown-it default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 100\n },\n\n components: {\n core: {},\n block: {},\n inline: {}\n }\n}\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: false,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: false,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 20\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline',\n 'text_join'\n ]\n },\n\n block: {\n rules: [\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'fragments_join'\n ]\n }\n }\n}\n","// Commonmark default options\n\nexport default {\n options: {\n // Enable HTML tags in source\n html: true,\n\n // Use '/' to close single tags (<br />)\n xhtmlOut: true,\n\n // Convert '\\n' in paragraphs into <br>\n breaks: false,\n\n // CSS language prefix for fenced blocks\n langPrefix: 'language-',\n\n // autoconvert URL-like texts to links\n linkify: false,\n\n // Enable some language-neutral replacements + quotes beautification\n typographer: false,\n\n // Double + single quotes replacement pairs, when typographer enabled,\n // and smartquotes on. Could be either a String or an Array.\n //\n // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n // Highlighter function. Should return escaped HTML,\n // or '' if the source string is not changed and should be escaped externaly.\n // If result starts with <pre... internal wrapper is skipped.\n //\n // function (/*str, lang*/) { return ''; }\n //\n highlight: null,\n\n // Internal protection, recursion limit\n maxNesting: 20\n },\n\n components: {\n\n core: {\n rules: [\n 'normalize',\n 'block',\n 'inline',\n 'text_join'\n ]\n },\n\n block: {\n rules: [\n 'blockquote',\n 'code',\n 'fence',\n 'heading',\n 'hr',\n 'html_block',\n 'lheading',\n 'list',\n 'reference',\n 'paragraph'\n ]\n },\n\n inline: {\n rules: [\n 'autolink',\n 'backticks',\n 'emphasis',\n 'entity',\n 'escape',\n 'html_inline',\n 'image',\n 'link',\n 'newline',\n 'text'\n ],\n rules2: [\n 'balance_pairs',\n 'emphasis',\n 'fragments_join'\n ]\n }\n }\n}\n","<script setup>\r\nimport { computed, onMounted, ref } from 'vue';\r\nimport MarkdownIt from 'markdown-it';\r\n\r\nconst md = new MarkdownIt();\r\nconst props = defineProps({\r\n content: {\r\n type: String,\r\n default: `| 早餐 | | 午餐 |\r\n|------------|----------|----|\r\n| 热量:450kcal |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | 热量:450kcal |\r\n| 碳水:62.3g | | 碳水:62.3g |\r\n| 蛋白质:15.5g | | 蛋白质:15.5g |\r\n| 脂肪:12.5g | | 脂肪:12.5g |\r\n\r\n| 晚餐 | | 加餐 |\r\n|------------|---|------------|\r\n| | | |\r\n| 热量:450kcal | | 热量:450kcal |\r\n| 碳水:62.3g | | 碳水:62.3g |\r\n| 蛋白质:15.5g | | 蛋白质:15.5g |\r\n| 脂肪:12.5g | | 脂肪:12.5g |`,\r\n },\r\n});\r\nconst parsedHtml = computed(() => {\r\n return md.render(props.content);\r\n});\r\n</script>\r\n\r\n<template>\r\n <div v-html=\"parsedHtml\"></div>\r\n</template>\r\n\r\n<style scoped></style>\r\n","<template>\r\n <svg\r\n width=\"1em\"\r\n height=\"1em\"\r\n viewBox=\"0 0 44 44\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(44, 0) rotate(90)\">\r\n <polyline\r\n stroke=\"currentColor\"\r\n stroke-width=\"4\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n points=\"16 10 28 22 16 34\"\r\n />\r\n </g>\r\n </g>\r\n </svg>\r\n</template>\r\n\r\n<script setup lang=\"ts\"></script>\r\n\r\n<style scoped></style>\r\n","<script setup>\r\nimport { computed, ref, watch } from 'vue';\r\nimport ArrowDown from '../icons/ArrowDown.vue';\r\n\r\nconst props = defineProps({\r\n show: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n height: {\r\n type: String,\r\n default: '50vh',\r\n },\r\n title: {\r\n type: String,\r\n default: '',\r\n },\r\n});\r\nconst emit = defineEmits(['update:show', 'confirm', 'close']);\r\n\r\nconst visibleEle = ref(false);\r\nconst bottomPosi = ref(`-${props.height}`);\r\nconst animationInfo = ref({\r\n delay: 300,\r\n bottom: `-${props.height}`,\r\n opacity: 0,\r\n});\r\nconst handleAnimation = (type) => {\r\n if (type) {\r\n animationInfo.value.bottom = '0';\r\n animationInfo.value.opacity = 0.5;\r\n } else {\r\n animationInfo.value.bottom = `-${props.height}`;\r\n animationInfo.value.opacity = 0;\r\n }\r\n};\r\nconst handleConfirm = () => {\r\n emit('confirm', {});\r\n};\r\n\r\nwatch(\r\n () => props.show,\r\n (newVal, oldValue) => {\r\n if (newVal) {\r\n bottomPosi.value = `-${props.height}`;\r\n visibleEle.value = true;\r\n setTimeout(() => {\r\n handleAnimation(true);\r\n }, 0);\r\n } else {\r\n handleAnimation(false);\r\n setTimeout(() => {\r\n visibleEle.value = false;\r\n }, 300);\r\n }\r\n },\r\n);\r\nconst handleClose = () => {\r\n emit('update:show', false);\r\n handleAnimation(false);\r\n setTimeout(() => {\r\n visibleEle.value = false;\r\n }, 300);\r\n};\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"visibleEle\"\r\n class=\"pup_mask\"\r\n :style=\"{\r\n backgroundColor: `rgba(0, 0, 0, ${animationInfo.opacity})`,\r\n }\"\r\n @click.stop=\"handleClose\"\r\n >\r\n <div\r\n class=\"pup_wrap\"\r\n :style=\"{ height: height, bottom: animationInfo.bottom }\"\r\n @click.stop=\"() => {}\"\r\n >\r\n <div class=\"pup_header\">\r\n <div class=\"left\">\r\n <div class=\"icon_down\" @click.stop=\"handleClose\">\r\n <arrow-down />\r\n </div>\r\n </div>\r\n <div class=\"title\">{{ title }}</div>\r\n <div class=\"right\">\r\n <div class=\"btn\" @click=\"handleConfirm\">确定</div>\r\n </div>\r\n </div>\r\n <div class=\"pup_content\" :style=\"{ height: `calc(height - 56px)` }\">\r\n <slot />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped lang=\"less\">\r\n@delay: 200ms;\r\n@headerHeight: 56px;\r\n.pup {\r\n &_mask {\r\n transition: background-color @delay ease-in-out;\r\n width: 100vw;\r\n height: 100vh;\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n z-index: 899;\r\n }\r\n &_wrap {\r\n transition: bottom @delay ease-in-out;\r\n width: 100%;\r\n height: 50vh;\r\n background: #fff;\r\n border-radius: 16px 16px 0 0;\r\n overflow: hidden;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 900;\r\n }\r\n &_header {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n height: @headerHeight;\r\n line-height: @headerHeight;\r\n background-color: #fff;\r\n position: relative;\r\n\r\n .icon_down {\r\n padding: 0 16px;\r\n font-size: 24px;\r\n }\r\n .title {\r\n width: 100%;\r\n text-align: center;\r\n font-size: 16px;\r\n font-weight: 600;\r\n }\r\n .left {\r\n height: @headerHeight;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-start;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n z-index: 5;\r\n }\r\n .right {\r\n height: @headerHeight;\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-end;\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n z-index: 5;\r\n }\r\n .btn {\r\n cursor: pointer;\r\n padding: 0 16px;\r\n height: 32px;\r\n line-height: 32px;\r\n margin-right: 16px;\r\n text-align: center;\r\n border-radius: 16px;\r\n background-color: #00dc4e;\r\n }\r\n }\r\n}\r\n</style>\r\n","function noop() {\n}\nconst extend = Object.assign;\nconst inBrowser = typeof window !== \"undefined\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isDef = (val) => val !== void 0 && val !== null;\nconst isFunction = (val) => typeof val === \"function\";\nconst isPromise = (val) => isObject(val) && isFunction(val.then) && isFunction(val.catch);\nconst isDate = (val) => Object.prototype.toString.call(val) === \"[object Date]\" && !Number.isNaN(val.getTime());\nfunction isMobile(value) {\n value = value.replace(/[^-|\\d]/g, \"\");\n return /^((\\+86)|(86))?(1)\\d{10}$/.test(value) || /^0[0-9-]{10,13}$/.test(value);\n}\nconst isNumeric = (val) => typeof val === \"number\" || /^\\d+(\\.\\d+)?$/.test(val);\nconst isIOS = () => inBrowser ? /ios|iphone|ipad|ipod/.test(navigator.userAgent.toLowerCase()) : false;\nfunction get(object, path) {\n const keys = path.split(\".\");\n let result = object;\n keys.forEach((key) => {\n var _a;\n result = isObject(result) ? (_a = result[key]) != null ? _a : \"\" : \"\";\n });\n return result;\n}\nfunction pick(obj, keys, ignoreUndefined) {\n return keys.reduce(\n (ret, key) => {\n if (!ignoreUndefined || obj[key] !== void 0) {\n ret[key] = obj[key];\n }\n return ret;\n },\n {}\n );\n}\nconst isSameValue = (newValue, oldValue) => JSON.stringify(newValue) === JSON.stringify(oldValue);\nconst toArray = (item) => Array.isArray(item) ? item : [item];\nconst flat = (arr) => arr.reduce((acc, val) => acc.concat(val), []);\nexport {\n extend,\n flat,\n get,\n inBrowser,\n isDate,\n isDef,\n isFunction,\n isIOS,\n isMobile,\n isNumeric,\n isObject,\n isPromise,\n isSameValue,\n noop,\n pick,\n toArray\n};\n","const unknownProp = null;\nconst numericProp = [Number, String];\nconst truthProp = {\n type: Boolean,\n default: true\n};\nconst makeRequiredProp = (type) => ({\n type,\n required: true\n});\nconst makeArrayProp = () => ({\n type: Array,\n default: () => []\n});\nconst makeNumberProp = (defaultVal) => ({\n type: Number,\n default: defaultVal\n});\nconst makeNumericProp = (defaultVal) => ({\n type: numericProp,\n default: defaultVal\n});\nconst makeStringProp = (defaultVal) => ({\n type: String,\n default: defaultVal\n});\nexport {\n makeArrayProp,\n makeNumberProp,\n makeNumericProp,\n makeRequiredProp,\n makeStringProp,\n numericProp,\n truthProp,\n unknownProp\n};\n","// src/utils.ts\nvar inBrowser = typeof window !== \"undefined\";\nvar supportsPassive = true;\nfunction raf(fn) {\n return inBrowser ? requestAnimationFrame(fn) : -1;\n}\nfunction cancelRaf(id) {\n if (inBrowser) {\n cancelAnimationFrame(id);\n }\n}\nfunction doubleRaf(fn) {\n raf(() => raf(fn));\n}\n\n// src/useRect/index.ts\nimport { unref } from \"vue\";\nvar isWindow = (val) => val === window;\nvar makeDOMRect = (width2, height2) => ({\n top: 0,\n left: 0,\n right: width2,\n bottom: height2,\n width: width2,\n height: height2\n});\nvar useRect = (elementOrRef) => {\n const element = unref(elementOrRef);\n if (isWindow(element)) {\n const width2 = element.innerWidth;\n const height2 = element.innerHeight;\n return makeDOMRect(width2, height2);\n }\n if (element == null ? void 0 : element.getBoundingClientRect) {\n return element.getBoundingClientRect();\n }\n return makeDOMRect(0, 0);\n};\n\n// src/useToggle/index.ts\nimport { ref } from \"vue\";\nfunction useToggle(defaultValue = false) {\n const state = ref(defaultValue);\n const toggle = (value = !state.value) => {\n state.value = value;\n };\n return [state, toggle];\n}\n\n// src/useRelation/useParent.ts\nimport {\n ref as ref2,\n inject,\n computed,\n onUnmounted,\n getCurrentInstance\n} from \"vue\";\nfunction useParent(key) {\n const parent = inject(key, null);\n if (parent) {\n const instance = getCurrentInstance();\n const { link, unlink, internalChildren } = parent;\n link(instance);\n onUnmounted(() => unlink(instance));\n const index = computed(() => internalChildren.indexOf(instance));\n return {\n parent,\n index\n };\n }\n return {\n parent: null,\n index: ref2(-1)\n };\n}\n\n// src/useRelation/useChildren.ts\nimport {\n isVNode,\n provide,\n reactive,\n getCurrentInstance as getCurrentInstance2\n} from \"vue\";\nfunction flattenVNodes(children) {\n const result = [];\n const traverse = (children2) => {\n if (Array.isArray(children2)) {\n children2.forEach((child) => {\n var _a;\n if (isVNode(child)) {\n result.push(child);\n if ((_a = child.component) == null ? void 0 : _a.subTree) {\n result.push(child.component.subTree);\n traverse(child.component.subTree.children);\n }\n if (child.children) {\n traverse(child.children);\n }\n }\n });\n }\n };\n traverse(children);\n return result;\n}\nvar findVNodeIndex = (vnodes, vnode) => {\n const index = vnodes.indexOf(vnode);\n if (index === -1) {\n return vnodes.findIndex(\n (item) => vnode.key !== void 0 && vnode.key !== null && item.type === vnode.type && item.key === vnode.key\n );\n }\n return index;\n};\nfunction sortChildren(parent, publicChildren, internalChildren) {\n const vnodes = flattenVNodes(parent.subTree.children);\n internalChildren.sort(\n (a, b) => findVNodeIndex(vnodes, a.vnode) - findVNodeIndex(vnodes, b.vnode)\n );\n const orderedPublicChildren = internalChildren.map((item) => item.proxy);\n publicChildren.sort((a, b) => {\n const indexA = orderedPublicChildren.indexOf(a);\n const indexB = orderedPublicChildren.indexOf(b);\n return indexA - indexB;\n });\n}\nfunction useChildren(key) {\n const publicChildren = reactive([]);\n const internalChildren = reactive([]);\n const parent = getCurrentInstance2();\n const linkChildren = (value) => {\n const link = (child) => {\n if (child.proxy) {\n internalChildren.push(child);\n publicChildren.push(child.proxy);\n sortChildren(parent, publicChildren, internalChildren);\n }\n };\n const unlink = (child) => {\n const index = internalChildren.indexOf(child);\n publicChildren.splice(index, 1);\n internalChildren.splice(index, 1);\n };\n provide(\n key,\n Object.assign(\n {\n link,\n unlink,\n children: publicChildren,\n internalChildren\n },\n value\n )\n );\n };\n return {\n children: publicChildren,\n linkChildren\n };\n}\n\n// src/useCountDown/index.ts\nimport {\n ref as ref3,\n computed as computed2,\n onActivated,\n onDeactivated,\n onBeforeUnmount\n} from \"vue\";\nvar SECOND = 1e3;\nvar MINUTE = 60 * SECOND;\nvar HOUR = 60 * MINUTE;\nvar DAY = 24 * HOUR;\nfunction parseTime(time) {\n const days = Math.floor(time / DAY);\n const hours = Math.floor(time % DAY / HOUR);\n const minutes = Math.floor(time % HOUR / MINUTE);\n const seconds = Math.floor(time % MINUTE / SECOND);\n const milliseconds = Math.floor(time % SECOND);\n return {\n total: time,\n days,\n hours,\n minutes,\n seconds,\n milliseconds\n };\n}\nfunction isSameSecond(time1, time2) {\n return Math.floor(time1 / 1e3) === Math.floor(time2 / 1e3);\n}\nfunction useCountDown(options) {\n let rafId;\n let endTime;\n let counting;\n let deactivated;\n const remain = ref3(options.time);\n const current = computed2(() => parseTime(remain.value));\n const pause = () => {\n counting = false;\n cancelRaf(rafId);\n };\n const getCurrentRemain = () => Math.max(endTime - Date.now(), 0);\n const setRemain = (value) => {\n var _a, _b;\n remain.value = value;\n (_a = options.onChange) == null ? void 0 : _a.call(options, current.value);\n if (value === 0) {\n pause();\n (_b = options.onFinish) == null ? void 0 : _b.call(options);\n }\n };\n const microTick = () => {\n rafId = raf(() => {\n if (counting) {\n setRemain(getCurrentRemain());\n if (remain.value > 0) {\n microTick();\n }\n }\n });\n };\n const macroTick = () => {\n rafId = raf(() => {\n if (counting) {\n const remainRemain = getCurrentRemain();\n if (!isSameSecond(remainRemain, remain.value) || remainRemain === 0) {\n setRemain(remainRemain);\n }\n if (remain.value > 0) {\n macroTick();\n }\n }\n });\n };\n const tick = () => {\n if (!inBrowser) {\n return;\n }\n if (options.millisecond) {\n microTick();\n } else {\n macroTick();\n }\n };\n const start = () => {\n if (!counting) {\n endTime = Date.now() + remain.value;\n counting = true;\n tick();\n }\n };\n const reset = (totalTime = options.time) => {\n pause();\n remain.value = totalTime;\n };\n onBeforeUnmount(pause);\n onActivated(() => {\n if (deactivated) {\n counting = true;\n deactivated = false;\n tick();\n }\n });\n onDeactivated(() => {\n if (counting) {\n pause();\n deactivated = true;\n }\n });\n return {\n start,\n pause,\n reset,\n current\n };\n}\n\n// src/useClickAway/index.ts\nimport { unref as unref3 } from \"vue\";\n\n// src/useEventListener/index.ts\nimport {\n watch,\n isRef,\n unref as unref2,\n onUnmounted as onUnmounted2,\n onDeactivated as onDeactivated2\n} from \"vue\";\n\n// src/onMountedOrActivated/index.ts\nimport { nextTick, onMounted, onActivated as onActivated2 } from \"vue\";\nfunction onMountedOrActivated(hook) {\n let mounted;\n onMounted(() => {\n hook();\n nextTick(() => {\n mounted = true;\n });\n });\n onActivated2(() => {\n if (mounted) {\n hook();\n }\n });\n}\n\n// src/useEventListener/index.ts\nfunction useEventListener(type, listener, options = {}) {\n if (!inBrowser) {\n return;\n }\n const { target = window, passive = false, capture = false } = options;\n let cleaned = false;\n let attached;\n const add = (target2) => {\n if (cleaned) {\n return;\n }\n const element = unref2(target2);\n if (element && !attached) {\n element.addEventListener(type, listener, {\n capture,\n passive\n });\n attached = true;\n }\n };\n const remove = (target2) => {\n if (cleaned) {\n return;\n }\n const element = unref2(target2);\n if (element && attached) {\n element.removeEventListener(type, listener, capture);\n attached = false;\n }\n };\n onUnmounted2(() => remove(target));\n onDeactivated2(() => remove(target));\n onMountedOrActivated(() => add(target));\n let stopWatch;\n if (isRef(target)) {\n stopWatch = watch(target, (val, oldVal) => {\n remove(oldVal);\n add(val);\n });\n }\n return () => {\n stopWatch == null ? void 0 : stopWatch();\n remove(target);\n cleaned = true;\n };\n}\n\n// src/useClickAway/index.ts\nfunction useClickAway(target, listener, options = {}) {\n if (!inBrowser) {\n return;\n }\n const { eventName = \"click\" } = options;\n const onClick = (event) => {\n const targets = Array.isArray(target) ? target : [target];\n const isClickAway = targets.every((item) => {\n const element = unref3(item);\n return element && !element.contains(event.target);\n });\n if (isClickAway) {\n listener(event);\n }\n };\n useEventListener(eventName, onClick, { target: document });\n}\n\n// src/useWindowSize/index.ts\nimport { ref as ref4 } from \"vue\";\nvar width;\nvar height;\nfunction useWindowSize() {\n if (!width) {\n width = ref4(0);\n height = ref4(0);\n if (inBrowser) {\n const update = () => {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n };\n update();\n window.addEventListener(\"resize\", update, { passive: true });\n window.addEventListener(\"orientationchange\", update, { passive: true });\n }\n }\n return { width, height };\n}\n\n// src/useScrollParent/index.ts\nimport { ref as ref5, onMounted as onMounted2 } from \"vue\";\nvar overflowScrollReg = /scroll|auto|overlay/i;\nvar defaultRoot = inBrowser ? window : void 0;\nfunction isElement(node) {\n const ELEMENT_NODE_TYPE = 1;\n return node.tagName !== \"HTML\" && node.tagName !== \"BODY\" && node.nodeType === ELEMENT_NODE_TYPE;\n}\nfunction getScrollParent(el, root = defaultRoot) {\n let node = el;\n while (node && node !== root && isElement(node)) {\n const { overflowY } = window.getComputedStyle(node);\n if (overflowScrollReg.test(overflowY)) {\n return node;\n }\n node = node.parentNode;\n }\n return root;\n}\nfunction useScrollParent(el, root = defaultRoot) {\n const scrollParent = ref5();\n onMounted2(() => {\n if (el.value) {\n scrollParent.value = getScrollParent(el.value, root);\n }\n });\n return scrollParent;\n}\n\n// src/usePageVisibility/index.ts\nimport { ref as ref6 } from \"vue\";\nvar visibility;\nfunction usePageVisibility() {\n if (!visibility) {\n visibility = ref6(\"visible\");\n if (inBrowser) {\n const update = () => {\n visibility.value = document.hidden ? \"hidden\" : \"visible\";\n };\n update();\n window.addEventListener(\"visibilitychange\", update);\n }\n }\n return visibility;\n}\n\n// src/useCustomFieldValue/index.ts\nimport { watch as watch2, inject as inject2 } from \"vue\";\nvar CUSTOM_FIELD_INJECTION_KEY = Symbol(\"van-field\");\nfunction useCustomFieldValue(customValue) {\n const field = inject2(CUSTOM_FIELD_INJECTION_KEY, null);\n if (field && !field.customValue.value) {\n field.customValue.value = customValue;\n watch2(customValue, () => {\n field.resetValidation();\n field.validateWithTrigger(\"onChange\");\n });\n }\n}\n\n// src/useRaf/index.ts\nfunction useRaf(fn, options) {\n if (inBrowser) {\n const { interval = 0, isLoop = false } = options || {};\n let start;\n let isStopped = false;\n let rafId;\n const stop = () => {\n isStopped = true;\n cancelAnimationFrame(rafId);\n };\n const frameWrapper = (timestamp) => {\n if (isStopped)\n return;\n if (start === void 0) {\n start = timestamp;\n } else if (timestamp - start > interval) {\n fn(timestamp);\n start = timestamp;\n if (!isLoop) {\n stop();\n return;\n }\n }\n rafId = requestAnimationFrame(frameWrapper);\n };\n rafId = requestAnimationFrame(frameWrapper);\n return stop;\n }\n return () => {\n };\n}\nexport {\n CUSTOM_FIELD_INJECTION_KEY,\n cancelRaf,\n doubleRaf,\n flattenVNodes,\n getScrollParent,\n inBrowser,\n onMountedOrActivated,\n raf,\n sortChildren,\n supportsPassive,\n useChildren,\n useClickAway,\n useCountDown,\n useCustomFieldValue,\n useEventListener,\n usePageVisibility,\n useParent,\n useRaf,\n useRect,\n useScrollParent,\n useToggle,\n useWindowSize\n};\n","import { useRect, useWindowSize } from \"@vant/use\";\nimport { unref } from \"vue\";\nimport { isIOS as checkIsIOS } from \"./basic.mjs\";\nfunction getScrollTop(el) {\n const top = \"scrollTop\" in el ? el.scrollTop : el.pageYOffset;\n return Math.max(top, 0);\n}\nfunction setScrollTop(el, value) {\n if (\"scrollTop\" in el) {\n el.scrollTop = value;\n } else {\n el.scrollTo(el.scrollX, value);\n }\n}\nfunction getRootScrollTop() {\n return window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n}\nfunction setRootScrollTop(value) {\n setScrollTop(window, value);\n setScrollTop(document.body, value);\n}\nfunction getElementTop(el, scroller) {\n if (el === window) {\n return 0;\n }\n const scrollTop = scroller ? getScrollTop(scroller) : getRootScrollTop();\n return useRect(el).top + scrollTop;\n}\nconst isIOS = checkIsIOS();\nfunction resetScroll() {\n if (isIOS) {\n setRootScrollTop(getRootScrollTop());\n }\n}\nconst stopPropagation = (event) => event.stopPropagation();\nfunction preventDefault(event, isStopPropagation) {\n if (typeof event.cancelable !== \"boolean\" || event.cancelable) {\n event.preventDefault();\n }\n if (isStopPropagation) {\n stopPropagation(event);\n }\n}\nfunction isHidden(elementRef) {\n const el = unref(elementRef);\n if (!el) {\n return false;\n }\n const style = window.getComputedStyle(el);\n const hidden = style.display === \"none\";\n const parentHidden = el.offsetParent === null && style.position !== \"fixed\";\n return hidden || parentHidden;\n}\nconst { width: windowWidth, height: windowHeight } = useWindowSize();\nfunction isContainingBlock(el) {\n const css = window.getComputedStyle(el);\n return css.transform !== \"none\" || css.perspective !== \"none\" || [\"transform\", \"perspective\", \"filter\"].some(\n (value) => (css.willChange || \"\").includes(value)\n );\n}\nfunction getContainingBlock(el) {\n let node = el.parentElement;\n while (node) {\n if (node && node.tagName !== \"HTML\" && node.tagName !== \"BODY\" && isContainingBlock(node)) {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n}\nexport {\n getContainingBlock,\n getElementTop,\n getRootScrollTop,\n getScrollTop,\n isHidden,\n preventDefault,\n resetScroll,\n setRootScrollTop,\n setScrollTop,\n stopPropagation,\n windowHeight,\n windowWidth\n};\n","import { inBrowser } from \"./basic.mjs\";\nimport { windowWidth, windowHeight } from \"./dom.mjs\";\nimport { isDef, isNumeric } from \"./basic.mjs\";\nfunction addUnit(value) {\n if (isDef(value)) {\n return isNumeric(value) ? `${value}px` : String(value);\n }\n return void 0;\n}\nfunction getSizeStyle(originSize) {\n if (isDef(originSize)) {\n if (Array.isArray(originSize)) {\n return {\n width: addUnit(originSize[0]),\n height: addUnit(originSize[1])\n };\n }\n const size = addUnit(originSize);\n return {\n width: size,\n height: size\n };\n }\n}\nfunction getZIndexStyle(zIndex) {\n const style = {};\n if (zIndex !== void 0) {\n style.zIndex = +zIndex;\n }\n return style;\n}\nlet rootFontSize;\nfunction getRootFontSize() {\n if (!rootFontSize) {\n const doc = document.documentElement;\n const fontSize = doc.style.fontSize || window.getComputedStyle(doc).fontSize;\n rootFontSize = parseFloat(fontSize);\n }\n return rootFontSize;\n}\nfunction convertRem(value) {\n value = value.replace(/rem/g, \"\");\n return +value * getRootFontSize();\n}\nfunction convertVw(value) {\n value = value.replace(/vw/g, \"\");\n return +value * windowWidth.value / 100;\n}\nfunction convertVh(value) {\n value = value.replace(/vh/g, \"\");\n return +value * windowHeight.value / 100;\n}\nfunction unitToPx(value) {\n if (typeof value === \"number\") {\n return value;\n }\n if (inBrowser) {\n if (value.includes(\"rem\")) {\n return convertRem(value);\n }\n if (value.includes(\"vw\")) {\n return convertVw(value);\n }\n if (value.includes(\"vh\")) {\n return convertVh(value);\n }\n }\n return parseFloat(value);\n}\nconst camelizeRE = /-(\\w)/g;\nconst camelize = (str) => str.replace(camelizeRE, (_, c) => c.toUpperCase());\nconst kebabCase = (str) => str.replace(/([A-Z])/g, \"-$1\").toLowerCase().replace(/^-/, \"\");\nfunction padZero(num, targetLength = 2) {\n let str = num + \"\";\n while (str.length < targetLength) {\n str = \"0\" + str;\n }\n return str;\n}\nconst clamp = (num, min, max) => Math.min(Math.max(num, min), max);\nfunction trimExtraChar(value, char, regExp) {\n const index = value.indexOf(char);\n if (index === -1) {\n return value;\n }\n if (char === \"-\" && index !== 0) {\n return value.slice(0, index);\n }\n return value.slice(0, index + 1) + value.slice(index).replace(regExp, \"\");\n}\nfunction formatNumber(value, allowDot = true, allowMinus = true) {\n if (allowDot) {\n value = trimExtraChar(value, \".\", /\\./g);\n } else {\n value = value.split(\".\")[0];\n }\n if (allowMinus) {\n value = trimExtraChar(value, \"-\", /-/g);\n } else {\n value = value.replace(/-/, \"\");\n }\n const regExp = allowDot ? /[^-0-9.]/g : /[^-0-9]/g;\n return value.replace(regExp, \"\");\n}\nfunction addNumber(num1, num2) {\n const cardinal = 10 ** 10;\n return Math.round((num1 + num2) * cardinal) / cardinal;\n}\nexport {\n addNumber,\n addUnit,\n camelize,\n clamp,\n formatNumber,\n getSizeStyle,\n getZIndexStyle,\n kebabCase,\n padZero,\n unitToPx\n};\n","import { isDef, isObject } from \"./basic.mjs\";\nconst { hasOwnProperty } = Object.prototype;\nfunction assignKey(to, from, key) {\n const val = from[key];\n if (!isDef(val)) {\n return;\n }\n if (!hasOwnProperty.call(to, key) || !isObject(val)) {\n to[key] = val;\n } else {\n to[key] = deepAssign(Object(to[key]), val);\n }\n}\nfunction deepAssign(to, from) {\n Object.keys(from).forEach((key) => {\n assignKey(to, from, key);\n });\n return to;\n}\nexport {\n deepAssign\n};\n","var stdin_default = {\n name: \"\\u59D3\\u540D\",\n tel: \"\\u7535\\u8BDD\",\n save: \"\\u4FDD\\u5B58\",\n clear: \"\\u6E05\\u7A7A\",\n cancel: \"\\u53D6\\u6D88\",\n confirm: \"\\u786E\\u8BA4\",\n delete: \"\\u5220\\u9664\",\n loading: \"\\u52A0\\u8F7D\\u4E2D...\",\n noCoupon: \"\\u6682\\u65E0\\u4F18\\u60E0\\u5238\",\n nameEmpty: \"\\u8BF7\\u586B\\u5199\\u59D3\\u540D\",\n addContact: \"\\u6DFB\\u52A0\\u8054\\u7CFB\\u4EBA\",\n telInvalid: \"\\u8BF7\\u586B\\u5199\\u6B63\\u786E\\u7684\\u7535\\u8BDD\",\n vanCalendar: {\n end: \"\\u7ED3\\u675F\",\n start: \"\\u5F00\\u59CB\",\n title: \"\\u65E5\\u671F\\u9009\\u62E9\",\n weekdays: [\"\\u65E5\", \"\\u4E00\", \"\\u4E8C\", \"\\u4E09\", \"\\u56DB\", \"\\u4E94\", \"\\u516D\"],\n monthTitle: (year, month) => `${year}\\u5E74${month}\\u6708`,\n rangePrompt: (maxRange) => `\\u6700\\u591A\\u9009\\u62E9 ${maxRange} \\u5929`\n },\n vanCascader: {\n select: \"\\u8BF7\\u9009\\u62E9\"\n },\n vanPagination: {\n prev: \"\\u4E0A\\u4E00\\u9875\",\n next: \"\\u4E0B\\u4E00\\u9875\"\n },\n vanPullRefresh: {\n pulling: \"\\u4E0B\\u62C9\\u5373\\u53EF\\u5237\\u65B0...\",\n loosing: \"\\u91CA\\u653E\\u5373\\u53EF\\u5237\\u65B0...\"\n },\n vanSubmitBar: {\n label: \"\\u5408\\u8BA1:\"\n },\n vanCoupon: {\n unlimited: \"\\u65E0\\u95E8\\u69DB\",\n discount: (discount) => `${discount}\\u6298`,\n condition: (condition) => `\\u6EE1${condition}\\u5143\\u53EF\\u7528`\n },\n vanCouponCell: {\n title: \"\\u4F18\\u60E0\\u5238\",\n count: (count) => `${count}\\u5F20\\u53EF\\u7528`\n },\n vanCouponList: {\n exchange: \"\\u5151\\u6362\",\n close: \"\\u4E0D\\u4F7F\\u7528\",\n enable: \"\\u53EF\\u7528\",\n disabled: \"\\u4E0D\\u53EF\\u7528\",\n placeholder: \"\\u8F93\\u5165\\u4F18\\u60E0\\u7801\"\n },\n vanAddressEdit: {\n area: \"\\u5730\\u533A\",\n areaEmpty: \"\\u8BF7\\u9009\\u62E9\\u5730\\u533A\",\n addressEmpty: \"\\u8BF7\\u586B\\u5199\\u8BE6\\u7EC6\\u5730\\u5740\",\n addressDetail: \"\\u8BE6\\u7EC6\\u5730\\u5740\",\n defaultAddress: \"\\u8BBE\\u4E3A\\u9ED8\\u8BA4\\u6536\\u8D27\\u5730\\u5740\"\n },\n vanAddressList: {\n add: \"\\u65B0\\u589E\\u5730\\u5740\"\n }\n};\nexport {\n stdin_default as default\n};\n","import { ref, reactive } from \"vue\";\nimport { deepAssign } from \"../utils/deep-assign.mjs\";\nimport defaultMessages from \"./lang/zh-CN.mjs\";\nconst lang = ref(\"zh-CN\");\nconst messages = reactive({\n \"zh-CN\": defaultMessages\n});\nconst Locale = {\n messages() {\n return messages[lang.value];\n },\n use(newLang, newMessages) {\n lang.value = newLang;\n this.add({ [newLang]: newMessages });\n },\n add(newMessages = {}) {\n deepAssign(messages, newMessages);\n }\n};\nconst useCurrentLang = () => lang;\nvar stdin_default = Locale;\nexport {\n Locale,\n stdin_default as default,\n useCurrentLang\n};\n","import { get, isFunction } from \"./basic.mjs\";\nimport { camelize } from \"./format.mjs\";\nimport locale from \"../locale/index.mjs\";\nfunction createTranslate(name) {\n const prefix = camelize(name) + \".\";\n return (path, ...args) => {\n const messages = locale.messages();\n const message = get(messages, prefix + path) || get(messages, path);\n return isFunction(message) ? message(...args) : message;\n };\n}\nfunction genBem(name, mods) {\n if (!mods) {\n return \"\";\n }\n if (typeof mods === \"string\") {\n return ` ${name}--${mods}`;\n }\n if (Array.isArray(mods)) {\n return mods.reduce(\n (ret, item) => ret + genBem(name, item),\n \"\"\n );\n }\n return Object.keys(mods).reduce(\n (ret, key) => ret + (mods[key] ? genBem(name, key) : \"\"),\n \"\"\n );\n}\nfunction createBEM(name) {\n return (el, mods) => {\n if (el && typeof el !== \"string\") {\n mods = el;\n el = \"\";\n }\n el = el ? `${name}__${el}` : name;\n return `${el}${genBem(el, mods)}`;\n };\n}\nfunction createNamespace(name) {\n const prefixedName = `van-${name}`;\n return [\n prefixedName,\n createBEM(prefixedName),\n createTranslate(prefixedName)\n ];\n}\nexport {\n createBEM,\n createNamespace,\n createTranslate\n};\n","const BORDER = \"van-hairline\";\nconst BORDER_TOP = `${BORDER}--top`;\nconst BORDER_LEFT = `${BORDER}--left`;\nconst BORDER_RIGHT = `${BORDER}--right`;\nconst BORDER_BOTTOM = `${BORDER}--bottom`;\nconst BORDER_SURROUND = `${BORDER}--surround`;\nconst BORDER_TOP_BOTTOM = `${BORDER}--top-bottom`;\nconst BORDER_UNSET_TOP_BOTTOM = `${BORDER}-unset--top-bottom`;\nconst HAPTICS_FEEDBACK = \"van-haptics-feedback\";\nconst FORM_KEY = Symbol(\"van-form\");\nconst LONG_PRESS_START_TIME = 500;\nconst TAP_OFFSET = 5;\nexport {\n BORDER,\n BORDER_BOTTOM,\n BORDER_LEFT,\n BORDER_RIGHT,\n BORDER_SURROUND,\n BORDER_TOP,\n BORDER_TOP_BOTTOM,\n BORDER_UNSET_TOP_BOTTOM,\n FORM_KEY,\n HAPTICS_FEEDBACK,\n LONG_PRESS_START_TIME,\n TAP_OFFSET\n};\n","import { noop, isPromise } from \"./basic.mjs\";\nfunction callInterceptor(interceptor, {\n args = [],\n done,\n canceled,\n error\n}) {\n if (interceptor) {\n const returnVal = interceptor.apply(null, args);\n if (isPromise(returnVal)) {\n returnVal.then((value) => {\n if (value) {\n done();\n } else if (canceled) {\n canceled();\n }\n }).catch(error || noop);\n } else if (returnVal) {\n done();\n } else if (canceled) {\n canceled();\n }\n } else {\n done();\n }\n}\nexport {\n callInterceptor\n};\n","import { camelize } from \"./format.mjs\";\nfunction withInstall(options) {\n options.install = (app) => {\n const { name } = options;\n if (name) {\n app.component(name, options);\n app.component(camelize(`-${name}`), options);\n }\n };\n return options;\n}\nexport {\n withInstall\n};\n","import { inject, watch } from \"vue\";\nconst POPUP_TOGGLE_KEY = Symbol();\nfunction onPopupReopen(callback) {\n const popupToggleStatus = inject(POPUP_TOGGLE_KEY, null);\n if (popupToggleStatus) {\n watch(popupToggleStatus, (show) => {\n if (show) {\n callback();\n }\n });\n }\n}\nexport {\n POPUP_TOGGLE_KEY,\n onPopupReopen\n};\n","import { getCurrentInstance } from \"vue\";\nimport { extend } from \"../utils/index.mjs\";\nfunction useExpose(apis) {\n const instance = getCurrentInstance();\n if (instance) {\n extend(instance.proxy, apis);\n }\n}\nexport {\n useExpose\n};\n","import {\n getCurrentInstance\n} from \"vue\";\nconst routeProps = {\n to: [String, Object],\n url: String,\n replace: Boolean\n};\nfunction route({\n to,\n url,\n replace,\n $router: router\n}) {\n if (to && router) {\n router[replace ? \"replace\" : \"push\"](to);\n } else if (url) {\n replace ? location.replace(url) : location.href = url;\n }\n}\nfunction useRoute() {\n const vm = getCurrentInstance().proxy;\n return () => route(vm);\n}\nexport {\n route,\n routeProps,\n useRoute\n};\n","import { computed, defineComponent, createVNode as _createVNode } from \"vue\";\nimport { isDef, addUnit, isNumeric, truthProp, numericProp, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nconst [name, bem] = createNamespace(\"badge\");\nconst badgeProps = {\n dot: Boolean,\n max: numericProp,\n tag: makeStringProp(\"div\"),\n color: String,\n offset: Array,\n content: numericProp,\n showZero: truthProp,\n position: makeStringProp(\"top-right\")\n};\nvar stdin_default = defineComponent({\n name,\n props: badgeProps,\n setup(props, {\n slots\n }) {\n const hasContent = () => {\n if (slots.content) {\n return true;\n }\n const {\n content,\n showZero\n } = props;\n return isDef(content) && content !== \"\" && (showZero || content !== 0 && content !== \"0\");\n };\n const renderContent = () => {\n const {\n dot,\n max,\n content\n } = props;\n if (!dot && hasContent()) {\n if (slots.content) {\n return slots.content();\n }\n if (isDef(max) && isNumeric(content) && +content > +max) {\n return `${max}+`;\n }\n return content;\n }\n };\n const getOffsetWithMinusString = (val) => val.startsWith(\"-\") ? val.replace(\"-\", \"\") : `-${val}`;\n const style = computed(() => {\n const style2 = {\n background: props.color\n };\n if (props.offset) {\n const [x, y] = props.offset;\n const {\n position\n } = props;\n const [offsetY, offsetX] = position.split(\"-\");\n if (slots.default) {\n if (typeof y === \"number\") {\n style2[offsetY] = addUnit(offsetY === \"top\" ? y : -y);\n } else {\n style2[offsetY] = offsetY === \"top\" ? addUnit(y) : getOffsetWithMinusString(y);\n }\n if (typeof x === \"number\") {\n style2[offsetX] = addUnit(offsetX === \"left\" ? x : -x);\n } else {\n style2[offsetX] = offsetX === \"left\" ? addUnit(x) : getOffsetWithMinusString(x);\n }\n } else {\n style2.marginTop = addUnit(y);\n style2.marginLeft = addUnit(x);\n }\n }\n return style2;\n });\n const renderBadge = () => {\n if (hasContent() || props.dot) {\n return _createVNode(\"div\", {\n \"class\": bem([props.position, {\n dot: props.dot,\n fixed: !!slots.default\n }]),\n \"style\": style.value\n }, [renderContent()]);\n }\n };\n return () => {\n if (slots.default) {\n const {\n tag\n } = props;\n return _createVNode(tag, {\n \"class\": bem(\"wrapper\")\n }, {\n default: () => [slots.default(), renderBadge()]\n });\n }\n return renderBadge();\n };\n }\n});\nexport {\n badgeProps,\n stdin_default as default\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Badge from \"./Badge.mjs\";\nconst Badge = withInstall(_Badge);\nvar stdin_default = Badge;\nimport { badgeProps } from \"./Badge.mjs\";\nexport {\n Badge,\n badgeProps,\n stdin_default as default\n};\n","let globalZIndex = 2e3;\nconst useGlobalZIndex = () => ++globalZIndex;\nconst setGlobalZIndex = (val) => {\n globalZIndex = val;\n};\nexport {\n setGlobalZIndex,\n useGlobalZIndex\n};\n","import { watch, provide, computed, watchEffect, onActivated, onDeactivated, onBeforeUnmount, defineComponent, createVNode as _createVNode } from \"vue\";\nimport { extend, inBrowser, kebabCase, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nimport { setGlobalZIndex } from \"../composables/use-global-z-index.mjs\";\nconst [name, bem] = createNamespace(\"config-provider\");\nconst CONFIG_PROVIDER_KEY = Symbol(name);\nconst configProviderProps = {\n tag: makeStringProp(\"div\"),\n theme: makeStringProp(\"light\"),\n zIndex: Number,\n themeVars: Object,\n themeVarsDark: Object,\n themeVarsLight: Object,\n themeVarsScope: makeStringProp(\"local\"),\n iconPrefix: String\n};\nfunction insertDash(str) {\n return str.replace(/([a-zA-Z])(\\d)/g, \"$1-$2\");\n}\nfunction mapThemeVarsToCSSVars(themeVars) {\n const cssVars = {};\n Object.keys(themeVars).forEach((key) => {\n const formattedKey = insertDash(kebabCase(key));\n cssVars[`--van-${formattedKey}`] = themeVars[key];\n });\n return cssVars;\n}\nfunction syncThemeVarsOnRoot(newStyle = {}, oldStyle = {}) {\n Object.keys(newStyle).forEach((key) => {\n if (newStyle[key] !== oldStyle[key]) {\n document.documentElement.style.setProperty(key, newStyle[key]);\n }\n });\n Object.keys(oldStyle).forEach((key) => {\n if (!newStyle[key]) {\n document.documentElement.style.removeProperty(key);\n }\n });\n}\nvar stdin_default = defineComponent({\n name,\n props: configProviderProps,\n setup(props, {\n slots\n }) {\n const style = computed(() => mapThemeVarsToCSSVars(extend({}, props.themeVars, props.theme === \"dark\" ? props.themeVarsDark : props.themeVarsLight)));\n if (inBrowser) {\n const addTheme = () => {\n document.documentElement.classList.add(`van-theme-${props.theme}`);\n };\n const removeTheme = (theme = props.theme) => {\n document.documentElement.classList.remove(`van-theme-${theme}`);\n };\n watch(() => props.theme, (newVal, oldVal) => {\n if (oldVal) {\n removeTheme(oldVal);\n }\n addTheme();\n }, {\n immediate: true\n });\n onActivated(addTheme);\n onDeactivated(removeTheme);\n onBeforeUnmount(removeTheme);\n watch(style, (newStyle, oldStyle) => {\n if (props.themeVarsScope === \"global\") {\n syncThemeVarsOnRoot(newStyle, oldStyle);\n }\n });\n watch(() => props.themeVarsScope, (newScope, oldScope) => {\n if (oldScope === \"global\") {\n syncThemeVarsOnRoot({}, style.value);\n }\n if (newScope === \"global\") {\n syncThemeVarsOnRoot(style.value, {});\n }\n });\n if (props.themeVarsScope === \"global\") {\n syncThemeVarsOnRoot(style.value, {});\n }\n }\n provide(CONFIG_PROVIDER_KEY, props);\n watchEffect(() => {\n if (props.zIndex !== void 0) {\n setGlobalZIndex(props.zIndex);\n }\n });\n return () => _createVNode(props.tag, {\n \"class\": bem(),\n \"style\": props.themeVarsScope === \"local\" ? style.value : void 0\n }, {\n default: () => {\n var _a;\n return [(_a = slots.default) == null ? void 0 : _a.call(slots)];\n }\n });\n }\n});\nexport {\n CONFIG_PROVIDER_KEY,\n configProviderProps,\n stdin_default as default\n};\n","import { inject, computed, defineComponent, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\nimport { addUnit, numericProp, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nimport { Badge } from \"../badge/index.mjs\";\nimport { CONFIG_PROVIDER_KEY } from \"../config-provider/ConfigProvider.mjs\";\nconst [name, bem] = createNamespace(\"icon\");\nconst isImage = (name2) => name2 == null ? void 0 : name2.includes(\"/\");\nconst iconProps = {\n dot: Boolean,\n tag: makeStringProp(\"i\"),\n name: String,\n size: numericProp,\n badge: numericProp,\n color: String,\n badgeProps: Object,\n classPrefix: String\n};\nvar stdin_default = defineComponent({\n name,\n props: iconProps,\n setup(props, {\n slots\n }) {\n const config = inject(CONFIG_PROVIDER_KEY, null);\n const classPrefix = computed(() => props.classPrefix || (config == null ? void 0 : config.iconPrefix) || bem());\n return () => {\n const {\n tag,\n dot,\n name: name2,\n size,\n badge,\n color\n } = props;\n const isImageIcon = isImage(name2);\n return _createVNode(Badge, _mergeProps({\n \"dot\": dot,\n \"tag\": tag,\n \"class\": [classPrefix.value, isImageIcon ? \"\" : `${classPrefix.value}-${name2}`],\n \"style\": {\n color,\n fontSize: addUnit(size)\n },\n \"content\": badge\n }, props.badgeProps), {\n default: () => {\n var _a;\n return [(_a = slots.default) == null ? void 0 : _a.call(slots), isImageIcon && _createVNode(\"img\", {\n \"class\": bem(\"image\"),\n \"src\": name2\n }, null)];\n }\n });\n };\n }\n});\nexport {\n stdin_default as default,\n iconProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Icon from \"./Icon.mjs\";\nconst Icon = withInstall(_Icon);\nvar stdin_default = Icon;\nimport { iconProps } from \"./Icon.mjs\";\nexport {\n Icon,\n stdin_default as default,\n iconProps\n};\n","import { computed, defineComponent, createVNode as _createVNode } from \"vue\";\nimport { extend, addUnit, numericProp, getSizeStyle, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nconst [name, bem] = createNamespace(\"loading\");\nconst SpinIcon = Array(12).fill(null).map((_, index) => _createVNode(\"i\", {\n \"class\": bem(\"line\", String(index + 1))\n}, null));\nconst CircularIcon = _createVNode(\"svg\", {\n \"class\": bem(\"circular\"),\n \"viewBox\": \"25 25 50 50\"\n}, [_createVNode(\"circle\", {\n \"cx\": \"50\",\n \"cy\": \"50\",\n \"r\": \"20\",\n \"fill\": \"none\"\n}, null)]);\nconst loadingProps = {\n size: numericProp,\n type: makeStringProp(\"circular\"),\n color: String,\n vertical: Boolean,\n textSize: numericProp,\n textColor: String\n};\nvar stdin_default = defineComponent({\n name,\n props: loadingProps,\n setup(props, {\n slots\n }) {\n const spinnerStyle = computed(() => extend({\n color: props.color\n }, getSizeStyle(props.size)));\n const renderIcon = () => {\n const DefaultIcon = props.type === \"spinner\" ? SpinIcon : CircularIcon;\n return _createVNode(\"span\", {\n \"class\": bem(\"spinner\", props.type),\n \"style\": spinnerStyle.value\n }, [slots.icon ? slots.icon() : DefaultIcon]);\n };\n const renderText = () => {\n var _a;\n if (slots.default) {\n return _createVNode(\"span\", {\n \"class\": bem(\"text\"),\n \"style\": {\n fontSize: addUnit(props.textSize),\n color: (_a = props.textColor) != null ? _a : props.color\n }\n }, [slots.default()]);\n }\n };\n return () => {\n const {\n type,\n vertical\n } = props;\n return _createVNode(\"div\", {\n \"class\": bem([type, {\n vertical\n }]),\n \"aria-live\": \"polite\",\n \"aria-busy\": true\n }, [renderIcon(), renderText()]);\n };\n }\n});\nexport {\n stdin_default as default,\n loadingProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Loading from \"./Loading.mjs\";\nconst Loading = withInstall(_Loading);\nvar stdin_default = Loading;\nimport { loadingProps } from \"./Loading.mjs\";\nexport {\n Loading,\n stdin_default as default,\n loadingProps\n};\n","import { truthProp, unknownProp, numericProp } from \"../utils/index.mjs\";\nconst popupSharedProps = {\n // whether to show popup\n show: Boolean,\n // z-index\n zIndex: numericProp,\n // whether to show overlay\n overlay: truthProp,\n // transition duration\n duration: numericProp,\n // teleport\n teleport: [String, Object],\n // prevent body scroll\n lockScroll: truthProp,\n // whether to lazy render\n lazyRender: truthProp,\n // callback function before close\n beforeClose: Function,\n // overlay props\n overlayProps: Object,\n // overlay custom style\n overlayStyle: Object,\n // overlay custom class name\n overlayClass: unknownProp,\n // Initial rendering animation\n transitionAppear: Boolean,\n // whether to close popup when overlay is clicked\n closeOnClickOverlay: truthProp\n};\nconst popupSharedPropKeys = Object.keys(\n popupSharedProps\n);\nexport {\n popupSharedPropKeys,\n popupSharedProps\n};\n","import { ref } from \"vue\";\nimport { TAP_OFFSET } from \"../utils/index.mjs\";\nfunction getDirection(x, y) {\n if (x > y) {\n return \"horizontal\";\n }\n if (y > x) {\n return \"vertical\";\n }\n return \"\";\n}\nfunction useTouch() {\n const startX = ref(0);\n const startY = ref(0);\n const deltaX = ref(0);\n const deltaY = ref(0);\n const offsetX = ref(0);\n const offsetY = ref(0);\n const direction = ref(\"\");\n const isTap = ref(true);\n const isVertical = () => direction.value === \"vertical\";\n const isHorizontal = () => direction.value === \"horizontal\";\n const reset = () => {\n deltaX.value = 0;\n deltaY.value = 0;\n offsetX.value = 0;\n offsetY.value = 0;\n direction.value = \"\";\n isTap.value = true;\n };\n const start = (event) => {\n reset();\n startX.value = event.touches[0].clientX;\n startY.value = event.touches[0].clientY;\n };\n const move = (event) => {\n const touch = event.touches[0];\n deltaX.value = (touch.clientX < 0 ? 0 : touch.clientX) - startX.value;\n deltaY.value = touch.clientY - startY.value;\n offsetX.value = Math.abs(deltaX.value);\n offsetY.value = Math.abs(deltaY.value);\n const LOCK_DIRECTION_DISTANCE = 10;\n if (!direction.value || offsetX.value < LOCK_DIRECTION_DISTANCE && offsetY.value < LOCK_DIRECTION_DISTANCE) {\n direction.value = getDirection(offsetX.value, offsetY.value);\n }\n if (isTap.value && (offsetX.value > TAP_OFFSET || offsetY.value > TAP_OFFSET)) {\n isTap.value = false;\n }\n };\n return {\n move,\n start,\n reset,\n startX,\n startY,\n deltaX,\n deltaY,\n offsetX,\n offsetY,\n direction,\n isVertical,\n isHorizontal,\n isTap\n };\n}\nexport {\n useTouch\n};\n","import { watch, onBeforeUnmount, onDeactivated } from \"vue\";\nimport { getScrollParent, onMountedOrActivated } from \"@vant/use\";\nimport { useTouch } from \"./use-touch.mjs\";\nimport { preventDefault } from \"../utils/index.mjs\";\nlet totalLockCount = 0;\nconst BODY_LOCK_CLASS = \"van-overflow-hidden\";\nfunction useLockScroll(rootRef, shouldLock) {\n const touch = useTouch();\n const DIRECTION_UP = \"01\";\n const DIRECTION_DOWN = \"10\";\n const onTouchMove = (event) => {\n touch.move(event);\n const direction = touch.deltaY.value > 0 ? DIRECTION_DOWN : DIRECTION_UP;\n const el = getScrollParent(\n event.target,\n rootRef.value\n );\n const { scrollHeight, offsetHeight, scrollTop } = el;\n let status = \"11\";\n if (scrollTop === 0) {\n status = offsetHeight >= scrollHeight ? \"00\" : \"01\";\n } else if (scrollTop + offsetHeight >= scrollHeight) {\n status = \"10\";\n }\n if (status !== \"11\" && touch.isVertical() && !(parseInt(status, 2) & parseInt(direction, 2))) {\n preventDefault(event, true);\n }\n };\n const lock = () => {\n document.addEventListener(\"touchstart\", touch.start);\n document.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n if (!totalLockCount) {\n document.body.classList.add(BODY_LOCK_CLASS);\n }\n totalLockCount++;\n };\n const unlock = () => {\n if (totalLockCount) {\n document.removeEventListener(\"touchstart\", touch.start);\n document.removeEventListener(\"touchmove\", onTouchMove);\n totalLockCount--;\n if (!totalLockCount) {\n document.body.classList.remove(BODY_LOCK_CLASS);\n }\n }\n };\n const init = () => shouldLock() && lock();\n const destroy = () => shouldLock() && unlock();\n onMountedOrActivated(init);\n onDeactivated(destroy);\n onBeforeUnmount(destroy);\n watch(shouldLock, (value) => {\n value ? lock() : unlock();\n });\n}\nexport {\n useLockScroll\n};\n","import { ref, watch } from \"vue\";\nfunction useLazyRender(show) {\n const inited = ref(false);\n watch(\n show,\n (value) => {\n if (value) {\n inited.value = value;\n }\n },\n { immediate: true }\n );\n return (render) => () => inited.value ? render() : null;\n}\nexport {\n useLazyRender\n};\n","import { getCurrentInstance } from \"vue\";\nconst useScopeId = () => {\n var _a;\n const { scopeId } = ((_a = getCurrentInstance()) == null ? void 0 : _a.vnode) || {};\n return scopeId ? { [scopeId]: \"\" } : null;\n};\nexport {\n useScopeId\n};\n","import { ref, defineComponent, Teleport, Transition, vShow as _vShow, mergeProps as _mergeProps, createVNode as _createVNode, withDirectives as _withDirectives } from \"vue\";\nimport { isDef, extend, truthProp, numericProp, unknownProp, preventDefault, createNamespace, getZIndexStyle } from \"../utils/index.mjs\";\nimport { useEventListener } from \"@vant/use\";\nimport { useLazyRender } from \"../composables/use-lazy-render.mjs\";\nconst [name, bem] = createNamespace(\"overlay\");\nconst overlayProps = {\n show: Boolean,\n zIndex: numericProp,\n duration: numericProp,\n className: unknownProp,\n lockScroll: truthProp,\n lazyRender: truthProp,\n customStyle: Object,\n teleport: [String, Object]\n};\nvar stdin_default = defineComponent({\n name,\n inheritAttrs: false,\n props: overlayProps,\n setup(props, {\n attrs,\n slots\n }) {\n const root = ref();\n const lazyRender = useLazyRender(() => props.show || !props.lazyRender);\n const onTouchMove = (event) => {\n if (props.lockScroll) {\n preventDefault(event, true);\n }\n };\n const renderOverlay = lazyRender(() => {\n var _a;\n const style = extend(getZIndexStyle(props.zIndex), props.customStyle);\n if (isDef(props.duration)) {\n style.animationDuration = `${props.duration}s`;\n }\n return _withDirectives(_createVNode(\"div\", _mergeProps({\n \"ref\": root,\n \"style\": style,\n \"class\": [bem(), props.className]\n }, attrs), [(_a = slots.default) == null ? void 0 : _a.call(slots)]), [[_vShow, props.show]]);\n });\n useEventListener(\"touchmove\", onTouchMove, {\n target: root\n });\n return () => {\n const Content = _createVNode(Transition, {\n \"name\": \"van-fade\",\n \"appear\": true\n }, {\n default: renderOverlay\n });\n if (props.teleport) {\n return _createVNode(Teleport, {\n \"to\": props.teleport\n }, {\n default: () => [Content]\n });\n }\n return Content;\n };\n }\n});\nexport {\n stdin_default as default,\n overlayProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Overlay from \"./Overlay.mjs\";\nconst Overlay = withInstall(_Overlay);\nvar stdin_default = Overlay;\nimport { overlayProps } from \"./Overlay.mjs\";\nexport {\n Overlay,\n stdin_default as default,\n overlayProps\n};\n","import { ref, watch, provide, Teleport, nextTick, computed, onMounted, Transition, onActivated, onDeactivated, defineComponent, mergeProps as _mergeProps, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\";\nimport { popupSharedProps } from \"./shared.mjs\";\nimport { isDef, extend, makeStringProp, callInterceptor, createNamespace, HAPTICS_FEEDBACK } from \"../utils/index.mjs\";\nimport { useEventListener } from \"@vant/use\";\nimport { useExpose } from \"../composables/use-expose.mjs\";\nimport { useLockScroll } from \"../composables/use-lock-scroll.mjs\";\nimport { useLazyRender } from \"../composables/use-lazy-render.mjs\";\nimport { POPUP_TOGGLE_KEY } from \"../composables/on-popup-reopen.mjs\";\nimport { useGlobalZIndex } from \"../composables/use-global-z-index.mjs\";\nimport { useScopeId } from \"../composables/use-scope-id.mjs\";\nimport { Icon } from \"../icon/index.mjs\";\nimport { Overlay } from \"../overlay/index.mjs\";\nconst popupProps = extend({}, popupSharedProps, {\n round: Boolean,\n position: makeStringProp(\"center\"),\n closeIcon: makeStringProp(\"cross\"),\n closeable: Boolean,\n transition: String,\n iconPrefix: String,\n closeOnPopstate: Boolean,\n closeIconPosition: makeStringProp(\"top-right\"),\n destroyOnClose: Boolean,\n safeAreaInsetTop: Boolean,\n safeAreaInsetBottom: Boolean\n});\nconst [name, bem] = createNamespace(\"popup\");\nvar stdin_default = defineComponent({\n name,\n inheritAttrs: false,\n props: popupProps,\n emits: [\"open\", \"close\", \"opened\", \"closed\", \"keydown\", \"update:show\", \"clickOverlay\", \"clickCloseIcon\"],\n setup(props, {\n emit,\n attrs,\n slots\n }) {\n let opened;\n let shouldReopen;\n const zIndex = ref();\n const popupRef = ref();\n const lazyRender = useLazyRender(() => props.show || !props.lazyRender);\n const style = computed(() => {\n const style2 = {\n zIndex: zIndex.value\n };\n if (isDef(props.duration)) {\n const key = props.position === \"center\" ? \"animationDuration\" : \"transitionDuration\";\n style2[key] = `${props.duration}s`;\n }\n return style2;\n });\n const open = () => {\n if (!opened) {\n opened = true;\n zIndex.value = props.zIndex !== void 0 ? +props.zIndex : useGlobalZIndex();\n emit(\"open\");\n }\n };\n const close = () => {\n if (opened) {\n callInterceptor(props.beforeClose, {\n done() {\n opened = false;\n emit(\"close\");\n emit(\"update:show\", false);\n }\n });\n }\n };\n const onClickOverlay = (event) => {\n emit(\"clickOverlay\", event);\n if (props.closeOnClickOverlay) {\n close();\n }\n };\n const renderOverlay = () => {\n if (props.overlay) {\n const overlayProps = extend({\n show: props.show,\n class: props.overlayClass,\n zIndex: zIndex.value,\n duration: props.duration,\n customStyle: props.overlayStyle,\n role: props.closeOnClickOverlay ? \"button\" : void 0,\n tabindex: props.closeOnClickOverlay ? 0 : void 0\n }, props.overlayProps);\n return _createVNode(Overlay, _mergeProps(overlayProps, useScopeId(), {\n \"onClick\": onClickOverlay\n }), {\n default: slots[\"overlay-content\"]\n });\n }\n };\n const onClickCloseIcon = (event) => {\n emit(\"clickCloseIcon\", event);\n close();\n };\n const renderCloseIcon = () => {\n if (props.closeable) {\n return _createVNode(Icon, {\n \"role\": \"button\",\n \"tabindex\": 0,\n \"name\": props.closeIcon,\n \"class\": [bem(\"close-icon\", props.closeIconPosition), HAPTICS_FEEDBACK],\n \"classPrefix\": props.iconPrefix,\n \"onClick\": onClickCloseIcon\n }, null);\n }\n };\n let timer;\n const onOpened = () => {\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n emit(\"opened\");\n });\n };\n const onClosed = () => emit(\"closed\");\n const onKeydown = (event) => emit(\"keydown\", event);\n const renderPopup = lazyRender(() => {\n var _a;\n const {\n destroyOnClose,\n round,\n position,\n safeAreaInsetTop,\n safeAreaInsetBottom,\n show\n } = props;\n if (!show && destroyOnClose) {\n return;\n }\n return _withDirectives(_createVNode(\"div\", _mergeProps({\n \"ref\": popupRef,\n \"style\": style.value,\n \"role\": \"dialog\",\n \"tabindex\": 0,\n \"class\": [bem({\n round,\n [position]: position\n }), {\n \"van-safe-area-top\": safeAreaInsetTop,\n \"van-safe-area-bottom\": safeAreaInsetBottom\n }],\n \"onKeydown\": onKeydown\n }, attrs, useScopeId()), [(_a = slots.default) == null ? void 0 : _a.call(slots), renderCloseIcon()]), [[_vShow, show]]);\n });\n const renderTransition = () => {\n const {\n position,\n transition,\n transitionAppear\n } = props;\n const name2 = position === \"center\" ? \"van-fade\" : `van-popup-slide-${position}`;\n return _createVNode(Transition, {\n \"name\": transition || name2,\n \"appear\": transitionAppear,\n \"onAfterEnter\": onOpened,\n \"onAfterLeave\": onClosed\n }, {\n default: renderPopup\n });\n };\n watch(() => props.show, (show) => {\n if (show && !opened) {\n open();\n if (attrs.tabindex === 0) {\n nextTick(() => {\n var _a;\n (_a = popupRef.value) == null ? void 0 : _a.focus();\n });\n }\n }\n if (!show && opened) {\n opened = false;\n emit(\"close\");\n }\n });\n useExpose({\n popupRef\n });\n useLockScroll(popupRef, () => props.show && props.lockScroll);\n useEventListener(\"popstate\", () => {\n if (props.closeOnPopstate) {\n close();\n shouldReopen = false;\n }\n });\n onMounted(() => {\n if (props.show) {\n open();\n }\n });\n onActivated(() => {\n if (shouldReopen) {\n emit(\"update:show\", true);\n shouldReopen = false;\n }\n });\n onDeactivated(() => {\n if (props.show && props.teleport) {\n close();\n shouldReopen = true;\n }\n });\n provide(POPUP_TOGGLE_KEY, () => props.show);\n return () => {\n if (props.teleport) {\n return _createVNode(Teleport, {\n \"to\": props.teleport\n }, {\n default: () => [renderOverlay(), renderTransition()]\n });\n }\n return _createVNode(_Fragment, null, [renderOverlay(), renderTransition()]);\n };\n }\n});\nexport {\n stdin_default as default,\n popupProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Popup from \"./Popup.mjs\";\nconst Popup = withInstall(_Popup);\nvar stdin_default = Popup;\nimport { popupProps } from \"./Popup.mjs\";\nexport {\n Popup,\n stdin_default as default,\n popupProps\n};\n","import { getCurrentInstance } from \"vue\";\nlet current = 0;\nfunction useId() {\n const vm = getCurrentInstance();\n const { name = \"unknown\" } = (vm == null ? void 0 : vm.type) || {};\n if (process.env.NODE_ENV === \"test\") {\n return name;\n }\n return `${name}-${++current}`;\n}\nexport {\n useId\n};\n","import { defineComponent, createVNode as _createVNode } from \"vue\";\nimport { isDef, extend, truthProp, unknownProp, numericProp, makeStringProp, createNamespace } from \"../utils/index.mjs\";\nimport { useRoute, routeProps } from \"../composables/use-route.mjs\";\nimport { Icon } from \"../icon/index.mjs\";\nconst [name, bem] = createNamespace(\"cell\");\nconst cellSharedProps = {\n tag: makeStringProp(\"div\"),\n icon: String,\n size: String,\n title: numericProp,\n value: numericProp,\n label: numericProp,\n center: Boolean,\n isLink: Boolean,\n border: truthProp,\n iconPrefix: String,\n valueClass: unknownProp,\n labelClass: unknownProp,\n titleClass: unknownProp,\n titleStyle: null,\n arrowDirection: String,\n required: {\n type: [Boolean, String],\n default: null\n },\n clickable: {\n type: Boolean,\n default: null\n }\n};\nconst cellProps = extend({}, cellSharedProps, routeProps);\nvar stdin_default = defineComponent({\n name,\n props: cellProps,\n setup(props, {\n slots\n }) {\n const route = useRoute();\n const renderLabel = () => {\n const showLabel = slots.label || isDef(props.label);\n if (showLabel) {\n return _createVNode(\"div\", {\n \"class\": [bem(\"label\"), props.labelClass]\n }, [slots.label ? slots.label() : props.label]);\n }\n };\n const renderTitle = () => {\n var _a;\n if (slots.title || isDef(props.title)) {\n const titleSlot = (_a = slots.title) == null ? void 0 : _a.call(slots);\n if (Array.isArray(titleSlot) && titleSlot.length === 0) {\n return;\n }\n return _createVNode(\"div\", {\n \"class\": [bem(\"title\"), props.titleClass],\n \"style\": props.titleStyle\n }, [titleSlot || _createVNode(\"span\", null, [props.title]), renderLabel()]);\n }\n };\n const renderValue = () => {\n const slot = slots.value || slots.default;\n const hasValue = slot || isDef(props.value);\n if (hasValue) {\n return _createVNode(\"div\", {\n \"class\": [bem(\"value\"), props.valueClass]\n }, [slot ? slot() : _createVNode(\"span\", null, [props.value])]);\n }\n };\n const renderLeftIcon = () => {\n if (slots.icon) {\n return slots.icon();\n }\n if (props.icon) {\n return _createVNode(Icon, {\n \"name\": props.icon,\n \"class\": bem(\"left-icon\"),\n \"classPrefix\": props.iconPrefix\n }, null);\n }\n };\n const renderRightIcon = () => {\n if (slots[\"right-icon\"]) {\n return slots[\"right-icon\"]();\n }\n if (props.isLink) {\n const name2 = props.arrowDirection && props.arrowDirection !== \"right\" ? `arrow-${props.arrowDirection}` : \"arrow\";\n return _createVNode(Icon, {\n \"name\": name2,\n \"class\": bem(\"right-icon\")\n }, null);\n }\n };\n return () => {\n var _a;\n const {\n tag,\n size,\n center,\n border,\n isLink,\n required\n } = props;\n const clickable = (_a = props.clickable) != null ? _a : isLink;\n const classes = {\n center,\n required: !!required,\n clickable,\n borderless: !border\n };\n if (size) {\n classes[size] = !!size;\n }\n return _createVNode(tag, {\n \"class\": bem(classes),\n \"role\": clickable ? \"button\" : void 0,\n \"tabindex\": clickable ? 0 : void 0,\n \"onClick\": route\n }, {\n default: () => {\n var _a2;\n return [renderLeftIcon(), renderTitle(), renderValue(), renderRightIcon(), (_a2 = slots.extra) == null ? void 0 : _a2.call(slots)];\n }\n });\n };\n }\n});\nexport {\n cellProps,\n cellSharedProps,\n stdin_default as default\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Cell from \"./Cell.mjs\";\nconst Cell = withInstall(_Cell);\nvar stdin_default = Cell;\nimport { cellProps } from \"./Cell.mjs\";\nexport {\n Cell,\n cellProps,\n stdin_default as default\n};\n","import {\n isObject,\n isPromise,\n isFunction,\n getRootScrollTop,\n setRootScrollTop\n} from \"../utils/index.mjs\";\nfunction isEmptyValue(value) {\n if (Array.isArray(value)) {\n return !value.length;\n }\n if (value === 0) {\n return false;\n }\n return !value;\n}\nfunction runSyncRule(value, rule) {\n if (isEmptyValue(value)) {\n if (rule.required) {\n return false;\n }\n if (rule.validateEmpty === false) {\n return true;\n }\n }\n if (rule.pattern && !rule.pattern.test(String(value))) {\n return false;\n }\n return true;\n}\nfunction runRuleValidator(value, rule) {\n return new Promise((resolve) => {\n const returnVal = rule.validator(value, rule);\n if (isPromise(returnVal)) {\n returnVal.then(resolve);\n return;\n }\n resolve(returnVal);\n });\n}\nfunction getRuleMessage(value, rule) {\n const { message } = rule;\n if (isFunction(message)) {\n return message(value, rule);\n }\n return message || \"\";\n}\nfunction startComposing({ target }) {\n target.composing = true;\n}\nfunction endComposing({ target }) {\n if (target.composing) {\n target.composing = false;\n target.dispatchEvent(new Event(\"input\"));\n }\n}\nfunction resizeTextarea(input, autosize) {\n const scrollTop = getRootScrollTop();\n input.style.height = \"auto\";\n let height = input.scrollHeight;\n if (isObject(autosize)) {\n const { maxHeight, minHeight } = autosize;\n if (maxHeight !== void 0) {\n height = Math.min(height, maxHeight);\n }\n if (minHeight !== void 0) {\n height = Math.max(height, minHeight);\n }\n }\n if (height) {\n input.style.height = `${height}px`;\n setRootScrollTop(scrollTop);\n }\n}\nfunction mapInputType(type, inputmode) {\n if (type === \"number\") {\n type = \"text\";\n inputmode != null ? inputmode : inputmode = \"decimal\";\n }\n if (type === \"digit\") {\n type = \"tel\";\n inputmode != null ? inputmode : inputmode = \"numeric\";\n }\n return { type, inputmode };\n}\nfunction getStringLength(str) {\n return [...str].length;\n}\nfunction cutString(str, maxlength) {\n return [...str].slice(0, maxlength).join(\"\");\n}\nexport {\n cutString,\n endComposing,\n getRuleMessage,\n getStringLength,\n isEmptyValue,\n mapInputType,\n resizeTextarea,\n runRuleValidator,\n runSyncRule,\n startComposing\n};\n","import { ref, watch, provide, computed, nextTick, reactive, onMounted, defineComponent, createVNode as _createVNode, mergeProps as _mergeProps, createTextVNode as _createTextVNode } from \"vue\";\nimport { isDef, extend, addUnit, toArray, FORM_KEY, numericProp, unknownProp, resetScroll, formatNumber, preventDefault, makeStringProp, makeNumericProp, createNamespace, clamp } from \"../utils/index.mjs\";\nimport { cutString, runSyncRule, endComposing, mapInputType, isEmptyValue, startComposing, getRuleMessage, resizeTextarea, getStringLength, runRuleValidator } from \"./utils.mjs\";\nimport { cellSharedProps } from \"../cell/Cell.mjs\";\nimport { useParent, useEventListener, CUSTOM_FIELD_INJECTION_KEY } from \"@vant/use\";\nimport { useId } from \"../composables/use-id.mjs\";\nimport { useExpose } from \"../composables/use-expose.mjs\";\nimport { Icon } from \"../icon/index.mjs\";\nimport { Cell } from \"../cell/index.mjs\";\nconst [name, bem] = createNamespace(\"field\");\nconst fieldSharedProps = {\n id: String,\n name: String,\n leftIcon: String,\n rightIcon: String,\n autofocus: Boolean,\n clearable: Boolean,\n maxlength: numericProp,\n max: Number,\n min: Number,\n formatter: Function,\n clearIcon: makeStringProp(\"clear\"),\n modelValue: makeNumericProp(\"\"),\n inputAlign: String,\n placeholder: String,\n autocomplete: String,\n autocapitalize: String,\n autocorrect: String,\n errorMessage: String,\n enterkeyhint: String,\n clearTrigger: makeStringProp(\"focus\"),\n formatTrigger: makeStringProp(\"onChange\"),\n spellcheck: {\n type: Boolean,\n default: null\n },\n error: {\n type: Boolean,\n default: null\n },\n disabled: {\n type: Boolean,\n default: null\n },\n readonly: {\n type: Boolean,\n default: null\n },\n inputmode: String\n};\nconst fieldProps = extend({}, cellSharedProps, fieldSharedProps, {\n rows: numericProp,\n type: makeStringProp(\"text\"),\n rules: Array,\n autosize: [Boolean, Object],\n labelWidth: numericProp,\n labelClass: unknownProp,\n labelAlign: String,\n showWordLimit: Boolean,\n errorMessageAlign: String,\n colon: {\n type: Boolean,\n default: null\n }\n});\nvar stdin_default = defineComponent({\n name,\n props: fieldProps,\n emits: [\"blur\", \"focus\", \"clear\", \"keypress\", \"clickInput\", \"endValidate\", \"startValidate\", \"clickLeftIcon\", \"clickRightIcon\", \"update:modelValue\"],\n setup(props, {\n emit,\n slots\n }) {\n const id = useId();\n const state = reactive({\n status: \"unvalidated\",\n focused: false,\n validateMessage: \"\"\n });\n const inputRef = ref();\n const clearIconRef = ref();\n const customValue = ref();\n const {\n parent: form\n } = useParent(FORM_KEY);\n const getModelValue = () => {\n var _a;\n return String((_a = props.modelValue) != null ? _a : \"\");\n };\n const getProp = (key) => {\n if (isDef(props[key])) {\n return props[key];\n }\n if (form && isDef(form.props[key])) {\n return form.props[key];\n }\n };\n const showClear = computed(() => {\n const readonly = getProp(\"readonly\");\n if (props.clearable && !readonly) {\n const hasValue = getModelValue() !== \"\";\n const trigger = props.clearTrigger === \"always\" || props.clearTrigger === \"focus\" && state.focused;\n return hasValue && trigger;\n }\n return false;\n });\n const formValue = computed(() => {\n if (customValue.value && slots.input) {\n return customValue.value();\n }\n return props.modelValue;\n });\n const showRequiredMark = computed(() => {\n var _a;\n const required = getProp(\"required\");\n if (required === \"auto\") {\n return (_a = props.rules) == null ? void 0 : _a.some((rule) => rule.required);\n }\n return required;\n });\n const runRules = (rules) => rules.reduce((promise, rule) => promise.then(() => {\n if (state.status === \"failed\") {\n return;\n }\n let {\n value\n } = formValue;\n if (rule.formatter) {\n value = rule.formatter(value, rule);\n }\n if (!runSyncRule(value, rule)) {\n state.status = \"failed\";\n state.validateMessage = getRuleMessage(value, rule);\n return;\n }\n if (rule.validator) {\n if (isEmptyValue(value) && rule.validateEmpty === false) {\n return;\n }\n return runRuleValidator(value, rule).then((result) => {\n if (result && typeof result === \"string\") {\n state.status = \"failed\";\n state.validateMessage = result;\n } else if (result === false) {\n state.status = \"failed\";\n state.validateMessage = getRuleMessage(value, rule);\n }\n });\n }\n }), Promise.resolve());\n const resetValidation = () => {\n state.status = \"unvalidated\";\n state.validateMessage = \"\";\n };\n const endValidate = () => emit(\"endValidate\", {\n status: state.status,\n message: state.validateMessage\n });\n const validate = (rules = props.rules) => new Promise((resolve) => {\n resetValidation();\n if (rules) {\n emit(\"startValidate\");\n runRules(rules).then(() => {\n if (state.status === \"failed\") {\n resolve({\n name: props.name,\n message: state.validateMessage\n });\n endValidate();\n } else {\n state.status = \"passed\";\n resolve();\n endValidate();\n }\n });\n } else {\n resolve();\n }\n });\n const validateWithTrigger = (trigger) => {\n if (form && props.rules) {\n const {\n validateTrigger\n } = form.props;\n const defaultTrigger = toArray(validateTrigger).includes(trigger);\n const rules = props.rules.filter((rule) => {\n if (rule.trigger) {\n return toArray(rule.trigger).includes(trigger);\n }\n return defaultTrigger;\n });\n if (rules.length) {\n validate(rules);\n }\n }\n };\n const limitValueLength = (value) => {\n var _a;\n const {\n maxlength\n } = props;\n if (isDef(maxlength) && getStringLength(value) > +maxlength) {\n const modelValue = getModelValue();\n if (modelValue && getStringLength(modelValue) === +maxlength) {\n return modelValue;\n }\n const selectionEnd = (_a = inputRef.value) == null ? void 0 : _a.selectionEnd;\n if (state.focused && selectionEnd) {\n const valueArr = [...value];\n const exceededLength = valueArr.length - +maxlength;\n valueArr.splice(selectionEnd - exceededLength, exceededLength);\n return valueArr.join(\"\");\n }\n return cutString(value, +maxlength);\n }\n return value;\n };\n const updateValue = (value, trigger = \"onChange\") => {\n var _a, _b;\n const originalValue = value;\n value = limitValueLength(value);\n const limitDiffLen = getStringLength(originalValue) - getStringLength(value);\n if (props.type === \"number\" || props.type === \"digit\") {\n const isNumber = props.type === \"number\";\n value = formatNumber(value, isNumber, isNumber);\n if (trigger === \"onBlur\" && value !== \"\" && (props.min !== void 0 || props.max !== void 0)) {\n const adjustedValue = clamp(+value, (_a = props.min) != null ? _a : -Infinity, (_b = props.max) != null ? _b : Infinity);\n if (+value !== adjustedValue) {\n value = adjustedValue.toString();\n }\n }\n }\n let formatterDiffLen = 0;\n if (props.formatter && trigger === props.formatTrigger) {\n const {\n formatter,\n maxlength\n } = props;\n value = formatter(value);\n if (isDef(maxlength) && getStringLength(value) > +maxlength) {\n value = cutString(value, +maxlength);\n }\n if (inputRef.value && state.focused) {\n const {\n selectionEnd\n } = inputRef.value;\n const bcoVal = cutString(originalValue, selectionEnd);\n formatterDiffLen = getStringLength(formatter(bcoVal)) - getStringLength(bcoVal);\n }\n }\n if (inputRef.value && inputRef.value.value !== value) {\n if (state.focused) {\n let {\n selectionStart,\n selectionEnd\n } = inputRef.value;\n inputRef.value.value = value;\n if (isDef(selectionStart) && isDef(selectionEnd)) {\n const valueLen = getStringLength(value);\n if (limitDiffLen) {\n selectionStart -= limitDiffLen;\n selectionEnd -= limitDiffLen;\n } else if (formatterDiffLen) {\n selectionStart += formatterDiffLen;\n selectionEnd += formatterDiffLen;\n }\n inputRef.value.setSelectionRange(Math.min(selectionStart, valueLen), Math.min(selectionEnd, valueLen));\n }\n } else {\n inputRef.value.value = value;\n }\n }\n if (value !== props.modelValue) {\n emit(\"update:modelValue\", value);\n }\n };\n const onInput = (event) => {\n if (!event.target.composing) {\n updateValue(event.target.value);\n }\n };\n const blur = () => {\n var _a;\n return (_a = inputRef.value) == null ? void 0 : _a.blur();\n };\n const focus = () => {\n var _a;\n return (_a = inputRef.value) == null ? void 0 : _a.focus();\n };\n const adjustTextareaSize = () => {\n const input = inputRef.value;\n if (props.type === \"textarea\" && props.autosize && input) {\n resizeTextarea(input, props.autosize);\n }\n };\n const onFocus = (event) => {\n state.focused = true;\n emit(\"focus\", event);\n nextTick(adjustTextareaSize);\n if (getProp(\"readonly\")) {\n blur();\n }\n };\n const onBlur = (event) => {\n state.focused = false;\n updateValue(getModelValue(), \"onBlur\");\n emit(\"blur\", event);\n if (getProp(\"readonly\")) {\n return;\n }\n validateWithTrigger(\"onBlur\");\n nextTick(adjustTextareaSize);\n resetScroll();\n };\n const onClickInput = (event) => emit(\"clickInput\", event);\n const onClickLeftIcon = (event) => emit(\"clickLeftIcon\", event);\n const onClickRightIcon = (event) => emit(\"clickRightIcon\", event);\n const onClear = (event) => {\n preventDefault(event);\n emit(\"update:modelValue\", \"\");\n emit(\"clear\", event);\n };\n const showError = computed(() => {\n if (typeof props.error === \"boolean\") {\n return props.error;\n }\n if (form && form.props.showError && state.status === \"failed\") {\n return true;\n }\n });\n const labelStyle = computed(() => {\n const labelWidth = getProp(\"labelWidth\");\n const labelAlign = getProp(\"labelAlign\");\n if (labelWidth && labelAlign !== \"top\") {\n return {\n width: addUnit(labelWidth)\n };\n }\n });\n const onKeypress = (event) => {\n const ENTER_CODE = 13;\n if (event.keyCode === ENTER_CODE) {\n const submitOnEnter = form && form.props.submitOnEnter;\n if (!submitOnEnter && props.type !== \"textarea\") {\n preventDefault(event);\n }\n if (props.type === \"search\") {\n blur();\n }\n }\n emit(\"keypress\", event);\n };\n const getInputId = () => props.id || `${id}-input`;\n const getValidationStatus = () => state.status;\n const renderInput = () => {\n const controlClass = bem(\"control\", [getProp(\"inputAlign\"), {\n error: showError.value,\n custom: !!slots.input,\n \"min-height\": props.type === \"textarea\" && !props.autosize\n }]);\n if (slots.input) {\n return _createVNode(\"div\", {\n \"class\": controlClass,\n \"onClick\": onClickInput\n }, [slots.input()]);\n }\n const inputAttrs = {\n id: getInputId(),\n ref: inputRef,\n name: props.name,\n rows: props.rows !== void 0 ? +props.rows : void 0,\n class: controlClass,\n disabled: getProp(\"disabled\"),\n readonly: getProp(\"readonly\"),\n autofocus: props.autofocus,\n placeholder: props.placeholder,\n autocomplete: props.autocomplete,\n autocapitalize: props.autocapitalize,\n autocorrect: props.autocorrect,\n enterkeyhint: props.enterkeyhint,\n spellcheck: props.spellcheck,\n \"aria-labelledby\": props.label ? `${id}-label` : void 0,\n \"data-allow-mismatch\": \"attribute\",\n onBlur,\n onFocus,\n onInput,\n onClick: onClickInput,\n onChange: endComposing,\n onKeypress,\n onCompositionend: endComposing,\n onCompositionstart: startComposing\n };\n if (props.type === \"textarea\") {\n return _createVNode(\"textarea\", _mergeProps(inputAttrs, {\n \"inputmode\": props.inputmode\n }), null);\n }\n return _createVNode(\"input\", _mergeProps(mapInputType(props.type, props.inputmode), inputAttrs), null);\n };\n const renderLeftIcon = () => {\n const leftIconSlot = slots[\"left-icon\"];\n if (props.leftIcon || leftIconSlot) {\n return _createVNode(\"div\", {\n \"class\": bem(\"left-icon\"),\n \"onClick\": onClickLeftIcon\n }, [leftIconSlot ? leftIconSlot() : _createVNode(Icon, {\n \"name\": props.leftIcon,\n \"classPrefix\": props.iconPrefix\n }, null)]);\n }\n };\n const renderRightIcon = () => {\n const rightIconSlot = slots[\"right-icon\"];\n if (props.rightIcon || rightIconSlot) {\n return _createVNode(\"div\", {\n \"class\": bem(\"right-icon\"),\n \"onClick\": onClickRightIcon\n }, [rightIconSlot ? rightIconSlot() : _createVNode(Icon, {\n \"name\": props.rightIcon,\n \"classPrefix\": props.iconPrefix\n }, null)]);\n }\n };\n const renderWordLimit = () => {\n if (props.showWordLimit && props.maxlength) {\n const count = getStringLength(getModelValue());\n return _createVNode(\"div\", {\n \"class\": bem(\"word-limit\")\n }, [_createVNode(\"span\", {\n \"class\": bem(\"word-num\")\n }, [count]), _createTextVNode(\"/\"), props.maxlength]);\n }\n };\n const renderMessage = () => {\n if (form && form.props.showErrorMessage === false) {\n return;\n }\n const message = props.errorMessage || state.validateMessage;\n if (message) {\n const slot = slots[\"error-message\"];\n const errorMessageAlign = getProp(\"errorMessageAlign\");\n return _createVNode(\"div\", {\n \"class\": bem(\"error-message\", errorMessageAlign)\n }, [slot ? slot({\n message\n }) : message]);\n }\n };\n const renderLabel = () => {\n const labelWidth = getProp(\"labelWidth\");\n const labelAlign = getProp(\"labelAlign\");\n const colon = getProp(\"colon\") ? \":\" : \"\";\n if (slots.label) {\n return [slots.label(), colon];\n }\n if (props.label) {\n return _createVNode(\"label\", {\n \"id\": `${id}-label`,\n \"for\": slots.input ? void 0 : getInputId(),\n \"data-allow-mismatch\": \"attribute\",\n \"onClick\": (event) => {\n preventDefault(event);\n focus();\n },\n \"style\": labelAlign === \"top\" && labelWidth ? {\n width: addUnit(labelWidth)\n } : void 0\n }, [props.label + colon]);\n }\n };\n const renderFieldBody = () => [_createVNode(\"div\", {\n \"class\": bem(\"body\")\n }, [renderInput(), showClear.value && _createVNode(Icon, {\n \"ref\": clearIconRef,\n \"name\": props.clearIcon,\n \"class\": bem(\"clear\")\n }, null), renderRightIcon(), slots.button && _createVNode(\"div\", {\n \"class\": bem(\"button\")\n }, [slots.button()])]), renderWordLimit(), renderMessage()];\n useExpose({\n blur,\n focus,\n validate,\n formValue,\n resetValidation,\n getValidationStatus\n });\n provide(CUSTOM_FIELD_INJECTION_KEY, {\n customValue,\n resetValidation,\n validateWithTrigger\n });\n watch(() => props.modelValue, () => {\n updateValue(getModelValue());\n resetValidation();\n validateWithTrigger(\"onChange\");\n nextTick(adjustTextareaSize);\n });\n onMounted(() => {\n updateValue(getModelValue(), props.formatTrigger);\n nextTick(adjustTextareaSize);\n });\n useEventListener(\"touchstart\", onClear, {\n target: computed(() => {\n var _a;\n return (_a = clearIconRef.value) == null ? void 0 : _a.$el;\n })\n });\n return () => {\n const disabled = getProp(\"disabled\");\n const labelAlign = getProp(\"labelAlign\");\n const LeftIcon = renderLeftIcon();\n const renderTitle = () => {\n const Label = renderLabel();\n if (labelAlign === \"top\") {\n return [LeftIcon, Label].filter(Boolean);\n }\n return Label || [];\n };\n return _createVNode(Cell, {\n \"size\": props.size,\n \"class\": bem({\n error: showError.value,\n disabled,\n [`label-${labelAlign}`]: labelAlign\n }),\n \"center\": props.center,\n \"border\": props.border,\n \"isLink\": props.isLink,\n \"clickable\": props.clickable,\n \"titleStyle\": labelStyle.value,\n \"valueClass\": bem(\"value\"),\n \"titleClass\": [bem(\"label\", [labelAlign, {\n required: showRequiredMark.value\n }]), props.labelClass],\n \"arrowDirection\": props.arrowDirection\n }, {\n icon: LeftIcon && labelAlign !== \"top\" ? () => LeftIcon : null,\n title: renderTitle,\n value: renderFieldBody,\n extra: slots.extra\n });\n };\n }\n});\nexport {\n stdin_default as default,\n fieldProps,\n fieldSharedProps\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Field from \"./Field.mjs\";\nconst Field = withInstall(_Field);\nvar stdin_default = Field;\nimport { fieldProps } from \"./Field.mjs\";\nexport {\n Field,\n stdin_default as default,\n fieldProps\n};\n","let lockCount = 0;\nfunction lockClick(lock) {\n if (lock) {\n if (!lockCount) {\n document.body.classList.add(\"van-toast--unclickable\");\n }\n lockCount++;\n } else if (lockCount) {\n lockCount--;\n if (!lockCount) {\n document.body.classList.remove(\"van-toast--unclickable\");\n }\n }\n}\nexport {\n lockClick\n};\n","import { watch, onMounted, onUnmounted, defineComponent, createVNode as _createVNode, mergeProps as _mergeProps } from \"vue\";\nimport { pick, isDef, unknownProp, numericProp, makeStringProp, makeNumberProp, createNamespace } from \"../utils/index.mjs\";\nimport { lockClick } from \"./lock-click.mjs\";\nimport { Icon } from \"../icon/index.mjs\";\nimport { Popup } from \"../popup/index.mjs\";\nimport { Loading } from \"../loading/index.mjs\";\nconst [name, bem] = createNamespace(\"toast\");\nconst popupInheritProps = [\"show\", \"overlay\", \"teleport\", \"transition\", \"overlayClass\", \"overlayStyle\", \"closeOnClickOverlay\", \"zIndex\"];\nconst toastProps = {\n icon: String,\n show: Boolean,\n type: makeStringProp(\"text\"),\n overlay: Boolean,\n message: numericProp,\n iconSize: numericProp,\n duration: makeNumberProp(2e3),\n position: makeStringProp(\"middle\"),\n teleport: [String, Object],\n wordBreak: String,\n className: unknownProp,\n iconPrefix: String,\n transition: makeStringProp(\"van-fade\"),\n loadingType: String,\n forbidClick: Boolean,\n overlayClass: unknownProp,\n overlayStyle: Object,\n closeOnClick: Boolean,\n closeOnClickOverlay: Boolean,\n zIndex: numericProp\n};\nvar stdin_default = defineComponent({\n name,\n props: toastProps,\n emits: [\"update:show\"],\n setup(props, {\n emit,\n slots\n }) {\n let timer;\n let clickable = false;\n const toggleClickable = () => {\n const newValue = props.show && props.forbidClick;\n if (clickable !== newValue) {\n clickable = newValue;\n lockClick(clickable);\n }\n };\n const updateShow = (show) => emit(\"update:show\", show);\n const onClick = () => {\n if (props.closeOnClick) {\n updateShow(false);\n }\n };\n const clearTimer = () => clearTimeout(timer);\n const renderIcon = () => {\n const {\n icon,\n type,\n iconSize,\n iconPrefix,\n loadingType\n } = props;\n const hasIcon = icon || type === \"success\" || type === \"fail\";\n if (hasIcon) {\n return _createVNode(Icon, {\n \"name\": icon || type,\n \"size\": iconSize,\n \"class\": bem(\"icon\"),\n \"classPrefix\": iconPrefix\n }, null);\n }\n if (type === \"loading\") {\n return _createVNode(Loading, {\n \"class\": bem(\"loading\"),\n \"size\": iconSize,\n \"type\": loadingType\n }, null);\n }\n };\n const renderMessage = () => {\n const {\n type,\n message\n } = props;\n if (slots.message) {\n return _createVNode(\"div\", {\n \"class\": bem(\"text\")\n }, [slots.message()]);\n }\n if (isDef(message) && message !== \"\") {\n return type === \"html\" ? _createVNode(\"div\", {\n \"key\": 0,\n \"class\": bem(\"text\"),\n \"innerHTML\": String(message)\n }, null) : _createVNode(\"div\", {\n \"class\": bem(\"text\")\n }, [message]);\n }\n };\n watch(() => [props.show, props.forbidClick], toggleClickable);\n watch(() => [props.show, props.type, props.message, props.duration], () => {\n clearTimer();\n if (props.show && props.duration > 0) {\n timer = setTimeout(() => {\n updateShow(false);\n }, props.duration);\n }\n });\n onMounted(toggleClickable);\n onUnmounted(toggleClickable);\n return () => _createVNode(Popup, _mergeProps({\n \"class\": [bem([props.position, props.wordBreak === \"normal\" ? \"break-normal\" : props.wordBreak, {\n [props.type]: !props.icon\n }]), props.className],\n \"lockScroll\": false,\n \"onClick\": onClick,\n \"onClosed\": clearTimer,\n \"onUpdate:show\": updateShow\n }, pick(props, popupInheritProps)), {\n default: () => [renderIcon(), renderMessage()]\n });\n }\n});\nexport {\n stdin_default as default,\n toastProps\n};\n","import { createApp, reactive } from \"vue\";\nimport { extend } from \"./basic.mjs\";\nimport { useExpose } from \"../composables/use-expose.mjs\";\nfunction usePopupState() {\n const state = reactive({\n show: false\n });\n const toggle = (show) => {\n state.show = show;\n };\n const open = (props) => {\n extend(state, props, { transitionAppear: true });\n toggle(true);\n };\n const close = () => toggle(false);\n useExpose({ open, close, toggle });\n return {\n open,\n close,\n state,\n toggle\n };\n}\nfunction mountComponent(RootComponent) {\n const app = createApp(RootComponent);\n const root = document.createElement(\"div\");\n document.body.appendChild(root);\n return {\n instance: app.mount(root),\n unmount() {\n app.unmount();\n document.body.removeChild(root);\n }\n };\n}\nexport {\n mountComponent,\n usePopupState\n};\n","import { ref, watch, getCurrentInstance, mergeProps as _mergeProps, createVNode as _createVNode } from \"vue\";\nimport { extend, isObject, inBrowser } from \"../utils/index.mjs\";\nimport { mountComponent, usePopupState } from \"../utils/mount-component.mjs\";\nimport VanToast from \"./Toast.mjs\";\nconst defaultOptions = {\n icon: \"\",\n type: \"text\",\n message: \"\",\n className: \"\",\n overlay: false,\n onClose: void 0,\n onOpened: void 0,\n duration: 2e3,\n teleport: \"body\",\n iconSize: void 0,\n iconPrefix: void 0,\n position: \"middle\",\n transition: \"van-fade\",\n forbidClick: false,\n loadingType: void 0,\n overlayClass: \"\",\n overlayStyle: void 0,\n closeOnClick: false,\n closeOnClickOverlay: false\n};\nlet queue = [];\nlet allowMultiple = false;\nlet currentOptions = extend({}, defaultOptions);\nconst defaultOptionsMap = /* @__PURE__ */ new Map();\nfunction parseOptions(message) {\n if (isObject(message)) {\n return message;\n }\n return {\n message\n };\n}\nfunction createInstance() {\n const {\n instance,\n unmount\n } = mountComponent({\n setup() {\n const message = ref(\"\");\n const {\n open,\n state,\n close,\n toggle\n } = usePopupState();\n const onClosed = () => {\n if (allowMultiple) {\n queue = queue.filter((item) => item !== instance);\n unmount();\n }\n };\n const render = () => {\n const attrs = {\n onClosed,\n \"onUpdate:show\": toggle\n };\n return _createVNode(VanToast, _mergeProps(state, attrs), null);\n };\n watch(message, (val) => {\n state.message = val;\n });\n getCurrentInstance().render = render;\n return {\n open,\n close,\n message\n };\n }\n });\n return instance;\n}\nfunction getInstance() {\n if (!queue.length || allowMultiple) {\n const instance = createInstance();\n queue.push(instance);\n }\n return queue[queue.length - 1];\n}\nfunction showToast(options = {}) {\n if (!inBrowser) {\n return {};\n }\n const toast = getInstance();\n const parsedOptions = parseOptions(options);\n toast.open(extend({}, currentOptions, defaultOptionsMap.get(parsedOptions.type || currentOptions.type), parsedOptions));\n return toast;\n}\nconst createMethod = (type) => (options) => showToast(extend({\n type\n}, parseOptions(options)));\nconst showLoadingToast = createMethod(\"loading\");\nconst showSuccessToast = createMethod(\"success\");\nconst showFailToast = createMethod(\"fail\");\nconst closeToast = (all) => {\n var _a;\n if (queue.length) {\n if (all) {\n queue.forEach((toast) => {\n toast.close();\n });\n queue = [];\n } else if (!allowMultiple) {\n queue[0].close();\n } else {\n (_a = queue.shift()) == null ? void 0 : _a.close();\n }\n }\n};\nfunction setToastDefaultOptions(type, options) {\n if (typeof type === \"string\") {\n defaultOptionsMap.set(type, options);\n } else {\n extend(currentOptions, type);\n }\n}\nconst resetToastDefaultOptions = (type) => {\n if (typeof type === \"string\") {\n defaultOptionsMap.delete(type);\n } else {\n currentOptions = extend({}, defaultOptions);\n defaultOptionsMap.clear();\n }\n};\nconst allowMultipleToast = (value = true) => {\n allowMultiple = value;\n};\nexport {\n allowMultipleToast,\n closeToast,\n resetToastDefaultOptions,\n setToastDefaultOptions,\n showFailToast,\n showLoadingToast,\n showSuccessToast,\n showToast\n};\n","import { withInstall } from \"../utils/index.mjs\";\nimport _Toast from \"./Toast.mjs\";\nconst Toast = withInstall(_Toast);\nvar stdin_default = Toast;\nimport { toastProps } from \"./Toast.mjs\";\nimport {\n showToast,\n closeToast,\n showFailToast,\n showLoadingToast,\n showSuccessToast,\n allowMultipleToast,\n setToastDefaultOptions,\n resetToastDefaultOptions\n} from \"./function-call.mjs\";\nexport {\n Toast,\n allowMultipleToast,\n closeToast,\n stdin_default as default,\n resetToastDefaultOptions,\n setToastDefaultOptions,\n showFailToast,\n showLoadingToast,\n showSuccessToast,\n showToast,\n toastProps\n};\n","<script setup>\r\nimport { computed, onMounted, ref } from 'vue';\r\nimport ArrowRight from '../icons/ArrowRight.vue';\r\nimport Popup from '../popup/popup.vue';\r\nimport { showToast } from 'vant';\r\nimport { Field } from 'vant';\r\n\r\nconst showPopup = ref(false);\r\nconst props = defineProps({\r\n query: {\r\n type: String,\r\n default: '',\r\n },\r\n});\r\n\r\nconst dialogInfo = ref({\r\n key: 'sex',\r\n sex: '',\r\n age: '',\r\n height: '',\r\n weight: '',\r\n sport: '',\r\n taste: [],\r\n taboo: [],\r\n title: '标题',\r\n unit: '',\r\n dialogHeight: '50vh',\r\n min: 0,\r\n max: 100,\r\n type: 'digit',\r\n});\r\n\r\nconst sportList = [\r\n {\r\n key: 'rest',\r\n name: '休息状态',\r\n sub: '卧床或者坐式休息',\r\n },\r\n {\r\n key: 'sedentary',\r\n name: '久坐',\r\n sub: '坐式工作',\r\n },\r\n {\r\n key: 'light',\r\n name: '轻体力',\r\n sub: '站立或需要走动的工作',\r\n },\r\n {\r\n key: 'medium',\r\n name: '中体力',\r\n sub: '走动多的工作',\r\n },\r\n {\r\n key: 'heavy',\r\n name: '重体力',\r\n sub: '高强度体力工作',\r\n },\r\n];\r\nconst tasteList = [\r\n '不吃辣',\r\n '不吃葱',\r\n '不吃姜',\r\n '不吃蒜',\r\n '不吃糖',\r\n '不吃鱼',\r\n '不吃虾',\r\n '不吃牛肉',\r\n '不吃鸡肉',\r\n '不吃猪肉',\r\n];\r\nconst tabooList = ['高GI', '高饱和脂肪酸', '高嘌呤', '高盐', '高胆固醇'];\r\n\r\nconst pfForm = ref([\r\n {\r\n key: 'sex',\r\n label: '性别',\r\n value: '',\r\n placeholder: '请输选择',\r\n required: true,\r\n },\r\n {\r\n key: 'age',\r\n label: '年龄',\r\n value: '',\r\n placeholder: '请输入年龄',\r\n unit: '岁',\r\n required: true,\r\n },\r\n {\r\n key: 'height',\r\n label: '身高',\r\n value: '',\r\n placeholder: '请输入身高',\r\n unit: 'cm',\r\n required: true,\r\n },\r\n {\r\n key: 'weight',\r\n label: '体重',\r\n value: '',\r\n placeholder: '请输入体重',\r\n unit: 'kg',\r\n required: true,\r\n },\r\n {\r\n key: 'sport',\r\n label: '日常运动水平',\r\n value: '久坐',\r\n placeholder: '请输入',\r\n required: true,\r\n },\r\n {\r\n key: 'taste',\r\n label: '口味偏好及饮食禁忌',\r\n value: '',\r\n taste: [],\r\n taboo: [],\r\n placeholder: '无忌口',\r\n required: false,\r\n },\r\n]);\r\n\r\nconst Emits = defineEmits(['submit']);\r\n\r\nonMounted(() => {\r\n const form = localStorage.getItem('personalInfo');\r\n if (form) {\r\n const formData = JSON.parse(form);\r\n for (let i = 0; i < pfForm.value.length; i++) {\r\n const idx = formData.findIndex((con) => con.key === pfForm.value[i].key);\r\n pfForm.value[i] = { ...pfForm.value[i], ...formData[idx] };\r\n }\r\n }\r\n});\r\n\r\nconst isValid = computed(() => {\r\n return pfForm.value\r\n .filter((item) => item.key !== 'taste')\r\n .every((item) => item.value !== '');\r\n});\r\n\r\nconst handleSelect = (item) => {\r\n dialogInfo.value.key = item.key;\r\n\r\n switch (item.key) {\r\n case 'sex':\r\n dialogInfo.value.title = '选择性别';\r\n dialogInfo.value.dialogHeight = '300px';\r\n dialogInfo.value.sex = item.value;\r\n break;\r\n case 'age':\r\n dialogInfo.value.title = '设置年龄';\r\n dialogInfo.value.dialogHeight = '240px';\r\n dialogInfo.value.unit = item.unit;\r\n dialogInfo.value.age = item.value;\r\n dialogInfo.value.min = 6;\r\n dialogInfo.value.max = 100;\r\n dialogInfo.value.type = 'number';\r\n break;\r\n case 'height':\r\n dialogInfo.value.title = '设置身高';\r\n dialogInfo.value.dialogHeight = '240px';\r\n dialogInfo.value.unit = item.unit;\r\n dialogInfo.value.height = item.value;\r\n dialogInfo.value.min = 100;\r\n dialogInfo.value.max = 220;\r\n dialogInfo.value.type = 'digit';\r\n break;\r\n case 'weight':\r\n dialogInfo.value.title = '设置体重';\r\n dialogInfo.value.dialogHeight = '240px';\r\n dialogInfo.value.unit = item.unit;\r\n dialogInfo.value.weight = item.value;\r\n dialogInfo.value.min = 10;\r\n dialogInfo.value.max = 150;\r\n dialogInfo.value.type = 'digit';\r\n break;\r\n case 'sport':\r\n dialogInfo.value.title = '日常运动水平';\r\n dialogInfo.value.dialogHeight = '420px';\r\n dialogInfo.value.unit = '';\r\n dialogInfo.value.sport = item.value;\r\n break;\r\n case 'taste':\r\n dialogInfo.value.title = '口味偏好&饮食禁忌';\r\n dialogInfo.value.dialogHeight = '500px';\r\n dialogInfo.value.unit = '';\r\n dialogInfo.value.taste = [...item.taste];\r\n dialogInfo.value.taboo = [...item.taboo];\r\n break;\r\n }\r\n console.log(dialogInfo.value, item);\r\n showPopup.value = true;\r\n};\r\n\r\nconst handleConfirm = () => {\r\n switch (dialogInfo.value.key) {\r\n case 'sex':\r\n if (!dialogInfo.value.sex) {\r\n showToast('请选择性别');\r\n return;\r\n }\r\n pfForm.value.find((item) => item.key === 'sex').value =\r\n dialogInfo.value.sex;\r\n break;\r\n case 'age':\r\n if (!dialogInfo.value.age) {\r\n showToast('请输入年龄');\r\n return;\r\n }\r\n pfForm.value.find((item) => item.key === 'age').value =\r\n dialogInfo.value.age;\r\n break;\r\n case 'height':\r\n if (!dialogInfo.value.height) {\r\n showToast('请输入身高');\r\n return;\r\n }\r\n pfForm.value.find((item) => item.key === 'height').value =\r\n dialogInfo.value.height;\r\n break;\r\n case 'weight':\r\n if (!dialogInfo.value.weight) {\r\n showToast('请输入体重');\r\n return;\r\n }\r\n pfForm.value.find((item) => item.key === 'weight').value =\r\n dialogInfo.value.weight;\r\n break;\r\n case 'sport':\r\n if (!dialogInfo.value.sport) {\r\n showToast('请选择日常运动水平');\r\n return;\r\n }\r\n pfForm.value.find((item) => item.key === 'sport').value =\r\n dialogInfo.value.sport;\r\n break;\r\n case 'taste':\r\n pfForm.value.find((item) => item.key === 'taste').taste =\r\n dialogInfo.value.taste;\r\n pfForm.value.find((item) => item.key === 'taste').taboo =\r\n dialogInfo.value.taboo;\r\n pfForm.value.find((item) => item.key === 'taste').value = [\r\n ...dialogInfo.value.taste,\r\n ...dialogInfo.value.taboo,\r\n ].join('、');\r\n break;\r\n }\r\n\r\n showPopup.value = false;\r\n};\r\n\r\nconst handleSubmit = () => {\r\n if (!isValid.value) {\r\n showToast('请填写完整信息');\r\n return;\r\n }\r\n\r\n const ageIdx = pfForm.value.findIndex((item) => item.key === 'age');\r\n const heightIdx = pfForm.value.findIndex((item) => item.key === 'height');\r\n const weightIdx = pfForm.value.findIndex((item) => item.key === 'weight');\r\n\r\n if (pfForm.value[ageIdx].value < 6 || pfForm.value[ageIdx].value > 100) {\r\n showToast('年龄需要在6-100岁');\r\n return;\r\n }\r\n if (\r\n pfForm.value[heightIdx].value < 100 ||\r\n pfForm.value[heightIdx].value > 220\r\n ) {\r\n showToast('身高需要在100-220cm');\r\n return;\r\n }\r\n if (\r\n pfForm.value[weightIdx].value < 10 ||\r\n pfForm.value[weightIdx].value > 150\r\n ) {\r\n showToast('体重需要在10-150kg');\r\n return;\r\n }\r\n\r\n localStorage.setItem('personalInfo', JSON.stringify(pfForm.value));\r\n const msg = `${props.query};\r\n性别:${pfForm.value.find((item) => item.key === 'sex').value};\r\n年龄:${pfForm.value[ageIdx].value}${pfForm.value[ageIdx].unit || ''};\r\n身高:${pfForm.value[heightIdx].value}${pfForm.value[heightIdx].unit || ''};\r\n体重:${pfForm.value[weightIdx].value}${pfForm.value[weightIdx].unit || ''};\r\n日常运动水平:${pfForm.value.find((item) => item.key === 'sport').value};\r\n口味偏好及饮食禁忌:${\r\n pfForm.value.find((item) => item.key === 'taste').value\r\n ? pfForm.value.find((item) => item.key === 'taste').value\r\n : '没有饮食禁忌'\r\n };`;\r\n console.log(msg);\r\n Emits('submit', [{ content: msg, text: msg }]);\r\n};\r\n\r\nconst selectTag = (item, type) => {\r\n if (dialogInfo.value[type].includes(item)) {\r\n dialogInfo.value[type] = dialogInfo.value[type].filter((i) => i !== item);\r\n } else {\r\n dialogInfo.value[type].push(item);\r\n }\r\n};\r\n\r\nconst selectSport = (item) => {\r\n dialogInfo.value.sport = item.name;\r\n handleConfirm();\r\n};\r\n\r\nconst selectSex = (item) => {\r\n dialogInfo.value.sex = item;\r\n handleConfirm();\r\n};\r\n</script>\r\n\r\n<template>\r\n <div class=\"pf_wrap\">\r\n <div class=\"pf_form\">\r\n <div v-for=\"item in pfForm\" :key=\"item.key\" class=\"pf_row\">\r\n <div class=\"title\" :class=\"{ is_required: item.required }\">\r\n {{ item.label }}\r\n </div>\r\n <div class=\"content\" @click=\"handleSelect(item)\">\r\n <span\r\n class=\"text_row\"\r\n :style=\"{ color: item.value ? '#000' : '#75759d' }\"\r\n >{{\r\n item.value ? `${item.value} ${item.unit || ''}` : item.placeholder\r\n }}</span\r\n >\r\n <arrow-right class=\"arrow\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"pf_btn\"\r\n :class=\"{ disabled: !isValid }\"\r\n @click.stop=\"handleSubmit\"\r\n >\r\n 按身体数据领取食谱\r\n </div>\r\n </div>\r\n\r\n <popup\r\n v-model:show=\"showPopup\"\r\n :title=\"dialogInfo.title\"\r\n :height=\"dialogInfo.dialogHeight\"\r\n @confirm=\"handleConfirm\"\r\n >\r\n <template #default>\r\n <div v-if=\"dialogInfo.key === 'sex'\" class=\"sex_wrap\">\r\n <div\r\n :class=\"{ sex: true, selected: dialogInfo.sex === '男' }\"\r\n @click.stop=\"selectSex('男')\"\r\n >\r\n 男\r\n </div>\r\n <div\r\n :class=\"{ sex: true, selected: dialogInfo.sex === '女' }\"\r\n @click.stop=\"selectSex('女')\"\r\n >\r\n 女\r\n </div>\r\n </div>\r\n <div\r\n v-if=\"['age', 'height', 'weight'].includes(dialogInfo.key)\"\r\n class=\"input_wrap\"\r\n >\r\n <Field\r\n v-model=\"dialogInfo[dialogInfo.key]\"\r\n class=\"input\"\r\n :type=\"dialogInfo.type\"\r\n :min=\"dialogInfo.min\"\r\n :max=\"dialogInfo.max\"\r\n @keyup.enter=\"handleConfirm\"\r\n placeholder=\"请输入\"\r\n />\r\n <div class=\"unit\">{{ dialogInfo.unit }}</div>\r\n </div>\r\n <div v-if=\"dialogInfo.key === 'sport'\" class=\"sport_wrap\">\r\n <div\r\n v-for=\"item in sportList\"\r\n :key=\"item.key\"\r\n :class=\"{ row: true, selected: dialogInfo.sport === item.name }\"\r\n @click.stop=\"selectSport(item)\"\r\n >\r\n <div class=\"name\">{{ item.name }}</div>\r\n <div class=\"sub\">{{ item.sub }}</div>\r\n </div>\r\n </div>\r\n <div v-if=\"dialogInfo.key === 'taste'\" class=\"taste_wrap\">\r\n <div class=\"title\">口味偏好</div>\r\n <div class=\"box\">\r\n <div\r\n :class=\"{ tag: true, selected: dialogInfo.taste.includes(item) }\"\r\n v-for=\"item in tasteList\"\r\n :key=\"item\"\r\n @click.stop=\"selectTag(item, 'taste')\"\r\n >\r\n {{ item }}\r\n </div>\r\n </div>\r\n <div class=\"line\"></div>\r\n <div class=\"title\">饮食禁忌</div>\r\n <div class=\"box\">\r\n <div\r\n :class=\"{ tag: true, selected: dialogInfo.taboo.includes(item) }\"\r\n v-for=\"item in tabooList\"\r\n :key=\"item\"\r\n @click.stop=\"selectTag(item, 'taboo')\"\r\n >\r\n {{ item }}\r\n </div>\r\n </div>\r\n </div>\r\n </template>\r\n </popup>\r\n</template>\r\n\r\n<style scoped lang=\"less\">\r\n.pf {\r\n &_wrap {\r\n width: 100%;\r\n }\r\n\r\n &_form {\r\n padding: 0 15px;\r\n background: #fff;\r\n border-radius: 8px;\r\n }\r\n\r\n &_row {\r\n display: flex;\r\n gap: 6px;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: space-between;\r\n border-bottom: 1px solid #dadada;\r\n height: 54px;\r\n line-height: 24px;\r\n\r\n &:last-child {\r\n border-bottom: none;\r\n }\r\n\r\n .title {\r\n font-size: 14px;\r\n font-weight: 600;\r\n position: relative;\r\n line-height: 24px;\r\n\r\n &.is_required {\r\n &::after {\r\n content: '*';\r\n color: #ff0000;\r\n font-size: 14px;\r\n line-height: 24px;\r\n position: absolute;\r\n right: -0.6em;\r\n }\r\n }\r\n }\r\n\r\n .content {\r\n display: flex;\r\n flex-direction: row;\r\n align-items: center;\r\n justify-content: flex-end;\r\n }\r\n\r\n .arrow {\r\n color: #000;\r\n font-size: 22px;\r\n }\r\n .text_row {\r\n display: inline-block;\r\n font-size: 14px;\r\n text-align: right;\r\n width: 156px;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n }\r\n .input {\r\n font-size: 14px;\r\n text-align: right;\r\n outline: none;\r\n border: none;\r\n }\r\n }\r\n\r\n &_btn {\r\n cursor: pointer;\r\n height: 40px;\r\n line-height: 40px;\r\n border-radius: 20px;\r\n text-align: center;\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #000;\r\n background: #00dc4e;\r\n margin-top: 15px;\r\n\r\n &.disabled {\r\n color: #fff;\r\n background: #d9d9d9;\r\n }\r\n }\r\n}\r\n.sex {\r\n &_wrap {\r\n padding: 50px 0;\r\n .sex {\r\n transition: 100ms ease-in-out;\r\n font-size: 15px;\r\n font-weight: 400;\r\n text-align: center;\r\n height: 58px;\r\n line-height: 58px;\r\n border-top: 1px solid #fff;\r\n border-bottom: 1px solid #fff;\r\n &.selected {\r\n font-size: 20px;\r\n font-weight: 600;\r\n color: #039938;\r\n border-color: #d9d9d9;\r\n }\r\n }\r\n }\r\n}\r\n.input {\r\n &_wrap {\r\n text-align: center;\r\n padding: 20px 0;\r\n\r\n .input {\r\n height: 64px;\r\n line-height: 64px;\r\n font-size: 36px;\r\n text-align: center;\r\n width: 200px;\r\n outline: none;\r\n border: none;\r\n margin: auto;\r\n /deep/ .van-field__control {\r\n text-align: center;\r\n }\r\n }\r\n .unit {\r\n font-size: 15px;\r\n font-weight: 400;\r\n line-height: 22px;\r\n }\r\n }\r\n}\r\n.sport {\r\n &_wrap {\r\n padding: 20px 0;\r\n\r\n .row {\r\n transition: 100ms ease-in-out;\r\n height: 58px;\r\n border-top: 1px solid #fff;\r\n border-bottom: 1px solid #fff;\r\n .name {\r\n font-size: 15px;\r\n font-weight: 400;\r\n text-align: center;\r\n line-height: 28px;\r\n }\r\n .sub {\r\n font-size: 13px;\r\n font-weight: 400;\r\n text-align: center;\r\n line-height: 18px;\r\n }\r\n\r\n &.selected {\r\n .name {\r\n color: #039938;\r\n font-size: 16px;\r\n font-weight: 600;\r\n text-align: center;\r\n line-height: 32px;\r\n }\r\n .sub {\r\n color: #039938;\r\n font-size: 12px;\r\n font-weight: 400;\r\n text-align: center;\r\n line-height: 16px;\r\n }\r\n color: #039938;\r\n border-color: #d9d9d9;\r\n }\r\n }\r\n }\r\n}\r\n.taste {\r\n &_wrap {\r\n padding: 20px;\r\n .title {\r\n font-size: 15px;\r\n font-weight: 600;\r\n line-height: 32px;\r\n margin-bottom: 16px;\r\n }\r\n .box {\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n }\r\n .line {\r\n border-top: 1px solid #e9e9e9;\r\n margin: 25px 0;\r\n }\r\n .tag {\r\n height: 32px;\r\n line-height: 32px;\r\n padding: 0 15px;\r\n background-color: #f3f4f5;\r\n border-radius: 16px;\r\n font-size: 14px;\r\n text-align: center;\r\n &.selected {\r\n color: #fff;\r\n background-color: #000;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n","<template>\r\n <div class=\"cui_box\">\r\n <div class=\"cui_wrap\">\r\n <div v-if=\"showHeader\" class=\"cui_header\">\r\n <div class=\"title\" @click.stop=\"queryHistoryList\">\r\n <div class=\"back\" @click.stop=\"handleBack\">\r\n <back-icon />\r\n </div>\r\n <div class=\"name_box\">\r\n <div class=\"name\">{{ name }}</div>\r\n <div v-if=\"nameSub\" class=\"name_sub\">{{ nameSub }}</div>\r\n </div>\r\n </div>\r\n <div class=\"btn_group\">\r\n <button class=\"btn\" @click.stop=\"createConv\">\r\n <new-chat class=\"icon\" />\r\n <span style=\"font-size: 14px\">{{ finalDefMsg.newChat }}</span>\r\n </button>\r\n <template v-show=\"false\">\r\n <button class=\"btn\">\r\n <clear-icon />\r\n </button>\r\n <button class=\"btn\">\r\n <close-icon />\r\n </button>\r\n </template>\r\n </div>\r\n </div>\r\n <div class=\"cui_content\">\r\n <div\r\n v-if=\"botInfo && botInfo.onboarding_info\"\r\n style=\"text-align: left; margin-top: 50px\"\r\n >\r\n <div style=\"text-align: center\">\r\n <img\r\n :src=\"botInfo.icon_url\"\r\n alt=\"icon\"\r\n width=\"64\"\r\n height=\"64\"\r\n style=\"border-radius: 15px\"\r\n />\r\n <p class=\"board_name\">{{ botInfo.name }}</p>\r\n </div>\r\n\r\n <div class=\"board_desc\">{{ botInfo.onboarding_info.prologue }}</div>\r\n <div class=\"flexcss\">\r\n <span\r\n v-for=\"(item, idx) in botInfo.onboarding_info.suggested_questions\"\r\n :key=\"idx\"\r\n class=\"board_sug\"\r\n @click.stop=\"chatConv([{ content: item, text: item }])\"\r\n >{{ item }}</span\r\n >\r\n </div>\r\n </div>\r\n <template v-for=\"(conv, index) in historyList\" :key=\"index\">\r\n <div v-if=\"conv.role === 'assistant'\" class=\"replay role_sys\">\r\n <div class=\"replay_content\">\r\n <div class=\"name\">\r\n <img class=\"avatar\" :src=\"logo\" alt=\"avatar\" />\r\n {{ name }}\r\n <!--<span class=\"time\">12:30</span>-->\r\n </div>\r\n <div class=\"box\">\r\n <template v-if=\"conv.reasoning_content\">\r\n <div v-if=\"conv.status === 'thinking'\" class=\"think_status\">\r\n <thinking-icon class=\"icon\" />\r\n {{ finalDefMsg.thinking }}\r\n </div>\r\n <div v-else class=\"think_status\">\r\n <ok-icon class=\"icon\" />\r\n {{ finalDefMsg.thinkCompleted }}\r\n </div>\r\n\r\n <p class=\"think_text\">\r\n {{ conv.reasoning_content }}\r\n </p>\r\n </template>\r\n <template v-if=\"conv.content\">\r\n <assistant-replay\r\n v-if=\"contentTye === 'text'\"\r\n :content=\"conv.content\"\r\n />\r\n <markdown-viewer\r\n v-else-if=\"contentTye === 'markdown'\"\r\n :content=\"conv.content\"\r\n />\r\n <template v-if=\"!isAnswering\">\r\n <div v-if=\"conv.extra.length\">\r\n <template v-for=\"(comp, idx) in conv.extra\" :key=\"idx\">\r\n <!-- <p\r\n v-if=\"comp.showType === 'plan' && comp.planParse\"\r\n class=\"text\"\r\n style=\"margin-top: 1em\"\r\n >\r\n {{ comp.planParse }}\r\n </p>-->\r\n <dishes-list\r\n v-if=\"\r\n finalCardList.dishes && comp.showType === 'card'\r\n \"\r\n :sku-list=\"comp.skuList\"\r\n :is-mini=\"!showHeader\"\r\n :def-msg=\"finalDefMsg\"\r\n :channel=\"channel\"\r\n @select=\"(data) => handleCardTap(data, comp)\"\r\n />\r\n <plan-card\r\n v-if=\"finalCardList.plan && comp.showType === 'plan'\"\r\n :info=\"comp\"\r\n :def-msg=\"finalDefMsg\"\r\n @select=\"handleCardTap({ type: 'match' }, comp)\"\r\n />\r\n <store-list\r\n v-if=\"\r\n finalCardList.store && comp.showType === 'store'\r\n \"\r\n :list=\"comp.storeList\"\r\n @select=\"handleStoreSel\"\r\n />\r\n <personal-form\r\n v-if=\"\r\n finalCardList.personalForm &&\r\n comp.showType === 'personalForm'\r\n \"\r\n :query=\"firstMsg\"\r\n @submit=\"chatConv\"\r\n />\r\n <div v-if=\"comp.showType === 'contactKF'\">\r\n 电话热线:<a href=\"tel:4006681606\">400 6681 606</a>\r\n <img\r\n src=\"https://prodstatic.weis1606.cn/api/smartFood/mealPlan/contact_kf.png\"\r\n alt=\"\"\r\n width=\"100%\"\r\n style=\"margin-top: 10px\"\r\n />\r\n </div>\r\n </template>\r\n </div>\r\n <div v-else-if=\"handleTextNeedBtn(conv.content)\">\r\n <div\r\n class=\"cui_btn cui_btn_2\"\r\n @click.stop=\"handleCardTap({ type: 'match' }, {})\"\r\n >\r\n {{ finalDefMsg.useSolution }}\r\n </div>\r\n </div>\r\n </template>\r\n </template>\r\n <div\r\n v-if=\"isAnswering && index === historyList.length - 1\"\r\n class=\"loading_row\"\r\n >\r\n Ai努力生成中...\r\n <loading-icon2 />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div v-else class=\"replay role_user\">\r\n <div class=\"replay_content\">\r\n <div class=\"name\">\r\n 健康用户\r\n <!--<span class=\"time\">12:30</span>-->\r\n <img class=\"avatar\" :src=\"avatar\" alt=\"avatar\" />\r\n </div>\r\n <div class=\"box\">\r\n <p class=\"text\" v-html=\"conv.content\" />\r\n <div v-if=\"conv.extra.length\">\r\n <imge-list :list=\"conv.extra\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </template>\r\n <div ref=\"endTarget\" style=\"height: 100px\" />\r\n </div>\r\n <operate-module\r\n v-model=\"inputText\"\r\n :new-chat=\"!showHeader\"\r\n :token=\"token\"\r\n :tag-list=\"tagList\"\r\n :def-msg=\"finalDefMsg\"\r\n :is-req=\"isReq\"\r\n @send=\"chatConv\"\r\n @tag=\"handleTagSel\"\r\n @call=\"handleCall\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, nextTick, onMounted, provide, ref } from 'vue';\r\nimport ClearIcon from './components/icons/ClearIcon.vue';\r\nimport CloseIcon from './components/icons/CloseIcon.vue';\r\nimport NewSessionIcon from './components/icons/NewSessionIcon.vue';\r\nimport SendIcon from './components/icons/SendIcon.vue';\r\nimport { get, post } from './utils/request';\r\nimport DishesCard from './components/DishesCard.vue';\r\nimport DishesList from './components/DishesList.vue';\r\nimport PlanCard from './components/PlanCard.vue';\r\nimport OperateModule from './components/OperateModule.vue';\r\nimport BackIcon from './components/icons/BackIcon.vue';\r\nimport NewChat from './components/icons/newChat.vue';\r\nimport LoadingIcon from './components/icons/loadingIcon.vue';\r\nimport LoadingIcon2 from './components/icons/loadingIcon2.vue';\r\nimport ImgeList from './components/imgeList.vue';\r\nimport ThinkingIcon from './components/icons/ThinkingIcon.vue';\r\nimport OkIcon from './components/icons/OkIcon.vue';\r\nimport AssistantReplay from './components/assistantReplay/assistantReplay.vue';\r\nimport StoreList from './components/StoreList/StoreList.vue';\r\nimport MarkdownViewer from './components/MarkdownPlan/MarkdownViewer.vue';\r\nimport PersonalForm from './components/personalForm/personalForm.vue';\r\nimport processBar from './components/icons/processBar.vue';\r\n\r\nconst chatOptions = computed(() => {\r\n return {\r\n headers: {\r\n Authorization: `Bearer ${props.token}`,\r\n 'Content-Type': 'application/json',\r\n },\r\n };\r\n});\r\nconst conversationId = ref('');\r\nconst isAnswering = ref(false);\r\nconst isReq = ref('00');\r\nconst historyList = ref([]);\r\nconst isFirst = ref(false);\r\nconst turns = ref(1);\r\n\r\nconst msgObj = {\r\n placeholder: '發消息⋯',\r\n fileText: '請根據我上傳的體檢報告為我生成飲食方案',\r\n uploadingTips: '文件正在上傳,請稍候...',\r\n matchText: '請用以上方案為我配餐',\r\n matchContent: '請用以上方案為我配餐',\r\n energy: '熱量',\r\n protein: '蛋白質',\r\n fat: '脂肪',\r\n carbonwater: '碳水',\r\n newChat: '新對話',\r\n thinking: '思考中...',\r\n thinkCompleted: '思考完成',\r\n useSolution: '用該方案配餐',\r\n aiTips: '【内容由AI生成,仅供参考】',\r\n};\r\nconst defCardList = {\r\n store: true,\r\n dishes: true,\r\n plan: true,\r\n personalForm: false,\r\n};\r\n\r\nconst props = defineProps({\r\n logo: {\r\n type: String,\r\n default: 'https://prodstatic.weis1606.cn/api/smartFood/icon/weis_logo.png',\r\n },\r\n avatar: {\r\n type: String,\r\n default: 'https://prodstatic.weis1606.cn/api/smartFood/icon/def_gray.svg',\r\n },\r\n name: {\r\n type: String,\r\n default: 'Weis Bot',\r\n },\r\n nameSub: {\r\n type: String,\r\n default: 'nutribite.com',\r\n },\r\n botId: {\r\n type: String,\r\n required: true,\r\n },\r\n uid: {\r\n type: String,\r\n required: true,\r\n default: 'user',\r\n },\r\n channel: {\r\n type: String,\r\n default: 'web',\r\n },\r\n token: {\r\n type: String,\r\n required: true,\r\n },\r\n postToken: {\r\n type: String,\r\n default: '',\r\n },\r\n showHeader: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n tagList: {\r\n type: Array,\r\n default: () => [\r\n { name: '人工客服', value: 'kefu', type: 'chat', msg: '人工客服' },\r\n { name: '查看菜单', value: 'menu', type: 'call', msg: '查看菜单' },\r\n { name: '体检报告', value: 'exam', type: 'upload', msg: '体检报告' },\r\n ],\r\n },\r\n defMsg: {\r\n type: Object,\r\n default: () => ({}),\r\n },\r\n contentTye: {\r\n type: String,\r\n default: 'text',\r\n },\r\n cardList: {\r\n type: Object,\r\n default: () => ({\r\n store: true,\r\n dishes: true,\r\n plan: true,\r\n personalForm: false,\r\n }),\r\n },\r\n storage: {\r\n type: String,\r\n default: 'sessionStorage',\r\n },\r\n needLog: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n firstMsg: {\r\n type: String,\r\n default: '',\r\n },\r\n});\r\n\r\nconst Emits = defineEmits(['call', 'log']);\r\n\r\nconst finalDefMsg = computed(() => {\r\n return {\r\n ...msgObj,\r\n ...props.defMsg,\r\n };\r\n});\r\nconst finalCardList = computed(() => {\r\n return {\r\n ...defCardList,\r\n ...props.cardList,\r\n };\r\n});\r\n\r\nconst endTarget = ref(null);\r\nconst inputText = ref('');\r\nconst botInfo = ref({});\r\n\r\nconst storage = {\r\n setItem: (key, value) => {\r\n props.storage === 'sessionStorage'\r\n ? sessionStorage.setItem(key, value)\r\n : localStorage.setItem(key, value);\r\n },\r\n getItem: (key) => {\r\n return props.storage === 'sessionStorage'\r\n ? sessionStorage.getItem(key)\r\n : localStorage.getItem(key);\r\n },\r\n};\r\n\r\nonMounted(async () => {\r\n localStorage.setItem('postToken', props.postToken || '');\r\n if (storage.getItem('conversationId')) {\r\n conversationId.value = storage.getItem('conversationId');\r\n await queryBotInfo();\r\n await queryHistoryList();\r\n isFirst.value = false;\r\n } else {\r\n await createConv();\r\n if (props.firstMsg) {\r\n await handleFirstMsg();\r\n }\r\n }\r\n scrollToEnd();\r\n});\r\n\r\nconst handleFirstMsg = async () => {\r\n const presetList = [\r\n {\r\n params: {\r\n planType: '03', // 03保持,01减肥\r\n profileInfo: {\r\n birthday: '20010101',\r\n motion: '01',\r\n sex: '2',\r\n weight: '50',\r\n height: '160',\r\n },\r\n },\r\n age: 25,\r\n msg: `本食谱为均衡营养版${props.firstMsg}的食疗调养方案示例,依据以下女性常规身体数据制定:\r\n性别:女;\r\n年龄:25岁;\r\n身高:160cm;\r\n体重:50kg;\r\n日常运动水平:久坐;\r\n口味偏好及饮食禁忌:无;\r\n如需定制贴合个人情况的专属方案,请前往完善个人身体数据,获取个性化定制食谱。`,\r\n },\r\n {\r\n params: {\r\n planType: '03',\r\n profileInfo: {\r\n birthday: '20010101',\r\n motion: '01',\r\n sex: '1',\r\n weight: '65',\r\n height: '170',\r\n },\r\n },\r\n age: 25,\r\n msg: `本食谱为均衡营养版${props.firstMsg}的食疗调养方案示例,依据以下男性常规身体数据制定:\r\n性别:男;\r\n年龄:25岁;\r\n身高:170cm;\r\n体重:65kg;\r\n日常运动水平:久坐;\r\n口味偏好及饮食禁忌:无;\r\n如需定制贴合个人情况的专属方案,请前往完善个人身体数据,获取个性化定制食谱。`,\r\n },\r\n {\r\n params: {\r\n planType: '01',\r\n profileInfo: {\r\n birthday: '19910101',\r\n motion: '01',\r\n sex: '2',\r\n weight: '65',\r\n height: '160',\r\n },\r\n },\r\n age: 35,\r\n msg: `本食谱为控卡版${props.firstMsg}的食疗调养方案示例,依据以下女性常规身体数据制定:\r\n性别:女;\r\n年龄:35岁;\r\n身高:160cm;\r\n体重:65kg;\r\n日常运动水平:久坐;\r\n口味偏好及饮食禁忌:无;\r\n如需定制贴合个人情况的专属方案,请前往完善个人身体数据,获取个性化定制食谱。`,\r\n },\r\n {\r\n params: {\r\n planType: '01',\r\n profileInfo: {\r\n birthday: '19910101',\r\n motion: '01',\r\n sex: '1',\r\n weight: '75',\r\n height: '170',\r\n },\r\n },\r\n age: 35,\r\n msg: `本食谱为控卡版${props.firstMsg}的食疗调养方案示例,依据以下男性常规身体数据制定:\r\n性别:男;\r\n年龄:35岁;\r\n身高:170cm;\r\n体重:75kg;\r\n日常运动水平:久坐;\r\n口味偏好及饮食禁忌:无;\r\n如需定制贴合个人情况的专属方案,请前往完善个人身体数据,获取个性化定制食谱。`,\r\n },\r\n ];\r\n const categoryMap = {\r\n '01': '早餐',\r\n '02': '午餐',\r\n '03': '晚餐',\r\n '04': '加餐',\r\n };\r\n let p = localStorage.getItem('preset_point') || 0;\r\n p++;\r\n if (p >= presetList.length) {\r\n p = 0;\r\n }\r\n\r\n localStorage.setItem('preset_point', p);\r\n const curInfo = presetList[p];\r\n const curMsg = `帮我定制${props.firstMsg}的⻝疗调养⽅案`;\r\n const perMsg = curMsg;\r\n\r\n historyList.value = [\r\n {\r\n conversation_id: '',\r\n bot_id: props.botId,\r\n role: 'user',\r\n content: perMsg,\r\n reasoning_content: '',\r\n status: 'ended',\r\n extra: [],\r\n },\r\n ];\r\n\r\n const res = await post('/api/cn.weis.api.Food/bdGeneralTemp', {\r\n method: 'bdGeneralTemp',\r\n params: [{ ...curInfo.params }],\r\n token: props.postToken,\r\n });\r\n\r\n if (res.errCode === 0 && res.obj) {\r\n const cateMap = {};\r\n (res.obj.planDetails || []).forEach((item) => {\r\n cateMap[item.category] = {\r\n energy: `热量:${item.totalKcal}kcal`,\r\n carbonWater: `碳水:${item.carbohydrateTotal}g`,\r\n protein: `蛋白质:${item.proteinTotal}g`,\r\n fat: `脂肪:${item.fatTotal}g`,\r\n };\r\n });\r\n\r\n // const resMsg = `您的身高:${curInfo.params.profileInfo.height}cm 年龄:${\r\n // curInfo.age\r\n // } 岁 体重:${curInfo.params.profileInfo.weight}kg 性别:${\r\n // curInfo.params.profileInfo.sex === '2' ? '女' : '男'\r\n // } 日常运动水平:久坐\r\n // 根据您的身体状况,给您推荐的饮食方案如下\r\n\r\n const resMsg = `我将为您出通用的食谱建议,如您有定制化健康诉求,请点击下方“私人订制个性食谱”来让我结合您的个人情况制定个性化配餐计划\r\n\r\n\r\n| 早餐 | | 午餐 |\r\n|------------|----------|----|\r\n| ${cateMap['01'].energy} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['02'].energy} |\r\n| ${cateMap['01'].carbonWater} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['02'].carbonWater} |\r\n| ${cateMap['01'].protein} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['02'].protein} |\r\n| ${cateMap['01'].fat} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['02'].fat} |\r\n\r\n| 晚餐 | | 加餐 |\r\n|------------|----------|----|\r\n| ${cateMap['03'].energy} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['04'].energy} |\r\n| ${cateMap['03'].carbonWater} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['04'].carbonWater} |\r\n| ${cateMap['03'].protein} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['04'].protein} |\r\n| ${cateMap['03'].fat} |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; | ${cateMap['04'].fat} |`;\r\n\r\n historyList.value.push({\r\n conversation_id: '',\r\n bot_id: props.botId,\r\n role: 'assistant',\r\n content: resMsg,\r\n reasoning_content: '',\r\n status: 'ended',\r\n extra: [\r\n {\r\n ...res.obj,\r\n showType: 'card',\r\n },\r\n ],\r\n });\r\n Emits('log', {\r\n turns: turns.value,\r\n info: {\r\n ...historyList.value[historyList.value.length - 1],\r\n question: {\r\n content: perMsg,\r\n role: 'user',\r\n },\r\n },\r\n });\r\n }\r\n};\r\n\r\nconst createConv = async () => {\r\n const res = await post(\r\n 'https://api.coze.cn/v1/conversation/create',\r\n { bot_id: props.botId, connector_id: '999' },\r\n { ...chatOptions.value },\r\n );\r\n isFirst.value = true;\r\n turns.value = 0;\r\n console.log(res);\r\n if (res.code === 0 && res.data) {\r\n conversationId.value = res.data.id || '';\r\n storage.setItem('conversationId', conversationId.value);\r\n historyList.value = [];\r\n await queryBotInfo();\r\n // await messageCreate();\r\n }\r\n};\r\n// const messageCreate = async () => {\r\n// console.log(chatOptions.value);\r\n// const res = await post(\r\n// `https://api.coze.cn/v1/conversation/message/create?conversation_id=${conversationId.value}`,\r\n// { \"role\":\"user\",\"content\":`#userid_${props.uid}`,\"content_type\":\"text\"},\r\n// {...chatOptions.value});\r\n// };\r\n/*const messageCreate = async () => {\r\n const res = await fetch(\r\n `https://api.coze.cn/v3/chat?conversation_id=${conversationId.value}`,\r\n {\r\n method: 'POST',\r\n headers: {\r\n ...chatOptions.value.headers,\r\n // 'Content-Type': 'text/event-stream',\r\n },\r\n body: JSON.stringify({\r\n bot_id: props.botId,\r\n user_id: props.uid,\r\n stream: true,\r\n connector_id: '999',\r\n additional_messages: [\r\n {\r\n 'role': 'user',\r\n 'content_type': 'text',\r\n 'content': `#userid_${props.uid}`,\r\n\r\n }],\r\n }),\r\n credentials: 'same-origin', // 默认同源策略\r\n mode: 'cors', // 默认跨域模式\r\n cache: 'default', // 默认缓存策略\r\n },\r\n );\r\n};*/\r\n\r\nconst chatConv = async (data) => {\r\n isReq.value = '01';\r\n let isInCode = Array.isArray(data); // data.hasOwnProperty('text') && data.hasOwnProperty('code');\r\n const botId = props.botId;\r\n if (!(!isAnswering.value && (inputText.value || isInCode))) {\r\n return;\r\n }\r\n const inText = inputText.value;\r\n console.log('== user send ==', isInCode, data, inText);\r\n isAnswering.value = true;\r\n\r\n const additional_messages = [];\r\n const uObj = {\r\n conversation_id: conversationId.value,\r\n bot_id: botId,\r\n role: 'user',\r\n content: '',\r\n reasoning_content: '',\r\n status: 'ended',\r\n extra: [],\r\n };\r\n const markStr = `chat_${new Date().getTime()};`;\r\n data.forEach((item) => {\r\n if (item.hasOwnProperty('content') && item.content) {\r\n if (item.hasOwnProperty('type') && item.type === 'object_string') {\r\n console.log('=== item ====', item);\r\n // botId = '7474884145253023795';\r\n additional_messages.push({\r\n content: JSON.stringify(\r\n item.content.map((con) => ({\r\n type: con.type,\r\n file_id: con.file_id,\r\n })),\r\n ),\r\n content_type: 'object_string',\r\n role: 'user',\r\n meta_data: {\r\n chat_group: markStr,\r\n },\r\n });\r\n uObj.extra = item.content.map((con) => ({\r\n ...con,\r\n showType: con.type,\r\n }));\r\n } else {\r\n uObj.content = item.text;\r\n additional_messages.push({\r\n content: item.content,\r\n content_type: 'text',\r\n role: 'user',\r\n meta_data: {\r\n chat_group: markStr,\r\n },\r\n });\r\n }\r\n }\r\n });\r\n historyList.value.push(uObj);\r\n isReq.value = '02';\r\n // if (props.needLog) {\r\n // Emits('log', {\r\n // turns: turns.value,\r\n // info: uObj,\r\n // });\r\n // }\r\n const res = await fetch(\r\n `https://api.coze.cn/v3/chat?conversation_id=${conversationId.value}`,\r\n {\r\n method: 'POST',\r\n headers: {\r\n ...chatOptions.value.headers,\r\n // 'Content-Type': 'text/event-stream',\r\n },\r\n body: JSON.stringify({\r\n bot_id: botId,\r\n user_id: props.uid,\r\n stream: true,\r\n connector_id: '999',\r\n additional_messages /*[\r\n {\r\n content: '[{\"type\":\"image\",\"file_id\":\"7475569020654436390\"}]',\r\n content_type: 'object_string',\r\n role: 'user',\r\n },\r\n {\r\n role: 'user',\r\n content_type: 'text',\r\n content: isInCode ? data.code : inText, // '配餐1600kcal,身高173,体重60kg,生成一天的套餐',\r\n },\r\n ]*/,\r\n custom_variables: {\r\n uid: props.uid,\r\n },\r\n }),\r\n credentials: 'same-origin', // 默认同源策略\r\n mode: 'cors', // 默认跨域模式\r\n cache: 'default', // 默认缓存策略\r\n },\r\n );\r\n isReq.value = '03';\r\n historyList.value.push({\r\n conversation_id: '',\r\n bot_id: '',\r\n role: 'assistant',\r\n content: '',\r\n reasoning_content: '',\r\n status: 'answering',\r\n extra: [],\r\n });\r\n scrollToEnd();\r\n inputText.value = '';\r\n const idx = historyList.value.length - 1;\r\n const reader = res.body.getReader();\r\n const decoder = new TextDecoder('utf-8');\r\n let buffer = '';\r\n\r\n const handlePersonalForm = () => {\r\n console.log('======= End ======', historyList.value, isFirst.value);\r\n if (isFirst.value) {\r\n if (\r\n historyList.value[idx].extra.findIndex((item) =>\r\n item.hasOwnProperty('showType'),\r\n ) === -1\r\n ) {\r\n historyList.value[idx].extra.push({ showType: 'personalForm' });\r\n }\r\n isFirst.value = false;\r\n console.log('===============', historyList.value[idx]);\r\n }\r\n };\r\n\r\n // 逐块读取数据\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) {\r\n console.log('Stream has ended.');\r\n isAnswering.value = false;\r\n isReq.value = '00';\r\n historyList.value[idx].status = 'ended';\r\n handlePersonalForm();\r\n if (props.needLog) {\r\n Emits('log', {\r\n turns: turns.value,\r\n info: {\r\n ...historyList.value[idx],\r\n question: {\r\n ...uObj,\r\n },\r\n },\r\n });\r\n turns.value += 1;\r\n }\r\n scrollToEnd();\r\n break;\r\n }\r\n\r\n // 解码数据块\r\n const chunk = decoder.decode(value, { stream: true });\r\n buffer += chunk;\r\n\r\n // 处理数据块\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop(); // 保留未处理的片段\r\n\r\n lines.forEach((line) => {\r\n if (line.trim().length > 0 && line.trim().startsWith('data:')) {\r\n const str = line.replace(/^data:\\s*/, '');\r\n const strObj = JSON.parse(str);\r\n console.log('Received:', strObj);\r\n isAnswering.value = true;\r\n isReq.value = '04';\r\n if (!historyList.value[idx].bot_id && strObj.bot_id) {\r\n historyList.value[idx].bot_id = strObj.bot_id;\r\n }\r\n if (!historyList.value[idx].conversation_id && strObj.conversation_id) {\r\n historyList.value[idx].conversation_id = strObj.conversation_id;\r\n }\r\n if (\r\n strObj.hasOwnProperty('reasoning_content') &&\r\n strObj.reasoning_content &&\r\n strObj.type === 'answer'\r\n ) {\r\n historyList.value[idx].status = 'thinking';\r\n historyList.value[idx].reasoning_content += strObj.reasoning_content;\r\n scrollToEnd();\r\n } else if (\r\n strObj.hasOwnProperty('content') &&\r\n strObj.hasOwnProperty('content_type') &&\r\n strObj.content_type === 'text' &&\r\n strObj.hasOwnProperty('type') &&\r\n strObj.type === 'answer' &&\r\n !strObj.hasOwnProperty('created_at')\r\n ) {\r\n historyList.value[idx].status = 'answering';\r\n historyList.value[idx].content = handleText(\r\n historyList.value[idx].content + strObj.content,\r\n );\r\n scrollToEnd();\r\n } else if (\r\n strObj.hasOwnProperty('type') &&\r\n strObj.type === 'tool_response'\r\n ) {\r\n const extraObj = JSON.parse(strObj.content);\r\n if (extraObj.hasOwnProperty('showType')) {\r\n historyList.value[idx].extra.push({ ...extraObj });\r\n } else if (extraObj.hasOwnProperty('response_for_model')) {\r\n const modelObj = JSON.parse(extraObj.response_for_model);\r\n if (modelObj.hasOwnProperty('showType')) {\r\n historyList.value[idx].extra.push({ ...modelObj });\r\n }\r\n }\r\n scrollToEnd();\r\n }\r\n }\r\n });\r\n }\r\n console.log('====', historyList.value);\r\n};\r\n\r\nconst queryHistoryList = async () => {\r\n const res = await post(\r\n `https://api.coze.cn/v1/conversation/message/list?conversation_id=${conversationId.value}`,\r\n { order: 'asc' },\r\n { ...chatOptions.value },\r\n );\r\n if (res.code === 0 && res.data && res.data.length) {\r\n historyList.value = [];\r\n const cardList = [];\r\n const userFileList = [];\r\n res.data.forEach((row) => {\r\n if (row.hasOwnProperty('content_type')) {\r\n if (row.content_type === 'text') {\r\n historyList.value.push({\r\n chat_id: row.chat_id,\r\n conversation_id: row.conversation_id,\r\n bot_id: row.bot_id,\r\n role: row.role,\r\n meta_data: row.meta_data,\r\n content: handleText(row.content),\r\n reasoning_content: row.reasoning_content,\r\n status: 'ended',\r\n extra: [],\r\n });\r\n } else if (row.content_type === 'card' && row.role === 'assistant') {\r\n try {\r\n const cardObj = JSON.parse(row.content);\r\n if (cardObj.hasOwnProperty('showType')) {\r\n cardList.push({\r\n chat_id: row.chat_id,\r\n conversation_id: row.conversation_id,\r\n bot_id: row.bot_id,\r\n role: row.role,\r\n extra: [{ ...cardObj }],\r\n });\r\n } else if (cardObj.hasOwnProperty('response_for_model')) {\r\n const modelObj = JSON.parse(cardObj.response_for_model);\r\n if (modelObj.hasOwnProperty('showType')) {\r\n cardList.push({\r\n chat_id: row.chat_id,\r\n conversation_id: row.conversation_id,\r\n bot_id: row.bot_id,\r\n role: row.role,\r\n extra: [{ ...modelObj }],\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n console.log('== 解析错误 sys==');\r\n }\r\n } else if (\r\n row.content_type === 'object_string' &&\r\n row.role === 'user'\r\n ) {\r\n try {\r\n const strObj = JSON.parse(row.content);\r\n cardList.push({\r\n chat_id: row.chat_id,\r\n conversation_id: row.conversation_id,\r\n bot_id: row.bot_id,\r\n role: row.role,\r\n meta_data: row.meta_data,\r\n extra: strObj.map((item) => ({ ...item, showType: item.type })),\r\n });\r\n } catch (e) {\r\n console.log('== 解析错误 user==');\r\n }\r\n }\r\n }\r\n });\r\n cardList.forEach((card) => {\r\n const idx =\r\n card.role === 'user'\r\n ? historyList.value.findIndex(\r\n (c) =>\r\n c.meta_data.chat_group === card.meta_data.chat_group &&\r\n c.role === card.role,\r\n )\r\n : historyList.value.findIndex(\r\n (c) => c.chat_id === card.chat_id && c.role === card.role,\r\n );\r\n if (idx > -1) {\r\n historyList.value[idx].extra = [...card.extra];\r\n }\r\n });\r\n }\r\n\r\n console.log('== history ==', historyList.value, finalCardList.value);\r\n};\r\n\r\nconst queryBotInfo = async () => {\r\n const res = await get(\r\n `https://api.coze.cn/v1/bot/get_online_info?bot_id=${props.botId}`,\r\n { ...chatOptions.value },\r\n );\r\n console.log(res);\r\n if (res.code === 0 && res.data) {\r\n botInfo.value = { ...res.data };\r\n }\r\n};\r\n\r\nconst handleText = (str) => {\r\n return str;\r\n // console.log(str);\r\n // let txt = '';\r\n //\r\n // return str.replaceAll(\r\n // /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)]+)\\)/gi,\r\n // '<a href=\"$2\" target=\"_blank\">[$1]</a>',\r\n // );\r\n};\r\nconst handleBack = () => {\r\n Emits('call', { type: 'back' });\r\n};\r\nconst handleStoreSel = (info) => {\r\n chatConv([{ content: info.content, text: info.text }]);\r\n};\r\nconst handleTagSel = (info) => {\r\n console.log(info);\r\n switch (info.type) {\r\n case 'chat':\r\n chatConv([{ content: info.msg, text: info.msg }]);\r\n break;\r\n case 'call':\r\n Emits('call', { ...info });\r\n break;\r\n case 'simulate':\r\n simulateChat(info);\r\n break;\r\n }\r\n};\r\n\r\nconst handleCardTap = ({ type }, info) => {\r\n switch (type) {\r\n case 'change':\r\n chatConv([{ content: '換一套菜品', text: '換一套菜品' }]);\r\n break;\r\n case 'match':\r\n chatConv([\r\n {\r\n content: finalDefMsg.value.matchContent,\r\n text: finalDefMsg.value.matchText,\r\n },\r\n ]);\r\n break;\r\n case 'personalForm':\r\n simulateChat({\r\n msg: '请为我生成一份个性化的健康的食谱',\r\n name: '用户信息',\r\n type: 'simulate',\r\n value: 'personalForm',\r\n });\r\n break;\r\n default:\r\n Emits('call', { type, info });\r\n }\r\n};\r\nconst handleCall = (data) => {\r\n switch (data.type) {\r\n case 'new_chat':\r\n createConv();\r\n break;\r\n default:\r\n Emits('call', data);\r\n\r\n break;\r\n }\r\n};\r\n\r\nconst handlePlanParse = (list) => {\r\n const pIdx = list.findIndex((p) => p.showType === 'plan');\r\n return pIdx > -1\r\n ? { show: true, text: list[pIdx].planParse }\r\n : { show: false };\r\n};\r\n\r\nconst scrollToEnd = () => {\r\n setTimeout(() => {\r\n nextTick(() => {\r\n endTarget.value.scrollIntoView();\r\n });\r\n }, 100);\r\n};\r\n\r\nprovide('triggerScrollToEnd', scrollToEnd);\r\n\r\nconst handleTextNeedBtn = (str) => {\r\n const regExp = /#全日總熱量:(\\d*?)kcal/g;\r\n return regExp.test(str);\r\n};\r\n\r\nconst simulateChat = (info) => {\r\n console.log('== simulateChat == ', info);\r\n historyList.value.push({\r\n conversation_id: '',\r\n bot_id: props.botId,\r\n role: 'user',\r\n content: info.msg,\r\n reasoning_content: '',\r\n status: 'ended',\r\n extra: [],\r\n });\r\n let resInfo = {\r\n msg: '',\r\n extra: [],\r\n };\r\n switch (info.value) {\r\n case 'personalForm':\r\n resInfo.msg =\r\n '请填写您的身体数据,维小饭将根据你的身体数据智能生成个性化食谱';\r\n resInfo.extra = [\r\n {\r\n showType: 'personalForm',\r\n },\r\n ];\r\n break;\r\n case 'contactKF':\r\n resInfo.msg = '联系专业营养师团队帮你快速实现科学配比的健康餐营养搭配。';\r\n resInfo.extra = [{ showType: 'contactKF' }];\r\n break;\r\n }\r\n historyList.value.push({\r\n conversation_id: '',\r\n bot_id: props.botId,\r\n role: 'assistant',\r\n content: resInfo.msg,\r\n reasoning_content: '',\r\n status: 'ended',\r\n extra: [...resInfo.extra],\r\n });\r\n turns.value += 1;\r\n Emits('log', {\r\n turns: turns.value,\r\n info: {\r\n ...historyList.value[historyList.value.length - 1],\r\n question: {\r\n content: info.msg,\r\n role: 'user',\r\n },\r\n },\r\n });\r\n scrollToEnd();\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n@import './ChatUi';\r\n</style>\r\n","import ChatUi from './ChatUi.vue';\r\n\r\nconst install = (app) => {\r\n app.component('ChatUi', ChatUi);\r\n};\r\n\r\nexport default {\r\n install,\r\n};\r\n\r\nexport { ChatUi };\r\n"],"names":["_hoisted_1","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","customFetch","url","options","finalOptions","response","error","get","post","data","_classCallCheck","a","n","_defineProperties","r","t","o","_toPropertyKey","_createClass","_defineProperty","ownKeys","_objectSpread2","_toPrimitive","e","i","_typeof","DEFAULTS","TEMPLATE","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","HAS_POINTER_EVENT","NAMESPACE","ACTION_MOVE","ACTION_SWITCH","ACTION_ZOOM","CLASS_ACTIVE","CLASS_CLOSE","CLASS_FADE","CLASS_FIXED","CLASS_FULLSCREEN","CLASS_FULLSCREEN_EXIT","CLASS_HIDE","CLASS_HIDE_MD_DOWN","CLASS_HIDE_SM_DOWN","CLASS_HIDE_XS_DOWN","CLASS_IN","CLASS_INVISIBLE","CLASS_LOADING","CLASS_MOVE","CLASS_OPEN","CLASS_SHOW","CLASS_TRANSITION","EVENT_CLICK","EVENT_DBLCLICK","EVENT_DRAG_START","EVENT_FOCUSIN","EVENT_KEY_DOWN","EVENT_LOAD","EVENT_ERROR","EVENT_TOUCH_END","EVENT_TOUCH_MOVE","EVENT_TOUCH_START","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_RESIZE","EVENT_TRANSITION_END","EVENT_WHEEL","EVENT_READY","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_VIEW","EVENT_VIEWED","EVENT_MOVE","EVENT_MOVED","EVENT_ROTATE","EVENT_ROTATED","EVENT_SCALE","EVENT_SCALED","EVENT_ZOOM","EVENT_ZOOMED","EVENT_PLAY","EVENT_STOP","DATA_ACTION","REGEXP_SPACES","BUTTONS","isString","value","isNaN","isNumber","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","prototype","isFunction","forEach","callback","length","key","assign","obj","_len","args","_key","arg","REGEXP_SUFFIX","setStyle","element","styles","style","property","escapeHTMLEntities","hasClass","addClass","elem","className","removeClass","toggleClass","added","REGEXP_HYPHENATE","hyphenate","getData","name","setData","onceSupported","supported","once","listener","removeListener","type","handler","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","getOffset","box","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","values","transform","getImageNameFromURL","IS_SAFARI","getImageNaturalSizes","image","newImage","body","getResponsiveClass","getMaxZoomRatio","pointers","pointers2","ratios","pointer","pointerId","pointer2","x1","y1","x2","y2","z1","z2","ratio","b","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","startX","startY","render","ownerDocument","parent","viewerData","_this","list","items","index","src","alt","item","img","onLoad","onError","next","gutter","offsetWidth","outerWidth","done","_this2","footerHeight","viewerWidth","viewerHeight","oldImageData","sizingImage","naturalWidth","naturalHeight","aspectRatio","initialCoverage","width","height","left","top","imageData","initialImageData","_this3","onTransitionEnd","events","viewer","canvas","document","handlers","target","action","parentWidth","parentHeight","filled","keyCode","buttons","button","touch","_this4","delta","methods","immediate","shown","hideImmediately","_onViewerTransitionEnd","onImageTransitionEnd","title","activeItem","onViewed","loop","maxIndex","x","y","_originalEvent","oldX","oldY","changed","degree","oldDegree","_scaleX","_scaleY","_this5","oldScaleX","oldScaleY","showTooltip","pivot","_this6","_zoomable","minZoomRatio","maxZoomRatio","newWidth","newHeight","offsetHeight","oldRatio","offset","center","_this7","fullscreen","player","total","_prev","_next","_this8","_this9","_this10","_this11","tooltipBox","_this12","isImg","images","changedIndexes","changedIndex","others","documentElement","offsetX","offsetY","absoluteOffsetX","p","AnotherViewer","getUniqueID","id","Viewer","progress","timeout","template","toolbar","navbar","custom","zoomButtons","rotateButtons","scaleButtons","deep","show","size","click","rotates","container","je","re","_e","Ae","E","xe","S","te","Pe","Se","O","Ie","Ee","Me","Ve","Ce","Be","H","M","V","Ne","De","ne","Xe","ze","Qe","Ye","ie","Ze","F","X","ke","er","rr","tr","nr","ir","or","ar","ur","sr","cr","fr","dr","lr","pr","gr","vr","yr","br","mr","hr","I","wr","$r","Or","jr","_r","oe","ae","W","Ar","xr","ue","Pr","u","c","d","z","Sr","se","Ir","ce","C","fe","Er","Mr","L","Vr","Cr","Q","de","Br","Ur","Fr","Nr","Dr","le","exports","Y","Wr","Z","Lr","Rr","Kr","Gr","Hr","qr","Jr","Xr","zr","Qr","Yr","Zr","kr","et","rt","tt","nt","it","ot","at","ut","st","ct","ft","dt","lt","pt","f","gt","vt","pe","j","yt","N","bt","k","ee","mt","ht","wt","Tt","ge","s","$t","Ot","jt","_t","At","xt","Pt","St","It","Et","Mt","Vt","Ct","Bt","Ut","Ft","ve","Kt","m","qt","K","G","_","be","me","P","he","we","props","__props","isOpen","ref","contentRef","contentHeight","makeCraft","onMounted","querySkuMakeCraft","getContentHeight","scrollToEnd","inject","resolve","nextTick","imgList","preloadImages","hasDetails","urls","promises","promise","reject","subStr","computed","_b","_a","panelHeight","h","previewImg","viewerApi","switchOpen","res","Emits","__emit","vue","showFull","handleIsOpen","info","category","categoryEnergy","cate","energy","showDate","idx","handleBtn","textMap","handleSel","_sfc_main","num","pdfIcon","extraList","PictureIcon","FileIcon","txtEle","uploadInput","captureInput","uploadPlane","uFileList","fetchOptions","resizeTextarea","loadingBtnInfo","textValue","val","onUnmounted","handleInput","handleTag","showUpload","sendMsg","file","handleMsgType","clearAllFile","handleFile","reader","triggerUploadInput","handleFileChange","selFile","handleUpload","formDate","xhr","percent","closeUpload","clearFile","newChatFunc","handleFocus","file_type","handleBlur","caseExtra","file_url","msgList","regEx","matches","remaining","result","match","defImg","handleSelStore","decodeCache","getDecodeCache","exclude","cache","ch","decode","string","seq","l","b1","b2","chr","b3","b4","decode$1","encodeCache","getEncodeCache","encode","keepEscaped","code","nextCode","encode$1","format","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","slashesDenoteHost","lowerProto","hec","slashes","rest","simplePath","proto","hostEnd","auth","atSign","host","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","hash","qm","port","Any","Cc","regex$1","regex","htmlDecodeTree","xmlDecodeTree","decodeMap","fromCodePoint","codePoint","output","replaceCodePoint","CharCodes","TO_LOWER_BIT","BinTrieFlags","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","str","start","base","digitCount","startIdx","char","lastCp","expectedLength","current","valueLength","determineBranch","consumed","getDecoder","ret","decoder","lastIndex","len","nodeIdx","branchCount","jumpOffset","lo","hi","mid","midVal","htmlDecoder","decodeHTML","mode","_class","_hasOwnProperty","has","object","source","arrayReplaceAt","pos","newElements","isValidEntityCode","surrogate1","surrogate2","UNESCAPE_MD_RE","ENTITY_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","decoded","unescapeMd","unescapeAll","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","escapeHtml","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","isPunctChar","ucmicro.P","ucmicro.S","isMdAsciiPunct","normalizeReference","mdurl","ucmicro","parseLinkLabel","state","disableNested","level","found","marker","prevPos","max","oldPos","labelEnd","parseLinkDestination","parseLinkTitle","prev_state","default_rules","tokens","env","slf","token","langName","langAttrs","arr","highlighted","tmpAttrs","tmpToken","Renderer","needLf","nextToken","rules","Ruler","self","chains","rule","altName","chain","fn","opt","beforeName","ruleName","afterName","ignoreInvalid","chainName","Token","tag","nesting","attrs","attrData","StateCore","md","NEWLINES_RE","NULL_RE","normalize","block","inline","tok","isLinkOpen","isLinkClose","linkify","blockTokens","htmlLinkLevel","currentToken","text","links","nodes","lastPos","ln","fullUrl","urlText","token_o","token_t","token_c","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","replace","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","stack","thisLevel","OUTER","canOpen","canClose","isSingle","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","openQuote","closeQuote","smartquotes","text_join","curr","last","_rules","r_normalize","r_block","r_inline","r_linkify","r_replacements","r_smartquotes","r_text_join","Core","StateBlock","indent","indent_found","line","from","min","begin","keepLastLF","queue","lineIndent","lineStart","first","MAX_AUTOCOMPLETED_CELLS","getLine","escapedSplit","isEscaped","table","startLine","endLine","silent","nextLine","firstCh","secondCh","lineText","columns","aligns","columnCount","oldParentType","terminatorRules","token_to","tableLines","token_tho","token_htro","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","params","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","initial","spaceAfterMarker","adjustTab","oldIndent","lines","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","_endLine","getNextLine","isContinuation","lineContent","destRes","href","destEndPos","destEndLineNo","titleRes","label","block_names","attr_name","attr_value","open_tag","close_tag","comment","processing","declaration","cdata","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html_block","heading","tmp","token_i","lheading","content","paragraph","r_table","r_code","r_fence","r_blockquote","r_hr","r_list","r_reference","r_html_block","r_heading","r_lheading","r_paragraph","ParserBlock","maxNesting","hasEmptyLines","prevLine","ok","outTokens","StateInline","token_meta","canSplitWord","left_flanking","right_flanking","isTerminatorChar","SCHEME_RE","link","newline","pmax","ws","ESCAPED","escape","ch1","escapedStr","ch2","origStr","backtick","openerLength","matchEnd","matchStart","closerLength","strikethrough_tokenize","scanned","postProcess","delimiters","loneMarkers","startDelim","endDelim","strikethrough_postProcess","tokens_meta","r_strikethrough","emphasis_tokenize","isStrong","emphasis_post_process","r_emphasis","parseReference","labelStart","EMAIL_RE","AUTOLINK_RE","autolink","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","fragments_join","r_text","r_newline","r_escape","r_backticks","r_link","r_image","r_autolink","r_html_inline","r_entity","_rules2","r_balance_pairs","r_fragments_join","ParserInline","reFactory","opts","text_separators","isRegExp","defaultOptions","isOptionsObj","acc","defaultSchemas","tail","tlds_2ch_src_re","tlds_default","resetScanCache","createValidator","createNormalizer","compile","tlds","untpl","tpl","aliases","schemaError","compiled","alias","slist","Match","shift","createMatch","LinkifyIt","schemas","schema","definition","ml","tld_pos","at_pos","keepOld","el","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","baseMinusTMin","floor","stringFromCharCode","map","array","mapDomain","domain","parts","labels","encoded","ucs2decode","counter","extra","ucs2encode","codePoints","basicToDigit","digitToBasic","digit","flag","adapt","numPoints","firstTime","input","inputLength","bias","basic","oldi","w","baseMinusT","out","currentValue","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","punycode","config","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","parsed","mdurl.parse","mdurl.encode","mdurl.format","normalizeLinkText","mdurl.decode","MarkdownIt","presetName","utils.isString","ParserCore","utils","utils.assign","helpers","presets","missed","plugin","parsedHtml","emit","visibleEle","bottomPosi","animationInfo","handleAnimation","handleConfirm","newVal","oldValue","handleClose","noop","extend","inBrowser","isDef","isPromise","isNumeric","isIOS","path","keys","pick","ignoreUndefined","toArray","unknownProp","numericProp","truthProp","makeNumberProp","defaultVal","makeNumericProp","makeStringProp","useParent","instance","getCurrentInstance","unlink","internalChildren","ref2","onMountedOrActivated","hook","mounted","onActivated2","useEventListener","passive","capture","cleaned","attached","add","target2","unref2","remove","onUnmounted2","onDeactivated2","stopWatch","isRef","watch","oldVal","useWindowSize","ref4","update","overflowScrollReg","defaultRoot","isElement","node","getScrollParent","root","overflowY","CUSTOM_FIELD_INJECTION_KEY","setScrollTop","getRootScrollTop","setRootScrollTop","checkIsIOS","resetScroll","stopPropagation","preventDefault","isStopPropagation","addUnit","getSizeStyle","originSize","getZIndexStyle","zIndex","camelizeRE","camelize","kebabCase","clamp","trimExtraChar","regExp","formatNumber","allowDot","allowMinus","assignKey","to","deepAssign","stdin_default","year","month","maxRange","discount","condition","lang","messages","reactive","defaultMessages","newLang","newMessages","createTranslate","prefix","locale","message","genBem","mods","createBEM","createNamespace","prefixedName","HAPTICS_FEEDBACK","FORM_KEY","TAP_OFFSET","callInterceptor","interceptor","canceled","returnVal","withInstall","app","POPUP_TOGGLE_KEY","useExpose","apis","routeProps","route","router","useRoute","vm","bem","badgeProps","defineComponent","slots","hasContent","showZero","renderContent","dot","getOffsetWithMinusString","style2","position","renderBadge","_createVNode","Badge","_Badge","globalZIndex","useGlobalZIndex","setGlobalZIndex","CONFIG_PROVIDER_KEY","configProviderProps","insertDash","mapThemeVarsToCSSVars","themeVars","cssVars","formattedKey","syncThemeVarsOnRoot","newStyle","oldStyle","addTheme","removeTheme","theme","onActivated","onDeactivated","onBeforeUnmount","newScope","oldScope","provide","watchEffect","isImage","name2","iconProps","classPrefix","badge","color","isImageIcon","_mergeProps","Icon","_Icon","SpinIcon","CircularIcon","loadingProps","spinnerStyle","renderIcon","DefaultIcon","renderText","vertical","Loading","_Loading","popupSharedProps","getDirection","useTouch","deltaX","deltaY","direction","isTap","isVertical","isHorizontal","reset","LOCK_DIRECTION_DISTANCE","totalLockCount","BODY_LOCK_CLASS","useLockScroll","rootRef","shouldLock","DIRECTION_UP","DIRECTION_DOWN","onTouchMove","scrollHeight","scrollTop","status","lock","unlock","init","destroy","useLazyRender","inited","useScopeId","scopeId","overlayProps","lazyRender","renderOverlay","_withDirectives","_vShow","Content","Transition","Teleport","Overlay","_Overlay","popupProps","opened","shouldReopen","popupRef","open","close","onClickOverlay","onClickCloseIcon","renderCloseIcon","timer","onOpened","onClosed","onKeydown","renderPopup","destroyOnClose","round","safeAreaInsetTop","safeAreaInsetBottom","renderTransition","transition","transitionAppear","_Fragment","Popup","_Popup","useId","cellSharedProps","cellProps","renderLabel","renderTitle","titleSlot","renderValue","slot","renderLeftIcon","renderRightIcon","border","isLink","required","clickable","classes","_a2","Cell","_Cell","isEmptyValue","runSyncRule","runRuleValidator","getRuleMessage","startComposing","endComposing","autosize","maxHeight","minHeight","mapInputType","inputmode","getStringLength","cutString","maxlength","fieldSharedProps","fieldProps","inputRef","clearIconRef","customValue","form","getModelValue","getProp","showClear","readonly","hasValue","trigger","formValue","showRequiredMark","runRules","resetValidation","endValidate","validate","validateWithTrigger","validateTrigger","defaultTrigger","limitValueLength","modelValue","selectionEnd","valueArr","exceededLength","updateValue","originalValue","limitDiffLen","adjustedValue","formatterDiffLen","formatter","bcoVal","selectionStart","valueLen","onInput","blur","focus","adjustTextareaSize","onFocus","onBlur","onClickInput","onClickLeftIcon","onClickRightIcon","onClear","showError","labelStyle","labelWidth","labelAlign","onKeypress","getInputId","getValidationStatus","renderInput","controlClass","inputAttrs","leftIconSlot","rightIconSlot","renderWordLimit","_createTextVNode","renderMessage","errorMessageAlign","colon","renderFieldBody","disabled","LeftIcon","Label","Field","_Field","lockCount","lockClick","popupInheritProps","toastProps","toggleClickable","newValue","updateShow","onClick","clearTimer","icon","iconSize","iconPrefix","loadingType","usePopupState","toggle","mountComponent","RootComponent","createApp","allowMultiple","currentOptions","defaultOptionsMap","parseOptions","createInstance","VanToast","getInstance","showToast","toast","parsedOptions","_Toast","showPopup","dialogInfo","sportList","tasteList","tabooList","pfForm","formData","con","isValid","handleSelect","handleSubmit","ageIdx","heightIdx","weightIdx","msg","selectTag","selectSport","selectSex","chatOptions","conversationId","isAnswering","isReq","historyList","isFirst","turns","msgObj","defCardList","finalDefMsg","finalCardList","endTarget","inputText","botInfo","storage","queryBotInfo","queryHistoryList","createConv","handleFirstMsg","presetList","curInfo","perMsg","cateMap","resMsg","chatConv","isInCode","botId","inText","additional_messages","uObj","markStr","buffer","handlePersonalForm","chunk","strObj","handleText","extraObj","modelObj","cardList","row","cardObj","card","handleBack","handleStoreSel","handleTagSel","simulateChat","handleCardTap","handleCall","handleTextNeedBtn","resInfo","ChatUi"],"mappings":"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","x_google_ignoreList":[4,5,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140]}