UNPKG

vuestic-ui

Version:
1 lines 3.57 kB
{"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;"}