element-plus
Version:
A Component Library for Vue 3
1 lines • 7.02 kB
Source Map (JSON)
{"version":3,"file":"roving-focus-item.mjs","sources":["../../../../../../packages/components/roving-focus-group/src/roving-focus-item.vue"],"sourcesContent":["<template>\n <el-roving-focus-collection-item\n :id=\"id\"\n :focusable=\"focusable\"\n :active=\"active\"\n >\n <slot />\n </el-roving-focus-collection-item>\n</template>\n\n<script lang=\"ts\">\nimport {\n computed,\n defineComponent,\n inject,\n nextTick,\n provide,\n ref,\n unref,\n} from 'vue'\nimport { useId } from '@element-plus/hooks'\nimport { composeEventHandlers } from '@element-plus/utils'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport {\n ElCollectionItem as ElRovingFocusCollectionItem,\n ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n} from './roving-focus-group'\nimport {\n ROVING_FOCUS_GROUP_INJECTION_KEY,\n ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY,\n} from './tokens'\nimport { focusFirst, getFocusIntent, reorderArray } from './utils'\n\nexport default defineComponent({\n components: {\n ElRovingFocusCollectionItem,\n },\n props: {\n focusable: {\n type: Boolean,\n default: true,\n },\n active: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['mousedown', 'focus', 'keydown'],\n setup(props, { emit }) {\n const { currentTabbedId, loop, onItemFocus, onItemShiftTab } = inject(\n ROVING_FOCUS_GROUP_INJECTION_KEY,\n undefined\n )!\n\n const { getItems } = inject(\n ROVING_FOCUS_COLLECTION_INJECTION_KEY,\n undefined\n )!\n\n const id = useId()\n const rovingFocusGroupItemRef = ref<HTMLElement | null>(null)\n\n const handleMousedown = composeEventHandlers(\n (e: Event) => {\n emit('mousedown', e)\n },\n (e) => {\n if (!props.focusable) {\n e.preventDefault()\n } else {\n onItemFocus(unref(id))\n }\n }\n )\n\n const handleFocus = composeEventHandlers(\n (e: Event) => {\n emit('focus', e)\n },\n () => {\n onItemFocus(unref(id))\n }\n )\n\n const handleKeydown = composeEventHandlers(\n (e: Event) => {\n emit('keydown', e)\n },\n (e) => {\n const { key, shiftKey, target, currentTarget } = e as KeyboardEvent\n if (key === EVENT_CODE.tab && shiftKey) {\n onItemShiftTab()\n return\n }\n if (target !== currentTarget) return\n const focusIntent = getFocusIntent(e as KeyboardEvent)\n\n if (focusIntent) {\n e.preventDefault()\n const items = getItems<typeof props>().filter(\n (item) => item.focusable\n )\n\n let elements = items.map((item) => item.ref!)\n\n switch (focusIntent) {\n case 'last': {\n elements.reverse()\n break\n }\n case 'prev':\n case 'next': {\n if (focusIntent === 'prev') {\n elements.reverse()\n }\n const currentIdx = elements.indexOf(currentTarget as HTMLElement)\n elements = loop.value\n ? reorderArray(elements, currentIdx + 1)\n : elements.slice(currentIdx + 1)\n break\n }\n default: {\n break\n }\n }\n\n nextTick(() => {\n focusFirst(elements)\n })\n }\n }\n )\n\n const isCurrentTab = computed(() => currentTabbedId.value === unref(id))\n\n provide(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, {\n rovingFocusGroupItemRef,\n tabIndex: computed(() => (unref(isCurrentTab) ? 0 : -1)),\n handleMousedown,\n handleFocus,\n handleKeydown,\n })\n\n return {\n id,\n handleKeydown,\n handleFocus,\n handleMousedown,\n }\n },\n})\n</script>\n"],"names":["ElRovingFocusCollectionItem","ROVING_FOCUS_COLLECTION_INJECTION_KEY","_createBlock","_renderSlot"],"mappings":"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"}