{"version":3,"file":"grid-keyboard-navigation.mjs","sources":["../../../../../../src/components/va-date-picker/hooks/grid-keyboard-navigation.ts"],"sourcesContent":["import { ref, Ref, isRef, unref } from 'vue'\n\nfunction isUndefined<T> (t: T | undefined): t is undefined {\n  return t === undefined\n}\n\nexport const useGridKeyboardNavigation = (\n  {\n    rowSize,\n    start,\n    end,\n    onSelected,\n    onFocusIndex,\n  }: {\n    rowSize: number,\n    start?: Ref<number> | number,\n    end?: Ref<number> | number,\n    onFocusIndex?: Ref<number> | number,\n    onSelected?: (selectedValue: number) => any | null,\n  },\n) => {\n  const focusedCellIndex = ref(-1)\n\n  let previouslyClicked = false\n  const onMousedown = () => { previouslyClicked = true }\n\n  const onFocus = () => {\n    if (previouslyClicked) { return }\n    previouslyClicked = false\n\n    const index = onFocusIndex === undefined ? unref(start) || 0 : unref(onFocusIndex)\n\n    focusedCellIndex.value = index\n  }\n\n  const onBlur = () => {\n    previouslyClicked = false\n\n    focusedCellIndex.value = -1\n  }\n\n  const onKeydown = (e: KeyboardEvent) => {\n    if (['ArrowRight', 'ArrowLeft', 'ArrowDown', 'ArrowUp', 'Enter', 'Space'].includes(e.key)) {\n      // Prevent default for arrow keys and enter. Do not prevent default for tab! :)\n      e.preventDefault()\n      e.stopPropagation()\n    }\n\n    if (e.key === 'Enter' || e.key === 'Space') {\n      if (onSelected === undefined) { return }\n\n      onSelected(focusedCellIndex.value)\n      return\n    }\n\n    if (e.key === 'ArrowRight') {\n      focusedCellIndex.value += 1\n    }\n    if (e.key === 'ArrowLeft') {\n      focusedCellIndex.value -= 1\n    }\n    if (e.key === 'ArrowDown') {\n      focusedCellIndex.value += rowSize\n    }\n    if (e.key === 'ArrowUp') {\n      focusedCellIndex.value -= rowSize\n    }\n\n    if (!isUndefined(start) && focusedCellIndex.value < unref(start)) {\n      focusedCellIndex.value = unref(start)\n    }\n    if (!isUndefined(end) && focusedCellIndex.value > unref(end) - 1) {\n      focusedCellIndex.value = unref(end) - 1\n    }\n  }\n\n  const containerAttributes = {\n    onFocus, onKeydown, onBlur, onMousedown, tabindex: 0,\n  }\n\n  return {\n    focusedCellIndex, containerAttributes,\n  }\n}\n"],"names":[],"mappings":";AAEA,SAAS,YAAgB,GAAkC;AACzD,SAAO,MAAM;AACf;AAEO,MAAM,4BAA4B,CACvC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAOG;AACG,QAAA,mBAAmB,IAAI,EAAE;AAE/B,MAAI,oBAAoB;AACxB,QAAM,cAAc,MAAM;AAAsB,wBAAA;AAAA,EAAA;AAEhD,QAAM,UAAU,MAAM;AACpB,QAAI,mBAAmB;AAAE;AAAA,IAAO;AACZ,wBAAA;AAEd,UAAA,QAAQ,iBAAiB,SAAY,MAAM,KAAK,KAAK,IAAI,MAAM,YAAY;AAEjF,qBAAiB,QAAQ;AAAA,EAAA;AAG3B,QAAM,SAAS,MAAM;AACC,wBAAA;AAEpB,qBAAiB,QAAQ;AAAA,EAAA;AAGrB,QAAA,YAAY,CAAC,MAAqB;AAClC,QAAA,CAAC,cAAc,aAAa,aAAa,WAAW,SAAS,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG;AAEzF,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAAA,IACpB;AAEA,QAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,SAAS;AAC1C,UAAI,eAAe,QAAW;AAAE;AAAA,MAAO;AAEvC,iBAAW,iBAAiB,KAAK;AACjC;AAAA,IACF;AAEI,QAAA,EAAE,QAAQ,cAAc;AAC1B,uBAAiB,SAAS;AAAA,IAC5B;AACI,QAAA,EAAE,QAAQ,aAAa;AACzB,uBAAiB,SAAS;AAAA,IAC5B;AACI,QAAA,EAAE,QAAQ,aAAa;AACzB,uBAAiB,SAAS;AAAA,IAC5B;AACI,QAAA,EAAE,QAAQ,WAAW;AACvB,uBAAiB,SAAS;AAAA,IAC5B;AAEI,QAAA,CAAC,YAAY,KAAK,KAAK,iBAAiB,QAAQ,MAAM,KAAK,GAAG;AAC/C,uBAAA,QAAQ,MAAM,KAAK;AAAA,IACtC;AACI,QAAA,CAAC,YAAY,GAAG,KAAK,iBAAiB,QAAQ,MAAM,GAAG,IAAI,GAAG;AAC/C,uBAAA,QAAQ,MAAM,GAAG,IAAI;AAAA,IACxC;AAAA,EAAA;AAGF,QAAM,sBAAsB;AAAA,IAC1B;AAAA,IAAS;AAAA,IAAW;AAAA,IAAQ;AAAA,IAAa,UAAU;AAAA,EAAA;AAG9C,SAAA;AAAA,IACL;AAAA,IAAkB;AAAA,EAAA;AAEtB;"}