one
Version:
One is a React framework for web, iOS, and Android apps.
59 lines (57 loc) • 2.35 kB
JavaScript
const gridAlignments = [
"topLeading",
"top",
"topTrailing",
"leading",
"center",
"trailing",
"bottomLeading",
"bottom",
"bottomTrailing"
];
const gridHorizontalAlignments = [
"leading",
"center",
"trailing"
];
const gridVerticalAlignments = [
"top",
"center",
"bottom",
"firstTextBaseline",
"lastTextBaseline"
];
function nonnegative(value, label, required = false) {
if (value === void 0 && !required) return;
if (typeof value !== "number" || !Number.isFinite(value) || value < 0) throw new Error(`${label} must be a non-negative finite number`);
}
function gridSpacing(value, owner) {
if (value !== void 0 && (typeof value !== "number" || !Number.isFinite(value))) throw new Error(`${owner} spacing must be a finite number`);
return value === void 0 ? "null" : String(value);
}
function gridItems(items, owner) {
if (!Array.isArray(items)) throw new Error(`${owner} items must be an array of GridItem values`);
return JSON.stringify(items.map((item, index) => {
const label = `${owner} item ${index}`;
if (!item || typeof item !== "object") throw new Error(`${label} must be a GridItem`);
if (item.alignment !== void 0 && !gridAlignments.includes(item.alignment)) throw new Error(`${label} alignment must be a SwiftUI Alignment`);
if (item.spacing !== void 0 && (typeof item.spacing !== "number" || !Number.isFinite(item.spacing))) throw new Error(`${label} spacing must be a finite number`);
if (item.size === "fixed") {
nonnegative(item.value, `${label} value`, true);
} else if (item.size === "flexible" || item.size === "adaptive") {
nonnegative(item.minimum, `${label} minimum`, item.size === "adaptive");
nonnegative(item.maximum, `${label} maximum`);
if (item.maximum !== void 0 && item.maximum < (item.minimum ?? 10)) throw new Error(`${label} maximum must be at least minimum`);
} else throw new Error(`${label} size must be fixed, flexible, or adaptive`);
return {
size: item.size,
value: item.size === "fixed" ? item.value : -1,
minimum: item.size === "fixed" ? -1 : item.minimum ?? -1,
maximum: item.size === "fixed" ? -1 : item.maximum ?? -1,
spacing: item.spacing ?? null,
alignment: item.alignment ?? ""
};
}));
}
export { gridAlignments, gridHorizontalAlignments, gridItems, gridSpacing, gridVerticalAlignments };
//# sourceMappingURL=gridTypes.mjs.map