UNPKG

advanced-cropper

Version:

The core of the advanced cropper libraries family

136 lines (133 loc) 5.99 kB
import { __assign } from 'tslib'; import { isFunction, emptyCoordinates, isNumber, isBoolean } from '../utils/index.js'; import { createAspectRatio, rotateSize, moveToPositionRestrictions, getBrokenRatio, ratio, isConsistentSize, isConsistentPosition } from './utils.js'; import { calculateAreaSizeRestrictions, calculateSizeRestrictions } from './sizeRestrictions.js'; function isInitializedState(state) { return Boolean(state && state.visibleArea && state.coordinates); } function getAreaSizeRestrictions(state, settings) { return calculateAreaSizeRestrictions(state, settings); } function getAreaPositionRestrictions(state, settings) { return isFunction(settings.areaPositionRestrictions) ? settings.areaPositionRestrictions(state, settings) : settings.areaPositionRestrictions; } function getSizeRestrictions(state, settings) { return calculateSizeRestrictions(state, settings); } function getPositionRestrictions(state, settings) { return isFunction(settings.positionRestrictions) ? settings.positionRestrictions(state, settings) : settings.positionRestrictions; } function getCoefficient(state) { return state.visibleArea ? state.visibleArea.width / state.boundary.width : 0; } function getStencilCoordinates(state) { if (isInitializedState(state)) { var _a = state.coordinates, width = _a.width, height = _a.height, left = _a.left, top_1 = _a.top; var coefficient = getCoefficient(state); return { width: width / coefficient, height: height / coefficient, left: (left - state.visibleArea.left) / coefficient, top: (top_1 - state.visibleArea.top) / coefficient, }; } else { return emptyCoordinates(); } } function getAspectRatio(state, settings) { return createAspectRatio(isFunction(settings.aspectRatio) ? settings.aspectRatio(state, settings) : settings.aspectRatio); } function getDefaultCoordinates(state, settings) { return isFunction(settings.defaultCoordinates) ? settings.defaultCoordinates(state, settings) : settings.defaultCoordinates; } function getDefaultVisibleArea(state, settings) { return isFunction(settings.defaultVisibleArea) ? settings.defaultVisibleArea(state, settings) : settings.defaultVisibleArea; } function getDefaultTransforms(state, settings) { var transforms = __assign(__assign({}, state.transforms), { flip: __assign({}, state.transforms.flip) }); if (settings.defaultTransforms) { var defaultTransforms = isFunction(settings.defaultTransforms) ? settings.defaultTransforms(state, settings) : settings.defaultTransforms; if (isNumber(defaultTransforms.rotate)) { transforms.rotate = defaultTransforms.rotate; } if (defaultTransforms.flip) { if (isBoolean(defaultTransforms.flip.horizontal)) { transforms.flip.horizontal = defaultTransforms.flip.horizontal; } if (isBoolean(defaultTransforms.flip.vertical)) { transforms.flip.vertical = defaultTransforms.flip.vertical; } } } return transforms; } function getTransformedImageSize(state) { if (state.imageSize && state.imageSize.width && state.imageSize.height) { return rotateSize(state.imageSize, state.transforms.rotate); } else { return { width: 0, height: 0, }; } } function getMinimumSize(state) { // The magic number is the approximation of the handler size // Temporary solution that should be improved in the future return state.coordinates ? Math.min(state.coordinates.width, state.coordinates.height, 20 * getCoefficient(state)) : 1; } function getRoundedCoordinates(state, settings) { if (isInitializedState(state)) { var sizeRestrictions = getSizeRestrictions(state, settings); var positionRestrictions = getPositionRestrictions(state, settings); var roundCoordinates = { width: Math.round(state.coordinates.width), height: Math.round(state.coordinates.height), left: Math.round(state.coordinates.left), top: Math.round(state.coordinates.top), }; if (roundCoordinates.width > sizeRestrictions.maxWidth) { roundCoordinates.width = Math.floor(state.coordinates.width); } else if (roundCoordinates.width < sizeRestrictions.minWidth) { roundCoordinates.width = Math.ceil(state.coordinates.width); } if (roundCoordinates.height > sizeRestrictions.maxHeight) { roundCoordinates.height = Math.floor(state.coordinates.height); } else if (roundCoordinates.height < sizeRestrictions.minHeight) { roundCoordinates.height = Math.ceil(state.coordinates.height); } return moveToPositionRestrictions(roundCoordinates, positionRestrictions); } else { return null; } } function isConsistentState(state, settings) { if (isInitializedState(state)) { return (!getBrokenRatio(ratio(state.coordinates), getAspectRatio(state, settings)) && isConsistentSize(state.visibleArea, getAreaSizeRestrictions(state, settings)) && isConsistentSize(state.coordinates, getSizeRestrictions(state, settings)) && isConsistentPosition(state.visibleArea, getAreaPositionRestrictions(state, settings)) && isConsistentPosition(state.coordinates, getPositionRestrictions(state, settings))); } else { return true; } } export { getAreaPositionRestrictions, getAreaSizeRestrictions, getAspectRatio, getCoefficient, getDefaultCoordinates, getDefaultTransforms, getDefaultVisibleArea, getMinimumSize, getPositionRestrictions, getRoundedCoordinates, getSizeRestrictions, getStencilCoordinates, getTransformedImageSize, isConsistentState, isInitializedState };