{"version":3,"file":"context-menu2.mjs","sources":["../../../../../../../packages/components/context-menu/src/context-menu.tsx"],"sourcesContent":["import { computed, defineComponent, nextTick, onMounted, onUnmounted, ref, unref } from 'vue'\nimport { Divider, Menu } from 'ant-design-vue'\nimport Icon from '@tav-ui/components/icon'\nimport { contextMenuProps } from './types'\nimport type { CSSProperties, FunctionalComponent } from 'vue'\nimport type { ContextMenuItem, ItemContentProps } from './types'\nconst prefixCls = 'context-menu'\nconst ItemContent: FunctionalComponent<ItemContentProps> = (props) => {\n  const { item } = props\n  return (\n    <span\n      style=\"display: inline-block; width: 100%; \"\n      class=\"px-4\"\n      onClick={props.handler.bind(null, item)}\n    >\n      {props.showIcon && item.icon && <Icon class=\"mr-2\" icon={item.icon} />}\n      <span>{item.label}</span>\n    </span>\n  )\n}\n\nexport default defineComponent({\n  name: 'TaContextMenu',\n  props: contextMenuProps,\n  setup(props) {\n    const wrapRef = ref(null)\n    const showRef = ref(false)\n\n    const getStyle = computed((): CSSProperties => {\n      const { axis, items, styles, width } = props\n      const { x, y } = axis || { x: 0, y: 0 }\n      const menuHeight = (items || []).length * 40\n      const menuWidth = width\n      const body = document.body\n\n      const left = body.clientWidth < x + menuWidth ? x - menuWidth : x\n      const top = body.clientHeight < y + menuHeight ? y - menuHeight : y\n      return {\n        ...(styles as object),\n        width: `${width}px`,\n        left: `${left + 1}px`,\n        top: `${top + 1}px`,\n      }\n    })\n\n    onMounted(() => {\n      nextTick(() => (showRef.value = true))\n    })\n\n    onUnmounted(() => {\n      const el = unref(wrapRef)\n      el && document.body.removeChild(el)\n    })\n\n    function handleAction(item: ContextMenuItem, e: MouseEvent) {\n      const { handler, disabled } = item\n      if (disabled) return\n\n      showRef.value = false\n      e?.stopPropagation()\n      e?.preventDefault()\n      handler?.()\n    }\n\n    function renderMenuItem(items: ContextMenuItem[]) {\n      return items.map((item) => {\n        const { disabled, label, children, divider = false } = item\n\n        const contentProps = {\n          item,\n          handler: handleAction,\n          showIcon: props.showIcon,\n        }\n\n        if (!children || children.length === 0) {\n          return (\n            <>\n              <Menu.Item disabled={disabled} class={`${prefixCls}__item`} key={label}>\n                <ItemContent {...contentProps} />\n              </Menu.Item>\n              {divider ? <Divider key={`d-${label}`} /> : null}\n            </>\n          )\n        }\n        if (!unref(showRef)) return null\n\n        return (\n          <Menu.SubMenu key={label} disabled={disabled} popupClassName={`${prefixCls}__popup`}>\n            {{\n              title: () => <ItemContent {...contentProps} />,\n              default: () => renderMenuItem(children),\n            }}\n          </Menu.SubMenu>\n        )\n      })\n    }\n    return () => {\n      if (!unref(showRef)) return null\n\n      const { items } = props\n      return (\n        <Menu\n          inlineIndent={12}\n          mode=\"vertical\"\n          class={prefixCls}\n          ref={wrapRef}\n          style={unref(getStyle)}\n        >\n          {renderMenuItem(items)}\n        </Menu>\n      )\n    }\n  },\n})\n"],"names":["prefixCls","ItemContent","_createVNode","item","Icon","props","handler","showIcon","icon","name","items","styles","width","x","y","menuHeight","menuWidth","left","clientWidth","clientHeight","top","onMounted","nextTick","showRef","onUnmounted","el","disabled","e","renderMenuItem","label","children","divider","_Fragment","title","default"],"mappings":"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"}