UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 21.9 kB
{"version":3,"file":"index2.mjs","sources":["../../../../../src/components/ivue-popover/index.vue"],"sourcesContent":["<template>\r\n <div\r\n :class=\"wrapperClasses\"\r\n @mouseenter=\"() => handleMouseenter()\"\r\n @mouseleave=\"handleMouseleave\"\r\n v-click-outside:[capture]=\"handleClickOutside\"\r\n >\r\n <!-- 描述 -->\r\n <div\r\n :class=\"`${prefixCls}-rel`\"\r\n ref=\"reference\"\r\n @click=\"handleRelClick\"\r\n @mousedown=\"handleFocus(false)\"\r\n @mouseup=\"handleBlur(false)\"\r\n >\r\n <slot></slot>\r\n </div>\r\n <!-- 为封装到组件中来构建 UI -->\r\n <teleport to=\"body\" :disabled=\"!transfer\">\r\n <transition name=\"fade\">\r\n <div\r\n :class=\"popperClasses\"\r\n :style=\"popperStyles\"\r\n @click=\"handleTransferClick\"\r\n @mouseenter=\"handleMouseenter('popper')\"\r\n @mouseleave=\"handleMouseleave\"\r\n ref=\"popper\"\r\n v-show=\"visible\"\r\n >\r\n <div :class=\"`${prefixCls}-content`\">\r\n <!-- arrow -->\r\n <div :class=\"`${prefixCls}-arrow`\" ref=\"arrow\"></div>\r\n <!-- 对话框 -->\r\n <div :class=\"`${prefixCls}-inner`\" v-if=\"confirm\">\r\n <!-- body -->\r\n <div :class=\"`${prefixCls}-body`\">\r\n <!-- icon -->\r\n <ivue-icon :class=\"`${prefixCls}-body--icon`\">help</ivue-icon>\r\n <!-- title -->\r\n <div :class=\"`${prefixCls}-body--message`\">\r\n <slot name=\"title\">{{ title }}</slot>\r\n </div>\r\n </div>\r\n <!-- 底部 -->\r\n <div :class=\"`${prefixCls}-footer`\">\r\n <ivue-button\r\n :class=\"`${prefixCls}-footer--button`\"\r\n outline\r\n color=\"#dcdfe6\"\r\n @click=\"handleCancel\"\r\n >{{ cancelText }}</ivue-button\r\n >\r\n <!-- 确认 -->\r\n <ivue-button\r\n :class=\"`${prefixCls}-footer--button`\"\r\n depressed\r\n status=\"primary\"\r\n @click=\"handleConfirm\"\r\n >{{ confirmText }}</ivue-button\r\n >\r\n </div>\r\n </div>\r\n <!-- 不是对话框 -->\r\n <div :class=\"`${prefixCls}-inner`\" v-if=\"!confirm\">\r\n <!-- title -->\r\n <div :class=\"`${prefixCls}-title`\" v-if=\"showTitle\">\r\n <slot name=\"title\">{{ title }}</slot>\r\n </div>\r\n <!-- body -->\r\n <div :class=\"`${prefixCls}-body`\">\r\n <div :class=\"bodyContentClasses\">\r\n <slot name=\"content\">{{ content }}</slot>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </transition>\r\n </teleport>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport {\r\n defineComponent,\r\n computed,\r\n reactive,\r\n ref,\r\n getCurrentInstance,\r\n onMounted,\r\n nextTick,\r\n provide,\r\n} from 'vue';\r\nimport { useEventListener } from '@vueuse/core';\r\n\r\n// utils\r\nimport { oneOf } from '../../utils/assist';\r\nimport Popper from '../../utils/mixins/popper';\r\nimport { transferIndex, transferIncrease } from '../../utils/transfer-queue';\r\n\r\n// 注册外部点击事件插件\r\nimport { ClickOutside } from '../../utils/directives';\r\n\r\n// components\r\nimport IvueIcon from '../ivue-icon';\r\nimport IvueButton from '../ivue-button';\r\n\r\n// ts\r\nimport {\r\n PopoverContextKey,\r\n Props,\r\n Data,\r\n _ComponentInternalInstance,\r\n} from './types/popover';\r\n\r\nconst prefixCls = 'ivue-popover';\r\n\r\nexport default defineComponent({\r\n name: prefixCls,\r\n mixins: [Popper],\r\n emits: ['on-cancel', 'on-confirm'],\r\n // 注册局部指令\r\n directives: { ClickOutside },\r\n props: {\r\n /**\r\n * 显示的标题\r\n *\r\n * @type {String, Number}\r\n */\r\n title: {\r\n type: [String, Number],\r\n },\r\n /**\r\n * 提示框的内容\r\n *\r\n * @type {String, Number}\r\n */\r\n content: {\r\n type: [String, Number],\r\n default: '',\r\n },\r\n /**\r\n * 触发方式,\r\n * 可选值为hover(悬停)click(点击)focus(聚焦),\r\n * 在 confirm 模式下,只有 click 有效\r\n *\r\n * @type {String}\r\n */\r\n trigger: {\r\n validator(value: string) {\r\n return oneOf(value, ['click', 'focus', 'hover']);\r\n },\r\n default: 'click',\r\n },\r\n /**\r\n * 是否将弹层放置于 body 内,在 Tabs、\r\n * 带有 fixed 的 Table 列内使用时,\r\n * 建议添加此属性,它将不受父级样式影响,\r\n * 从而达到更好的效果\r\n *\r\n * @type {Boolean}\r\n */\r\n transfer: {\r\n type: Boolean,\r\n default() {\r\n const global = getCurrentInstance().appContext.config.globalProperties;\r\n\r\n return !global.$IVUE || global.$IVUE.transfer === ''\r\n ? false\r\n : global.$IVUE.transfer;\r\n },\r\n },\r\n /**\r\n * 开启 transfer 时,给浮层添加额外的 class 名称\r\n *\r\n * @type {String}\r\n */\r\n transferClassName: {\r\n type: String,\r\n },\r\n /**\r\n * 主题,可选值为 dark 或 light\r\n *\r\n * @type {String}\r\n */\r\n theme: {\r\n type: String,\r\n validator(value: string) {\r\n return oneOf(value, ['dark', 'light']);\r\n },\r\n default: 'light',\r\n },\r\n /**\r\n * 宽度,最小宽度为 150px,在 confirm 模式下,默认最大宽度为 300px\r\n *\r\n * @type {String | Number}\r\n */\r\n width: {\r\n type: [String, Number],\r\n },\r\n /**\r\n * 开启后,超出指定宽度文本将自动换行,并两端对齐\r\n *\r\n * @type {Boolean}\r\n */\r\n wordWrap: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n /**\r\n * 是否开启对话框模式\r\n *\r\n * @type {Boolean}\r\n */\r\n confirm: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 是否禁用\r\n *\r\n * @type {Boolean}\r\n */\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n /**\r\n * 延迟显示,单位毫秒\r\n *\r\n * @type {Number}\r\n */\r\n delay: {\r\n type: Number,\r\n default: 100,\r\n },\r\n /**\r\n * 弹窗的展开方向\r\n *\r\n * @type {String}\r\n */\r\n placement: {\r\n type: String,\r\n validator(value: string) {\r\n return oneOf(value, [\r\n 'top',\r\n 'top-start',\r\n 'top-end',\r\n 'bottom',\r\n 'bottom-start',\r\n 'bottom-end',\r\n 'left',\r\n 'left-start',\r\n 'left-end',\r\n 'right',\r\n 'right-start',\r\n 'right-end',\r\n ]);\r\n },\r\n default: 'bottom',\r\n },\r\n /**\r\n * 是否开启外部点击的 capture 模式,可通过全局配置\r\n *\r\n * @type {Boolean}\r\n */\r\n capture: {\r\n type: Boolean,\r\n default() {\r\n const global = getCurrentInstance().appContext.config.globalProperties;\r\n return !global.$IVUE ? true : global.$IVUE.capture;\r\n },\r\n },\r\n /**\r\n * 关闭按钮文案\r\n *\r\n * @type {String}\r\n */\r\n cancelText: {\r\n type: String,\r\n default: '取消',\r\n },\r\n /**\r\n * 确定按钮文案\r\n *\r\n * @type {String}\r\n */\r\n confirmText: {\r\n type: String,\r\n default: '确认',\r\n },\r\n },\r\n setup(props: Props, { emit, slots }) {\r\n // vm\r\n const { proxy } = getCurrentInstance() as _ComponentInternalInstance;\r\n\r\n // dom\r\n const popper = ref<HTMLDivElement>(null);\r\n const reference = ref<HTMLDivElement>(null);\r\n\r\n // data\r\n\r\n // 显示隐藏\r\n const visible = ref<boolean>(props.modelValue);\r\n\r\n const data = reactive<Data>({\r\n /**\r\n * 延迟\r\n *\r\n * @type {Function}\r\n */\r\n timeout: null,\r\n /**\r\n * 当前元素index\r\n *\r\n * @type {Number}\r\n */\r\n zIndex: 0,\r\n /**\r\n * transfer 模式下,点击 slot 也会触发关闭\r\n *\r\n * @type {Boolean}\r\n */\r\n disableCloseUnderTransfer: false,\r\n /**\r\n * 是否有input\r\n *\r\n * @type {Boolean}\r\n */\r\n isInput: false,\r\n /**\r\n * 当前点击target获取焦点\r\n *\r\n * @type {Event}\r\n */\r\n currentTargetFocus: false,\r\n /**\r\n * 关闭延迟\r\n *\r\n * @type {Number}\r\n */\r\n closeDelay: 0,\r\n });\r\n\r\n // computed\r\n\r\n // 外部样式\r\n const wrapperClasses = computed(() => {\r\n return [\r\n prefixCls,\r\n {\r\n [`${prefixCls}-confirm`]: props.confirm,\r\n },\r\n ];\r\n });\r\n\r\n // 悬浮框样式\r\n const popperClasses = computed(() => {\r\n return [\r\n `${prefixCls}-popper`,\r\n {\r\n // 主题\r\n [`${prefixCls}-${props.theme}`]: true,\r\n // 是否将弹层放置于 body 内\r\n [`${prefixCls}-transfer`]: props.transfer,\r\n // 开启 transfer 时,给浮层添加额外的 class 名称\r\n [props.transferClassName]: props.transferClassName,\r\n },\r\n ];\r\n });\r\n\r\n // 悬浮框样式\r\n const popperStyles = computed(() => {\r\n const styles: {\r\n width?: string | number;\r\n zIndex?: number;\r\n } = {};\r\n\r\n // 设置宽度\r\n if (props.width) {\r\n styles.width = `${props.width}px`;\r\n }\r\n\r\n // 是否将弹层放置于 body 内\r\n if (props.transfer) {\r\n styles['z-index'] = 1060 + data.zIndex;\r\n }\r\n\r\n return styles;\r\n });\r\n\r\n // body\r\n const bodyContentClasses = computed(() => {\r\n return [\r\n `${prefixCls}-body--content`,\r\n {\r\n [`${prefixCls}-body--word-wrap`]: props.wordWrap,\r\n },\r\n ];\r\n });\r\n\r\n // 显示标题\r\n const showTitle = computed(() => {\r\n // 不是对话框模式\r\n if (!props.confirm) {\r\n return slots.title !== undefined || props.title;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // methods\r\n\r\n // 获取index\r\n const handleGetIndex = () => {\r\n transferIncrease();\r\n\r\n return transferIndex;\r\n };\r\n\r\n // 增加zIndex\r\n const handleIndexIncrease = () => {\r\n data.zIndex = handleGetIndex();\r\n };\r\n\r\n // 鼠标进入\r\n const handleMouseenter = (status?: string) => {\r\n // 是否禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 进入到弹框 && 获取焦点\r\n if (status === 'popper' && data.currentTargetFocus) {\r\n // 清除延迟\r\n clearTimeout(data.timeout);\r\n }\r\n\r\n // 不是 hover || 开启了对话框\r\n if (props.trigger !== 'hover' || props.confirm) {\r\n return false;\r\n }\r\n\r\n // 清除延迟\r\n if (data.timeout) {\r\n clearTimeout(data.timeout);\r\n }\r\n\r\n // 延迟时间\r\n data.timeout = setTimeout(() => {\r\n visible.value = true;\r\n }, props.delay);\r\n };\r\n\r\n // 鼠标离开\r\n const handleMouseleave = () => {\r\n // 获取焦点 鼠标移出元素 关闭弹框\r\n if (data.currentTargetFocus) {\r\n clearTimeout(data.timeout);\r\n\r\n data.timeout = setTimeout(() => {\r\n visible.value = false;\r\n }, 100);\r\n }\r\n\r\n // 不是 hover || 开启了对话框\r\n if (props.trigger !== 'hover' || props.confirm) {\r\n return false;\r\n }\r\n\r\n // 清除延迟\r\n if (data.timeout) {\r\n clearTimeout(data.timeout);\r\n\r\n data.timeout = setTimeout(() => {\r\n visible.value = false;\r\n }, 100);\r\n }\r\n };\r\n\r\n // 描述点击\r\n const handleRelClick = () => {\r\n // 是否禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 开启了对话框\r\n if (props.confirm) {\r\n visible.value = !visible.value;\r\n\r\n return;\r\n }\r\n\r\n // 不是点击事件\r\n if (props.trigger !== 'click') {\r\n return false;\r\n }\r\n\r\n visible.value = !visible.value;\r\n };\r\n\r\n // 点击外部\r\n const handleClickOutside = () => {\r\n setTimeout(() => {\r\n // 点击的是内容\r\n if (data.disableCloseUnderTransfer) {\r\n data.disableCloseUnderTransfer = false;\r\n\r\n return false;\r\n }\r\n\r\n // 开启了对话框\r\n if (props.confirm) {\r\n visible.value = false;\r\n\r\n return;\r\n }\r\n\r\n // 不是点击事件\r\n if (props.trigger !== 'click') {\r\n return false;\r\n }\r\n\r\n visible.value = false;\r\n }, data.closeDelay);\r\n };\r\n\r\n // transfer时点击\r\n const handleTransferClick = () => {\r\n if (props.transfer) {\r\n data.disableCloseUnderTransfer = true;\r\n }\r\n };\r\n\r\n // 获取焦点\r\n const handleFocus = (fromInput = true) => {\r\n // 是否禁用\r\n if (props.disabled) {\r\n return;\r\n }\r\n\r\n // 触发方式 不是 focus || 开启对话框 || 没有input\r\n if (\r\n props.trigger !== 'focus' ||\r\n props.confirm ||\r\n (data.isInput && !fromInput)\r\n ) {\r\n return false;\r\n }\r\n\r\n // 没有输入框\r\n if (!data.isInput) {\r\n // 当前获取焦点\r\n data.currentTargetFocus = true;\r\n }\r\n\r\n // 显示\r\n visible.value = true;\r\n };\r\n\r\n // 失去焦点\r\n const handleBlur = (fromInput = true) => {\r\n // 触发方式 不是 focus || 开启对话框 || 没有input\r\n if (\r\n props.trigger !== 'focus' ||\r\n props.confirm ||\r\n (data.isInput && !fromInput)\r\n ) {\r\n return false;\r\n }\r\n\r\n // 没有输入框\r\n if (!data.isInput) {\r\n data.currentTargetFocus = false;\r\n }\r\n\r\n // 显示\r\n visible.value = false;\r\n };\r\n\r\n // 获取是否有input\r\n const getInputChildren = () => {\r\n const input = reference.value.querySelectorAll('input');\r\n const textarea = reference.value.querySelectorAll('textarea');\r\n\r\n let children = null;\r\n\r\n // input\r\n if (input.length) {\r\n children = input[0];\r\n }\r\n // textarea\r\n else if (textarea.length) {\r\n children = textarea[0];\r\n }\r\n\r\n return children;\r\n };\r\n\r\n // 取消\r\n const handleCancel = () => {\r\n visible.value = false;\r\n\r\n emit('on-cancel');\r\n };\r\n\r\n // 确认\r\n const handleConfirm = () => {\r\n visible.value = false;\r\n\r\n emit('on-confirm');\r\n };\r\n\r\n // onMounted\r\n onMounted(() => {\r\n data.zIndex = handleGetIndex();\r\n\r\n // if trigger and children is input or textarea,\r\n // listen focus & blur event\r\n if (props.trigger === 'focus') {\r\n nextTick(() => {\r\n const children = getInputChildren();\r\n\r\n // 有input\r\n if (children) {\r\n data.isInput = true;\r\n\r\n useEventListener(children, 'focus', handleFocus, false);\r\n useEventListener(children, 'blur', handleBlur, false);\r\n }\r\n });\r\n }\r\n\r\n if (visible.value) {\r\n proxy.updatePopper();\r\n }\r\n });\r\n\r\n // provide\r\n provide(\r\n PopoverContextKey,\r\n reactive({\r\n data,\r\n visible,\r\n handleCancel,\r\n })\r\n );\r\n\r\n return {\r\n prefixCls,\r\n // dom\r\n reference,\r\n popper,\r\n\r\n // data\r\n data,\r\n visible,\r\n\r\n // computed\r\n wrapperClasses,\r\n popperClasses,\r\n popperStyles,\r\n bodyContentClasses,\r\n showTitle,\r\n\r\n // methods\r\n handleIndexIncrease,\r\n handleMouseenter,\r\n handleMouseleave,\r\n handleRelClick,\r\n handleClickOutside,\r\n handleTransferClick,\r\n handleFocus,\r\n handleBlur,\r\n handleConfirm,\r\n handleCancel,\r\n };\r\n },\r\n components: {\r\n IvueIcon,\r\n IvueButton,\r\n },\r\n});\r\n</script>\r\n"],"names":["_withDirectives","_openBlock","_createElementBlock","_normalizeClass","_createCommentVNode","_createElementVNode","_renderSlot","_createBlock","_Teleport","_Transition","_withCtx","_normalizeStyle","_createVNode"],"mappings":";;;;;;;oDACE,eA8EM,CAAA,CAAA;AA5EH,EAAA,OAAAA,cAAU,EAAAC,SAAA,EAAQ,EAAAC,kBAAA,CAAA,KAAA,EAAA;AAAA,IAClB,KAAA,EAAUC,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA;AAAA,IAAA,cAAA,MAAA,CAAA,CAAA,CAAA,KAAA,OAAA,CAAA,CAAA,GAAA,MAAA,KAAA,gBAAA,EAAA,CAAA;AAAA,IAGX,YAAW,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,gBAAA,IAAA,IAAA,CAAA,gBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,GACX,EAAA;AAAA,IACQC,mBAAA,gBAAA,CAAA;AAAA,IACSC,mBAAA,KAAA,EAAA;AAAA,MACd,KAAK,EAAAF,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA;AAAA,MACL,GAAA,EAAA,WAAA;AAAA,MACA,OAAO,EAAA,MAAA,4BAAE,KAAA,IAAA,CAAU,cAAA,IAAA,IAAA,CAAA,cAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,MAAA,WAAA,EAAA,OAAA,CAAA,CAAA,KAAA,MAAA,CAAA,KAAA,CAAA,MAAA,KAAA,IAAA,CAAA,WAAA,CAAA,KAAA,CAAA,CAAA;AAAA,MAEpB,SAAA,EAAa,OAAA,CAAA,CAAA,KAAA,MAAA,CAAA,KAAA,CAAA,MAAA,KAAA,IAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA,EAAA;AAAA,MAEfG,UAAA,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA,OA6DW,EAAA,CAAA;AAAA,IA5DQF,mBAAA,mEAAA,CAAA;AAAA,KAAAH,SAAA,EAAa,EAAAM,WAAA,CAAQC,QAAA,EAAA;AAAA,MAAA,EAAA,EAAA,MAAA;AAAA,MACtC,QAAA,EA0Da,CAAA,IAAA,CAAA,QAAA;AAAA,KAAA,EAAA;AAAA,kBA1DbC,UA0Da,EAAA;AAAA,QAAA,IAAA,EAAA,MAAA;AAAA;;QAxDH,OAAA,EAAAC,QAAA,MAAA;AAAA,UAAAV,cAAA,CACAK,mBAAE,KAAY,EAAA;AAAA,YACnB,KAAA,EAAKF,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA;AAAA,YACL,KAAA,EAAUQ,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA;AAAA,YACV,OAAA,EAAA,MAAA,CAAU,qCAAE,mBAAgB,IAAA,IAAA,CAAA,mBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,YAC7B,YAAA,EAAY,OAAA,CAAA,CAAA,KAAA,MAAA,CAAA,KAAA,CAAA,MAAA,KAAA,IAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,YAAA,EAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,IAAA,KAAA,IAAA,CAAA,gBAAA,IAAA,IAAA,CAAA,gBAAA,CAAA,GAAA,IAAA,CAAA,CAAA;AAAA,YAGZ,GAAA,EAAA,QAAA;AAAA,WAAA,EAAA;AAAA;cACE,KAAc,EAAAR,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA;AAAA,aACd,EAAA;AAAA,cAAAC,mBAAW,SAAK,CAAA;AAAA,cAA8BC,mBAAA,KAAA,EAAA;AAAA,gBAAA,KAAA,EAAAF,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AAAA,gBAC9C,GAAA,EAAA,OAAA;AAAA,eAAA,EACyC,MAAO,CAAA,CAAA;AAAA,cAAhDC,mBAAA,sBAAA,CAAA;AAAA,cAAA,IAAA,CAAA,OAAA,IAAAH,SAAW,EAAA,qBAAK,KAAS,EAAA;AAAA,gBAAA,GAAA,EAAA,CAAA;AAAA,gBACvB,KAAa,EAAAE,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AAAA,eACb,EAAA;AAAA,gBAAAC,mBAAW,QAAK,CAAA;AAAA,gBAAAC,mBAAA,KAAA,EAAA;AAAA,kBACd,KAAa,EAAAF,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,KAAA,CAAA,CAAA;AAAA,iBACb,EAAA;AAAA,kBAAAC,mBAAiB,QAAK,CAAA;AAAA,kBAAAQ,YAAA,oBAAA,EAAA;AAAA,oBAA4B,KAAA,EAAAT,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,WAAA,CAAA,CAAA;AAAA,mBAAA,EAAA;AAAA;;;oBAClD,CAAA,EAAA,CAAA;AAAA,mBAGM,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA;AAAA,kBAAAC,mBAFK,SAAK,CAAA;AAAA,kBAAAC,mBAAA,KAAA,EAAA;AAAA,oBACd,KAAqC,EAAAF,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CAAA;AAAA,mBAAA,EAAA;AAAA;;;qBAGzC,CAAA,CAAA;AAAA,mBACA,CAAA,CAAA;AAAA,gBAAWC,mBAAA,gBAAA,CAAA;AAAA,gBAAAC,mBAAA,KAAA,EAAA;AAAA,kBACT,KAMC,EAAAF,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA;AAAA,iBAAA,EAAA;AAAA,kBAJQS,YAAA,sBAAA,EAAA;AAAA,oBACP,KAAM,EAAAT,cAAA,CAAS,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,eAAA,CAAA,CAAA;AAAA,oBACd,OAAO,EAAA,EAAA;AAAA,oBAAA,KAAA,EAAA,SAAA;AAAA;;;;;oBAGV,CAAA,EAAA,CAAA;AAAA,mBAOC,EAAA,CAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,CAAA;AAAA,kBALOC,mBAAA,gBAAA,CAAA;AAAA,kBAAAQ,YACN,sBAAS,EAAA;AAAA,oBACT,KAAM,EAAAT,cAAA,CAAU,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,eAAA,CAAA,CAAA;AAAA,oBACf,SAAO,EAAA,EAAA;AAAA,oBAAA,MAAA,EAAA,SAAA;AAAA;;;;;;;;eAKd,EAAA,CAAA,CAC0C,IAAAC,kBAAA,CAAO,QAAA,IAAA,CAAA;AAAA,cAAjDA,mBAAA,kCAAA,CAAA;AAAA,cAAA,CAAA,IAAA,CAAA,OAAA,IAAAH,SAAW,EAAA,qBAAK,KAAS,EAAA;AAAA,gBAAA,GAAA,EAAA,CAAA;AAAA,gBACvB,KAAc,EAAAE,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AAAA,eAC2B,EAAA;AAAA,gBAAzCC,mBAAA,SAAA,CAAA;AAAA,gBAAA,IAAA,CAAA,SAAA,IAAAH,SAAW,EAAA,qBAAK,KAAS,EAAA;AAAA,kBAAA,GAAA,EAAA,CAAA;AAAA,kBACvB,KAAqC,EAAAE,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AAAA,iBAAA,EAAA;AAAA;;;iBAEvC,EAAA,CAAA,CACA,IAAAC,kBAAA,CAIM,QAAA,IAAA,CAAA;AAAA,gBAAAA,mBAJK,QAAK,CAAA;AAAA,gBAAAC,mBAAA,KAAA,EAAA;AAAA,kBACd,KAEM,EAAAF,cAAA,CAAA,CAAA,EAAA,IAAA,CAAA,SAAA,CAAA,KAAA,CAAA,CAAA;AAAA,iBAAA,EAAA;AAAA;oBADJ,KAAA,EAAyCA,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA;AAAA,mBAAA,EAAA;AAAA;;;;;;eA5CzC,CAAA,CAAA;AAAA,WAAA,EAAA,EAAA,CAAA,EAAA;AAAA;;;;;KAtBa,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA;AAAA,GAAA,EAAA,EAAA,CAAA,GAAA;AAAA;;;;;;;"}