@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
20 lines • 2.88 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
import { tuiIsHTMLElement } from './element-checks';
/**
* Calculates offset for an element relative to it's parent several levels above
*
* @param host parent element
* @param element
* @return object with offsetTop and offsetLeft number properties
*/
export function tuiGetElementOffset(host, element) {
ngDevMode && console.assert(host.contains(element), 'Host must contain element');
let { offsetTop, offsetLeft, offsetParent } = element;
while (tuiIsHTMLElement(offsetParent) && offsetParent !== host) {
offsetTop += offsetParent.offsetTop;
offsetLeft += offsetParent.offsetLeft;
offsetParent = offsetParent.offsetParent;
}
return { offsetTop, offsetLeft };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWVsZW1lbnQtb2Zmc2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3V0aWxzL2RvbS9nZXQtZWxlbWVudC1vZmZzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBRXhELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWxEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsSUFBYSxFQUNiLE9BQW9CO0lBRXBCLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztJQUVqRixJQUFJLEVBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUMsR0FBRyxPQUFPLENBQUM7SUFFcEQsT0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1FBQzVELFNBQVMsSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQ3BDLFVBQVUsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ3RDLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO0tBQzVDO0lBRUQsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUMsQ0FBQztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAdGFpZ2EtdWkvdHNjb25maWcvbmctZGV2LW1vZGVcIiAvPlxuXG5pbXBvcnQge3R1aUlzSFRNTEVsZW1lbnR9IGZyb20gJy4vZWxlbWVudC1jaGVja3MnO1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgb2Zmc2V0IGZvciBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0J3MgcGFyZW50IHNldmVyYWwgbGV2ZWxzIGFib3ZlXG4gKlxuICogQHBhcmFtIGhvc3QgcGFyZW50IGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtZW50XG4gKiBAcmV0dXJuIG9iamVjdCB3aXRoIG9mZnNldFRvcCBhbmQgb2Zmc2V0TGVmdCBudW1iZXIgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHVpR2V0RWxlbWVudE9mZnNldChcbiAgICBob3N0OiBFbGVtZW50LFxuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuKToge29mZnNldExlZnQ6IG51bWJlcjsgb2Zmc2V0VG9wOiBudW1iZXJ9IHtcbiAgICBuZ0Rldk1vZGUgJiYgY29uc29sZS5hc3NlcnQoaG9zdC5jb250YWlucyhlbGVtZW50KSwgJ0hvc3QgbXVzdCBjb250YWluIGVsZW1lbnQnKTtcblxuICAgIGxldCB7b2Zmc2V0VG9wLCBvZmZzZXRMZWZ0LCBvZmZzZXRQYXJlbnR9ID0gZWxlbWVudDtcblxuICAgIHdoaWxlICh0dWlJc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgb2Zmc2V0UGFyZW50ICE9PSBob3N0KSB7XG4gICAgICAgIG9mZnNldFRvcCArPSBvZmZzZXRQYXJlbnQub2Zmc2V0VG9wO1xuICAgICAgICBvZmZzZXRMZWZ0ICs9IG9mZnNldFBhcmVudC5vZmZzZXRMZWZ0O1xuICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiB7b2Zmc2V0VG9wLCBvZmZzZXRMZWZ0fTtcbn1cbiJdfQ==