UNPKG

advanced-cropper

Version:

The core of the advanced cropper libraries family

59 lines (54 loc) 3.25 kB
'use strict'; 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;