@launchmenu/applet-window-manager
Version:
An applet to manage LMs window
134 lines • 11.6 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCoordinateSetting = void 0;
const react_1 = __importDefault(require("react"));
const core_1 = require("@launchmenu/core");
const model_react_1 = require("model-react");
/**
* Creates a setting to control window positions
* @param param0
*/
function createCoordinateSetting({ name, init, allowNegative, actionBindings = () => [], min, max, }) {
const castMin = min;
const castMax = max;
const normalizedMin = castMin &&
("x" in castMin
? [castMin.x, castMin.y]
: [castMin.width, castMin.height]);
const normalizedMax = castMax &&
("x" in castMax
? [castMax.x, castMax.y]
: [castMax.width, castMax.height]);
return core_1.createFieldMenuItem({
init: init,
data: (field) => ({
name,
icon: "window",
valueView: (react_1.default.createElement(model_react_1.Loader, null, h => {
const coordinates = field.get(h);
if ("x" in coordinates) {
const { x, y } = coordinates;
return `${x}, ${y}`;
}
else {
const { width, height } = coordinates;
return `${width}, ${height}`;
}
})),
searchPattern: core_1.settingPatternMatcher,
resetable: true,
resetUndoable: true,
actionBindings: [
...actionBindings(field),
core_1.promptInputExecuteHandler.createBinding({
field,
undoable: true,
serialize: (coordinate) => "x" in coordinate
? `${coordinate.x}, ${coordinate.y}`
: `${coordinate.width}, ${coordinate.height}`,
deserialize: (text) => {
var _a, _b, _c, _d;
const numbers = text.split(",").map(v => {
const number = Number(v);
if (isNaN(number))
return 0;
return number !== null && number !== void 0 ? number : 0;
});
if ("x" in init)
return { x: (_a = numbers[0]) !== null && _a !== void 0 ? _a : 0, y: (_b = numbers[1]) !== null && _b !== void 0 ? _b : 0 };
else
return { width: (_c = numbers[0]) !== null && _c !== void 0 ? _c : 0, height: (_d = numbers[1]) !== null && _d !== void 0 ? _d : 0 };
},
checkValidity: text => checkValidity(text, allowNegative, normalizedMin, normalizedMax),
}),
],
}),
});
}
exports.createCoordinateSetting = createCoordinateSetting;
/**
* Checks whether a given piece of text is a valid coordinate input
* @param text The text to be checked
* @param allowNegative Whether to allow negative values
* @param min The minimum values
* @param max The maximum values
* @returns An input error if present
*/
const checkValidity = (text, allowNegative, min, max) => {
const match = text.match(allowNegative
? /([^\s\d\-]*)(\s*)(-?\d*)(\s*)([^\s,]*)(\s*)(,?)(\s*)([^\s\d\-]*)(\s*)(-?\d*)(\s*)(.*)/
: /([^\s\d]*)(\s*)(\d*)(\s*)([^\s,]*)(\s*)(,?)(\s*)([^\s\d]*)(\s*)(\d*)(\s*)(.*)/);
if (match) {
const extraRanges = match.slice(1).reduce(({ ranges, index }, value, i) => {
const end = index + value.length;
if (i % 4 == 0 && value.length > 0)
return {
index: end,
ranges: [...ranges, { start: index, end }],
};
return { ranges, index: end };
}, { ranges: [], index: 0 }).ranges;
if (extraRanges.length > 0)
return {
message: "Invalid characters",
ranges: extraRanges,
};
const missingRanges = match.slice(1).reduce(({ ranges, index }, value, i) => {
const end = index + value.length;
if (i % 4 == 2 && value.length == 0)
return {
index: end,
ranges: [...ranges, { start: index, end }],
};
return { ranges, index: end };
}, { ranges: [], index: 0 }).ranges;
if (missingRanges.length > 0)
return {
message: "Invalid format, should be 'x, y'",
ranges: missingRanges,
};
const v1 = Number(match[3]);
const v2 = Number(match[11]);
if (min && (v1 < min[0] || v2 < min[1]))
return {
message: `Values should be at least: ${min[0]}, ${min[1]}`,
ranges: [],
};
if (max && (v1 < max[0] || v2 < max[1]))
return {
message: `Values should be at most: ${max[0]}, ${max[1]}`,
ranges: [],
};
}
else {
// I don't think this case is reachable, but just in case
return {
message: "Invalid format, should be 'x, y'",
ranges: [{ start: 0, end: text.length }],
};
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQ29vcmRpbmF0ZVNldHRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY3JlYXRlQ29vcmRpbmF0ZVNldHRpbmcudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQiwyQ0FTMEI7QUFDMUIsNkNBQW1DO0FBRW5DOzs7R0FHRztBQUNILFNBQWdCLHVCQUF1QixDQUE4QixFQUNqRSxJQUFJLEVBQ0osSUFBSSxFQUNKLGFBQWEsRUFDYixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUN6QixHQUFHLEVBQ0gsR0FBRyxHQVFOO0lBQ0csTUFBTSxPQUFPLEdBQUcsR0FBd0IsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxHQUF3QixDQUFDO0lBQ3pDLE1BQU0sYUFBYSxHQUNmLE9BQU87UUFDUCxDQUFDLEdBQUcsSUFBSSxPQUFPO1lBQ1gsQ0FBQyxDQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFXO1lBQ25DLENBQUMsQ0FBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBVyxDQUFDLENBQUM7SUFDdEQsTUFBTSxhQUFhLEdBQ2YsT0FBTztRQUNQLENBQUMsR0FBRyxJQUFJLE9BQU87WUFDWCxDQUFDLENBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQVc7WUFDbkMsQ0FBQyxDQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFXLENBQUMsQ0FBQztJQUV0RCxPQUFPLDBCQUFtQixDQUFPO1FBQzdCLElBQUksRUFBRSxJQUFXO1FBQ2pCLElBQUksRUFBRSxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekIsSUFBSTtZQUNKLElBQUksRUFBRSxRQUFRO1lBQ2QsU0FBUyxFQUFFLENBQ1AsOEJBQUMsb0JBQU0sUUFDRixDQUFDLENBQUMsRUFBRTtnQkFDRCxNQUFNLFdBQVcsR0FBc0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxHQUFHLElBQUksV0FBVyxFQUFFO29CQUNwQixNQUFNLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBQyxHQUFHLFdBQVcsQ0FBQztvQkFDM0IsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDdkI7cUJBQU07b0JBQ0gsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxXQUFXLENBQUM7b0JBQ3BDLE9BQU8sR0FBRyxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7aUJBQ2hDO1lBQ0wsQ0FBQyxDQUNJLENBQ1o7WUFDRCxhQUFhLEVBQUUsNEJBQXFCO1lBQ3BDLFNBQVMsRUFBRSxJQUFJO1lBQ2YsYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFO2dCQUNaLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQztnQkFDeEIsZ0NBQXlCLENBQUMsYUFBYSxDQUFDO29CQUNwQyxLQUFLO29CQUNMLFFBQVEsRUFBRSxJQUFJO29CQUNkLFNBQVMsRUFBRSxDQUFDLFVBQTZCLEVBQUUsRUFBRSxDQUN6QyxHQUFHLElBQUksVUFBVTt3QkFDYixDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUU7d0JBQ3BDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLE1BQU0sRUFBRTtvQkFDckQsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFxQixFQUFFOzt3QkFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDO2dDQUFFLE9BQU8sQ0FBQyxDQUFDOzRCQUM1QixPQUFPLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLENBQUMsQ0FBQzt3QkFDdkIsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxHQUFHLElBQUksSUFBSTs0QkFBRSxPQUFPLEVBQUMsQ0FBQyxRQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUNBQUksQ0FBQyxFQUFFLENBQUMsUUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLG1DQUFJLENBQUMsRUFBQyxDQUFDOzs0QkFDNUQsT0FBTyxFQUFDLEtBQUssUUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLG1DQUFJLENBQUMsRUFBRSxNQUFNLFFBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxtQ0FBSSxDQUFDLEVBQUMsQ0FBQztvQkFDbEUsQ0FBQztvQkFDRCxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEIsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQztpQkFDdkUsQ0FBQzthQUNMO1NBQ0osQ0FBQztLQUNMLENBQUMsQ0FBQztBQUNQLENBQUM7QUExRUQsMERBMEVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQ2xCLElBQVksRUFDWixhQUF1QixFQUN2QixHQUErQixFQUMvQixHQUErQixFQUNSLEVBQUU7SUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDcEIsYUFBYTtRQUNULENBQUMsQ0FBQyx1RkFBdUY7UUFDekYsQ0FBQyxDQUFDLCtFQUErRSxDQUN4RixDQUFDO0lBQ0YsSUFBSSxLQUFLLEVBQUU7UUFDUCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDckMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQzlCLE9BQU87b0JBQ0gsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDO2lCQUMzQyxDQUFDO1lBQ04sT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFDaEMsQ0FBQyxFQUNELEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQ3pCLENBQUMsTUFBTSxDQUFDO1FBQ1QsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDdEIsT0FBTztnQkFDSCxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixNQUFNLEVBQUUsV0FBVzthQUN0QixDQUFDO1FBRU4sTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQ3ZDLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUMvQixPQUFPO29CQUNILEtBQUssRUFBRSxHQUFHO29CQUNWLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUMsQ0FBQztpQkFDM0MsQ0FBQztZQUNOLE9BQU8sRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBQyxDQUFDO1FBQ2hDLENBQUMsRUFDRCxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBQyxDQUN6QixDQUFDLE1BQU0sQ0FBQztRQUNULElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3hCLE9BQU87Z0JBQ0gsT0FBTyxFQUFFLGtDQUFrQztnQkFDM0MsTUFBTSxFQUFFLGFBQWE7YUFDeEIsQ0FBQztRQUVOLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0IsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsT0FBTztnQkFDSCxPQUFPLEVBQUUsOEJBQThCLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFELE1BQU0sRUFBRSxFQUFFO2FBQ2IsQ0FBQztRQUNOLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE9BQU87Z0JBQ0gsT0FBTyxFQUFFLDZCQUE2QixHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6RCxNQUFNLEVBQUUsRUFBRTthQUNiLENBQUM7S0FDVDtTQUFNO1FBQ0gseURBQXlEO1FBQ3pELE9BQU87WUFDSCxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLE1BQU0sRUFBRSxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDO1NBQ3pDLENBQUM7S0FDTDtBQUNMLENBQUMsQ0FBQyJ9
;