{"version":3,"file":"utils.mjs","sources":["../../../../../../packages/components/roving-focus-group/src/utils.ts"],"sourcesContent":["import { EVENT_CODE } from '@sgui-plus/utils/aria'\r\nimport type { HTMLAttributes } from 'vue'\r\n\r\ntype Orientation = HTMLAttributes['aria-orientation']\r\ntype Direction = 'ltr' | 'rtl'\r\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next'\r\n\r\nconst MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\r\n  ArrowLeft: 'prev',\r\n  ArrowUp: 'prev',\r\n  ArrowRight: 'next',\r\n  ArrowDown: 'next',\r\n  PageUp: 'first',\r\n  Home: 'first',\r\n  PageDown: 'last',\r\n  End: 'last',\r\n}\r\n\r\nconst getDirectionAwareKey = (key: string, dir?: Direction) => {\r\n  if (dir !== 'rtl') return key\r\n\r\n  switch (key) {\r\n    case EVENT_CODE.right:\r\n      return EVENT_CODE.left\r\n    case EVENT_CODE.left:\r\n      return EVENT_CODE.right\r\n    default:\r\n      return key\r\n  }\r\n}\r\n\r\nexport const getFocusIntent = (\r\n  event: KeyboardEvent,\r\n  orientation?: Orientation,\r\n  dir?: Direction\r\n) => {\r\n  const key = getDirectionAwareKey(event.key, dir)\r\n  if (\r\n    orientation === 'vertical' &&\r\n    [EVENT_CODE.left, EVENT_CODE.right].includes(key)\r\n  )\r\n    return undefined\r\n  if (\r\n    orientation === 'horizontal' &&\r\n    [EVENT_CODE.up, EVENT_CODE.down].includes(key)\r\n  )\r\n    return undefined\r\n  return MAP_KEY_TO_FOCUS_INTENT[key]\r\n}\r\n\r\nexport const reorderArray = <T>(array: T[], atIdx: number) => {\r\n  return array.map((_, idx) => array[(idx + atIdx) % array.length])\r\n}\r\n\r\nexport const focusFirst = (elements: HTMLElement[]) => {\r\n  const { activeElement: prevActive } = document\r\n\r\n  for (const element of elements) {\r\n    if (element === prevActive) return\r\n    element.focus()\r\n    if (prevActive !== document.activeElement) return\r\n  }\r\n}\r\n"],"names":[],"mappings":";;AACA,MAAM,uBAAuB,GAAG;AAChC,EAAE,SAAS,EAAE,MAAM;AACnB,EAAE,OAAO,EAAE,MAAM;AACjB,EAAE,UAAU,EAAE,MAAM;AACpB,EAAE,SAAS,EAAE,MAAM;AACnB,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,IAAI,EAAE,OAAO;AACf,EAAE,QAAQ,EAAE,MAAM;AAClB,EAAE,GAAG,EAAE,MAAM;AACb,CAAC,CAAC;AACF,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK;AAC3C,EAAE,IAAI,GAAG,KAAK,KAAK;AACnB,IAAI,OAAO,GAAG,CAAC;AACf,EAAE,QAAQ,GAAG;AACb,IAAI,KAAK,UAAU,CAAC,KAAK;AACzB,MAAM,OAAO,UAAU,CAAC,IAAI,CAAC;AAC7B,IAAI,KAAK,UAAU,CAAC,IAAI;AACxB,MAAM,OAAO,UAAU,CAAC,KAAK,CAAC;AAC9B,IAAI;AACJ,MAAM,OAAO,GAAG,CAAC;AACjB,GAAG;AACH,CAAC,CAAC;AACU,MAAC,cAAc,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK;AAC3D,EAAE,MAAM,GAAG,GAAG,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACnD,EAAE,IAAI,WAAW,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrF,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,EAAE,IAAI,WAAW,KAAK,YAAY,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACpF,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,EAAE,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC;AACtC,EAAE;AACU,MAAC,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK;AAC9C,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,EAAE;AACU,MAAC,UAAU,GAAG,CAAC,QAAQ,KAAK;AACxC,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC;AACjD,EAAE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AAClC,IAAI,IAAI,OAAO,KAAK,UAAU;AAC9B,MAAM,OAAO;AACb,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;AACpB,IAAI,IAAI,UAAU,KAAK,QAAQ,CAAC,aAAa;AAC7C,MAAM,OAAO;AACb,GAAG;AACH;;;;"}