UNPKG

one

Version:

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

137 lines (135 loc) • 4.21 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var reservedRegionsContext_exports = {}; __export(reservedRegionsContext_exports, { ReservedRegionsContext: () => ReservedRegionsContext, segmentsFor: () => segmentsFor, useReady: () => useReady, useRegions: () => useRegions, useSegments: () => useSegments, useSpanning: () => useSpanning }); module.exports = __toCommonJS(reservedRegionsContext_exports); var import_react = require("react"); var ReservedRegionsContext = (0, import_react.createContext)(null); function useSnapshot(hook) { var snapshot = (0, import_react.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 (0, import_react.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 (0, import_react.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; }); }