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
};