UNPKG

one

Version:

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

109 lines (106 loc) • 3.17 kB
import { createContext, useContext, useMemo } from "react"; var ReservedRegionsContext = createContext(null); function useSnapshot(hook) { var snapshot = useContext(ReservedRegionsContext); if (!snapshot) { throw new Error(`One.${hook} must be used inside One.UI.ReservedRegions.Provider`); } return snapshot; } function useRegions(options) { var { regions } = useSnapshot("useReservedRegions"); var kind = options === null || options === void 0 ? void 0 : options.kind; var includeInactive = (options === null || options === void 0 ? void 0 : options.includeInactive) === true; return useMemo(function() { return regions.filter(function(region) { return (!kind || region.kind === kind) && (includeInactive || region.isActive); }); }, [ regions, kind, includeInactive ]); } function useReady() { return useSnapshot("useReservedRegionsReady").ready; } function useSegments() { var { bounds, ready, regions } = useSnapshot("useWindowSegments"); return useMemo(function() { if (!ready || !bounds || bounds.width <= 0 || bounds.height <= 0) return []; return segmentsFor(bounds, regions); }, [ bounds, ready, regions ]); } function useSpanning() { return useSegments().length > 1; } function segmentsFor(bounds, regions) { var edgeTolerance = .5; var segments = [{ x: 0, y: 0, ...bounds }]; var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0; try { var _loop = function() { var region = _step.value; if (region.kind !== "division" || !region.isActive) return "continue"; var { x, y, width, height } = region.frame; segments = segments.flatMap(function(segment) { var right = segment.x + segment.width; var bottom = segment.y + segment.height; if (y <= segment.y + edgeTolerance && y + height >= bottom - edgeTolerance && x > segment.x && x + width < right) { return [{ x: segment.x, y: segment.y, width: x - segment.x, height: segment.height }, { x: x + width, y: segment.y, width: right - x - width, height: segment.height }]; } if (x <= segment.x + edgeTolerance && x + width >= right - edgeTolerance && y > segment.y && y + height < bottom) { return [{ x: segment.x, y: segment.y, width: segment.width, height: y - segment.y }, { x: segment.x, y: y + height, width: segment.width, height: bottom - y - height }]; } return [segment]; }); }; for (var _iterator = regions[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) _loop(); } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return segments.sort(function(a, b) { return a.y - b.y || a.x - b.x; }); } export { ReservedRegionsContext, segmentsFor, useReady, useRegions, useSegments, useSpanning }; //# sourceMappingURL=reservedRegionsContext.native.js.map