{ "version": 3, "sources": [ "pointer.ts" ], "names": [ "extend", "getOriginXY", "hypot", "is", "resolveRectLike", "rectToXY", "makeModifier", "start", "arg", "interaction", "interactable", "element", "rect", "state", "startOffset", "options", "origin", "offsetWithOrigin", "getOrigin", "x", "y", "snapOffset", "offset", "coords", "page", "offsetRect", "relativePoints", "offsets", "length", "map", "relativePoint", "index", "left", "width", "top", "height", "set", "prepared", "name", "targets", "relativeX", "relativeY", "len", "snapTarget", "target", "func", "_proxy", "push", "number", "range", "source", "closest", "inRange", "distance", "delta", "dx", "dy", "Infinity", "optionsOrigin", "defaults", "endOnly", "enabled", "snap" ], "mappings": "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", "sourcesContent": [ "import Interaction, { InteractionProxy } from '@interactjs/core/Interaction'\nimport { Point, RectResolvable, Element } from '@interactjs/types/index'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { resolveRectLike, rectToXY } from '@interactjs/utils/rect'\n\nimport { makeModifier, ModifierArg, ModifierState } from '../base'\n\nexport interface Offset {\n x: number\n y: number\n index: number\n relativePoint?: Point\n}\n\nexport interface SnapPosition {\n x?: number\n y?: number\n range?: number\n offset?: Offset\n [index: string]: any\n}\n\nexport type SnapFunction = (\n x: number,\n y: number,\n interaction: InteractionProxy,\n offset: Offset,\n index: number\n) => SnapPosition\nexport type SnapTarget = SnapPosition | SnapFunction\nexport interface SnapOptions {\n targets: SnapTarget[]\n // target range\n range: number\n // self points for snapping. [0,0] = top left, [1,1] = bottom right\n relativePoints: Point[]\n // startCoords = offset snapping from drag start page position\n offset: Point | RectResolvable<[Interaction]> | 'startCoords'\n offsetWithOrigin?: boolean\n origin: RectResolvable<[Element]> | Point\n endOnly?: boolean\n enabled?: boolean\n}\n\nexport type SnapState = ModifierState\n\nfunction start (arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin\n ? getOrigin(arg)\n : { x: 0, y: 0 }\n\n let snapOffset: Point\n\n if (options.offset === 'startCoords') {\n snapOffset = {\n x: interaction.coords.start.page.x,\n y: interaction.coords.start.page.y,\n }\n }\n else {\n const offsetRect = resolveRectLike(options.offset as any, interactable, element, [interaction])\n\n snapOffset = rectToXY(offsetRect) || { x: 0, y: 0 }\n snapOffset.x += origin.x\n snapOffset.y += origin.y\n }\n\n const { relativePoints } = options\n\n state.offsets = rect && relativePoints && relativePoints.length\n ? relativePoints.map((relativePoint, index) => ({\n index,\n relativePoint,\n x: startOffset.left - (rect.width * relativePoint.x) + snapOffset.x,\n y: startOffset.top - (rect.height * relativePoint.y) + snapOffset.y,\n }))\n : [extend({\n index: 0,\n relativePoint: null,\n }, snapOffset)]\n}\n\nfunction set (arg: ModifierArg) {\n const { interaction, coords, state } = arg\n const { options, offsets } = state\n\n const origin = getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name)\n const page = extend({}, coords)\n const targets = []\n\n if (!options.offsetWithOrigin) {\n page.x -= origin.x\n page.y -= origin.y\n }\n\n for (const offset of offsets) {\n const relativeX = page.x - offset.x\n const relativeY = page.y - offset.y\n\n for (let index = 0, len = options.targets.length; index < len; index++) {\n const snapTarget = options.targets[index]\n let target: SnapPosition\n\n if (is.func(snapTarget)) {\n target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index)\n }\n else {\n target = snapTarget\n }\n\n if (!target) { continue }\n\n targets.push({\n x: (is.number(target.x) ? target.x : relativeX) + offset.x,\n y: (is.number(target.y) ? target.y : relativeY) + offset.y,\n\n range: is.number(target.range) ? target.range : options.range,\n source: snapTarget,\n index,\n offset,\n })\n }\n }\n\n const closest = {\n target: null,\n inRange: false,\n distance: 0,\n range: 0,\n delta: { x: 0, y: 0 },\n }\n\n for (const target of targets) {\n const range = target.range\n const dx = target.x - page.x\n const dy = target.y - page.y\n const distance = hypot(dx, dy)\n let inRange = distance <= range\n\n // Infinite targets count as being out of range\n // compared to non infinite ones that are in range\n if (range === Infinity && closest.inRange && closest.range !== Infinity) {\n inRange = false\n }\n\n if (!closest.target || (inRange\n // is the closest target in range?\n ? (closest.inRange && range !== Infinity\n // the pointer is relatively deeper in this target\n ? distance / range < closest.distance / closest.range\n // this target has Infinite range and the closest doesn't\n : (range === Infinity && closest.range !== Infinity) ||\n // OR this target is closer that the previous closest\n distance < closest.distance)\n // The other is not in range and the pointer is closer to this target\n : (!closest.inRange && distance < closest.distance))) {\n closest.target = target\n closest.distance = distance\n closest.range = range\n closest.inRange = inRange\n closest.delta.x = dx\n closest.delta.y = dy\n }\n }\n\n if (closest.inRange) {\n coords.x = closest.target.x\n coords.y = closest.target.y\n }\n\n state.closest = closest\n return closest\n}\n\nfunction getOrigin (arg: Partial>) {\n const { element } = arg.interaction\n const optionsOrigin = rectToXY(\n resolveRectLike(arg.state.options.origin as any, null, null, [element]),\n )\n const origin = optionsOrigin || getOriginXY(\n arg.interactable,\n element,\n arg.interaction.prepared.name,\n )\n\n return origin\n}\n\nconst defaults: SnapOptions = {\n range : Infinity,\n targets: null,\n offset: null,\n offsetWithOrigin: true,\n origin: null,\n relativePoints: null,\n endOnly: false,\n enabled: false,\n}\nconst snap = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snap, 'snap')\nexport { snap }\n" ] }