element-plus
Version:
A Component Library for Vue 3
1 lines • 2.7 kB
Source Map (JSON)
{"version":3,"file":"submenu.mjs","names":[],"sources":["../../../../../../../packages/components/menu/src/utils/submenu.ts"],"sourcesContent":["import { getEventCode, triggerEvent } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\n\nimport type MenuItem from './menu-item'\n\nclass SubMenu {\n public subMenuItems: NodeListOf<HTMLLIElement>\n public subIndex: number\n constructor(\n public parent: MenuItem,\n public domNode: ParentNode\n ) {\n this.subIndex = 0\n this.subMenuItems = this.domNode.querySelectorAll('li')\n this.addListeners()\n }\n\n gotoSubIndex(idx: number) {\n if (idx === this.subMenuItems.length) {\n idx = 0\n } else if (idx < 0) {\n idx = this.subMenuItems.length - 1\n }\n this.subMenuItems[idx].focus()\n this.subIndex = idx\n }\n\n addListeners() {\n const parentNode = this.parent.domNode\n this.subMenuItems.forEach((el) => {\n el.addEventListener('keydown', (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let prevDef = false\n\n switch (code) {\n case EVENT_CODE.down: {\n this.gotoSubIndex(this.subIndex + 1)\n prevDef = true\n break\n }\n case EVENT_CODE.up: {\n this.gotoSubIndex(this.subIndex - 1)\n prevDef = true\n break\n }\n case EVENT_CODE.tab: {\n triggerEvent(parentNode, 'mouseleave')\n break\n }\n case EVENT_CODE.enter:\n case EVENT_CODE.numpadEnter:\n case EVENT_CODE.space: {\n prevDef = true\n ;(event.currentTarget as HTMLElement).click()\n break\n }\n }\n if (prevDef) {\n event.preventDefault()\n event.stopPropagation()\n }\n return false\n })\n })\n }\n}\n\nexport default SubMenu\n"],"mappings":";;;;AAKA,IAAM,UAAN,MAAc;CAGZ,YACE,QACA,SACA;EAFO,KAAA,SAAA;EACA,KAAA,UAAA;EAEP,KAAK,WAAW;EAChB,KAAK,eAAe,KAAK,QAAQ,iBAAiB,KAAK;EACvD,KAAK,cAAc;;CAGrB,aAAa,KAAa;EACxB,IAAI,QAAQ,KAAK,aAAa,QAC5B,MAAM;OACD,IAAI,MAAM,GACf,MAAM,KAAK,aAAa,SAAS;EAEnC,KAAK,aAAa,KAAK,OAAO;EAC9B,KAAK,WAAW;;CAGlB,eAAe;EACb,MAAM,aAAa,KAAK,OAAO;EAC/B,KAAK,aAAa,SAAS,OAAO;GAChC,GAAG,iBAAiB,YAAY,UAAyB;IACvD,MAAM,OAAO,aAAa,MAAM;IAChC,IAAI,UAAU;IAEd,QAAQ,MAAR;KACE,KAAK,WAAW;MACd,KAAK,aAAa,KAAK,WAAW,EAAE;MACpC,UAAU;MACV;KAEF,KAAK,WAAW;MACd,KAAK,aAAa,KAAK,WAAW,EAAE;MACpC,UAAU;MACV;KAEF,KAAK,WAAW;MACd,aAAa,YAAY,aAAa;MACtC;KAEF,KAAK,WAAW;KAChB,KAAK,WAAW;KAChB,KAAK,WAAW;MACd,UAAU;MACT,MAAO,cAA8B,OAAO;MAC7C;;IAGJ,IAAI,SAAS;KACX,MAAM,gBAAgB;KACtB,MAAM,iBAAiB;;IAEzB,OAAO;KACP;IACF"}