{ "version": 3, "sources": [ "aspectRatio.ts" ], "names": [ "extend", "addEdges", "Modification", "makeModifier", "aspectRatio", "start", "arg", "state", "rect", "edges", "originalEdges", "pageCoords", "coords", "ratio", "options", "equalDelta", "modifiers", "width", "height", "startCoords", "startRect", "linkedEdges", "top", "left", "bottom", "right", "xIsPrimaryAxis", "edgeSign", "negativeSecondaryEdge", "length", "subModification", "interaction", "copyFrom", "modification", "prepareStates", "startAll", "set", "initialCoords", "aspectMethod", "setEqualDelta", "setRatio", "correctedRect", "x", "y", "result", "setAll", "prevCoords", "prevRect", "delta", "changed", "Math", "abs", "eventProps", "defaults", "enabled", "newHeight", "newWidth" ], "mappings": "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", "sourcesContent": [ "/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This module forces elements to be resized with a specified dx/dy ratio.\n *\n * ```js\n * interact(target).resizable({\n * modifiers: [\n * interact.modifiers.snapSize({\n * targets: [ interact.snappers.grid({ x: 20, y: 20 }) ],\n * }),\n * interact.aspectRatio({ ratio: 'preserve' }),\n * ],\n * });\n * ```\n */\n\nimport { Point, Rect, EdgeOptions } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport Modification from './Modification'\nimport { Modifier, ModifierModule, ModifierState, makeModifier } from './base'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState\n\nconst aspectRatio: ModifierModule = {\n start (arg) {\n const { state, rect, edges: originalEdges, pageCoords: coords } = arg\n let { ratio } = state.options\n const { equalDelta, modifiers } = state.options\n\n if (ratio === 'preserve') {\n ratio = rect.width / rect.height\n }\n\n state.startCoords = extend({}, coords)\n state.startRect = extend({}, rect)\n state.ratio = ratio\n state.equalDelta = equalDelta\n\n const linkedEdges = state.linkedEdges = {\n top : originalEdges.top || (originalEdges.left && !originalEdges.bottom),\n left : originalEdges.left || (originalEdges.top && !originalEdges.right),\n bottom: originalEdges.bottom || (originalEdges.right && !originalEdges.top),\n right : originalEdges.right || (originalEdges.bottom && !originalEdges.left),\n }\n\n state.xIsPrimaryAxis = !!(originalEdges.left || originalEdges.right)\n\n if (state.equalDelta) {\n state.edgeSign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1) as 1 | -1\n }\n else {\n const negativeSecondaryEdge = state.xIsPrimaryAxis ? linkedEdges.top : linkedEdges.left\n state.edgeSign = negativeSecondaryEdge ? -1 : 1\n }\n\n extend(arg.edges, linkedEdges)\n\n if (!modifiers || !modifiers.length) { return }\n\n const subModification = new Modification(arg.interaction)\n\n subModification.copyFrom(arg.interaction.modification)\n subModification.prepareStates(modifiers)\n\n state.subModification = subModification\n subModification.startAll({ ...arg })\n },\n\n set (arg) {\n const { state, rect, coords } = arg\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) { return null }\n\n const correctedRect = extend({}, rect)\n\n addEdges(state.linkedEdges, correctedRect, { x: coords.x - initialCoords.x, y: coords.y - initialCoords.y })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: state.linkedEdges,\n pageCoords: coords,\n prevCoords: coords,\n prevRect: correctedRect,\n })\n\n const { delta } = result\n\n if (result.changed) {\n const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y)\n\n // do aspect modification again with critical edge axis as primary\n aspectMethod(state, xIsCriticalAxis, result.coords, result.rect)\n extend(coords, result.coords)\n }\n\n return result.eventProps\n },\n\n defaults: {\n ratio: 'preserve',\n equalDelta: false,\n modifiers: [],\n enabled: false,\n },\n}\n\nfunction setEqualDelta ({ startCoords, edgeSign }: AspectRatioState, xIsPrimaryAxis: boolean, coords: Point) {\n if (xIsPrimaryAxis) {\n coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign\n }\n else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign\n }\n}\n\nfunction setRatio ({ startRect, startCoords, ratio, edgeSign }: AspectRatioState, xIsPrimaryAxis: boolean, coords: Point, rect: Rect) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign\n }\n else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n" ] }