element-plus
Version:
A Component Library for Vue 3
1 lines • 3.35 kB
Source Map (JSON)
{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/components/roving-focus-group/src/utils.ts"],"sourcesContent":["import { EVENT_CODE } from '@element-plus/constants'\nimport { getEventCode } from '@element-plus/utils'\n\nimport type { HTMLAttributes } from 'vue'\n\ntype Orientation = HTMLAttributes['aria-orientation']\ntype Direction = 'ltr' | 'rtl'\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next'\n\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n ArrowLeft: 'prev',\n ArrowUp: 'prev',\n ArrowRight: 'next',\n ArrowDown: 'next',\n PageUp: 'first',\n Home: 'first',\n PageDown: 'last',\n End: 'last',\n}\n\nconst getDirectionAwareKey = (key: string, dir?: Direction) => {\n if (dir !== 'rtl') return key\n\n switch (key) {\n case EVENT_CODE.right:\n return EVENT_CODE.left\n case EVENT_CODE.left:\n return EVENT_CODE.right\n default:\n return key\n }\n}\n\nexport const getFocusIntent = (\n event: KeyboardEvent,\n orientation?: Orientation,\n dir?: Direction\n) => {\n const code = getEventCode(event)\n const key = getDirectionAwareKey(code, dir)\n if (\n orientation === 'vertical' &&\n [EVENT_CODE.left, EVENT_CODE.right].includes(key)\n )\n return undefined\n if (\n orientation === 'horizontal' &&\n [EVENT_CODE.up, EVENT_CODE.down].includes(key)\n )\n return undefined\n return MAP_KEY_TO_FOCUS_INTENT[key]\n}\n\nexport const reorderArray = <T>(array: T[], atIdx: number) => {\n return array.map((_, idx) => array[(idx + atIdx) % array.length])\n}\n\nexport const focusFirst = (elements: HTMLElement[]) => {\n const { activeElement: prevActive } = document\n\n for (const element of elements) {\n if (element === prevActive) return\n element.focus()\n if (prevActive !== document.activeElement) return\n }\n}\n"],"names":[],"mappings":";;;AASA,MAAM,uBAAuD,GAAA;AAAA,EAC3D,SAAW,EAAA,MAAA;AAAA,EACX,OAAS,EAAA,MAAA;AAAA,EACT,UAAY,EAAA,MAAA;AAAA,EACZ,SAAW,EAAA,MAAA;AAAA,EACX,MAAQ,EAAA,OAAA;AAAA,EACR,IAAM,EAAA,OAAA;AAAA,EACN,QAAU,EAAA,MAAA;AAAA,EACV,GAAK,EAAA,MAAA;AACP,CAAA,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAAC,GAAA,EAAa,GAAoB,KAAA;AAC7D,EAAA,IAAI,GAAQ,KAAA,KAAA;AAAO,IAAO,OAAA,GAAA,CAAA;AAE1B,EAAQ,QAAA,GAAA;AAAA,IAAA,KACD,UAAW,CAAA,KAAA;AACd,MAAA,OAAO,UAAW,CAAA,IAAA,CAAA;AAAA,IAAA,KACf,UAAW,CAAA,IAAA;AACd,MAAA,OAAO,UAAW,CAAA,KAAA,CAAA;AAAA,IAAA;AAElB,MAAO,OAAA,GAAA,CAAA;AAAA,GAAA;AAEb,CAAA,CAAA;AAEO,MAAM,cAAiB,GAAA,CAC5B,KACA,EAAA,WAAA,EACA,GACG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,aAAa,KAAK,CAAA,CAAA;AAC/B,EAAM,MAAA,GAAA,GAAM,oBAAqB,CAAA,IAAA,EAAM,GAAG,CAAA,CAAA;AAC1C,EACE,IAAA,WAAA,KAAgB,cAChB,CAAC,UAAA,CAAW,MAAM,UAAW,CAAA,KAAK,CAAE,CAAA,QAAA,CAAS,GAAG,CAAA;AAEhD,IAAO,OAAA,KAAA,CAAA,CAAA;AACT,EACE,IAAA,WAAA,KAAgB,gBAChB,CAAC,UAAA,CAAW,IAAI,UAAW,CAAA,IAAI,CAAE,CAAA,QAAA,CAAS,GAAG,CAAA;AAE7C,IAAO,OAAA,KAAA,CAAA,CAAA;AACT,EAAA,OAAO,uBAAwB,CAAA,GAAA,CAAA,CAAA;AACjC,EAAA;AAEa,MAAA,YAAA,GAAe,CAAI,KAAA,EAAY,KAAkB,KAAA;AAC5D,EAAO,OAAA,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,QAAQ,KAAO,CAAA,CAAA,GAAA,GAAM,KAAS,IAAA,KAAA,CAAM,MAAO,CAAA,CAAA,CAAA;AAClE,EAAA;AAEa,MAAA,UAAA,GAAa,CAAC,QAA4B,KAAA;AACrD,EAAM,MAAA,EAAE,aAAe,EAAA,UAAA,EAAe,GAAA,QAAA,CAAA;AAEtC,EAAA,KAAA,MAAW,WAAW,QAAU,EAAA;AAC9B,IAAA,IAAI,OAAY,KAAA,UAAA;AAAY,MAAA,OAAA;AAC5B,IAAA,OAAA,CAAQ,KAAM,EAAA,CAAA;AACd,IAAA,IAAI,eAAe,QAAS,CAAA,aAAA;AAAe,MAAA,OAAA;AAAA,GAC7C;AACF;;;;"}