advanced-cropper
Version:
The core of the advanced cropper libraries family
59 lines (54 loc) • 3.25 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var tslib = require('tslib');
var utils = require('../service/utils.js');
var sizeRestrictions = require('../service/sizeRestrictions.js');
var helpers = require('../service/helpers.js');
var copyState = require('./copyState.js');
require('../types/index.js');
require('./setCoordinates.js');
var approximateSize = require('../service/approximateSize.js');
function reconcileState(state, settings) {
if (helpers.isInitializedState(state)) {
var result = copyState.copyState(state);
var aspectRatio = helpers.getAspectRatio(state, settings);
var sizeRestrictions$1 = helpers.getSizeRestrictions(state, settings);
var areaSizeRestrictions = helpers.getAreaSizeRestrictions(state, settings);
// Fit the size of coordinates to existing size restrictions and visible area
var brokenRatio = utils.getBrokenRatio(utils.ratio(state.coordinates), aspectRatio);
var desiredSize = brokenRatio
? {
height: state.coordinates.height,
width: state.coordinates.height * brokenRatio,
}
: state.coordinates;
result.coordinates = tslib.__assign(tslib.__assign({}, result.coordinates), approximateSize.approximateSize({
width: desiredSize.width,
height: desiredSize.height,
aspectRatio: aspectRatio,
sizeRestrictions: sizeRestrictions.mergeSizeRestrictions(areaSizeRestrictions, sizeRestrictions$1),
}));
// Return the coordinates to the previous center
result.coordinates = utils.applyMove(result.coordinates, utils.diff(utils.getCenter(state.coordinates), utils.getCenter(result.coordinates)));
var scaleModifier = Math.max(result.coordinates.width / result.visibleArea.width, result.coordinates.height / result.visibleArea.height, 1);
// Fit the visible area to its size restrictions and boundary aspect ratio:
result.visibleArea = tslib.__assign(tslib.__assign({}, state.visibleArea), approximateSize.approximateSize({
width: state.visibleArea.width * scaleModifier,
height: state.visibleArea.height * scaleModifier,
aspectRatio: {
minimum: utils.ratio(result.boundary),
maximum: utils.ratio(result.boundary),
},
sizeRestrictions: areaSizeRestrictions,
}));
// Return the visible area to previous center
result.visibleArea = utils.applyMove(result.visibleArea, utils.diff(utils.getCenter(state.visibleArea), utils.getCenter(result.visibleArea)));
// Fit the visible area to positions restrictions
result.visibleArea = utils.moveToPositionRestrictions(result.visibleArea, helpers.getAreaPositionRestrictions(result, settings));
// Fit the coordinates to position restrictions and visible area
result.coordinates = utils.moveToPositionRestrictions(result.coordinates, utils.mergePositionRestrictions(utils.coordinatesToPositionRestrictions(result.visibleArea), helpers.getPositionRestrictions(result, settings)));
return result;
}
return state;
}
exports.reconcileState = reconcileState;