完全跑通1.0版本

This commit is contained in:
2026-05-26 12:56:03 +08:00
parent 2ece5174a7
commit 93c714a93b
11557 changed files with 1648225 additions and 36 deletions

View File

@@ -0,0 +1,10 @@
import { RendererNode } from "vue";
//#region ../../packages/components/menu/src/utils/menu-bar.d.ts
declare class Menu {
domNode: RendererNode;
constructor(domNode: RendererNode, namespace: string);
init(namespace: string): void;
}
//#endregion
export { Menu as default };

View File

@@ -0,0 +1,18 @@
import MenuItem from "./menu-item.mjs";
//#region ../../packages/components/menu/src/utils/menu-bar.ts
var Menu = class {
constructor(domNode, namespace) {
this.domNode = domNode;
this.init(namespace);
}
init(namespace) {
const menuChildren = this.domNode.childNodes;
Array.from(menuChildren).forEach((child) => {
if (child.nodeType === 1) new MenuItem(child, namespace);
});
}
};
//#endregion
export { Menu as default };
//# sourceMappingURL=menu-bar.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"menu-bar.mjs","names":[],"sources":["../../../../../../../packages/components/menu/src/utils/menu-bar.ts"],"sourcesContent":["import MenuItem from './menu-item'\n\nimport type { RendererNode } from 'vue'\n\nclass Menu {\n constructor(\n public domNode: RendererNode,\n namespace: string\n ) {\n this.init(namespace)\n }\n init(namespace: string) {\n const menuChildren = this.domNode.childNodes\n Array.from<Node>(menuChildren).forEach((child) => {\n if (child.nodeType === 1) {\n new MenuItem(child as HTMLElement, namespace)\n }\n })\n }\n}\n\nexport default Menu\n"],"mappings":";;AAIA,IAAM,OAAN,MAAW;CACT,YACE,SACA,WACA;EAFO,KAAA,UAAA;EAGP,KAAK,KAAK,UAAU;;CAEtB,KAAK,WAAmB;EACtB,MAAM,eAAe,KAAK,QAAQ;EAClC,MAAM,KAAW,aAAa,CAAC,SAAS,UAAU;GAChD,IAAI,MAAM,aAAa,GACrB,IAAI,SAAS,OAAsB,UAAU;IAE/C"}

View File

@@ -0,0 +1,12 @@
import SubMenu from "./submenu.js";
//#region ../../packages/components/menu/src/utils/menu-item.d.ts
declare class MenuItem {
domNode: HTMLElement;
submenu: SubMenu | null;
constructor(domNode: HTMLElement, namespace: string);
init(namespace: string): void;
addListeners(): void;
}
//#endregion
export { MenuItem as default };

View File

