UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

127 lines (125 loc) • 4.07 kB
function resolveSafeAreaEdgeModes(edges) { var all = [ "top", "right", "bottom", "left" ]; if (edges == null) { return { top: "additive", right: "additive", bottom: "additive", left: "additive" }; } if (Array.isArray(edges)) { return Object.fromEntries(all.map(function(edge) { return [edge, edges.includes(edge) ? "additive" : "off"]; })); } return Object.fromEntries(all.map(function(edge) { var mode = edges[edge]; return [edge, mode === "maximum" || mode === "additive" || mode === "off" ? mode : "off"]; })); } function flattenStyle(style, resolveStyle) { if (!style) return {}; if (resolveStyle) { var resolved = resolveStyle(style); if (!resolved || typeof resolved !== "object" || Array.isArray(resolved)) { return flattenStyle(resolved); } return resolved; } if (Array.isArray(style)) { return Object.assign({}, ...style.map(function(entry) { return flattenStyle(entry); })); } if (typeof style === "number") { throw new Error("buildSafeAreaInsetStyle cannot read a registered StyleSheet ID without resolveStyle; pass StyleSheet.flatten"); } return typeof style === "object" ? style : {}; } function readBaseInset(style, mode, edge) { var capitalized = edge.charAt(0).toUpperCase() + edge.slice(1); var exact = style[`${mode}${capitalized}`]; if (typeof exact === "number") return exact; var axis = edge === "top" || edge === "bottom" ? style[`${mode}Vertical`] : style[`${mode}Horizontal`]; if (typeof axis === "number") return axis; var base = style[mode]; return typeof base === "number" ? base : 0; } function buildSafeAreaInsetStyle(options) { var mode = options.mode === "margin" ? "margin" : "padding"; var flattened = flattenStyle(options.style, options.resolveStyle); var edgeModes = resolveSafeAreaEdgeModes(options.edges); var output = {}; for (var _i = 0, _iter = [ "top", "right", "bottom", "left" ]; _i < _iter.length; _i++) { var edge = _iter[_i]; var base = readBaseInset(flattened, mode, edge); var inset = options.insets[edge]; var edgeMode = edgeModes[edge]; var value = edgeMode === "off" ? base : edgeMode === "maximum" ? Math.max(base, inset) : base + inset; output[`${mode}${edge.charAt(0).toUpperCase() + edge.slice(1)}`] = value; } return output; } function keyboardSafeBottom(systemBottom, stableBottom) { return Math.min(systemBottom, stableBottom); } function resolveOverlappingInsets(options) { var { windowInsets, windowWidth, windowHeight, visibleLeft, visibleTop, viewWidth, viewHeight } = options; return { top: Math.max(windowInsets.top - visibleTop, 0), right: Math.max(Math.min(visibleLeft + viewWidth - windowWidth, 0) + windowInsets.right, 0), bottom: Math.max(Math.min(visibleTop + viewHeight - windowHeight, 0) + windowInsets.bottom, 0), left: Math.max(windowInsets.left - visibleLeft, 0) }; } function providerEventToMetrics(payload) { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { for (var _iterator = Object.entries(payload)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var [key, value] = _step.value; if (typeof value !== "number" || !Number.isFinite(value)) { throw new Error(`OneNativeSafeAreaProvider emitted non-finite ${key}`); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return { insets: { top: payload.insetTop, right: payload.insetRight, bottom: payload.insetBottom, left: payload.insetLeft }, frame: { x: payload.frameX, y: payload.frameY, width: payload.frameWidth, height: payload.frameHeight } }; } export { buildSafeAreaInsetStyle, keyboardSafeBottom, providerEventToMetrics, resolveOverlappingInsets, resolveSafeAreaEdgeModes }; //# sourceMappingURL=insets.native.js.map