Socket
Socket
Sign inDemoInstall

@interactjs/reflow

Package Overview
Dependencies
Maintainers
2
Versions
137
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@interactjs/reflow - npm Package Compare versions

Comparing version 1.4.0-alpha.17 to 1.4.0-alpha.18

index.d.ts

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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc