{"version":3,"file":"contextmenu.vue2.mjs","sources":["../../../components/contextmenu/contextmenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Dropdown } from '@/components/dropdown'\r\nimport { DropdownList } from '@/components/dropdown-list'\r\nimport { Renderer } from '@/components/renderer'\r\n\r\nimport { reactive, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { isFunction } from '@vexip-ui/utils'\r\nimport { renderItem } from './render'\r\n\r\nimport type { ContextmenuConfig, ContextmenuOptions, Key } from './symbol'\r\n\r\ndefineOptions({ name: 'Contextmenu' })\r\n\r\nconst nh = useNameHelper('contextmenu')\r\nconst { isRtl } = useRtl()\r\nconst visible = ref(false)\r\nconst configs = ref<ContextmenuConfig[]>([])\r\nconst appear = ref(false)\r\n\r\nconst position = reactive({\r\n  x: 0,\r\n  y: 0,\r\n})\r\n\r\nconst onSelect = ref<((keys: Key[]) => void) | null>(null)\r\nconst onCancel = ref<(() => void) | null>(null)\r\n\r\nfunction openContextmenu(options: ContextmenuOptions) {\r\n  position.x = options.clientX || 0\r\n  position.y = options.clientY || 0\r\n  configs.value = options.configs\r\n  appear.value = options.appear ?? false\r\n\r\n  visible.value = true\r\n\r\n  return new Promise<Key[] | null>(resolve => {\r\n    onSelect.value = (keys: Key[]) => {\r\n      resolve(keys)\r\n    }\r\n    onCancel.value = () => {\r\n      resolve(null)\r\n    }\r\n  })\r\n}\r\n\r\nfunction afterContextmenu() {\r\n  onSelect.value = null\r\n  onCancel.value = null\r\n}\r\n\r\nfunction handleSelect(keys: Key[]) {\r\n  visible.value = false\r\n\r\n  if (isFunction(onSelect.value)) {\r\n    onSelect.value(keys)\r\n    afterContextmenu()\r\n  }\r\n}\r\n\r\nfunction handleCancel() {\r\n  visible.value = false\r\n\r\n  if (isFunction(onCancel.value)) {\r\n    onCancel.value()\r\n    afterContextmenu()\r\n  }\r\n}\r\n\r\ndefineExpose({ visible, position, openContextmenu, handleSelect, handleCancel })\r\n</script>\r\n\r\n<template>\r\n  <Dropdown\r\n    v-model:visible=\"visible\"\r\n    :class=\"[nh.b(), nh.bs('vars')]\"\r\n    trigger=\"click\"\r\n    :placement=\"isRtl ? 'left-start' : 'right-start'\"\r\n    :appear=\"appear\"\r\n    :transfer=\"false\"\r\n    :style=\"{\r\n      top: `${position.y}px`,\r\n      left: `${position.x}px`\r\n    }\"\r\n    @contextmenu.prevent.stop\r\n    @select=\"handleSelect\"\r\n    @outside-close=\"handleCancel\"\r\n  >\r\n    <!-- <div :class=\"nh.be('anchor')\"></div> -->\r\n    <template #drop>\r\n      <DropdownList\r\n        :class=\"[\r\n          nh.be('list'),\r\n          configs.some(c => c.icon) ? nh.bem('list', 'icons') : nh.bem('list', 'no-icon'),\r\n          configs.some(c => c.children && c.children.length)\r\n            ? nh.bem('list', 'arrows')\r\n            : nh.bem('list', 'no-arrow')\r\n        ]\"\r\n      >\r\n        <Renderer\r\n          v-for=\"item in configs\"\r\n          :key=\"item.key\"\r\n          :data=\"{ config: item, nh }\"\r\n          :renderer=\"renderItem\"\r\n        ></Renderer>\r\n      </DropdownList>\r\n    </template>\r\n  </Dropdown>\r\n</template>\r\n"],"names":["nh","useNameHelper","isRtl","useRtl","visible","ref","configs","appear","position","reactive","onSelect","onCancel","openContextmenu","options","resolve","keys","afterContextmenu","handleSelect","isFunction","handleCancel","__expose","_createBlock","_unref","Dropdown","$event","_normalizeStyle","_createVNode","DropdownList","_normalizeClass","c","_createElementBlock","_Fragment","_renderList","item","Renderer","renderItem"],"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,mBAI7EE,EAkCWC,EAAAC,CAAA,GAAA;AAAA,MAjCD,SAASnB,EAAO;AAAA,iDAAPA,EAAO,QAAAoB;AAAA,MACvB,UAAQF,EAAEtB,CAAA,EAAC,KAAKsB,EAAAtB,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA;AAAA,MACtB,SAAQ;AAAA,MACP,WAAWsB,EAAKpB,CAAA,IAAA,eAAA;AAAA,MAChB,QAAQK,EAAM;AAAA,MACd,UAAU;AAAA,MACV,OAAKkB,EAAA;AAAA,QAAmB,KAAA,GAAAjB,EAAS,CAAC;AAAA,QAAsB,MAAA,GAAAA,EAAS,CAAC;AAAA,MAAA;MAIlE,iCAAD,MAAyB;AAAA,MAAA,GAAA,CAAA,WAAA,MAAA,CAAA;AAAA,MACxB,UAAQS;AAAA,MACR,gBAAeE;AAAA,IAAA;MAGL,QACT,MAee;AAAA,QAffO,EAeeJ,EAAAK,CAAA,GAAA;AAAA,UAdZ,OAAKC,EAAA;AAAA,YAAeN,EAAAtB,CAAA,EAAG,GAAE,MAAA;AAAA,YAAqBM,EAAA,MAAQ,KAAK,OAAKuB,EAAE,IAAI,IAAIP,KAAG,IAAuB,QAAA,OAAA,IAAAA,EAAAtB,CAAA,EAAG,IAAG,QAAA,SAAA;AAAA,YAAgCM,EAAA,MAAQ,KAAK,CAAAuB,MAAKA,EAAE,YAAYA,EAAE,SAAS,MAAM,IAAiBP,EAAAtB,CAAA,EAAG,IAAG,QAAA,QAAA,IAAkCsB,EAAAtB,CAAA,EAAG,IAAG,QAAA,UAAA;AAAA;;qBASzP,MAAuB;AAAA,oBADzB8B,EAKYC,GAAA,MAAAC,EAJK1B,EAAO,OAAA,CAAf2B,YADTZ,EAKYC,EAAAY,CAAA,GAAA;AAAA,cAHT,KAAKD,EAAK;AAAA,cACV,MAAI,EAAA,QAAYA,GAAI,IAAEX,EAAEtB,CAAA,EAAA;AAAA,cACxB,UAAUsB,EAAUa,CAAA;AAAA;;;;;;;;;"}