element-plus
Version:
A Component Library for Vue 3
1 lines • 4.13 kB
Source Map (JSON)
{"version":3,"file":"dropdown-item-impl.mjs","sources":["../../../../../../packages/components/dropdown/src/dropdown-item-impl.vue"],"sourcesContent":["<template>\n <div\n v-if=\"divided\"\n :class=\"ns.bem('menu', 'item', 'divided')\"\n v-bind=\"$attrs\"\n ></div>\n <div\n :ref=\"itemRef\"\n v-bind=\"{ ...dataset, ...$attrs }\"\n :aria-disabled=\"disabled\"\n :class=\"[ns.be('menu', 'item'), ns.is('disabled', disabled)]\"\n :tabindex=\"tabIndex\"\n role=\"menuitem\"\n @click=\"(e) => $emit('click', e)\"\n @focus=\"handleFocus\"\n @keydown=\"handleKeydown\"\n @mousedown=\"handleMousedown\"\n @pointermove=\"(e) => $emit('pointermove', e)\"\n @pointerleave=\"(e) => $emit('pointerleave', e)\"\n >\n <el-icon v-if=\"icon\"><component :is=\"icon\" /></el-icon>\n <slot />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, inject } from 'vue'\nimport {\n ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY,\n ROVING_FOCUS_ITEM_COLLECTION_INJECTION_KEY,\n} from '@element-plus/components/roving-focus-group'\nimport { COLLECTION_ITEM_SIGN } from '@element-plus/components/collection'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { useNamespace } from '@element-plus/hooks'\nimport { composeEventHandlers, composeRefs } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport {\n DROPDOWN_COLLECTION_ITEM_INJECTION_KEY,\n dropdownItemProps,\n} from './dropdown'\n\nexport default defineComponent({\n name: 'DropdownItemImpl',\n components: {\n ElIcon,\n },\n props: dropdownItemProps,\n emits: ['pointermove', 'pointerleave', 'click'],\n setup(_, { emit }) {\n const ns = useNamespace('dropdown')\n\n const { collectionItemRef: dropdownCollectionItemRef } = inject(\n DROPDOWN_COLLECTION_ITEM_INJECTION_KEY,\n undefined\n )!\n\n const { collectionItemRef: rovingFocusCollectionItemRef } = inject(\n ROVING_FOCUS_ITEM_COLLECTION_INJECTION_KEY,\n undefined\n )!\n\n const {\n rovingFocusGroupItemRef,\n tabIndex,\n handleFocus,\n handleKeydown: handleItemKeydown,\n handleMousedown,\n } = inject(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, undefined)!\n\n const itemRef = composeRefs(\n dropdownCollectionItemRef,\n rovingFocusCollectionItemRef,\n rovingFocusGroupItemRef\n )\n\n const handleKeydown = composeEventHandlers((e: KeyboardEvent) => {\n const { code } = e\n if (code === EVENT_CODE.enter || code === EVENT_CODE.space) {\n e.preventDefault()\n e.stopImmediatePropagation()\n emit('click', e)\n return true\n }\n }, handleItemKeydown)\n\n return {\n ns,\n itemRef,\n dataset: {\n [COLLECTION_ITEM_SIGN]: '',\n },\n tabIndex,\n handleFocus,\n handleKeydown,\n handleMousedown,\n }\n },\n})\n</script>\n"],"names":["DROPDOWN_COLLECTION_ITEM_INJECTION_KEY","ROVING_FOCUS_ITEM_COLLECTION_INJECTION_KEY","_openBlock","_createElementBlock","_createCommentVNode"],"mappings":";;;;;;;;;;;;;;;;;AAyCA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA;AAAA,EAEF,OAAO;AAAA,EACP,OAAO,CAAC,eAAe,gBAAgB;AAAA,EACvC,MAAM,GAAG,EAAE,QAAQ;AACjB,UAAM,KAAK,aAAa;AAExB,UAAM,EAAE,mBAAmB,8BAA8B,OACvDA,+BACA;AAGF,UAAM,EAAE,mBAAmB,iCAAiC,OAC1DC,iCACA;AAGF,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,QACE,OAAO,uCAAuC;AAElD,UAAM,UAAU,YACd,2BACA,8BACA;AAGF,UAAM,gBAAgB,qBAAqB,CAAC,MAAqB;AAC/D,YAAM,EAAE,SAAS;AACjB,UAAI,SAAS,WAAW,SAAS,SAAS,WAAW,OAAO;AAC1D,UAAE;AACF,UAAE;AACF,aAAK,SAAS;AACd,eAAO;AAAA;AAAA,OAER;AAEH,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS;AAAA,SACN,uBAAuB;AAAA;AAAA,MAE1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA;;;;SA5FIC,aAAOC;AAAA;MACZ,KAAK;AAAA,aACE,KAAM;AAAA,kCAEhBC,mBAgBM,QAhBN;AAAA,uBAGkB,kBAAQ;AAAA,MACvB,iBAAW,KAAE;AAAA,MACb,QAAQ,KAAE,cAAQ;AAAA,MACnB,UAAK;AAAA,MACJ;AAAA,MACA,SAAK,4CAAE;AAAA,MACP,SAAO,4CAAE;AAAA,MACT,WAAS,4CAAE;AAAA,MACX,aAAW,8BAAI,SAAK,KAAK,mBAAiB;AAAA,MAC1C,eAAY,iCAAI,KAAK,MAAK;AAAA;QAEZ;AAAA,4CAA8B;AAAA,yBAAxB;AAAA;;;YACrBA,mBAAQ;AAAA;;;;;;;;"}