{ "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", "xIsCriticalAxis", "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" ] }