one
Version:
One is a React framework for web, iOS, and Android apps.
139 lines (136 loc) • 4.27 kB
JavaScript
;
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;
});
}
//# sourceMappingURL=reservedRegionsContext.native.js.map