import { Arr, type Optional } from '@ephox/katamari'; import { Compare, SelectorFilter, type SugarElement, Visibility } from '@ephox/sugar'; import * as ArrPinpoint from './ArrPinpoint'; const locateVisible = (container: SugarElement, current: SugarElement, selector: string): Optional>> => { const predicate = (x: SugarElement) => Compare.eq(x, current); const candidates = SelectorFilter.descendants(container, selector); const visible = Arr.filter(candidates, Visibility.isVisible); return ArrPinpoint.locate(visible, predicate); }; const findIndex = (elements: Array>, target: SugarElement): Optional => Arr.findIndex(elements, (elem) => Compare.eq(target, elem)); export { locateVisible, findIndex };