{"version":3,"file":"submenu.mjs","sources":["../../../../../../packages/components/menu/src/utils/submenu.ts"],"sourcesContent":["import { triggerEvent } from '@element-ultra/utils'\nimport { EVENT_CODE } from '@element-ultra/shared'\nimport type MenuItem from './menu-item'\n\nclass SubMenu {\n  public subMenuItems: NodeList\n  public subIndex = 0\n  constructor(public parent: MenuItem, public domNode: ParentNode) {\n    this.subIndex = 0\n    this.init()\n  }\n\n  init(): void {\n    this.subMenuItems = this.domNode.querySelectorAll('li')\n    this.addListeners()\n  }\n\n  gotoSubIndex(idx: number): void {\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] as HTMLElement).focus()\n    this.subIndex = idx\n  }\n\n  addListeners(): void {\n    const parentNode = this.parent.domNode\n    Array.prototype.forEach.call(this.subMenuItems, (el: Element) => {\n      el.addEventListener('keydown', (event: KeyboardEvent) => {\n        let prevDef = false\n        switch (event.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 as HTMLElement, 'mouseleave')\n            break\n          }\n          case EVENT_CODE.enter:\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"],"names":[],"mappings":";;;;;AAIA,MAAM,OAAQ,CAAA;AAAA,EAGZ,WAAA,CAAmB,QAAyB,OAAqB,EAAA;AAA9C,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA,CAAA;AAAyB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AAD5C,IAAA,IAAA,CAAO,QAAW,GAAA,CAAA,CAAA;AAEhB,IAAA,IAAA,CAAK,QAAW,GAAA,CAAA,CAAA;AAChB,IAAA,IAAA,CAAK,IAAK,EAAA,CAAA;AAAA,GACZ;AAAA,EAEA,IAAa,GAAA;AACX,IAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAK,OAAQ,CAAA,gBAAA,CAAiB,IAAI,CAAA,CAAA;AACtD,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACpB;AAAA,EAEA,aAAa,GAAmB,EAAA;AAC9B,IAAI,IAAA,GAAA,KAAQ,IAAK,CAAA,YAAA,CAAa,MAAQ,EAAA;AACpC,MAAM,GAAA,GAAA,CAAA,CAAA;AAAA,KACR,MAAA,IAAW,MAAM,CAAG,EAAA;AAClB,MAAM,GAAA,GAAA,IAAA,CAAK,aAAa,MAAS,GAAA,CAAA,CAAA;AAAA,KACnC;AACA,IAAA,CAAA;AAAC,IAAC,IAAK,CAAA,YAAA,CAAa,GAAG,CAAA,CAAkB,KAAM,EAAA,CAAA;AAC/C,IAAA,IAAA,CAAK,QAAW,GAAA,GAAA,CAAA;AAAA,GAClB;AAAA,EAEA,YAAqB,GAAA;AACnB,IAAM,MAAA,UAAA,GAAa,KAAK,MAAO,CAAA,OAAA,CAAA;AAC/B,IAAA,KAAA,CAAM,UAAU,OAAQ,CAAA,IAAA,CAAK,IAAK,CAAA,YAAA,EAAc,CAAC,EAAgB,KAAA;AAC/D,MAAG,EAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,KAAyB,KAAA;AACvD,QAAA,IAAI,OAAU,GAAA,KAAA,CAAA;AACd,QAAA,QAAQ,MAAM,IAAM;AAAA,UAClB,KAAK,WAAW,IAAM,EAAA;AACpB,YAAK,IAAA,CAAA,YAAA,CAAa,IAAK,CAAA,QAAA,GAAW,CAAC,CAAA,CAAA;AACnC,YAAU,OAAA,GAAA,IAAA,CAAA;AACV,YAAA,MAAA;AAAA,WACF;AAAA,UACA,KAAK,WAAW,EAAI,EAAA;AAClB,YAAK,IAAA,CAAA,YAAA,CAAa,IAAK,CAAA,QAAA,GAAW,CAAC,CAAA,CAAA;AACnC,YAAU,OAAA,GAAA,IAAA,CAAA;AACV,YAAA,MAAA;AAAA,WACF;AAAA,UACA,KAAK,WAAW,GAAK,EAAA;AACnB,YAAA,YAAA,CAAa,YAA2B,YAAY,CAAA,CAAA;AACpD,YAAA,MAAA;AAAA,WACF;AAAA,UACA,KAAK,UAAW,CAAA,KAAA,CAAA;AAAA,UAChB,KAAK,WAAW,KAAO,EAAA;AACrB,YAAU,OAAA,GAAA,IAAA,CAAA;AACT,YAAC,KAAA,CAAM,cAA8B,KAAM,EAAA,CAAA;AAC5C,YAAA,MAAA;AAAA,WACF;AAAA,SACF;AACA,QAAA,IAAI,OAAS,EAAA;AACX,UAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,UAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,SACxB;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACR,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH;AACF;;;;"}