{"version":3,"file":"menu-item.mjs","sources":["../../../components/menu/menu-item.tsx"],"sourcesContent":["import { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Popper } from '@/components/popper'\nimport { Tooltip } from '@/components/tooltip'\n\nimport {\n  computed,\n  defineAsyncComponent,\n  defineComponent,\n  inject,\n  nextTick,\n  onBeforeUnmount,\n  // onMounted,\n  provide,\n  reactive,\n  ref,\n  renderSlot,\n  toRef,\n  watch\n} from 'vue'\n\nimport {\n  createIconProp,\n  emitEvent,\n  useHoverDelay,\n  useIcons,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useClickOutside, usePopper, useRtl, useSetTimeout } from '@vexip-ui/hooks'\nimport { callIfFunc } from '@vexip-ui/utils'\nimport { menuItemProps } from './props'\nimport { MENU_GROUP_STATE, MENU_ITEM_STATE, MENU_STATE } from './symbol'\n\n// For types build\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { RouteLocationRaw } from 'vue-router'\nimport type { PopperExposed } from '@/components/popper'\nimport type { Placement } from '@vexip-ui/hooks'\nimport type { MenuOptions } from './symbol'\n\nconst MenuGroup = defineAsyncComponent(() => import('./menu-group'))\n\nconst MenuItem = defineComponent({\n  name: 'MenuItem',\n  props: menuItemProps,\n  emits: [],\n  setup(_props, { slots, expose }) {\n    const props = useProps('menuItem', _props, {\n      label: {\n        default: null,\n        static: true\n      },\n      icon: createIconProp(),\n      iconProps: null,\n      disabled: false,\n      transfer: null,\n      trigger: null,\n      transitionName: null,\n      meta: null,\n      children: {\n        default: () => [],\n        static: true\n      },\n      route: null\n    })\n\n    const menuState = inject(MENU_STATE, null)\n    const parentItemState = inject(MENU_ITEM_STATE, null)\n    const groupState = inject(MENU_GROUP_STATE, null)\n\n    const nh = useNameHelper('menu')\n    const icons = useIcons()\n    const hoverDelay = useHoverDelay()\n\n    const { isRtl } = useRtl()\n\n    const baseClass = nh.be('item')\n    const placement = ref<Placement>(isRtl.value ? 'left-start' : 'right-start')\n    const groupExpanded = ref(false)\n    const selected = ref(false)\n    const sonSelected = ref(false)\n    const popperShow = ref(false)\n\n    const indent = computed(() => (parentItemState?.indent ?? 0) + 1)\n    const propTransfer = computed(() => props.transfer ?? menuState?.transfer ?? false)\n    const inTransfer = computed(() => (parentItemState ? parentItemState.transfer : false))\n    const transfer = computed(() => !inTransfer.value && propTransfer.value)\n    const markerType = computed(() => menuState?.markerType || 'right')\n\n    const wrapper = useClickOutside(handleClickOutside)\n    const popper = ref<PopperExposed>()\n    const { reference, transferTo, updatePopper } = usePopper({\n      placement,\n      transfer,\n      wrapper,\n      popper: computed(() => popper.value?.wrapper),\n      shift: { crossAxis: true }\n    })\n\n    const isGroup = computed(() => !!(slots.group || props.children?.length))\n    const showGroup = computed(() => isGroup.value && groupExpanded.value)\n    const className = computed(() => {\n      return {\n        [baseClass]: true,\n        [`${baseClass}--disabled`]: props.disabled,\n        [`${baseClass}--group-visible`]: showGroup.value,\n        [`${baseClass}--selected`]: selected.value,\n        [`${baseClass}--no-icon`]: !props.icon,\n        [`${baseClass}--son-selected`]: sonSelected.value\n      }\n    })\n    const labelStyle = computed(() => {\n      if (menuState?.horizontal || parentItemState?.isUsePopper) {\n        return {}\n      }\n\n      const indentWidth = nh.gcv('indent-width')\n      const multiplier =\n        indent.value + (menuState?.isReduced ? 0 : (groupState?.indent ?? 0)) * 0.25\n\n      return {\n        paddingInlineStart:\n          parentItemState && parentItemState.isUsePopper\n            ? undefined\n            : `calc(${indentWidth} * ${multiplier})`\n      }\n    })\n    const isUsePopper = computed(() => {\n      return (\n        (menuState && (menuState.horizontal || menuState.groupType === 'dropdown')) ||\n        (isGroup.value && menuState?.isReduced && !parentItemState) ||\n        !!parentItemState?.isUsePopper\n      )\n    })\n    const tooltipDisabled = computed(() => {\n      return (\n        isGroup.value || !!(parentItemState?.isUsePopper || (menuState && !menuState.isReduced))\n      )\n    })\n    const tooltipReverse = computed(() => !!menuState?.tooltipReverse)\n    const isHorizontal = computed(() => menuState?.horizontal && !parentItemState)\n    const transition = computed(() => {\n      return (props.transitionName ?? isHorizontal.value) ? nh.ns('drop') : nh.ns('zoom')\n    })\n    const dropTrigger = computed(() => props.trigger || menuState?.trigger || 'hover')\n\n    const itemState = reactive({\n      el: wrapper,\n      label: toRef(props, 'label'),\n      indent,\n      groupExpanded,\n      showGroup,\n      isUsePopper,\n      parentState: parentItemState,\n      transfer: computed(() => inTransfer.value || propTransfer.value),\n      cachedExpanded: groupExpanded.value,\n      updateSonSelected,\n      toggleGroupExpanded,\n      handleMouseEnter,\n      handleMouseLeave\n    })\n\n    provide(MENU_ITEM_STATE, itemState)\n\n    watch(\n      showGroup,\n      value => {\n        if (value && isUsePopper.value) {\n          popperShow.value = true\n          updatePopper()\n        }\n      },\n      { immediate: true }\n    )\n    watch(selected, value => {\n      if (value) {\n        emitEvent(props.onSelect)\n      }\n\n      menuState?.doForEachItem(item => item.updateSonSelected(false, false))\n      value &&\n        nextTick(() => {\n          parentItemState?.updateSonSelected(value)\n        })\n    })\n    watch(groupExpanded, expanded => {\n      if (typeof menuState?.handleExpand === 'function') {\n        menuState.handleExpand(props.label, expanded, props.meta || {})\n      }\n    })\n    watch(\n      isHorizontal,\n      value => {\n        placement.value = value ? 'bottom' : isRtl.value ? 'left-start' : 'right-start'\n      },\n      { immediate: true }\n    )\n\n    if (menuState) {\n      watch(\n        [() => props.label, () => menuState.currentActive],\n        () => {\n          selected.value = props.label === menuState.currentActive\n        },\n        { immediate: true }\n      )\n\n      if (typeof menuState.increaseItem === 'function') {\n        menuState.increaseItem(itemState)\n      }\n    }\n\n    // onMounted(() => {\n    //   if (typeof menuState?.increaseItem === 'function') {\n    //     menuState.increaseItem(itemState)\n    //   }\n    // })\n\n    onBeforeUnmount(() => {\n      if (typeof menuState?.decreaseItem === 'function') {\n        menuState.decreaseItem(itemState)\n      }\n    })\n\n    expose({\n      groupExpanded,\n      isGroup,\n      showGroup,\n      isUsePopper,\n      handleSelect,\n      handleMouseEnter,\n      handleMouseLeave\n    })\n\n    function updateSonSelected(selected: boolean, upstream = true) {\n      sonSelected.value = selected\n      upstream && parentItemState?.updateSonSelected(selected)\n    }\n\n    const { timer } = useSetTimeout()\n\n    function handleSelect() {\n      clearTimeout(timer.hover)\n\n      if (props.disabled) return\n\n      if (isGroup.value) {\n        if (isUsePopper.value && dropTrigger.value !== 'click') return\n\n        menuState?.doForEachItem(item => {\n          if (menuState.accordion) {\n            item.groupExpanded = false\n          }\n        })\n        groupExpanded.value = !groupExpanded.value\n      } else {\n        if (isUsePopper.value) {\n          toggleGroupExpanded(false, true)\n        }\n\n        if (menuState) {\n          menuState.handleSelect(props.label, props.meta || {}, props.route)\n        }\n\n        selected.value = true\n      }\n    }\n\n    function toggleGroupExpanded(expanded: boolean, upward = false) {\n      clearTimeout(timer.hover)\n\n      menuState?.doForEachItem(item => {\n        if (menuState.accordion) {\n          item.groupExpanded = false\n        }\n      })\n      groupExpanded.value = expanded\n\n      if (upward && typeof parentItemState?.toggleGroupExpanded === 'function') {\n        parentItemState.toggleGroupExpanded(expanded, upward)\n      }\n    }\n\n    let mouseInList = false\n    let reproduce = false\n\n    function handleMouseEnter() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !isUsePopper.value || dropTrigger.value !== 'hover') return\n\n      if (!groupExpanded.value && popperShow.value) {\n        reproduce = true\n        return\n      }\n\n      if (typeof parentItemState?.handleMouseEnter === 'function') {\n        parentItemState.handleMouseEnter()\n      }\n\n      if (props.disabled || !isGroup.value) return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = true\n      }, hoverDelay.value)\n    }\n\n    function handleMouseLeave() {\n      clearTimeout(timer.hover)\n\n      if (mouseInList || !popperShow.value || !isUsePopper.value || dropTrigger.value !== 'hover') {\n        return\n      }\n\n      if (typeof parentItemState?.handleMouseLeave === 'function') {\n        parentItemState.handleMouseLeave()\n      }\n\n      if (props.disabled || !isGroup.value) return\n\n      timer.hover = setTimeout(() => {\n        groupExpanded.value = false\n      }, hoverDelay.value)\n    }\n\n    function handleClickOutside() {\n      if (isUsePopper.value && dropTrigger.value === 'click') {\n        nextTick(() => {\n          groupExpanded.value = false\n        })\n      }\n    }\n\n    function handlePopperHide() {\n      popperShow.value = false\n      groupExpanded.value = false\n\n      if (reproduce) {\n        reproduce = false\n\n        if (typeof parentItemState?.handleMouseEnter === 'function') {\n          parentItemState.handleMouseEnter()\n        }\n\n        if (props.disabled || !isGroup.value) return\n\n        groupExpanded.value = true\n      }\n    }\n\n    function handleKeySelect(event: KeyboardEvent) {\n      const key = event.code || event.key\n\n      if (key === 'Enter' || key === 'NumpadEnter') {\n        event.stopPropagation()\n        handleSelect()\n      } else if (key === 'Space') {\n        event.stopPropagation()\n        event.preventDefault()\n        handleSelect()\n      }\n    }\n\n    function renderChildren() {\n      if (!props.children?.length) {\n        return null\n      }\n\n      const renderItem = (item: MenuOptions) => (\n        <MenuItem\n          label={item.label}\n          icon={item.icon}\n          icon-props={item.iconProps}\n          disabled={item.disabled}\n          children={item.children}\n          route={item.route}\n          meta={item.meta}\n        >\n          {item.name ? callIfFunc(item.name) : item.label}\n        </MenuItem>\n      )\n\n      return props.children.map(child => {\n        if (child.group) {\n          return (\n            <MenuGroup key={child.label} label={child.name ? callIfFunc(child.name) : child.label}>\n              {child.children?.map(renderItem)}\n            </MenuGroup>\n          )\n        }\n\n        return renderItem(child)\n      })\n    }\n\n    function renderLabel() {\n      return (\n        <Tooltip\n          placement={isRtl.value ? 'left' : 'right'}\n          reverse={tooltipReverse.value}\n          shift\n          transfer\n          disabled={tooltipDisabled.value}\n        >\n          {{\n            trigger: () => (\n              <div\n                ref={reference}\n                class={{\n                  [nh.be('label')]: true,\n                  [nh.bem('label', `marker-${markerType.value}`)]: true,\n                  [nh.bem('label', 'in-popper')]: parentItemState?.isUsePopper\n                }}\n                role={'menuitem'}\n                tabindex={0}\n                aria-disabled={props.disabled ? 'true' : undefined}\n                style={labelStyle.value}\n                onClick={handleSelect}\n                onKeydown={handleKeySelect}\n                onMouseenter={handleMouseEnter}\n                onMouseleave={handleMouseLeave}\n              >\n                {(slots.icon || props.icon) && (\n                  <div class={nh.be('icon')}>\n                    {slots.icon ? (\n                      renderSlot(slots, 'icon')\n                    ) : (\n                      <Icon {...props.iconProps} icon={props.icon}></Icon>\n                    )}\n                  </div>\n                )}\n                <span\n                  class={{\n                    [nh.be('title')]: true,\n                    [nh.bem('title', 'in-group')]: !isHorizontal.value && isGroup.value\n                  }}\n                >\n                  {slots.default ? renderSlot(slots, 'default') : props.label}\n                </span>\n                {isGroup.value && (\n                  <Icon\n                    {...icons.value.angleDown}\n                    class={{\n                      [nh.be('arrow')]: true,\n                      [nh.bem('arrow', 'visible')]: groupExpanded.value,\n                      [nh.bem('arrow', '')]: sonSelected.value\n                    }}\n                  ></Icon>\n                )}\n              </div>\n            ),\n            default: () => (\n              <span class={nh.be('tooltip-title')}>\n                {slots.default ? renderSlot(slots, 'default') : props.label}\n              </span>\n            )\n          }}\n        </Tooltip>\n      )\n    }\n\n    return () => {\n      return (\n        <li ref={wrapper} class={className.value} role={'none'}>\n          {renderLabel()}\n          <CollapseTransition appear>\n            {isGroup.value && !isUsePopper.value && (\n              <ul v-show={showGroup.value} class={nh.be('list')}>\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n              </ul>\n            )}\n          </CollapseTransition>\n          {isGroup.value && isUsePopper.value && (\n            <Popper\n              ref={popper}\n              class={[\n                nh.be('popper'),\n                nh.bs('vars'),\n                isHorizontal.value && nh.bem('popper', 'drop')\n              ]}\n              visible={popperShow.value && showGroup.value}\n              alive={!transferTo.value || popperShow.value}\n              to={transferTo.value}\n              transition={transition.value}\n              onAfterLeave={handlePopperHide}\n              onMouseenter={() => ((mouseInList = true), handleMouseEnter())}\n              onMouseleave={() => ((mouseInList = false), handleMouseLeave())}\n            >\n              <ul class={nh.be('list')}>\n                {slots.group ? renderSlot(slots, 'group') : renderChildren()}\n              </ul>\n            </Popper>\n          )}\n        </li>\n      )\n    }\n  }\n})\n\n// eslint-disable-next-line vue/require-direct-export\nexport default MenuItem\n"],"names":["MenuGroup","defineAsyncComponent","MenuItem","defineComponent","name","props","menuItemProps","emits","setup","_props","slots","expose","useProps","label","default","static","icon","createIconProp","iconProps","disabled","transfer","trigger","transitionName","meta","children","route","menuState","inject","MENU_STATE","parentItemState","MENU_ITEM_STATE","groupState","MENU_GROUP_STATE","nh","useNameHelper","icons","useIcons","hoverDelay","useHoverDelay","isRtl","useRtl","baseClass","be","placement","ref","value","groupExpanded","selected","sonSelected","popperShow","indent","computed","propTransfer","inTransfer","markerType","wrapper","useClickOutside","handleClickOutside","popper","reference","transferTo","updatePopper","usePopper","shift","crossAxis","isGroup","group","length","showGroup","className","labelStyle","horizontal","isUsePopper","indentWidth","gcv","multiplier","isReduced","paddingInlineStart","undefined","groupType","tooltipDisabled","tooltipReverse","isHorizontal","transition","ns","dropTrigger","itemState","reactive","el","toRef","parentState","cachedExpanded","updateSonSelected","toggleGroupExpanded","handleMouseEnter","handleMouseLeave","provide","watch","immediate","emitEvent","onSelect","doForEachItem","item","nextTick","expanded","handleExpand","currentActive","increaseItem","onBeforeUnmount","decreaseItem","handleSelect","upstream","timer","useSetTimeout","clearTimeout","hover","accordion","upward","mouseInList","reproduce","setTimeout","handlePopperHide","handleKeySelect","event","key","code","stopPropagation","preventDefault","renderChildren","renderItem","_createVNode","callIfFunc","map","child","renderLabel","Tooltip","bem","renderSlot","Icon","_mergeProps","angleDown","CollapseTransition","_withDirectives","_vShow","Popper","bs","onMouseenter","onMouseleave"],"mappings":";;;;;;;;;;;;;;AAyCA,MAAMA,KAAYC,GAAqB,MAAM,OAAO,kBAAc,CAAC,GAE7DC,KAAWC,gBAAAA,GAAgB;AAAA,EAC/BC,MAAM;AAAA,EACNC,OAAOC;AAAAA,EACPC,OAAO,CAAE;AAAA,EACTC,MAAMC,GAAQ;AAAA,IAAEC,OAAAA;AAAAA,IAAOC,QAAAA;AAAAA,EAAO,GAAG;AAC/B,UAAMN,IAAQO,GAAS,YAAYH,GAAQ;AAAA,MACzCI,OAAO;AAAA,QACLC,SAAS;AAAA,QACTC,QAAQ;AAAA,MACT;AAAA,MACDC,MAAMC,GAAgB;AAAA,MACtBC,WAAW;AAAA,MACXC,UAAU;AAAA,MACVC,UAAU;AAAA,MACVC,SAAS;AAAA,MACTC,gBAAgB;AAAA,MAChBC,MAAM;AAAA,MACNC,UAAU;AAAA,QACRV,SAASA,MAAM,CAAE;AAAA,QACjBC,QAAQ;AAAA,MACT;AAAA,MACDU,OAAO;AAAA,IACT,CAAC,GAEKC,IAAYC,EAAOC,IAAY,IAAI,GACnCC,IAAkBF,EAAOG,GAAiB,IAAI,GAC9CC,IAAaJ,EAAOK,IAAkB,IAAI,GAE1CC,IAAKC,GAAc,MAAM,GACzBC,IAAQC,GAAU,GAClBC,IAAaC,GAAe,GAE5B;AAAA,MAAEC,OAAAA;AAAAA,IAAO,IAAGC,GAAQ,GAEpBC,IAAYR,EAAGS,GAAG,MAAM,GACxBC,IAAYC,EAAeL,EAAMM,QAAQ,eAAe,aAAa,GACrEC,IAAgBF,EAAI,EAAK,GACzBG,IAAWH,EAAI,EAAK,GACpBI,IAAcJ,EAAI,EAAK,GACvBK,IAAaL,EAAI,EAAK,GAEtBM,IAASC,EAAS,QAAOtB,KAAAA,gBAAAA,EAAiBqB,WAAU,KAAK,CAAC,GAC1DE,IAAeD,EAAS,MAAM9C,EAAMe,aAAYM,KAAAA,gBAAAA,EAAWN,aAAY,EAAK,GAC5EiC,IAAaF,EAAS,MAAOtB,IAAkBA,EAAgBT,WAAW,EAAM,GAChFA,IAAW+B,EAAS,MAAM,CAACE,EAAWR,SAASO,EAAaP,KAAK,GACjES,IAAaH,EAAS,OAAMzB,KAAAA,gBAAAA,EAAW4B,eAAc,OAAO,GAE5DC,IAAUC,GAAgBC,EAAkB,GAC5CC,IAASd,EAAoB,GAC7B;AAAA,MAAEe,WAAAA;AAAAA,MAAWC,YAAAA;AAAAA,MAAYC,cAAAA;AAAAA,IAAc,IAAGC,GAAU;AAAA,MACxDnB,WAAAA;AAAAA,MACAvB,UAAAA;AAAAA,MACAmC,SAAAA;AAAAA,MACAG,QAAQP,EAAS,MAAA;;AAAMO,gBAAAA,IAAAA,EAAOb,UAAPa,gBAAAA,EAAcH;AAAAA,OAAO;AAAA,MAC5CQ,OAAO;AAAA,QAAEC,WAAW;AAAA,MAAK;AAAA,IAC3B,CAAC,GAEKC,IAAUd,EAAS,MAAA;;AAAM,cAAC,EAAEzC,EAAMwD,UAAS7D,IAAAA,EAAMmB,aAANnB,QAAAA,EAAgB8D;AAAAA,KAAO,GAClEC,IAAYjB,EAAS,MAAMc,EAAQpB,SAASC,EAAcD,KAAK,GAC/DwB,KAAYlB,EAAS,OAClB;AAAA,MACL,CAACV,CAAS,GAAG;AAAA,MACb,CAAC,GAAGA,CAAS,YAAY,GAAGpC,EAAMc;AAAAA,MAClC,CAAC,GAAGsB,CAAS,iBAAiB,GAAG2B,EAAUvB;AAAAA,MAC3C,CAAC,GAAGJ,CAAS,YAAY,GAAGM,EAASF;AAAAA,MACrC,CAAC,GAAGJ,CAAS,WAAW,GAAG,CAACpC,EAAMW;AAAAA,MAClC,CAAC,GAAGyB,CAAS,gBAAgB,GAAGO,EAAYH;AAAAA,IAC7C,EACF,GACKyB,KAAanB,EAAS,MAAM;AAChC,UAAIzB,KAAAA,QAAAA,EAAW6C,cAAc1C,KAAAA,QAAAA,EAAiB2C;AAC5C,eAAO,CAAE;AAGX,YAAMC,IAAcxC,EAAGyC,IAAI,cAAc,GACnCC,IACJzB,EAAOL,SAASnB,KAAAA,QAAAA,EAAWkD,YAAY,KAAK7C,KAAAA,gBAAAA,EAAYmB,WAAU,KAAM;AAE1E,aAAO;AAAA,QACL2B,oBACEhD,KAAmBA,EAAgB2C,cAC/BM,SACA,QAAQL,CAAW,MAAME,CAAU;AAAA,MAC1C;AAAA,IACH,CAAC,GACKH,IAAcrB,EAAS,MAExBzB,MAAcA,EAAU6C,cAAc7C,EAAUqD,cAAc,eAC9Dd,EAAQpB,UAASnB,KAAAA,gBAAAA,EAAWkD,cAAa,CAAC/C,KAC3C,CAAC,EAACA,KAAAA,QAAAA,EAAiB2C,YAEtB,GACKQ,KAAkB7B,EAAS,MAE7Bc,EAAQpB,SAAS,CAAC,EAAEhB,KAAAA,QAAAA,EAAiB2C,eAAgB9C,KAAa,CAACA,EAAUkD,UAEhF,GACKK,KAAiB9B,EAAS,MAAM,CAAC,EAACzB,KAAAA,QAAAA,EAAWuD,eAAc,GAC3DC,IAAe/B,EAAS,OAAMzB,KAAAA,gBAAAA,EAAW6C,eAAc,CAAC1C,CAAe,GACvEsD,KAAahC,EAAS,MAClB9C,EAAMiB,kBAAkB4D,EAAarC,QAASZ,EAAGmD,GAAG,MAAM,IAAInD,EAAGmD,GAAG,MAAM,CACnF,GACKC,IAAclC,EAAS,MAAM9C,EAAMgB,YAAWK,KAAAA,gBAAAA,EAAWL,YAAW,OAAO,GAE3EiE,IAAYC,GAAS;AAAA,MACzBC,IAAIjC;AAAAA,MACJ1C,OAAO4E,GAAMpF,GAAO,OAAO;AAAA,MAC3B6C,QAAAA;AAAAA,MACAJ,eAAAA;AAAAA,MACAsB,WAAAA;AAAAA,MACAI,aAAAA;AAAAA,MACAkB,aAAa7D;AAAAA,MACbT,UAAU+B,EAAS,MAAME,EAAWR,SAASO,EAAaP,KAAK;AAAA,MAC/D8C,gBAAgB7C,EAAcD;AAAAA,MAC9B+C,mBAAAA;AAAAA,MACAC,qBAAAA;AAAAA,MACAC,kBAAAA;AAAAA,MACAC,kBAAAA;AAAAA,IACF,CAAC;AAEDC,IAAAA,GAAQlE,GAAiBwD,CAAS,GAElCW,EACE7B,GACAvB,CAAAA,MAAS;AACP,MAAIA,KAAS2B,EAAY3B,UACvBI,EAAWJ,QAAQ,IACnBgB,GAAc;AAAA,IAElB,GACA;AAAA,MAAEqC,WAAW;AAAA,IAAK,CACpB,GACAD,EAAMlD,GAAUF,CAAAA,MAAS;AACvB,MAAIA,KACFsD,GAAU9F,EAAM+F,QAAQ,GAG1B1E,KAAAA,QAAAA,EAAW2E,cAAcC,CAAAA,MAAQA,EAAKV,kBAAkB,IAAO,EAAK,IACpE/C,KACE0D,EAAS,MAAM;AACb1E,QAAAA,KAAAA,QAAAA,EAAiB+D,kBAAkB/C;AAAAA,MACrC,CAAC;AAAA,IACL,CAAC,GACDoD,EAAMnD,GAAe0D,CAAAA,MAAY;AAC/B,MAAI,QAAO9E,KAAAA,gBAAAA,EAAW+E,iBAAiB,cACrC/E,EAAU+E,aAAapG,EAAMQ,OAAO2F,GAAUnG,EAAMkB,QAAQ,EAAE;AAAA,IAElE,CAAC,GACD0E,EACEf,GACArC,CAAAA,MAAS;AACPF,MAAAA,EAAUE,QAAQA,IAAQ,WAAWN,EAAMM,QAAQ,eAAe;AAAA,IACpE,GACA;AAAA,MAAEqD,WAAW;AAAA,IAAK,CACpB,GAEIxE,MACFuE,EACE,CAAC,MAAM5F,EAAMQ,OAAO,MAAMa,EAAUgF,aAAa,GACjD,MAAM;AACJ3D,MAAAA,EAASF,QAAQxC,EAAMQ,UAAUa,EAAUgF;AAAAA,IAC7C,GACA;AAAA,MAAER,WAAW;AAAA,IAAK,CACpB,GAEI,OAAOxE,EAAUiF,gBAAiB,cACpCjF,EAAUiF,aAAarB,CAAS,IAUpCsB,GAAgB,MAAM;AACpB,MAAI,QAAOlF,KAAAA,gBAAAA,EAAWmF,iBAAiB,cACrCnF,EAAUmF,aAAavB,CAAS;AAAA,IAEpC,CAAC,GAED3E,EAAO;AAAA,MACLmC,eAAAA;AAAAA,MACAmB,SAAAA;AAAAA,MACAG,WAAAA;AAAAA,MACAI,aAAAA;AAAAA,MACAsC,cAAAA;AAAAA,MACAhB,kBAAAA;AAAAA,MACAC,kBAAAA;AAAAA,IACF,CAAC;AAED,aAASH,GAAkB7C,GAAmBgE,IAAW,IAAM;AAC7D/D,MAAAA,EAAYH,QAAQE,GACpBgE,MAAYlF,KAAAA,QAAAA,EAAiB+D,kBAAkB7C;AAAAA,IACjD;AAEA,UAAM;AAAA,MAAEiE,OAAAA;AAAAA,IAAO,IAAGC,GAAe;AAEjC,aAASH,IAAe;AAGtB,UAFAI,aAAaF,EAAMG,KAAK,GAEpB9G,CAAAA,EAAMc;AAEV,YAAI8C,EAAQpB,OAAO;AACjB,cAAI2B,EAAY3B,SAASwC,EAAYxC,UAAU,QAAS;AAExDnB,UAAAA,KAAAA,QAAAA,EAAW2E,cAAcC,CAAAA,MAAQ;AAC/B,YAAI5E,EAAU0F,cACZd,EAAKxD,gBAAgB;AAAA,UAEzB,IACAA,EAAcD,QAAQ,CAACC,EAAcD;AAAAA,QACvC;AACE,UAAI2B,EAAY3B,SACdgD,EAAoB,IAAO,EAAI,GAG7BnE,KACFA,EAAUoF,aAAazG,EAAMQ,OAAOR,EAAMkB,QAAQ,CAAA,GAAIlB,EAAMoB,KAAK,GAGnEsB,EAASF,QAAQ;AAAA,IAErB;AAEA,aAASgD,EAAoBW,GAAmBa,IAAS,IAAO;AAC9DH,mBAAaF,EAAMG,KAAK,GAExBzF,KAAAA,QAAAA,EAAW2E,cAAcC,CAAAA,MAAQ;AAC/B,QAAI5E,EAAU0F,cACZd,EAAKxD,gBAAgB;AAAA,MAEzB,IACAA,EAAcD,QAAQ2D,GAElBa,KAAU,QAAOxF,KAAAA,gBAAAA,EAAiBgE,wBAAwB,cAC5DhE,EAAgBgE,oBAAoBW,GAAUa,CAAM;AAAA,IAExD;AAEA,QAAIC,IAAc,IACdC,IAAY;AAEhB,aAASzB,IAAmB;AAG1B,UAFAoB,aAAaF,EAAMG,KAAK,GAEpBG,EAAAA,KAAe,CAAC9C,EAAY3B,SAASwC,EAAYxC,UAAU,UAE/D;AAAA,YAAI,CAACC,EAAcD,SAASI,EAAWJ,OAAO;AAC5C0E,UAAAA,IAAY;AACZ;AAAA,QACF;AAMA,QAJI,QAAO1F,KAAAA,gBAAAA,EAAiBiE,qBAAqB,cAC/CjE,EAAgBiE,iBAAkB,GAGhCzF,EAAAA,EAAMc,YAAY,CAAC8C,EAAQpB,WAE/BmE,EAAMG,QAAQK,WAAW,MAAM;AAC7B1E,UAAAA,EAAcD,QAAQ;AAAA,QACxB,GAAGR,EAAWQ,KAAK;AAAA;AAAA,IACrB;AAEA,aAASkD,IAAmB;AAG1B,MAFAmB,aAAaF,EAAMG,KAAK,GAEpBG,EAAAA,KAAe,CAACrE,EAAWJ,SAAS,CAAC2B,EAAY3B,SAASwC,EAAYxC,UAAU,aAIhF,QAAOhB,KAAAA,gBAAAA,EAAiBkE,qBAAqB,cAC/ClE,EAAgBkE,iBAAkB,GAGhC1F,EAAAA,EAAMc,YAAY,CAAC8C,EAAQpB,WAE/BmE,EAAMG,QAAQK,WAAW,MAAM;AAC7B1E,QAAAA,EAAcD,QAAQ;AAAA,MACxB,GAAGR,EAAWQ,KAAK;AAAA,IACrB;AAEA,aAASY,KAAqB;AAC5B,MAAIe,EAAY3B,SAASwC,EAAYxC,UAAU,WAC7C0D,EAAS,MAAM;AACbzD,QAAAA,EAAcD,QAAQ;AAAA,MACxB,CAAC;AAAA,IAEL;AAEA,aAAS4E,KAAmB;AAI1B,UAHAxE,EAAWJ,QAAQ,IACnBC,EAAcD,QAAQ,IAElB0E,GAAW;AAOb,YANAA,IAAY,IAER,QAAO1F,KAAAA,gBAAAA,EAAiBiE,qBAAqB,cAC/CjE,EAAgBiE,iBAAkB,GAGhCzF,EAAMc,YAAY,CAAC8C,EAAQpB,MAAO;AAEtCC,QAAAA,EAAcD,QAAQ;AAAA,MACxB;AAAA,IACF;AAEA,aAAS6E,GAAgBC,GAAsB;AAC7C,YAAMC,IAAMD,EAAME,QAAQF,EAAMC;AAEhC,MAAIA,MAAQ,WAAWA,MAAQ,iBAC7BD,EAAMG,gBAAiB,GACvBhB,EAAc,KACLc,MAAQ,YACjBD,EAAMG,gBAAiB,GACvBH,EAAMI,eAAgB,GACtBjB,EAAc;AAAA,IAElB;AAEA,aAASkB,IAAiB;;AACxB,UAAI,GAAC3H,IAAAA,EAAMmB,aAANnB,QAAAA,EAAgB8D;AACnB,eAAO;AAGT,YAAM8D,IAAc3B,CAAAA,MAAiB4B,EAAAhI,IAAA;AAAA,QAAA,OAE1BoG,EAAKzF;AAAAA,QAAK,MACXyF,EAAKtF;AAAAA,QAAI,cACHsF,EAAKpF;AAAAA,QAAS,UAChBoF,EAAKnF;AAAAA,QAAQ,UACbmF,EAAK9E;AAAAA,QAAQ,OAChB8E,EAAK7E;AAAAA,QAAK,MACX6E,EAAK/E;AAAAA,MAAI,GAAA;AAAA,QAAAT,SAAAA,MAAA,CAEdwF,EAAKlG,OAAO+H,EAAW7B,EAAKlG,IAAI,IAAIkG,EAAKzF,KAAK;AAAA,OAElD;AAED,aAAOR,EAAMmB,SAAS4G,IAAIC,CAAAA,MACpBA,EAAMnE,QACRgE,EAAAlI,IAAA;AAAA,QAAA,KACkBqI,EAAMxH;AAAAA,QAAK,OAASwH,EAAMjI,OAAO+H,EAAWE,EAAMjI,IAAI,IAAIiI,EAAMxH;AAAAA,MAAK,GAAA;AAAA,QAAAC,SAAAA,MAAAA;;AAAA,mBAClFuH,IAAAA,EAAM7G,aAAN6G,gBAAAA,EAAgBD,IAAIH,EAAW;AAAA;AAAA,MAAA,CAAA,IAK/BA,EAAWI,CAAK,CACxB;AAAA,IACH;AAEA,aAASC,KAAc;AACrB,aAAAJ,EAAAK,IAAA;AAAA,QAAA,WAEehG,EAAMM,QAAQ,SAAS;AAAA,QAAO,SAChCoC,GAAepC;AAAAA,QAAK,OAAA;AAAA,QAAA,UAAA;AAAA,QAAA,UAGnBmC,GAAgBnC;AAAAA,MAAK,GAAA;AAAA,QAG7BxB,SAASA,MAAA6G,EAAA,OAAA;AAAA,UAAA,KAEAvE;AAAAA,UAAS,OACP;AAAA,YACL,CAAC1B,EAAGS,GAAG,OAAO,CAAC,GAAG;AAAA,YAClB,CAACT,EAAGuG,IAAI,SAAS,UAAUlF,EAAWT,KAAK,EAAE,CAAC,GAAG;AAAA,YACjD,CAACZ,EAAGuG,IAAI,SAAS,WAAW,CAAC,GAAG3G,KAAAA,gBAAAA,EAAiB2C;AAAAA,UAClD;AAAA,UAAA,MACK;AAAA,UAAU,UACN;AAAA,UAAC,iBACInE,EAAMc,WAAW,SAAS2D;AAAAA,UAAS,OAC3CR,GAAWzB;AAAAA,UAAK,SACdiE;AAAAA,UAAY,WACVY;AAAAA,UAAe,cACZ5B;AAAAA,UAAgB,cAChBC;AAAAA,WAEb,EAACrF,EAAMM,QAAQX,EAAMW,SAAIkH,EAAA,OAAA;AAAA,UAAA,OACZjG,EAAGS,GAAG,MAAM;AAAA,QAAC,GAAA,CACtBhC,EAAMM,OACLyH,EAAW/H,GAAO,MAAM,IAACwH,EAAAQ,GAAAC,EAEftI,EAAMa,WAAS;AAAA,UAAA,MAAQb,EAAMW;AAAAA,QACxC,CAAA,GAAA,IAAA,CAAA,CAAA,GAEJkH,EAAA,QAAA;AAAA,UAAA,OAEQ;AAAA,YACL,CAACjG,EAAGS,GAAG,OAAO,CAAC,GAAG;AAAA,YAClB,CAACT,EAAGuG,IAAI,SAAS,UAAU,CAAC,GAAG,CAACtD,EAAarC,SAASoB,EAAQpB;AAAAA,UAChE;AAAA,QAAC,GAAA,CAEAnC,EAAMI,UAAU2H,EAAW/H,GAAO,SAAS,IAAIL,EAAMQ,KAAK,CAE5DoD,GAAAA,EAAQpB,SAAKqF,EAAAQ,GAAAC,EAENxG,EAAMU,MAAM+F,WAAS;AAAA,UAAA,OAClB;AAAA,YACL,CAAC3G,EAAGS,GAAG,OAAO,CAAC,GAAG;AAAA,YAClB,CAACT,EAAGuG,IAAI,SAAS,SAAS,CAAC,GAAG1F,EAAcD;AAAAA,YAC5C,CAACZ,EAAGuG,IAAI,SAAS,EAAE,CAAC,GAAGxF,EAAYH;AAAAA,UACrC;AAAA,QAAC,CAAA,GAAA,IAAA,CAEJ,CAEJ;AAAA,QACD/B,SAASA,MAAAoH,EAAA,QAAA;AAAA,UAAA,OACMjG,EAAGS,GAAG,eAAe;AAAA,QAAC,GAAA,CAChChC,EAAMI,UAAU2H,EAAW/H,GAAO,SAAS,IAAIL,EAAMQ,KAAK,CAAA;AAAA,MAE9D,CAAA;AAAA,IAIT;AAEA,WAAO,MACLqH,EAAA,MAAA;AAAA,MAAA,KACW3E;AAAAA,MAAO,OAASc,GAAUxB;AAAAA,MAAK,MAAQ;AAAA,IAAM,GAAA,CACnDyF,GAAW,GAAEJ,EAAAW,IAAA;AAAA,MAAA,QAAA;AAAA,IAAA,GAAA;AAAA,MAAA/H,SAAAA,MAEXmD,CAAAA,EAAQpB,SAAS,CAAC2B,EAAY3B,SAAKiG,GAAAZ,EAAA,MAAA;AAAA,QAAA,OACEjG,EAAGS,GAAG,MAAM;AAAA,MAC7ChC,GAAAA,CAAAA,EAAMwD,QAAQuE,EAAW/H,GAAO,OAAO,IAAIsH,EAAc,CAAE,CAAAe,GAAAA,CAAAA,CAAAA,IADlD3E,EAAUvB,KAAK,CAG5B,CAAA,CAAA;AAAA,KAEFoB,GAAAA,EAAQpB,SAAS2B,EAAY3B,SAAKqF,EAAAc,IAAA;AAAA,MAAA,KAE1BtF;AAAAA,MAAM,OACJ,CACLzB,EAAGS,GAAG,QAAQ,GACdT,EAAGgH,GAAG,MAAM,GACZ/D,EAAarC,SAASZ,EAAGuG,IAAI,UAAU,MAAM,CAAC;AAAA,MAC/C,SACQvF,EAAWJ,SAASuB,EAAUvB;AAAAA,MAAK,OACrC,CAACe,EAAWf,SAASI,EAAWJ;AAAAA,MAAK,IACxCe,EAAWf;AAAAA,MAAK,YACRsC,GAAWtC;AAAAA,MAAK,cACd4E;AAAAA,MAAgB,cAChByB,OAAQ5B,IAAc,IAAOxB,EAAgB;AAAA,MAAG,cAChDqD,OAAQ7B,IAAc,IAAQvB,EAAkB;AAAA,IAAC,GAAA;AAAA,MAAAjF,SAAAA,MAAA,CAAAoH,EAAA,MAAA;AAAA,QAAA,OAEpDjG,EAAGS,GAAG,MAAM;AAAA,MAAC,GAAA,CACrBhC,EAAMwD,QAAQuE,EAAW/H,GAAO,OAAO,IAAIsH,EAAc,CAAE,CAAA,CAAA;AAAA,IAGjE,CAAA,CAAA,CAAA;AAAA,EAIT;AACF,CAAC;"}