import { Arr, type Optional } from '@ephox/katamari'; export type ArrCycle = (values: A[], index: number, predicate: (a: A) => boolean) => Optional; const cyclePrev = (values: A[], index: number, predicate: (a: A) => boolean): Optional => { const before = Arr.reverse(values.slice(0, index)); const after = Arr.reverse(values.slice(index + 1)); return Arr.find(before.concat(after), predicate); }; const tryPrev = (values: A[], index: number, predicate: (a: A) => boolean): Optional => { const before = Arr.reverse(values.slice(0, index)); return Arr.find(before, predicate); }; const cycleNext = (values: A[], index: number, predicate: (a: A) => boolean): Optional => { const before = values.slice(0, index); const after = values.slice(index + 1); return Arr.find(after.concat(before), predicate); }; const tryNext = (values: A[], index: number, predicate: (a: A) => boolean): Optional => { const after = values.slice(index + 1); return Arr.find(after, predicate); }; export { cyclePrev, cycleNext, tryPrev, tryNext };