matrix-react-sdk
Version:
SDK for matrix.org using React
68 lines (65 loc) • 7.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ImageSize = void 0;
exports.suggestedSize = suggestedSize;
/*
Copyright 2024 New Vector Ltd.
Copyright 2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
// For Large the image gets drawn as big as possible.
// constraint by: timeline width, manual height overrides, SIZE_LARGE.h
const SIZE_LARGE = {
w: 800,
h: 600
};
// For Normal the image gets drawn to never exceed SIZE_NORMAL.w, SIZE_NORMAL.h
// constraint by: timeline width, manual height overrides
const SIZE_NORMAL_LANDSCAPE = {
w: 324,
h: 324
}; // for w > h
const SIZE_NORMAL_PORTRAIT = {
w: Math.ceil(324 * (9 / 16)),
h: 324
}; // for h > w
let ImageSize = exports.ImageSize = /*#__PURE__*/function (ImageSize) {
ImageSize["Normal"] = "normal";
ImageSize["Large"] = "large";
return ImageSize;
}({});
/**
* @param {ImageSize} size The user's image size preference
* @param {Dimensions} contentSize The natural dimensions of the content
* @param {number} maxHeight Overrides the default height limit
* @returns {Dimensions} The suggested maximum dimensions for the image
*/
function suggestedSize(size, contentSize, maxHeight) {
const aspectRatio = contentSize.w / contentSize.h;
const portrait = aspectRatio < 1;
const maxSize = size === ImageSize.Large ? SIZE_LARGE : portrait ? SIZE_NORMAL_PORTRAIT : SIZE_NORMAL_LANDSCAPE;
if (!contentSize.w || !contentSize.h) {
return maxSize;
}
const constrainedSize = {
w: Math.min(maxSize.w, contentSize.w),
h: maxHeight ? Math.min(maxSize.h, contentSize.h, maxHeight) : Math.min(maxSize.h, contentSize.h)
};
if (constrainedSize.h * aspectRatio < constrainedSize.w) {
// Height dictates width
return {
w: Math.floor(constrainedSize.h * aspectRatio),
h: constrainedSize.h
};
} else {
// Width dictates height
return {
w: constrainedSize.w,
h: Math.floor(constrainedSize.w / aspectRatio)
};
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTSVpFX0xBUkdFIiwidyIsImgiLCJTSVpFX05PUk1BTF9MQU5EU0NBUEUiLCJTSVpFX05PUk1BTF9QT1JUUkFJVCIsIk1hdGgiLCJjZWlsIiwiSW1hZ2VTaXplIiwiZXhwb3J0cyIsInN1Z2dlc3RlZFNpemUiLCJzaXplIiwiY29udGVudFNpemUiLCJtYXhIZWlnaHQiLCJhc3BlY3RSYXRpbyIsInBvcnRyYWl0IiwibWF4U2l6ZSIsIkxhcmdlIiwiY29uc3RyYWluZWRTaXplIiwibWluIiwiZmxvb3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2V0dGluZ3MvZW51bXMvSW1hZ2VTaXplLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIxIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbi8vIEZvciBMYXJnZSB0aGUgaW1hZ2UgZ2V0cyBkcmF3biBhcyBiaWcgYXMgcG9zc2libGUuXG4vLyBjb25zdHJhaW50IGJ5OiB0aW1lbGluZSB3aWR0aCwgbWFudWFsIGhlaWdodCBvdmVycmlkZXMsIFNJWkVfTEFSR0UuaFxuY29uc3QgU0laRV9MQVJHRSA9IHsgdzogODAwLCBoOiA2MDAgfTtcbi8vIEZvciBOb3JtYWwgdGhlIGltYWdlIGdldHMgZHJhd24gdG8gbmV2ZXIgZXhjZWVkIFNJWkVfTk9STUFMLncsIFNJWkVfTk9STUFMLmhcbi8vIGNvbnN0cmFpbnQgYnk6IHRpbWVsaW5lIHdpZHRoLCBtYW51YWwgaGVpZ2h0IG92ZXJyaWRlc1xuY29uc3QgU0laRV9OT1JNQUxfTEFORFNDQVBFID0geyB3OiAzMjQsIGg6IDMyNCB9OyAvLyBmb3IgdyA+IGhcbmNvbnN0IFNJWkVfTk9STUFMX1BPUlRSQUlUID0geyB3OiBNYXRoLmNlaWwoMzI0ICogKDkgLyAxNikpLCBoOiAzMjQgfTsgLy8gZm9yIGggPiB3XG5cbnR5cGUgRGltZW5zaW9ucyA9IHsgdz86IG51bWJlcjsgaD86IG51bWJlciB9O1xuXG5leHBvcnQgZW51bSBJbWFnZVNpemUge1xuICAgIE5vcm1hbCA9IFwibm9ybWFsXCIsXG4gICAgTGFyZ2UgPSBcImxhcmdlXCIsXG59XG5cbi8qKlxuICogQHBhcmFtIHtJbWFnZVNpemV9IHNpemUgVGhlIHVzZXIncyBpbWFnZSBzaXplIHByZWZlcmVuY2VcbiAqIEBwYXJhbSB7RGltZW5zaW9uc30gY29udGVudFNpemUgVGhlIG5hdHVyYWwgZGltZW5zaW9ucyBvZiB0aGUgY29udGVudFxuICogQHBhcmFtIHtudW1iZXJ9IG1heEhlaWdodCBPdmVycmlkZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGxpbWl0XG4gKiBAcmV0dXJucyB7RGltZW5zaW9uc30gVGhlIHN1Z2dlc3RlZCBtYXhpbXVtIGRpbWVuc2lvbnMgZm9yIHRoZSBpbWFnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VnZ2VzdGVkU2l6ZShzaXplOiBJbWFnZVNpemUsIGNvbnRlbnRTaXplOiBEaW1lbnNpb25zLCBtYXhIZWlnaHQ/OiBudW1iZXIpOiBSZXF1aXJlZDxEaW1lbnNpb25zPiB7XG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSBjb250ZW50U2l6ZS53ISAvIGNvbnRlbnRTaXplLmghO1xuICAgIGNvbnN0IHBvcnRyYWl0ID0gYXNwZWN0UmF0aW8gPCAxO1xuXG4gICAgY29uc3QgbWF4U2l6ZSA9IHNpemUgPT09IEltYWdlU2l6ZS5MYXJnZSA/IFNJWkVfTEFSR0UgOiBwb3J0cmFpdCA/IFNJWkVfTk9STUFMX1BPUlRSQUlUIDogU0laRV9OT1JNQUxfTEFORFNDQVBFO1xuICAgIGlmICghY29udGVudFNpemUudyB8fCAhY29udGVudFNpemUuaCkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25zdHJhaW5lZFNpemUgPSB7XG4gICAgICAgIHc6IE1hdGgubWluKG1heFNpemUudywgY29udGVudFNpemUudyksXG4gICAgICAgIGg6IG1heEhlaWdodCA/IE1hdGgubWluKG1heFNpemUuaCwgY29udGVudFNpemUuaCwgbWF4SGVpZ2h0KSA6IE1hdGgubWluKG1heFNpemUuaCwgY29udGVudFNpemUuaCksXG4gICAgfTtcblxuICAgIGlmIChjb25zdHJhaW5lZFNpemUuaCAqIGFzcGVjdFJhdGlvIDwgY29uc3RyYWluZWRTaXplLncpIHtcbiAgICAgICAgLy8gSGVpZ2h0IGRpY3RhdGVzIHdpZHRoXG4gICAgICAgIHJldHVybiB7IHc6IE1hdGguZmxvb3IoY29uc3RyYWluZWRTaXplLmggKiBhc3BlY3RSYXRpbyksIGg6IGNvbnN0cmFpbmVkU2l6ZS5oIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2lkdGggZGljdGF0ZXMgaGVpZ2h0XG4gICAgICAgIHJldHVybiB7IHc6IGNvbnN0cmFpbmVkU2l6ZS53LCBoOiBNYXRoLmZsb29yKGNvbnN0cmFpbmVkU2l6ZS53IC8gYXNwZWN0UmF0aW8pIH07XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU1BLFVBQVUsR0FBRztFQUFFQyxDQUFDLEVBQUUsR0FBRztFQUFFQyxDQUFDLEVBQUU7QUFBSSxDQUFDO0FBQ3JDO0FBQ0E7QUFDQSxNQUFNQyxxQkFBcUIsR0FBRztFQUFFRixDQUFDLEVBQUUsR0FBRztFQUFFQyxDQUFDLEVBQUU7QUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRCxNQUFNRSxvQkFBb0IsR0FBRztFQUFFSCxDQUFDLEVBQUVJLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7RUFBRUosQ0FBQyxFQUFFO0FBQUksQ0FBQyxDQUFDLENBQUM7QUFBQSxJQUkzREssU0FBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsMEJBQVRBLFNBQVM7RUFBVEEsU0FBUztFQUFUQSxTQUFTO0VBQUEsT0FBVEEsU0FBUztBQUFBO0FBS3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGFBQWFBLENBQUNDLElBQWUsRUFBRUMsV0FBdUIsRUFBRUMsU0FBa0IsRUFBd0I7RUFDOUcsTUFBTUMsV0FBVyxHQUFHRixXQUFXLENBQUNWLENBQUMsR0FBSVUsV0FBVyxDQUFDVCxDQUFFO0VBQ25ELE1BQU1ZLFFBQVEsR0FBR0QsV0FBVyxHQUFHLENBQUM7RUFFaEMsTUFBTUUsT0FBTyxHQUFHTCxJQUFJLEtBQUtILFNBQVMsQ0FBQ1MsS0FBSyxHQUFHaEIsVUFBVSxHQUFHYyxRQUFRLEdBQUdWLG9CQUFvQixHQUFHRCxxQkFBcUI7RUFDL0csSUFBSSxDQUFDUSxXQUFXLENBQUNWLENBQUMsSUFBSSxDQUFDVSxXQUFXLENBQUNULENBQUMsRUFBRTtJQUNsQyxPQUFPYSxPQUFPO0VBQ2xCO0VBRUEsTUFBTUUsZUFBZSxHQUFHO0lBQ3BCaEIsQ0FBQyxFQUFFSSxJQUFJLENBQUNhLEdBQUcsQ0FBQ0gsT0FBTyxDQUFDZCxDQUFDLEVBQUVVLFdBQVcsQ0FBQ1YsQ0FBQyxDQUFDO0lBQ3JDQyxDQUFDLEVBQUVVLFNBQVMsR0FBR1AsSUFBSSxDQUFDYSxHQUFHLENBQUNILE9BQU8sQ0FBQ2IsQ0FBQyxFQUFFUyxXQUFXLENBQUNULENBQUMsRUFBRVUsU0FBUyxDQUFDLEdBQUdQLElBQUksQ0FBQ2EsR0FBRyxDQUFDSCxPQUFPLENBQUNiLENBQUMsRUFBRVMsV0FBVyxDQUFDVCxDQUFDO0VBQ3BHLENBQUM7RUFFRCxJQUFJZSxlQUFlLENBQUNmLENBQUMsR0FBR1csV0FBVyxHQUFHSSxlQUFlLENBQUNoQixDQUFDLEVBQUU7SUFDckQ7SUFDQSxPQUFPO01BQUVBLENBQUMsRUFBRUksSUFBSSxDQUFDYyxLQUFLLENBQUNGLGVBQWUsQ0FBQ2YsQ0FBQyxHQUFHVyxXQUFXLENBQUM7TUFBRVgsQ0FBQyxFQUFFZSxlQUFlLENBQUNmO0lBQUUsQ0FBQztFQUNuRixDQUFDLE1BQU07SUFDSDtJQUNBLE9BQU87TUFBRUQsQ0FBQyxFQUFFZ0IsZUFBZSxDQUFDaEIsQ0FBQztNQUFFQyxDQUFDLEVBQUVHLElBQUksQ0FBQ2MsS0FBSyxDQUFDRixlQUFlLENBQUNoQixDQUFDLEdBQUdZLFdBQVc7SUFBRSxDQUFDO0VBQ25GO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=