vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 5.26 kB
Source Map (JSON)
{"version":3,"file":"contextmenu.vue2.cjs","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","_createBlock","_unref","Dropdown","$event","_normalizeStyle","_createVNode","DropdownList","_normalizeClass","c","_createElementBlock","_Fragment","_renderList","item","Renderer","renderItem"],"mappings":"sdAgBM,MAAAA,EAAKC,gBAAc,aAAa,EAChC,CAAE,MAAAC,CAAM,EAAIC,SAAO,EACnBC,EAAUC,MAAI,EAAK,EACnBC,EAAUD,EAAyB,IAAA,EAAE,EACrCE,EAASF,MAAI,EAAK,EAElBG,EAAWC,EAAAA,SAAS,CACxB,EAAG,EACH,EAAG,CAAA,CACJ,EAEKC,EAAWL,MAAoC,IAAI,EACnDM,EAAWN,MAAyB,IAAI,EAE9C,SAASO,EAAgBC,EAA6B,CAC3C,OAAAL,EAAA,EAAIK,EAAQ,SAAW,EACvBL,EAAA,EAAIK,EAAQ,SAAW,EAChCP,EAAQ,MAAQO,EAAQ,QACjBN,EAAA,MAAQM,EAAQ,QAAU,GAEjCT,EAAQ,MAAQ,GAET,IAAI,QAAiCU,GAAA,CACjCJ,EAAA,MAASK,GAAgB,CAChCD,EAAQC,CAAI,CACd,EACAJ,EAAS,MAAQ,IAAM,CACrBG,EAAQ,IAAI,CACd,CAAA,CACD,CAAA,CAGH,SAASE,GAAmB,CAC1BN,EAAS,MAAQ,KACjBC,EAAS,MAAQ,IAAA,CAGnB,SAASM,EAAaF,EAAa,CACjCX,EAAQ,MAAQ,GAEZc,EAAA,WAAWR,EAAS,KAAK,IAC3BA,EAAS,MAAMK,CAAI,EACFC,EAAA,EACnB,CAGF,SAASG,GAAe,CACtBf,EAAQ,MAAQ,GAEZc,EAAA,WAAWP,EAAS,KAAK,IAC3BA,EAAS,MAAM,EACEK,EAAA,EACnB,CAGF,OAAAI,EAAa,CAAE,QAAAhB,EAAS,SAAAI,EAAU,gBAAAI,EAAiB,aAAAK,EAAc,aAAAE,EAAc,wBAI7EE,EAAAA,YAkCWC,EAAA,MAAAC,CAAA,EAAA,CAjCD,QAASnB,EAAO,wCAAPA,EAAO,MAAAoB,GACvB,wBAAQF,EAAA,MAAEtB,CAAA,EAAC,IAAKsB,EAAAA,MAAAtB,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,EACtB,QAAQ,QACP,UAAWsB,EAAA,MAAKpB,CAAA,EAAA,aAAA,cAChB,OAAQK,EAAM,MACd,SAAU,GACV,MAAKkB,EAAAA,eAAA,CAAkB,IAAA,GAAAjB,EAAS,CAAC,KAAqB,KAAA,GAAAA,EAAS,CAAC,IAAA,GAIhE,0CAAD,IAAyB,CAAA,EAAA,CAAA,UAAA,MAAA,CAAA,GACxB,SAAQS,EACR,eAAeE,CAAA,GAGL,eACT,IAee,CAffO,cAeeJ,EAAAA,MAAAK,CAAA,EAAA,CAdZ,MAAKC,EAAAA,eAAA,CAAcN,EAAAA,MAAAtB,CAAA,EAAG,GAAE,MAAA,EAAoBM,EAAA,MAAQ,QAAUuB,EAAE,IAAI,EAAIP,EAAAA,SAAG,IAAuB,OAAA,OAAA,EAAAA,EAAA,MAAAtB,CAAA,EAAG,IAAG,OAAA,SAAA,EAA+BM,EAAA,MAAQ,KAAKuB,GAAKA,EAAE,UAAYA,EAAE,SAAS,MAAM,EAAgBP,EAAA,MAAAtB,CAAA,EAAG,IAAG,OAAA,QAAA,EAAiCsB,QAAAtB,CAAA,EAAG,IAAG,OAAA,UAAA,wBASpP,IAAuB,kBADzB8B,EAAAA,mBAKYC,EAAA,SAAA,KAAAC,EAAAA,WAJK1B,EAAO,MAAf2B,kBADTZ,EAAAA,YAKYC,EAAA,MAAAY,CAAA,EAAA,CAHT,IAAKD,EAAK,IACV,KAAI,CAAA,OAAYA,EAAI,GAAEX,EAAAA,MAAEtB,CAAA,CAAA,EACxB,SAAUsB,QAAUa,EAAA,UAAA"}