You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 lines
12 KiB

{"ast":null,"code":"import { inject, computed, ref } from 'vue';\nimport { useNamespace } from '../../../hooks/use-namespace/index.mjs';\nimport { useId } from '../../../hooks/use-id/index.mjs';\nimport { addClass } from '../../../utils/dom/style.mjs';\nimport { EVENT_CODE } from '../../../constants/aria.mjs';\nconst useDropdown = () => {\n const elDropdown = inject(\"elDropdown\", {});\n const _elDropdownSize = computed(() => elDropdown == null ? void 0 : elDropdown.dropdownSize);\n return {\n elDropdown,\n _elDropdownSize\n };\n};\nconst initDropdownDomEvent = (dropdownChildren, triggerElm, _instance) => {\n const ns = useNamespace(\"dropdown\");\n const menuItems = ref(null);\n const menuItemsArray = ref(null);\n const dropdownElm = ref(null);\n const listId = useId();\n dropdownElm.value = dropdownChildren == null ? void 0 : dropdownChildren.subTree.el;\n function removeTabindex() {\n var _a;\n triggerElm.setAttribute(\"tabindex\", \"-1\");\n (_a = menuItemsArray.value) == null ? void 0 : _a.forEach(item => item.setAttribute(\"tabindex\", \"-1\"));\n }\n function resetTabindex(ele) {\n removeTabindex();\n ele == null ? void 0 : ele.setAttribute(\"tabindex\", \"0\");\n }\n function handleTriggerKeyDown(ev) {\n const code = ev.code;\n if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {\n removeTabindex();\n resetTabindex(menuItems.value[0]);\n menuItems.value[0].focus();\n ev.preventDefault();\n ev.stopPropagation();\n } else if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code)) {\n _instance.handleClick();\n } else if ([EVENT_CODE.tab, EVENT_CODE.esc].includes(code)) {\n _instance.hide();\n }\n }\n function handleItemKeyDown(ev) {\n const code = ev.code;\n const target = ev.target;\n const currentIndex = menuItemsArray.value.indexOf(target);\n const max = menuItemsArray.value.length - 1;\n let nextIndex;\n if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {\n if (code === EVENT_CODE.up) {\n nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n } else {\n nextIndex = currentIndex < max ? currentIndex + 1 : max;\n }\n removeTabindex();\n resetTabindex(menuItems.value[nextIndex]);\n menuItems.value[nextIndex].focus();\n ev.preventDefault();\n ev.stopPropagation();\n } else if (code === EVENT_CODE.enter) {\n triggerElmFocus();\n target.click();\n if (_instance.props.hideOnClick) {\n _instance.hide();\n }\n } else if ([EVENT_CODE.tab, EVENT_CODE.esc].includes(code)) {\n _instance.hide();\n triggerElmFocus();\n }\n }\n function initAria() {\n dropdownElm.value.setAttribute(\"id\", listId.value);\n triggerElm.setAttribute(\"aria-haspopup\", \"list\");\n triggerElm.setAttribute(\"aria-controls\", listId.value);\n if (!_instance.props.splitButton) {\n triggerElm.setAttribute(\"role\", \"button\");\n triggerElm.setAttribute(\"tabindex\", _instance.props.tabindex);\n addClass(triggerElm, ns.b(\"selfdefine\"));\n }\n }\n function initEvent() {\n var _a;\n triggerElm == null ? void 0 : triggerElm.addEventListener(\"keydown\", handleTriggerKeyDown);\n (_a = dropdownElm.value) == null ? void 0 : _a.addEventListener(\"keydown\", handleItemKeyDown, true);\n }\n function initDomOperation() {\n menuItems.value = dropdownElm.value.querySelectorAll(\"[tabindex='-1']\");\n menuItemsArray.value = Array.from(menuItems.value);\n initEvent();\n initAria();\n }\n function triggerElmFocus() {\n triggerElm.focus();\n }\n initDomOperation();\n};\nexport { initDropdownDomEvent, useDropdown };","map":{"version":3,"names":["useDropdown","elDropdown","inject","_elDropdownSize","computed","dropdownSize","initDropdownDomEvent","dropdownChildren","triggerElm","_instance","ns","useNamespace","menuItems","ref","menuItemsArray","dropdownElm","listId","useId","value","subTree","el","removeTabindex","_a","setAttribute","forEach","item","resetTabindex","ele","handleTriggerKeyDown","ev","code","EVENT_CODE","up","down","includes","focus","preventDefault","stopPropagation","enter","numpadEnter","handleClick","tab","esc","hide","handleItemKeyDown","target","currentIndex","indexOf","max","length","nextIndex","triggerElmFocus","click","props","hideOnClick","initAria","splitButton","tabindex","addClass","b","initEvent","addEventListener","initDomOperation","querySelectorAll","Array","from"],"sources":["../../../../../../packages/components/dropdown/src/useDropdown.ts"],"sourcesContent":["// @ts-nocheck\nimport { computed, inject, ref } from 'vue'\nimport { addClass } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { useId, useNamespace } from '@element-plus/hooks'\nimport type { Nullable } from '@element-plus/utils'\nimport type { IElDropdownInstance } from './dropdown'\n\nexport const useDropdown = () => {\n const elDropdown = inject<IElDropdownInstance>('elDropdown', {})\n const _elDropdownSize = computed(() => elDropdown?.dropdownSize)\n\n return {\n elDropdown,\n _elDropdownSize,\n }\n}\n\nexport const initDropdownDomEvent = (\n dropdownChildren,\n triggerElm,\n _instance\n) => {\n const ns = useNamespace('dropdown')\n const menuItems = ref<Nullable<HTMLButtonElement[]>>(null)\n const menuItemsArray = ref<Nullable<HTMLElement[]>>(null)\n const dropdownElm = ref<Nullable<HTMLElement>>(null)\n const listId = useId()\n dropdownElm.value = dropdownChildren?.subTree.el\n\n function removeTabindex() {\n triggerElm.setAttribute('tabindex', '-1')\n menuItemsArray.value?.forEach((item) => item.setAttribute('tabindex', '-1'))\n }\n\n function resetTabindex(ele) {\n removeTabindex()\n ele?.setAttribute('tabindex', '0')\n }\n\n function handleTriggerKeyDown(ev: KeyboardEvent) {\n const code = ev.code\n if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {\n removeTabindex()\n resetTabindex(menuItems.value[0])\n menuItems.value[0].focus()\n ev.preventDefault()\n ev.stopPropagation()\n } else if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(code)) {\n _instance.handleClick()\n } else if ([EVENT_CODE.tab, EVENT_CODE.esc].includes(code)) {\n _instance.hide()\n }\n }\n\n function handleItemKeyDown(ev) {\n const code = ev.code\n const target = ev.target\n const currentIndex = menuItemsArray.value.indexOf(target)\n const max = menuItemsArray.value.length - 1\n let nextIndex\n if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) {\n if (code === EVENT_CODE.up) {\n nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0\n } else {\n nextIndex = currentIndex < max ? currentIndex + 1 : max\n }\n removeTabindex()\n resetTabindex(menuItems.value[nextIndex])\n menuItems.value[nextIndex].focus()\n ev.preventDefault()\n ev.stopPropagation()\n } else if (code === EVENT_CODE.enter) {\n triggerElmFocus()\n target.click()\n if (_instance.props.hideOnClick) {\n _instance.hide()\n }\n } else if ([EVENT_CODE.tab, EVENT_CODE.esc].includes(code)) {\n _instance.hide()\n triggerElmFocus()\n }\n }\n\n function initAria() {\n dropdownElm.value.setAttribute('id', listId.value)\n triggerElm.setAttribute('aria-haspopup', 'list')\n triggerElm.setAttribute('aria-controls', listId.value)\n if (!_instance.props.splitButton) {\n triggerElm.setAttribute('role', 'button')\n triggerElm.setAttribute('tabindex', _instance.props.tabindex)\n addClass(triggerElm, ns.b('selfdefine'))\n }\n }\n\n function initEvent() {\n triggerElm?.addEventListener('keydown', handleTriggerKeyDown)\n dropdownElm.value?.addEventListener('keydown', handleItemKeyDown, true)\n }\n\n function initDomOperation() {\n menuItems.value = dropdownElm.value.querySelectorAll(\n \"[tabindex='-1']\"\n ) as unknown as HTMLButtonElement[]\n menuItemsArray.value = Array.from(menuItems.value)\n\n initEvent()\n initAria()\n }\n\n function triggerElmFocus() {\n triggerElm.focus()\n }\n\n initDomOperation()\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}