{"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;;;;"}