UNPKG

@clr/angular

Version:

Angular components for Clarity

34 lines 4.53 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ export class Linkers { /** * Links a set of focusable items to a parent along one direction */ static linkParent(items, parent, direction) { items.forEach(item => (item[direction] = parent)); } /** * Double-links a set of focusable items vertically, possibly looping */ static linkVertical(items, loop = true) { items.forEach((item, index) => { if (index > 0) { item.up = items[index - 1]; } if (index < items.length - 1) { item.down = items[index + 1]; } }); if (loop && items.length > 1) { items[0].up = items[items.length - 1]; items[items.length - 1].down = items[0]; } } } // Right now I only need the two linkers above, but we can easily add more linkers. A couple examples: // export function linkHorizontal(items: FocusableItem[], loop = true); // export function linkTable(items: FocusableItem[][]); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3V0aWxzL2ZvY3VzL2ZvY3VzYWJsZS1pdGVtL2xpbmtlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQU9ILE1BQU0sT0FBTyxPQUFPO0lBQ2xCOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUFzQixFQUN0QixNQUFpRCxFQUNqRCxTQUE0QjtRQUU1QixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQXNCLEVBQUUsSUFBSSxHQUFHLElBQUk7UUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM1QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzVCO1lBQ0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM5QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0QyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsc0dBQXNHO0FBQ3RHLHVFQUF1RTtBQUN2RSx1REFBdUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjMgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXJyb3dLZXlEaXJlY3Rpb24gfSBmcm9tICcuLi9hcnJvdy1rZXktZGlyZWN0aW9uLmVudW0nO1xuaW1wb3J0IHsgRm9jdXNhYmxlSXRlbSB9IGZyb20gJy4vZm9jdXNhYmxlLWl0ZW0nO1xuXG5leHBvcnQgY2xhc3MgTGlua2VycyB7XG4gIC8qKlxuICAgKiBMaW5rcyBhIHNldCBvZiBmb2N1c2FibGUgaXRlbXMgdG8gYSBwYXJlbnQgYWxvbmcgb25lIGRpcmVjdGlvblxuICAgKi9cbiAgc3RhdGljIGxpbmtQYXJlbnQoXG4gICAgaXRlbXM6IEZvY3VzYWJsZUl0ZW1bXSxcbiAgICBwYXJlbnQ6IEZvY3VzYWJsZUl0ZW0gfCBPYnNlcnZhYmxlPEZvY3VzYWJsZUl0ZW0+LFxuICAgIGRpcmVjdGlvbjogQXJyb3dLZXlEaXJlY3Rpb25cbiAgKSB7XG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IChpdGVtW2RpcmVjdGlvbl0gPSBwYXJlbnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3VibGUtbGlua3MgYSBzZXQgb2YgZm9jdXNhYmxlIGl0ZW1zIHZlcnRpY2FsbHksIHBvc3NpYmx5IGxvb3BpbmdcbiAgICovXG4gIHN0YXRpYyBsaW5rVmVydGljYWwoaXRlbXM6IEZvY3VzYWJsZUl0ZW1bXSwgbG9vcCA9IHRydWUpIHtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBpdGVtLnVwID0gaXRlbXNbaW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgaXRlbS5kb3duID0gaXRlbXNbaW5kZXggKyAxXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAobG9vcCAmJiBpdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICBpdGVtc1swXS51cCA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0uZG93biA9IGl0ZW1zWzBdO1xuICAgIH1cbiAgfVxufVxuXG4vLyBSaWdodCBub3cgSSBvbmx5IG5lZWQgdGhlIHR3byBsaW5rZXJzIGFib3ZlLCBidXQgd2UgY2FuIGVhc2lseSBhZGQgbW9yZSBsaW5rZXJzLiBBIGNvdXBsZSBleGFtcGxlczpcbi8vIGV4cG9ydCBmdW5jdGlvbiBsaW5rSG9yaXpvbnRhbChpdGVtczogRm9jdXNhYmxlSXRlbVtdLCBsb29wID0gdHJ1ZSk7XG4vLyBleHBvcnQgZnVuY3Rpb24gbGlua1RhYmxlKGl0ZW1zOiBGb2N1c2FibGVJdGVtW11bXSk7XG4iXX0=