xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 23.1 kB
Source Map (JSON)
{"version":3,"file":"submenu.mjs","sources":["../../src/menu/submenu.tsx"],"sourcesContent":["import {\n defineComponent,\n computed,\n inject,\n ref,\n provide,\n onMounted,\n getCurrentInstance,\n watch,\n Slots,\n toRefs,\n reactive,\n nextTick,\n Transition,\n} from 'vue';\nimport props from './submenu-props';\nimport { renderContent, renderTNodeJSX } from '../utils/render-tnode';\nimport { TdMenuInterface, TdSubMenuInterface, TdMenuItem } from './const';\nimport FakeArrow from '../common-components/fake-arrow';\nimport useRipple from '../hooks/useRipple';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { Popup, PopupPlacement } from '../popup';\nimport isFunction from 'lodash/isFunction';\nimport { TdSubmenuProps } from './type';\nimport useCollapseAnimation from '../hooks/useCollapseAnimation';\n\nexport default defineComponent({\n name: 'XSubmenu',\n\n props,\n setup(props, ctx) {\n const classPrefix = usePrefixClass();\n const menu = inject<TdMenuInterface>('TdMenu');\n const { theme, activeValues, expandValues, isHead, open } = menu;\n const submenu = inject<TdSubMenuInterface>('TdSubmenu', {});\n const { setSubPopup, closeParentPopup } = submenu;\n const mode = computed(() => ctx.attrs.expandType || menu.mode.value);\n\n const menuItems = ref([]); // 因composition-api的缺陷,不用reactive, 详见:https://github.com/vuejs/composition-api/issues/637\n const isActive = computed(() => activeValues.value.indexOf(props.value) > -1);\n const popupVisible = ref(false);\n const isCursorInPopup = ref(false);\n const rippleColor = computed(() => (theme.value === 'light' ? '#E7E7E7' : '#383838'));\n const isOpen = computed(() => {\n if (mode.value === 'popup') {\n return popupVisible.value;\n }\n return expandValues ? expandValues.value?.includes(props.value) : false;\n });\n const isNested = ref(false); // 是否嵌套\n\n const popupWrapperRef = ref<HTMLElement>();\n const subPopupRef = ref<HTMLElement>();\n const submenuRef = ref<HTMLElement>();\n const transitionClass = usePrefixClass('slide-down');\n useRipple(submenuRef, rippleColor);\n\n const classes = computed(() => [\n `${classPrefix.value}-submenu`,\n {\n [`${classPrefix.value}-is-disabled`]: props.disabled,\n [`${classPrefix.value}-is-opened`]: isOpen.value,\n },\n ]);\n const overlayInnerClassName = computed(() => [\n `${classPrefix.value}-menu__popup`,\n `${classPrefix.value}-is-${isHead ? 'horizontal' : 'vertical'}`,\n {\n [`${classPrefix.value}-is-opened`]: popupVisible.value,\n },\n (props.popupProps as TdSubmenuProps['popupProps'])?.overlayInnerClassName,\n ]);\n const overlayClassName = computed(() => [\n `${classPrefix.value}-menu--${theme.value}`,\n isHead && `${classPrefix.value}-is-head-menu`,\n { [`${classPrefix.value}-menu-is-nested`]: isNested.value },\n (props.popupProps as TdSubmenuProps['popupProps'])?.overlayClassName,\n ]);\n const submenuClass = computed(() => [\n `${classPrefix.value}-menu__item`,\n `${classPrefix.value}-menu__item-spacer`,\n `${classPrefix.value}-menu__item-spacer--${isHead && !isNested.value ? 'bottom' : 'right'}`,\n {\n [`${classPrefix.value}-is-disabled`]: props.disabled,\n [`${classPrefix.value}-is-opened`]: isOpen.value,\n [`${classPrefix.value}-is-active`]: isActive.value,\n },\n ]);\n const subClass = computed(() => [\n `${classPrefix.value}-menu__sub`,\n {\n [`${classPrefix.value}-is-opened`]: isOpen.value,\n },\n ]);\n const arrowClass = computed(() => [\n {\n [`${classPrefix.value}-fake-arrow--active`]: isOpen.value,\n },\n ]);\n\n const passSubPopupRefToParent = (val: HTMLElement) => {\n if (isFunction(setSubPopup)) {\n setSubPopup(val);\n }\n };\n\n // methods\n const handleMouseEnter = () => {\n if (props.disabled) return;\n setTimeout(() => {\n if (!popupVisible.value) {\n open(props.value);\n\n // popupVisible设置为TRUE之后打开popup,因此需要在nextTick中确保可以拿到ref值\n nextTick().then(() => {\n passSubPopupRefToParent(popupWrapperRef.value);\n });\n }\n popupVisible.value = true;\n }, 0);\n };\n\n const targetInPopup = (el: HTMLElement) => el?.classList.contains(`${classPrefix.value}-menu__popup`);\n const loopInPopup = (el: HTMLElement): boolean => {\n if (!el) return false;\n return targetInPopup(el) || loopInPopup(el.parentElement);\n };\n\n const handleMouseLeave = (e: MouseEvent) => {\n setTimeout(() => {\n const inPopup = targetInPopup(e.relatedTarget as HTMLElement);\n\n if (isCursorInPopup.value || inPopup) return;\n popupVisible.value = false;\n }, 0);\n };\n\n const handleMouseLeavePopup = (e: any) => {\n const { toElement, relatedTarget } = e;\n let target = toElement || relatedTarget;\n\n if (target === subPopupRef.value) return;\n\n const isSubmenu = (el: Element) => el === submenuRef.value;\n while (target !== null && target !== document && !isSubmenu(target)) {\n target = target.parentNode;\n }\n\n isCursorInPopup.value = false;\n\n if (!isSubmenu(target)) {\n popupVisible.value = false;\n }\n\n closeParentPopup?.(e);\n };\n const handleEnterPopup = () => {\n isCursorInPopup.value = true;\n };\n\n const handleSubmenuItemClick = () => {\n if (props.disabled) return;\n open(props.value);\n };\n\n watch(popupVisible, (visible) => {\n menu.open(props.value, visible ? 'add' : 'remove');\n });\n\n // provide\n const { value } = toRefs(props);\n provide<TdSubMenuInterface>(\n 'TdSubmenu',\n reactive({\n value,\n addMenuItem: (item: TdMenuItem) => {\n menuItems.value.push(item);\n if (submenu) {\n submenu.addMenuItem(item);\n }\n },\n setSubPopup: (ref: HTMLElement) => {\n subPopupRef.value = ref;\n },\n closeParentPopup: (e: MouseEvent) => {\n const related = e.relatedTarget as HTMLElement;\n if (loopInPopup(related)) return;\n handleMouseLeavePopup(e);\n },\n }),\n );\n\n watch(popupWrapperRef, () => {\n // 第一次触发nextTick会取空值,导致subPopupRef拿不到对应的DOM\n passSubPopupRefToParent(popupWrapperRef.value);\n });\n\n onMounted(() => {\n menu?.vMenu?.add({ value: props.value, parent: submenu?.value, vnode: ctx.slots.default });\n const instance = getCurrentInstance();\n let node = instance.parent;\n\n while (node && !/^t(head)?menu/i.test(node?.type.name)) {\n if (/submenu/i.test(node?.type.name)) {\n isNested.value = true;\n break;\n }\n node = node?.parent;\n }\n });\n\n return {\n classPrefix,\n menuItems,\n mode,\n theme,\n isHead,\n isNested,\n classes,\n subClass,\n isOpen,\n transitionClass,\n arrowClass,\n overlayInnerClassName,\n overlayClassName,\n submenuClass,\n submenuRef,\n popupWrapperRef,\n popupVisible,\n isCursorInPopup,\n handleEnterPopup,\n handleMouseEnter,\n handleMouseLeave,\n handleMouseLeavePopup,\n handleSubmenuItemClick,\n };\n },\n methods: {\n renderPopup(triggerElement: Slots[]) {\n let placement = 'right-top';\n if (!this.isNested && this.isHead) {\n placement = 'bottom-left';\n }\n\n const popupWrapper = (\n <div\n ref=\"popupWrapperRef\"\n class={[\n `${this.classPrefix}-menu__spacer`,\n `${this.classPrefix}-menu__spacer--${!this.isNested && this.isHead ? 'top' : 'left'}`,\n ]}\n onMouseenter={this.handleEnterPopup}\n onMouseleave={this.handleMouseLeavePopup}\n >\n <ul class={`${this.classPrefix}-menu__popup-wrapper`}>{renderContent(this, 'default', 'content')}</ul>\n </div>\n );\n const slots = {\n content: () => popupWrapper,\n };\n\n const realPopup = (\n <Popup\n {...((this.popupProps ?? {}) as TdSubmenuProps['popupProps'])}\n overlayInnerClassName={[...this.overlayInnerClassName]}\n overlayClassName={[...this.overlayClassName]}\n visible={this.popupVisible}\n placement={placement as PopupPlacement}\n v-slots={slots}\n >\n <div ref=\"submenuRef\" class={this.submenuClass}>\n {triggerElement}\n </div>\n </Popup>\n );\n\n return realPopup;\n },\n renderHeadSubmenu() {\n const icon = renderTNodeJSX(this, 'icon');\n const normalSubmenu = [\n <div ref=\"submenuRef\" class={this.submenuClass} onClick={this.handleSubmenuItemClick}>\n {icon}\n <span class={[`${this.classPrefix}-menu__content`]}>{renderTNodeJSX(this, 'title', { silent: true })}</span>\n </div>,\n <ul style=\"opacity: 0; width: 0; height: 0; overflow: hidden\">{renderContent(this, 'default', 'content')}</ul>,\n ];\n\n const needRotate = this.mode === 'popup' && this.isNested;\n\n const triggerElement = [\n icon,\n <span class={[`${this.classPrefix}-menu__content`]}>{renderTNodeJSX(this, 'title', { silent: true })}</span>,\n <FakeArrow\n overlayClassName={/menu/i.test(this.$parent.$options.name) ? this.arrowClass : null}\n overlayStyle={{ transform: `rotate(${needRotate ? -90 : 0}deg)` }}\n />,\n ];\n\n return this.mode === 'normal' ? normalSubmenu : this.renderPopup(triggerElement);\n },\n renderSubmenu() {\n const hasContent = this.$slots.content || this.$slots.default;\n const icon = renderTNodeJSX(this, 'icon');\n const child = renderContent(this, 'default', 'content');\n let { parent } = getCurrentInstance();\n let paddingLeft = 44;\n\n while (parent && parent.type.name !== 'XMenu') {\n if (parent.type.name === 'XSubmenu') {\n paddingLeft += 16;\n }\n parent = parent.parent;\n }\n\n const { beforeEnter, enter, afterEnter, beforeLeave, leave, afterLeave } = useCollapseAnimation();\n\n const needRotate = this.mode === 'popup' && this.isNested;\n\n const normalSubmenu = [\n <div ref=\"submenuRef\" class={this.submenuClass} onClick={this.handleSubmenuItemClick}>\n {icon}\n <span class={[`${this.classPrefix}-menu__content`]}>{renderTNodeJSX(this, 'title', { silent: true })}</span>\n {hasContent && (\n <FakeArrow\n overlayClassName={this.arrowClass}\n overlayStyle={{ transform: `rotate(${needRotate ? -90 : 0}deg)` }}\n />\n )}\n </div>,\n <Transition\n name={this.transitionClass}\n onBeforeEnter={beforeEnter}\n onEnter={enter}\n onAfterEnter={afterEnter}\n onBeforeLeave={beforeLeave}\n onLeave={leave}\n onAfterLeave={afterLeave}\n >\n <ul v-show={this.isOpen} class={this.subClass} style={{ '--padding-left': `${paddingLeft}px` }}>\n {child}\n </ul>\n </Transition>,\n ];\n\n const triggerElement = [\n icon,\n <span class={[`${this.classPrefix}-menu__content`]}>{renderTNodeJSX(this, 'title', { silent: true })}</span>,\n <FakeArrow\n overlayClassName={/menu/i.test(this.$parent.$options.name) ? this.arrowClass : null}\n overlayStyle={{ transform: `rotate(${needRotate ? -90 : 0}deg)`, 'margin-left': 'auto' }}\n />,\n ];\n\n return this.mode === 'normal' ? normalSubmenu : this.renderPopup(triggerElement);\n },\n },\n render() {\n let child = null;\n let events = {};\n\n if (this.mode === 'popup') {\n events = {\n onMouseenter: this.handleMouseEnter,\n onMouseleave: this.handleMouseLeave,\n };\n }\n if (Object.keys(this.$slots).length > 0) {\n child = this.isHead ? this.renderHeadSubmenu() : this.renderSubmenu();\n }\n return (\n <li class={this.classes} {...events}>\n {child}\n </li>\n );\n },\n});\n"],"names":["name","props","setup","useRipple","isFunction","setTimeout","open","nextTick","passSubPopupRefToParent","closeParentPopup","watch","menu","provide","value","addMenuItem","menuItems","submenu","setSubPopup","onMounted","parent","classPrefix","mode","theme","isHead","isNested","classes","subClass","isOpen","transitionClass","arrowClass","overlayInnerClassName","overlayClassName","submenuClass","submenuRef","popupWrapperRef","popupVisible","isCursorInPopup","handleEnterPopup","handleMouseEnter","handleMouseLeave","handleMouseLeavePopup","handleSubmenuItemClick","methods","placement","_createVNode","_mergeProps","silent","paddingLeft","_vShow","events","child"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,eAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,UAAAA;AAEAC,EAAAA,KAAAA,EAAAA,KAAAA;AACAC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,GAAAA,EAAAA;AACE,IAAA,IAAA,WAAA,GAAA,cAAA,EAAA,CAAA;AACM,IAAA,IAAA,IAAA,GAAA,MAAA,CAAA,QAAA,CAAA,CAAA;AACN,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA,KAAA;;;;;;AAEM,IAAA,IAAA,WAAA,GAAA,OAAA,CAAA,WAAA;;;;;AAGA,IAAA,IAAA,SAAA,GAAA,GAAA,CAAA,EAAA,CAAA,CAAA;;AACoB,MAAA,OAAA,YAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA;;AACpB,IAAA,IAAA,YAAA,GAAA,GAAA,CAAA,KAAA,CAAA,CAAA;AACA,IAAA,IAAA,eAAA,GAAA,GAAA,CAAA,KAAA,CAAA,CAAA;;;;AAEA,IAAA,IAAA,MAAA,GAAA,QAAA,CAAA,YAAA;AAAwB,MAAA,IAAA,mBAAA,CAAA;AACxB,MAAA,IAAA,IAAA,CAAA,KAAA,KAAA,OAAA,EAAA;;AAEJ,OAAA;AACA,MAAA,OAAA,YAAA,GAAA,CAAA,mBAAA,GAAA,YAAA,CAAA,KAAA,MAAA,IAAA,IAAA,mBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,GAAA,KAAA,CAAA;AACF,KAAA,CAAA,CAAA;AACM,IAAA,IAAA,QAAA,GAAA,GAAA,CAAA,KAAA,CAAA,CAAA;AAEN,IAAA,IAAA,eAAA,GAAA,GAAA,EAAA,CAAA;AACA,IAAA,IAAA,WAAA,GAAA,GAAA,EAAA,CAAA;AACA,IAAA,IAAA,UAAA,GAAA,GAAA,EAAA,CAAA;AACM,IAAA,IAAA,eAAA,GAAA,cAAA,CAAA,YAAA,CAAA,CAAA;AACNC,IAAAA,SAAAA,CAAAA,UAAAA,EAAAA,WAAAA,CAAAA,CAAAA;;AAEyB,MAAA,IAAA,IAAA,CAAA;AAAA,MAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,UAAA,CAAA,GAAA,IAAA,GAAA,EAAA,EAAA,eAAA,CAAA,IAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,cAAA,CAAA,EAAA,MAAA,CAAA,QAAA,CAAA,EAAA,eAAA,CAAA,IAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,YAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAAA,CAAA;;;AAOc,MAAA,IAAA,kBAAA,CAAA;;;;AAQL,MAAA,IAAA,mBAAA,CAAA;;;;AAMJ,MAAA,IAAA,KAAA,CAAA;AAAA,MAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,aAAA,CAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,sBAAA,CAAA,CAAA,MAAA,CAAA,MAAA,IAAA,CAAA,QAAA,CAAA,KAAA,GAAA,QAAA,GAAA,OAAA,CAAA,GAAA,KAAA,GAAA,EAAA,EAAA,eAAA,CAAA,KAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,cAAA,CAAA,EAAA,MAAA,CAAA,QAAA,CAAA,EAAA,eAAA,CAAA,KAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,YAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,EAAA,eAAA,CAAA,KAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,YAAA,CAAA,EAAA,QAAA,CAAA,KAAA,CAAA,EAAA,KAAA,EAAA,CAAA;;;AAUJ,MAAA,OAAA,CAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,YAAA,CAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,YAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA;;;AAME,MAAA,OAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,CAAA;;AAMtB,IAAA,IAAA,uBAAA,GAAA,SAAA,uBAAA,CAAA,GAAA,EAAA;AACA,MAAA,IAAAC,YAAA,CAAA,WAAA,CAAA,EAAA;;AAEJ,OAAA;;AAIF,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,GAAA;;AAEEC,MAAAA,UAAAA,CAAAA,YAAAA;AACM,QAAA,IAAA,CAAA,YAAA,CAAA,KAAA,EAAA;AACFC,UAAAA,IAAAA,CAAAA,MAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AAGSC,UAAAA,QAAAA,EAAAA,CAAAA,IAAAA,CAAAA,YAAAA;AACPC,YAAAA,uBAAAA,CAAAA,eAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACF,WAAA,CAAA,CAAA;AACF,SAAA;;;;AAKE,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,EAAA,EAAA;AAAqC,MAAA,OAAA,EAAA,KAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA,QAAA,CAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,cAAA,CAAA,CAAA,CAAA;AAAyD,KAAA,CAAA;AAC9F,IAAA,IAAA,WAAA,GAAA,SAAA,WAAA,CAAA,EAAA,EAAA;AACJ,MAAA,IAAA,CAAA,EAAA,EAAA,OAAA,KAAA,CAAA;;;AAII,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,CAAA,EAAA;AACJH,MAAAA,UAAAA,CAAAA,YAAAA;AACQ,QAAA,IAAA,OAAA,GAAA,aAAA,CAAA,CAAA,CAAA,aAAA,CAAA,CAAA;AAEN,QAAA,IAAA,eAAA,CAAA,KAAA,IAAA,OAAA,EAAA,OAAA;;;;AAKE,IAAA,IAAA,qBAAA,GAAA,SAAA,qBAAA,CAAA,CAAA,EAAA;AACE,MAAA,IAAA,SAAA,GAAA,CAAA,CAAA,SAAA;;AACN,MAAA,IAAA,MAAA,GAAA,SAAA,IAAA,aAAA,CAAA;AAEA,MAAA,IAAA,MAAA,KAAA,WAAA,CAAA,KAAA,EAAA,OAAA;AAEA,MAAA,IAAA,SAAA,GAAA,SAAA,SAAA,CAAA,EAAA,EAAA;AAAmC,QAAA,OAAA,EAAA,KAAA,UAAA,CAAA,KAAA,CAAA;AAAkB,OAAA,CAAA;AACrD,MAAA,OAAA,MAAA,KAAA,IAAA,IAAA,MAAA,KAAA,QAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,EAAA;;AAEA,OAAA;;AAII,MAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,EAAA;;AAEJ,OAAA;AAEAI,MAAAA,gBAAAA,KAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;AAEF,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,GAAA;;;AAIA,IAAA,IAAA,sBAAA,GAAA,SAAA,sBAAA,GAAA;;AAEEH,MAAAA,IAAAA,CAAAA,MAAAA,CAAAA,KAAAA,CAAAA,CAAAA;;AAGII,IAAAA,KAAAA,CAAAA,YAAAA,EAAAA,UAAAA,OAAAA,EAAAA;AACJC,MAAAA,IAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAAAA,OAAAA,GAAAA,KAAAA,GAAAA,QAAAA,CAAAA,CAAAA;AACF,KAAA,CAAA,CAAA;AAGA,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,MAAA,CAAA;;AACAC,IAAAA,OAAAA,CAAAA,WAAAA,EAAAA,QAAAA,CAAAA;AAGIC,MAAAA,KAAAA,EAAAA,KAAAA;AACAC,MAAAA,WAAAA,EAAAA,SAAAA,WAAAA,CAAAA,IAAAA,EAAAA;AACYC,QAAAA,SAAAA,CAAAA,KAAAA,CAAAA,IAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AACV,QAAA,IAAA,OAAA,EAAA;AACEC,UAAAA,OAAAA,CAAAA,WAAAA,CAAAA,IAAAA,CAAAA,CAAAA;AACF,SAAA;;AAEFC,MAAAA,WAAAA,EAAAA,SAAAA,WAAAA,CAAAA,IAAAA,EAAAA;;;AAGAR,MAAAA,gBAAAA,EAAAA,SAAAA,gBAAAA,CAAAA,CAAAA,EAAAA;AACE,QAAA,IAAA,OAAA,GAAA,CAAA,CAAA,aAAA,CAAA;AACA,QAAA,IAAA,WAAA,CAAA,OAAA,CAAA,EAAA,OAAA;;AAEF,OAAA;AACF,KAAA,CAAA,CAAA,CAAA;;AAKAD,MAAAA,uBAAAA,CAAAA,eAAAA,CAAAA,KAAAA,CAAAA,CAAAA;AACF,KAAA,CAAA,CAAA;AAEAU,IAAAA,SAAAA,CAAAA,YAAAA;AAAgB,MAAA,IAAA,WAAA,CAAA;AACdP,MAAAA,IAAAA,KAAAA,IAAAA,IAAAA,IAAAA,KAAAA,KAAAA,CAAAA,IAAAA,CAAAA,WAAAA,GAAAA,IAAAA,CAAAA,KAAAA,MAAAA,IAAAA,IAAAA,WAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,WAAAA,CAAAA,GAAAA,CAAAA;;AAAuCQ,QAAAA,MAAAA,EAAAA,OAAAA,KAAAA,IAAAA,IAAAA,OAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAAA,CAAAA,KAAAA;;AAAiD,OAAA,CAAA,CAAA;AACxF,MAAA,IAAA,QAAA,GAAA,kBAAA,EAAA,CAAA;AACA,MAAA,IAAA,IAAA,GAAA,QAAA,CAAA,MAAA,CAAA;AAEA,MAAA,OAAA,IAAA,IAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,CAAA,KAAA,GAAA,IAAA,MAAA,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA;AAAwD,QAAA,IAAA,KAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AACtD,QAAA,IAAA,UAAA,CAAA,IAAA,CAAA,CAAA,MAAA,GAAA,IAAA,MAAA,IAAA,IAAA,MAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA;;AAEE,UAAA,MAAA;AACF,SAAA;;AAEF,OAAA;AACF,KAAA,CAAA,CAAA;;AAGEC,MAAAA,WAAAA,EAAAA,WAAAA;AACAL,MAAAA,SAAAA,EAAAA,SAAAA;AACAM,MAAAA,IAAAA,EAAAA,IAAAA;AACAC,MAAAA,KAAAA,EAAAA,KAAAA;AACAC,MAAAA,MAAAA,EAAAA,MAAAA;AACAC,MAAAA,QAAAA,EAAAA,QAAAA;AACAC,MAAAA,OAAAA,EAAAA,OAAAA;AACAC,MAAAA,QAAAA,EAAAA,QAAAA;AACAC,MAAAA,MAAAA,EAAAA,MAAAA;AACAC,MAAAA,eAAAA,EAAAA,eAAAA;AACAC,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,qBAAAA,EAAAA,qBAAAA;AACAC,MAAAA,gBAAAA,EAAAA,gBAAAA;AACAC,MAAAA,YAAAA,EAAAA,YAAAA;AACAC,MAAAA,UAAAA,EAAAA,UAAAA;AACAC,MAAAA,eAAAA,EAAAA,eAAAA;AACAC,MAAAA,YAAAA,EAAAA,YAAAA;AACAC,MAAAA,eAAAA,EAAAA,eAAAA;AACAC,MAAAA,gBAAAA,EAAAA,gBAAAA;AACAC,MAAAA,gBAAAA,EAAAA,gBAAAA;AACAC,MAAAA,gBAAAA,EAAAA,gBAAAA;AACAC,MAAAA,qBAAAA,EAAAA,qBAAAA;AACAC,MAAAA,sBAAAA,EAAAA,sBAAAA;;;AAGJC,EAAAA,OAAAA,EAAAA;;AACuC,MAAA,IAAA,gBAAA;;;;AAGrBC,QAAAA,SAAAA,GAAAA,aAAAA,CAAAA;AACd,OAAA;;AAGE,QAAA,KAAA,EAAA,iBAAA;;;AAMqB,QAAA,cAAA,EAAA,IAAA,CAAA,qBAAA;AACA,OAAA,EAAA,CAAAC,WAAA,CAAA,IAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,EAAA,sBAAA,CAAA;;AAKvB,MAAA,IAAA,KAAA,GAAA;;AACW,UAAA,OAAA,YAAA,CAAA;AAAM,SAAA;;AAGjB,MAAA,IAAA,SAAA,GAAAA,WAAA,CAAA,KAAA,EAAAC,UAAA,CAAA,CAAA,gBAAA,GAAA,IAAA,CAAA,UAAA,MAAA,IAAA,IAAA,gBAAA,KAAA,KAAA,CAAA,GAAA,gBAAA,GAAA,EAAA,EAAA;AAGI,QAAA,uBAAA,EAAA,kBAAA,CAAA,IAAA,CAAA,qBAAA,CAAA;AAAqD,QAAA,kBAAA,EAAA,kBAAA,CAAA,IAAA,CAAA,gBAAA,CAAA;;;AAIrD,OAAA,CAAA,EAAA,aAAA,CAAA;AAAA,QAAA,SAAA,EAAA,SAAA,QAAA,GAAA;AAAA,UAAA,OAAA,CAAAD,WAAA,CAAA,KAAA,EAAA;AAAA,YAAA,KAAA,EAAA,YAAA;AAES,YAAA,OAAA,EAAA,KAAA,CAAA,YAAA;AAAyB,WAAA,EAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA;AAElC,SAAA;AAAA,OAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIG,MAAA,OAAA,SAAA,CAAA;;;AAGD,MAAA,IAAA,IAAA,GAAA,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;;AACgB,QAAA,KAAA,EAAA,YAAA;;AACc,QAAA,SAAA,EAAA,IAAA,CAAA,sBAAA;;AAC/B,QAAA,OAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,CAAA;AACgD,OAAA,EAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAoCE,QAAAA,MAAAA,EAAAA,IAAAA;;;;;AAOzF,MAAA,IAAA,cAAA,GAAA,CAAA,IAAA,EAAAF,WAAA,CAAA,MAAA,EAAA;AACE,QAAA,OAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,CAAA;AACiD,OAAA,EAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAoCE,QAAAA,MAAAA,EAAAA,IAAAA;AAAa,OAAA,CAAA,CAAA,CAAA,EAAAF,WAAA,CAAA,SAAA,EAAA;;;;AAGhC,SAAA;;AAIpE,MAAA,OAAA,IAAA,CAAA,IAAA,KAAA,QAAA,GAAA,aAAA,GAAA,IAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CAAA;;;AAEc,MAAA,IAAA,MAAA,GAAA,IAAA,CAAA;;AAER,MAAA,IAAA,IAAA,GAAA,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA;;AAEF,MAAA,IAAA,mBAAA,GAAA,kBAAA,EAAA;;;;AAIE,QAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,KAAA,UAAA,EAAA;AACaG,UAAAA,WAAAA,IAAAA,EAAAA,CAAAA;AACjB,SAAA;;AAEF,OAAA;AAEM,MAAA,IAAA,qBAAA,GAAA,oBAAA,EAAA;;;;;;;;;AAIgB,QAAA,KAAA,EAAA,YAAA;;AACc,QAAA,SAAA,EAAA,IAAA,CAAA,sBAAA;;AAC/B,QAAA,OAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,CAAA;AACgD,OAAA,EAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAoCD,QAAAA,MAAAA,EAAAA,IAAAA;AAAa,OAAA,CAAA,CAAA,CAAA,EAAA,UAAA,IAAAF,WAAA,CAAA,SAAA,EAAA;;;;AAI9B,SAAA;;;;AAMrD,QAAA,SAAA,EAAA,KAAA;AACN,QAAA,cAAA,EAAA,UAAA;AAET,QAAA,eAAA,EAAA,WAAA;AACA,QAAA,SAAA,EAAA,KAAA;;AACc,OAAA,EAAA;AAAA,QAAA,SAAA,EAAA,SAAA,QAAA,GAAA;;;;;AAE+E,aAAA;AAAA,WAAA,EAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAAI,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAApE,SAAA;;AAM7B,MAAA,IAAA,cAAA,GAAA,CAAA,IAAA,EAAAJ,WAAA,CAAA,MAAA,EAAA;AACE,QAAA,OAAA,EAAA,CAAA,EAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,CAAA;AACiD,OAAA,EAAA,CAAA,cAAA,CAAA,IAAA,EAAA,OAAA,EAAA;AAAoCE,QAAAA,MAAAA,EAAAA,IAAAA;AAAa,OAAA,CAAA,CAAA,CAAA,EAAAF,WAAA,CAAA,SAAA,EAAA;;;;AAG/B,UAAA,aAAA,EAAA,MAAA;AAAsB,SAAA;;AAI3F,MAAA,OAAA,IAAA,CAAA,IAAA,KAAA,QAAA,GAAA,aAAA,GAAA,IAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CAAA;AACF,KAAA;;;;;AAMI,IAAA,IAAA,IAAA,CAAA,IAAA,KAAA,OAAA,EAAA;AACOK,MAAAA,MAAAA,GAAAA;;;;AAIX,KAAA;AACA,IAAA,IAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,MAAA,GAAA,CAAA,EAAA;AACEC,MAAAA,KAAAA,GAAAA,IAAAA,CAAAA,MAAAA,GAAAA,IAAAA,CAAAA,iBAAAA,EAAAA,GAAAA,IAAAA,CAAAA,aAAAA,EAAAA,CAAAA;AACF,KAAA;;AACA,MAAA,OAAA,EAAA,IAAA,CAAA,OAAA;;AAKF,GAAA;AACF,CAAA,CAAA;;;;"}