@@ -0,0 +1,50 @@
import { triggerEvent } from "../../../../utils/dom/aria.mjs";
import { EVENT_CODE } from "../../../../constants/aria.mjs";
import { getEventCode } from "../../../../utils/dom/event.mjs";
import SubMenu from "./submenu.mjs";
//#region ../../packages/components/menu/src/utils/menu-item.ts
var MenuItem = class {
constructor(domNode, namespace) {
this.domNode = domNode;
this.submenu = null;
this.init(namespace);
}
init(namespace) {
this.domNode.setAttribute("tabindex", "0");
const menuChild = this.domNode.querySelector(`.${namespace}-menu`);
if (menuChild) this.submenu = new SubMenu(this, menuChild);
this.addListeners();
}
addListeners() {
this.domNode.addEventListener("keydown", (event) => {
const code = getEventCode(event);
let prevDef = false;
switch (code) {
case EVENT_CODE.down:
triggerEvent(event.currentTarget, "mouseenter");
this.submenu?.gotoSubIndex(0);
prevDef = true;
break;
case EVENT_CODE.up:
triggerEvent(event.currentTarget, "mouseenter");
this.submenu?.gotoSubIndex(this.submenu.subMenuItems.length - 1);
prevDef = true;
break;
case EVENT_CODE.tab:
triggerEvent(event.currentTarget, "mouseleave");
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
case EVENT_CODE.space:
prevDef = true;
event.currentTarget.click();
break;
}
if (prevDef) event.preventDefault();
});
}
};
//#endregion
export { MenuItem as default };
//# sourceMappingURL=menu-item.mjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"menu-item.mjs","names":[],"sources":["../../../../../../../packages/components/menu/src/utils/menu-item.ts"],"sourcesContent":["import { getEventCode, triggerEvent } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport SubMenu from './submenu'\n\nclass MenuItem {\n public submenu: SubMenu | null\n constructor(\n public domNode: HTMLElement,\n namespace: string\n ) {\n this.submenu = null\n this.init(namespace)\n }\n\n init(namespace: string): void {\n this.domNode.setAttribute('tabindex', '0')\n const menuChild = this.domNode.querySelector(`.${namespace}-menu`)\n if (menuChild) {\n this.submenu = new SubMenu(this, menuChild)\n }\n this.addListeners()\n }\n\n addListeners() {\n this.domNode.addEventListener('keydown', (event: KeyboardEvent) => {\n const code = getEventCode(event)\n let prevDef = false\n\n switch (code) {\n case EVENT_CODE.down: {\n triggerEvent(event.currentTarget as HTMLElement, 'mouseenter')\n this.submenu?.gotoSubIndex(0)\n prevDef = true\n break\n }\n case EVENT_CODE.up: {\n triggerEvent(event.currentTarget as HTMLElement, 'mouseenter')\n this.submenu?.gotoSubIndex(this.submenu.subMenuItems.length - 1)\n prevDef = true\n break\n }\n case EVENT_CODE.tab: {\n triggerEvent(event.currentTarget as HTMLElement, '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 }\n })\n }\n}\n\nexport default MenuItem\n"],"mappings":";;;;;AAIA,IAAM,WAAN,MAAe;CAEb,YACE,SACA,WACA;EAFO,KAAA,UAAA;EAGP,KAAK,UAAU;EACf,KAAK,KAAK,UAAU;;CAGtB,KAAK,WAAyB;EAC5B,KAAK,QAAQ,aAAa,YAAY,IAAI;EAC1C,MAAM,YAAY,KAAK,QAAQ,cAAc,IAAI,UAAU,OAAO;EAClE,IAAI,WACF,KAAK,UAAU,IAAI,QAAQ,MAAM,UAAU;EAE7C,KAAK,cAAc;;CAGrB,eAAe;EACb,KAAK,QAAQ,iBAAiB,YAAY,UAAyB;GACjE,MAAM,OAAO,aAAa,MAAM;GAChC,IAAI,UAAU;GAEd,QAAQ,MAAR;IACE,KAAK,WAAW;KACd,aAAa,MAAM,eAA8B,aAAa;KAC9D,KAAK,SAAS,aAAa,EAAE;KAC7B,UAAU;KACV;IAEF,KAAK,WAAW;KACd,aAAa,MAAM,eAA8B,aAAa;KAC9D,KAAK,SAAS,aAAa,KAAK,QAAQ,aAAa,SAAS,EAAE;KAChE,UAAU;KACV;IAEF,KAAK,WAAW;KACd,aAAa,MAAM,eAA8B,aAAa;KAC9D;IAEF,KAAK,WAAW;IAChB,KAAK,WAAW;IAChB,KAAK,WAAW;KACd,UAAU;KACT,MAAO,cAA8B,OAAO;KAC7C;;GAGJ,IAAI,SACF,MAAM,gBAAgB;IAExB"}

View File

@@ -0,0 +1,14 @@
import MenuItem from "./menu-item.js";
//#region ../../packages/components/menu/src/utils/submenu.d.ts
declare class SubMenu {
parent: MenuItem;
domNode: ParentNode;
subMenuItems: NodeListOf<HTMLLIElement>;
subIndex: number;
constructor(parent: MenuItem, domNode: ParentNode);
gotoSubIndex(idx: number): void;
addListeners(): void;
}
//#endregion
export { SubMenu as default };

View File

@@ -0,0 +1,56 @@
import { triggerEvent } from "../../../../utils/dom/aria.mjs";
import { EVENT_CODE } from "../../../../constants/aria.mjs";
import { getEventCode } from "../../../../utils/dom/event.mjs";
//#region ../../packages/components/menu/src/utils/submenu.ts
var SubMenu = class {
constructor(parent, domNode) {
this.parent = parent;
this.domNode = domNode;
this.subIndex = 0;
this.subMenuItems = this.domNode.querySelectorAll("li");
this.addListeners();
}
gotoSubIndex(idx) {
if (idx === this.subMenuItems.length) idx = 0;
else if (idx < 0) idx = this.subMenuItems.length - 1;
this.subMenuItems[idx].focus();
this.subIndex = idx;
}
addListeners() {
const parentNode = this.parent.domNode;
this.subMenuItems.forEach((el) => {
el.addEventListener("keydown", (event) => {
const code = getEventCode(event);
let prevDef = false;
switch (code) {
case EVENT_CODE.down:
this.gotoSubIndex(this.subIndex + 1);
prevDef = true;
break;
case EVENT_CODE.up:
this.gotoSubIndex(this.subIndex - 1);
prevDef = true;
break;
case EVENT_CODE.tab:
triggerEvent(parentNode, "mouseleave");
break;
case EVENT_CODE.enter:
case EVENT_CODE.numpadEnter:
case EVENT_CODE.space:
prevDef = true;
event.currentTarget.click();
break;
}
if (prevDef) {
event.preventDefault();
event.stopPropagation();
}
return false;
});
});
}
};
//#endregion
export { SubMenu as default };
//# sourceMappingURL=submenu.mjs.map

View File

@@ -0,0 +1 @@
{"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"}