{ "version": 3, "sources": [ "base.ts" ], "names": [ "Scope", "SignalArgs", "domUtils", "extend", "is", "copyAction", "InteractableMethods", "install", "scope", "interactStatic", "interact", "defaults", "usePlugin", "base", "actionChecker", "styleCursor", "perAction", "manualStart", "max", "Infinity", "maxPerElement", "allowFrom", "ignoreFrom", "mouseButtons", "maxInteractions", "newValue", "autoStart", "withinInteractionLimit", "cursorElement", "prepareOnDown", "interaction", "pointer", "event", "eventTarget", "interacting", "actionInfo", "getActionInfo", "prepare", "prepareOnMove", "pointerType", "pointerIsDown", "startOnMove", "arg", "pointerWasMoved", "prepared", "name", "fire", "interactable", "actionName", "options", "element", "stop", "start", "setInteractionCursor", "clearCursorOnStop", "setCursor", "validateAction", "action", "testIgnoreAllow", "enabled", "validateMatches", "matches", "matchElements", "i", "len", "length", "match", "matchElement", "matchAction", "getAction", "pushMatches", "push", "interactables", "forEachMatch", "parentNode", "rect", "getRect", "maxActions", "autoStartMax", "activeInteractions", "interactableCount", "elementCount", "interactions", "list", "otherAction", "number", "cursor", "prevCursorElement", "style", "ownerDocument", "documentElement", "cursorChecker", "func", "_interacting", "actions", "map", "getCursor", "id", "before", "listeners" ], "mappings": "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", "sourcesContent": [ "import { Interactable } from '@interactjs/core/Interactable'\nimport Interaction, { ActionProps } from '@interactjs/core/Interaction'\nimport { Scope, SignalArgs, ActionName, Plugin } from '@interactjs/core/scope'\nimport { CursorChecker, PointerType, PointerEventType, Element } from '@interactjs/types/index'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport { copyAction } from '@interactjs/utils/misc'\n\nimport InteractableMethods from './InteractableMethods'\n\ndeclare module '@interactjs/core/interactStatic' {\n export interface InteractStatic {\n maxInteractions: (newValue: any) => any\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoStart: AutoStart\n }\n\n interface SignalArgs {\n 'autoStart:before-start': SignalArgs['interactions:move']\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n actionChecker?: any\n cursorChecker?: any\n styleCursor?: any\n }\n\n interface PerActionDefaults {\n manualStart?: boolean\n max?: number\n maxPerElement?: number\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n cursorChecker?: CursorChecker\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n // TODO: docst\n mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16\n }\n}\n\ninterface CheckSignalArg {\n interactable: Interactable\n interaction: Interaction\n element: Element\n action: ActionProps\n buttons: number\n}\n\nexport interface AutoStart {\n // Allow this many interactions to happen simultaneously\n maxInteractions: number\n withinInteractionLimit: typeof withinInteractionLimit\n cursorElement: Element\n}\n\nfunction install (scope: Scope) {\n const {\n interactStatic: interact,\n defaults,\n } = scope\n\n scope.usePlugin(InteractableMethods)\n\n defaults.base.actionChecker = null\n defaults.base.styleCursor = true\n\n extend(defaults.perAction, {\n manualStart: false,\n max: Infinity,\n maxPerElement: 1,\n allowFrom: null,\n ignoreFrom: null,\n\n // only allow left button by default\n // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value\n mouseButtons: 1,\n })\n\n /**\n * Returns or sets the maximum number of concurrent interactions allowed. By\n * default only 1 interaction is allowed at a time (for backwards\n * compatibility). To allow multiple interactions on the same Interactables and\n * elements, you need to enable it in the draggable, resizable and gesturable\n * `'max'` and `'maxPerElement'` options.\n *\n * @alias module:interact.maxInteractions\n *\n * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\n interact.maxInteractions = (newValue: number) => maxInteractions(newValue, scope)\n\n scope.autoStart = {\n // Allow this many interactions to happen simultaneously\n maxInteractions: Infinity,\n withinInteractionLimit,\n cursorElement: null,\n }\n}\n\nfunction prepareOnDown ({ interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'], scope: Scope) {\n if (interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove ({ interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.pointerType !== 'mouse' ||\n interaction.pointerIsDown ||\n interaction.interacting()) { return }\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget as Element, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction startOnMove (arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction } = arg\n\n if (!interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name) {\n return\n }\n\n scope.fire('autoStart:before-start', arg)\n\n const { interactable } = interaction\n const actionName = (interaction as Interaction).prepared.name\n\n if (actionName && interactable) {\n // check manualStart and interaction limit\n if (interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) {\n interaction.stop()\n }\n else {\n interaction.start(interaction.prepared, interactable, interaction.element)\n setInteractionCursor(interaction, scope)\n }\n }\n}\n\nfunction clearCursorOnStop ({ interaction }: { interaction: Interaction }, scope: Scope) {\n const { interactable } = interaction\n\n if (interactable && interactable.options.styleCursor) {\n setCursor(interaction.element, '', scope)\n }\n}\n\n// Check if the current interactable supports the action.\n// If so, return the validated action. Otherwise, return null\nfunction validateAction (\n action: ActionProps,\n interactable: Interactable,\n element: Element,\n eventTarget: Node,\n scope: Scope,\n) {\n if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)) {\n return action\n }\n\n return null\n}\n\nfunction validateMatches (\n interaction: Interaction,\n pointer: PointerType,\n event: PointerEventType,\n matches: Interactable[],\n matchElements: Element[],\n eventTarget: Node,\n scope: Scope,\n) {\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i]\n const matchElement = matchElements[i]\n const matchAction = match.getAction(pointer, event, interaction, matchElement)\n\n if (!matchAction) { continue }\n\n const action = validateAction(\n matchAction,\n match,\n matchElement,\n eventTarget,\n scope)\n\n if (action) {\n return {\n action,\n interactable: match,\n element: matchElement,\n }\n }\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction getActionInfo (\n interaction: Interaction,\n pointer: PointerType,\n event: PointerEventType,\n eventTarget: Node,\n scope: Scope,\n) {\n let matches: Interactable[] = []\n let matchElements: Element[] = []\n\n let element = eventTarget as Element\n\n function pushMatches (interactable: Interactable) {\n matches.push(interactable)\n matchElements.push(element)\n }\n\n while (is.element(element)) {\n matches = []\n matchElements = []\n\n scope.interactables.forEachMatch(element, pushMatches)\n\n const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope)\n\n if (actionInfo.action &&\n !actionInfo.interactable.options[actionInfo.action.name].manualStart) {\n return actionInfo\n }\n\n element = domUtils.parentNode(element) as Element\n }\n\n return { action: null, interactable: null, element: null }\n}\n\nfunction prepare (\n interaction: Interaction,\n { action, interactable, element }: {\n action: ActionProps\n interactable: Interactable\n element: Element\n },\n scope: Scope,\n) {\n action = action || { name: null }\n\n interaction.interactable = interactable\n interaction.element = element\n copyAction(interaction.prepared, action)\n\n interaction.rect = interactable && action.name\n ? interactable.getRect(element)\n : null\n\n setInteractionCursor(interaction, scope)\n\n scope.fire('autoStart:prepared', { interaction })\n}\n\nfunction withinInteractionLimit (\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n scope: Scope,\n) {\n const options = interactable.options\n const maxActions = options[action.name].max\n const maxPerElement = options[action.name].maxPerElement\n const autoStartMax = scope.autoStart.maxInteractions\n let activeInteractions = 0\n let interactableCount = 0\n let elementCount = 0\n\n // no actions if any of these values == 0\n if (!(maxActions && maxPerElement && autoStartMax)) { return false }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) { continue }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) { continue }\n\n interactableCount += otherAction === action.name ? 1 : 0\n\n if (interactableCount >= maxActions) {\n return false\n }\n\n if (interaction.element === element) {\n elementCount++\n\n if (otherAction === action.name && elementCount >= maxPerElement) {\n return false\n }\n }\n }\n\n return autoStartMax > 0\n}\n\nfunction maxInteractions (newValue: any, scope: Scope) {\n if (is.number(newValue)) {\n scope.autoStart.maxInteractions = newValue\n\n return this\n }\n\n return scope.autoStart.maxInteractions\n}\n\nfunction setCursor (element: Element, cursor: string, scope: Scope) {\n const { cursorElement: prevCursorElement } = scope.autoStart\n\n if (prevCursorElement && prevCursorElement !== element) {\n prevCursorElement.style.cursor = ''\n }\n\n element.ownerDocument.documentElement.style.cursor = cursor\n element.style.cursor = cursor\n scope.autoStart.cursorElement = cursor ? element : null\n}\n\nfunction setInteractionCursor (interaction: Interaction, scope: Scope) {\n const { interactable, element, prepared } = interaction\n\n if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) {\n // clear previous target element cursor\n if (scope.autoStart.cursorElement) {\n setCursor(scope.autoStart.cursorElement, '', scope)\n }\n\n return\n }\n\n let cursor = ''\n\n if (prepared.name) {\n const cursorChecker = interactable.options[prepared.name].cursorChecker\n\n if (is.func(cursorChecker)) {\n cursor = cursorChecker(prepared, interactable, element, interaction._interacting)\n }\n else {\n cursor = scope.actions.map[prepared.name].getCursor(prepared)\n }\n }\n\n setCursor(interaction.element, cursor || '', scope)\n}\n\nconst autoStart: Plugin = {\n id: 'auto-start/base',\n before: ['actions'],\n install,\n listeners: {\n 'interactions:down': prepareOnDown,\n 'interactions:move': (arg, scope) => {\n prepareOnMove(arg, scope)\n startOnMove(arg, scope)\n },\n 'interactions:stop': clearCursorOnStop,\n },\n maxInteractions,\n withinInteractionLimit,\n validateAction,\n}\n\nexport default autoStart\n" ] }