@interactjs/reflow
Advanced tools
Comparing version 1.4.0-alpha.17 to 1.4.0-alpha.18
238
index.js
import { newInteraction } from '@interactjs/core/interactions'; | ||
import { | ||
arr, | ||
is, | ||
extend, | ||
rect as rectUtils, | ||
pointer as pointerUtils, | ||
win, | ||
} from '@interactjs/utils'; | ||
export function install (scope) { | ||
const { | ||
actions, | ||
interactions, | ||
import { arr, extend, is, pointer as pointerUtils, rect as rectUtils, win } from '@interactjs/utils'; | ||
export function install(scope) { | ||
const { actions, interactions, | ||
/** @lends Interactable */ | ||
Interactable, | ||
} = scope; | ||
// add action reflow event types | ||
for (const actionName of actions.names) { | ||
actions.eventTypes.push(`${actionName}reflow`); | ||
} | ||
// remove completed reflow interactions | ||
interactions.signals.on('stop', ({ interaction }) => { | ||
if (interaction.pointerType === 'reflow') { | ||
interaction._reflowResolve(); | ||
arr.remove(scope.interactions.list, interaction); | ||
Interactable, } = scope; | ||
// add action reflow event types | ||
for (const actionName of actions.names) { | ||
actions.eventTypes.push(`${actionName}reflow`); | ||
} | ||
}); | ||
/** | ||
* ```js | ||
* const interactable = interact(target); | ||
* const drag = { name: drag, axis: 'x' }; | ||
* const resize = { name: resize, edges: { left: true, bottom: true }; | ||
* | ||
* interactable.reflow(drag); | ||
* interactable.reflow(resize); | ||
* ``` | ||
* | ||
* Start an action sequence to re-apply modifiers, check drops, etc. | ||
* | ||
* @param { Object } action The action to begin | ||
* @param { string } action.name The name of the action | ||
* @returns { Promise<Interactable> } | ||
*/ | ||
Interactable.prototype.reflow = function (action) { | ||
return reflow(this, action, scope); | ||
}; | ||
// remove completed reflow interactions | ||
interactions.signals.on('stop', ({ interaction }) => { | ||
if (interaction.pointerType === 'reflow') { | ||
interaction._reflowResolve(); | ||
arr.remove(scope.interactions.list, interaction); | ||
} | ||
}); | ||
/** | ||
* ```js | ||
* const interactable = interact(target); | ||
* const drag = { name: drag, axis: 'x' }; | ||
* const resize = { name: resize, edges: { left: true, bottom: true }; | ||
* | ||
* interactable.reflow(drag); | ||
* interactable.reflow(resize); | ||
* ``` | ||
* | ||
* Start an action sequence to re-apply modifiers, check drops, etc. | ||
* | ||
* @param { Object } action The action to begin | ||
* @param { string } action.name The name of the action | ||
* @returns { Promise<Interactable> } | ||
*/ | ||
Interactable.prototype.reflow = function (action) { | ||
return reflow(this, action, scope); | ||
}; | ||
} | ||
function reflow (interactable, action, scope) { | ||
const elements = is.string(interactable.target) | ||
? arr.from(interactable._context.querySelectorAll(interactable.target)) | ||
: [interactable.target]; | ||
const Promise = win.window.Promise; | ||
const promises = Promise ? [] : null; | ||
for (const element of elements) { | ||
const rect = interactable.getRect(element); | ||
if (!rect) { break; } | ||
const runningInteraction = arr.find( | ||
scope.interactions.list, | ||
interaction => { | ||
return interaction.interacting() && | ||
interaction.target === interactable && | ||
interaction.element === element && | ||
interaction.prepared.name === action.name; | ||
}); | ||
let reflowPromise; | ||
if (runningInteraction) { | ||
runningInteraction.move(); | ||
reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => { | ||
runningInteraction._reflowResolve = resolve; | ||
}); | ||
function reflow(interactable, action, scope) { | ||
const elements = is.string(interactable.target) | ||
? arr.from(interactable._context.querySelectorAll(interactable.target)) | ||
: [interactable.target]; | ||
const Promise = win.window.Promise; | ||
const promises = Promise ? [] : null; | ||
for (const element of elements) { | ||
const rect = interactable.getRect(element); | ||
if (!rect) { | ||
break; | ||
} | ||
const runningInteraction = arr.find(scope.interactions.list, interaction => { | ||
return interaction.interacting() && | ||
interaction.target === interactable && | ||
interaction.element === element && | ||
interaction.prepared.name === action.name; | ||
}); | ||
let reflowPromise; | ||
if (runningInteraction) { | ||
runningInteraction.move(); | ||
reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => { | ||
runningInteraction._reflowResolve = resolve; | ||
}); | ||
} | ||
else { | ||
const xywh = rectUtils.tlbrToXywh(rect); | ||
const coords = { | ||
page: { x: xywh.x, y: xywh.y }, | ||
client: { x: xywh.x, y: xywh.y }, | ||
timeStamp: Date.now(), | ||
}; | ||
const event = pointerUtils.coordsToEvent(coords); | ||
reflowPromise = startReflow(scope, interactable, element, action, event); | ||
} | ||
if (promises) { | ||
promises.push(reflowPromise); | ||
} | ||
} | ||
return promises && Promise.all(promises).then(() => interactable); | ||
} | ||
function startReflow(scope, interactable, element, action, event) { | ||
const interaction = newInteraction({ pointerType: 'reflow' }, scope); | ||
const signalArg = { | ||
interaction, | ||
event, | ||
pointer: event, | ||
eventTarget: element, | ||
phase: 'reflow', | ||
}; | ||
interaction.target = interactable; | ||
interaction.element = element; | ||
interaction.prepared = extend({}, action); | ||
interaction.prevEvent = event; | ||
interaction.updatePointer(event, event, element, true); | ||
interaction._doPhase(signalArg); | ||
const reflowPromise = win.window.Promise | ||
? new win.window.Promise((resolve) => { | ||
interaction._reflowResolve = resolve; | ||
}) | ||
: null; | ||
interaction._reflowPromise = reflowPromise; | ||
interaction.start(action, interactable, element); | ||
if (interaction._interacting) { | ||
interaction.move(signalArg); | ||
interaction.end(event); | ||
} | ||
else { | ||
const xywh = rectUtils.tlbrToXywh(rect); | ||
const coords = { | ||
page : { x: xywh.x, y: xywh.y }, | ||
client : { x: xywh.x, y: xywh.y }, | ||
timeStamp: Date.now(), | ||
}; | ||
const event = pointerUtils.coordsToEvent(coords); | ||
reflowPromise = startReflow(scope, interactable, element, action, event); | ||
interaction.stop(); | ||
} | ||
if (promises) { | ||
promises.push(reflowPromise); | ||
} | ||
} | ||
return promises && Promise.all(promises).then(() => interactable); | ||
interaction.removePointer(event, event); | ||
interaction.pointerIsDown = false; | ||
return reflowPromise; | ||
} | ||
function startReflow (scope, interactable, element, action, event) { | ||
const interaction = newInteraction({ pointerType: 'reflow' }, scope); | ||
const signalArg = { | ||
interaction, | ||
event, | ||
pointer: event, | ||
eventTarget: element, | ||
phase: 'reflow', | ||
}; | ||
interaction.target = interactable; | ||
interaction.element = element; | ||
interaction.prepared = extend({}, action); | ||
interaction.prevEvent = event; | ||
interaction.updatePointer(event, event, element, true); | ||
interaction._doPhase(signalArg); | ||
const reflowPromise = win.window.Promise | ||
? new win.window.Promise((resolve) => { | ||
interaction._reflowResolve = resolve; | ||
}) | ||
: null; | ||
interaction._reflowPromise = reflowPromise; | ||
interaction.start(action, interactable, element); | ||
if (interaction._interacting) { | ||
interaction.move(signalArg); | ||
interaction.end(event); | ||
} | ||
else { | ||
interaction.stop(); | ||
} | ||
interaction.removePointer(event, event); | ||
interaction.pointerIsDown = false; | ||
return reflowPromise; | ||
} | ||
export default { install }; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@interactjs/reflow", | ||
"version": "1.4.0-alpha.17+sha.793e5fa", | ||
"version": "1.4.0-alpha.18+sha.a8adfbf", | ||
"peerDependencies": { | ||
"@interactjs/core": "1.4.0-alpha.17+sha.793e5fa", | ||
"@interactjs/utils": "1.4.0-alpha.17+sha.793e5fa" | ||
"@interactjs/core": "1.4.0-alpha.18+sha.a8adfbf", | ||
"@interactjs/utils": "1.4.0-alpha.18+sha.a8adfbf" | ||
}, | ||
"devDependencies": { | ||
"@interactjs/_dev": "1.4.0-alpha.17+sha.793e5fa", | ||
"@interactjs/core": "1.4.0-alpha.17+sha.793e5fa", | ||
"@interactjs/utils": "1.4.0-alpha.17+sha.793e5fa" | ||
"@interactjs/_dev": "1.4.0-alpha.18+sha.a8adfbf", | ||
"@interactjs/core": "1.4.0-alpha.18+sha.a8adfbf", | ||
"@interactjs/utils": "1.4.0-alpha.18+sha.a8adfbf" | ||
}, | ||
@@ -13,0 +13,0 @@ "publishConfig": { |
import test from '@interactjs/_dev/test/test'; | ||
import * as helpers from '@interactjs/core/tests/helpers'; | ||
import win from '@interactjs/utils/window'; | ||
import interactions from '@interactjs/core/interactions'; | ||
import reflow from '../'; | ||
import win from '@interactjs/utils/window.ts'; | ||
import interactions from '@interactjs/core/interactions.ts'; | ||
import reflow from '../index.ts'; | ||
@@ -7,0 +7,0 @@ test('reflow', t => { |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Manifest confusion
Supply chain riskThis package has inconsistent metadata. This could be malicious or caused by an error when publishing the package.
Found 1 instance in 1 package
16870
8
336