{"version":3,"file":"contextmenu.vue2.mjs","sources":["../../../components/contextmenu/contextmenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Dropdown } from '@/components/dropdown'\nimport { DropdownList } from '@/components/dropdown-list'\nimport { Renderer } from '@/components/renderer'\n\nimport { reactive, ref } from 'vue'\n\nimport { useNameHelper } from '@vexip-ui/config'\nimport { useRtl } from '@vexip-ui/hooks'\nimport { isFunction } from '@vexip-ui/utils'\nimport { renderItem } from './render'\n\nimport type { ContextmenuConfig, ContextmenuOptions, Key } from './symbol'\n\ndefineOptions({ name: 'Contextmenu' })\n\nconst nh = useNameHelper('contextmenu')\nconst { isRtl } = useRtl()\nconst visible = ref(false)\nconst configs = ref<ContextmenuConfig[]>([])\nconst appear = ref(false)\n\nconst position = reactive({\n  x: 0,\n  y: 0\n})\n\nconst onSelect = ref<((keys: Key[]) => void) | null>(null)\nconst onCancel = ref<(() => void) | null>(null)\n\nfunction openContextmenu(options: ContextmenuOptions) {\n  position.x = options.clientX || 0\n  position.y = options.clientY || 0\n  configs.value = options.configs\n  appear.value = options.appear ?? false\n\n  visible.value = true\n\n  return new Promise<Key[] | null>(resolve => {\n    onSelect.value = (keys: Key[]) => {\n      resolve(keys)\n    }\n    onCancel.value = () => {\n      resolve(null)\n    }\n  })\n}\n\nfunction afterContextmenu() {\n  onSelect.value = null\n  onCancel.value = null\n}\n\nfunction handleSelect(keys: Key[]) {\n  visible.value = false\n\n  if (isFunction(onSelect.value)) {\n    onSelect.value(keys)\n    afterContextmenu()\n  }\n}\n\nfunction handleCancel() {\n  visible.value = false\n\n  if (isFunction(onCancel.value)) {\n    onCancel.value()\n    afterContextmenu()\n  }\n}\n\ndefineExpose({ visible, position, openContextmenu, handleSelect, handleCancel })\n</script>\n\n<template>\n  <Dropdown\n    v-model:visible=\"visible\"\n    :class=\"[nh.b(), nh.bs('vars')]\"\n    trigger=\"click\"\n    :placement=\"isRtl ? 'left-start' : 'right-start'\"\n    :appear=\"appear\"\n    :transfer=\"false\"\n    :style=\"{\n      top: `${position.y}px`,\n      left: `${position.x}px`\n    }\"\n    @contextmenu.prevent.stop\n    @select=\"handleSelect\"\n    @outside-close=\"handleCancel\"\n  >\n    <!-- <div :class=\"nh.be('anchor')\"></div> -->\n    <template #drop>\n      <DropdownList\n        :class=\"[\n          nh.be('list'),\n          configs.some(c => c.icon) ? nh.bem('list', 'icons') : nh.bem('list', 'no-icon'),\n          configs.some(c => c.children && c.children.length)\n            ? nh.bem('list', 'arrows')\n            : nh.bem('list', 'no-arrow')\n        ]\"\n      >\n        <Renderer\n          v-for=\"item in configs\"\n          :key=\"item.key\"\n          :data=\"{ config: item, nh }\"\n          :renderer=\"renderItem\"\n        ></Renderer>\n      </DropdownList>\n    </template>\n  </Dropdown>\n</template>\n"],"names":["nh","useNameHelper","isRtl","useRtl","visible","ref","configs","appear","position","reactive","onSelect","onCancel","openContextmenu","options","resolve","keys","afterContextmenu","handleSelect","isFunction","handleCancel","__expose"],"mappings":";;;;;;;;;;;;;;;AAgBM,UAAAA,IAAKC,EAAc,aAAa,GAChC,EAAE,OAAAC,EAAM,IAAIC,EAAO,GACnBC,IAAUC,EAAI,EAAK,GACnBC,IAAUD,EAAyB,EAAE,GACrCE,IAASF,EAAI,EAAK,GAElBG,IAAWC,EAAS;AAAA,MACxB,GAAG;AAAA,MACH,GAAG;AAAA,IAAA,CACJ,GAEKC,IAAWL,EAAoC,IAAI,GACnDM,IAAWN,EAAyB,IAAI;AAE9C,aAASO,EAAgBC,GAA6B;AAC3C,aAAAL,EAAA,IAAIK,EAAQ,WAAW,GACvBL,EAAA,IAAIK,EAAQ,WAAW,GAChCP,EAAQ,QAAQO,EAAQ,SACjBN,EAAA,QAAQM,EAAQ,UAAU,IAEjCT,EAAQ,QAAQ,IAET,IAAI,QAAsB,CAAWU,MAAA;AACjC,QAAAJ,EAAA,QAAQ,CAACK,MAAgB;AAChC,UAAAD,EAAQC,CAAI;AAAA,QACd,GACAJ,EAAS,QAAQ,MAAM;AACrB,UAAAG,EAAQ,IAAI;AAAA,QACd;AAAA,MAAA,CACD;AAAA,IAAA;AAGH,aAASE,IAAmB;AAC1B,MAAAN,EAAS,QAAQ,MACjBC,EAAS,QAAQ;AAAA,IAAA;AAGnB,aAASM,EAAaF,GAAa;AACjC,MAAAX,EAAQ,QAAQ,IAEZc,EAAWR,EAAS,KAAK,MAC3BA,EAAS,MAAMK,CAAI,GACFC,EAAA;AAAA,IACnB;AAGF,aAASG,IAAe;AACtB,MAAAf,EAAQ,QAAQ,IAEZc,EAAWP,EAAS,KAAK,MAC3BA,EAAS,MAAM,GACEK,EAAA;AAAA,IACnB;AAGF,WAAAI,EAAa,EAAE,SAAAhB,GAAS,UAAAI,GAAU,iBAAAI,GAAiB,cAAAK,GAAc,cAAAE,GAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}