UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 5.39 kB
{"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","_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,QAAkB,KAAA,GAAAjB,EAAS,CAAC;AAAA,QAAqB,MAAA,GAAAA,EAAS,CAAC;AAAA,MAAA;MAIhE,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,YAAcN,EAAAtB,CAAA,EAAG,GAAE,MAAA;AAAA,YAAoBM,EAAA,MAAQ,KAAK,OAAKuB,EAAE,IAAI,IAAIP,KAAG,IAAuB,QAAA,OAAA,IAAAA,EAAAtB,CAAA,EAAG,IAAG,QAAA,SAAA;AAAA,YAA+BM,EAAA,MAAQ,KAAK,CAAAuB,MAAKA,EAAE,YAAYA,EAAE,SAAS,MAAM,IAAgBP,EAAAtB,CAAA,EAAG,IAAG,QAAA,QAAA,IAAiCsB,EAAAtB,CAAA,EAAG,IAAG,QAAA,UAAA;AAAA;;qBASpP,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;;;;;;;;;"}