diff --git a/dist/api/.nojekyll b/dist/api/.nojekyll new file mode 100644 index 000000000..e2ac6616a --- /dev/null +++ b/dist/api/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/dist/api/README.md b/dist/api/README.md new file mode 100644 index 000000000..64f7ea0cf --- /dev/null +++ b/dist/api/README.md @@ -0,0 +1,35 @@ +@interactjs + +# @interactjs + +## Table of contents + +### Modules + +- [auto-scroll/plugin](modules/auto_scroll_plugin.md) +- [auto-start/base](modules/auto_start_base.md) +- [core/BaseEvent](modules/core_BaseEvent.md) +- [core/Eventable](modules/core_Eventable.md) +- [core/InteractEvent](modules/core_InteractEvent.md) +- [core/InteractStatic](modules/core_InteractStatic.md) +- [core/Interactable](modules/core_Interactable.md) +- [core/InteractableSet](modules/core_InteractableSet.md) +- [core/Interaction](modules/core_Interaction.md) +- [core/NativeTypes](modules/core_NativeTypes.md) +- [core/interactablePreventDefault](modules/core_interactablePreventDefault.md) +- [core/interactionFinder](modules/core_interactionFinder.md) +- [core/options](modules/core_options.md) +- [core/scope](modules/core_scope.md) +- [core/types](modules/core_types.md) +- [dev-tools/plugin](modules/dev_tools_plugin.md) +- [inertia/plugin](modules/inertia_plugin.md) +- [modifiers/Modification](modules/modifiers_Modification.md) +- [modifiers/aspectRatio](modules/modifiers_aspectRatio.md) +- [modifiers/base](modules/modifiers_base.md) +- [modifiers/noop](modules/modifiers_noop.md) +- [modifiers/types](modules/modifiers_types.md) +- [pointer-events/PointerEvent](modules/pointer_events_PointerEvent.md) +- [pointer-events/base](modules/pointer_events_base.md) +- [snappers/edgeTarget](modules/snappers_edgeTarget.md) +- [snappers/elements](modules/snappers_elements.md) +- [snappers/grid](modules/snappers_grid.md) diff --git a/dist/api/classes/core_BaseEvent.BaseEvent.md b/dist/api/classes/core_BaseEvent.BaseEvent.md new file mode 100644 index 000000000..e3090b971 --- /dev/null +++ b/dist/api/classes/core_BaseEvent.BaseEvent.md @@ -0,0 +1,164 @@ +[@interactjs](../README.md) / [core/BaseEvent](../modules/core_BaseEvent.md) / BaseEvent + +# Class: BaseEvent\ + +[core/BaseEvent](../modules/core_BaseEvent.md).BaseEvent + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends [`ActionName`](../modules/core_types.md#actionname) \| ``null`` = `never` | + +## Hierarchy + +- **`BaseEvent`** + + ↳ [`InteractEvent`](core_InteractEvent.InteractEvent.md) + + ↳ [`PointerEvent`](pointer_events_PointerEvent.PointerEvent.md) + +## Table of contents + +### Properties + +- [currentTarget](core_BaseEvent.BaseEvent.md#currenttarget) +- [immediatePropagationStopped](core_BaseEvent.BaseEvent.md#immediatepropagationstopped) +- [interactable](core_BaseEvent.BaseEvent.md#interactable) +- [interaction](core_BaseEvent.BaseEvent.md#interaction) +- [propagationStopped](core_BaseEvent.BaseEvent.md#propagationstopped) +- [target](core_BaseEvent.BaseEvent.md#target) +- [timeStamp](core_BaseEvent.BaseEvent.md#timestamp) +- [type](core_BaseEvent.BaseEvent.md#type) + +### Methods + +- [preventDefault](core_BaseEvent.BaseEvent.md#preventdefault) +- [stopImmediatePropagation](core_BaseEvent.BaseEvent.md#stopimmediatepropagation) +- [stopPropagation](core_BaseEvent.BaseEvent.md#stoppropagation) + +## Properties + +### currentTarget + +• **currentTarget**: `Node` + +#### Defined in + +[core/BaseEvent.ts:8](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L8) + +___ + +### immediatePropagationStopped + +• **immediatePropagationStopped**: `boolean` = `false` + +#### Defined in + +[core/BaseEvent.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L13) + +___ + +### interactable + +• **interactable**: [`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/BaseEvent.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L9) + +___ + +### interaction + +• **interaction**: [`InteractionProxy`](../modules/core_Interaction.md#interactionproxy)\<`T`\> + +#### Defined in + +[core/BaseEvent.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L40) + +___ + +### propagationStopped + +• **propagationStopped**: `boolean` = `false` + +#### Defined in + +[core/BaseEvent.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L14) + +___ + +### target + +• **target**: `EventTarget` + +#### Defined in + +[core/BaseEvent.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L7) + +___ + +### timeStamp + +• **timeStamp**: `number` + +#### Defined in + +[core/BaseEvent.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L12) + +___ + +### type + +• **type**: `string` + +#### Defined in + +[core/BaseEvent.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L6) + +## Methods + +### preventDefault + +▸ **preventDefault**(): `void` + +#### Returns + +`void` + +#### Defined in + +[core/BaseEvent.ts:20](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L20) + +___ + +### stopImmediatePropagation + +▸ **stopImmediatePropagation**(): `void` + +Don't call listeners on the remaining targets + +#### Returns + +`void` + +#### Defined in + +[core/BaseEvent.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L32) + +___ + +### stopPropagation + +▸ **stopPropagation**(): `void` + +Don't call any other listeners (even on the current target) + +#### Returns + +`void` + +#### Defined in + +[core/BaseEvent.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L25) diff --git a/dist/api/classes/core_Eventable.Eventable.md b/dist/api/classes/core_Eventable.Eventable.md new file mode 100644 index 000000000..e2706369f --- /dev/null +++ b/dist/api/classes/core_Eventable.Eventable.md @@ -0,0 +1,160 @@ +[@interactjs](../README.md) / [core/Eventable](../modules/core_Eventable.md) / Eventable + +# Class: Eventable + +[core/Eventable](../modules/core_Eventable.md).Eventable + +## Table of contents + +### Properties + +- [global](core_Eventable.Eventable.md#global) +- [immediatePropagationStopped](core_Eventable.Eventable.md#immediatepropagationstopped) +- [options](core_Eventable.Eventable.md#options) +- [propagationStopped](core_Eventable.Eventable.md#propagationstopped) +- [types](core_Eventable.Eventable.md#types) + +### Methods + +- [fire](core_Eventable.Eventable.md#fire) +- [getRect](core_Eventable.Eventable.md#getrect) +- [off](core_Eventable.Eventable.md#off) +- [on](core_Eventable.Eventable.md#on) + +## Properties + +### global + +• **global**: `any` + +#### Defined in + +[core/Eventable.ts:23](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L23) + +___ + +### immediatePropagationStopped + +• **immediatePropagationStopped**: `boolean` = `false` + +#### Defined in + +[core/Eventable.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L22) + +___ + +### options + +• **options**: `any` + +#### Defined in + +[core/Eventable.ts:19](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L19) + +___ + +### propagationStopped + +• **propagationStopped**: `boolean` = `false` + +#### Defined in + +[core/Eventable.ts:21](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L21) + +___ + +### types + +• **types**: `NormalizedListeners` = `{}` + +#### Defined in + +[core/Eventable.ts:20](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L20) + +## Methods + +### fire + +▸ **fire**\<`T`\>(`event`): `void` + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `Object` | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `event` | `T` | + +#### Returns + +`void` + +#### Defined in + +[core/Eventable.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L29) + +___ + +### getRect + +▸ **getRect**(`_element`): [`Rect`](../interfaces/core_types.Rect.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_element` | `Element` | + +#### Returns + +[`Rect`](../interfaces/core_types.Rect.md) + +#### Defined in + +[core/Eventable.ts:73](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L73) + +___ + +### off + +▸ **off**(`type`, `listener`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | `string` | +| `listener` | [`ListenersArg`](../modules/core_types.md#listenersarg) | + +#### Returns + +`void` + +#### Defined in + +[core/Eventable.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L53) + +___ + +### on + +▸ **on**(`type`, `listener`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | `string` | +| `listener` | [`ListenersArg`](../modules/core_types.md#listenersarg) | + +#### Returns + +`void` + +#### Defined in + +[core/Eventable.ts:45](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Eventable.ts#L45) diff --git a/dist/api/classes/core_InteractEvent.InteractEvent.md b/dist/api/classes/core_InteractEvent.InteractEvent.md new file mode 100644 index 000000000..4dc5aaefb --- /dev/null +++ b/dist/api/classes/core_InteractEvent.InteractEvent.md @@ -0,0 +1,644 @@ +[@interactjs](../README.md) / [core/InteractEvent](../modules/core_InteractEvent.md) / InteractEvent + +# Class: InteractEvent\ + +[core/InteractEvent](../modules/core_InteractEvent.md).InteractEvent + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends [`ActionName`](../modules/core_types.md#actionname) = `never` | +| `P` | extends [`EventPhase`](../modules/core_InteractEvent.md#eventphase) = [`EventPhase`](../modules/core_InteractEvent.md#eventphase) | + +## Hierarchy + +- [`BaseEvent`](core_BaseEvent.BaseEvent.md)\<`T`\> + + ↳ **`InteractEvent`** + +## Table of contents + +### Properties + +- [altKey](core_InteractEvent.InteractEvent.md#altkey) +- [axes](core_InteractEvent.InteractEvent.md#axes) +- [button](core_InteractEvent.InteractEvent.md#button) +- [buttons](core_InteractEvent.InteractEvent.md#buttons) +- [client](core_InteractEvent.InteractEvent.md#client) +- [clientX](core_InteractEvent.InteractEvent.md#clientx) +- [clientX0](core_InteractEvent.InteractEvent.md#clientx0) +- [clientY](core_InteractEvent.InteractEvent.md#clienty) +- [clientY0](core_InteractEvent.InteractEvent.md#clienty0) +- [ctrlKey](core_InteractEvent.InteractEvent.md#ctrlkey) +- [currentTarget](core_InteractEvent.InteractEvent.md#currenttarget) +- [delta](core_InteractEvent.InteractEvent.md#delta) +- [dragEnter](core_InteractEvent.InteractEvent.md#dragenter) +- [dragLeave](core_InteractEvent.InteractEvent.md#dragleave) +- [dropzone](core_InteractEvent.InteractEvent.md#dropzone) +- [dt](core_InteractEvent.InteractEvent.md#dt) +- [duration](core_InteractEvent.InteractEvent.md#duration) +- [dx](core_InteractEvent.InteractEvent.md#dx) +- [dy](core_InteractEvent.InteractEvent.md#dy) +- [immediatePropagationStopped](core_InteractEvent.InteractEvent.md#immediatepropagationstopped) +- [interactable](core_InteractEvent.InteractEvent.md#interactable) +- [interaction](core_InteractEvent.InteractEvent.md#interaction) +- [metaKey](core_InteractEvent.InteractEvent.md#metakey) +- [modifiers](core_InteractEvent.InteractEvent.md#modifiers) +- [page](core_InteractEvent.InteractEvent.md#page) +- [pageX](core_InteractEvent.InteractEvent.md#pagex) +- [pageY](core_InteractEvent.InteractEvent.md#pagey) +- [propagationStopped](core_InteractEvent.InteractEvent.md#propagationstopped) +- [rect](core_InteractEvent.InteractEvent.md#rect) +- [relatedTarget](core_InteractEvent.InteractEvent.md#relatedtarget) +- [screenX](core_InteractEvent.InteractEvent.md#screenx) +- [screenY](core_InteractEvent.InteractEvent.md#screeny) +- [shiftKey](core_InteractEvent.InteractEvent.md#shiftkey) +- [speed](core_InteractEvent.InteractEvent.md#speed) +- [swipe](core_InteractEvent.InteractEvent.md#swipe) +- [t0](core_InteractEvent.InteractEvent.md#t0) +- [target](core_InteractEvent.InteractEvent.md#target) +- [timeStamp](core_InteractEvent.InteractEvent.md#timestamp) +- [type](core_InteractEvent.InteractEvent.md#type) +- [velocity](core_InteractEvent.InteractEvent.md#velocity) +- [velocityX](core_InteractEvent.InteractEvent.md#velocityx) +- [velocityY](core_InteractEvent.InteractEvent.md#velocityy) +- [x0](core_InteractEvent.InteractEvent.md#x0) +- [y0](core_InteractEvent.InteractEvent.md#y0) + +### Methods + +- [getSwipe](core_InteractEvent.InteractEvent.md#getswipe) +- [preventDefault](core_InteractEvent.InteractEvent.md#preventdefault) +- [stopImmediatePropagation](core_InteractEvent.InteractEvent.md#stopimmediatepropagation) +- [stopPropagation](core_InteractEvent.InteractEvent.md#stoppropagation) + +## Properties + +### altKey + +• **altKey**: `boolean` + +#### Defined in + +[core/InteractEvent.ts:48](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L48) + +___ + +### axes + +• `Optional` **axes**: ``"x"`` \| ``"y"`` \| ``"xy"`` + +#### Defined in + +[core/InteractEvent.ts:65](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L65) + +___ + +### button + +• **button**: `number` + +#### Defined in + +[core/InteractEvent.ts:44](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L44) + +___ + +### buttons + +• **buttons**: `number` + +#### Defined in + +[core/InteractEvent.ts:45](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L45) + +___ + +### client + +• **client**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[core/InteractEvent.ts:51](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L51) + +___ + +### clientX + +• **clientX**: `number` + +#### Defined in + +[core/InteractEvent.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L25) + +___ + +### clientX0 + +• **clientX0**: `number` + +#### Defined in + +[core/InteractEvent.ts:59](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L59) + +___ + +### clientY + +• **clientY**: `number` + +#### Defined in + +[core/InteractEvent.ts:26](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L26) + +___ + +### clientY0 + +• **clientY0**: `number` + +#### Defined in + +[core/InteractEvent.ts:60](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L60) + +___ + +### ctrlKey + +• **ctrlKey**: `boolean` + +#### Defined in + +[core/InteractEvent.ts:46](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L46) + +___ + +### currentTarget + +• **currentTarget**: [`Element`](../modules/core_types.md#element) + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[currentTarget](core_BaseEvent.BaseEvent.md#currenttarget) + +#### Defined in + +[core/InteractEvent.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L40) + +___ + +### delta + +• **delta**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[core/InteractEvent.ts:52](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L52) + +___ + +### dragEnter + +• `Optional` **dragEnter**: [`Element`](../modules/core_types.md#element) + +#### Defined in + +[actions/drop/plugin.ts:137](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L137) + +___ + +### dragLeave + +• `Optional` **dragLeave**: [`Element`](../modules/core_types.md#element) + +#### Defined in + +[actions/drop/plugin.ts:138](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L138) + +___ + +### dropzone + +• `Optional` **dropzone**: [`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[actions/drop/plugin.ts:136](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L136) + +___ + +### dt + +• **dt**: `number` + +#### Defined in + +[core/InteractEvent.ts:57](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L57) + +___ + +### duration + +• **duration**: `number` + +#### Defined in + +[core/InteractEvent.ts:58](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L58) + +___ + +### dx + +• **dx**: `number` + +#### Defined in + +[core/InteractEvent.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L28) + +___ + +### dy + +• **dy**: `number` + +#### Defined in + +[core/InteractEvent.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L29) + +___ + +### immediatePropagationStopped + +• **immediatePropagationStopped**: `boolean` = `false` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[immediatePropagationStopped](core_BaseEvent.BaseEvent.md#immediatepropagationstopped) + +#### Defined in + +[core/BaseEvent.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L13) + +___ + +### interactable + +• **interactable**: [`Interactable`](core_Interactable.Interactable.md) + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[interactable](core_BaseEvent.BaseEvent.md#interactable) + +#### Defined in + +[core/BaseEvent.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L9) + +___ + +### interaction + +• **interaction**: [`InteractionProxy`](../modules/core_Interaction.md#interactionproxy)\<`T`\> + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[interaction](core_BaseEvent.BaseEvent.md#interaction) + +#### Defined in + +[core/BaseEvent.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L40) + +___ + +### metaKey + +• **metaKey**: `boolean` + +#### Defined in + +[core/InteractEvent.ts:49](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L49) + +___ + +### modifiers + +• `Optional` **modifiers**: \{ `[key: string]`: `any`; `name`: `string` }[] + +#### Defined in + +[modifiers/base.ts:16](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L16) + +___ + +### page + +• **page**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[core/InteractEvent.ts:50](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L50) + +___ + +### pageX + +• **pageX**: `number` + +#### Defined in + +[core/InteractEvent.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L22) + +___ + +### pageY + +• **pageY**: `number` + +#### Defined in + +[core/InteractEvent.ts:23](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L23) + +___ + +### propagationStopped + +• **propagationStopped**: `boolean` = `false` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[propagationStopped](core_BaseEvent.BaseEvent.md#propagationstopped) + +#### Defined in + +[core/BaseEvent.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L14) + +___ + +### rect + +• **rect**: `Required`\<[`Rect`](../interfaces/core_types.Rect.md)\> + +#### Defined in + +[core/InteractEvent.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L53) + +___ + +### relatedTarget + +• **relatedTarget**: [`Element`](../modules/core_types.md#element) = `null` + +#### Defined in + +[core/InteractEvent.ts:41](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L41) + +___ + +### screenX + +• `Optional` **screenX**: `number` + +#### Defined in + +[core/InteractEvent.ts:42](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L42) + +___ + +### screenY + +• `Optional` **screenY**: `number` + +#### Defined in + +[core/InteractEvent.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L43) + +___ + +### shiftKey + +• **shiftKey**: `boolean` + +#### Defined in + +[core/InteractEvent.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L47) + +___ + +### speed + +• **speed**: `number` + +#### Defined in + +[core/InteractEvent.ts:62](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L62) + +___ + +### swipe + +• **swipe**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `angle` | `number` | +| `down` | `boolean` | +| `left` | `boolean` | +| `right` | `boolean` | +| `speed` | `number` | +| `up` | `boolean` | +| `velocity` | \{ `x`: `number` = interaction.prevEvent.velocityX; `y`: `number` = interaction.prevEvent.velocityY } | +| `velocity.x` | `number` | +| `velocity.y` | `number` | + +#### Defined in + +[core/InteractEvent.ts:63](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L63) + +___ + +### t0 + +• **t0**: `number` + +#### Defined in + +[core/InteractEvent.ts:56](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L56) + +___ + +### target + +• **target**: [`Element`](../modules/core_types.md#element) + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[target](core_BaseEvent.BaseEvent.md#target) + +#### Defined in + +[core/InteractEvent.ts:39](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L39) + +___ + +### timeStamp + +• **timeStamp**: `number` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[timeStamp](core_BaseEvent.BaseEvent.md#timestamp) + +#### Defined in + +[core/BaseEvent.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L12) + +___ + +### type + +• **type**: `string` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[type](core_BaseEvent.BaseEvent.md#type) + +#### Defined in + +[core/BaseEvent.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L6) + +___ + +### velocity + +• **velocity**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[core/InteractEvent.ts:61](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L61) + +___ + +### velocityX + +• **velocityX**: `number` + +#### Defined in + +[core/InteractEvent.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L31) + +___ + +### velocityY + +• **velocityY**: `number` + +#### Defined in + +[core/InteractEvent.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L32) + +___ + +### x0 + +• **x0**: `number` + +#### Defined in + +[core/InteractEvent.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L54) + +___ + +### y0 + +• **y0**: `number` + +#### Defined in + +[core/InteractEvent.ts:55](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L55) + +## Methods + +### getSwipe + +▸ **getSwipe**(): `Object` + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `angle` | `number` | +| `down` | `boolean` | +| `left` | `boolean` | +| `right` | `boolean` | +| `speed` | `number` | +| `up` | `boolean` | +| `velocity` | \{ `x`: `number` = interaction.prevEvent.velocityX; `y`: `number` = interaction.prevEvent.velocityY } | +| `velocity.x` | `number` | +| `velocity.y` | `number` | + +#### Defined in + +[core/InteractEvent.ts:145](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L145) + +___ + +### preventDefault + +▸ **preventDefault**(): `void` + +#### Returns + +`void` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[preventDefault](core_BaseEvent.BaseEvent.md#preventdefault) + +#### Defined in + +[core/InteractEvent.ts:179](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L179) + +___ + +### stopImmediatePropagation + +▸ **stopImmediatePropagation**(): `void` + +Don't call listeners on the remaining targets + +#### Returns + +`void` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[stopImmediatePropagation](core_BaseEvent.BaseEvent.md#stopimmediatepropagation) + +#### Defined in + +[core/InteractEvent.ts:184](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L184) + +___ + +### stopPropagation + +▸ **stopPropagation**(): `void` + +Don't call any other listeners (even on the current target) + +#### Returns + +`void` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[stopPropagation](core_BaseEvent.BaseEvent.md#stoppropagation) + +#### Defined in + +[core/InteractEvent.ts:191](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L191) diff --git a/dist/api/classes/core_Interactable.Interactable.md b/dist/api/classes/core_Interactable.Interactable.md new file mode 100644 index 000000000..ef3d35a66 --- /dev/null +++ b/dist/api/classes/core_Interactable.Interactable.md @@ -0,0 +1,1196 @@ +[@interactjs](../README.md) / [core/Interactable](../modules/core_Interactable.md) / Interactable + +# Class: Interactable + +[core/Interactable](../modules/core_Interactable.md).Interactable + +```ts +const interactable = interact('.cards') + .draggable({ + listeners: { move: event => console.log(event.type, event.pageX, event.pageY) } + }) + .resizable({ + listeners: { move: event => console.log(event.rect) }, + modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })] + }) +``` + +## Implements + +- `Partial`\<[`Eventable`](core_Eventable.Eventable.md)\> + +## Table of contents + +### Properties + +- [devTools](core_Interactable.Interactable.md#devtools) +- [getAction](core_Interactable.Interactable.md#getaction) +- [target](core_Interactable.Interactable.md#target) + +### Methods + +- [actionChecker](core_Interactable.Interactable.md#actionchecker) +- [allowFrom](core_Interactable.Interactable.md#allowfrom) +- [checkAndPreventDefault](core_Interactable.Interactable.md#checkandpreventdefault) +- [context](core_Interactable.Interactable.md#context) +- [deltaSource](core_Interactable.Interactable.md#deltasource) +- [draggable](core_Interactable.Interactable.md#draggable) +- [dropCheck](core_Interactable.Interactable.md#dropcheck) +- [dropzone](core_Interactable.Interactable.md#dropzone) +- [fire](core_Interactable.Interactable.md#fire) +- [gesturable](core_Interactable.Interactable.md#gesturable) +- [getRect](core_Interactable.Interactable.md#getrect) +- [ignoreFrom](core_Interactable.Interactable.md#ignorefrom) +- [inContext](core_Interactable.Interactable.md#incontext) +- [off](core_Interactable.Interactable.md#off) +- [on](core_Interactable.Interactable.md#on) +- [origin](core_Interactable.Interactable.md#origin) +- [pointerEvents](core_Interactable.Interactable.md#pointerevents) +- [preventDefault](core_Interactable.Interactable.md#preventdefault) +- [rectChecker](core_Interactable.Interactable.md#rectchecker) +- [reflow](core_Interactable.Interactable.md#reflow) +- [resizable](core_Interactable.Interactable.md#resizable) +- [set](core_Interactable.Interactable.md#set) +- [setOnEvents](core_Interactable.Interactable.md#setonevents) +- [setPerAction](core_Interactable.Interactable.md#setperaction) +- [styleCursor](core_Interactable.Interactable.md#stylecursor) +- [unset](core_Interactable.Interactable.md#unset) +- [updatePerActionListeners](core_Interactable.Interactable.md#updateperactionlisteners) + +## Properties + +### devTools + +• **devTools**: [`OptionMethod`](../interfaces/core_types.OptionMethod.md)\<[`DevToolsOptions`](../interfaces/dev_tools_plugin.DevToolsOptions.md)\> + +#### Defined in + +[dev-tools/plugin.ts:37](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L37) + +___ + +### getAction + +• **getAction**: (`this`: [`Interactable`](core_Interactable.Interactable.md), `pointer`: [`PointerType`](../modules/core_types.md#pointertype), `event`: [`PointerEventType`](../modules/core_types.md#pointereventtype), `interaction`: [`Interaction`](core_Interaction.Interaction.md)\, `element`: [`Element`](../modules/core_types.md#element)) => [`ActionProps`](../interfaces/core_types.ActionProps.md)\<`never`\> + +#### Type declaration + +▸ (`this`, `pointer`, `event`, `interaction`, `element`): [`ActionProps`](../interfaces/core_types.ActionProps.md)\<`never`\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | [`Interactable`](core_Interactable.Interactable.md) | +| `pointer` | [`PointerType`](../modules/core_types.md#pointertype) | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | +| `interaction` | [`Interaction`](core_Interaction.Interaction.md)\ | +| `element` | [`Element`](../modules/core_types.md#element) | + +##### Returns + +[`ActionProps`](../interfaces/core_types.ActionProps.md)\<`never`\> + +#### Defined in + +[auto-start/InteractableMethods.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L10) + +___ + +### target + +• `Readonly` **target**: [`Target`](../modules/core_types.md#target) + +#### Defined in + +[core/Interactable.ts:59](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L59) + +## Methods + +### actionChecker + +▸ **actionChecker**(`checker`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `checker` | `Function` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[auto-start/InteractableMethods.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L27) + +▸ **actionChecker**(): `Function` + +#### Returns + +`Function` + +#### Defined in + +[auto-start/InteractableMethods.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L28) + +▸ **actionChecker**(`checker?`): `Function` \| [`Interactable`](core_Interactable.Interactable.md) + +```js +interact('.resize-drag') + .resizable(true) + .draggable(true) + .actionChecker(function (pointer, event, action, interactable, element, interaction) { + + if (interact.matchesSelector(event.target, '.drag-handle')) { + // force drag with handle target + action.name = drag + } + else { + // resize from the top and right edges + action.name = 'resize' + action.edges = { top: true, right: true } + } + + return action +}) +``` + +Returns or sets the function used to check action to be performed on +pointerDown + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `checker?` | `Function` | A function which takes a pointer event, defaultAction string, interactable, element and interaction as parameters and returns an object with name property 'drag' 'resize' or 'gesture' and optionally an `edges` object with boolean 'top', 'left', 'bottom' and right props. | + +#### Returns + +`Function` \| [`Interactable`](core_Interactable.Interactable.md) + +The checker function or this Interactable + +#### Defined in + +[auto-start/InteractableMethods.ts:60](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L60) + +___ + +### allowFrom + +▸ **allowFrom**(): `boolean` + +#### Returns + +`boolean` + +#### Defined in + +[auto-start/InteractableMethods.ts:89](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L89) + +▸ **allowFrom**(`newValue?`): [`Interactable`](core_Interactable.Interactable.md) + +A drag/resize/gesture is started only If the target of the `mousedown`, +`pointerdown` or `touchstart` event or any of it's parents match the given +CSS selector or Element. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue?` | `string` \| [`Element`](../modules/core_types.md#element) | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +The current allowFrom value or this +Interactable + +**`Deprecated`** + +Don't use this method. Instead set the `allowFrom` option for each action +or for `pointerEvents` + +```js +interact(targett) + .resizable({ + allowFrom: '.resize-handle', + .pointerEvents({ + allowFrom: '.handle',, + }) +``` + +#### Defined in + +[auto-start/InteractableMethods.ts:113](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L113) + +___ + +### checkAndPreventDefault + +▸ **checkAndPreventDefault**(`event`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `event` | `Event` | + +#### Returns + +`void` + +#### Defined in + +[core/interactablePreventDefault.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactablePreventDefault.ts#L27) + +___ + +### context + +▸ **context**(): [`Context`](../modules/core_types.md#context) + +Gets the selector context Node of the Interactable. The default is +`window.document`. + +#### Returns + +[`Context`](../modules/core_types.md#context) + +The context Node of this Interactable + +#### Defined in + +[core/Interactable.ts:283](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L283) + +___ + +### deltaSource + +▸ **deltaSource**(): `DeltaSource` + +Returns or sets the mouse coordinate types used to calculate the +movement of the pointer. + +#### Returns + +`DeltaSource` + +The current deltaSource or this Interactable + +#### Defined in + +[core/Interactable.ts:250](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L250) + +▸ **deltaSource**(`newValue`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue` | `DeltaSource` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/Interactable.ts:251](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L251) + +___ + +### draggable + +▸ **draggable**(`options`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `options` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`DraggableOptions`\>\> | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[actions/drag/plugin.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drag/plugin.ts#L10) + +▸ **draggable**(): `DraggableOptions` + +#### Returns + +`DraggableOptions` + +#### Defined in + +[actions/drag/plugin.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drag/plugin.ts#L11) + +▸ **draggable**(`options?`): [`Interactable`](core_Interactable.Interactable.md) \| `DraggableOptions` + +```js +interact(element).draggable({ + onstart: function (event) {}, + onmove : function (event) {}, + onend : function (event) {}, + + // the axis in which the first movement must be + // for the drag sequence to start + // 'xy' by default - any direction + startAxis: 'x' || 'y' || 'xy', + + // 'xy' by default - don't restrict to one axis (move in any direction) + // 'x' or 'y' to restrict movement to either axis + // 'start' to restrict movement to the axis the drag started in + lockAxis: 'x' || 'y' || 'xy' || 'start', + + // max number of drags that can happen concurrently + // with elements of this Interactable. Infinity by default + max: Infinity, + + // max number of drags that can target the same element+Interactable + // 1 by default + maxPerElement: 2 +}) + +var isDraggable = interact('element').draggable(); // true +``` + +Get or set whether drag actions can be performed on the target + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `options?` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`DraggableOptions`\>\> | true/false or An object with event listeners to be fired on drag events (object makes the Interactable draggable) | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) \| `DraggableOptions` + +#### Defined in + +[actions/drag/plugin.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drag/plugin.ts#L47) + +___ + +### dropCheck + +▸ **dropCheck**(`dragEvent`, `event`, `draggable`, `draggableElement`, `dropElemen`, `rect`): `boolean` + +```js +interact(target) +.dropChecker(function(dragEvent, // related dragmove or dragend event + event, // TouchEvent/PointerEvent/MouseEvent + dropped, // bool result of the default checker + dropzone, // dropzone Interactable + dropElement, // dropzone elemnt + draggable, // draggable Interactable + draggableElement) {// draggable element + + return dropped && event.target.hasAttribute('allow-drop') +} +``` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `dragEvent` | [`InteractEvent`](core_InteractEvent.InteractEvent.md)\<`never`, keyof [`PhaseMap`](../interfaces/core_InteractEvent.PhaseMap.md)\> | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | +| `draggable` | [`Interactable`](core_Interactable.Interactable.md) | +| `draggableElement` | [`Element`](../modules/core_types.md#element) | +| `dropElemen` | [`Element`](../modules/core_types.md#element) | +| `rect` | `any` | + +#### Returns + +`boolean` + +#### Defined in + +[actions/drop/plugin.ts:115](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L115) + +___ + +### dropzone + +▸ **dropzone**(`options`): [`Interactable`](core_Interactable.Interactable.md) + +```js +interact('.drop').dropzone({ + accept: '.can-drop' || document.getElementById('single-drop'), + overlap: 'pointer' || 'center' || zeroToOne +} +``` + +Returns or sets whether draggables can be dropped onto this target to +trigger drop events + +Dropzones can receive the following events: + - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends + - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone + - `dragmove` when a draggable that has entered the dropzone is moved + - `drop` when a draggable is dropped into this dropzone + +Use the `accept` option to allow only elements that match the given CSS +selector or element. The value can be: + + - **an Element** - only that element can be dropped into this dropzone. + - **a string**, - the element being dragged must match it as a CSS selector. + - **`null`** - accept options is cleared - it accepts any element. + +Use the `overlap` option to set how drops are checked for. The allowed +values are: + + - `'pointer'`, the pointer must be over the dropzone (default) + - `'center'`, the draggable element's center must be over the dropzone + - a number from 0-1 which is the `(intersection area) / (draggable area)`. + e.g. `0.5` for drop to happen when half of the area of the draggable is + over the dropzone + +Use the `checker` option to specify a function to check if a dragged element +is over this Interactable. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `options` | `boolean` \| `DropzoneOptions` | The new options to be set | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[actions/drop/plugin.ts:96](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L96) + +▸ **dropzone**(): `DropzoneOptions` + +#### Returns + +`DropzoneOptions` + +The current setting + +#### Defined in + +[actions/drop/plugin.ts:98](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L98) + +___ + +### fire + +▸ **fire**\<`E`\>(`iEvent`): [`Interactable`](core_Interactable.Interactable.md) + +Calls listeners for the given InteractEvent type bound globally +and directly to this Interactable + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `E` | extends `Object` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `iEvent` | `E` | The InteractEvent object to be fired on this Interactable | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +this Interactable + +#### Implementation of + +Partial.fire + +#### Defined in + +[core/Interactable.ts:346](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L346) + +___ + +### gesturable + +▸ **gesturable**(`options`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `options` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`GesturableOptions`\>\> | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[actions/gesture/plugin.ts:24](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L24) + +▸ **gesturable**(): `GesturableOptions` + +#### Returns + +`GesturableOptions` + +#### Defined in + +[actions/gesture/plugin.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L25) + +▸ **gesturable**(`options?`): [`Interactable`](core_Interactable.Interactable.md) \| `GesturableOptions` + +```js +interact(element).gesturable({ + onstart: function (event) {}, + onmove : function (event) {}, + onend : function (event) {}, + + // limit multiple gestures. + // See the explanation in {@link Interactable.draggable} example + max: Infinity, + maxPerElement: 1, +}) + +var isGestureable = interact(element).gesturable() +``` + +Gets or sets whether multitouch gestures can be performed on the target + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `options?` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`GesturableOptions`\>\> | true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable) | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) \| `GesturableOptions` + +A boolean indicating if this can be the target of gesture events, or this Interactable + +#### Defined in + +[actions/gesture/plugin.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L47) + +___ + +### getRect + +▸ **getRect**(`element?`): `Required`\<[`Rect`](../interfaces/core_types.Rect.md)\> + +The default function to get an Interactables bounding rect. Can be +overridden using [Interactable.rectChecker](core_Interactable.Interactable.md#rectchecker). + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `element?` | [`Element`](../modules/core_types.md#element) | The element to measure. | + +#### Returns + +`Required`\<[`Rect`](../interfaces/core_types.Rect.md)\> + +The object's bounding rectangle. + +#### Implementation of + +Partial.getRect + +#### Defined in + +[core/Interactable.ts:168](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L168) + +___ + +### ignoreFrom + +▸ **ignoreFrom**(`newValue`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue` | `string` \| [`Element`](../modules/core_types.md#element) | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +This interactable + +#### Defined in + +[auto-start/InteractableMethods.ts:62](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L62) + +▸ **ignoreFrom**(): `string` \| [`Element`](../modules/core_types.md#element) + +#### Returns + +`string` \| [`Element`](../modules/core_types.md#element) + +The current ignoreFrom value + +#### Defined in + +[auto-start/InteractableMethods.ts:64](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L64) + +▸ **ignoreFrom**(`newValue?`): `string` \| [`Element`](../modules/core_types.md#element) \| [`Interactable`](core_Interactable.Interactable.md) + +If the target of the `mousedown`, `pointerdown` or `touchstart` event or any +of it's parents match the given CSS selector or Element, no +drag/resize/gesture is started. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `newValue?` | `string` \| [`Element`](../modules/core_types.md#element) | a CSS selector string, an Element or `null` to not ignore any elements | + +#### Returns + +`string` \| [`Element`](../modules/core_types.md#element) \| [`Interactable`](core_Interactable.Interactable.md) + +**`Deprecated`** + +Don't use this method. Instead set the `ignoreFrom` option for each action +or for `pointerEvents` + +```js +interact(targett) + .draggable({ + ignoreFrom: 'input, textarea, a[href]'', + }) + .pointerEvents({ + ignoreFrom: '[no-pointer]', + }) +``` +Interactable + +#### Defined in + +[auto-start/InteractableMethods.ts:85](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L85) + +___ + +### inContext + +▸ **inContext**(`element`): `boolean` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | `Document` \| `Node` | + +#### Returns + +`boolean` + +#### Defined in + +[core/Interactable.ts:287](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L287) + +___ + +### off + +▸ **off**(`types`, `listener?`, `options?`): [`Interactable`](core_Interactable.Interactable.md) + +Removes an InteractEvent, pointerEvent or DOM event listener. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | `string`[] \| [`EventTypes`](../modules/core_types.md#eventtypes) | The types of events that were listened for | +| `listener?` | [`ListenersArg`](../modules/core_types.md#listenersarg) | The event listener function(s) | +| `options?` | `any` | options object or useCapture flag for removeEventListener | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +This Interactable + +#### Implementation of + +Partial.off + +#### Defined in + +[core/Interactable.ts:426](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L426) + +___ + +### on + +▸ **on**(`types`, `listener?`, `options?`): [`Interactable`](core_Interactable.Interactable.md) + +Binds a listener for an InteractEvent, pointerEvent or DOM event. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `types` | [`EventTypes`](../modules/core_types.md#eventtypes) | The types of events to listen for | +| `listener?` | [`ListenersArg`](../modules/core_types.md#listenersarg) | The event listener function(s) | +| `options?` | `any` | options object or useCapture flag for addEventListener | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +This Interactable + +#### Implementation of + +Partial.on + +#### Defined in + +[core/Interactable.ts:412](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L412) + +___ + +### origin + +▸ **origin**(`newValue`): `any` + +Gets or sets the origin of the Interactable's element. The x and y +of the origin will be subtracted from action event coordinates. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue` | `any` | + +#### Returns + +`any` + +The current origin or this Interactable + +#### Defined in + +[core/Interactable.ts:238](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L238) + +___ + +### pointerEvents + +▸ **pointerEvents**(`options`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `options` | `Partial`\<[`PointerEventOptions`](../interfaces/pointer_events_base.PointerEventOptions.md)\> | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[pointer-events/interactableTargets.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/interactableTargets.ts#L10) + +___ + +### preventDefault + +▸ **preventDefault**(`newValue`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue` | `PreventDefaultValue` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/interactablePreventDefault.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactablePreventDefault.ts#L14) + +▸ **preventDefault**(): `PreventDefaultValue` + +#### Returns + +`PreventDefaultValue` + +#### Defined in + +[core/interactablePreventDefault.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactablePreventDefault.ts#L15) + +▸ **preventDefault**(`newValue?`): [`Interactable`](core_Interactable.Interactable.md) \| `PreventDefaultValue` + +Returns or sets whether to prevent the browser's default behaviour in +response to pointer events. Can be set to: + - `'always'` to always prevent + - `'never'` to never prevent + - `'auto'` to let interact.js try to determine what would be best + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `newValue?` | `PreventDefaultValue` | `'always'`, `'never'` or `'auto'` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) \| `PreventDefaultValue` + +The current setting or this Interactable + +#### Defined in + +[core/interactablePreventDefault.ts:26](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactablePreventDefault.ts#L26) + +___ + +### rectChecker + +▸ **rectChecker**(): (`element`: [`Element`](../modules/core_types.md#element)) => `any` + +Returns or sets the function used to calculate the interactable's +element's rectangle + +#### Returns + +`fn` + +The checker function or this Interactable + +▸ (`element`): `any` + +Returns or sets the function used to calculate the interactable's +element's rectangle + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | + +##### Returns + +`any` + +The checker function or this Interactable + +#### Defined in + +[core/Interactable.ts:186](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L186) + +▸ **rectChecker**(`checker`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `checker` | (`element`: [`Element`](../modules/core_types.md#element)) => `any` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/Interactable.ts:187](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L187) + +___ + +### reflow + +▸ **reflow**\<`T`\>(`action`): `Promise`\<[`Interactable`](core_Interactable.Interactable.md)\> + +```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. + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `action` | [`ActionProps`](../interfaces/core_types.ActionProps.md)\<`T`\> | The action to begin | + +#### Returns + +`Promise`\<[`Interactable`](core_Interactable.Interactable.md)\> + +A promise that resolves to the `Interactable` when actions on all targets have ended + +#### Defined in + +[reflow/plugin.ts:36](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L36) + +___ + +### resizable + +▸ **resizable**(): `ResizableOptions` + +#### Returns + +`ResizableOptions` + +#### Defined in + +[actions/resize/plugin.ts:24](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L24) + +▸ **resizable**(`options`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `options` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`ResizableOptions`\>\> | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[actions/resize/plugin.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L25) + +▸ **resizable**(`options?`): [`Interactable`](core_Interactable.Interactable.md) \| `ResizableOptions` + +```js +interact(element).resizable({ + onstart: function (event) {}, + onmove : function (event) {}, + onend : function (event) {}, + + edges: { + top : true, // Use pointer coords to check for resize. + left : false, // Disable resizing from left edge. + bottom: '.resize-s',// Resize if pointer target matches selector + right : handleEl // Resize if pointer target is the given Element + }, + + // Width and height can be adjusted independently. When `true`, width and + // height are adjusted at a 1:1 ratio. + square: false, + + // Width and height can be adjusted independently. When `true`, width and + // height maintain the aspect ratio they had when resizing started. + preserveAspectRatio: false, + + // a value of 'none' will limit the resize rect to a minimum of 0x0 + // 'negate' will allow the rect to have negative width/height + // 'reposition' will keep the width/height positive by swapping + // the top and bottom edges and/or swapping the left and right edges + invert: 'none' || 'negate' || 'reposition' + + // limit multiple resizes. + // See the explanation in the {@link Interactable.draggable} example + max: Infinity, + maxPerElement: 1, +}) + +var isResizeable = interact(element).resizable() +``` + +Gets or sets whether resize actions can be performed on the target + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `options?` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`ResizableOptions`\>\> | true/false or An object with event listeners to be fired on resize events (object makes the Interactable resizable) | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) \| `ResizableOptions` + +A boolean indicating if this can be the +target of resize elements, or this Interactable + +#### Defined in + +[actions/resize/plugin.ts:71](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L71) + +___ + +### set + +▸ **set**(`options`): [`Interactable`](core_Interactable.Interactable.md) + +Reset the options of this Interactable + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `options` | [`OptionsArg`](../interfaces/core_options.OptionsArg.md) | The new settings to apply | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +This Interactable + +#### Defined in + +[core/Interactable.ts:436](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L436) + +___ + +### setOnEvents + +▸ **setOnEvents**(`actionName`, `phases`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `actionName` | keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) | +| `phases` | `any` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/Interactable.ts:84](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L84) + +___ + +### setPerAction + +▸ **setPerAction**(`actionName`, `options`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `actionName` | keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) | +| `options` | [`OrBoolean`](../modules/core_types.md#orboolean)\<[`Options`](../modules/core_options.md#options)\> | + +#### Returns + +`void` + +#### Defined in + +[core/Interactable.ts:116](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L116) + +___ + +### styleCursor + +▸ **styleCursor**(`newValue`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue` | `boolean` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[auto-start/InteractableMethods.ts:17](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L17) + +▸ **styleCursor**(): `boolean` + +#### Returns + +`boolean` + +#### Defined in + +[auto-start/InteractableMethods.ts:18](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L18) + +▸ **styleCursor**(`newValue?`): `boolean` \| [`Interactable`](core_Interactable.Interactable.md) + +Returns or sets whether the the cursor should be changed depending on the +action that would be performed if the mouse were pressed and dragged. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue?` | `boolean` | + +#### Returns + +`boolean` \| [`Interactable`](core_Interactable.Interactable.md) + +The current setting or this Interactable + +#### Defined in + +[auto-start/InteractableMethods.ts:26](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/InteractableMethods.ts#L26) + +___ + +### unset + +▸ **unset**(): `void` + +Remove this interactable from the list of interactables and remove it's +action capabilities and event listeners + +#### Returns + +`void` + +#### Defined in + +[core/Interactable.ts:472](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L472) + +___ + +### updatePerActionListeners + +▸ **updatePerActionListeners**(`actionName`, `prev`, `cur`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `actionName` | keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) | +| `prev` | [`Listeners`](../modules/core_types.md#listeners) | +| `cur` | [`Listeners`](../modules/core_types.md#listeners) | + +#### Returns + +`void` + +#### Defined in + +[core/Interactable.ts:101](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interactable.ts#L101) diff --git a/dist/api/classes/core_InteractableSet.InteractableSet.md b/dist/api/classes/core_InteractableSet.InteractableSet.md new file mode 100644 index 000000000..5d0721e56 --- /dev/null +++ b/dist/api/classes/core_InteractableSet.InteractableSet.md @@ -0,0 +1,122 @@ +[@interactjs](../README.md) / [core/InteractableSet](../modules/core_InteractableSet.md) / InteractableSet + +# Class: InteractableSet + +[core/InteractableSet](../modules/core_InteractableSet.md).InteractableSet + +## Table of contents + +### Properties + +- [list](core_InteractableSet.InteractableSet.md#list) +- [scope](core_InteractableSet.InteractableSet.md#scope) +- [selectorMap](core_InteractableSet.InteractableSet.md#selectormap) + +### Methods + +- [forEachMatch](core_InteractableSet.InteractableSet.md#foreachmatch) +- [getExisting](core_InteractableSet.InteractableSet.md#getexisting) +- [new](core_InteractableSet.InteractableSet.md#new) + +## Properties + +### list + +• **list**: [`Interactable`](core_Interactable.Interactable.md)[] = `[]` + +#### Defined in + +[core/InteractableSet.ts:24](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L24) + +___ + +### scope + +• **scope**: `Scope` + +#### Defined in + +[core/InteractableSet.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L30) + +___ + +### selectorMap + +• **selectorMap**: `Object` = `{}` + +#### Index signature + +▪ [selector: `string`]: [`Interactable`](core_Interactable.Interactable.md)[] + +#### Defined in + +[core/InteractableSet.ts:26](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L26) + +## Methods + +### forEachMatch + +▸ **forEachMatch**\<`T`\>(`node`, `callback`): `void` \| `T` + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `node` | `Node` | +| `callback` | (`interactable`: [`Interactable`](core_Interactable.Interactable.md)) => `T` | + +#### Returns + +`void` \| `T` + +#### Defined in + +[core/InteractableSet.ts:98](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L98) + +___ + +### getExisting + +▸ **getExisting**(`target`, `options?`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `target` | [`Target`](../modules/core_types.md#target) | +| `options?` | [`Options`](../modules/core_options.md#options) | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/InteractableSet.ts:82](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L82) + +___ + +### new + +▸ **new**(`target`, `options?`): [`Interactable`](core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `target` | [`Target`](../modules/core_types.md#target) | +| `options?` | `any` | + +#### Returns + +[`Interactable`](core_Interactable.Interactable.md) + +#### Defined in + +[core/InteractableSet.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L47) diff --git a/dist/api/classes/core_Interaction.Interaction.md b/dist/api/classes/core_Interaction.Interaction.md new file mode 100644 index 000000000..3ba65da0e --- /dev/null +++ b/dist/api/classes/core_Interaction.Interaction.md @@ -0,0 +1,632 @@ +[@interactjs](../README.md) / [core/Interaction](../modules/core_Interaction.md) / Interaction + +# Class: Interaction\ + +[core/Interaction](../modules/core_Interaction.md).Interaction + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends [`ActionName`](../modules/core_types.md#actionname) \| ``null`` = [`ActionName`](../modules/core_types.md#actionname) | + +## Table of contents + +### Properties + +- [\_reflowPromise](core_Interaction.Interaction.md#_reflowpromise) +- [\_reflowResolve](core_Interaction.Interaction.md#_reflowresolve) +- [autoScroll](core_Interaction.Interaction.md#autoscroll) +- [autoStartHoldTimer](core_Interaction.Interaction.md#autostartholdtimer) +- [coords](core_Interaction.Interaction.md#coords) +- [doMove](core_Interaction.Interaction.md#domove) +- [dropState](core_Interaction.Interaction.md#dropstate) +- [element](core_Interaction.Interaction.md#element) +- [gesture](core_Interaction.Interaction.md#gesture) +- [holdIntervalHandle](core_Interaction.Interaction.md#holdintervalhandle) +- [inertia](core_Interaction.Interaction.md#inertia) +- [interactable](core_Interaction.Interaction.md#interactable) +- [modification](core_Interaction.Interaction.md#modification) +- [offset](core_Interaction.Interaction.md#offset) +- [offsetBy](core_Interaction.Interaction.md#offsetby) +- [pointerIsDown](core_Interaction.Interaction.md#pointerisdown) +- [pointerType](core_Interaction.Interaction.md#pointertype) +- [pointerWasMoved](core_Interaction.Interaction.md#pointerwasmoved) +- [prepared](core_Interaction.Interaction.md#prepared) +- [prevTap](core_Interaction.Interaction.md#prevtap) +- [rect](core_Interaction.Interaction.md#rect) +- [resizeAxes](core_Interaction.Interaction.md#resizeaxes) +- [resizeStartAspectRatio](core_Interaction.Interaction.md#resizestartaspectratio) +- [tapTime](core_Interaction.Interaction.md#taptime) + +### Methods + +- [currentAction](core_Interaction.Interaction.md#currentaction) +- [destroy](core_Interaction.Interaction.md#destroy) +- [end](core_Interaction.Interaction.md#end) +- [interacting](core_Interaction.Interaction.md#interacting) +- [move](core_Interaction.Interaction.md#move) +- [pointerDown](core_Interaction.Interaction.md#pointerdown) +- [pointerMove](core_Interaction.Interaction.md#pointermove) +- [start](core_Interaction.Interaction.md#start) +- [stop](core_Interaction.Interaction.md#stop) +- [styleCursor](core_Interaction.Interaction.md#stylecursor) + +## Properties + +### \_reflowPromise + +• **\_reflowPromise**: `Promise`\<`void`\> + +#### Defined in + +[reflow/plugin.ts:42](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L42) + +___ + +### \_reflowResolve + +• **\_reflowResolve**: (...`args`: `unknown`[]) => `void` + +#### Type declaration + +▸ (`...args`): `void` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | `unknown`[] | + +##### Returns + +`void` + +#### Defined in + +[reflow/plugin.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L43) + +___ + +### autoScroll + +• `Optional` **autoScroll**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `defaults` | [`AutoScrollOptions`](../interfaces/auto_scroll_plugin.AutoScrollOptions.md) | +| `i` | `number` | +| `interaction` | [`Interaction`](core_Interaction.Interaction.md)\ | +| `isScrolling` | `boolean` | +| `margin` | `number` | +| `now` | () => `number` | +| `prevTime` | `number` | +| `speed` | `number` | +| `x` | `number` | +| `y` | `number` | +| `check` | (`interactable`: [`Interactable`](core_Interactable.Interactable.md), `actionName`: keyof [`ActionMap`](../interfaces/core_types.ActionMap.md)) => `boolean` | +| `onInteractionMove` | \(`__namedParameters`: \{ `interaction`: [`Interaction`](core_Interaction.Interaction.md)\<`T`\> ; `pointer`: [`PointerType`](../modules/core_types.md#pointertype) }) => `void` | +| `scroll` | () => `void` | +| `start` | (`interaction`: [`Interaction`](core_Interaction.Interaction.md)\) => `void` | +| `stop` | () => `void` | + +#### Defined in + +[auto-scroll/plugin.ts:19](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L19) + +___ + +### autoStartHoldTimer + +• `Optional` **autoStartHoldTimer**: `any` + +#### Defined in + +[auto-start/hold.ts:18](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/hold.ts#L18) + +___ + +### coords + +• **coords**: [`CoordsSet`](../interfaces/core_types.CoordsSet.md) + +#### Defined in + +[core/Interaction.ts:175](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L175) + +___ + +### doMove + +• **doMove**: (`this`: `void`) => `any` + +#### Type declaration + +▸ (`this`): `any` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | `void` | + +##### Returns + +`any` + +#### Defined in + +[core/Interaction.ts:171](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L171) + +___ + +### dropState + +• `Optional` **dropState**: `DropState` + +#### Defined in + +[actions/drop/plugin.ts:128](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L128) + +___ + +### element + +• **element**: [`Element`](../modules/core_types.md#element) = `null` + +the target element of the interactable + +#### Defined in + +[core/Interaction.ts:113](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L113) + +___ + +### gesture + +• `Optional` **gesture**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `angle` | `number` | +| `distance` | `number` | +| `scale` | `number` | +| `startAngle` | `number` | +| `startDistance` | `number` | + +#### Defined in + +[actions/gesture/plugin.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L12) + +___ + +### holdIntervalHandle + +• `Optional` **holdIntervalHandle**: `any` + +#### Defined in + +[pointer-events/holdRepeat.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/holdRepeat.ts#L12) + +___ + +### inertia + +• `Optional` **inertia**: [`InertiaState`](inertia_plugin.InertiaState.md) + +#### Defined in + +[inertia/plugin.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L27) + +___ + +### interactable + +• **interactable**: [`Interactable`](core_Interactable.Interactable.md) = `null` + +current interactable being interacted with + +#### Defined in + +[core/Interaction.ts:110](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L110) + +___ + +### modification + +• `Optional` **modification**: [`Modification`](modifiers_Modification.Modification.md) + +#### Defined in + +[modifiers/base.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L10) + +___ + +### offset + +• **offset**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `pending` | [`Point`](../interfaces/core_types.Point.md) | +| `total` | [`Point`](../interfaces/core_types.Point.md) | + +#### Defined in + +[offset/plugin.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/offset/plugin.ts#L10) + +___ + +### offsetBy + +• `Optional` **offsetBy**: (`this`: [`Interaction`](core_Interaction.Interaction.md)\, `__namedParameters`: [`Point`](../interfaces/core_types.Point.md)) => `void` + +#### Type declaration + +▸ (`this`, `«destructured»`): `void` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | [`Interaction`](core_Interaction.Interaction.md)\ | +| `«destructured»` | [`Point`](../interfaces/core_types.Point.md) | + +##### Returns + +`void` + +#### Defined in + +[offset/plugin.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/offset/plugin.ts#L9) + +___ + +### pointerIsDown + +• **pointerIsDown**: `boolean` = `false` + +#### Defined in + +[core/Interaction.ts:158](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L158) + +___ + +### pointerType + +• **pointerType**: `string` + +#### Defined in + +[core/Interaction.ts:135](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L135) + +___ + +### pointerWasMoved + +• **pointerWasMoved**: `boolean` = `false` + +#### Defined in + +[core/Interaction.ts:159](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L159) + +___ + +### prepared + +• **prepared**: [`ActionProps`](../interfaces/core_types.ActionProps.md)\<`T`\> + +#### Defined in + +[core/Interaction.ts:129](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L129) + +___ + +### prevTap + +• `Optional` **prevTap**: [`PointerEvent`](pointer_events_PointerEvent.PointerEvent.md)\<`string`\> + +#### Defined in + +[pointer-events/base.ts:34](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L34) + +___ + +### rect + +• **rect**: `Required`\<[`Rect`](../interfaces/core_types.Rect.md)\> = `null` + +#### Defined in + +[core/Interaction.ts:114](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L114) + +___ + +### resizeAxes + +• **resizeAxes**: ``"x"`` \| ``"y"`` \| ``"xy"`` + +#### Defined in + +[actions/resize/plugin.ts:77](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L77) + +___ + +### resizeStartAspectRatio + +• **resizeStartAspectRatio**: `number` + +#### Defined in + +[actions/resize/plugin.ts:80](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L80) + +___ + +### tapTime + +• `Optional` **tapTime**: `number` + +#### Defined in + +[pointer-events/base.ts:35](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L35) + +## Methods + +### currentAction + +▸ **currentAction**(): `T` + +#### Returns + +`T` + +#### Defined in + +[core/Interaction.ts:459](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L459) + +___ + +### destroy + +▸ **destroy**(): `void` + +#### Returns + +`void` + +#### Defined in + +[core/Interaction.ts:575](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L575) + +___ + +### end + +▸ **end**(`event?`): `void` + +```js +interact(target) + .draggable(true) + .on('move', function (event) { + if (event.pageX > 1000) { + // end the current action + event.interaction.end() + // stop all further listeners from being called + event.stopImmediatePropagation() + } + }) +``` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `event?` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | + +#### Returns + +`void` + +#### Defined in + +[core/Interaction.ts:439](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L439) + +___ + +### interacting + +▸ **interacting**(): `boolean` + +#### Returns + +`boolean` + +#### Defined in + +[core/Interaction.ts:463](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L463) + +___ + +### move + +▸ **move**(`signalArg?`): `void` + +```js +interact(target) + .draggable(true) + .on('dragmove', function (event) { + if (someCondition) { + // change the snap settings + event.interactable.draggable({ snap: { targets: [] }}) + // fire another move event with re-calculated snap + event.interaction.move() + } + }) +``` + +Force a move of the current action at the same coordinates. Useful if +snap/restrict has been changed and you want a movement with the new +settings. + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `signalArg?` | `any` | + +#### Returns + +`void` + +#### Defined in + +[core/Interaction.ts:364](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L364) + +___ + +### pointerDown + +▸ **pointerDown**(`pointer`, `event`, `eventTarget`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `pointer` | [`PointerType`](../modules/core_types.md#pointertype) | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | +| `eventTarget` | `Node` | + +#### Returns + +`void` + +#### Defined in + +[core/Interaction.ts:215](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L215) + +___ + +### pointerMove + +▸ **pointerMove**(`pointer`, `event`, `eventTarget`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `pointer` | [`PointerType`](../modules/core_types.md#pointertype) | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | +| `eventTarget` | `Node` | + +#### Returns + +`void` + +#### Defined in + +[core/Interaction.ts:290](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L290) + +___ + +### start + +▸ **start**\<`A`\>(`action`, `interactable`, `element`): `boolean` + +```js +interact(target) + .draggable({ + // disable the default drag start by down->move + manualStart: true + }) + // start dragging after the user holds the pointer down + .on('hold', function (event) { + var interaction = event.interaction + + if (!interaction.interacting()) { + interaction.start({ name: 'drag' }, + event.interactable, + event.currentTarget) + } +}) +``` + +Start an action with the given Interactable and Element as tartgets. The +action must be enabled for the target Interactable and an appropriate +number of pointers must be held down - 1 for drag/resize, 2 for gesture. + +Use it with `interactable.able({ manualStart: false })` to always +[start actions manually](https://github.com/taye/interact.js/issues/114) + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `A` | extends keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `action` | [`ActionProps`](../interfaces/core_types.ActionProps.md)\<`A`\> | The action to be performed - drag, resize, etc. | +| `interactable` | [`Interactable`](core_Interactable.Interactable.md) | - | +| `element` | [`Element`](../modules/core_types.md#element) | The DOM Element to target | + +#### Returns + +`boolean` + +Whether the interaction was successfully started + +#### Defined in + +[core/Interaction.ts:261](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L261) + +___ + +### stop + +▸ **stop**(): `void` + +#### Returns + +`void` + +#### Defined in + +[core/Interaction.ts:467](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L467) + +___ + +### styleCursor + +▸ **styleCursor**(`newValue`): [`Interaction`](core_Interaction.Interaction.md)\<`T`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `newValue` | `boolean` | + +#### Returns + +[`Interaction`](core_Interaction.Interaction.md)\<`T`\> + +#### Defined in + +[actions/resize/plugin.ts:78](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L78) + +▸ **styleCursor**(): `boolean` + +#### Returns + +`boolean` + +#### Defined in + +[actions/resize/plugin.ts:79](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L79) diff --git a/dist/api/classes/core_Interaction.PointerInfo.md b/dist/api/classes/core_Interaction.PointerInfo.md new file mode 100644 index 000000000..ad8e77bc7 --- /dev/null +++ b/dist/api/classes/core_Interaction.PointerInfo.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / [core/Interaction](../modules/core_Interaction.md) / PointerInfo + +# Class: PointerInfo + +[core/Interaction](../modules/core_Interaction.md).PointerInfo + +## Table of contents + +### Properties + +- [downTarget](core_Interaction.PointerInfo.md#downtarget) +- [downTime](core_Interaction.PointerInfo.md#downtime) +- [event](core_Interaction.PointerInfo.md#event) +- [hold](core_Interaction.PointerInfo.md#hold) +- [id](core_Interaction.PointerInfo.md#id) +- [pointer](core_Interaction.PointerInfo.md#pointer) + +## Properties + +### downTarget + +• **downTarget**: `Node` + +#### Defined in + +[core/PointerInfo.ts:8](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/PointerInfo.ts#L8) + +___ + +### downTime + +• **downTime**: `number` + +#### Defined in + +[core/PointerInfo.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/PointerInfo.ts#L7) + +___ + +### event + +• **event**: [`PointerEventType`](../modules/core_types.md#pointereventtype) + +#### Defined in + +[core/PointerInfo.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/PointerInfo.ts#L6) + +___ + +### hold + +• `Optional` **hold**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `duration` | `number` | +| `timeout` | `any` | + +#### Defined in + +[pointer-events/base.ts:41](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L41) + +___ + +### id + +• **id**: `number` + +#### Defined in + +[core/PointerInfo.ts:4](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/PointerInfo.ts#L4) + +___ + +### pointer + +• **pointer**: [`PointerType`](../modules/core_types.md#pointertype) + +#### Defined in + +[core/PointerInfo.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/PointerInfo.ts#L5) diff --git a/dist/api/classes/inertia_plugin.InertiaState.md b/dist/api/classes/inertia_plugin.InertiaState.md new file mode 100644 index 000000000..596790809 --- /dev/null +++ b/dist/api/classes/inertia_plugin.InertiaState.md @@ -0,0 +1,364 @@ +[@interactjs](../README.md) / [inertia/plugin](../modules/inertia_plugin.md) / InertiaState + +# Class: InertiaState + +[inertia/plugin](../modules/inertia_plugin.md).InertiaState + +## Table of contents + +### Properties + +- [active](inertia_plugin.InertiaState.md#active) +- [allowResume](inertia_plugin.InertiaState.md#allowresume) +- [currentOffset](inertia_plugin.InertiaState.md#currentoffset) +- [interaction](inertia_plugin.InertiaState.md#interaction) +- [isModified](inertia_plugin.InertiaState.md#ismodified) +- [lambda\_v0](inertia_plugin.InertiaState.md#lambda_v0) +- [modification](inertia_plugin.InertiaState.md#modification) +- [modifiedOffset](inertia_plugin.InertiaState.md#modifiedoffset) +- [modifierArg](inertia_plugin.InertiaState.md#modifierarg) +- [modifierCount](inertia_plugin.InertiaState.md#modifiercount) +- [one\_ve\_v0](inertia_plugin.InertiaState.md#one_ve_v0) +- [smoothEnd](inertia_plugin.InertiaState.md#smoothend) +- [startCoords](inertia_plugin.InertiaState.md#startcoords) +- [t0](inertia_plugin.InertiaState.md#t0) +- [targetOffset](inertia_plugin.InertiaState.md#targetoffset) +- [te](inertia_plugin.InertiaState.md#te) +- [timeout](inertia_plugin.InertiaState.md#timeout) +- [v0](inertia_plugin.InertiaState.md#v0) + +### Methods + +- [end](inertia_plugin.InertiaState.md#end) +- [inertiaTick](inertia_plugin.InertiaState.md#inertiatick) +- [onNextFrame](inertia_plugin.InertiaState.md#onnextframe) +- [resume](inertia_plugin.InertiaState.md#resume) +- [smoothEndTick](inertia_plugin.InertiaState.md#smoothendtick) +- [start](inertia_plugin.InertiaState.md#start) +- [startInertia](inertia_plugin.InertiaState.md#startinertia) +- [startSmoothEnd](inertia_plugin.InertiaState.md#startsmoothend) +- [stop](inertia_plugin.InertiaState.md#stop) + +## Properties + +### active + +• **active**: `boolean` = `false` + +#### Defined in + +[inertia/plugin.ts:74](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L74) + +___ + +### allowResume + +• **allowResume**: `boolean` = `false` + +#### Defined in + +[inertia/plugin.ts:77](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L77) + +___ + +### currentOffset + +• **currentOffset**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[inertia/plugin.ts:90](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L90) + +___ + +### interaction + +• `Readonly` **interaction**: [`Interaction`](core_Interaction.Interaction.md)\ + +#### Defined in + +[inertia/plugin.ts:95](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L95) + +___ + +### isModified + +• **isModified**: `boolean` = `false` + +#### Defined in + +[inertia/plugin.ts:75](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L75) + +___ + +### lambda\_v0 + +• `Optional` **lambda\_v0**: `number` = `0` + +#### Defined in + +[inertia/plugin.ts:92](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L92) + +___ + +### modification + +• **modification**: [`Modification`](modifiers_Modification.Modification.md) + +#### Defined in + +[inertia/plugin.ts:79](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L79) + +___ + +### modifiedOffset + +• **modifiedOffset**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[inertia/plugin.ts:89](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L89) + +___ + +### modifierArg + +• **modifierArg**: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }\> + +#### Defined in + +[inertia/plugin.ts:81](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L81) + +___ + +### modifierCount + +• **modifierCount**: `number` = `0` + +#### Defined in + +[inertia/plugin.ts:80](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L80) + +___ + +### one\_ve\_v0 + +• `Optional` **one\_ve\_v0**: `number` = `0` + +#### Defined in + +[inertia/plugin.ts:93](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L93) + +___ + +### smoothEnd + +• **smoothEnd**: `boolean` = `false` + +#### Defined in + +[inertia/plugin.ts:76](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L76) + +___ + +### startCoords + +• **startCoords**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[inertia/plugin.ts:83](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L83) + +___ + +### t0 + +• **t0**: `number` = `0` + +#### Defined in + +[inertia/plugin.ts:84](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L84) + +___ + +### targetOffset + +• **targetOffset**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[inertia/plugin.ts:88](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L88) + +___ + +### te + +• **te**: `number` = `0` + +#### Defined in + +[inertia/plugin.ts:87](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L87) + +___ + +### timeout + +• **timeout**: `number` + +#### Defined in + +[inertia/plugin.ts:94](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L94) + +___ + +### v0 + +• **v0**: `number` = `0` + +#### Defined in + +[inertia/plugin.ts:85](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L85) + +## Methods + +### end + +▸ **end**(): `void` + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:319](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L319) + +___ + +### inertiaTick + +▸ **inertiaTick**(): `void` + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:218](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L218) + +___ + +### onNextFrame + +▸ **onNextFrame**(`tickFn`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `tickFn` | () => `void` | + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:210](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L210) + +___ + +### resume + +▸ **resume**(`«destructured»`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | [`PointerArgProps`](../modules/core_Interaction.md#pointerargprops)\<\{ `type`: ``"down"`` }\> | + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:296](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L296) + +___ + +### smoothEndTick + +▸ **smoothEndTick**(): `void` + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:264](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L264) + +___ + +### start + +▸ **start**(`event`): `boolean` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | + +#### Returns + +`boolean` + +#### Defined in + +[inertia/plugin.ts:101](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L101) + +___ + +### startInertia + +▸ **startInertia**(): `void` + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:164](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L164) + +___ + +### startSmoothEnd + +▸ **startSmoothEnd**(): `void` + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:199](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L199) + +___ + +### stop + +▸ **stop**(): `void` + +#### Returns + +`void` + +#### Defined in + +[inertia/plugin.ts:325](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L325) diff --git a/dist/api/classes/modifiers_Modification.Modification.md b/dist/api/classes/modifiers_Modification.Modification.md new file mode 100644 index 000000000..8ffdc8c98 --- /dev/null +++ b/dist/api/classes/modifiers_Modification.Modification.md @@ -0,0 +1,377 @@ +[@interactjs](../README.md) / [modifiers/Modification](../modules/modifiers_Modification.md) / Modification + +# Class: Modification + +[modifiers/Modification](../modules/modifiers_Modification.md).Modification + +## Table of contents + +### Properties + +- [edges](modifiers_Modification.Modification.md#edges) +- [endResult](modifiers_Modification.Modification.md#endresult) +- [interaction](modifiers_Modification.Modification.md#interaction) +- [result](modifiers_Modification.Modification.md#result) +- [startDelta](modifiers_Modification.Modification.md#startdelta) +- [startEdges](modifiers_Modification.Modification.md#startedges) +- [startOffset](modifiers_Modification.Modification.md#startoffset) +- [states](modifiers_Modification.Modification.md#states) + +### Methods + +- [applyToInteraction](modifiers_Modification.Modification.md#applytointeraction) +- [beforeEnd](modifiers_Modification.Modification.md#beforeend) +- [copyFrom](modifiers_Modification.Modification.md#copyfrom) +- [destroy](modifiers_Modification.Modification.md#destroy) +- [fillArg](modifiers_Modification.Modification.md#fillarg) +- [prepareStates](modifiers_Modification.Modification.md#preparestates) +- [restoreInteractionCoords](modifiers_Modification.Modification.md#restoreinteractioncoords) +- [setAll](modifiers_Modification.Modification.md#setall) +- [setAndApply](modifiers_Modification.Modification.md#setandapply) +- [shouldDo](modifiers_Modification.Modification.md#shoulddo) +- [start](modifiers_Modification.Modification.md#start) +- [startAll](modifiers_Modification.Modification.md#startall) +- [stop](modifiers_Modification.Modification.md#stop) + +## Properties + +### edges + +• **edges**: [`EdgeOptions`](../interfaces/core_types.EdgeOptions.md) + +#### Defined in + +[modifiers/Modification.ts:35](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L35) + +___ + +### endResult + +• **endResult**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[modifiers/Modification.ts:33](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L33) + +___ + +### interaction + +• `Readonly` **interaction**: `Readonly`\<[`Interaction`](core_Interaction.Interaction.md)\\> + +#### Defined in + +[modifiers/Modification.ts:36](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L36) + +___ + +### result + +• **result**: [`ModificationResult`](../interfaces/modifiers_Modification.ModificationResult.md) + +#### Defined in + +[modifiers/Modification.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L32) + +___ + +### startDelta + +• **startDelta**: [`Point`](../interfaces/core_types.Point.md) + +#### Defined in + +[modifiers/Modification.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L31) + +___ + +### startEdges + +• **startEdges**: [`EdgeOptions`](../interfaces/core_types.EdgeOptions.md) + +#### Defined in + +[modifiers/Modification.ts:34](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L34) + +___ + +### startOffset + +• **startOffset**: [`Rect`](../interfaces/core_types.Rect.md) + +#### Defined in + +[modifiers/Modification.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L30) + +___ + +### states + +• **states**: \{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }[] = `[]` + +#### Defined in + +[modifiers/Modification.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L29) + +## Methods + +### applyToInteraction + +▸ **applyToInteraction**(`arg`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `Object` | +| `arg.phase` | keyof [`PhaseMap`](../interfaces/core_InteractEvent.PhaseMap.md) | +| `arg.rect?` | [`Rect`](../interfaces/core_types.Rect.md) | + +#### Returns + +`void` + +#### Defined in + +[modifiers/Modification.ts:151](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L151) + +___ + +### beforeEnd + +▸ **beforeEnd**(`arg`): ``false`` \| `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `Omit`\<[`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg), ``"iEvent"``\> & \{ `state?`: \{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` } } | + +#### Returns + +``false`` \| `void` + +#### Defined in + +[modifiers/Modification.ts:232](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L232) + +___ + +### copyFrom + +▸ **copyFrom**(`other`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `other` | [`Modification`](modifiers_Modification.Modification.md) | + +#### Returns + +`void` + +#### Defined in + +[modifiers/Modification.ts:352](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L352) + +___ + +### destroy + +▸ **destroy**(): `void` + +#### Returns + +`void` + +#### Defined in + +[modifiers/Modification.ts:361](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L361) + +___ + +### fillArg + +▸ **fillArg**(`arg`): [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `Partial`\<[`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }\>\> | + +#### Returns + +[`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }\> + +#### Defined in + +[modifiers/Modification.ts:73](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L73) + +___ + +### prepareStates + +▸ **prepareStates**(`modifierList`): \{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }[] + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `modifierList` | [`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`any`, `any`, `any`, `any`\>[] | + +#### Returns + +\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }[] + +#### Defined in + +[modifiers/Modification.ts:293](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L293) + +___ + +### restoreInteractionCoords + +▸ **restoreInteractionCoords**(`«destructured»`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | `Object` | +| › `interaction` | [`Interaction`](core_Interaction.Interaction.md)\ | + +#### Returns + +`void` + +#### Defined in + +[modifiers/Modification.ts:310](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L310) + +___ + +### setAll + +▸ **setAll**(`arg`): [`ModificationResult`](../interfaces/modifiers_Modification.ModificationResult.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `MethodArg` & `Partial`\<[`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }\>\> | + +#### Returns + +[`ModificationResult`](../interfaces/modifiers_Modification.ModificationResult.md) + +#### Defined in + +[modifiers/Modification.ts:95](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L95) + +___ + +### setAndApply + +▸ **setAndApply**(`arg`): ``false`` \| `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `Partial`\<[`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg)\> & \{ `modifiedCoords?`: [`Point`](../interfaces/core_types.Point.md) ; `phase`: keyof [`PhaseMap`](../interfaces/core_InteractEvent.PhaseMap.md) ; `preEnd?`: `boolean` ; `skipModifiers?`: `number` } | + +#### Returns + +``false`` \| `void` + +#### Defined in + +[modifiers/Modification.ts:185](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L185) + +___ + +### shouldDo + +▸ **shouldDo**(`options`, `preEnd?`, `phase?`, `requireEndOnly?`): `boolean` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `options` | `any` | +| `preEnd?` | `boolean` | +| `phase?` | `string` | +| `requireEndOnly?` | `boolean` | + +#### Returns + +`boolean` + +#### Defined in + +[modifiers/Modification.ts:334](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L334) + +___ + +### start + +▸ **start**(`«destructured»`, `pageCoords`): [`ModificationResult`](../interfaces/modifiers_Modification.ModificationResult.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | `Object` | +| › `phase` | keyof [`PhaseMap`](../interfaces/core_InteractEvent.PhaseMap.md) | +| `pageCoords` | [`Point`](../interfaces/core_types.Point.md) | + +#### Returns + +[`ModificationResult`](../interfaces/modifiers_Modification.ModificationResult.md) + +#### Defined in + +[modifiers/Modification.ts:49](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L49) + +___ + +### startAll + +▸ **startAll**(`arg`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `MethodArg` & `Partial`\<[`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<\{ `index?`: `number` ; `methods?`: \{ `beforeEnd?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) ; `set?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `any` ; `start?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` ; `stop?`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`any`\>) => `void` } ; `name?`: `any` ; `options`: `unknown` }\>\> | + +#### Returns + +`void` + +#### Defined in + +[modifiers/Modification.ts:86](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L86) + +___ + +### stop + +▸ **stop**(`arg`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | `Object` | +| `arg.interaction` | [`Interaction`](core_Interaction.Interaction.md)\ | + +#### Returns + +`void` + +#### Defined in + +[modifiers/Modification.ts:262](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L262) diff --git a/dist/api/classes/pointer_events_PointerEvent.PointerEvent.md b/dist/api/classes/pointer_events_PointerEvent.PointerEvent.md new file mode 100644 index 000000000..8c7c1f5a1 --- /dev/null +++ b/dist/api/classes/pointer_events_PointerEvent.PointerEvent.md @@ -0,0 +1,371 @@ +[@interactjs](../README.md) / [pointer-events/PointerEvent](../modules/pointer_events_PointerEvent.md) / PointerEvent + +# Class: PointerEvent\ + +[pointer-events/PointerEvent](../modules/pointer_events_PointerEvent.md).PointerEvent + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `string` = `any` | + +## Hierarchy + +- [`BaseEvent`](core_BaseEvent.BaseEvent.md)\<`never`\> + + ↳ **`PointerEvent`** + +## Table of contents + +### Properties + +- [clientX](pointer_events_PointerEvent.PointerEvent.md#clientx) +- [clientY](pointer_events_PointerEvent.PointerEvent.md#clienty) +- [count](pointer_events_PointerEvent.PointerEvent.md#count) +- [currentTarget](pointer_events_PointerEvent.PointerEvent.md#currenttarget) +- [double](pointer_events_PointerEvent.PointerEvent.md#double) +- [dt](pointer_events_PointerEvent.PointerEvent.md#dt) +- [eventable](pointer_events_PointerEvent.PointerEvent.md#eventable) +- [immediatePropagationStopped](pointer_events_PointerEvent.PointerEvent.md#immediatepropagationstopped) +- [interactable](pointer_events_PointerEvent.PointerEvent.md#interactable) +- [interaction](pointer_events_PointerEvent.PointerEvent.md#interaction) +- [originalEvent](pointer_events_PointerEvent.PointerEvent.md#originalevent) +- [pageX](pointer_events_PointerEvent.PointerEvent.md#pagex) +- [pageY](pointer_events_PointerEvent.PointerEvent.md#pagey) +- [pointerId](pointer_events_PointerEvent.PointerEvent.md#pointerid) +- [pointerType](pointer_events_PointerEvent.PointerEvent.md#pointertype) +- [propagationStopped](pointer_events_PointerEvent.PointerEvent.md#propagationstopped) +- [target](pointer_events_PointerEvent.PointerEvent.md#target) +- [timeStamp](pointer_events_PointerEvent.PointerEvent.md#timestamp) +- [type](pointer_events_PointerEvent.PointerEvent.md#type) + +### Methods + +- [\_addOrigin](pointer_events_PointerEvent.PointerEvent.md#_addorigin) +- [\_subtractOrigin](pointer_events_PointerEvent.PointerEvent.md#_subtractorigin) +- [preventDefault](pointer_events_PointerEvent.PointerEvent.md#preventdefault) +- [stopImmediatePropagation](pointer_events_PointerEvent.PointerEvent.md#stopimmediatepropagation) +- [stopPropagation](pointer_events_PointerEvent.PointerEvent.md#stoppropagation) + +## Properties + +### clientX + +• **clientX**: `number` + +#### Defined in + +[pointer-events/PointerEvent.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L14) + +___ + +### clientY + +• **clientY**: `number` + +#### Defined in + +[pointer-events/PointerEvent.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L15) + +___ + +### count + +• `Optional` **count**: `number` + +#### Defined in + +[pointer-events/holdRepeat.ts:18](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/holdRepeat.ts#L18) + +___ + +### currentTarget + +• **currentTarget**: `Node` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[currentTarget](core_BaseEvent.BaseEvent.md#currenttarget) + +#### Defined in + +[core/BaseEvent.ts:8](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L8) + +___ + +### double + +• **double**: `boolean` + +#### Defined in + +[pointer-events/PointerEvent.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L11) + +___ + +### dt + +• **dt**: `number` + +#### Defined in + +[pointer-events/PointerEvent.ts:16](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L16) + +___ + +### eventable + +• **eventable**: `any` + +#### Defined in + +[pointer-events/PointerEvent.ts:17](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L17) + +___ + +### immediatePropagationStopped + +• **immediatePropagationStopped**: `boolean` = `false` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[immediatePropagationStopped](core_BaseEvent.BaseEvent.md#immediatepropagationstopped) + +#### Defined in + +[core/BaseEvent.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L13) + +___ + +### interactable + +• **interactable**: [`Interactable`](core_Interactable.Interactable.md) + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[interactable](core_BaseEvent.BaseEvent.md#interactable) + +#### Defined in + +[core/BaseEvent.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L9) + +___ + +### interaction + +• **interaction**: [`InteractionProxy`](../modules/core_Interaction.md#interactionproxy)\<`never`\> + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[interaction](core_BaseEvent.BaseEvent.md#interaction) + +#### Defined in + +[core/BaseEvent.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L40) + +___ + +### originalEvent + +• **originalEvent**: [`PointerEventType`](../modules/core_types.md#pointereventtype) + +#### Defined in + +[pointer-events/PointerEvent.ts:8](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L8) + +___ + +### pageX + +• **pageX**: `number` + +#### Defined in + +[pointer-events/PointerEvent.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L12) + +___ + +### pageY + +• **pageY**: `number` + +#### Defined in + +[pointer-events/PointerEvent.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L13) + +___ + +### pointerId + +• **pointerId**: `number` + +#### Defined in + +[pointer-events/PointerEvent.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L9) + +___ + +### pointerType + +• **pointerType**: `string` + +#### Defined in + +[pointer-events/PointerEvent.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L10) + +___ + +### propagationStopped + +• **propagationStopped**: `boolean` = `false` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[propagationStopped](core_BaseEvent.BaseEvent.md#propagationstopped) + +#### Defined in + +[core/BaseEvent.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L14) + +___ + +### target + +• **target**: `EventTarget` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[target](core_BaseEvent.BaseEvent.md#target) + +#### Defined in + +[core/BaseEvent.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L7) + +___ + +### timeStamp + +• **timeStamp**: `number` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[timeStamp](core_BaseEvent.BaseEvent.md#timestamp) + +#### Defined in + +[core/BaseEvent.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L12) + +___ + +### type + +• **type**: `T` + +#### Overrides + +[BaseEvent](core_BaseEvent.BaseEvent.md).[type](core_BaseEvent.BaseEvent.md#type) + +#### Defined in + +[pointer-events/PointerEvent.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L7) + +## Methods + +### \_addOrigin + +▸ **_addOrigin**(`«destructured»`): [`PointerEvent`](pointer_events_PointerEvent.PointerEvent.md)\<`T`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | [`Point`](../interfaces/core_types.Point.md) | + +#### Returns + +[`PointerEvent`](pointer_events_PointerEvent.PointerEvent.md)\<`T`\> + +#### Defined in + +[pointer-events/PointerEvent.ts:69](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L69) + +___ + +### \_subtractOrigin + +▸ **_subtractOrigin**(`«destructured»`): [`PointerEvent`](pointer_events_PointerEvent.PointerEvent.md)\<`T`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | [`Point`](../interfaces/core_types.Point.md) | + +#### Returns + +[`PointerEvent`](pointer_events_PointerEvent.PointerEvent.md)\<`T`\> + +#### Defined in + +[pointer-events/PointerEvent.ts:60](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L60) + +___ + +### preventDefault + +▸ **preventDefault**(): `void` + +Prevent the default behaviour of the original Event + +#### Returns + +`void` + +#### Overrides + +[BaseEvent](core_BaseEvent.BaseEvent.md).[preventDefault](core_BaseEvent.BaseEvent.md#preventdefault) + +#### Defined in + +[pointer-events/PointerEvent.ts:81](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/PointerEvent.ts#L81) + +___ + +### stopImmediatePropagation + +▸ **stopImmediatePropagation**(): `void` + +Don't call listeners on the remaining targets + +#### Returns + +`void` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[stopImmediatePropagation](core_BaseEvent.BaseEvent.md#stopimmediatepropagation) + +#### Defined in + +[core/BaseEvent.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L32) + +___ + +### stopPropagation + +▸ **stopPropagation**(): `void` + +Don't call any other listeners (even on the current target) + +#### Returns + +`void` + +#### Inherited from + +[BaseEvent](core_BaseEvent.BaseEvent.md).[stopPropagation](core_BaseEvent.BaseEvent.md#stoppropagation) + +#### Defined in + +[core/BaseEvent.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/BaseEvent.ts#L25) diff --git a/dist/api/enums/core_Interaction._ProxyMethods.md b/dist/api/enums/core_Interaction._ProxyMethods.md new file mode 100644 index 000000000..8f61cacd8 --- /dev/null +++ b/dist/api/enums/core_Interaction._ProxyMethods.md @@ -0,0 +1,76 @@ +[@interactjs](../README.md) / [core/Interaction](../modules/core_Interaction.md) / \_ProxyMethods + +# Enumeration: \_ProxyMethods + +[core/Interaction](../modules/core_Interaction.md)._ProxyMethods + +## Table of contents + +### Enumeration Members + +- [end](core_Interaction._ProxyMethods.md#end) +- [interacting](core_Interaction._ProxyMethods.md#interacting) +- [move](core_Interaction._ProxyMethods.md#move) +- [offsetBy](core_Interaction._ProxyMethods.md#offsetby) +- [start](core_Interaction._ProxyMethods.md#start) +- [stop](core_Interaction._ProxyMethods.md#stop) + +## Enumeration Members + +### end + +• **end** = ``""`` + +#### Defined in + +[core/Interaction.ts:38](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L38) + +___ + +### interacting + +• **interacting** = ``""`` + +#### Defined in + +[core/Interaction.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L40) + +___ + +### move + +• **move** = ``""`` + +#### Defined in + +[core/Interaction.ts:37](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L37) + +___ + +### offsetBy + +• **offsetBy** = ``""`` + +#### Defined in + +[offset/plugin.ts:17](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/offset/plugin.ts#L17) + +___ + +### start + +• **start** = ``""`` + +#### Defined in + +[core/Interaction.ts:36](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L36) + +___ + +### stop + +• **stop** = ``""`` + +#### Defined in + +[core/Interaction.ts:39](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L39) diff --git a/dist/api/enums/core_Interaction._ProxyValues.md b/dist/api/enums/core_Interaction._ProxyValues.md new file mode 100644 index 000000000..c24f0f1a3 --- /dev/null +++ b/dist/api/enums/core_Interaction._ProxyValues.md @@ -0,0 +1,76 @@ +[@interactjs](../README.md) / [core/Interaction](../modules/core_Interaction.md) / \_ProxyValues + +# Enumeration: \_ProxyValues + +[core/Interaction](../modules/core_Interaction.md)._ProxyValues + +## Table of contents + +### Enumeration Members + +- [\_proxy](core_Interaction._ProxyValues.md#_proxy) +- [element](core_Interaction._ProxyValues.md#element) +- [interactable](core_Interaction._ProxyValues.md#interactable) +- [pointerIsDown](core_Interaction._ProxyValues.md#pointerisdown) +- [pointerWasMoved](core_Interaction._ProxyValues.md#pointerwasmoved) +- [prepared](core_Interaction._ProxyValues.md#prepared) + +## Enumeration Members + +### \_proxy + +• **\_proxy** = ``""`` + +#### Defined in + +[core/Interaction.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L32) + +___ + +### element + +• **element** = ``""`` + +#### Defined in + +[core/Interaction.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L28) + +___ + +### interactable + +• **interactable** = ``""`` + +#### Defined in + +[core/Interaction.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L27) + +___ + +### pointerIsDown + +• **pointerIsDown** = ``""`` + +#### Defined in + +[core/Interaction.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L30) + +___ + +### pointerWasMoved + +• **pointerWasMoved** = ``""`` + +#### Defined in + +[core/Interaction.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L31) + +___ + +### prepared + +• **prepared** = ``""`` + +#### Defined in + +[core/Interaction.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L29) diff --git a/dist/api/interfaces/auto_scroll_plugin.AutoScrollOptions.md b/dist/api/interfaces/auto_scroll_plugin.AutoScrollOptions.md new file mode 100644 index 000000000..05df15434 --- /dev/null +++ b/dist/api/interfaces/auto_scroll_plugin.AutoScrollOptions.md @@ -0,0 +1,76 @@ +[@interactjs](../README.md) / [auto-scroll/plugin](../modules/auto_scroll_plugin.md) / AutoScrollOptions + +# Interface: AutoScrollOptions + +[auto-scroll/plugin](../modules/auto_scroll_plugin.md).AutoScrollOptions + +## Table of contents + +### Properties + +- [container](auto_scroll_plugin.AutoScrollOptions.md#container) +- [distance](auto_scroll_plugin.AutoScrollOptions.md#distance) +- [enabled](auto_scroll_plugin.AutoScrollOptions.md#enabled) +- [interval](auto_scroll_plugin.AutoScrollOptions.md#interval) +- [margin](auto_scroll_plugin.AutoScrollOptions.md#margin) +- [speed](auto_scroll_plugin.AutoScrollOptions.md#speed) + +## Properties + +### container + +• `Optional` **container**: `string` \| `Window` \| `HTMLElement` + +#### Defined in + +[auto-scroll/plugin.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L30) + +___ + +### distance + +• `Optional` **distance**: `number` + +#### Defined in + +[auto-scroll/plugin.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L32) + +___ + +### enabled + +• `Optional` **enabled**: `boolean` + +#### Defined in + +[auto-scroll/plugin.ts:35](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L35) + +___ + +### interval + +• `Optional` **interval**: `number` + +#### Defined in + +[auto-scroll/plugin.ts:33](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L33) + +___ + +### margin + +• `Optional` **margin**: `number` + +#### Defined in + +[auto-scroll/plugin.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L31) + +___ + +### speed + +• `Optional` **speed**: `number` + +#### Defined in + +[auto-scroll/plugin.ts:34](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L34) diff --git a/dist/api/interfaces/auto_start_base.AutoStart.md b/dist/api/interfaces/auto_start_base.AutoStart.md new file mode 100644 index 000000000..c25c451c6 --- /dev/null +++ b/dist/api/interfaces/auto_start_base.AutoStart.md @@ -0,0 +1,66 @@ +[@interactjs](../README.md) / [auto-start/base](../modules/auto_start_base.md) / AutoStart + +# Interface: AutoStart + +[auto-start/base](../modules/auto_start_base.md).AutoStart + +## Table of contents + +### Properties + +- [cursorElement](auto_start_base.AutoStart.md#cursorelement) +- [maxInteractions](auto_start_base.AutoStart.md#maxinteractions) +- [withinInteractionLimit](auto_start_base.AutoStart.md#withininteractionlimit) + +## Properties + +### cursorElement + +• **cursorElement**: [`Element`](../modules/core_types.md#element) + +#### Defined in + +[auto-start/base.ts:85](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L85) + +___ + +### maxInteractions + +• **maxInteractions**: `number` + +#### Defined in + +[auto-start/base.ts:83](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L83) + +___ + +### withinInteractionLimit + +• **withinInteractionLimit**: \(`interactable`: [`Interactable`](../classes/core_Interactable.Interactable.md), `element`: [`Element`](../modules/core_types.md#element), `action`: [`ActionProps`](core_types.ActionProps.md)\<`T`\>, `scope`: `Scope`) => `boolean` + +#### Type declaration + +▸ \<`T`\>(`interactable`, `element`, `action`, `scope`): `boolean` + +##### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends keyof [`ActionMap`](core_types.ActionMap.md) | + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `element` | [`Element`](../modules/core_types.md#element) | +| `action` | [`ActionProps`](core_types.ActionProps.md)\<`T`\> | +| `scope` | `Scope` | + +##### Returns + +`boolean` + +#### Defined in + +[auto-start/base.ts:84](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L84) diff --git a/dist/api/interfaces/core_InteractEvent.PhaseMap.md b/dist/api/interfaces/core_InteractEvent.PhaseMap.md new file mode 100644 index 000000000..1b1cf96a2 --- /dev/null +++ b/dist/api/interfaces/core_InteractEvent.PhaseMap.md @@ -0,0 +1,76 @@ +[@interactjs](../README.md) / [core/InteractEvent](../modules/core_InteractEvent.md) / PhaseMap + +# Interface: PhaseMap + +[core/InteractEvent](../modules/core_InteractEvent.md).PhaseMap + +## Table of contents + +### Properties + +- [end](core_InteractEvent.PhaseMap.md#end) +- [inertiastart](core_InteractEvent.PhaseMap.md#inertiastart) +- [move](core_InteractEvent.PhaseMap.md#move) +- [reflow](core_InteractEvent.PhaseMap.md#reflow) +- [resume](core_InteractEvent.PhaseMap.md#resume) +- [start](core_InteractEvent.PhaseMap.md#start) + +## Properties + +### end + +• **end**: ``true`` + +#### Defined in + +[core/InteractEvent.ts:16](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L16) + +___ + +### inertiastart + +• `Optional` **inertiastart**: ``true`` + +#### Defined in + +[inertia/plugin.ts:21](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L21) + +___ + +### move + +• **move**: ``true`` + +#### Defined in + +[core/InteractEvent.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L15) + +___ + +### reflow + +• `Optional` **reflow**: ``true`` + +#### Defined in + +[reflow/plugin.ts:49](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L49) + +___ + +### resume + +• `Optional` **resume**: ``true`` + +#### Defined in + +[inertia/plugin.ts:20](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L20) + +___ + +### start + +• **start**: ``true`` + +#### Defined in + +[core/InteractEvent.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L14) diff --git a/dist/api/interfaces/core_InteractStatic.InteractStatic.md b/dist/api/interfaces/core_InteractStatic.InteractStatic.md new file mode 100644 index 000000000..cb260d579 --- /dev/null +++ b/dist/api/interfaces/core_InteractStatic.InteractStatic.md @@ -0,0 +1,707 @@ +[@interactjs](../README.md) / [core/InteractStatic](../modules/core_InteractStatic.md) / InteractStatic + +# Interface: InteractStatic + +[core/InteractStatic](../modules/core_InteractStatic.md).InteractStatic + +```js +interact('#draggable').draggable(true) + +var rectables = interact('rect') +rectables + .gesturable(true) + .on('gesturemove', function (event) { + // ... + }) +``` + +The methods of this variable can be used to set elements as interactables +and also to change various default settings. + +Calling it as a function and passing an element or a valid CSS selector +string returns an Interactable object which has various methods to configure +it. + +**`Param`** + +The HTML or SVG Element to interact with +or CSS selector + +## Callable + +### InteractStatic + +▸ **InteractStatic**(`target`, `options?`): [`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `target` | [`Target`](../modules/core_types.md#target) | +| `options?` | [`Options`](../modules/core_options.md#options) | + +#### Returns + +[`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Defined in + +[core/InteractStatic.ts:38](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L38) + +## Table of contents + +### Properties + +- [closest](core_InteractStatic.InteractStatic.md#closest) +- [createSnapGrid](core_InteractStatic.InteractStatic.md#createsnapgrid) +- [dynamicDrop](core_InteractStatic.InteractStatic.md#dynamicdrop) +- [getElementClientRect](core_InteractStatic.InteractStatic.md#getelementclientrect) +- [getElementRect](core_InteractStatic.InteractStatic.md#getelementrect) +- [getPointerAverage](core_InteractStatic.InteractStatic.md#getpointeraverage) +- [getTouchAngle](core_InteractStatic.InteractStatic.md#gettouchangle) +- [getTouchBBox](core_InteractStatic.InteractStatic.md#gettouchbbox) +- [getTouchDistance](core_InteractStatic.InteractStatic.md#gettouchdistance) +- [matchesSelector](core_InteractStatic.InteractStatic.md#matchesselector) +- [maxInteractions](core_InteractStatic.InteractStatic.md#maxinteractions) +- [modifiers](core_InteractStatic.InteractStatic.md#modifiers) +- [snappers](core_InteractStatic.InteractStatic.md#snappers) +- [version](core_InteractStatic.InteractStatic.md#version) +- [visializer](core_InteractStatic.InteractStatic.md#visializer) + +### Methods + +- [addDocument](core_InteractStatic.InteractStatic.md#adddocument) +- [debug](core_InteractStatic.InteractStatic.md#debug) +- [isSet](core_InteractStatic.InteractStatic.md#isset) +- [off](core_InteractStatic.InteractStatic.md#off) +- [on](core_InteractStatic.InteractStatic.md#on) +- [pointerMoveTolerance](core_InteractStatic.InteractStatic.md#pointermovetolerance) +- [removeDocument](core_InteractStatic.InteractStatic.md#removedocument) +- [stop](core_InteractStatic.InteractStatic.md#stop) +- [supportsPointerEvent](core_InteractStatic.InteractStatic.md#supportspointerevent) +- [supportsTouch](core_InteractStatic.InteractStatic.md#supportstouch) +- [use](core_InteractStatic.InteractStatic.md#use) + +## Properties + +### closest + +• **closest**: (`element`: `Node`, `selector`: `string`) => `HTMLElement` \| `SVGElement` + +#### Type declaration + +▸ (`element`, `selector`): `HTMLElement` \| `SVGElement` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | `Node` | +| `selector` | `string` | + +##### Returns + +`HTMLElement` \| `SVGElement` + +#### Defined in + +[core/InteractStatic.ts:46](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L46) + +___ + +### createSnapGrid + +• **createSnapGrid**: (`grid`: [`GridOptions`](../modules/snappers_grid.md#gridoptions)) => `SnapFunction` & \{ `coordFields`: (readonly [``"x"``, ``"y"``] \| readonly [``"left"``, ``"top"``] \| readonly [``"right"``, ``"bottom"``] \| readonly [``"width"``, ``"height"``])[] ; `grid`: [`GridOptions`](../modules/snappers_grid.md#gridoptions) } + +#### Type declaration + +▸ (`grid`): `SnapFunction` & \{ `coordFields`: (readonly [``"x"``, ``"y"``] \| readonly [``"left"``, ``"top"``] \| readonly [``"right"``, ``"bottom"``] \| readonly [``"width"``, ``"height"``])[] ; `grid`: [`GridOptions`](../modules/snappers_grid.md#gridoptions) } + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `grid` | [`GridOptions`](../modules/snappers_grid.md#gridoptions) | + +##### Returns + +`SnapFunction` & \{ `coordFields`: (readonly [``"x"``, ``"y"``] \| readonly [``"left"``, ``"top"``] \| readonly [``"right"``, ``"bottom"``] \| readonly [``"width"``, ``"height"``])[] ; `grid`: [`GridOptions`](../modules/snappers_grid.md#gridoptions) } + +#### Defined in + +[snappers/plugin.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/plugin.ts#L9) + +___ + +### dynamicDrop + +• **dynamicDrop**: (`newValue?`: `boolean`) => `boolean` \| [`InteractStatic`](core_InteractStatic.InteractStatic.md) + +#### Type declaration + +▸ (`newValue?`): `boolean` \| [`InteractStatic`](core_InteractStatic.InteractStatic.md) + +Returns or sets whether the dimensions of dropzone elements are calculated +on every dragmove or only on dragstart for the default dropChecker + +##### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `newValue?` | `boolean` | True to check on each move. False to check only before start | + +##### Returns + +`boolean` \| [`InteractStatic`](core_InteractStatic.InteractStatic.md) + +The current setting or interact + +#### Defined in + +[actions/drop/plugin.ts:176](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L176) + +___ + +### getElementClientRect + +• **getElementClientRect**: (`element`: [`Element`](../modules/core_types.md#element)) => `Required`\<[`Rect`](core_types.Rect.md)\> + +#### Type declaration + +▸ (`element`): `Required`\<[`Rect`](core_types.Rect.md)\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | + +##### Returns + +`Required`\<[`Rect`](core_types.Rect.md)\> + +#### Defined in + +[core/InteractStatic.ts:44](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L44) + +___ + +### getElementRect + +• **getElementRect**: (`element`: [`Element`](../modules/core_types.md#element)) => `Required`\<[`Rect`](core_types.Rect.md)\> + +#### Type declaration + +▸ (`element`): `Required`\<[`Rect`](core_types.Rect.md)\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | + +##### Returns + +`Required`\<[`Rect`](core_types.Rect.md)\> + +#### Defined in + +[core/InteractStatic.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L43) + +___ + +### getPointerAverage + +• **getPointerAverage**: (`pointers`: [`PointerType`](../modules/core_types.md#pointertype)[]) => \{ `clientX`: `number` = 0; `clientY`: `number` = 0; `pageX`: `number` = 0; `pageY`: `number` = 0; `screenX`: `number` = 0; `screenY`: `number` = 0 } + +#### Type declaration + +▸ (`pointers`): `Object` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `pointers` | [`PointerType`](../modules/core_types.md#pointertype)[] | + +##### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `clientX` | `number` | +| `clientY` | `number` | +| `pageX` | `number` | +| `pageY` | `number` | +| `screenX` | `number` | +| `screenY` | `number` | + +#### Defined in + +[core/InteractStatic.ts:39](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L39) + +___ + +### getTouchAngle + +• **getTouchAngle**: (`event`: `TouchEvent` \| [`PointerType`](../modules/core_types.md#pointertype)[], `deltaSource`: `string`) => `number` + +#### Type declaration + +▸ (`event`, `deltaSource`): `number` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `event` | `TouchEvent` \| [`PointerType`](../modules/core_types.md#pointertype)[] | +| `deltaSource` | `string` | + +##### Returns + +`number` + +#### Defined in + +[core/InteractStatic.ts:42](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L42) + +___ + +### getTouchBBox + +• **getTouchBBox**: (`event`: [`PointerType`](../modules/core_types.md#pointertype)[]) => \{ `bottom`: `number` = maxY; `height`: `number` ; `left`: `number` = minX; `right`: `number` = maxX; `top`: `number` = minY; `width`: `number` ; `x`: `number` = minX; `y`: `number` = minY } + +#### Type declaration + +▸ (`event`): `Object` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `event` | [`PointerType`](../modules/core_types.md#pointertype)[] | + +##### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `bottom` | `number` | +| `height` | `number` | +| `left` | `number` | +| `right` | `number` | +| `top` | `number` | +| `width` | `number` | +| `x` | `number` | +| `y` | `number` | + +#### Defined in + +[core/InteractStatic.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L40) + +___ + +### getTouchDistance + +• **getTouchDistance**: (`event`: `TouchEvent` \| [`PointerType`](../modules/core_types.md#pointertype)[], `deltaSource`: `string`) => `number` + +#### Type declaration + +▸ (`event`, `deltaSource`): `number` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `event` | `TouchEvent` \| [`PointerType`](../modules/core_types.md#pointertype)[] | +| `deltaSource` | `string` | + +##### Returns + +`number` + +#### Defined in + +[core/InteractStatic.ts:41](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L41) + +___ + +### matchesSelector + +• **matchesSelector**: (`element`: [`Element`](../modules/core_types.md#element), `selector`: `string`) => `boolean` + +#### Type declaration + +▸ (`element`, `selector`): `boolean` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | +| `selector` | `string` | + +##### Returns + +`boolean` + +#### Defined in + +[core/InteractStatic.ts:45](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L45) + +___ + +### maxInteractions + +• **maxInteractions**: (`newValue`: `any`) => `any` + +#### Type declaration + +▸ (`newValue`): `any` + +Returns or sets the maximum number of concurrent interactions allowed. By +default only 1 interaction is allowed at a time (for backwards +compatibility). To allow multiple interactions on the same Interactables and +elements, you need to enable it in the draggable, resizable and gesturable +`'max'` and `'maxPerElement'` options. + +##### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `newValue` | `any` | Any number. newValue <= 0 means no interactions. | + +##### Returns + +`any` + +#### Defined in + +[auto-start/base.ts:33](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L33) + +___ + +### modifiers + +• **modifiers**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `aspectRatio` | (`_options?`: `Partial`\<[`AspectRatioOptions`](modifiers_aspectRatio.AspectRatioOptions.md)\>) => [`Modifier`](modifiers_types.Modifier.md)\<[`AspectRatioOptions`](modifiers_aspectRatio.AspectRatioOptions.md), [`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate), ``"aspectRatio"``, `unknown`\> | +| `aspectRatio._defaults` | [`AspectRatioOptions`](modifiers_aspectRatio.AspectRatioOptions.md) | +| `aspectRatio._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `unknown` = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `void` = module.stop } | +| `aspectRatio._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `void` \| [`Point`](core_types.Point.md) | +| `aspectRatio._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `unknown` | +| `aspectRatio._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `void` | +| `aspectRatio._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<[`AspectRatioState`](../modules/modifiers_aspectRatio.md#aspectratiostate)\>) => `void` | +| `avoid` | [`ModifierFunction`](modifiers_types.ModifierFunction.md)\<`any`, `any`, ``"noop"``\> | +| `restrict` | (`_options?`: `Partial`\<`RestrictOptions`\>) => [`Modifier`](modifiers_types.Modifier.md)\<`RestrictOptions`, `RestrictState`, ``"restrict"``, `unknown`\> | +| `restrict._defaults` | `RestrictOptions` | +| `restrict._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `unknown` = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` = module.stop } | +| `restrict._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `restrict._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `unknown` | +| `restrict._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` | +| `restrict._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` | +| `restrictEdges` | (`_options?`: `Partial`\<`RestrictEdgesOptions`\>) => [`Modifier`](modifiers_types.Modifier.md)\<`RestrictEdgesOptions`, `RestrictEdgesState`, ``"restrictEdges"``, `void`\> | +| `restrictEdges._defaults` | `RestrictEdgesOptions` | +| `restrictEdges._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` = module.stop } | +| `restrictEdges._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `restrictEdges._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` | +| `restrictEdges._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` | +| `restrictEdges._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` | +| `restrictRect` | (`_options?`: `Partial`\<`RestrictOptions` & \{ `elementRect`: }\>) => [`Modifier`](modifiers_types.Modifier.md)\<`RestrictOptions` & \{ `elementRect`: }, `RestrictState`, ``"restrictRect"``, `unknown`\> | +| `restrictRect._defaults` | `RestrictOptions` & \{ `elementRect`: } | +| `restrictRect._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `unknown` = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` = module.stop } | +| `restrictRect._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `restrictRect._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `unknown` | +| `restrictRect._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` | +| `restrictRect._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictState`\>) => `void` | +| `restrictSize` | (`_options?`: `Partial`\<`RestrictSizeOptions`\>) => [`Modifier`](modifiers_types.Modifier.md)\<`RestrictSizeOptions`, `RestrictEdgesState`, ``"restrictSize"``, `void`\> | +| `restrictSize._defaults` | `RestrictSizeOptions` | +| `restrictSize._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` = module.stop } | +| `restrictSize._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `restrictSize._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` | +| `restrictSize._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` | +| `restrictSize._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`RestrictEdgesState`\>) => `void` | +| `rubberband` | [`ModifierFunction`](modifiers_types.ModifierFunction.md)\<`any`, `any`, ``"noop"``\> | +| `snap` | (`_options?`: `Partial`\<`SnapOptions`\>) => [`Modifier`](modifiers_types.Modifier.md)\<`SnapOptions`, `SnapState`, ``"snap"``, \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null }\> | +| `snap._defaults` | `SnapOptions` | +| `snap._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null } = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` = module.stop } | +| `snap._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `snap._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null } | +| `snap._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` | +| `snap._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` | +| `snapEdges` | (`_options?`: `Partial`\<`SnapEdgesOptions`\>) => [`Modifier`](modifiers_types.Modifier.md)\<`SnapEdgesOptions`, `SnapState`, ``"snapEdges"``, \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null }\> | +| `snapEdges._defaults` | `SnapEdgesOptions` | +| `snapEdges._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null } = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` = module.stop } | +| `snapEdges._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `snapEdges._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null } | +| `snapEdges._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` | +| `snapEdges._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` | +| `snapSize` | (`_options?`: `Partial`\<`SnapSizeOptions`\>) => [`Modifier`](modifiers_types.Modifier.md)\<`SnapSizeOptions`, `SnapState`, ``"snapSize"``, \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null }\> | +| `snapSize._defaults` | `SnapSizeOptions` | +| `snapSize._methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` \| [`Point`](core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null } = module.set; `start`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` = module.stop } | +| `snapSize._methods.beforeEnd` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` \| [`Point`](core_types.Point.md) | +| `snapSize._methods.set` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => \{ `delta`: \{ `x`: `number` = 0; `y`: `number` = 0 } ; `distance`: `number` = 0; `inRange`: `boolean` = false; `range`: `number` = 0; `target`: `any` = null } | +| `snapSize._methods.start` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` | +| `snapSize._methods.stop` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`SnapState`\>) => `void` | +| `spring` | [`ModifierFunction`](modifiers_types.ModifierFunction.md)\<`any`, `any`, ``"noop"``\> | +| `transform` | [`ModifierFunction`](modifiers_types.ModifierFunction.md)\<`any`, `any`, ``"noop"``\> | + +#### Defined in + +[modifiers/plugin.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/plugin.ts#L14) + +___ + +### snappers + +• **snappers**: `__module` + +#### Defined in + +[snappers/plugin.ts:8](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/plugin.ts#L8) + +___ + +### version + +• **version**: `string` + +#### Defined in + +[core/InteractStatic.ts:48](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L48) + +___ + +### visializer + +• **visializer**: `Object` + +#### Defined in + +[dev-tools/plugin.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L25) + +## Methods + +### addDocument + +▸ **addDocument**(`doc`, `options?`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `doc` | `Document` | +| `options?` | `object` | + +#### Returns + +`void` + +#### Defined in + +[core/InteractStatic.ts:94](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L94) + +___ + +### debug + +▸ **debug**(): `any` + +#### Returns + +`any` + +#### Defined in + +[core/InteractStatic.ts:73](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L73) + +___ + +### isSet + +▸ **isSet**(`target`, `options?`): `boolean` + +Check if an element or selector has been set with the `interact(target)` +function + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `target` | [`Target`](../modules/core_types.md#target) | +| `options?` | `any` | + +#### Returns + +`boolean` + +Indicates if the element or CSS selector was previously +passed to interact + +#### Defined in + +[core/InteractStatic.ts:66](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L66) + +___ + +### off + +▸ **off**(`type`, `listener`, `options?`): `any` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | [`EventTypes`](../modules/core_types.md#eventtypes) | +| `listener` | `any` | +| `options?` | `object` | + +#### Returns + +`any` + +#### Defined in + +[core/InteractStatic.ts:72](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L72) + +___ + +### on + +▸ **on**(`type`, `listener`, `options?`): `any` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `type` | [`EventTypes`](../modules/core_types.md#eventtypes) | +| `listener` | [`ListenersArg`](../modules/core_types.md#listenersarg) | +| `options?` | `object` | + +#### Returns + +`any` + +#### Defined in + +[core/InteractStatic.ts:71](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L71) + +___ + +### pointerMoveTolerance + +▸ **pointerMoveTolerance**(`newValue?`): `number` \| [`InteractStatic`](core_InteractStatic.InteractStatic.md) + +Returns or sets the distance the pointer must be moved before an action +sequence occurs. This also affects tolerance for tap events. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `newValue?` | `number` | The movement from the start position must be greater than this value | + +#### Returns + +`number` \| [`InteractStatic`](core_InteractStatic.InteractStatic.md) + +#### Defined in + +[core/InteractStatic.ts:90](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L90) + +___ + +### removeDocument + +▸ **removeDocument**(`doc`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `doc` | `Document` | + +#### Returns + +`void` + +#### Defined in + +[core/InteractStatic.ts:95](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L95) + +___ + +### stop + +▸ **stop**(): [`InteractStatic`](core_InteractStatic.InteractStatic.md) + +Cancels all interactions (end events are not fired) + +#### Returns + +[`InteractStatic`](core_InteractStatic.InteractStatic.md) + +#### Defined in + +[core/InteractStatic.ts:85](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L85) + +___ + +### supportsPointerEvent + +▸ **supportsPointerEvent**(): `boolean` + +Whether or not the browser supports PointerEvents + +#### Returns + +`boolean` + +#### Defined in + +[core/InteractStatic.ts:81](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L81) + +___ + +### supportsTouch + +▸ **supportsTouch**(): `boolean` + +Whether or not the browser supports touch input + +#### Returns + +`boolean` + +#### Defined in + +[core/InteractStatic.ts:77](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L77) + +___ + +### use + +▸ **use**(`plugin`, `options?`): `any` + +Use a plugin + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `plugin` | `Plugin` | +| `options?` | `Object` | + +#### Returns + +`any` + +#### Defined in + +[core/InteractStatic.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L53) diff --git a/dist/api/interfaces/core_Interaction.DoPhaseArg.md b/dist/api/interfaces/core_Interaction.DoPhaseArg.md new file mode 100644 index 000000000..ef44ca9db --- /dev/null +++ b/dist/api/interfaces/core_Interaction.DoPhaseArg.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / [core/Interaction](../modules/core_Interaction.md) / DoPhaseArg + +# Interface: DoPhaseArg\ + +[core/Interaction](../modules/core_Interaction.md).DoPhaseArg + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends [`ActionName`](../modules/core_types.md#actionname) | +| `P` | extends [`EventPhase`](../modules/core_InteractEvent.md#eventphase) | + +## Table of contents + +### Properties + +- [event](core_Interaction.DoPhaseArg.md#event) +- [iEvent](core_Interaction.DoPhaseArg.md#ievent) +- [interaction](core_Interaction.DoPhaseArg.md#interaction) +- [phase](core_Interaction.DoPhaseArg.md#phase) +- [preEnd](core_Interaction.DoPhaseArg.md#preend) +- [type](core_Interaction.DoPhaseArg.md#type) + +## Properties + +### event + +• **event**: [`PointerEventType`](../modules/core_types.md#pointereventtype) + +#### Defined in + +[core/Interaction.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L53) + +___ + +### iEvent + +• **iEvent**: [`InteractEvent`](../classes/core_InteractEvent.InteractEvent.md)\<`T`, `P`\> + +#### Defined in + +[core/Interaction.ts:56](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L56) + +___ + +### interaction + +• **interaction**: [`Interaction`](../classes/core_Interaction.Interaction.md)\<`T`\> + +#### Defined in + +[core/Interaction.ts:55](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L55) + +___ + +### phase + +• **phase**: keyof [`PhaseMap`](core_InteractEvent.PhaseMap.md) + +#### Defined in + +[core/Interaction.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L54) + +___ + +### preEnd + +• `Optional` **preEnd**: `boolean` + +#### Defined in + +[core/Interaction.ts:57](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L57) + +___ + +### type + +• `Optional` **type**: `string` + +#### Defined in + +[core/Interaction.ts:58](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L58) diff --git a/dist/api/interfaces/core_interactionFinder.SearchDetails.md b/dist/api/interfaces/core_interactionFinder.SearchDetails.md new file mode 100644 index 000000000..d432e0612 --- /dev/null +++ b/dist/api/interfaces/core_interactionFinder.SearchDetails.md @@ -0,0 +1,87 @@ +[@interactjs](../README.md) / [core/interactionFinder](../modules/core_interactionFinder.md) / SearchDetails + +# Interface: SearchDetails + +[core/interactionFinder](../modules/core_interactionFinder.md).SearchDetails + +## Table of contents + +### Properties + +- [curEventTarget](core_interactionFinder.SearchDetails.md#cureventtarget) +- [eventTarget](core_interactionFinder.SearchDetails.md#eventtarget) +- [eventType](core_interactionFinder.SearchDetails.md#eventtype) +- [pointer](core_interactionFinder.SearchDetails.md#pointer) +- [pointerId](core_interactionFinder.SearchDetails.md#pointerid) +- [pointerType](core_interactionFinder.SearchDetails.md#pointertype) +- [scope](core_interactionFinder.SearchDetails.md#scope) + +## Properties + +### curEventTarget + +• **curEventTarget**: `EventTarget` + +#### Defined in + +[core/interactionFinder.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L13) + +___ + +### eventTarget + +• **eventTarget**: `EventTarget` + +#### Defined in + +[core/interactionFinder.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L12) + +___ + +### eventType + +• **eventType**: `string` + +#### Defined in + +[core/interactionFinder.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L11) + +___ + +### pointer + +• **pointer**: [`PointerType`](../modules/core_types.md#pointertype) + +#### Defined in + +[core/interactionFinder.ts:8](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L8) + +___ + +### pointerId + +• **pointerId**: `number` + +#### Defined in + +[core/interactionFinder.ts:9](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L9) + +___ + +### pointerType + +• **pointerType**: `string` + +#### Defined in + +[core/interactionFinder.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L10) + +___ + +### scope + +• **scope**: `Scope` + +#### Defined in + +[core/interactionFinder.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactionFinder.ts#L14) diff --git a/dist/api/interfaces/core_options.ActionDefaults.md b/dist/api/interfaces/core_options.ActionDefaults.md new file mode 100644 index 000000000..68cf63f63 --- /dev/null +++ b/dist/api/interfaces/core_options.ActionDefaults.md @@ -0,0 +1,65 @@ +[@interactjs](../README.md) / [core/options](../modules/core_options.md) / ActionDefaults + +# Interface: ActionDefaults + +[core/options](../modules/core_options.md).ActionDefaults + +## Table of contents + +### Properties + +- [drag](core_options.ActionDefaults.md#drag) +- [drop](core_options.ActionDefaults.md#drop) +- [gesture](core_options.ActionDefaults.md#gesture) +- [pointerEvents](core_options.ActionDefaults.md#pointerevents) +- [resize](core_options.ActionDefaults.md#resize) + +## Properties + +### drag + +• **drag**: `DraggableOptions` + +#### Defined in + +[actions/drag/plugin.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drag/plugin.ts#L53) + +___ + +### drop + +• **drop**: `DropzoneOptions` + +#### Defined in + +[actions/drop/plugin.ts:144](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L144) + +___ + +### gesture + +• **gesture**: `GesturableOptions` + +#### Defined in + +[actions/gesture/plugin.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L53) + +___ + +### pointerEvents + +• **pointerEvents**: [`Options`](../modules/core_options.md#options) + +#### Defined in + +[pointer-events/base.ts:50](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L50) + +___ + +### resize + +• **resize**: `ResizableOptions` + +#### Defined in + +[actions/resize/plugin.ts:86](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L86) diff --git a/dist/api/interfaces/core_options.BaseDefaults.md b/dist/api/interfaces/core_options.BaseDefaults.md new file mode 100644 index 000000000..d40e42624 --- /dev/null +++ b/dist/api/interfaces/core_options.BaseDefaults.md @@ -0,0 +1,118 @@ +[@interactjs](../README.md) / [core/options](../modules/core_options.md) / BaseDefaults + +# Interface: BaseDefaults + +[core/options](../modules/core_options.md).BaseDefaults + +## Hierarchy + +- **`BaseDefaults`** + + ↳ [`OptionsArg`](core_options.OptionsArg.md) + +## Table of contents + +### Properties + +- [actionChecker](core_options.BaseDefaults.md#actionchecker) +- [context](core_options.BaseDefaults.md#context) +- [cursorChecker](core_options.BaseDefaults.md#cursorchecker) +- [deltaSource](core_options.BaseDefaults.md#deltasource) +- [devTools](core_options.BaseDefaults.md#devtools) +- [getRect](core_options.BaseDefaults.md#getrect) +- [preventDefault](core_options.BaseDefaults.md#preventdefault) +- [styleCursor](core_options.BaseDefaults.md#stylecursor) + +## Properties + +### actionChecker + +• `Optional` **actionChecker**: `any` + +#### Defined in + +[auto-start/base.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L53) + +___ + +### context + +• `Optional` **context**: `Node` + +#### Defined in + +[core/options.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L15) + +___ + +### cursorChecker + +• `Optional` **cursorChecker**: `any` + +#### Defined in + +[auto-start/base.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L54) + +___ + +### deltaSource + +• `Optional` **deltaSource**: ``"page"`` \| ``"client"`` + +#### Defined in + +[core/options.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L14) + +___ + +### devTools + +• `Optional` **devTools**: [`DevToolsOptions`](dev_tools_plugin.DevToolsOptions.md) + +#### Defined in + +[dev-tools/plugin.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L31) + +___ + +### getRect + +• `Optional` **getRect**: (`element`: [`Element`](../modules/core_types.md#element)) => [`Rect`](core_types.Rect.md) + +#### Type declaration + +▸ (`element`): [`Rect`](core_types.Rect.md) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | + +##### Returns + +[`Rect`](core_types.Rect.md) + +#### Defined in + +[core/options.ts:16](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L16) + +___ + +### preventDefault + +• `Optional` **preventDefault**: ``"always"`` \| ``"never"`` \| ``"auto"`` + +#### Defined in + +[core/options.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L13) + +___ + +### styleCursor + +• `Optional` **styleCursor**: `any` + +#### Defined in + +[auto-start/base.ts:55](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L55) diff --git a/dist/api/interfaces/core_options.Defaults.md b/dist/api/interfaces/core_options.Defaults.md new file mode 100644 index 000000000..7924a7aa8 --- /dev/null +++ b/dist/api/interfaces/core_options.Defaults.md @@ -0,0 +1,43 @@ +[@interactjs](../README.md) / [core/options](../modules/core_options.md) / Defaults + +# Interface: Defaults + +[core/options](../modules/core_options.md).Defaults + +## Table of contents + +### Properties + +- [actions](core_options.Defaults.md#actions) +- [base](core_options.Defaults.md#base) +- [perAction](core_options.Defaults.md#peraction) + +## Properties + +### actions + +• **actions**: [`ActionDefaults`](core_options.ActionDefaults.md) + +#### Defined in + +[core/options.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L6) + +___ + +### base + +• **base**: [`BaseDefaults`](core_options.BaseDefaults.md) + +#### Defined in + +[core/options.ts:4](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L4) + +___ + +### perAction + +• **perAction**: [`PerActionDefaults`](core_options.PerActionDefaults.md) + +#### Defined in + +[core/options.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L5) diff --git a/dist/api/interfaces/core_options.OptionsArg.md b/dist/api/interfaces/core_options.OptionsArg.md new file mode 100644 index 000000000..643576e4a --- /dev/null +++ b/dist/api/interfaces/core_options.OptionsArg.md @@ -0,0 +1,227 @@ +[@interactjs](../README.md) / [core/options](../modules/core_options.md) / OptionsArg + +# Interface: OptionsArg + +[core/options](../modules/core_options.md).OptionsArg + +## Hierarchy + +- [`BaseDefaults`](core_options.BaseDefaults.md) + +- [`OrBoolean`](../modules/core_types.md#orboolean)\<`Partial`\<[`ActionDefaults`](core_options.ActionDefaults.md)\>\> + + ↳ **`OptionsArg`** + +## Table of contents + +### Properties + +- [actionChecker](core_options.OptionsArg.md#actionchecker) +- [context](core_options.OptionsArg.md#context) +- [cursorChecker](core_options.OptionsArg.md#cursorchecker) +- [deltaSource](core_options.OptionsArg.md#deltasource) +- [devTools](core_options.OptionsArg.md#devtools) +- [drag](core_options.OptionsArg.md#drag) +- [drop](core_options.OptionsArg.md#drop) +- [gesture](core_options.OptionsArg.md#gesture) +- [getRect](core_options.OptionsArg.md#getrect) +- [pointerEvents](core_options.OptionsArg.md#pointerevents) +- [preventDefault](core_options.OptionsArg.md#preventdefault) +- [resize](core_options.OptionsArg.md#resize) +- [styleCursor](core_options.OptionsArg.md#stylecursor) + +## Properties + +### actionChecker + +• `Optional` **actionChecker**: `any` + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[actionChecker](core_options.BaseDefaults.md#actionchecker) + +#### Defined in + +[auto-start/base.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L53) + +___ + +### context + +• `Optional` **context**: `Node` + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[context](core_options.BaseDefaults.md#context) + +#### Defined in + +[core/options.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L15) + +___ + +### cursorChecker + +• `Optional` **cursorChecker**: `any` + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[cursorChecker](core_options.BaseDefaults.md#cursorchecker) + +#### Defined in + +[auto-start/base.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L54) + +___ + +### deltaSource + +• `Optional` **deltaSource**: ``"page"`` \| ``"client"`` + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[deltaSource](core_options.BaseDefaults.md#deltasource) + +#### Defined in + +[core/options.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L14) + +___ + +### devTools + +• `Optional` **devTools**: [`DevToolsOptions`](dev_tools_plugin.DevToolsOptions.md) + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[devTools](core_options.BaseDefaults.md#devtools) + +#### Defined in + +[dev-tools/plugin.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L31) + +___ + +### drag + +• `Optional` **drag**: `boolean` \| `DraggableOptions` + +#### Inherited from + +OrBoolean.drag + +#### Defined in + +[actions/drag/plugin.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drag/plugin.ts#L53) + +___ + +### drop + +• `Optional` **drop**: `boolean` \| `DropzoneOptions` + +#### Inherited from + +OrBoolean.drop + +#### Defined in + +[actions/drop/plugin.ts:144](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L144) + +___ + +### gesture + +• `Optional` **gesture**: `boolean` \| `GesturableOptions` + +#### Inherited from + +OrBoolean.gesture + +#### Defined in + +[actions/gesture/plugin.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L53) + +___ + +### getRect + +• `Optional` **getRect**: (`element`: [`Element`](../modules/core_types.md#element)) => [`Rect`](core_types.Rect.md) + +#### Type declaration + +▸ (`element`): [`Rect`](core_types.Rect.md) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | + +##### Returns + +[`Rect`](core_types.Rect.md) + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[getRect](core_options.BaseDefaults.md#getrect) + +#### Defined in + +[core/options.ts:16](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L16) + +___ + +### pointerEvents + +• `Optional` **pointerEvents**: `boolean` \| [`Options`](../modules/core_options.md#options) + +#### Inherited from + +OrBoolean.pointerEvents + +#### Defined in + +[pointer-events/base.ts:50](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L50) + +___ + +### preventDefault + +• `Optional` **preventDefault**: ``"always"`` \| ``"never"`` \| ``"auto"`` + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[preventDefault](core_options.BaseDefaults.md#preventdefault) + +#### Defined in + +[core/options.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L13) + +___ + +### resize + +• `Optional` **resize**: `boolean` \| `ResizableOptions` + +#### Inherited from + +OrBoolean.resize + +#### Defined in + +[actions/resize/plugin.ts:86](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L86) + +___ + +### styleCursor + +• `Optional` **styleCursor**: `any` + +#### Inherited from + +[BaseDefaults](core_options.BaseDefaults.md).[styleCursor](core_options.BaseDefaults.md#stylecursor) + +#### Defined in + +[auto-start/base.ts:55](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L55) diff --git a/dist/api/interfaces/core_options.PerActionDefaults.md b/dist/api/interfaces/core_options.PerActionDefaults.md new file mode 100644 index 000000000..1bd31f862 --- /dev/null +++ b/dist/api/interfaces/core_options.PerActionDefaults.md @@ -0,0 +1,196 @@ +[@interactjs](../README.md) / [core/options](../modules/core_options.md) / PerActionDefaults + +# Interface: PerActionDefaults + +[core/options](../modules/core_options.md).PerActionDefaults + +## Hierarchy + +- **`PerActionDefaults`** + + ↳ [`PointerEventOptions`](pointer_events_base.PointerEventOptions.md) + +## Table of contents + +### Properties + +- [allowFrom](core_options.PerActionDefaults.md#allowfrom) +- [autoScroll](core_options.PerActionDefaults.md#autoscroll) +- [cursorChecker](core_options.PerActionDefaults.md#cursorchecker) +- [delay](core_options.PerActionDefaults.md#delay) +- [enabled](core_options.PerActionDefaults.md#enabled) +- [hold](core_options.PerActionDefaults.md#hold) +- [ignoreFrom](core_options.PerActionDefaults.md#ignorefrom) +- [inertia](core_options.PerActionDefaults.md#inertia) +- [listeners](core_options.PerActionDefaults.md#listeners) +- [manualStart](core_options.PerActionDefaults.md#manualstart) +- [max](core_options.PerActionDefaults.md#max) +- [maxPerElement](core_options.PerActionDefaults.md#maxperelement) +- [modifiers](core_options.PerActionDefaults.md#modifiers) +- [mouseButtons](core_options.PerActionDefaults.md#mousebuttons) +- [origin](core_options.PerActionDefaults.md#origin) + +## Properties + +### allowFrom + +• `Optional` **allowFrom**: `string` \| [`Element`](../modules/core_types.md#element) + +#### Defined in + +[core/options.ts:23](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L23) + +[auto-start/base.ts:62](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L62) + +___ + +### autoScroll + +• `Optional` **autoScroll**: [`AutoScrollOptions`](auto_scroll_plugin.AutoScrollOptions.md) + +#### Defined in + +[auto-scroll/plugin.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L25) + +___ + +### cursorChecker + +• `Optional` **cursorChecker**: [`CursorChecker`](../modules/core_types.md#cursorchecker) + +#### Defined in + +[auto-start/base.ts:64](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L64) + +___ + +### delay + +• `Optional` **delay**: `number` + +#### Defined in + +[auto-start/hold.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/hold.ts#L12) + +___ + +### enabled + +• `Optional` **enabled**: `boolean` + +#### Defined in + +[core/options.ts:20](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L20) + +___ + +### hold + +• `Optional` **hold**: `number` + +#### Defined in + +[auto-start/hold.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/hold.ts#L11) + +___ + +### ignoreFrom + +• `Optional` **ignoreFrom**: `string` \| [`Element`](../modules/core_types.md#element) + +#### Defined in + +[core/options.ts:24](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L24) + +[auto-start/base.ts:63](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L63) + +___ + +### inertia + +• `Optional` **inertia**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `allowResume?` | ``true`` | +| `enabled?` | `boolean` | +| `endSpeed?` | `number` | +| `minSpeed?` | `number` | +| `resistance?` | `number` | +| `smoothEndDuration?` | `number` | + +#### Defined in + +[inertia/plugin.ts:33](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L33) + +___ + +### listeners + +• `Optional` **listeners**: [`Listeners`](../modules/core_types.md#listeners) + +#### Defined in + +[core/options.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L22) + +___ + +### manualStart + +• `Optional` **manualStart**: `boolean` + +#### Defined in + +[auto-start/base.ts:59](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L59) + +___ + +### max + +• `Optional` **max**: `number` + +#### Defined in + +[auto-start/base.ts:60](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L60) + +___ + +### maxPerElement + +• `Optional` **maxPerElement**: `number` + +#### Defined in + +[auto-start/base.ts:61](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L61) + +___ + +### modifiers + +• `Optional` **modifiers**: [`Modifier`](modifiers_types.Modifier.md)\<`any`, `any`, `any`, `any`\>[] + +#### Defined in + +[modifiers/base.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L25) + +___ + +### mouseButtons + +• `Optional` **mouseButtons**: ``0`` \| ``1`` \| ``16`` \| ``2`` \| ``4`` \| ``8`` + +#### Defined in + +[auto-start/base.ts:69](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L69) + +___ + +### origin + +• `Optional` **origin**: `string` \| [`Element`](../modules/core_types.md#element) \| [`Point`](core_types.Point.md) + +#### Defined in + +[core/options.ts:21](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L21) diff --git a/dist/api/interfaces/core_scope.SignalArgs.md b/dist/api/interfaces/core_scope.SignalArgs.md new file mode 100644 index 000000000..c729ba5ab --- /dev/null +++ b/dist/api/interfaces/core_scope.SignalArgs.md @@ -0,0 +1,586 @@ +[@interactjs](../README.md) / [core/scope](../modules/core_scope.md) / SignalArgs + +# Interface: SignalArgs + +[core/scope](../modules/core_scope.md).SignalArgs + +## Table of contents + +### Properties + +- [actions/drop:end](core_scope.SignalArgs.md#actions/drop:end) +- [actions/drop:move](core_scope.SignalArgs.md#actions/drop:move) +- [actions/drop:start](core_scope.SignalArgs.md#actions/drop:start) +- [auto-start:check](core_scope.SignalArgs.md#auto-start:check) +- [autoStart:before-start](core_scope.SignalArgs.md#autostart:before-start) +- [autoStart:prepared](core_scope.SignalArgs.md#autostart:prepared) +- [interactable:new](core_scope.SignalArgs.md#interactable:new) +- [interactable:set](core_scope.SignalArgs.md#interactable:set) +- [interactable:unset](core_scope.SignalArgs.md#interactable:unset) +- [interactions:action-end](core_scope.SignalArgs.md#interactions:action-end) +- [interactions:action-inertiastart](core_scope.SignalArgs.md#interactions:action-inertiastart) +- [interactions:action-move](core_scope.SignalArgs.md#interactions:action-move) +- [interactions:action-reflow](core_scope.SignalArgs.md#interactions:action-reflow) +- [interactions:action-resume](core_scope.SignalArgs.md#interactions:action-resume) +- [interactions:action-start](core_scope.SignalArgs.md#interactions:action-start) +- [interactions:after-action-end](core_scope.SignalArgs.md#interactions:after-action-end) +- [interactions:after-action-inertiastart](core_scope.SignalArgs.md#interactions:after-action-inertiastart) +- [interactions:after-action-move](core_scope.SignalArgs.md#interactions:after-action-move) +- [interactions:after-action-reflow](core_scope.SignalArgs.md#interactions:after-action-reflow) +- [interactions:after-action-resume](core_scope.SignalArgs.md#interactions:after-action-resume) +- [interactions:after-action-start](core_scope.SignalArgs.md#interactions:after-action-start) +- [interactions:before-action-end](core_scope.SignalArgs.md#interactions:before-action-end) +- [interactions:before-action-inertiastart](core_scope.SignalArgs.md#interactions:before-action-inertiastart) +- [interactions:before-action-move](core_scope.SignalArgs.md#interactions:before-action-move) +- [interactions:before-action-reflow](core_scope.SignalArgs.md#interactions:before-action-reflow) +- [interactions:before-action-resume](core_scope.SignalArgs.md#interactions:before-action-resume) +- [interactions:before-action-start](core_scope.SignalArgs.md#interactions:before-action-start) +- [interactions:blur](core_scope.SignalArgs.md#interactions:blur) +- [interactions:cancel](core_scope.SignalArgs.md#interactions:cancel) +- [interactions:destroy](core_scope.SignalArgs.md#interactions:destroy) +- [interactions:down](core_scope.SignalArgs.md#interactions:down) +- [interactions:find](core_scope.SignalArgs.md#interactions:find) +- [interactions:move](core_scope.SignalArgs.md#interactions:move) +- [interactions:new](core_scope.SignalArgs.md#interactions:new) +- [interactions:remove-pointer](core_scope.SignalArgs.md#interactions:remove-pointer) +- [interactions:stop](core_scope.SignalArgs.md#interactions:stop) +- [interactions:up](core_scope.SignalArgs.md#interactions:up) +- [interactions:update-pointer](core_scope.SignalArgs.md#interactions:update-pointer) +- [pointerEvents:collect-targets](core_scope.SignalArgs.md#pointerevents:collect-targets) +- [pointerEvents:fired](core_scope.SignalArgs.md#pointerevents:fired) +- [pointerEvents:new](core_scope.SignalArgs.md#pointerevents:new) +- [scope:add-document](core_scope.SignalArgs.md#scope:add-document) +- [scope:remove-document](core_scope.SignalArgs.md#scope:remove-document) + +## Properties + +### actions/drop:end + +• **actions/drop:end**: `DropSignalArg` + +#### Defined in + +[actions/drop/plugin.ts:156](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L156) + +___ + +### actions/drop:move + +• **actions/drop:move**: `DropSignalArg` + +#### Defined in + +[actions/drop/plugin.ts:155](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L155) + +___ + +### actions/drop:start + +• **actions/drop:start**: `DropSignalArg` + +#### Defined in + +[actions/drop/plugin.ts:154](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L154) + +___ + +### auto-start:check + +• **auto-start:check**: `CheckSignalArg` + +#### Defined in + +[auto-start/base.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L47) + +___ + +### autoStart:before-start + +• **autoStart:before-start**: `Omit`\<[`PointerArgProps`](../modules/core_Interaction.md#pointerargprops)\<\{ `duplicate`: `boolean` ; `dx`: `number` ; `dy`: `number` ; `type`: ``"move"`` }\>, ``"interaction"``\> & \{ `interaction`: [`Interaction`](../classes/core_Interaction.Interaction.md)\ } + +#### Defined in + +[auto-start/base.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L43) + +___ + +### autoStart:prepared + +• **autoStart:prepared**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | + +#### Defined in + +[auto-start/base.ts:46](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L46) + +___ + +### interactable:new + +• **interactable:new**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `options` | [`OptionsArg`](core_options.OptionsArg.md) | +| `target` | [`Target`](../modules/core_types.md#target) | +| `win` | `Window` | + +#### Defined in + +[core/InteractableSet.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractableSet.ts#L13) + +___ + +### interactable:set + +• **interactable:set**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `options` | [`OptionsArg`](core_options.OptionsArg.md) | + +#### Defined in + +[core/scope.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L30) + +___ + +### interactable:unset + +• **interactable:unset**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | + +#### Defined in + +[core/scope.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L29) + +___ + +### interactions:action-end + +• **interactions:action-end**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[core/Interaction.ts:95](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L95) + +___ + +### interactions:action-inertiastart + +• **interactions:action-inertiastart**: [`DoPhaseArg`](core_Interaction.DoPhaseArg.md)\ + +#### Defined in + +[inertia/plugin.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L47) + +___ + +### interactions:action-move + +• **interactions:action-move**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[core/Interaction.ts:92](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L92) + +___ + +### interactions:action-reflow + +• **interactions:action-reflow**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[reflow/plugin.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L13) + +___ + +### interactions:action-resume + +• **interactions:action-resume**: [`DoPhaseArg`](core_Interaction.DoPhaseArg.md)\ + +#### Defined in + +[inertia/plugin.ts:50](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L50) + +___ + +### interactions:action-start + +• **interactions:action-start**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[core/Interaction.ts:89](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L89) + +___ + +### interactions:after-action-end + +• **interactions:after-action-end**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[core/Interaction.ts:96](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L96) + +___ + +### interactions:after-action-inertiastart + +• **interactions:after-action-inertiastart**: [`DoPhaseArg`](core_Interaction.DoPhaseArg.md)\ + +#### Defined in + +[inertia/plugin.ts:48](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L48) + +___ + +### interactions:after-action-move + +• **interactions:after-action-move**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[core/Interaction.ts:93](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L93) + +___ + +### interactions:after-action-reflow + +• **interactions:after-action-reflow**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[reflow/plugin.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L14) + +___ + +### interactions:after-action-resume + +• **interactions:after-action-resume**: [`DoPhaseArg`](core_Interaction.DoPhaseArg.md)\ + +#### Defined in + +[inertia/plugin.ts:51](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L51) + +___ + +### interactions:after-action-start + +• **interactions:after-action-start**: [`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg) + +#### Defined in + +[core/Interaction.ts:90](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L90) + +___ + +### interactions:before-action-end + +• **interactions:before-action-end**: `Omit`\<[`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg), ``"iEvent"``\> + +#### Defined in + +[core/Interaction.ts:94](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L94) + +___ + +### interactions:before-action-inertiastart + +• **interactions:before-action-inertiastart**: `Omit`\<[`DoPhaseArg`](core_Interaction.DoPhaseArg.md)\, ``"iEvent"``\> + +#### Defined in + +[inertia/plugin.ts:46](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L46) + +___ + +### interactions:before-action-move + +• **interactions:before-action-move**: `Omit`\<[`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg), ``"iEvent"``\> + +#### Defined in + +[core/Interaction.ts:91](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L91) + +___ + +### interactions:before-action-reflow + +• **interactions:before-action-reflow**: `Omit`\<[`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg), ``"iEvent"``\> + +#### Defined in + +[reflow/plugin.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/reflow/plugin.ts#L12) + +___ + +### interactions:before-action-resume + +• **interactions:before-action-resume**: `Omit`\<[`DoPhaseArg`](core_Interaction.DoPhaseArg.md)\, ``"iEvent"``\> + +#### Defined in + +[inertia/plugin.ts:49](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L49) + +___ + +### interactions:before-action-start + +• **interactions:before-action-start**: `Omit`\<[`DoAnyPhaseArg`](../modules/core_Interaction.md#doanyphasearg), ``"iEvent"``\> + +#### Defined in + +[core/Interaction.ts:88](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L88) + +___ + +### interactions:blur + +• **interactions:blur**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `event` | `Event` | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\<`never`\> | +| `type` | ``"blur"`` | + +#### Defined in + +[core/Interaction.ts:87](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L87) + +___ + +### interactions:cancel + +• **interactions:cancel**: `never` + +#### Defined in + +[core/Interaction.ts:79](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L79) + +___ + +### interactions:destroy + +• **interactions:destroy**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | + +#### Defined in + +[core/scope.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L31) + +___ + +### interactions:down + +• **interactions:down**: [`PointerArgProps`](../modules/core_Interaction.md#pointerargprops)\<\{ `type`: ``"down"`` }\> + +#### Defined in + +[core/Interaction.ts:66](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L66) + +___ + +### interactions:find + +• **interactions:find**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | +| `searchDetails` | [`SearchDetails`](core_interactionFinder.SearchDetails.md) | + +#### Defined in + +[core/interactions.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactions.ts#L31) + +___ + +### interactions:move + +• **interactions:move**: [`PointerArgProps`](../modules/core_Interaction.md#pointerargprops)\<\{ `duplicate`: `boolean` ; `dx`: `number` ; `dy`: `number` ; `type`: ``"move"`` }\> + +#### Defined in + +[core/Interaction.ts:69](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L69) + +___ + +### interactions:new + +• **interactions:new**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | + +#### Defined in + +[core/Interaction.ts:65](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L65) + +___ + +### interactions:remove-pointer + +• **interactions:remove-pointer**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) | +| `eventTarget` | `Node` | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\<`never`\> | +| `pointer` | [`PointerType`](../modules/core_types.md#pointertype) | +| `pointerIndex` | `number` | +| `pointerInfo` | [`PointerInfo`](../classes/core_Interaction.PointerInfo.md) | + +#### Defined in + +[core/Interaction.ts:86](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L86) + +___ + +### interactions:stop + +• **interactions:stop**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | + +#### Defined in + +[core/Interaction.ts:97](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L97) + +___ + +### interactions:up + +• **interactions:up**: [`PointerArgProps`](../modules/core_Interaction.md#pointerargprops)\<\{ `curEventTarget`: `EventTarget` ; `type`: ``"up"`` }\> + +#### Defined in + +[core/Interaction.ts:75](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L75) + +___ + +### interactions:update-pointer + +• **interactions:update-pointer**: [`PointerArgProps`](../modules/core_Interaction.md#pointerargprops)\<\{ `down`: `boolean` }\> + +#### Defined in + +[core/Interaction.ts:83](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L83) + +___ + +### pointerEvents:collect-targets + +• **pointerEvents:collect-targets**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) \| [`PointerEvent`](../classes/pointer_events_PointerEvent.PointerEvent.md)\<`any`\> | +| `eventTarget` | `Node` | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\<`any`\> | +| `node` | ``null`` | +| `path` | `Node`[] | +| `pointer` | [`PointerType`](../modules/core_types.md#pointertype) \| [`PointerEvent`](../classes/pointer_events_PointerEvent.PointerEvent.md)\<`any`\> | +| `targets?` | [`EventTargetList`](../modules/pointer_events_base.md#eventtargetlist) | +| `type` | `string` | + +#### Defined in + +[pointer-events/base.ts:66](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L66) + +___ + +### pointerEvents:fired + +• **pointerEvents:fired**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `event` | [`PointerEventType`](../modules/core_types.md#pointereventtype) \| [`PointerEvent`](../classes/pointer_events_PointerEvent.PointerEvent.md)\<`any`\> | +| `eventTarget` | `Node` | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\<``null``\> | +| `pointer` | [`PointerType`](../modules/core_types.md#pointertype) \| [`PointerEvent`](../classes/pointer_events_PointerEvent.PointerEvent.md)\<`any`\> | +| `pointerEvent` | [`PointerEvent`](../classes/pointer_events_PointerEvent.PointerEvent.md)\<`any`\> | +| `targets?` | [`EventTargetList`](../modules/pointer_events_base.md#eventtargetlist) | +| `type` | `string` | + +#### Defined in + +[pointer-events/base.ts:57](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L57) + +___ + +### pointerEvents:new + +• **pointerEvents:new**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `pointerEvent` | [`PointerEvent`](../classes/pointer_events_PointerEvent.PointerEvent.md)\<`any`\> | + +#### Defined in + +[pointer-events/base.ts:56](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L56) + +___ + +### scope:add-document + +• **scope:add-document**: `DocSignalArg` + +#### Defined in + +[core/scope.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L27) + +___ + +### scope:remove-document + +• **scope:remove-document**: `DocSignalArg` + +#### Defined in + +[core/scope.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L28) diff --git a/dist/api/interfaces/core_types.ActionMap.md b/dist/api/interfaces/core_types.ActionMap.md new file mode 100644 index 000000000..6ff26cafe --- /dev/null +++ b/dist/api/interfaces/core_types.ActionMap.md @@ -0,0 +1,54 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / ActionMap + +# Interface: ActionMap + +[core/types](../modules/core_types.md).ActionMap + +## Table of contents + +### Properties + +- [drag](core_types.ActionMap.md#drag) +- [drop](core_types.ActionMap.md#drop) +- [gesture](core_types.ActionMap.md#gesture) +- [resize](core_types.ActionMap.md#resize) + +## Properties + +### drag + +• `Optional` **drag**: `Plugin` + +#### Defined in + +[actions/drag/plugin.ts:59](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drag/plugin.ts#L59) + +___ + +### drop + +• `Optional` **drop**: `Plugin` + +#### Defined in + +[actions/drop/plugin.ts:162](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/drop/plugin.ts#L162) + +___ + +### gesture + +• `Optional` **gesture**: `Plugin` + +#### Defined in + +[actions/gesture/plugin.ts:59](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/gesture/plugin.ts#L59) + +___ + +### resize + +• `Optional` **resize**: `Plugin` + +#### Defined in + +[actions/resize/plugin.ts:92](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/actions/resize/plugin.ts#L92) diff --git a/dist/api/interfaces/core_types.ActionMethod.md b/dist/api/interfaces/core_types.ActionMethod.md new file mode 100644 index 000000000..1fedb5800 --- /dev/null +++ b/dist/api/interfaces/core_types.ActionMethod.md @@ -0,0 +1,50 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / ActionMethod + +# Interface: ActionMethod\ + +[core/types](../modules/core_types.md).ActionMethod + +## Type parameters + +| Name | +| :------ | +| `T` | + +## Callable + +### ActionMethod + +▸ **ActionMethod**(`this`): `T` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | [`Interactable`](../classes/core_Interactable.Interactable.md) | + +#### Returns + +`T` + +#### Defined in + +[core/types.ts:103](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L103) + +### ActionMethod + +▸ **ActionMethod**(`this`, `options?`): [`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `options?` | `boolean` \| `Partial`\<[`OrBoolean`](../modules/core_types.md#orboolean)\<`T`\>\> | + +#### Returns + +[`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Defined in + +[core/types.ts:104](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L104) diff --git a/dist/api/interfaces/core_types.ActionProps.md b/dist/api/interfaces/core_types.ActionProps.md new file mode 100644 index 000000000..f0da80fb4 --- /dev/null +++ b/dist/api/interfaces/core_types.ActionProps.md @@ -0,0 +1,49 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / ActionProps + +# Interface: ActionProps\ + +[core/types](../modules/core_types.md).ActionProps + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends [`ActionName`](../modules/core_types.md#actionname) \| ``null`` = `never` | + +## Table of contents + +### Properties + +- [axis](core_types.ActionProps.md#axis) +- [edges](core_types.ActionProps.md#edges) +- [name](core_types.ActionProps.md#name) + +## Properties + +### axis + +• `Optional` **axis**: ``"x"`` \| ``"y"`` \| ``"xy"`` + +#### Defined in + +[core/types.ts:75](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L75) + +___ + +### edges + +• `Optional` **edges**: [`EdgeOptions`](core_types.EdgeOptions.md) + +#### Defined in + +[core/types.ts:76](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L76) + +___ + +### name + +• **name**: `T` + +#### Defined in + +[core/types.ts:74](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L74) diff --git a/dist/api/interfaces/core_types.Actions.md b/dist/api/interfaces/core_types.Actions.md new file mode 100644 index 000000000..6b81c79fd --- /dev/null +++ b/dist/api/interfaces/core_types.Actions.md @@ -0,0 +1,58 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / Actions + +# Interface: Actions + +[core/types](../modules/core_types.md).Actions + +## Table of contents + +### Properties + +- [map](core_types.Actions.md#map) +- [methodDict](core_types.Actions.md#methoddict) +- [phaselessTypes](core_types.Actions.md#phaselesstypes) +- [phases](core_types.Actions.md#phases) + +## Properties + +### map + +• **map**: [`ActionMap`](core_types.ActionMap.md) + +#### Defined in + +[core/types.ts:67](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L67) + +___ + +### methodDict + +• **methodDict**: `Record`\ + +#### Defined in + +[core/types.ts:69](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L69) + +___ + +### phaselessTypes + +• **phaselessTypes**: `Object` + +#### Index signature + +▪ [type: `string`]: ``true`` + +#### Defined in + +[core/types.ts:70](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L70) + +___ + +### phases + +• **phases**: [`PhaseMap`](core_InteractEvent.PhaseMap.md) + +#### Defined in + +[core/types.ts:68](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L68) diff --git a/dist/api/interfaces/core_types.CoordsSet.md b/dist/api/interfaces/core_types.CoordsSet.md new file mode 100644 index 000000000..f31705ecc --- /dev/null +++ b/dist/api/interfaces/core_types.CoordsSet.md @@ -0,0 +1,65 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / CoordsSet + +# Interface: CoordsSet + +[core/types](../modules/core_types.md).CoordsSet + +## Table of contents + +### Properties + +- [cur](core_types.CoordsSet.md#cur) +- [delta](core_types.CoordsSet.md#delta) +- [prev](core_types.CoordsSet.md#prev) +- [start](core_types.CoordsSet.md#start) +- [velocity](core_types.CoordsSet.md#velocity) + +## Properties + +### cur + +• **cur**: [`CoordsSetMember`](core_types.CoordsSetMember.md) + +#### Defined in + +[core/types.ts:50](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L50) + +___ + +### delta + +• **delta**: [`CoordsSetMember`](core_types.CoordsSetMember.md) + +#### Defined in + +[core/types.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L53) + +___ + +### prev + +• **prev**: [`CoordsSetMember`](core_types.CoordsSetMember.md) + +#### Defined in + +[core/types.ts:51](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L51) + +___ + +### start + +• **start**: [`CoordsSetMember`](core_types.CoordsSetMember.md) + +#### Defined in + +[core/types.ts:52](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L52) + +___ + +### velocity + +• **velocity**: [`CoordsSetMember`](core_types.CoordsSetMember.md) + +#### Defined in + +[core/types.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L54) diff --git a/dist/api/interfaces/core_types.CoordsSetMember.md b/dist/api/interfaces/core_types.CoordsSetMember.md new file mode 100644 index 000000000..195444035 --- /dev/null +++ b/dist/api/interfaces/core_types.CoordsSetMember.md @@ -0,0 +1,43 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / CoordsSetMember + +# Interface: CoordsSetMember + +[core/types](../modules/core_types.md).CoordsSetMember + +## Table of contents + +### Properties + +- [client](core_types.CoordsSetMember.md#client) +- [page](core_types.CoordsSetMember.md#page) +- [timeStamp](core_types.CoordsSetMember.md#timestamp) + +## Properties + +### client + +• **client**: [`Point`](core_types.Point.md) + +#### Defined in + +[core/types.ts:45](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L45) + +___ + +### page + +• **page**: [`Point`](core_types.Point.md) + +#### Defined in + +[core/types.ts:44](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L44) + +___ + +### timeStamp + +• **timeStamp**: `number` + +#### Defined in + +[core/types.ts:46](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L46) diff --git a/dist/api/interfaces/core_types.EdgeOptions.md b/dist/api/interfaces/core_types.EdgeOptions.md new file mode 100644 index 000000000..5cb4b78c5 --- /dev/null +++ b/dist/api/interfaces/core_types.EdgeOptions.md @@ -0,0 +1,54 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / EdgeOptions + +# Interface: EdgeOptions + +[core/types](../modules/core_types.md).EdgeOptions + +## Table of contents + +### Properties + +- [bottom](core_types.EdgeOptions.md#bottom) +- [left](core_types.EdgeOptions.md#left) +- [right](core_types.EdgeOptions.md#right) +- [top](core_types.EdgeOptions.md#top) + +## Properties + +### bottom + +• `Optional` **bottom**: `string` \| `boolean` \| [`Element`](../modules/core_types.md#element) + +#### Defined in + +[core/types.ts:91](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L91) + +___ + +### left + +• `Optional` **left**: `string` \| `boolean` \| [`Element`](../modules/core_types.md#element) + +#### Defined in + +[core/types.ts:90](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L90) + +___ + +### right + +• `Optional` **right**: `string` \| `boolean` \| [`Element`](../modules/core_types.md#element) + +#### Defined in + +[core/types.ts:92](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L92) + +___ + +### top + +• `Optional` **top**: `string` \| `boolean` \| [`Element`](../modules/core_types.md#element) + +#### Defined in + +[core/types.ts:89](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L89) diff --git a/dist/api/interfaces/core_types.HasGetRect.md b/dist/api/interfaces/core_types.HasGetRect.md new file mode 100644 index 000000000..13407898e --- /dev/null +++ b/dist/api/interfaces/core_types.HasGetRect.md @@ -0,0 +1,31 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / HasGetRect + +# Interface: HasGetRect + +[core/types](../modules/core_types.md).HasGetRect + +## Table of contents + +### Methods + +- [getRect](core_types.HasGetRect.md#getrect) + +## Methods + +### getRect + +▸ **getRect**(`element`): [`Rect`](core_types.Rect.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](../modules/core_types.md#element) | + +#### Returns + +[`Rect`](core_types.Rect.md) + +#### Defined in + +[core/types.ts:58](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L58) diff --git a/dist/api/interfaces/core_types.InertiaOption.md b/dist/api/interfaces/core_types.InertiaOption.md new file mode 100644 index 000000000..84de63043 --- /dev/null +++ b/dist/api/interfaces/core_types.InertiaOption.md @@ -0,0 +1,65 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / InertiaOption + +# Interface: InertiaOption + +[core/types](../modules/core_types.md).InertiaOption + +## Table of contents + +### Properties + +- [allowResume](core_types.InertiaOption.md#allowresume) +- [endSpeed](core_types.InertiaOption.md#endspeed) +- [minSpeed](core_types.InertiaOption.md#minspeed) +- [resistance](core_types.InertiaOption.md#resistance) +- [smoothEndDuration](core_types.InertiaOption.md#smoothendduration) + +## Properties + +### allowResume + +• `Optional` **allowResume**: `boolean` + +#### Defined in + +[core/types.ts:83](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L83) + +___ + +### endSpeed + +• `Optional` **endSpeed**: `number` + +#### Defined in + +[core/types.ts:82](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L82) + +___ + +### minSpeed + +• `Optional` **minSpeed**: `number` + +#### Defined in + +[core/types.ts:81](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L81) + +___ + +### resistance + +• `Optional` **resistance**: `number` + +#### Defined in + +[core/types.ts:80](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L80) + +___ + +### smoothEndDuration + +• `Optional` **smoothEndDuration**: `number` + +#### Defined in + +[core/types.ts:84](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L84) diff --git a/dist/api/interfaces/core_types.ListenerMap.md b/dist/api/interfaces/core_types.ListenerMap.md new file mode 100644 index 000000000..a63b05cd7 --- /dev/null +++ b/dist/api/interfaces/core_types.ListenerMap.md @@ -0,0 +1,5 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / ListenerMap + +# Interface: ListenerMap + +[core/types](../modules/core_types.md).ListenerMap diff --git a/dist/api/interfaces/core_types.OptionMethod.md b/dist/api/interfaces/core_types.OptionMethod.md new file mode 100644 index 000000000..6ba48caac --- /dev/null +++ b/dist/api/interfaces/core_types.OptionMethod.md @@ -0,0 +1,50 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / OptionMethod + +# Interface: OptionMethod\ + +[core/types](../modules/core_types.md).OptionMethod + +## Type parameters + +| Name | +| :------ | +| `T` | + +## Callable + +### OptionMethod + +▸ **OptionMethod**(`this`): `T` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | [`Interactable`](../classes/core_Interactable.Interactable.md) | + +#### Returns + +`T` + +#### Defined in + +[core/types.ts:108](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L108) + +### OptionMethod + +▸ **OptionMethod**(`this`, `options`): [`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `this` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `options` | `T` | + +#### Returns + +[`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Defined in + +[core/types.ts:110](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L110) diff --git a/dist/api/interfaces/core_types.Point.md b/dist/api/interfaces/core_types.Point.md new file mode 100644 index 000000000..6c41fc8b5 --- /dev/null +++ b/dist/api/interfaces/core_types.Point.md @@ -0,0 +1,32 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / Point + +# Interface: Point + +[core/types](../modules/core_types.md).Point + +## Table of contents + +### Properties + +- [x](core_types.Point.md#x) +- [y](core_types.Point.md#y) + +## Properties + +### x + +• **x**: `number` + +#### Defined in + +[core/types.ts:17](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L17) + +___ + +### y + +• **y**: `number` + +#### Defined in + +[core/types.ts:18](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L18) diff --git a/dist/api/interfaces/core_types.PointerEventsOptions.md b/dist/api/interfaces/core_types.PointerEventsOptions.md new file mode 100644 index 000000000..ba8a35402 --- /dev/null +++ b/dist/api/interfaces/core_types.PointerEventsOptions.md @@ -0,0 +1,54 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / PointerEventsOptions + +# Interface: PointerEventsOptions + +[core/types](../modules/core_types.md).PointerEventsOptions + +## Table of contents + +### Properties + +- [allowFrom](core_types.PointerEventsOptions.md#allowfrom) +- [holdDuration](core_types.PointerEventsOptions.md#holdduration) +- [ignoreFrom](core_types.PointerEventsOptions.md#ignorefrom) +- [origin](core_types.PointerEventsOptions.md#origin) + +## Properties + +### allowFrom + +• `Optional` **allowFrom**: `string` + +#### Defined in + +[core/types.ts:125](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L125) + +___ + +### holdDuration + +• `Optional` **holdDuration**: `number` + +#### Defined in + +[core/types.ts:124](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L124) + +___ + +### ignoreFrom + +• `Optional` **ignoreFrom**: `string` + +#### Defined in + +[core/types.ts:126](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L126) + +___ + +### origin + +• `Optional` **origin**: `string` \| [`Element`](../modules/core_types.md#element) \| [`Rect`](core_types.Rect.md) \| [`Point`](core_types.Point.md) \| [`OriginFunction`](../modules/core_types.md#originfunction) + +#### Defined in + +[core/types.ts:127](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L127) diff --git a/dist/api/interfaces/core_types.Rect.md b/dist/api/interfaces/core_types.Rect.md new file mode 100644 index 000000000..e97378615 --- /dev/null +++ b/dist/api/interfaces/core_types.Rect.md @@ -0,0 +1,76 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / Rect + +# Interface: Rect + +[core/types](../modules/core_types.md).Rect + +## Table of contents + +### Properties + +- [bottom](core_types.Rect.md#bottom) +- [height](core_types.Rect.md#height) +- [left](core_types.Rect.md#left) +- [right](core_types.Rect.md#right) +- [top](core_types.Rect.md#top) +- [width](core_types.Rect.md#width) + +## Properties + +### bottom + +• **bottom**: `number` + +#### Defined in + +[core/types.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L29) + +___ + +### height + +• `Optional` **height**: `number` + +#### Defined in + +[core/types.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L32) + +___ + +### left + +• **left**: `number` + +#### Defined in + +[core/types.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L28) + +___ + +### right + +• **right**: `number` + +#### Defined in + +[core/types.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L30) + +___ + +### top + +• **top**: `number` + +#### Defined in + +[core/types.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L27) + +___ + +### width + +• `Optional` **width**: `number` + +#### Defined in + +[core/types.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L31) diff --git a/dist/api/interfaces/core_types.Size.md b/dist/api/interfaces/core_types.Size.md new file mode 100644 index 000000000..711ac42ec --- /dev/null +++ b/dist/api/interfaces/core_types.Size.md @@ -0,0 +1,32 @@ +[@interactjs](../README.md) / [core/types](../modules/core_types.md) / Size + +# Interface: Size + +[core/types](../modules/core_types.md).Size + +## Table of contents + +### Properties + +- [height](core_types.Size.md#height) +- [width](core_types.Size.md#width) + +## Properties + +### height + +• **height**: `number` + +#### Defined in + +[core/types.ts:23](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L23) + +___ + +### width + +• **width**: `number` + +#### Defined in + +[core/types.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L22) diff --git a/dist/api/interfaces/dev_tools_plugin.Check.md b/dist/api/interfaces/dev_tools_plugin.Check.md new file mode 100644 index 000000000..e57a9e834 --- /dev/null +++ b/dist/api/interfaces/dev_tools_plugin.Check.md @@ -0,0 +1,82 @@ +[@interactjs](../README.md) / [dev-tools/plugin](../modules/dev_tools_plugin.md) / Check + +# Interface: Check + +[dev-tools/plugin](../modules/dev_tools_plugin.md).Check + +## Table of contents + +### Properties + +- [getInfo](dev_tools_plugin.Check.md#getinfo) +- [name](dev_tools_plugin.Check.md#name) +- [perform](dev_tools_plugin.Check.md#perform) +- [text](dev_tools_plugin.Check.md#text) + +## Properties + +### getInfo + +• **getInfo**: (`interaction`: [`Interaction`](../classes/core_Interaction.Interaction.md)\) => `any`[] + +#### Type declaration + +▸ (`interaction`): `any`[] + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | + +##### Returns + +`any`[] + +#### Defined in + +[dev-tools/plugin.ts:55](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L55) + +___ + +### name + +• **name**: `CheckName` + +#### Defined in + +[dev-tools/plugin.ts:52](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L52) + +___ + +### perform + +• **perform**: (`interaction`: [`Interaction`](../classes/core_Interaction.Interaction.md)\) => `boolean` + +#### Type declaration + +▸ (`interaction`): `boolean` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\ | + +##### Returns + +`boolean` + +#### Defined in + +[dev-tools/plugin.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L54) + +___ + +### text + +• **text**: `string` + +#### Defined in + +[dev-tools/plugin.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L53) diff --git a/dist/api/interfaces/dev_tools_plugin.DevToolsOptions.md b/dist/api/interfaces/dev_tools_plugin.DevToolsOptions.md new file mode 100644 index 000000000..680b6138c --- /dev/null +++ b/dist/api/interfaces/dev_tools_plugin.DevToolsOptions.md @@ -0,0 +1,29 @@ +[@interactjs](../README.md) / [dev-tools/plugin](../modules/dev_tools_plugin.md) / DevToolsOptions + +# Interface: DevToolsOptions + +[dev-tools/plugin](../modules/dev_tools_plugin.md).DevToolsOptions + +## Table of contents + +### Properties + +- [ignore](dev_tools_plugin.DevToolsOptions.md#ignore) + +## Properties + +### ignore + +• **ignore**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `boxSizing` | `boolean` | +| `noListeners` | `boolean` | +| `touchAction` | `boolean` | + +#### Defined in + +[dev-tools/plugin.ts:42](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L42) diff --git a/dist/api/interfaces/dev_tools_plugin.Logger.md b/dist/api/interfaces/dev_tools_plugin.Logger.md new file mode 100644 index 000000000..d6c037c6a --- /dev/null +++ b/dist/api/interfaces/dev_tools_plugin.Logger.md @@ -0,0 +1,85 @@ +[@interactjs](../README.md) / [dev-tools/plugin](../modules/dev_tools_plugin.md) / Logger + +# Interface: Logger + +[dev-tools/plugin](../modules/dev_tools_plugin.md).Logger + +## Table of contents + +### Properties + +- [error](dev_tools_plugin.Logger.md#error) +- [log](dev_tools_plugin.Logger.md#log) +- [warn](dev_tools_plugin.Logger.md#warn) + +## Properties + +### error + +• **error**: (...`args`: `any`[]) => `void` + +#### Type declaration + +▸ (`...args`): `void` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | `any`[] | + +##### Returns + +`void` + +#### Defined in + +[dev-tools/plugin.ts:47](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L47) + +___ + +### log + +• **log**: (...`args`: `any`[]) => `void` + +#### Type declaration + +▸ (`...args`): `void` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | `any`[] | + +##### Returns + +`void` + +#### Defined in + +[dev-tools/plugin.ts:48](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L48) + +___ + +### warn + +• **warn**: (...`args`: `any`[]) => `void` + +#### Type declaration + +▸ (`...args`): `void` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | `any`[] | + +##### Returns + +`void` + +#### Defined in + +[dev-tools/plugin.ts:46](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/dev-tools/plugin.ts#L46) diff --git a/dist/api/interfaces/modifiers_Modification.ModificationResult.md b/dist/api/interfaces/modifiers_Modification.ModificationResult.md new file mode 100644 index 000000000..a33d34b59 --- /dev/null +++ b/dist/api/interfaces/modifiers_Modification.ModificationResult.md @@ -0,0 +1,76 @@ +[@interactjs](../README.md) / [modifiers/Modification](../modules/modifiers_Modification.md) / ModificationResult + +# Interface: ModificationResult + +[modifiers/Modification](../modules/modifiers_Modification.md).ModificationResult + +## Table of contents + +### Properties + +- [changed](modifiers_Modification.ModificationResult.md#changed) +- [coords](modifiers_Modification.ModificationResult.md#coords) +- [delta](modifiers_Modification.ModificationResult.md#delta) +- [eventProps](modifiers_Modification.ModificationResult.md#eventprops) +- [rect](modifiers_Modification.ModificationResult.md#rect) +- [rectDelta](modifiers_Modification.ModificationResult.md#rectdelta) + +## Properties + +### changed + +• **changed**: `boolean` + +#### Defined in + +[modifiers/Modification.ts:16](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L16) + +___ + +### coords + +• **coords**: [`Point`](core_types.Point.md) + +#### Defined in + +[modifiers/Modification.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L13) + +___ + +### delta + +• **delta**: [`Point`](core_types.Point.md) + +#### Defined in + +[modifiers/Modification.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L11) + +___ + +### eventProps + +• **eventProps**: `any`[] + +#### Defined in + +[modifiers/Modification.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L15) + +___ + +### rect + +• **rect**: `Required`\<[`Rect`](core_types.Rect.md)\> + +#### Defined in + +[modifiers/Modification.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L14) + +___ + +### rectDelta + +• **rectDelta**: [`Rect`](core_types.Rect.md) + +#### Defined in + +[modifiers/Modification.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L12) diff --git a/dist/api/interfaces/modifiers_aspectRatio.AspectRatioOptions.md b/dist/api/interfaces/modifiers_aspectRatio.AspectRatioOptions.md new file mode 100644 index 000000000..e23951f6e --- /dev/null +++ b/dist/api/interfaces/modifiers_aspectRatio.AspectRatioOptions.md @@ -0,0 +1,54 @@ +[@interactjs](../README.md) / [modifiers/aspectRatio](../modules/modifiers_aspectRatio.md) / AspectRatioOptions + +# Interface: AspectRatioOptions + +[modifiers/aspectRatio](../modules/modifiers_aspectRatio.md).AspectRatioOptions + +## Table of contents + +### Properties + +- [enabled](modifiers_aspectRatio.AspectRatioOptions.md#enabled) +- [equalDelta](modifiers_aspectRatio.AspectRatioOptions.md#equaldelta) +- [modifiers](modifiers_aspectRatio.AspectRatioOptions.md#modifiers) +- [ratio](modifiers_aspectRatio.AspectRatioOptions.md#ratio) + +## Properties + +### enabled + +• `Optional` **enabled**: `boolean` + +#### Defined in + +[modifiers/aspectRatio.ts:31](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/aspectRatio.ts#L31) + +___ + +### equalDelta + +• `Optional` **equalDelta**: `boolean` + +#### Defined in + +[modifiers/aspectRatio.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/aspectRatio.ts#L29) + +___ + +### modifiers + +• `Optional` **modifiers**: [`Modifier`](modifiers_types.Modifier.md)\<`any`, `any`, `any`, `any`\>[] + +#### Defined in + +[modifiers/aspectRatio.ts:30](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/aspectRatio.ts#L30) + +___ + +### ratio + +• `Optional` **ratio**: `number` \| ``"preserve"`` + +#### Defined in + +[modifiers/aspectRatio.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/aspectRatio.ts#L28) diff --git a/dist/api/interfaces/modifiers_types.Modifier.md b/dist/api/interfaces/modifiers_types.Modifier.md new file mode 100644 index 000000000..d169fd65f --- /dev/null +++ b/dist/api/interfaces/modifiers_types.Modifier.md @@ -0,0 +1,99 @@ +[@interactjs](../README.md) / [modifiers/types](../modules/modifiers_types.md) / Modifier + +# Interface: Modifier\ + +[modifiers/types](../modules/modifiers_types.md).Modifier + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `Defaults` | `any` | +| `State` | extends [`ModifierState`](../modules/modifiers_types.md#modifierstate) = `any` | +| `Name` | extends `string` = `any` | +| `Result` | `any` | + +## Table of contents + +### Properties + +- [disable](modifiers_types.Modifier.md#disable) +- [enable](modifiers_types.Modifier.md#enable) +- [methods](modifiers_types.Modifier.md#methods) +- [name](modifiers_types.Modifier.md#name) +- [options](modifiers_types.Modifier.md#options) + +## Properties + +### disable + +• **disable**: () => [`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +#### Type declaration + +▸ (): [`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +##### Returns + +[`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +#### Defined in + +[modifiers/types.ts:21](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L21) + +___ + +### enable + +• **enable**: () => [`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +#### Type declaration + +▸ (): [`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +##### Returns + +[`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +#### Defined in + +[modifiers/types.ts:20](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L20) + +___ + +### methods + +• **methods**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `beforeEnd?` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\>) => `void` \| [`Point`](core_types.Point.md) | +| `set?` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\>) => `Result` | +| `start?` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\>) => `void` | +| `stop?` | (`arg`: [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\>) => `void` | + +#### Defined in + +[modifiers/types.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L13) + +___ + +### name + +• `Optional` **name**: `Name` + +#### Defined in + +[modifiers/types.ts:19](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L19) + +___ + +### options + +• **options**: `Defaults` + +#### Defined in + +[modifiers/types.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L12) diff --git a/dist/api/interfaces/modifiers_types.ModifierArg.md b/dist/api/interfaces/modifiers_types.ModifierArg.md new file mode 100644 index 000000000..e6a1187b1 --- /dev/null +++ b/dist/api/interfaces/modifiers_types.ModifierArg.md @@ -0,0 +1,159 @@ +[@interactjs](../README.md) / [modifiers/types](../modules/modifiers_types.md) / ModifierArg + +# Interface: ModifierArg\ + +[modifiers/types](../modules/modifiers_types.md).ModifierArg + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `State` | extends [`ModifierState`](../modules/modifiers_types.md#modifierstate) = [`ModifierState`](../modules/modifiers_types.md#modifierstate) | + +## Table of contents + +### Properties + +- [coords](modifiers_types.ModifierArg.md#coords) +- [edges](modifiers_types.ModifierArg.md#edges) +- [element](modifiers_types.ModifierArg.md#element) +- [interactable](modifiers_types.ModifierArg.md#interactable) +- [interaction](modifiers_types.ModifierArg.md#interaction) +- [pageCoords](modifiers_types.ModifierArg.md#pagecoords) +- [phase](modifiers_types.ModifierArg.md#phase) +- [preEnd](modifiers_types.ModifierArg.md#preend) +- [prevCoords](modifiers_types.ModifierArg.md#prevcoords) +- [prevRect](modifiers_types.ModifierArg.md#prevrect) +- [rect](modifiers_types.ModifierArg.md#rect) +- [startOffset](modifiers_types.ModifierArg.md#startoffset) +- [state](modifiers_types.ModifierArg.md#state) + +## Properties + +### coords + +• **coords**: [`Point`](core_types.Point.md) + +#### Defined in + +[modifiers/types.ts:42](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L42) + +___ + +### edges + +• **edges**: [`EdgeOptions`](core_types.EdgeOptions.md) + +#### Defined in + +[modifiers/types.ts:36](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L36) + +___ + +### element + +• **element**: `Element` + +#### Defined in + +[modifiers/types.ts:38](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L38) + +___ + +### interactable + +• **interactable**: [`Interactable`](../classes/core_Interactable.Interactable.md) + +#### Defined in + +[modifiers/types.ts:33](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L33) + +___ + +### interaction + +• **interaction**: [`Interaction`](../classes/core_Interaction.Interaction.md)\ + +#### Defined in + +[modifiers/types.ts:32](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L32) + +___ + +### pageCoords + +• **pageCoords**: [`Point`](core_types.Point.md) + +#### Defined in + +[modifiers/types.ts:39](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L39) + +___ + +### phase + +• **phase**: keyof [`PhaseMap`](core_InteractEvent.PhaseMap.md) + +#### Defined in + +[modifiers/types.ts:34](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L34) + +___ + +### preEnd + +• `Optional` **preEnd**: `boolean` + +#### Defined in + +[modifiers/types.ts:44](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L44) + +___ + +### prevCoords + +• **prevCoords**: [`Point`](core_types.Point.md) + +#### Defined in + +[modifiers/types.ts:40](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L40) + +___ + +### prevRect + +• `Optional` **prevRect**: `Required`\<[`Rect`](core_types.Rect.md)\> + +#### Defined in + +[modifiers/types.ts:41](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L41) + +___ + +### rect + +• **rect**: `Required`\<[`Rect`](core_types.Rect.md)\> + +#### Defined in + +[modifiers/types.ts:35](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L35) + +___ + +### startOffset + +• **startOffset**: [`Rect`](core_types.Rect.md) + +#### Defined in + +[modifiers/types.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L43) + +___ + +### state + +• **state**: `State` + +#### Defined in + +[modifiers/types.ts:37](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L37) diff --git a/dist/api/interfaces/modifiers_types.ModifierFunction.md b/dist/api/interfaces/modifiers_types.ModifierFunction.md new file mode 100644 index 000000000..4c172e039 --- /dev/null +++ b/dist/api/interfaces/modifiers_types.ModifierFunction.md @@ -0,0 +1,60 @@ +[@interactjs](../README.md) / [modifiers/types](../modules/modifiers_types.md) / ModifierFunction + +# Interface: ModifierFunction\ + +[modifiers/types](../modules/modifiers_types.md).ModifierFunction + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `Defaults` | extends `Object` | +| `State` | extends [`ModifierState`](../modules/modifiers_types.md#modifierstate) | +| `Name` | extends `string` | + +## Callable + +### ModifierFunction + +▸ **ModifierFunction**(`_options?`): [`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `any`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_options?` | `Partial`\<`Defaults`\> | + +#### Returns + +[`Modifier`](modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `any`\> + +#### Defined in + +[modifiers/types.ts:64](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L64) + +## Table of contents + +### Properties + +- [\_defaults](modifiers_types.ModifierFunction.md#_defaults) +- [\_methods](modifiers_types.ModifierFunction.md#_methods) + +## Properties + +### \_defaults + +• **\_defaults**: `Defaults` + +#### Defined in + +[modifiers/types.ts:65](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L65) + +___ + +### \_methods + +• **\_methods**: [`ModifierModule`](modifiers_types.ModifierModule.md)\<`Defaults`, `State`, `unknown`\> + +#### Defined in + +[modifiers/types.ts:66](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L66) diff --git a/dist/api/interfaces/modifiers_types.ModifierModule.md b/dist/api/interfaces/modifiers_types.ModifierModule.md new file mode 100644 index 000000000..aec2ebefb --- /dev/null +++ b/dist/api/interfaces/modifiers_types.ModifierModule.md @@ -0,0 +1,116 @@ +[@interactjs](../README.md) / [modifiers/types](../modules/modifiers_types.md) / ModifierModule + +# Interface: ModifierModule\ + +[modifiers/types](../modules/modifiers_types.md).ModifierModule + +## Type parameters + +| Name | Type | +| :------ | :------ | +| `Defaults` | extends `Object` | +| `State` | extends [`ModifierState`](../modules/modifiers_types.md#modifierstate) | +| `Result` | `unknown` | + +## Table of contents + +### Properties + +- [defaults](modifiers_types.ModifierModule.md#defaults) + +### Methods + +- [beforeEnd](modifiers_types.ModifierModule.md#beforeend) +- [set](modifiers_types.ModifierModule.md#set) +- [start](modifiers_types.ModifierModule.md#start) +- [stop](modifiers_types.ModifierModule.md#stop) + +## Properties + +### defaults + +• `Optional` **defaults**: `Defaults` + +#### Defined in + +[modifiers/types.ts:52](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L52) + +## Methods + +### beforeEnd + +▸ **beforeEnd**(`arg`): `void` \| [`Point`](core_types.Point.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\> | + +#### Returns + +`void` \| [`Point`](core_types.Point.md) + +#### Defined in + +[modifiers/types.ts:55](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L55) + +___ + +### set + +▸ **set**(`arg`): `Result` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\> | + +#### Returns + +`Result` + +#### Defined in + +[modifiers/types.ts:54](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L54) + +___ + +### start + +▸ **start**(`arg`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\> | + +#### Returns + +`void` + +#### Defined in + +[modifiers/types.ts:53](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L53) + +___ + +### stop + +▸ **stop**(`arg`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `arg` | [`ModifierArg`](modifiers_types.ModifierArg.md)\<`State`\> | + +#### Returns + +`void` + +#### Defined in + +[modifiers/types.ts:56](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L56) diff --git a/dist/api/interfaces/pointer_events_base.PointerEventOptions.md b/dist/api/interfaces/pointer_events_base.PointerEventOptions.md new file mode 100644 index 000000000..28aeda639 --- /dev/null +++ b/dist/api/interfaces/pointer_events_base.PointerEventOptions.md @@ -0,0 +1,274 @@ +[@interactjs](../README.md) / [pointer-events/base](../modules/pointer_events_base.md) / PointerEventOptions + +# Interface: PointerEventOptions + +[pointer-events/base](../modules/pointer_events_base.md).PointerEventOptions + +## Hierarchy + +- [`PerActionDefaults`](core_options.PerActionDefaults.md) + + ↳ **`PointerEventOptions`** + +## Table of contents + +### Properties + +- [allowFrom](pointer_events_base.PointerEventOptions.md#allowfrom) +- [autoScroll](pointer_events_base.PointerEventOptions.md#autoscroll) +- [cursorChecker](pointer_events_base.PointerEventOptions.md#cursorchecker) +- [delay](pointer_events_base.PointerEventOptions.md#delay) +- [enabled](pointer_events_base.PointerEventOptions.md#enabled) +- [hold](pointer_events_base.PointerEventOptions.md#hold) +- [holdDuration](pointer_events_base.PointerEventOptions.md#holdduration) +- [holdRepeatInterval](pointer_events_base.PointerEventOptions.md#holdrepeatinterval) +- [ignoreFrom](pointer_events_base.PointerEventOptions.md#ignorefrom) +- [inertia](pointer_events_base.PointerEventOptions.md#inertia) +- [listeners](pointer_events_base.PointerEventOptions.md#listeners) +- [manualStart](pointer_events_base.PointerEventOptions.md#manualstart) +- [max](pointer_events_base.PointerEventOptions.md#max) +- [maxPerElement](pointer_events_base.PointerEventOptions.md#maxperelement) +- [modifiers](pointer_events_base.PointerEventOptions.md#modifiers) +- [mouseButtons](pointer_events_base.PointerEventOptions.md#mousebuttons) +- [origin](pointer_events_base.PointerEventOptions.md#origin) + +## Properties + +### allowFrom + +• `Optional` **allowFrom**: `any` + +#### Overrides + +[PerActionDefaults](core_options.PerActionDefaults.md).[allowFrom](core_options.PerActionDefaults.md#allowfrom) + +#### Defined in + +[pointer-events/base.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L22) + +___ + +### autoScroll + +• `Optional` **autoScroll**: [`AutoScrollOptions`](auto_scroll_plugin.AutoScrollOptions.md) + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[autoScroll](core_options.PerActionDefaults.md#autoscroll) + +#### Defined in + +[auto-scroll/plugin.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L25) + +___ + +### cursorChecker + +• `Optional` **cursorChecker**: [`CursorChecker`](../modules/core_types.md#cursorchecker) + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[cursorChecker](core_options.PerActionDefaults.md#cursorchecker) + +#### Defined in + +[auto-start/base.ts:64](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L64) + +___ + +### delay + +• `Optional` **delay**: `number` + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[delay](core_options.PerActionDefaults.md#delay) + +#### Defined in + +[auto-start/hold.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/hold.ts#L12) + +___ + +### enabled + +• `Optional` **enabled**: `undefined` + +#### Overrides + +[PerActionDefaults](core_options.PerActionDefaults.md).[enabled](core_options.PerActionDefaults.md#enabled) + +#### Defined in + +[pointer-events/base.ts:19](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L19) + +___ + +### hold + +• `Optional` **hold**: `number` + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[hold](core_options.PerActionDefaults.md#hold) + +#### Defined in + +[auto-start/hold.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/hold.ts#L11) + +___ + +### holdDuration + +• `Optional` **holdDuration**: `number` + +#### Defined in + +[pointer-events/base.ts:20](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L20) + +___ + +### holdRepeatInterval + +• `Optional` **holdRepeatInterval**: `number` + +#### Defined in + +[pointer-events/holdRepeat.ts:24](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/holdRepeat.ts#L24) + +___ + +### ignoreFrom + +• `Optional` **ignoreFrom**: `any` + +#### Overrides + +[PerActionDefaults](core_options.PerActionDefaults.md).[ignoreFrom](core_options.PerActionDefaults.md#ignorefrom) + +#### Defined in + +[pointer-events/base.ts:21](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L21) + +___ + +### inertia + +• `Optional` **inertia**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `allowResume?` | ``true`` | +| `enabled?` | `boolean` | +| `endSpeed?` | `number` | +| `minSpeed?` | `number` | +| `resistance?` | `number` | +| `smoothEndDuration?` | `number` | + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[inertia](core_options.PerActionDefaults.md#inertia) + +#### Defined in + +[inertia/plugin.ts:33](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/inertia/plugin.ts#L33) + +___ + +### listeners + +• `Optional` **listeners**: [`Listeners`](../modules/core_types.md#listeners) + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[listeners](core_options.PerActionDefaults.md#listeners) + +#### Defined in + +[core/options.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L22) + +___ + +### manualStart + +• `Optional` **manualStart**: `boolean` + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[manualStart](core_options.PerActionDefaults.md#manualstart) + +#### Defined in + +[auto-start/base.ts:59](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L59) + +___ + +### max + +• `Optional` **max**: `number` + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[max](core_options.PerActionDefaults.md#max) + +#### Defined in + +[auto-start/base.ts:60](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L60) + +___ + +### maxPerElement + +• `Optional` **maxPerElement**: `number` + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[maxPerElement](core_options.PerActionDefaults.md#maxperelement) + +#### Defined in + +[auto-start/base.ts:61](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L61) + +___ + +### modifiers + +• `Optional` **modifiers**: [`Modifier`](modifiers_types.Modifier.md)\<`any`, `any`, `any`, `any`\>[] + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[modifiers](core_options.PerActionDefaults.md#modifiers) + +#### Defined in + +[modifiers/base.ts:25](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L25) + +___ + +### mouseButtons + +• `Optional` **mouseButtons**: ``0`` \| ``1`` \| ``16`` \| ``2`` \| ``4`` \| ``8`` + +#### Inherited from + +[PerActionDefaults](core_options.PerActionDefaults.md).[mouseButtons](core_options.PerActionDefaults.md#mousebuttons) + +#### Defined in + +[auto-start/base.ts:69](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-start/base.ts#L69) + +___ + +### origin + +• `Optional` **origin**: `string` \| [`Element`](../modules/core_types.md#element) \| [`Point`](core_types.Point.md) + +#### Overrides + +[PerActionDefaults](core_options.PerActionDefaults.md).[origin](core_options.PerActionDefaults.md#origin) + +#### Defined in + +[pointer-events/base.ts:23](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L23) diff --git a/dist/api/interfaces/snappers_grid.GridOptionsBase.md b/dist/api/interfaces/snappers_grid.GridOptionsBase.md new file mode 100644 index 000000000..4645669df --- /dev/null +++ b/dist/api/interfaces/snappers_grid.GridOptionsBase.md @@ -0,0 +1,55 @@ +[@interactjs](../README.md) / [snappers/grid](../modules/snappers_grid.md) / GridOptionsBase + +# Interface: GridOptionsBase + +[snappers/grid](../modules/snappers_grid.md).GridOptionsBase + +## Hierarchy + +- **`GridOptionsBase`** + + ↳ [`GridOptionsXY`](snappers_grid.GridOptionsXY.md) + + ↳ [`GridOptionsTopLeft`](snappers_grid.GridOptionsTopLeft.md) + + ↳ [`GridOptionsBottomRight`](snappers_grid.GridOptionsBottomRight.md) + + ↳ [`GridOptionsWidthHeight`](snappers_grid.GridOptionsWidthHeight.md) + +## Table of contents + +### Properties + +- [limits](snappers_grid.GridOptionsBase.md#limits) +- [offset](snappers_grid.GridOptionsBase.md#offset) +- [range](snappers_grid.GridOptionsBase.md#range) + +## Properties + +### limits + +• `Optional` **limits**: [`Rect`](core_types.Rect.md) + +#### Defined in + +[snappers/grid.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L6) + +___ + +### offset + +• `Optional` **offset**: [`Point`](core_types.Point.md) + +#### Defined in + +[snappers/grid.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L7) + +___ + +### range + +• `Optional` **range**: `number` + +#### Defined in + +[snappers/grid.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L5) diff --git a/dist/api/interfaces/snappers_grid.GridOptionsBottomRight.md b/dist/api/interfaces/snappers_grid.GridOptionsBottomRight.md new file mode 100644 index 000000000..3c3233fb1 --- /dev/null +++ b/dist/api/interfaces/snappers_grid.GridOptionsBottomRight.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / [snappers/grid](../modules/snappers_grid.md) / GridOptionsBottomRight + +# Interface: GridOptionsBottomRight + +[snappers/grid](../modules/snappers_grid.md).GridOptionsBottomRight + +## Hierarchy + +- [`GridOptionsBase`](snappers_grid.GridOptionsBase.md) + + ↳ **`GridOptionsBottomRight`** + +## Table of contents + +### Properties + +- [bottom](snappers_grid.GridOptionsBottomRight.md#bottom) +- [limits](snappers_grid.GridOptionsBottomRight.md#limits) +- [offset](snappers_grid.GridOptionsBottomRight.md#offset) +- [range](snappers_grid.GridOptionsBottomRight.md#range) +- [right](snappers_grid.GridOptionsBottomRight.md#right) + +## Properties + +### bottom + +• `Optional` **bottom**: `number` + +#### Defined in + +[snappers/grid.ts:18](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L18) + +___ + +### limits + +• `Optional` **limits**: [`Rect`](core_types.Rect.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[limits](snappers_grid.GridOptionsBase.md#limits) + +#### Defined in + +[snappers/grid.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L6) + +___ + +### offset + +• `Optional` **offset**: [`Point`](core_types.Point.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[offset](snappers_grid.GridOptionsBase.md#offset) + +#### Defined in + +[snappers/grid.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L7) + +___ + +### range + +• `Optional` **range**: `number` + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[range](snappers_grid.GridOptionsBase.md#range) + +#### Defined in + +[snappers/grid.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L5) + +___ + +### right + +• `Optional` **right**: `number` + +#### Defined in + +[snappers/grid.ts:19](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L19) diff --git a/dist/api/interfaces/snappers_grid.GridOptionsTopLeft.md b/dist/api/interfaces/snappers_grid.GridOptionsTopLeft.md new file mode 100644 index 000000000..ec888aeac --- /dev/null +++ b/dist/api/interfaces/snappers_grid.GridOptionsTopLeft.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / [snappers/grid](../modules/snappers_grid.md) / GridOptionsTopLeft + +# Interface: GridOptionsTopLeft + +[snappers/grid](../modules/snappers_grid.md).GridOptionsTopLeft + +## Hierarchy + +- [`GridOptionsBase`](snappers_grid.GridOptionsBase.md) + + ↳ **`GridOptionsTopLeft`** + +## Table of contents + +### Properties + +- [left](snappers_grid.GridOptionsTopLeft.md#left) +- [limits](snappers_grid.GridOptionsTopLeft.md#limits) +- [offset](snappers_grid.GridOptionsTopLeft.md#offset) +- [range](snappers_grid.GridOptionsTopLeft.md#range) +- [top](snappers_grid.GridOptionsTopLeft.md#top) + +## Properties + +### left + +• `Optional` **left**: `number` + +#### Defined in + +[snappers/grid.ts:15](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L15) + +___ + +### limits + +• `Optional` **limits**: [`Rect`](core_types.Rect.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[limits](snappers_grid.GridOptionsBase.md#limits) + +#### Defined in + +[snappers/grid.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L6) + +___ + +### offset + +• `Optional` **offset**: [`Point`](core_types.Point.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[offset](snappers_grid.GridOptionsBase.md#offset) + +#### Defined in + +[snappers/grid.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L7) + +___ + +### range + +• `Optional` **range**: `number` + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[range](snappers_grid.GridOptionsBase.md#range) + +#### Defined in + +[snappers/grid.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L5) + +___ + +### top + +• `Optional` **top**: `number` + +#### Defined in + +[snappers/grid.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L14) diff --git a/dist/api/interfaces/snappers_grid.GridOptionsWidthHeight.md b/dist/api/interfaces/snappers_grid.GridOptionsWidthHeight.md new file mode 100644 index 000000000..fc32e75ad --- /dev/null +++ b/dist/api/interfaces/snappers_grid.GridOptionsWidthHeight.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / [snappers/grid](../modules/snappers_grid.md) / GridOptionsWidthHeight + +# Interface: GridOptionsWidthHeight + +[snappers/grid](../modules/snappers_grid.md).GridOptionsWidthHeight + +## Hierarchy + +- [`GridOptionsBase`](snappers_grid.GridOptionsBase.md) + + ↳ **`GridOptionsWidthHeight`** + +## Table of contents + +### Properties + +- [height](snappers_grid.GridOptionsWidthHeight.md#height) +- [limits](snappers_grid.GridOptionsWidthHeight.md#limits) +- [offset](snappers_grid.GridOptionsWidthHeight.md#offset) +- [range](snappers_grid.GridOptionsWidthHeight.md#range) +- [width](snappers_grid.GridOptionsWidthHeight.md#width) + +## Properties + +### height + +• `Optional` **height**: `number` + +#### Defined in + +[snappers/grid.ts:23](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L23) + +___ + +### limits + +• `Optional` **limits**: [`Rect`](core_types.Rect.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[limits](snappers_grid.GridOptionsBase.md#limits) + +#### Defined in + +[snappers/grid.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L6) + +___ + +### offset + +• `Optional` **offset**: [`Point`](core_types.Point.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[offset](snappers_grid.GridOptionsBase.md#offset) + +#### Defined in + +[snappers/grid.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L7) + +___ + +### range + +• `Optional` **range**: `number` + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[range](snappers_grid.GridOptionsBase.md#range) + +#### Defined in + +[snappers/grid.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L5) + +___ + +### width + +• `Optional` **width**: `number` + +#### Defined in + +[snappers/grid.ts:22](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L22) diff --git a/dist/api/interfaces/snappers_grid.GridOptionsXY.md b/dist/api/interfaces/snappers_grid.GridOptionsXY.md new file mode 100644 index 000000000..c46f9cd1c --- /dev/null +++ b/dist/api/interfaces/snappers_grid.GridOptionsXY.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / [snappers/grid](../modules/snappers_grid.md) / GridOptionsXY + +# Interface: GridOptionsXY + +[snappers/grid](../modules/snappers_grid.md).GridOptionsXY + +## Hierarchy + +- [`GridOptionsBase`](snappers_grid.GridOptionsBase.md) + + ↳ **`GridOptionsXY`** + +## Table of contents + +### Properties + +- [limits](snappers_grid.GridOptionsXY.md#limits) +- [offset](snappers_grid.GridOptionsXY.md#offset) +- [range](snappers_grid.GridOptionsXY.md#range) +- [x](snappers_grid.GridOptionsXY.md#x) +- [y](snappers_grid.GridOptionsXY.md#y) + +## Properties + +### limits + +• `Optional` **limits**: [`Rect`](core_types.Rect.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[limits](snappers_grid.GridOptionsBase.md#limits) + +#### Defined in + +[snappers/grid.ts:6](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L6) + +___ + +### offset + +• `Optional` **offset**: [`Point`](core_types.Point.md) + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[offset](snappers_grid.GridOptionsBase.md#offset) + +#### Defined in + +[snappers/grid.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L7) + +___ + +### range + +• `Optional` **range**: `number` + +#### Inherited from + +[GridOptionsBase](snappers_grid.GridOptionsBase.md).[range](snappers_grid.GridOptionsBase.md#range) + +#### Defined in + +[snappers/grid.ts:5](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L5) + +___ + +### x + +• **x**: `number` + +#### Defined in + +[snappers/grid.ts:10](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L10) + +___ + +### y + +• **y**: `number` + +#### Defined in + +[snappers/grid.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L11) diff --git a/dist/api/modules/auto_scroll_plugin.md b/dist/api/modules/auto_scroll_plugin.md new file mode 100644 index 000000000..66ee90adf --- /dev/null +++ b/dist/api/modules/auto_scroll_plugin.md @@ -0,0 +1,122 @@ +[@interactjs](../README.md) / auto-scroll/plugin + +# Module: auto-scroll/plugin + +## Table of contents + +### Interfaces + +- [AutoScrollOptions](../interfaces/auto_scroll_plugin.AutoScrollOptions.md) + +### Functions + +- [getContainer](auto_scroll_plugin.md#getcontainer) +- [getScroll](auto_scroll_plugin.md#getscroll) +- [getScrollSize](auto_scroll_plugin.md#getscrollsize) +- [getScrollSizeDelta](auto_scroll_plugin.md#getscrollsizedelta) + +## Functions + +### getContainer + +▸ **getContainer**(`value`, `interactable`, `element`): `any` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `value` | `any` | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `element` | `Element` | + +#### Returns + +`any` + +#### Defined in + +[auto-scroll/plugin.ts:207](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L207) + +___ + +### getScroll + +▸ **getScroll**(`container`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `container` | `any` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `x` | `any` | +| `y` | `any` | + +#### Defined in + +[auto-scroll/plugin.ts:213](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L213) + +___ + +### getScrollSize + +▸ **getScrollSize**(`container`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `container` | `any` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `x` | `any` | +| `y` | `any` | + +#### Defined in + +[auto-scroll/plugin.ts:221](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L221) + +___ + +### getScrollSizeDelta + +▸ **getScrollSizeDelta**\<`T`\>(`«destructured»`, `func`): `Object` + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | `Object` | +| › `element` | `Element` | +| › `interaction` | `Partial`\<[`Interaction`](../classes/core_Interaction.Interaction.md)\<`T`\>\> | +| `func` | `any` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `x` | `number` | +| `y` | `number` | + +#### Defined in + +[auto-scroll/plugin.ts:229](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/auto-scroll/plugin.ts#L229) diff --git a/dist/api/modules/auto_start_base.md b/dist/api/modules/auto_start_base.md new file mode 100644 index 000000000..441f6f56c --- /dev/null +++ b/dist/api/modules/auto_start_base.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / auto-start/base + +# Module: auto-start/base + +## Table of contents + +### Interfaces + +- [AutoStart](../interfaces/auto_start_base.AutoStart.md) diff --git a/dist/api/modules/core_BaseEvent.md b/dist/api/modules/core_BaseEvent.md new file mode 100644 index 000000000..d43b4cbca --- /dev/null +++ b/dist/api/modules/core_BaseEvent.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / core/BaseEvent + +# Module: core/BaseEvent + +## Table of contents + +### Classes + +- [BaseEvent](../classes/core_BaseEvent.BaseEvent.md) diff --git a/dist/api/modules/core_Eventable.md b/dist/api/modules/core_Eventable.md new file mode 100644 index 000000000..b0a625864 --- /dev/null +++ b/dist/api/modules/core_Eventable.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / core/Eventable + +# Module: core/Eventable + +## Table of contents + +### Classes + +- [Eventable](../classes/core_Eventable.Eventable.md) diff --git a/dist/api/modules/core_InteractEvent.md b/dist/api/modules/core_InteractEvent.md new file mode 100644 index 000000000..678bbe3af --- /dev/null +++ b/dist/api/modules/core_InteractEvent.md @@ -0,0 +1,27 @@ +[@interactjs](../README.md) / core/InteractEvent + +# Module: core/InteractEvent + +## Table of contents + +### Classes + +- [InteractEvent](../classes/core_InteractEvent.InteractEvent.md) + +### Interfaces + +- [PhaseMap](../interfaces/core_InteractEvent.PhaseMap.md) + +### Type Aliases + +- [EventPhase](core_InteractEvent.md#eventphase) + +## Type Aliases + +### EventPhase + +Ƭ **EventPhase**: keyof [`PhaseMap`](../interfaces/core_InteractEvent.PhaseMap.md) + +#### Defined in + +[core/InteractEvent.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractEvent.ts#L11) diff --git a/dist/api/modules/core_InteractStatic.md b/dist/api/modules/core_InteractStatic.md new file mode 100644 index 000000000..4425a2ec5 --- /dev/null +++ b/dist/api/modules/core_InteractStatic.md @@ -0,0 +1,33 @@ +[@interactjs](../README.md) / core/InteractStatic + +# Module: core/InteractStatic + +## Table of contents + +### Interfaces + +- [InteractStatic](../interfaces/core_InteractStatic.InteractStatic.md) + +### Functions + +- [createInteractStatic](core_InteractStatic.md#createinteractstatic) + +## Functions + +### createInteractStatic + +▸ **createInteractStatic**(`scope`): [`InteractStatic`](../interfaces/core_InteractStatic.InteractStatic.md) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `scope` | `Scope` | + +#### Returns + +[`InteractStatic`](../interfaces/core_InteractStatic.InteractStatic.md) + +#### Defined in + +[core/InteractStatic.ts:98](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/InteractStatic.ts#L98) diff --git a/dist/api/modules/core_Interactable.md b/dist/api/modules/core_Interactable.md new file mode 100644 index 000000000..c6ba1fb3a --- /dev/null +++ b/dist/api/modules/core_Interactable.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / core/Interactable + +# Module: core/Interactable + +## Table of contents + +### Classes + +- [Interactable](../classes/core_Interactable.Interactable.md) diff --git a/dist/api/modules/core_InteractableSet.md b/dist/api/modules/core_InteractableSet.md new file mode 100644 index 000000000..9bebbb93d --- /dev/null +++ b/dist/api/modules/core_InteractableSet.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / core/InteractableSet + +# Module: core/InteractableSet + +## Table of contents + +### Classes + +- [InteractableSet](../classes/core_InteractableSet.InteractableSet.md) diff --git a/dist/api/modules/core_Interaction.md b/dist/api/modules/core_Interaction.md new file mode 100644 index 000000000..de378c018 --- /dev/null +++ b/dist/api/modules/core_Interaction.md @@ -0,0 +1,67 @@ +[@interactjs](../README.md) / core/Interaction + +# Module: core/Interaction + +## Table of contents + +### Enumerations + +- [\_ProxyMethods](../enums/core_Interaction._ProxyMethods.md) +- [\_ProxyValues](../enums/core_Interaction._ProxyValues.md) + +### Classes + +- [Interaction](../classes/core_Interaction.Interaction.md) +- [PointerInfo](../classes/core_Interaction.PointerInfo.md) + +### Interfaces + +- [DoPhaseArg](../interfaces/core_Interaction.DoPhaseArg.md) + +### Type Aliases + +- [DoAnyPhaseArg](core_Interaction.md#doanyphasearg) +- [InteractionProxy](core_Interaction.md#interactionproxy) +- [PointerArgProps](core_Interaction.md#pointerargprops) + +## Type Aliases + +### DoAnyPhaseArg + +Ƭ **DoAnyPhaseArg**: [`DoPhaseArg`](../interfaces/core_Interaction.DoPhaseArg.md)\<[`ActionName`](core_types.md#actionname), [`EventPhase`](core_InteractEvent.md#eventphase)\> + +#### Defined in + +[core/Interaction.ts:61](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L61) + +___ + +### InteractionProxy + +Ƭ **InteractionProxy**\<`T`\>: `Pick`\<[`Interaction`](../classes/core_Interaction.Interaction.md)\<`T`\>, keyof typeof [`_ProxyValues`](../enums/core_Interaction._ProxyValues.md) \| keyof typeof [`_ProxyMethods`](../enums/core_Interaction._ProxyMethods.md)\> + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends [`ActionName`](core_types.md#actionname) \| ``null`` = `never` | + +#### Defined in + +[core/Interaction.ts:101](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L101) + +___ + +### PointerArgProps + +Ƭ **PointerArgProps**\<`T`\>: \{ `event`: [`PointerEventType`](core_types.md#pointereventtype) ; `eventTarget`: `Node` ; `interaction`: [`Interaction`](../classes/core_Interaction.Interaction.md)\<`never`\> ; `pointer`: [`PointerType`](core_types.md#pointertype) ; `pointerIndex`: `number` ; `pointerInfo`: [`PointerInfo`](../classes/core_Interaction.PointerInfo.md) } & `T` + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `Object` = {} | + +#### Defined in + +[core/Interaction.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/Interaction.ts#L43) diff --git a/dist/api/modules/core_NativeTypes.md b/dist/api/modules/core_NativeTypes.md new file mode 100644 index 000000000..4f0513e8f --- /dev/null +++ b/dist/api/modules/core_NativeTypes.md @@ -0,0 +1,30 @@ +[@interactjs](../README.md) / core/NativeTypes + +# Module: core/NativeTypes + +## Table of contents + +### Type Aliases + +- [NativeElement](core_NativeTypes.md#nativeelement) +- [NativeEventTarget](core_NativeTypes.md#nativeeventtarget) + +## Type Aliases + +### NativeElement + +Ƭ **NativeElement**: `Element` + +#### Defined in + +[core/NativeTypes.ts:3](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/NativeTypes.ts#L3) + +___ + +### NativeEventTarget + +Ƭ **NativeEventTarget**: `EventTarget` + +#### Defined in + +[core/NativeTypes.ts:2](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/NativeTypes.ts#L2) diff --git a/dist/api/modules/core_interactablePreventDefault.md b/dist/api/modules/core_interactablePreventDefault.md new file mode 100644 index 000000000..770787522 --- /dev/null +++ b/dist/api/modules/core_interactablePreventDefault.md @@ -0,0 +1,29 @@ +[@interactjs](../README.md) / core/interactablePreventDefault + +# Module: core/interactablePreventDefault + +## Table of contents + +### Functions + +- [install](core_interactablePreventDefault.md#install) + +## Functions + +### install + +▸ **install**(`scope`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `scope` | `Scope` | + +#### Returns + +`void` + +#### Defined in + +[core/interactablePreventDefault.ts:91](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/interactablePreventDefault.ts#L91) diff --git a/dist/api/modules/core_interactionFinder.md b/dist/api/modules/core_interactionFinder.md new file mode 100644 index 000000000..c5c72e1aa --- /dev/null +++ b/dist/api/modules/core_interactionFinder.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / core/interactionFinder + +# Module: core/interactionFinder + +## Table of contents + +### Interfaces + +- [SearchDetails](../interfaces/core_interactionFinder.SearchDetails.md) diff --git a/dist/api/modules/core_options.md b/dist/api/modules/core_options.md new file mode 100644 index 000000000..8f1e66e00 --- /dev/null +++ b/dist/api/modules/core_options.md @@ -0,0 +1,27 @@ +[@interactjs](../README.md) / core/options + +# Module: core/options + +## Table of contents + +### Interfaces + +- [ActionDefaults](../interfaces/core_options.ActionDefaults.md) +- [BaseDefaults](../interfaces/core_options.BaseDefaults.md) +- [Defaults](../interfaces/core_options.Defaults.md) +- [OptionsArg](../interfaces/core_options.OptionsArg.md) +- [PerActionDefaults](../interfaces/core_options.PerActionDefaults.md) + +### Type Aliases + +- [Options](core_options.md#options) + +## Type Aliases + +### Options + +Ƭ **Options**: `Partial`\<[`BaseDefaults`](../interfaces/core_options.BaseDefaults.md)\> & `Partial`\<[`PerActionDefaults`](../interfaces/core_options.PerActionDefaults.md)\> & \{ [P in keyof ActionDefaults]?: Partial\ } + +#### Defined in + +[core/options.ts:27](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/options.ts#L27) diff --git a/dist/api/modules/core_scope.md b/dist/api/modules/core_scope.md new file mode 100644 index 000000000..ffb9a2d5c --- /dev/null +++ b/dist/api/modules/core_scope.md @@ -0,0 +1,34 @@ +[@interactjs](../README.md) / core/scope + +# Module: core/scope + +## Table of contents + +### Interfaces + +- [SignalArgs](../interfaces/core_scope.SignalArgs.md) + +### Type Aliases + +- [ListenerMap](core_scope.md#listenermap) +- [ListenerName](core_scope.md#listenername) + +## Type Aliases + +### ListenerMap + +Ƭ **ListenerMap**: \{ [P in ListenerName]?: Function } + +#### Defined in + +[core/scope.ts:36](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L36) + +___ + +### ListenerName + +Ƭ **ListenerName**: keyof [`SignalArgs`](../interfaces/core_scope.SignalArgs.md) + +#### Defined in + +[core/scope.ts:34](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/scope.ts#L34) diff --git a/dist/api/modules/core_types.md b/dist/api/modules/core_types.md new file mode 100644 index 000000000..34ba9a70d --- /dev/null +++ b/dist/api/modules/core_types.md @@ -0,0 +1,394 @@ +[@interactjs](../README.md) / core/types + +# Module: core/types + +## Table of contents + +### Interfaces + +- [ActionMap](../interfaces/core_types.ActionMap.md) +- [ActionMethod](../interfaces/core_types.ActionMethod.md) +- [ActionProps](../interfaces/core_types.ActionProps.md) +- [Actions](../interfaces/core_types.Actions.md) +- [CoordsSet](../interfaces/core_types.CoordsSet.md) +- [CoordsSetMember](../interfaces/core_types.CoordsSetMember.md) +- [EdgeOptions](../interfaces/core_types.EdgeOptions.md) +- [HasGetRect](../interfaces/core_types.HasGetRect.md) +- [InertiaOption](../interfaces/core_types.InertiaOption.md) +- [ListenerMap](../interfaces/core_types.ListenerMap.md) +- [OptionMethod](../interfaces/core_types.OptionMethod.md) +- [Point](../interfaces/core_types.Point.md) +- [PointerEventsOptions](../interfaces/core_types.PointerEventsOptions.md) +- [Rect](../interfaces/core_types.Rect.md) +- [Size](../interfaces/core_types.Size.md) + +### Type Aliases + +- [ActionChecker](core_types.md#actionchecker) +- [ActionName](core_types.md#actionname) +- [ArrayElementType](core_types.md#arrayelementtype) +- [Context](core_types.md#context) +- [CursorChecker](core_types.md#cursorchecker) +- [Dimensions](core_types.md#dimensions) +- [Element](core_types.md#element) +- [EventTarget](core_types.md#eventtarget) +- [EventTypes](core_types.md#eventtypes) +- [FullRect](core_types.md#fullrect) +- [InertiaOptions](core_types.md#inertiaoptions) +- [Listener](core_types.md#listener) +- [Listeners](core_types.md#listeners) +- [ListenersArg](core_types.md#listenersarg) +- [NativePointerEventType](core_types.md#nativepointereventtype) +- [OrBoolean](core_types.md#orboolean) +- [OriginFunction](core_types.md#originfunction) +- [PointerEventType](core_types.md#pointereventtype) +- [PointerType](core_types.md#pointertype) +- [RectChecker](core_types.md#rectchecker) +- [RectFunction](core_types.md#rectfunction) +- [RectResolvable](core_types.md#rectresolvable) +- [Target](core_types.md#target) + +## Type Aliases + +### ActionChecker + +Ƭ **ActionChecker**: (`pointerEvent`: `any`, `defaultAction`: `string`, `interactable`: [`Interactable`](../classes/core_Interactable.Interactable.md), `element`: [`Element`](core_types.md#element), `interaction`: [`Interaction`](../classes/core_Interaction.Interaction.md)) => [`ActionProps`](../interfaces/core_types.ActionProps.md) + +#### Type declaration + +▸ (`pointerEvent`, `defaultAction`, `interactable`, `element`, `interaction`): [`ActionProps`](../interfaces/core_types.ActionProps.md) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `pointerEvent` | `any` | +| `defaultAction` | `string` | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `element` | [`Element`](core_types.md#element) | +| `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md) | + +##### Returns + +[`ActionProps`](../interfaces/core_types.ActionProps.md) + +#### Defined in + +[core/types.ts:113](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L113) + +___ + +### ActionName + +Ƭ **ActionName**: keyof [`ActionMap`](../interfaces/core_types.ActionMap.md) + +#### Defined in + +[core/types.ts:64](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L64) + +___ + +### ArrayElementType + +Ƭ **ArrayElementType**\<`T`\>: `T` extends infer P[] ? `P` : `never` + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Defined in + +[core/types.ts:145](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L145) + +___ + +### Context + +Ƭ **Context**: `Document` \| [`Element`](core_types.md#element) + +#### Defined in + +[core/types.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L12) + +___ + +### CursorChecker + +Ƭ **CursorChecker**: (`action`: [`ActionProps`](../interfaces/core_types.ActionProps.md)\<[`ActionName`](core_types.md#actionname)\>, `interactable`: [`Interactable`](../classes/core_Interactable.Interactable.md), `element`: [`Element`](core_types.md#element), `interacting`: `boolean`) => `string` + +#### Type declaration + +▸ (`action`, `interactable`, `element`, `interacting`): `string` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `action` | [`ActionProps`](../interfaces/core_types.ActionProps.md)\<[`ActionName`](core_types.md#actionname)\> | +| `interactable` | [`Interactable`](../classes/core_Interactable.Interactable.md) | +| `element` | [`Element`](core_types.md#element) | +| `interacting` | `boolean` | + +##### Returns + +`string` + +#### Defined in + +[core/types.ts:95](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L95) + +___ + +### Dimensions + +Ƭ **Dimensions**: [`Point`](../interfaces/core_types.Point.md) & [`Size`](../interfaces/core_types.Size.md) + +#### Defined in + +[core/types.ts:41](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L41) + +___ + +### Element + +Ƭ **Element**: `HTMLElement` \| `SVGElement` + +#### Defined in + +[core/types.ts:11](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L11) + +___ + +### EventTarget + +Ƭ **EventTarget**: `Window` \| `Document` \| [`Element`](core_types.md#element) + +#### Defined in + +[core/types.ts:13](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L13) + +___ + +### EventTypes + +Ƭ **EventTypes**: `string` \| [`ListenerMap`](../interfaces/core_types.ListenerMap.md) \| (`string` \| [`ListenerMap`](../interfaces/core_types.ListenerMap.md))[] + +#### Defined in + +[core/types.ts:136](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L136) + +___ + +### FullRect + +Ƭ **FullRect**: `Required`\<[`Rect`](../interfaces/core_types.Rect.md)\> + +#### Defined in + +[core/types.ts:35](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L35) + +___ + +### InertiaOptions + +Ƭ **InertiaOptions**: [`InertiaOption`](../interfaces/core_types.InertiaOption.md) \| `boolean` + +#### Defined in + +[core/types.ts:86](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L86) + +___ + +### Listener + +Ƭ **Listener**: (...`args`: `any`[]) => `any` + +#### Type declaration + +▸ (`...args`): `any` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | `any`[] | + +##### Returns + +`any` + +#### Defined in + +[core/types.ts:138](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L138) + +___ + +### Listeners + +Ƭ **Listeners**: [`ListenerMap`](../interfaces/core_types.ListenerMap.md) \| [`ListenerMap`](../interfaces/core_types.ListenerMap.md)[] + +#### Defined in + +[core/types.ts:139](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L139) + +___ + +### ListenersArg + +Ƭ **ListenersArg**: [`Listener`](core_types.md#listener) \| [`ListenerMap`](../interfaces/core_types.ListenerMap.md) \| ([`Listener`](core_types.md#listener) \| [`ListenerMap`](../interfaces/core_types.ListenerMap.md))[] + +#### Defined in + +[core/types.ts:140](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L140) + +___ + +### NativePointerEventType + +Ƭ **NativePointerEventType**: typeof `NativePointerEvent_` + +#### Defined in + +[core/types.ts:132](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L132) + +___ + +### OrBoolean + +Ƭ **OrBoolean**\<`T`\>: \{ [P in keyof T]: T[P] \| boolean } + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Defined in + +[core/types.ts:7](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L7) + +___ + +### OriginFunction + +Ƭ **OriginFunction**: (`target`: [`Element`](core_types.md#element)) => [`Rect`](../interfaces/core_types.Rect.md) + +#### Type declaration + +▸ (`target`): [`Rect`](../interfaces/core_types.Rect.md) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `target` | [`Element`](core_types.md#element) | + +##### Returns + +[`Rect`](../interfaces/core_types.Rect.md) + +#### Defined in + +[core/types.ts:121](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L121) + +___ + +### PointerEventType + +Ƭ **PointerEventType**: `MouseEvent` \| `TouchEvent` \| `Partial`\<[`NativePointerEventType`](core_types.md#nativepointereventtype)\> \| [`InteractEvent`](../classes/core_InteractEvent.InteractEvent.md) + +#### Defined in + +[core/types.ts:133](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L133) + +___ + +### PointerType + +Ƭ **PointerType**: `MouseEvent` \| `Touch` \| `Partial`\<[`NativePointerEventType`](core_types.md#nativepointereventtype)\> \| [`InteractEvent`](../classes/core_InteractEvent.InteractEvent.md) + +#### Defined in + +[core/types.ts:134](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L134) + +___ + +### RectChecker + +Ƭ **RectChecker**: (`element`: [`Element`](core_types.md#element)) => [`Rect`](../interfaces/core_types.Rect.md) + +#### Type declaration + +▸ (`element`): [`Rect`](../interfaces/core_types.Rect.md) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `element` | [`Element`](core_types.md#element) | + +##### Returns + +[`Rect`](../interfaces/core_types.Rect.md) + +#### Defined in + +[core/types.ts:130](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L130) + +___ + +### RectFunction + +Ƭ **RectFunction**\<`T`\>: (...`args`: `T`) => [`Rect`](../interfaces/core_types.Rect.md) \| [`Element`](core_types.md#element) + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `any`[] | + +#### Type declaration + +▸ (`...args`): [`Rect`](../interfaces/core_types.Rect.md) \| [`Element`](core_types.md#element) + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `...args` | `T` | + +##### Returns + +[`Rect`](../interfaces/core_types.Rect.md) \| [`Element`](core_types.md#element) + +#### Defined in + +[core/types.ts:37](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L37) + +___ + +### RectResolvable + +Ƭ **RectResolvable**\<`T`\>: [`Rect`](../interfaces/core_types.Rect.md) \| `string` \| [`Element`](core_types.md#element) \| [`RectFunction`](core_types.md#rectfunction)\<`T`\> + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `any`[] | + +#### Defined in + +[core/types.ts:39](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L39) + +___ + +### Target + +Ƭ **Target**: [`EventTarget`](core_types.md#eventtarget) \| `string` + +#### Defined in + +[core/types.ts:14](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/core/types.ts#L14) diff --git a/dist/api/modules/dev_tools_plugin.md b/dist/api/modules/dev_tools_plugin.md new file mode 100644 index 000000000..504557f69 --- /dev/null +++ b/dist/api/modules/dev_tools_plugin.md @@ -0,0 +1,11 @@ +[@interactjs](../README.md) / dev-tools/plugin + +# Module: dev-tools/plugin + +## Table of contents + +### Interfaces + +- [Check](../interfaces/dev_tools_plugin.Check.md) +- [DevToolsOptions](../interfaces/dev_tools_plugin.DevToolsOptions.md) +- [Logger](../interfaces/dev_tools_plugin.Logger.md) diff --git a/dist/api/modules/inertia_plugin.md b/dist/api/modules/inertia_plugin.md new file mode 100644 index 000000000..ca9f4396c --- /dev/null +++ b/dist/api/modules/inertia_plugin.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / inertia/plugin + +# Module: inertia/plugin + +## Table of contents + +### Classes + +- [InertiaState](../classes/inertia_plugin.InertiaState.md) diff --git a/dist/api/modules/modifiers_Modification.md b/dist/api/modules/modifiers_Modification.md new file mode 100644 index 000000000..772862e80 --- /dev/null +++ b/dist/api/modules/modifiers_Modification.md @@ -0,0 +1,45 @@ +[@interactjs](../README.md) / modifiers/Modification + +# Module: modifiers/Modification + +## Table of contents + +### Classes + +- [Modification](../classes/modifiers_Modification.Modification.md) + +### Interfaces + +- [ModificationResult](../interfaces/modifiers_Modification.ModificationResult.md) + +### Functions + +- [getRectOffset](modifiers_Modification.md#getrectoffset) + +## Functions + +### getRectOffset + +▸ **getRectOffset**(`rect`, `coords`): `Object` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `rect` | `any` | +| `coords` | `any` | + +#### Returns + +`Object` + +| Name | Type | +| :------ | :------ | +| `bottom` | `number` | +| `left` | `number` | +| `right` | `number` | +| `top` | `number` | + +#### Defined in + +[modifiers/Modification.ts:407](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/Modification.ts#L407) diff --git a/dist/api/modules/modifiers_aspectRatio.default.md b/dist/api/modules/modifiers_aspectRatio.default.md new file mode 100644 index 000000000..47c45f6d5 --- /dev/null +++ b/dist/api/modules/modifiers_aspectRatio.default.md @@ -0,0 +1,5 @@ +[@interactjs](../README.md) / [modifiers/aspectRatio](modifiers_aspectRatio.md) / default + +# Namespace: default + +[modifiers/aspectRatio](modifiers_aspectRatio.md).default diff --git a/dist/api/modules/modifiers_aspectRatio.md b/dist/api/modules/modifiers_aspectRatio.md new file mode 100644 index 000000000..5ff39eca7 --- /dev/null +++ b/dist/api/modules/modifiers_aspectRatio.md @@ -0,0 +1,66 @@ +[@interactjs](../README.md) / modifiers/aspectRatio + +# Module: modifiers/aspectRatio + +**`Description`** + +This modifier forces elements to be resized with a specified dx/dy ratio. + +```js +interact(target).resizable({ + modifiers: [ + interact.modifiers.snapSize({ + targets: [ interact.snappers.grid({ x: 20, y: 20 }) ], + }), + interact.aspectRatio({ ratio: 'preserve' }), + ], +}); +``` + +## Table of contents + +### Namespaces + +- [default](modifiers_aspectRatio.default.md) + +### Interfaces + +- [AspectRatioOptions](../interfaces/modifiers_aspectRatio.AspectRatioOptions.md) + +### Type Aliases + +- [AspectRatioState](modifiers_aspectRatio.md#aspectratiostate) + +### Functions + +- [default](modifiers_aspectRatio.md#default) + +## Type Aliases + +### AspectRatioState + +Ƭ **AspectRatioState**: [`ModifierState`](modifiers_types.md#modifierstate)\<[`AspectRatioOptions`](../interfaces/modifiers_aspectRatio.AspectRatioOptions.md), \{ `edgeSign`: \{ `x`: `number` ; `y`: `number` } ; `equalDelta`: `boolean` ; `linkedEdges`: [`EdgeOptions`](../interfaces/core_types.EdgeOptions.md) ; `ratio`: `number` ; `startCoords`: [`Point`](../interfaces/core_types.Point.md) ; `startRect`: [`Rect`](../interfaces/core_types.Rect.md) ; `subModification`: [`Modification`](../classes/modifiers_Modification.Modification.md) ; `xIsPrimaryAxis`: `boolean` }\> + +#### Defined in + +[modifiers/aspectRatio.ts:34](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/aspectRatio.ts#L34) + +## Functions + +### default + +▸ **default**(`_options?`): [`Modifier`](../interfaces/modifiers_types.Modifier.md)\<[`AspectRatioOptions`](../interfaces/modifiers_aspectRatio.AspectRatioOptions.md), [`AspectRatioState`](modifiers_aspectRatio.md#aspectratiostate), ``"aspectRatio"``, `unknown`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_options?` | `Partial`\<[`AspectRatioOptions`](../interfaces/modifiers_aspectRatio.AspectRatioOptions.md)\> | + +#### Returns + +[`Modifier`](../interfaces/modifiers_types.Modifier.md)\<[`AspectRatioOptions`](../interfaces/modifiers_aspectRatio.AspectRatioOptions.md), [`AspectRatioState`](modifiers_aspectRatio.md#aspectratiostate), ``"aspectRatio"``, `unknown`\> + +#### Defined in + +[modifiers/base.ts:43](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L43) diff --git a/dist/api/modules/modifiers_base.md b/dist/api/modules/modifiers_base.md new file mode 100644 index 000000000..11918cfcd --- /dev/null +++ b/dist/api/modules/modifiers_base.md @@ -0,0 +1,83 @@ +[@interactjs](../README.md) / modifiers/base + +# Module: modifiers/base + +## Table of contents + +### Functions + +- [addEventModifiers](modifiers_base.md#addeventmodifiers) +- [makeModifier](modifiers_base.md#makemodifier) + +## Functions + +### addEventModifiers + +▸ **addEventModifiers**(`«destructured»`): `void` + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `«destructured»` | `Object` | +| › `iEvent` | [`InteractEvent`](../classes/core_InteractEvent.InteractEvent.md)\<`any`, keyof [`PhaseMap`](../interfaces/core_InteractEvent.PhaseMap.md)\> | +| › `interaction` | [`Interaction`](../classes/core_Interaction.Interaction.md)\<`any`\> | + +#### Returns + +`void` + +#### Defined in + +[modifiers/base.ts:81](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L81) + +___ + +### makeModifier + +▸ **makeModifier**\<`Defaults`, `State`, `Name`, `Result`\>(`module`, `name?`): (`_options?`: `Partial`\<`Defaults`\>) => [`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `Defaults` | extends `Object` | +| `State` | extends `Object` | +| `Name` | extends `string` | +| `Result` | `Result` | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `module` | [`ModifierModule`](../interfaces/modifiers_types.ModifierModule.md)\<`Defaults`, `State`, `Result`\> | +| `name?` | `Name` | + +#### Returns + +`fn` + +▸ (`_options?`): [`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `_options?` | `Partial`\<`Defaults`\> | + +##### Returns + +[`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`Defaults`, `State`, `Name`, `Result`\> + +| Name | Type | +| :------ | :------ | +| `_defaults` | `Defaults` | +| `_methods` | \{ `beforeEnd`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) = module.beforeEnd; `set`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `Result` = module.set; `start`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `void` = module.start; `stop`: (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `void` = module.stop } | +| `_methods.beforeEnd` | (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `void` \| [`Point`](../interfaces/core_types.Point.md) | +| `_methods.set` | (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `Result` | +| `_methods.start` | (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `void` | +| `_methods.stop` | (`arg`: [`ModifierArg`](../interfaces/modifiers_types.ModifierArg.md)\<`State`\>) => `void` | + +#### Defined in + +[modifiers/base.ts:29](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/base.ts#L29) diff --git a/dist/api/modules/modifiers_noop.default.md b/dist/api/modules/modifiers_noop.default.md new file mode 100644 index 000000000..32fd64461 --- /dev/null +++ b/dist/api/modules/modifiers_noop.default.md @@ -0,0 +1,5 @@ +[@interactjs](../README.md) / [modifiers/noop](modifiers_noop.md) / default + +# Namespace: default + +[modifiers/noop](modifiers_noop.md).default diff --git a/dist/api/modules/modifiers_noop.md b/dist/api/modules/modifiers_noop.md new file mode 100644 index 000000000..d53a9f8eb --- /dev/null +++ b/dist/api/modules/modifiers_noop.md @@ -0,0 +1,33 @@ +[@interactjs](../README.md) / modifiers/noop + +# Module: modifiers/noop + +## Table of contents + +### Namespaces + +- [default](modifiers_noop.default.md) + +### Functions + +- [default](modifiers_noop.md#default) + +## Functions + +### default + +▸ **default**(`_options?`): [`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`any`, `any`, ``"noop"``, `any`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_options?` | `Partial`\<`any`\> | + +#### Returns + +[`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`any`, `any`, ``"noop"``, `any`\> + +#### Defined in + +[modifiers/types.ts:64](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L64) diff --git a/dist/api/modules/modifiers_types.md b/dist/api/modules/modifiers_types.md new file mode 100644 index 000000000..27534a18f --- /dev/null +++ b/dist/api/modules/modifiers_types.md @@ -0,0 +1,34 @@ +[@interactjs](../README.md) / modifiers/types + +# Module: modifiers/types + +## Table of contents + +### Interfaces + +- [Modifier](../interfaces/modifiers_types.Modifier.md) +- [ModifierArg](../interfaces/modifiers_types.ModifierArg.md) +- [ModifierFunction](../interfaces/modifiers_types.ModifierFunction.md) +- [ModifierModule](../interfaces/modifiers_types.ModifierModule.md) + +### Type Aliases + +- [ModifierState](modifiers_types.md#modifierstate) + +## Type Aliases + +### ModifierState + +Ƭ **ModifierState**\<`Defaults`, `StateProps`, `Name`\>: \{ `index?`: `number` ; `methods?`: [`Modifier`](../interfaces/modifiers_types.Modifier.md)\<`Defaults`\>[``"methods"``] ; `name?`: `Name` ; `options`: `Defaults` } & `StateProps` + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `Defaults` | `unknown` | +| `StateProps` | `unknown` | +| `Name` | extends `string` = `any` | + +#### Defined in + +[modifiers/types.ts:24](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/modifiers/types.ts#L24) diff --git a/dist/api/modules/pointer_events_PointerEvent.md b/dist/api/modules/pointer_events_PointerEvent.md new file mode 100644 index 000000000..40817099c --- /dev/null +++ b/dist/api/modules/pointer_events_PointerEvent.md @@ -0,0 +1,9 @@ +[@interactjs](../README.md) / pointer-events/PointerEvent + +# Module: pointer-events/PointerEvent + +## Table of contents + +### Classes + +- [PointerEvent](../classes/pointer_events_PointerEvent.PointerEvent.md) diff --git a/dist/api/modules/pointer_events_base.md b/dist/api/modules/pointer_events_base.md new file mode 100644 index 000000000..3b6948bcd --- /dev/null +++ b/dist/api/modules/pointer_events_base.md @@ -0,0 +1,23 @@ +[@interactjs](../README.md) / pointer-events/base + +# Module: pointer-events/base + +## Table of contents + +### Interfaces + +- [PointerEventOptions](../interfaces/pointer_events_base.PointerEventOptions.md) + +### Type Aliases + +- [EventTargetList](pointer_events_base.md#eventtargetlist) + +## Type Aliases + +### EventTargetList + +Ƭ **EventTargetList**: \{ `eventable`: [`Eventable`](../classes/core_Eventable.Eventable.md) ; `node`: `Node` ; `props`: \{ `[key: string]`: `any`; } }[] + +#### Defined in + +[pointer-events/base.ts:12](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/pointer-events/base.ts#L12) diff --git a/dist/api/modules/snappers_edgeTarget.md b/dist/api/modules/snappers_edgeTarget.md new file mode 100644 index 000000000..73f9a17b6 --- /dev/null +++ b/dist/api/modules/snappers_edgeTarget.md @@ -0,0 +1,23 @@ +[@interactjs](../README.md) / snappers/edgeTarget + +# Module: snappers/edgeTarget + +## Table of contents + +### Functions + +- [default](snappers_edgeTarget.md#default) + +## Functions + +### default + +▸ **default**(): `void` + +#### Returns + +`void` + +#### Defined in + +[snappers/edgeTarget.ts:1](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/edgeTarget.ts#L1) diff --git a/dist/api/modules/snappers_elements.md b/dist/api/modules/snappers_elements.md new file mode 100644 index 000000000..c10384db4 --- /dev/null +++ b/dist/api/modules/snappers_elements.md @@ -0,0 +1,23 @@ +[@interactjs](../README.md) / snappers/elements + +# Module: snappers/elements + +## Table of contents + +### Functions + +- [default](snappers_elements.md#default) + +## Functions + +### default + +▸ **default**(): `void` + +#### Returns + +`void` + +#### Defined in + +[snappers/elements.ts:1](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/elements.ts#L1) diff --git a/dist/api/modules/snappers_grid.md b/dist/api/modules/snappers_grid.md new file mode 100644 index 000000000..10306d05a --- /dev/null +++ b/dist/api/modules/snappers_grid.md @@ -0,0 +1,51 @@ +[@interactjs](../README.md) / snappers/grid + +# Module: snappers/grid + +## Table of contents + +### Interfaces + +- [GridOptionsBase](../interfaces/snappers_grid.GridOptionsBase.md) +- [GridOptionsBottomRight](../interfaces/snappers_grid.GridOptionsBottomRight.md) +- [GridOptionsTopLeft](../interfaces/snappers_grid.GridOptionsTopLeft.md) +- [GridOptionsWidthHeight](../interfaces/snappers_grid.GridOptionsWidthHeight.md) +- [GridOptionsXY](../interfaces/snappers_grid.GridOptionsXY.md) + +### Type Aliases + +- [GridOptions](snappers_grid.md#gridoptions) + +### Functions + +- [default](snappers_grid.md#default) + +## Type Aliases + +### GridOptions + +Ƭ **GridOptions**: [`GridOptionsXY`](../interfaces/snappers_grid.GridOptionsXY.md) \| [`GridOptionsTopLeft`](../interfaces/snappers_grid.GridOptionsTopLeft.md) \| [`GridOptionsBottomRight`](../interfaces/snappers_grid.GridOptionsBottomRight.md) \| [`GridOptionsWidthHeight`](../interfaces/snappers_grid.GridOptionsWidthHeight.md) + +#### Defined in + +[snappers/grid.ts:26](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L26) + +## Functions + +### default + +▸ **default**(`grid`): `SnapFunction` & \{ `coordFields`: (readonly [``"x"``, ``"y"``] \| readonly [``"left"``, ``"top"``] \| readonly [``"right"``, ``"bottom"``] \| readonly [``"width"``, ``"height"``])[] ; `grid`: [`GridOptions`](snappers_grid.md#gridoptions) } + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `grid` | [`GridOptions`](snappers_grid.md#gridoptions) | + +#### Returns + +`SnapFunction` & \{ `coordFields`: (readonly [``"x"``, ``"y"``] \| readonly [``"left"``, ``"top"``] \| readonly [``"right"``, ``"bottom"``] \| readonly [``"width"``, ``"height"``])[] ; `grid`: [`GridOptions`](snappers_grid.md#gridoptions) } + +#### Defined in + +[snappers/grid.ts:28](https://github.com/taye/interact.js/blob/f56f1fa2/packages/@interactjs/snappers/grid.ts#L28) diff --git a/package.json b/package.json index f87f25efe..c735aeded 100644 --- a/package.json +++ b/package.json @@ -125,5 +125,8 @@ "stylelint --fix" ] }, - "license": "MIT" + "license": "MIT", + "publishConfig": { + "access": "public" + } } diff --git a/packages/@interactjs/actions/.npmignore b/packages/@interactjs/actions/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/actions/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/actions/LICENSE b/packages/@interactjs/actions/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/actions/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/actions/drag/index.d.ts b/packages/@interactjs/actions/drag/index.d.ts new file mode 100644 index 000000000..35181713a --- /dev/null +++ b/packages/@interactjs/actions/drag/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/actions/drag/plugin'; diff --git a/packages/@interactjs/actions/drag/index.js b/packages/@interactjs/actions/drag/index.js new file mode 100644 index 000000000..c88b3917a --- /dev/null +++ b/packages/@interactjs/actions/drag/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/index.js.map b/packages/@interactjs/actions/drag/index.js.map new file mode 100644 index 000000000..d51f395f9 --- /dev/null +++ b/packages/@interactjs/actions/drag/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/drag/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/drag/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/index.prod.js b/packages/@interactjs/actions/drag/index.prod.js new file mode 100644 index 000000000..d151174b8 --- /dev/null +++ b/packages/@interactjs/actions/drag/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/index.prod.js.map b/packages/@interactjs/actions/drag/index.prod.js.map new file mode 100644 index 000000000..4066f8dc4 --- /dev/null +++ b/packages/@interactjs/actions/drag/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/drag/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/drag/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,iCAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/index.ts b/packages/@interactjs/actions/drag/index.ts new file mode 100644 index 000000000..27b164443 --- /dev/null +++ b/packages/@interactjs/actions/drag/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/actions/drag/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/actions/drag/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/plugin.d.ts b/packages/@interactjs/actions/drag/plugin.d.ts new file mode 100644 index 000000000..cd6e5d39f --- /dev/null +++ b/packages/@interactjs/actions/drag/plugin.d.ts @@ -0,0 +1,67 @@ +import type { InteractEvent } from '@interactjs/core/InteractEvent'; +import type { PerActionDefaults } from '@interactjs/core/options'; +import type { Plugin } from '@interactjs/core/scope'; +import type { ListenersArg, OrBoolean } from '@interactjs/core/types'; +declare module '@interactjs/core/Interactable' { + interface Interactable { + draggable(options: Partial> | boolean): this; + draggable(): DraggableOptions; + /** + * ```js + * interact(element).draggable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * // the axis in which the first movement must be + * // for the drag sequence to start + * // 'xy' by default - any direction + * startAxis: 'x' || 'y' || 'xy', + * + * // 'xy' by default - don't restrict to one axis (move in any direction) + * // 'x' or 'y' to restrict movement to either axis + * // 'start' to restrict movement to the axis the drag started in + * lockAxis: 'x' || 'y' || 'xy' || 'start', + * + * // max number of drags that can happen concurrently + * // with elements of this Interactable. Infinity by default + * max: Infinity, + * + * // max number of drags that can target the same element+Interactable + * // 1 by default + * maxPerElement: 2 + * }) + * + * var isDraggable = interact('element').draggable(); // true + * ``` + * + * Get or set whether drag actions can be performed on the target + * + * @param options - true/false or An object with event + * listeners to be fired on drag events (object makes the Interactable + * draggable) + */ + draggable(options?: Partial> | boolean): this | DraggableOptions; + } +} +declare module '@interactjs/core/options' { + interface ActionDefaults { + drag: DraggableOptions; + } +} +declare module '@interactjs/core/types' { + interface ActionMap { + drag?: typeof drag; + } +} +export type DragEvent = InteractEvent<'drag'>; +export interface DraggableOptions extends PerActionDefaults { + startAxis?: 'x' | 'y' | 'xy'; + lockAxis?: 'x' | 'y' | 'xy' | 'start'; + oninertiastart?: ListenersArg; + onstart?: ListenersArg; + onmove?: ListenersArg; + onend?: ListenersArg; +} +declare const drag: Plugin; +export default drag; diff --git a/packages/@interactjs/actions/drag/plugin.js b/packages/@interactjs/actions/drag/plugin.js new file mode 100644 index 000000000..745469786 --- /dev/null +++ b/packages/@interactjs/actions/drag/plugin.js @@ -0,0 +1,109 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _is = _interopRequireDefault(require("../../utils/is.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function install(scope) { + const { + actions, + Interactable, + defaults + } = scope; + Interactable.prototype.draggable = drag.draggable; + actions.map.drag = drag; + actions.methodDict.drag = 'draggable'; + defaults.actions.drag = drag.defaults; +} +function beforeMove({ + interaction +}) { + if (interaction.prepared.name !== 'drag') return; + const axis = interaction.prepared.axis; + if (axis === 'x') { + interaction.coords.cur.page.y = interaction.coords.start.page.y; + interaction.coords.cur.client.y = interaction.coords.start.client.y; + interaction.coords.velocity.client.y = 0; + interaction.coords.velocity.page.y = 0; + } else if (axis === 'y') { + interaction.coords.cur.page.x = interaction.coords.start.page.x; + interaction.coords.cur.client.x = interaction.coords.start.client.x; + interaction.coords.velocity.client.x = 0; + interaction.coords.velocity.page.x = 0; + } +} +function move({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'drag') return; + const axis = interaction.prepared.axis; + if (axis === 'x' || axis === 'y') { + const opposite = axis === 'x' ? 'y' : 'x'; + iEvent.page[opposite] = interaction.coords.start.page[opposite]; + iEvent.client[opposite] = interaction.coords.start.client[opposite]; + iEvent.delta[opposite] = 0; + } +} +const draggable = function draggable(options) { + if (_is.default.object(options)) { + this.options.drag.enabled = options.enabled !== false; + this.setPerAction('drag', options); + this.setOnEvents('drag', options); + if (/^(xy|x|y|start)$/.test(options.lockAxis)) { + this.options.drag.lockAxis = options.lockAxis; + } + if (/^(xy|x|y)$/.test(options.startAxis)) { + this.options.drag.startAxis = options.startAxis; + } + return this; + } + if (_is.default.bool(options)) { + this.options.drag.enabled = options; + return this; + } + return this.options.drag; +}; +const drag = { + id: 'actions/drag', + install, + listeners: { + 'interactions:before-action-move': beforeMove, + 'interactions:action-resume': beforeMove, + // dragmove + 'interactions:action-move': move, + 'auto-start:check': arg => { + const { + interaction, + interactable, + buttons + } = arg; + const dragOptions = interactable.options.drag; + if (!(dragOptions && dragOptions.enabled) || + // check mouseButton setting if the pointer is down + interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & interactable.options.drag.mouseButtons) === 0) { + return undefined; + } + arg.action = { + name: 'drag', + axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis + }; + return false; + } + }, + draggable, + beforeMove, + move, + defaults: { + startAxis: 'xy', + lockAxis: 'xy' + }, + getCursor() { + return 'move'; + }, + filterEventType: type => type.search('drag') === 0 +}; +var _default = exports.default = drag; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/plugin.js.map b/packages/@interactjs/actions/drag/plugin.js.map new file mode 100644 index 000000000..919ce64c6 --- /dev/null +++ b/packages/@interactjs/actions/drag/plugin.js.map @@ -0,0 +1,72 @@ +{ + "version": 3, + "names": [ + "_is", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "install", + "scope", + "actions", + "Interactable", + "defaults", + "prototype", + "draggable", + "drag", + "map", + "methodDict", + "beforeMove", + "interaction", + "prepared", + "name", + "axis", + "coords", + "cur", + "page", + "y", + "start", + "client", + "velocity", + "x", + "move", + "iEvent", + "opposite", + "delta", + "options", + "is", + "object", + "enabled", + "setPerAction", + "setOnEvents", + "test", + "lockAxis", + "startAxis", + "bool", + "id", + "listeners", + "arg", + "interactable", + "buttons", + "dragOptions", + "pointerIsDown", + "pointerType", + "mouseButtons", + "undefined", + "action", + "getCursor", + "filterEventType", + "type", + "search", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable(options: Partial> | boolean): this\n draggable(): DraggableOptions\n /**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n */\n draggable(options?: Partial> | boolean): this | DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drag: DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drag?: typeof drag\n }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport interface DraggableOptions extends PerActionDefaults {\n startAxis?: 'x' | 'y' | 'xy'\n lockAxis?: 'x' | 'y' | 'xy' | 'start'\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.map.drag = drag\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove({ interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n } else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\nconst draggable: Interactable['draggable'] = function draggable(\n this: Interactable,\n options?: DraggableOptions | boolean,\n): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag as DraggableOptions\n}\n\nconst drag: Plugin = {\n id: 'actions/drag',\n install,\n listeners: {\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n 'auto-start:check': (arg) => {\n const { interaction, interactable, buttons } = arg\n const dragOptions = interactable.options.drag\n\n if (\n !(dragOptions && dragOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options.drag.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n arg.action = {\n name: 'drag',\n axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n }\n\n return false\n },\n },\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis: 'xy',\n lockAxis: 'xy',\n } as DraggableOptions,\n\n getCursor() {\n return 'move'\n },\n\n filterEventType: (type: string) => type.search('drag') === 0,\n}\n\nexport default drag\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/plugin.prod.js b/packages/@interactjs/actions/drag/plugin.prod.js new file mode 100644 index 000000000..f01d2f5ec --- /dev/null +++ b/packages/@interactjs/actions/drag/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var t,e=(t=require("../../utils/is.prod.js"))&&t.__esModule?t:{default:t};function o({interaction:t}){if("drag"!==t.prepared.name)return;const e=t.prepared.axis;"x"===e?(t.coords.cur.page.y=t.coords.start.page.y,t.coords.cur.client.y=t.coords.start.client.y,t.coords.velocity.client.y=0,t.coords.velocity.page.y=0):"y"===e&&(t.coords.cur.page.x=t.coords.start.page.x,t.coords.cur.client.x=t.coords.start.client.x,t.coords.velocity.client.x=0,t.coords.velocity.page.x=0)}function r({iEvent:t,interaction:e}){if("drag"!==e.prepared.name)return;const o=e.prepared.axis;if("x"===o||"y"===o){const r="x"===o?"y":"x";t.page[r]=e.coords.start.page[r],t.client[r]=e.coords.start.client[r],t.delta[r]=0}}const s={id:"actions/drag",install(t){const{actions:e,Interactable:o,defaults:r}=t;o.prototype.draggable=s.draggable,e.map.drag=s,e.methodDict.drag="draggable",r.actions.drag=s.defaults},listeners:{"interactions:before-action-move":o,"interactions:action-resume":o,"interactions:action-move":r,"auto-start:check"(t){const{interaction:e,interactable:o,buttons:r}=t,s=o.options.drag;if(s&&s.enabled&&(!e.pointerIsDown||!/mouse|pointer/.test(e.pointerType)||0!=(r&o.options.drag.mouseButtons)))return t.action={name:"drag",axis:"start"===s.lockAxis?s.startAxis:s.lockAxis},!1}},draggable(t){return e.default.object(t)?(this.options.drag.enabled=!1!==t.enabled,this.setPerAction("drag",t),this.setOnEvents("drag",t),/^(xy|x|y|start)$/.test(t.lockAxis)&&(this.options.drag.lockAxis=t.lockAxis),/^(xy|x|y)$/.test(t.startAxis)&&(this.options.drag.startAxis=t.startAxis),this):e.default.bool(t)?(this.options.drag.enabled=t,this):this.options.drag},beforeMove:o,move:r,defaults:{startAxis:"xy",lockAxis:"xy"},getCursor(){return"move"},filterEventType:t=>0===t.search("drag")};exports.default=s; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drag/plugin.prod.js.map b/packages/@interactjs/actions/drag/plugin.prod.js.map new file mode 100644 index 000000000..a04556edd --- /dev/null +++ b/packages/@interactjs/actions/drag/plugin.prod.js.map @@ -0,0 +1,70 @@ +{ + "version": 3, + "names": [ + "obj", + "_isProd", + "require", + "__esModule", + "default", + "beforeMove", + "interaction", + "prepared", + "name", + "axis", + "coords", + "cur", + "page", + "y", + "start", + "client", + "velocity", + "x", + "move", + "iEvent", + "opposite", + "delta", + "drag", + "id", + "install", + "scope", + "actions", + "Interactable", + "defaults", + "prototype", + "draggable", + "map", + "methodDict", + "listeners", + "arg", + "interactable", + "buttons", + "dragOptions", + "options", + "enabled", + "pointerIsDown", + "test", + "pointerType", + "mouseButtons", + "action", + "lockAxis", + "startAxis", + "is", + "object", + "this", + "setPerAction", + "setOnEvents", + "bool", + "getCursor", + "filterEventType", + "type", + "search", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable(options: Partial> | boolean): this\n draggable(): DraggableOptions\n /**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n */\n draggable(options?: Partial> | boolean): this | DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drag: DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drag?: typeof drag\n }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport interface DraggableOptions extends PerActionDefaults {\n startAxis?: 'x' | 'y' | 'xy'\n lockAxis?: 'x' | 'y' | 'xy' | 'start'\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.map.drag = drag\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove({ interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n } else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\nconst draggable: Interactable['draggable'] = function draggable(\n this: Interactable,\n options?: DraggableOptions | boolean,\n): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag as DraggableOptions\n}\n\nconst drag: Plugin = {\n id: 'actions/drag',\n install,\n listeners: {\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n 'auto-start:check': (arg) => {\n const { interaction, interactable, buttons } = arg\n const dragOptions = interactable.options.drag\n\n if (\n !(dragOptions && dragOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options.drag.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n arg.action = {\n name: 'drag',\n axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n }\n\n return false\n },\n },\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis: 'xy',\n lockAxis: 'xy',\n } as DraggableOptions,\n\n getCursor() {\n return 'move'\n },\n\n filterEventType: (type: string) => type.search('drag') === 0,\n}\n\nexport default drag\n" + ], + "mappings": "8EAKA,IAAqCA,EAArCC,GAAqCD,EAArCE,QAAA,4BAAqCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GA+ErC,SAASK,GAAWC,YAAEA,IACpB,GAAkC,SAA9BA,EAAYC,SAASC,KAAiB,OAE1C,MAAMC,EAAOH,EAAYC,SAASE,KAErB,MAATA,GACFH,EAAYI,OAAOC,IAAIC,KAAKC,EAAIP,EAAYI,OAAOI,MAAMF,KAAKC,EAC9DP,EAAYI,OAAOC,IAAII,OAAOF,EAAIP,EAAYI,OAAOI,MAAMC,OAAOF,EAElEP,EAAYI,OAAOM,SAASD,OAAOF,EAAI,EACvCP,EAAYI,OAAOM,SAASJ,KAAKC,EAAI,GACnB,MAATJ,IACTH,EAAYI,OAAOC,IAAIC,KAAKK,EAAIX,EAAYI,OAAOI,MAAMF,KAAKK,EAC9DX,EAAYI,OAAOC,IAAII,OAAOE,EAAIX,EAAYI,OAAOI,MAAMC,OAAOE,EAElEX,EAAYI,OAAOM,SAASD,OAAOE,EAAI,EACvCX,EAAYI,OAAOM,SAASJ,KAAKK,EAAI,EAEzC,CAEA,SAASC,GAAKC,OAAEA,EAAMb,YAAEA,IACtB,GAAkC,SAA9BA,EAAYC,SAASC,KAAiB,OAE1C,MAAMC,EAAOH,EAAYC,SAASE,KAElC,GAAa,MAATA,GAAyB,MAATA,EAAc,CAChC,MAAMW,EAAoB,MAATX,EAAe,IAAM,IAEtCU,EAAOP,KAAKQ,GAAYd,EAAYI,OAAOI,MAAMF,KAAKQ,GACtDD,EAAOJ,OAAOK,GAAYd,EAAYI,OAAOI,MAAMC,OAAOK,GAC1DD,EAAOE,MAAMD,GAAY,CAC3B,CACF,CAEA,MA4BME,EAAe,CACnBC,GAAI,eACJC,QA3EeC,GACf,MAAMC,QAAEA,EAAOC,aAAEA,EAAYC,SAAEA,GAAaH,EAE5CE,EAAaE,UAAUC,UAAYR,EAAKQ,UAExCJ,EAAQK,IAAIT,KAAOA,EACnBI,EAAQM,WAAWV,KAAO,YAE1BM,EAASF,QAAQJ,KAAOA,EAAKM,QAC/B,EAmEEK,UAAW,CACT,kCAAmC5B,EACnC,6BAA8BA,EAG9B,2BAA4Ba,EAC5B,kBAoBA,CApBqBgB,GACnB,MAAM5B,YAAEA,EAAW6B,aAAEA,EAAYC,QAAEA,GAAYF,EACzCG,EAAcF,EAAaG,QAAQhB,KAEzC,GACIe,GAAeA,EAAYE,WAE5BjC,EAAYkC,gBACX,gBAAgBC,KAAKnC,EAAYoC,cACsB,IAAtDN,EAAUD,EAAaG,QAAQhB,KAAKqB,eAUzC,OALAT,EAAIU,OAAS,CACXpC,KAAM,OACNC,KAA+B,UAAzB4B,EAAYQ,SAAuBR,EAAYS,UAAYT,EAAYQ,WAGxE,CAAK,GAGhBf,UAzDAQ,GAEA,OAAIS,UAAGC,OAAOV,IACZW,KAAKX,QAAQhB,KAAKiB,SAA8B,IAApBD,EAAQC,QACpCU,KAAKC,aAAa,OAAQZ,GAC1BW,KAAKE,YAAY,OAAQb,GAErB,mBAAmBG,KAAKH,EAAQO,YAClCI,KAAKX,QAAQhB,KAAKuB,SAAWP,EAAQO,UAEnC,aAAaJ,KAAKH,EAAQQ,aAC5BG,KAAKX,QAAQhB,KAAKwB,UAAYR,EAAQQ,WAGjCG,MAGLF,UAAGK,KAAKd,IACVW,KAAKX,QAAQhB,KAAKiB,QAAUD,EAErBW,MAGFA,KAAKX,QAAQhB,IACtB,EAkCEjB,aACAa,OACAU,SAAU,CACRkB,UAAW,KACXD,SAAU,MAGZQ,SAEA,GADE,MAAO,MACT,EAEAC,gBAAkBC,GAAyC,IAAxBA,EAAKC,OAAO,SAChDC,QAAArD,QAEckB" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/DropEvent.d.ts b/packages/@interactjs/actions/drop/DropEvent.d.ts new file mode 100644 index 000000000..79af760b6 --- /dev/null +++ b/packages/@interactjs/actions/drop/DropEvent.d.ts @@ -0,0 +1,29 @@ +import { BaseEvent } from '@interactjs/core/BaseEvent'; +import type { Interactable } from '@interactjs/core/Interactable'; +import type { InteractEvent } from '@interactjs/core/InteractEvent'; +import type { Element } from '@interactjs/core/types'; +import type { DropState } from './plugin'; +export declare class DropEvent extends BaseEvent<'drag'> { + target: Element; + dropzone: Interactable; + dragEvent: InteractEvent<'drag'>; + relatedTarget: Element; + draggable: Interactable; + propagationStopped: boolean; + immediatePropagationStopped: boolean; + /** + * Class of events fired on dropzones during drags with acceptable targets. + */ + constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string); + /** + * If this is a `dropactivate` event, the dropzone element will be + * deactivated. + * + * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the + * dropzone element and more. + */ + reject(): void; + preventDefault(): void; + stopPropagation(): void; + stopImmediatePropagation(): void; +} diff --git a/packages/@interactjs/actions/drop/DropEvent.js b/packages/@interactjs/actions/drop/DropEvent.js new file mode 100644 index 000000000..0a791af1a --- /dev/null +++ b/packages/@interactjs/actions/drop/DropEvent.js @@ -0,0 +1,81 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.DropEvent = void 0; +var _BaseEvent = require("../../core/BaseEvent.js"); +var arr = _interopRequireWildcard(require("../../utils/arr.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class DropEvent extends _BaseEvent.BaseEvent { + dropzone; + dragEvent; + relatedTarget; + draggable; + propagationStopped = false; + immediatePropagationStopped = false; + + /** + * Class of events fired on dropzones during drags with acceptable targets. + */ + constructor(dropState, dragEvent, type) { + super(dragEvent._interaction); + const { + element, + dropzone + } = type === 'dragleave' ? dropState.prev : dropState.cur; + this.type = type; + this.target = element; + this.currentTarget = element; + this.dropzone = dropzone; + this.dragEvent = dragEvent; + this.relatedTarget = dragEvent.target; + this.draggable = dragEvent.interactable; + this.timeStamp = dragEvent.timeStamp; + } + + /** + * If this is a `dropactivate` event, the dropzone element will be + * deactivated. + * + * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the + * dropzone element and more. + */ + reject() { + const { + dropState + } = this._interaction; + if (this.type !== 'dropactivate' && (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)) { + return; + } + dropState.prev.dropzone = this.dropzone; + dropState.prev.element = this.target; + dropState.rejected = true; + dropState.events.enter = null; + this.stopImmediatePropagation(); + if (this.type === 'dropactivate') { + const activeDrops = dropState.activeDrops; + const index = arr.findIndex(activeDrops, ({ + dropzone, + element + }) => dropzone === this.dropzone && element === this.target); + dropState.activeDrops.splice(index, 1); + const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate'); + deactivateEvent.dropzone = this.dropzone; + deactivateEvent.target = this.target; + this.dropzone.fire(deactivateEvent); + } else { + this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave')); + } + } + preventDefault() {} + stopPropagation() { + this.propagationStopped = true; + } + stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } +} +exports.DropEvent = DropEvent; +//# sourceMappingURL=DropEvent.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/DropEvent.js.map b/packages/@interactjs/actions/drop/DropEvent.js.map new file mode 100644 index 000000000..e5223a5b3 --- /dev/null +++ b/packages/@interactjs/actions/drop/DropEvent.js.map @@ -0,0 +1,70 @@ +{ + "version": 3, + "names": [ + "_BaseEvent", + "require", + "arr", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "DropEvent", + "BaseEvent", + "dropzone", + "dragEvent", + "relatedTarget", + "draggable", + "propagationStopped", + "immediatePropagationStopped", + "constructor", + "dropState", + "type", + "_interaction", + "element", + "prev", + "cur", + "target", + "currentTarget", + "interactable", + "timeStamp", + "reject", + "rejected", + "events", + "enter", + "stopImmediatePropagation", + "activeDrops", + "index", + "findIndex", + "splice", + "deactivateEvent", + "fire", + "preventDefault", + "stopPropagation", + "exports" + ], + "sources": [ + "DropEvent.ts" + ], + "sourcesContent": [ + "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n declare target: Element\n dropzone: Interactable\n dragEvent: InteractEvent<'drag'>\n relatedTarget: Element\n draggable: Interactable\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject() {\n const { dropState } = this._interaction\n\n if (\n this.type !== 'dropactivate' &&\n (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n ) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(\n activeDrops,\n ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n )\n\n dropState.activeDrops.splice(index, 1)\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n } else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault() {}\n\n stopPropagation() {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/DropEvent.prod.js b/packages/@interactjs/actions/drop/DropEvent.prod.js new file mode 100644 index 000000000..6eb0b5d25 --- /dev/null +++ b/packages/@interactjs/actions/drop/DropEvent.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.DropEvent=void 0;var e=require("../../core/BaseEvent.prod.js"),t=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=r(t);if(o&&o.has(e))return o.get(e);var a={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in e)if("default"!==p&&Object.prototype.hasOwnProperty.call(e,p)){var i=n?Object.getOwnPropertyDescriptor(e,p):null;i&&(i.get||i.set)?Object.defineProperty(a,p,i):a[p]=e[p]}return a.default=e,o&&o.set(e,a),a})(require("../../utils/arr.prod.js"));function r(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(r=e=>e?o:t)(e)}class o extends e.BaseEvent{dropzone;dragEvent;relatedTarget;draggable;propagationStopped=!1;immediatePropagationStopped=!1;constructor(e,t,r){super(t._interaction);const{element:o,dropzone:a}="dragleave"===r?e.prev:e.cur;this.type=r,this.target=o,this.currentTarget=o,this.dropzone=a,this.dragEvent=t,this.relatedTarget=t.target,this.draggable=t.interactable,this.timeStamp=t.timeStamp}reject(){const{dropState:e}=this._interaction;if("dropactivate"===this.type||this.dropzone&&e.cur.dropzone===this.dropzone&&e.cur.element===this.target)if(e.prev.dropzone=this.dropzone,e.prev.element=this.target,e.rejected=!0,e.events.enter=null,this.stopImmediatePropagation(),"dropactivate"===this.type){const r=e.activeDrops,a=t.findIndex(r,(({dropzone:e,element:t})=>e===this.dropzone&&t===this.target));e.activeDrops.splice(a,1);const n=new o(e,this.dragEvent,"dropdeactivate");n.dropzone=this.dropzone,n.target=this.target,this.dropzone.fire(n)}else this.dropzone.fire(new o(e,this.dragEvent,"dragleave"))}preventDefault(){}stopPropagation(){this.propagationStopped=!0}stopImmediatePropagation(){this.immediatePropagationStopped=this.propagationStopped=!0}}exports.DropEvent=o; +//# sourceMappingURL=DropEvent.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/DropEvent.prod.js.map b/packages/@interactjs/actions/drop/DropEvent.prod.js.map new file mode 100644 index 000000000..cc850d61c --- /dev/null +++ b/packages/@interactjs/actions/drop/DropEvent.prod.js.map @@ -0,0 +1,72 @@ +{ + "version": 3, + "names": [ + "_BaseEventProd", + "require", + "arr", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "DropEvent", + "BaseEvent", + "dropzone", + "dragEvent", + "relatedTarget", + "draggable", + "propagationStopped", + "immediatePropagationStopped", + "constructor", + "dropState", + "type", + "super", + "_interaction", + "element", + "prev", + "cur", + "this", + "target", + "currentTarget", + "interactable", + "timeStamp", + "reject", + "rejected", + "events", + "enter", + "stopImmediatePropagation", + "activeDrops", + "index", + "findIndex", + "splice", + "deactivateEvent", + "fire", + "preventDefault", + "stopPropagation", + "exports" + ], + "sources": [ + "DropEvent.ts" + ], + "sourcesContent": [ + "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n declare target: Element\n dropzone: Interactable\n dragEvent: InteractEvent<'drag'>\n relatedTarget: Element\n draggable: Interactable\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject() {\n const { dropState } = this._interaction\n\n if (\n this.type !== 'dropactivate' &&\n (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n ) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(\n activeDrops,\n ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n )\n\n dropState.activeDrops.splice(index, 1)\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n } else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault() {}\n\n stopPropagation() {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n" + ], + "mappings": "gFAAA,IAAAA,EAAAC,QAAA,gCAIAC,EAA4C,EAAAC,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,QAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,IAAA,EAA5CY,CAAAtB,QAAA,4BAA4C,SAAAO,EAAAL,GAAA,sBAAAqB,QAAA,gBAAApB,EAAA,IAAAoB,QAAAjB,EAAA,IAAAiB,QAAA,OAAAhB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA,CAIrC,MAAMsB,UAAkBC,YAE7BC,SACAC,UACAC,cACAC,UACAC,oBAAqB,EACrBC,6BAA8B,EAK9BC,YAAYC,EAAsBN,EAAkCO,GAClEC,MAAMR,EAAUS,cAEhB,MAAMC,QAAEA,EAAOX,SAAEA,GAAsB,cAATQ,EAAuBD,EAAUK,KAAOL,EAAUM,IAEhFC,KAAKN,KAAOA,EACZM,KAAKC,OAASJ,EACdG,KAAKE,cAAgBL,EACrBG,KAAKd,SAAWA,EAChBc,KAAKb,UAAYA,EACjBa,KAAKZ,cAAgBD,EAAUc,OAC/BD,KAAKX,UAAYF,EAAUgB,aAC3BH,KAAKI,UAAYjB,EAAUiB,SAC7B,CASAC,SACE,MAAMZ,UAAEA,GAAcO,KAAKJ,aAE3B,GACgB,iBAAdI,KAAKN,MACHM,KAAKd,UAAYO,EAAUM,IAAIb,WAAac,KAAKd,UAAYO,EAAUM,IAAIF,UAAYG,KAAKC,OAahG,GARAR,EAAUK,KAAKZ,SAAWc,KAAKd,SAC/BO,EAAUK,KAAKD,QAAUG,KAAKC,OAE9BR,EAAUa,UAAW,EACrBb,EAAUc,OAAOC,MAAQ,KAEzBR,KAAKS,2BAEa,iBAAdT,KAAKN,KAAyB,CAChC,MAAMgB,EAAcjB,EAAUiB,YACxBC,EAAQlD,EAAImD,UAChBF,GACA,EAAGxB,WAAUW,aAAcX,IAAac,KAAKd,UAAYW,IAAYG,KAAKC,SAG5ER,EAAUiB,YAAYG,OAAOF,EAAO,GAEpC,MAAMG,EAAkB,IAAI9B,EAAUS,EAAWO,KAAKb,UAAW,kBAEjE2B,EAAgB5B,SAAWc,KAAKd,SAChC4B,EAAgBb,OAASD,KAAKC,OAE9BD,KAAKd,SAAS6B,KAAKD,EACrB,MACEd,KAAKd,SAAS6B,KAAK,IAAI/B,EAAUS,EAAWO,KAAKb,UAAW,aAEhE,CAEA6B,iBAAkB,CAElBC,kBACEjB,KAAKV,oBAAqB,CAC5B,CAEAmB,2BACET,KAAKT,4BAA8BS,KAAKV,oBAAqB,CAC/D,EACD4B,QAAAlC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/index.d.ts b/packages/@interactjs/actions/drop/index.d.ts new file mode 100644 index 000000000..d47f3c848 --- /dev/null +++ b/packages/@interactjs/actions/drop/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/actions/drop/plugin'; diff --git a/packages/@interactjs/actions/drop/index.js b/packages/@interactjs/actions/drop/index.js new file mode 100644 index 000000000..c88b3917a --- /dev/null +++ b/packages/@interactjs/actions/drop/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/index.js.map b/packages/@interactjs/actions/drop/index.js.map new file mode 100644 index 000000000..87644c8ba --- /dev/null +++ b/packages/@interactjs/actions/drop/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/drop/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/drop/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/index.prod.js b/packages/@interactjs/actions/drop/index.prod.js new file mode 100644 index 000000000..d151174b8 --- /dev/null +++ b/packages/@interactjs/actions/drop/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/index.prod.js.map b/packages/@interactjs/actions/drop/index.prod.js.map new file mode 100644 index 000000000..35d197ab7 --- /dev/null +++ b/packages/@interactjs/actions/drop/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/drop/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/drop/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,iCAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/index.ts b/packages/@interactjs/actions/drop/index.ts new file mode 100644 index 000000000..3073cf7f3 --- /dev/null +++ b/packages/@interactjs/actions/drop/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/actions/drop/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/actions/drop/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/plugin.d.ts b/packages/@interactjs/actions/drop/plugin.d.ts new file mode 100644 index 000000000..b014d7896 --- /dev/null +++ b/packages/@interactjs/actions/drop/plugin.d.ts @@ -0,0 +1,166 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type { InteractEvent } from '@interactjs/core/InteractEvent'; +import type { Interaction } from '@interactjs/core/Interaction'; +import type { PerActionDefaults } from '@interactjs/core/options'; +import type { Plugin } from '@interactjs/core/scope'; +import type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'; +import '../drag/plugin'; +import type { DragEvent } from '../drag/plugin'; +import { DropEvent } from './DropEvent'; +export type DropFunctionChecker = (dragEvent: any, // related drag operation +event: any, // touch or mouse EventEmitter +dropped: boolean, // default checker result +dropzone: Interactable, // dropzone interactable +dropElement: Element, // drop zone element +draggable: Interactable, // draggable's Interactable +draggableElement: Element) => boolean; +export interface DropzoneOptions extends PerActionDefaults { + accept?: string | Element | (({ dropzone, draggableElement }: { + dropzone: Interactable; + draggableElement: Element; + }) => boolean); + overlap?: 'pointer' | 'center' | number; + checker?: DropFunctionChecker; + ondropactivate?: ListenersArg; + ondropdeactivate?: ListenersArg; + ondragenter?: ListenersArg; + ondragleave?: ListenersArg; + ondropmove?: ListenersArg; + ondrop?: ListenersArg; +} +export interface DropzoneMethod { + (this: Interactable, options: DropzoneOptions | boolean): Interactable; + (): DropzoneOptions; +} +declare module '@interactjs/core/Interactable' { + interface Interactable { + /** + * + * ```js + * interact('.drop').dropzone({ + * accept: '.can-drop' || document.getElementById('single-drop'), + * overlap: 'pointer' || 'center' || zeroToOne + * } + * ``` + * + * Returns or sets whether draggables can be dropped onto this target to + * trigger drop events + * + * Dropzones can receive the following events: + * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends + * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone + * - `dragmove` when a draggable that has entered the dropzone is moved + * - `drop` when a draggable is dropped into this dropzone + * + * Use the `accept` option to allow only elements that match the given CSS + * selector or element. The value can be: + * + * - **an Element** - only that element can be dropped into this dropzone. + * - **a string**, - the element being dragged must match it as a CSS selector. + * - **`null`** - accept options is cleared - it accepts any element. + * + * Use the `overlap` option to set how drops are checked for. The allowed + * values are: + * + * - `'pointer'`, the pointer must be over the dropzone (default) + * - `'center'`, the draggable element's center must be over the dropzone + * - a number from 0-1 which is the `(intersection area) / (draggable area)`. + * e.g. `0.5` for drop to happen when half of the area of the draggable is + * over the dropzone + * + * Use the `checker` option to specify a function to check if a dragged element + * is over this Interactable. + * + * @param options - The new options to be set + */ + dropzone(options: DropzoneOptions | boolean): Interactable; + /** @returns The current setting */ + dropzone(): DropzoneOptions; + /** + * ```js + * interact(target) + * .dropChecker(function(dragEvent, // related dragmove or dragend event + * event, // TouchEvent/PointerEvent/MouseEvent + * dropped, // bool result of the default checker + * dropzone, // dropzone Interactable + * dropElement, // dropzone elemnt + * draggable, // draggable Interactable + * draggableElement) {// draggable element + * + * return dropped && event.target.hasAttribute('allow-drop') + * } + * ``` + */ + dropCheck(dragEvent: InteractEvent, event: PointerEventType, draggable: Interactable, draggableElement: Element, dropElemen: Element, rect: any): boolean; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + dropState?: DropState; + } +} +declare module '@interactjs/core/InteractEvent' { + interface InteractEvent { + dropzone?: Interactable; + dragEnter?: Element; + dragLeave?: Element; + } +} +declare module '@interactjs/core/options' { + interface ActionDefaults { + drop: DropzoneOptions; + } +} +declare module '@interactjs/core/scope' { + interface Scope { + dynamicDrop?: boolean; + } + interface SignalArgs { + 'actions/drop:start': DropSignalArg; + 'actions/drop:move': DropSignalArg; + 'actions/drop:end': DropSignalArg; + } +} +declare module '@interactjs/core/types' { + interface ActionMap { + drop?: typeof drop; + } +} +declare module '@interactjs/core/InteractStatic' { + interface InteractStatic { + /** + * Returns or sets whether the dimensions of dropzone elements are calculated + * on every dragmove or only on dragstart for the default dropChecker + * + * @param {boolean} [newValue] True to check on each move. False to check only + * before start + * @return {boolean | interact} The current setting or interact + */ + dynamicDrop: (newValue?: boolean) => boolean | this; + } +} +interface DropSignalArg { + interaction: Interaction<'drag'>; + dragEvent: DragEvent; +} +export interface ActiveDrop { + dropzone: Interactable; + element: Element; + rect: Rect; +} +export interface DropState { + cur: { + dropzone: Interactable; + element: Element; + }; + prev: { + dropzone: Interactable; + element: Element; + }; + rejected: boolean; + events: FiredDropEvents; + activeDrops: ActiveDrop[]; +} +type FiredDropEvents = Partial>; +declare const drop: Plugin; +export default drop; diff --git a/packages/@interactjs/actions/drop/plugin.js b/packages/@interactjs/actions/drop/plugin.js new file mode 100644 index 000000000..6bcab822b --- /dev/null +++ b/packages/@interactjs/actions/drop/plugin.js @@ -0,0 +1,428 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var domUtils = _interopRequireWildcard(require("../../utils/domUtils.js")); +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _getOriginXY = _interopRequireDefault(require("../../utils/getOriginXY.js")); +var _is = _interopRequireDefault(require("../../utils/is.js")); +var _normalizeListeners = _interopRequireDefault(require("../../utils/normalizeListeners.js")); +var pointerUtils = _interopRequireWildcard(require("../../utils/pointerUtils.js")); +var _plugin = _interopRequireDefault(require("../drag/plugin")); +var _DropEvent = require("./DropEvent"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +function install(scope) { + const { + actions, + interactStatic: interact, + Interactable, + defaults + } = scope; + scope.usePlugin(_plugin.default); + Interactable.prototype.dropzone = function (options) { + return dropzoneMethod(this, options); + }; + Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) { + return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect); + }; + interact.dynamicDrop = function (newValue) { + if (_is.default.bool(newValue)) { + // if (dragging && scope.dynamicDrop !== newValue && !newValue) { + // calcRects(dropzones) + // } + + scope.dynamicDrop = newValue; + return interact; + } + return scope.dynamicDrop; + }; + (0, _extend.default)(actions.phaselessTypes, { + dragenter: true, + dragleave: true, + dropactivate: true, + dropdeactivate: true, + dropmove: true, + drop: true + }); + actions.methodDict.drop = 'dropzone'; + scope.dynamicDrop = false; + defaults.actions.drop = drop.defaults; +} +function collectDropzones({ + interactables +}, draggableElement) { + const drops = []; + + // collect all dropzones and their elements which qualify for a drop + for (const dropzone of interactables.list) { + if (!dropzone.options.drop.enabled) { + continue; + } + const accept = dropzone.options.drop.accept; + + // test the draggable draggableElement against the dropzone's accept setting + if (_is.default.element(accept) && accept !== draggableElement || _is.default.string(accept) && !domUtils.matchesSelector(draggableElement, accept) || _is.default.func(accept) && !accept({ + dropzone, + draggableElement + })) { + continue; + } + for (const dropzoneElement of dropzone.getAllElements()) { + if (dropzoneElement !== draggableElement) { + drops.push({ + dropzone, + element: dropzoneElement, + rect: dropzone.getRect(dropzoneElement) + }); + } + } + } + return drops; +} +function fireActivationEvents(activeDrops, event) { + // loop through all active dropzones and trigger event + for (const { + dropzone, + element + } of activeDrops.slice()) { + event.dropzone = dropzone; + + // set current element as event target + event.target = element; + dropzone.fire(event); + event.propagationStopped = event.immediatePropagationStopped = false; + } +} + +// return a new array of possible drops. getActiveDrops should always be +// called when a drag has just started or a drag event happens while +// dynamicDrop is true +function getActiveDrops(scope, dragElement) { + // get dropzones and their elements that could receive the draggable + const activeDrops = collectDropzones(scope, dragElement); + for (const activeDrop of activeDrops) { + activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element); + } + return activeDrops; +} +function getDrop({ + dropState, + interactable: draggable, + element: dragElement +}, dragEvent, pointerEvent) { + const validDrops = []; + + // collect all dropzones and their elements which qualify for a drop + for (const { + dropzone, + element: dropzoneElement, + rect + } of dropState.activeDrops) { + const isValid = dropzone.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, rect); + validDrops.push(isValid ? dropzoneElement : null); + } + + // get the most appropriate dropzone based on DOM depth and order + const dropIndex = domUtils.indexOfDeepestElement(validDrops); + return dropState.activeDrops[dropIndex] || null; +} +function getDropEvents(interaction, _pointerEvent, dragEvent) { + const dropState = interaction.dropState; + const dropEvents = { + enter: null, + leave: null, + activate: null, + deactivate: null, + move: null, + drop: null + }; + if (dragEvent.type === 'dragstart') { + dropEvents.activate = new _DropEvent.DropEvent(dropState, dragEvent, 'dropactivate'); + dropEvents.activate.target = null; + dropEvents.activate.dropzone = null; + } + if (dragEvent.type === 'dragend') { + dropEvents.deactivate = new _DropEvent.DropEvent(dropState, dragEvent, 'dropdeactivate'); + dropEvents.deactivate.target = null; + dropEvents.deactivate.dropzone = null; + } + if (dropState.rejected) { + return dropEvents; + } + if (dropState.cur.element !== dropState.prev.element) { + // if there was a previous dropzone, create a dragleave event + if (dropState.prev.dropzone) { + dropEvents.leave = new _DropEvent.DropEvent(dropState, dragEvent, 'dragleave'); + dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element; + dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone; + } + // if dropzone is not null, create a dragenter event + if (dropState.cur.dropzone) { + dropEvents.enter = new _DropEvent.DropEvent(dropState, dragEvent, 'dragenter'); + dragEvent.dragEnter = dropState.cur.element; + dragEvent.dropzone = dropState.cur.dropzone; + } + } + if (dragEvent.type === 'dragend' && dropState.cur.dropzone) { + dropEvents.drop = new _DropEvent.DropEvent(dropState, dragEvent, 'drop'); + dragEvent.dropzone = dropState.cur.dropzone; + dragEvent.relatedTarget = dropState.cur.element; + } + if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) { + dropEvents.move = new _DropEvent.DropEvent(dropState, dragEvent, 'dropmove'); + dragEvent.dropzone = dropState.cur.dropzone; + } + return dropEvents; +} +function fireDropEvents(interaction, events) { + const dropState = interaction.dropState; + const { + activeDrops, + cur, + prev + } = dropState; + if (events.leave) { + prev.dropzone.fire(events.leave); + } + if (events.enter) { + cur.dropzone.fire(events.enter); + } + if (events.move) { + cur.dropzone.fire(events.move); + } + if (events.drop) { + cur.dropzone.fire(events.drop); + } + if (events.deactivate) { + fireActivationEvents(activeDrops, events.deactivate); + } + dropState.prev.dropzone = cur.dropzone; + dropState.prev.element = cur.element; +} +function onEventCreated({ + interaction, + iEvent, + event +}, scope) { + if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { + return; + } + const dropState = interaction.dropState; + if (scope.dynamicDrop) { + dropState.activeDrops = getActiveDrops(scope, interaction.element); + } + const dragEvent = iEvent; + const dropResult = getDrop(interaction, dragEvent, event); + + // update rejected status + dropState.rejected = dropState.rejected && !!dropResult && dropResult.dropzone === dropState.cur.dropzone && dropResult.element === dropState.cur.element; + dropState.cur.dropzone = dropResult && dropResult.dropzone; + dropState.cur.element = dropResult && dropResult.element; + dropState.events = getDropEvents(interaction, event, dragEvent); +} +function dropzoneMethod(interactable, options) { + if (_is.default.object(options)) { + interactable.options.drop.enabled = options.enabled !== false; + if (options.listeners) { + const normalized = (0, _normalizeListeners.default)(options.listeners); + // rename 'drop' to '' as it will be prefixed with 'drop' + const corrected = Object.keys(normalized).reduce((acc, type) => { + const correctedType = /^(enter|leave)/.test(type) ? `drag${type}` : /^(activate|deactivate|move)/.test(type) ? `drop${type}` : type; + acc[correctedType] = normalized[type]; + return acc; + }, {}); + const prevListeners = interactable.options.drop.listeners; + prevListeners && interactable.off(prevListeners); + interactable.on(corrected); + interactable.options.drop.listeners = corrected; + } + if (_is.default.func(options.ondrop)) { + interactable.on('drop', options.ondrop); + } + if (_is.default.func(options.ondropactivate)) { + interactable.on('dropactivate', options.ondropactivate); + } + if (_is.default.func(options.ondropdeactivate)) { + interactable.on('dropdeactivate', options.ondropdeactivate); + } + if (_is.default.func(options.ondragenter)) { + interactable.on('dragenter', options.ondragenter); + } + if (_is.default.func(options.ondragleave)) { + interactable.on('dragleave', options.ondragleave); + } + if (_is.default.func(options.ondropmove)) { + interactable.on('dropmove', options.ondropmove); + } + if (/^(pointer|center)$/.test(options.overlap)) { + interactable.options.drop.overlap = options.overlap; + } else if (_is.default.number(options.overlap)) { + interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0); + } + if ('accept' in options) { + interactable.options.drop.accept = options.accept; + } + if ('checker' in options) { + interactable.options.drop.checker = options.checker; + } + return interactable; + } + if (_is.default.bool(options)) { + interactable.options.drop.enabled = options; + return interactable; + } + return interactable.options.drop; +} +function dropCheckMethod(interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) { + let dropped = false; + + // if the dropzone has no rect (eg. display: none) + // call the custom dropChecker or just return false + if (!(rect = rect || interactable.getRect(dropElement))) { + return interactable.options.drop.checker ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement) : false; + } + const dropOverlap = interactable.options.drop.overlap; + if (dropOverlap === 'pointer') { + const origin = (0, _getOriginXY.default)(draggable, draggableElement, 'drag'); + const page = pointerUtils.getPageXY(dragEvent); + page.x += origin.x; + page.y += origin.y; + const horizontal = page.x > rect.left && page.x < rect.right; + const vertical = page.y > rect.top && page.y < rect.bottom; + dropped = horizontal && vertical; + } + const dragRect = draggable.getRect(draggableElement); + if (dragRect && dropOverlap === 'center') { + const cx = dragRect.left + dragRect.width / 2; + const cy = dragRect.top + dragRect.height / 2; + dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom; + } + if (dragRect && _is.default.number(dropOverlap)) { + const overlapArea = Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)); + const overlapRatio = overlapArea / (dragRect.width * dragRect.height); + dropped = overlapRatio >= dropOverlap; + } + if (interactable.options.drop.checker) { + dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement); + } + return dropped; +} +const drop = { + id: 'actions/drop', + install, + listeners: { + 'interactions:before-action-start': ({ + interaction + }) => { + if (interaction.prepared.name !== 'drag') { + return; + } + interaction.dropState = { + cur: { + dropzone: null, + element: null + }, + prev: { + dropzone: null, + element: null + }, + rejected: null, + events: null, + activeDrops: [] + }; + }, + 'interactions:after-action-start': ({ + interaction, + event, + iEvent: dragEvent + }, scope) => { + if (interaction.prepared.name !== 'drag') { + return; + } + const dropState = interaction.dropState; + + // reset active dropzones + dropState.activeDrops = []; + dropState.events = {}; + dropState.activeDrops = getActiveDrops(scope, interaction.element); + dropState.events = getDropEvents(interaction, event, dragEvent); + if (dropState.events.activate) { + fireActivationEvents(dropState.activeDrops, dropState.events.activate); + scope.fire('actions/drop:start', { + interaction, + dragEvent + }); + } + }, + 'interactions:action-move': onEventCreated, + 'interactions:after-action-move': ({ + interaction, + iEvent: dragEvent + }, scope) => { + if (interaction.prepared.name !== 'drag') { + return; + } + const dropState = interaction.dropState; + fireDropEvents(interaction, dropState.events); + scope.fire('actions/drop:move', { + interaction, + dragEvent + }); + dropState.events = {}; + }, + 'interactions:action-end': (arg, scope) => { + if (arg.interaction.prepared.name !== 'drag') { + return; + } + const { + interaction, + iEvent: dragEvent + } = arg; + onEventCreated(arg, scope); + fireDropEvents(interaction, interaction.dropState.events); + scope.fire('actions/drop:end', { + interaction, + dragEvent + }); + }, + 'interactions:stop': ({ + interaction + }) => { + if (interaction.prepared.name !== 'drag') { + return; + } + const { + dropState + } = interaction; + if (dropState) { + dropState.activeDrops = null; + dropState.events = null; + dropState.cur.dropzone = null; + dropState.cur.element = null; + dropState.prev.dropzone = null; + dropState.prev.element = null; + dropState.rejected = false; + } + } + }, + getActiveDrops, + getDrop, + getDropEvents, + fireDropEvents, + filterEventType: type => type.search('drag') === 0 || type.search('drop') === 0, + defaults: { + enabled: false, + accept: null, + overlap: 'pointer' + } +}; +var _default = exports.default = drop; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/plugin.js.map b/packages/@interactjs/actions/drop/plugin.js.map new file mode 100644 index 000000000..4625fad0f --- /dev/null +++ b/packages/@interactjs/actions/drop/plugin.js.map @@ -0,0 +1,192 @@ +{ + "version": 3, + "names": [ + "domUtils", + "_interopRequireWildcard", + "require", + "_extend", + "_interopRequireDefault", + "_getOriginXY", + "_is", + "_normalizeListeners", + "pointerUtils", + "_plugin", + "_DropEvent", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "actions", + "interactStatic", + "interact", + "Interactable", + "defaults", + "usePlugin", + "drag", + "dropzone", + "options", + "dropzoneMethod", + "dropCheck", + "dragEvent", + "event", + "draggable", + "draggableElement", + "dropElement", + "rect", + "dropCheckMethod", + "dynamicDrop", + "newValue", + "is", + "bool", + "extend", + "phaselessTypes", + "dragenter", + "dragleave", + "dropactivate", + "dropdeactivate", + "dropmove", + "drop", + "methodDict", + "collectDropzones", + "interactables", + "drops", + "list", + "enabled", + "accept", + "element", + "string", + "matchesSelector", + "func", + "dropzoneElement", + "getAllElements", + "push", + "getRect", + "fireActivationEvents", + "activeDrops", + "slice", + "target", + "fire", + "propagationStopped", + "immediatePropagationStopped", + "getActiveDrops", + "dragElement", + "activeDrop", + "getDrop", + "dropState", + "interactable", + "pointerEvent", + "validDrops", + "isValid", + "dropIndex", + "indexOfDeepestElement", + "getDropEvents", + "interaction", + "_pointerEvent", + "dropEvents", + "enter", + "leave", + "activate", + "deactivate", + "move", + "type", + "DropEvent", + "rejected", + "cur", + "prev", + "dragLeave", + "prevDropzone", + "dragEnter", + "relatedTarget", + "fireDropEvents", + "events", + "onEventCreated", + "iEvent", + "dropResult", + "object", + "listeners", + "normalized", + "normalizeListeners", + "corrected", + "keys", + "reduce", + "acc", + "correctedType", + "test", + "prevListeners", + "off", + "on", + "ondrop", + "ondropactivate", + "ondropdeactivate", + "ondragenter", + "ondragleave", + "ondropmove", + "overlap", + "number", + "Math", + "max", + "min", + "checker", + "dropped", + "dropOverlap", + "origin", + "getOriginXY", + "page", + "getPageXY", + "x", + "y", + "horizontal", + "left", + "right", + "vertical", + "top", + "bottom", + "dragRect", + "cx", + "width", + "cy", + "height", + "overlapArea", + "overlapRatio", + "id", + "interactions:before-action-start", + "prepared", + "name", + "interactions:after-action-start", + "interactions:after-action-move", + "interactions:action-end", + "arg", + "interactions:stop", + "filterEventType", + "search", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '../drag/plugin'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n/* eslint-enable import/no-duplicates */\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n dragEvent: any, // related drag operation\n event: any, // touch or mouse EventEmitter\n dropped: boolean, // default checker result\n dropzone: Interactable, // dropzone interactable\n dropElement: Element, // drop zone element\n draggable: Interactable, // draggable's Interactable\n draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n accept?:\n | string\n | Element\n | (({ dropzone, draggableElement }: { dropzone: Interactable; draggableElement: Element }) => boolean)\n // How the overlap is checked on the drop zone\n overlap?: 'pointer' | 'center' | number\n checker?: DropFunctionChecker\n\n ondropactivate?: ListenersArg\n ondropdeactivate?: ListenersArg\n ondragenter?: ListenersArg\n ondragleave?: ListenersArg\n ondropmove?: ListenersArg\n ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n (this: Interactable, options: DropzoneOptions | boolean): Interactable\n (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param options - The new options to be set\n */\n dropzone(options: DropzoneOptions | boolean): Interactable\n /** @returns The current setting */\n dropzone(): DropzoneOptions\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n dropCheck(\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any,\n ): boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: DropState\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n /** @internal */\n prevDropzone?: Interactable\n dropzone?: Interactable\n dragEnter?: Element\n dragLeave?: Element\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drop: DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n\n interface SignalArgs {\n 'actions/drop:start': DropSignalArg\n 'actions/drop:move': DropSignalArg\n 'actions/drop:end': DropSignalArg\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drop?: typeof drop\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n interface InteractStatic {\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n dynamicDrop: (newValue?: boolean) => boolean | this\n }\n}\n\ninterface DropSignalArg {\n interaction: Interaction<'drag'>\n dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n dropzone: Interactable\n element: Element\n rect: Rect\n}\n\nexport interface DropState {\n cur: {\n // the dropzone a drag target might be dropped into\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n prev: {\n // the dropzone that was recently dragged away from\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n // wheather the potential drop was rejected from a listener\n rejected: boolean\n // the drop events related to the current drag event\n events: FiredDropEvents\n activeDrops: ActiveDrop[]\n}\n\nfunction install(scope: Scope) {\n const { actions, interactStatic: interact, Interactable, defaults } = scope\n\n scope.usePlugin(drag)\n\n Interactable.prototype.dropzone = function (this: Interactable, options) {\n return dropzoneMethod(this, options)\n } as Interactable['dropzone']\n\n Interactable.prototype.dropCheck = function (\n this: Interactable,\n dragEvent,\n event,\n draggable,\n draggableElement,\n dropElement,\n rect,\n ) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n interact.dynamicDrop = function (newValue?: boolean) {\n if (is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop!\n }\n\n extend(actions.phaselessTypes, {\n dragenter: true,\n dragleave: true,\n dropactivate: true,\n dropdeactivate: true,\n dropmove: true,\n drop: true,\n })\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDropzones({ interactables }: Scope, draggableElement: Element) {\n const drops: ActiveDrop[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) {\n continue\n }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if (\n (is.element(accept) && accept !== draggableElement) ||\n (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n (is.func(accept) && !accept({ dropzone, draggableElement }))\n ) {\n continue\n }\n\n for (const dropzoneElement of dropzone.getAllElements()) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n rect: dropzone.getRect(dropzoneElement),\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents(activeDrops: ActiveDrop[], event: DropEvent) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops.slice()) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops(scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDropzones(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop(\n { dropState, interactable: draggable, element: dragElement }: Interaction,\n dragEvent,\n pointerEvent,\n) {\n const validDrops: Element[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n const isValid = dropzone.dropCheck(\n dragEvent,\n pointerEvent,\n draggable!,\n dragElement!,\n dropzoneElement,\n rect,\n )\n validDrops.push(isValid ? dropzoneElement : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n return dropState!.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents(interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n const dropState = interaction.dropState!\n const dropEvents: Record = {\n enter: null,\n leave: null,\n activate: null,\n deactivate: null,\n move: null,\n drop: null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null as never\n dropEvents.activate.dropzone = null as never\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null as never\n dropEvents.deactivate.dropzone = null as never\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\ntype FiredDropEvents = Partial<\n Record<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents(interaction: Interaction, events: FiredDropEvents) {\n const dropState = interaction.dropState!\n const { activeDrops, cur, prev } = dropState\n\n if (events.leave) {\n prev.dropzone.fire(events.leave)\n }\n if (events.enter) {\n cur.dropzone.fire(events.enter)\n }\n if (events.move) {\n cur.dropzone.fire(events.move)\n }\n if (events.drop) {\n cur.dropzone.fire(events.drop)\n }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n return\n }\n\n const dropState = interaction.dropState!\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected =\n dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod(interactable: Interactable, options?: DropzoneOptions | boolean) {\n if (is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n const prevListeners = interactable.options.drop.listeners\n prevListeners && interactable.off(prevListeners)\n\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (is.func(options.ondrop)) {\n interactable.on('drop', options.ondrop)\n }\n if (is.func(options.ondropactivate)) {\n interactable.on('dropactivate', options.ondropactivate)\n }\n if (is.func(options.ondropdeactivate)) {\n interactable.on('dropdeactivate', options.ondropdeactivate)\n }\n if (is.func(options.ondragenter)) {\n interactable.on('dragenter', options.ondragenter)\n }\n if (is.func(options.ondragleave)) {\n interactable.on('dragleave', options.ondragleave)\n }\n if (is.func(options.ondropmove)) {\n interactable.on('dropmove', options.ondropmove)\n }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n } else if (is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod(\n interactable: Interactable,\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return interactable.options.drop.checker\n ? interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n : false\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = getOriginXY(draggable, draggableElement, 'drag')\n const page = pointerUtils.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = page.x > rect.left && page.x < rect.right\n const vertical = page.y > rect.top && page.y < rect.bottom\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && is.number(dropOverlap)) {\n const overlapArea =\n Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n }\n\n return dropped\n}\n\nconst drop: Plugin = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: [],\n }\n },\n\n 'interactions:after-action-start': (\n { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n\n // reset active dropzones\n dropState.activeDrops = []\n dropState.events = {}\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n scope.fire('actions/drop:start', { interaction, dragEvent })\n }\n },\n\n 'interactions:action-move': onEventCreated,\n\n 'interactions:after-action-move': (\n { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n fireDropEvents(interaction, dropState.events)\n\n scope.fire('actions/drop:move', { interaction, dragEvent })\n dropState.events = {}\n },\n\n 'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n if (arg.interaction.prepared.name !== 'drag') {\n return\n }\n\n const { interaction, iEvent: dragEvent } = arg\n\n onEventCreated(arg, scope)\n fireDropEvents(interaction, interaction.dropState!.events)\n scope.fire('actions/drop:end', { interaction, dragEvent })\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null as never\n dropState.events = null as never\n dropState.cur.dropzone = null as never\n dropState.cur.element = null as never\n dropState.prev.dropzone = null as never\n dropState.prev.element = null as never\n dropState.rejected = false\n }\n },\n },\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n\n filterEventType: (type: string) => type.search('drag') === 0 || type.search('drop') === 0,\n\n defaults: {\n enabled: false,\n accept: null as never,\n overlap: 'pointer',\n } as DropzoneOptions,\n}\n\nexport default drop\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/plugin.prod.js b/packages/@interactjs/actions/drop/plugin.prod.js new file mode 100644 index 000000000..1b4dfaa56 --- /dev/null +++ b/packages/@interactjs/actions/drop/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=l(require("../../utils/domUtils.prod.js")),t=i(require("../../utils/extend.prod.js")),r=i(require("../../utils/getOriginXY.prod.js")),o=i(require("../../utils/is.prod.js")),n=i(require("../../utils/normalizeListeners.prod.js")),a=l(require("../../utils/pointerUtils.prod.js")),p=i(require("../drag/plugin")),d=require("./DropEvent");function i(e){return e&&e.__esModule?e:{default:e}}function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(c=e=>e?r:t)(e)}function l(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=c(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var p=n?Object.getOwnPropertyDescriptor(e,a):null;p&&(p.get||p.set)?Object.defineProperty(o,a,p):o[a]=e[a]}return o.default=e,r&&r.set(e,o),o}function s(e,t){for(const{dropzone:r,element:o}of e.slice())t.dropzone=r,t.target=o,r.fire(t),t.propagationStopped=t.immediatePropagationStopped=!1}function u(t,r){const n=(({interactables:t},r)=>{const n=[];for(const a of t.list){if(!a.options.drop.enabled)continue;const t=a.options.drop.accept;if(!(o.default.element(t)&&t!==r||o.default.string(t)&&!e.matchesSelector(r,t)||o.default.func(t)&&!t({dropzone:a,draggableElement:r})))for(const e of a.getAllElements())e!==r&&n.push({dropzone:a,element:e,rect:a.getRect(e)})}return n})(t,r);for(const e of n)e.rect=e.dropzone.getRect(e.element);return n}function v({dropState:t,interactable:r,element:o},n,a){const p=[];for(const{dropzone:e,element:d,rect:i}of t.activeDrops){const t=e.dropCheck(n,a,r,o,d,i);p.push(t?d:null)}const d=e.indexOfDeepestElement(p);return t.activeDrops[d]||null}function f(e,t,r){const o=e.dropState,n={enter:null,leave:null,activate:null,deactivate:null,move:null,drop:null};return"dragstart"===r.type&&(n.activate=new d.DropEvent(o,r,"dropactivate"),n.activate.target=null,n.activate.dropzone=null),"dragend"===r.type&&(n.deactivate=new d.DropEvent(o,r,"dropdeactivate"),n.deactivate.target=null,n.deactivate.dropzone=null),o.rejected||(o.cur.element!==o.prev.element&&(o.prev.dropzone&&(n.leave=new d.DropEvent(o,r,"dragleave"),r.dragLeave=n.leave.target=o.prev.element,r.prevDropzone=n.leave.dropzone=o.prev.dropzone),o.cur.dropzone&&(n.enter=new d.DropEvent(o,r,"dragenter"),r.dragEnter=o.cur.element,r.dropzone=o.cur.dropzone)),"dragend"===r.type&&o.cur.dropzone&&(n.drop=new d.DropEvent(o,r,"drop"),r.dropzone=o.cur.dropzone,r.relatedTarget=o.cur.element),"dragmove"===r.type&&o.cur.dropzone&&(n.move=new d.DropEvent(o,r,"dropmove"),r.dropzone=o.cur.dropzone)),n}function m(e,t){const r=e.dropState,{activeDrops:o,cur:n,prev:a}=r;t.leave&&a.dropzone.fire(t.leave),t.enter&&n.dropzone.fire(t.enter),t.move&&n.dropzone.fire(t.move),t.drop&&n.dropzone.fire(t.drop),t.deactivate&&s(o,t.deactivate),r.prev.dropzone=n.dropzone,r.prev.element=n.element}function g({interaction:e,iEvent:t,event:r},o){if("dragmove"!==t.type&&"dragend"!==t.type)return;const n=e.dropState;o.dynamicDrop&&(n.activeDrops=u(o,e.element));const a=t,p=v(e,a,r);n.rejected=n.rejected&&!!p&&p.dropzone===n.cur.dropzone&&p.element===n.cur.element,n.cur.dropzone=p&&p.dropzone,n.cur.element=p&&p.element,n.events=f(e,0,a)}const h={id:"actions/drop",install(e){const{actions:d,interactStatic:i,Interactable:c,defaults:l}=e;e.usePlugin(p.default),c.prototype.dropzone=function(e){return((e,t)=>{if(o.default.object(t)){if(e.options.drop.enabled=!1!==t.enabled,t.listeners){const r=(0,n.default)(t.listeners),o=Object.keys(r).reduce(((e,t)=>(e[/^(enter|leave)/.test(t)?"drag"+t:/^(activate|deactivate|move)/.test(t)?"drop"+t:t]=r[t],e)),{}),a=e.options.drop.listeners;a&&e.off(a),e.on(o),e.options.drop.listeners=o}return o.default.func(t.ondrop)&&e.on("drop",t.ondrop),o.default.func(t.ondropactivate)&&e.on("dropactivate",t.ondropactivate),o.default.func(t.ondropdeactivate)&&e.on("dropdeactivate",t.ondropdeactivate),o.default.func(t.ondragenter)&&e.on("dragenter",t.ondragenter),o.default.func(t.ondragleave)&&e.on("dragleave",t.ondragleave),o.default.func(t.ondropmove)&&e.on("dropmove",t.ondropmove),/^(pointer|center)$/.test(t.overlap)?e.options.drop.overlap=t.overlap:o.default.number(t.overlap)&&(e.options.drop.overlap=Math.max(Math.min(1,t.overlap),0)),"accept"in t&&(e.options.drop.accept=t.accept),"checker"in t&&(e.options.drop.checker=t.checker),e}return o.default.bool(t)?(e.options.drop.enabled=t,e):e.options.drop})(this,e)},c.prototype.dropCheck=function(e,t,n,p,d,i){return((e,t,n,p,d,i,c)=>{let l=!1;if(!(c=c||e.getRect(i)))return!!e.options.drop.checker&&e.options.drop.checker(t,n,l,e,i,p,d);const s=e.options.drop.overlap;if("pointer"===s){const e=(0,r.default)(p,d,"drag"),o=a.getPageXY(t);o.x+=e.x,o.y+=e.y;const n=o.x>c.left&&o.xc.top&&o.y=c.left&&e<=c.right&&t>=c.top&&t<=c.bottom}return u&&o.default.number(s)&&(l=Math.max(0,Math.min(c.right,u.right)-Math.max(c.left,u.left))*Math.max(0,Math.min(c.bottom,u.bottom)-Math.max(c.top,u.top))/(u.width*u.height)>=s),e.options.drop.checker&&(l=e.options.drop.checker(t,n,l,e,i,p,d)),l})(this,e,t,n,p,d,i)},i.dynamicDrop=t=>o.default.bool(t)?(e.dynamicDrop=t,i):e.dynamicDrop,(0,t.default)(d.phaselessTypes,{dragenter:!0,dragleave:!0,dropactivate:!0,dropdeactivate:!0,dropmove:!0,drop:!0}),d.methodDict.drop="dropzone",e.dynamicDrop=!1,l.actions.drop=h.defaults},listeners:{"interactions:before-action-start"({interaction:e}){"drag"===e.prepared.name&&(e.dropState={cur:{dropzone:null,element:null},prev:{dropzone:null,element:null},rejected:null,events:null,activeDrops:[]})},"interactions:after-action-start"({interaction:e,event:t,iEvent:r},o){if("drag"!==e.prepared.name)return;const n=e.dropState;n.activeDrops=[],n.events={},n.activeDrops=u(o,e.element),n.events=f(e,0,r),n.events.activate&&(s(n.activeDrops,n.events.activate),o.fire("actions/drop:start",{interaction:e,dragEvent:r}))},"interactions:action-move":g,"interactions:after-action-move"({interaction:e,iEvent:t},r){if("drag"!==e.prepared.name)return;const o=e.dropState;m(e,o.events),r.fire("actions/drop:move",{interaction:e,dragEvent:t}),o.events={}},"interactions:action-end"(e,t){if("drag"!==e.interaction.prepared.name)return;const{interaction:r,iEvent:o}=e;g(e,t),m(r,r.dropState.events),t.fire("actions/drop:end",{interaction:r,dragEvent:o})},"interactions:stop"({interaction:e}){if("drag"!==e.prepared.name)return;const{dropState:t}=e;t&&(t.activeDrops=null,t.events=null,t.cur.dropzone=null,t.cur.element=null,t.prev.dropzone=null,t.prev.element=null,t.rejected=!1)}},getActiveDrops:u,getDrop:v,getDropEvents:f,fireDropEvents:m,filterEventType:e=>0===e.search("drag")||0===e.search("drop"),defaults:{enabled:!1,accept:null,overlap:"pointer"}};exports.default=h; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/drop/plugin.prod.js.map b/packages/@interactjs/actions/drop/plugin.prod.js.map new file mode 100644 index 000000000..0672e2569 --- /dev/null +++ b/packages/@interactjs/actions/drop/plugin.prod.js.map @@ -0,0 +1,184 @@ +{ + "version": 3, + "names": [ + "domUtils", + "_interopRequireWildcard", + "require", + "_extendProd", + "_interopRequireDefault", + "_getOriginXYProd", + "_isProd", + "_normalizeListenersProd", + "pointerUtils", + "_plugin", + "_DropEvent", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "fireActivationEvents", + "activeDrops", + "event", + "dropzone", + "element", + "slice", + "target", + "fire", + "propagationStopped", + "immediatePropagationStopped", + "getActiveDrops", + "scope", + "dragElement", + "interactables", + "draggableElement", + "drops", + "list", + "options", + "drop", + "enabled", + "accept", + "is", + "string", + "matchesSelector", + "func", + "dropzoneElement", + "getAllElements", + "push", + "rect", + "getRect", + "collectDropzones", + "activeDrop", + "getDrop", + "dropState", + "interactable", + "draggable", + "dragEvent", + "pointerEvent", + "validDrops", + "isValid", + "dropCheck", + "dropIndex", + "indexOfDeepestElement", + "getDropEvents", + "interaction", + "_pointerEvent", + "dropEvents", + "enter", + "leave", + "activate", + "deactivate", + "move", + "type", + "DropEvent", + "rejected", + "cur", + "prev", + "dragLeave", + "prevDropzone", + "dragEnter", + "relatedTarget", + "fireDropEvents", + "events", + "onEventCreated", + "iEvent", + "dynamicDrop", + "dropResult", + "id", + "install", + "actions", + "interactStatic", + "interact", + "Interactable", + "defaults", + "usePlugin", + "drag", + "object", + "listeners", + "normalized", + "normalizeListeners", + "corrected", + "keys", + "reduce", + "acc", + "test", + "prevListeners", + "off", + "on", + "ondrop", + "ondropactivate", + "ondropdeactivate", + "ondragenter", + "ondragleave", + "ondropmove", + "overlap", + "number", + "Math", + "max", + "min", + "checker", + "bool", + "dropzoneMethod", + "this", + "dropElement", + "dropped", + "dropOverlap", + "origin", + "getOriginXY", + "page", + "getPageXY", + "x", + "y", + "horizontal", + "left", + "right", + "vertical", + "top", + "bottom", + "dragRect", + "cx", + "width", + "cy", + "height", + "dropCheckMethod", + "newValue", + "extend", + "phaselessTypes", + "dragenter", + "dragleave", + "dropactivate", + "dropdeactivate", + "dropmove", + "methodDict", + "prepared", + "name", + "arg", + "filterEventType", + "search", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '../drag/plugin'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n/* eslint-enable import/no-duplicates */\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n dragEvent: any, // related drag operation\n event: any, // touch or mouse EventEmitter\n dropped: boolean, // default checker result\n dropzone: Interactable, // dropzone interactable\n dropElement: Element, // drop zone element\n draggable: Interactable, // draggable's Interactable\n draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n accept?:\n | string\n | Element\n | (({ dropzone, draggableElement }: { dropzone: Interactable; draggableElement: Element }) => boolean)\n // How the overlap is checked on the drop zone\n overlap?: 'pointer' | 'center' | number\n checker?: DropFunctionChecker\n\n ondropactivate?: ListenersArg\n ondropdeactivate?: ListenersArg\n ondragenter?: ListenersArg\n ondragleave?: ListenersArg\n ondropmove?: ListenersArg\n ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n (this: Interactable, options: DropzoneOptions | boolean): Interactable\n (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param options - The new options to be set\n */\n dropzone(options: DropzoneOptions | boolean): Interactable\n /** @returns The current setting */\n dropzone(): DropzoneOptions\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n dropCheck(\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any,\n ): boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: DropState\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n /** @internal */\n prevDropzone?: Interactable\n dropzone?: Interactable\n dragEnter?: Element\n dragLeave?: Element\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drop: DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n\n interface SignalArgs {\n 'actions/drop:start': DropSignalArg\n 'actions/drop:move': DropSignalArg\n 'actions/drop:end': DropSignalArg\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drop?: typeof drop\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n interface InteractStatic {\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n dynamicDrop: (newValue?: boolean) => boolean | this\n }\n}\n\ninterface DropSignalArg {\n interaction: Interaction<'drag'>\n dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n dropzone: Interactable\n element: Element\n rect: Rect\n}\n\nexport interface DropState {\n cur: {\n // the dropzone a drag target might be dropped into\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n prev: {\n // the dropzone that was recently dragged away from\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n // wheather the potential drop was rejected from a listener\n rejected: boolean\n // the drop events related to the current drag event\n events: FiredDropEvents\n activeDrops: ActiveDrop[]\n}\n\nfunction install(scope: Scope) {\n const { actions, interactStatic: interact, Interactable, defaults } = scope\n\n scope.usePlugin(drag)\n\n Interactable.prototype.dropzone = function (this: Interactable, options) {\n return dropzoneMethod(this, options)\n } as Interactable['dropzone']\n\n Interactable.prototype.dropCheck = function (\n this: Interactable,\n dragEvent,\n event,\n draggable,\n draggableElement,\n dropElement,\n rect,\n ) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n interact.dynamicDrop = function (newValue?: boolean) {\n if (is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop!\n }\n\n extend(actions.phaselessTypes, {\n dragenter: true,\n dragleave: true,\n dropactivate: true,\n dropdeactivate: true,\n dropmove: true,\n drop: true,\n })\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDropzones({ interactables }: Scope, draggableElement: Element) {\n const drops: ActiveDrop[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) {\n continue\n }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if (\n (is.element(accept) && accept !== draggableElement) ||\n (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n (is.func(accept) && !accept({ dropzone, draggableElement }))\n ) {\n continue\n }\n\n for (const dropzoneElement of dropzone.getAllElements()) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n rect: dropzone.getRect(dropzoneElement),\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents(activeDrops: ActiveDrop[], event: DropEvent) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops.slice()) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops(scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDropzones(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop(\n { dropState, interactable: draggable, element: dragElement }: Interaction,\n dragEvent,\n pointerEvent,\n) {\n const validDrops: Element[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n const isValid = dropzone.dropCheck(\n dragEvent,\n pointerEvent,\n draggable!,\n dragElement!,\n dropzoneElement,\n rect,\n )\n validDrops.push(isValid ? dropzoneElement : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n return dropState!.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents(interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n const dropState = interaction.dropState!\n const dropEvents: Record = {\n enter: null,\n leave: null,\n activate: null,\n deactivate: null,\n move: null,\n drop: null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null as never\n dropEvents.activate.dropzone = null as never\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null as never\n dropEvents.deactivate.dropzone = null as never\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\ntype FiredDropEvents = Partial<\n Record<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents(interaction: Interaction, events: FiredDropEvents) {\n const dropState = interaction.dropState!\n const { activeDrops, cur, prev } = dropState\n\n if (events.leave) {\n prev.dropzone.fire(events.leave)\n }\n if (events.enter) {\n cur.dropzone.fire(events.enter)\n }\n if (events.move) {\n cur.dropzone.fire(events.move)\n }\n if (events.drop) {\n cur.dropzone.fire(events.drop)\n }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n return\n }\n\n const dropState = interaction.dropState!\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected =\n dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod(interactable: Interactable, options?: DropzoneOptions | boolean) {\n if (is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n const prevListeners = interactable.options.drop.listeners\n prevListeners && interactable.off(prevListeners)\n\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (is.func(options.ondrop)) {\n interactable.on('drop', options.ondrop)\n }\n if (is.func(options.ondropactivate)) {\n interactable.on('dropactivate', options.ondropactivate)\n }\n if (is.func(options.ondropdeactivate)) {\n interactable.on('dropdeactivate', options.ondropdeactivate)\n }\n if (is.func(options.ondragenter)) {\n interactable.on('dragenter', options.ondragenter)\n }\n if (is.func(options.ondragleave)) {\n interactable.on('dragleave', options.ondragleave)\n }\n if (is.func(options.ondropmove)) {\n interactable.on('dropmove', options.ondropmove)\n }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n } else if (is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod(\n interactable: Interactable,\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return interactable.options.drop.checker\n ? interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n : false\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = getOriginXY(draggable, draggableElement, 'drag')\n const page = pointerUtils.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = page.x > rect.left && page.x < rect.right\n const vertical = page.y > rect.top && page.y < rect.bottom\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && is.number(dropOverlap)) {\n const overlapArea =\n Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n }\n\n return dropped\n}\n\nconst drop: Plugin = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: [],\n }\n },\n\n 'interactions:after-action-start': (\n { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n\n // reset active dropzones\n dropState.activeDrops = []\n dropState.events = {}\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n scope.fire('actions/drop:start', { interaction, dragEvent })\n }\n },\n\n 'interactions:action-move': onEventCreated,\n\n 'interactions:after-action-move': (\n { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n fireDropEvents(interaction, dropState.events)\n\n scope.fire('actions/drop:move', { interaction, dragEvent })\n dropState.events = {}\n },\n\n 'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n if (arg.interaction.prepared.name !== 'drag') {\n return\n }\n\n const { interaction, iEvent: dragEvent } = arg\n\n onEventCreated(arg, scope)\n fireDropEvents(interaction, interaction.dropState!.events)\n scope.fire('actions/drop:end', { interaction, dragEvent })\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null as never\n dropState.events = null as never\n dropState.cur.dropzone = null as never\n dropState.cur.element = null as never\n dropState.prev.dropzone = null as never\n dropState.prev.element = null as never\n dropState.rejected = false\n }\n },\n },\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n\n filterEventType: (type: string) => type.search('drag') === 0 || type.search('drop') === 0,\n\n defaults: {\n enabled: false,\n accept: null as never,\n overlap: 'pointer',\n } as DropzoneOptions,\n}\n\nexport default drop\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/index.d.ts b/packages/@interactjs/actions/gesture/index.d.ts new file mode 100644 index 000000000..7045fc077 --- /dev/null +++ b/packages/@interactjs/actions/gesture/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/actions/gesture/plugin'; diff --git a/packages/@interactjs/actions/gesture/index.js b/packages/@interactjs/actions/gesture/index.js new file mode 100644 index 000000000..c88b3917a --- /dev/null +++ b/packages/@interactjs/actions/gesture/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/index.js.map b/packages/@interactjs/actions/gesture/index.js.map new file mode 100644 index 000000000..27e404415 --- /dev/null +++ b/packages/@interactjs/actions/gesture/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/gesture/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/gesture/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/index.prod.js b/packages/@interactjs/actions/gesture/index.prod.js new file mode 100644 index 000000000..d151174b8 --- /dev/null +++ b/packages/@interactjs/actions/gesture/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/index.prod.js.map b/packages/@interactjs/actions/gesture/index.prod.js.map new file mode 100644 index 000000000..87510df36 --- /dev/null +++ b/packages/@interactjs/actions/gesture/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/gesture/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/gesture/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,iCAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/index.ts b/packages/@interactjs/actions/gesture/index.ts new file mode 100644 index 000000000..21db98581 --- /dev/null +++ b/packages/@interactjs/actions/gesture/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/actions/gesture/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/actions/gesture/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/plugin.d.ts b/packages/@interactjs/actions/gesture/plugin.d.ts new file mode 100644 index 000000000..80b660a27 --- /dev/null +++ b/packages/@interactjs/actions/gesture/plugin.d.ts @@ -0,0 +1,74 @@ +import type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'; +import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'; +import type { PerActionDefaults } from '@interactjs/core/options'; +import type { Plugin } from '@interactjs/core/scope'; +import type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'; +declare module '@interactjs/core/Interaction' { + interface Interaction { + gesture?: { + angle: number; + distance: number; + scale: number; + startAngle: number; + startDistance: number; + }; + } +} +declare module '@interactjs/core/Interactable' { + interface Interactable { + gesturable(options: Partial> | boolean): this; + gesturable(): GesturableOptions; + /** + * ```js + * interact(element).gesturable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * // limit multiple gestures. + * // See the explanation in {@link Interactable.draggable} example + * max: Infinity, + * maxPerElement: 1, + * }) + * + * var isGestureable = interact(element).gesturable() + * ``` + * + * Gets or sets whether multitouch gestures can be performed on the target + * + * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable) + * @returns A boolean indicating if this can be the target of gesture events, or this Interactable + */ + gesturable(options?: Partial> | boolean): this | GesturableOptions; + } +} +declare module '@interactjs/core/options' { + interface ActionDefaults { + gesture: GesturableOptions; + } +} +declare module '@interactjs/core/types' { + interface ActionMap { + gesture?: typeof gesture; + } +} +export interface GesturableOptions extends PerActionDefaults { + onstart?: ListenersArg; + onmove?: ListenersArg; + onend?: ListenersArg; +} +export interface GestureEvent extends InteractEvent<'gesture'> { + distance: number; + angle: number; + da: number; + scale: number; + ds: number; + box: Rect; + touches: PointerType[]; +} +export interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> { + iEvent: GestureEvent; + interaction: Interaction<'gesture'>; +} +declare const gesture: Plugin; +export default gesture; diff --git a/packages/@interactjs/actions/gesture/plugin.js b/packages/@interactjs/actions/gesture/plugin.js new file mode 100644 index 000000000..93e38b692 --- /dev/null +++ b/packages/@interactjs/actions/gesture/plugin.js @@ -0,0 +1,117 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _is = _interopRequireDefault(require("../../utils/is.js")); +var pointerUtils = _interopRequireWildcard(require("../../utils/pointerUtils.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function install(scope) { + const { + actions, + Interactable, + defaults + } = scope; + Interactable.prototype.gesturable = function (options) { + if (_is.default.object(options)) { + this.options.gesture.enabled = options.enabled !== false; + this.setPerAction('gesture', options); + this.setOnEvents('gesture', options); + return this; + } + if (_is.default.bool(options)) { + this.options.gesture.enabled = options; + return this; + } + return this.options.gesture; + }; + actions.map.gesture = gesture; + actions.methodDict.gesture = 'gesturable'; + defaults.actions.gesture = gesture.defaults; +} +function updateGestureProps({ + interaction, + iEvent, + phase +}) { + if (interaction.prepared.name !== 'gesture') return; + const pointers = interaction.pointers.map(p => p.pointer); + const starting = phase === 'start'; + const ending = phase === 'end'; + const deltaSource = interaction.interactable.options.deltaSource; + iEvent.touches = [pointers[0], pointers[1]]; + if (starting) { + iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource); + iEvent.box = pointerUtils.touchBBox(pointers); + iEvent.scale = 1; + iEvent.ds = 0; + iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource); + iEvent.da = 0; + interaction.gesture.startDistance = iEvent.distance; + interaction.gesture.startAngle = iEvent.angle; + } else if (ending || interaction.pointers.length < 2) { + const prevEvent = interaction.prevEvent; + iEvent.distance = prevEvent.distance; + iEvent.box = prevEvent.box; + iEvent.scale = prevEvent.scale; + iEvent.ds = 0; + iEvent.angle = prevEvent.angle; + iEvent.da = 0; + } else { + iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource); + iEvent.box = pointerUtils.touchBBox(pointers); + iEvent.scale = iEvent.distance / interaction.gesture.startDistance; + iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource); + iEvent.ds = iEvent.scale - interaction.gesture.scale; + iEvent.da = iEvent.angle - interaction.gesture.angle; + } + interaction.gesture.distance = iEvent.distance; + interaction.gesture.angle = iEvent.angle; + if (_is.default.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) { + interaction.gesture.scale = iEvent.scale; + } +} +const gesture = { + id: 'actions/gesture', + before: ['actions/drag', 'actions/resize'], + install, + listeners: { + 'interactions:action-start': updateGestureProps, + 'interactions:action-move': updateGestureProps, + 'interactions:action-end': updateGestureProps, + 'interactions:new': ({ + interaction + }) => { + interaction.gesture = { + angle: 0, + distance: 0, + scale: 1, + startAngle: 0, + startDistance: 0 + }; + }, + 'auto-start:check': arg => { + if (arg.interaction.pointers.length < 2) { + return undefined; + } + const gestureOptions = arg.interactable.options.gesture; + if (!(gestureOptions && gestureOptions.enabled)) { + return undefined; + } + arg.action = { + name: 'gesture' + }; + return false; + } + }, + defaults: {}, + getCursor() { + return ''; + }, + filterEventType: type => type.search('gesture') === 0 +}; +var _default = exports.default = gesture; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/plugin.js.map b/packages/@interactjs/actions/gesture/plugin.js.map new file mode 100644 index 000000000..d50769f22 --- /dev/null +++ b/packages/@interactjs/actions/gesture/plugin.js.map @@ -0,0 +1,99 @@ +{ + "version": 3, + "names": [ + "_is", + "_interopRequireDefault", + "require", + "pointerUtils", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "install", + "scope", + "actions", + "Interactable", + "defaults", + "gesturable", + "options", + "is", + "object", + "gesture", + "enabled", + "setPerAction", + "setOnEvents", + "bool", + "map", + "methodDict", + "updateGestureProps", + "interaction", + "iEvent", + "phase", + "prepared", + "name", + "pointers", + "p", + "pointer", + "starting", + "ending", + "deltaSource", + "interactable", + "touches", + "distance", + "touchDistance", + "box", + "touchBBox", + "scale", + "ds", + "angle", + "touchAngle", + "da", + "startDistance", + "startAngle", + "length", + "prevEvent", + "number", + "Infinity", + "isNaN", + "id", + "before", + "listeners", + "interactions:new", + "arg", + "undefined", + "gestureOptions", + "action", + "getCursor", + "filterEventType", + "type", + "search", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable(options: Partial> | boolean): this\n gesturable(): GesturableOptions\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n * @returns A boolean indicating if this can be the target of gesture events, or this Interactable\n */\n gesturable(options?: Partial> | boolean): this | GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n gesture: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.gesturable = function (\n this: InstanceType,\n options: GesturableOptions | boolean,\n ) {\n if (is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as GesturableOptions\n } as Interactable['gesturable']\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps({ interaction, iEvent, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') return\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n } else if (ending || interaction.pointers.length < 2) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n } else {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n\n 'auto-start:check': (arg) => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {},\n\n getCursor() {\n return ''\n },\n\n filterEventType: (type: string) => type.search('gesture') === 0,\n}\n\nexport default gesture\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/plugin.prod.js b/packages/@interactjs/actions/gesture/plugin.prod.js new file mode 100644 index 000000000..771f45356 --- /dev/null +++ b/packages/@interactjs/actions/gesture/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e,t=(e=require("../../utils/is.prod.js"))&&e.__esModule?e:{default:e},s=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var s=n(t);if(s&&s.has(e))return s.get(e);var r={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var o=a?Object.getOwnPropertyDescriptor(e,i):null;o&&(o.get||o.set)?Object.defineProperty(r,i,o):r[i]=e[i]}return r.default=e,s&&s.set(e,r),r})(require("../../utils/pointerUtils.prod.js"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,s=new WeakMap;return(n=e=>e?s:t)(e)}function r({interaction:e,iEvent:n,phase:r}){if("gesture"!==e.prepared.name)return;const a=e.pointers.map((e=>e.pointer)),i="start"===r,o="end"===r,c=e.interactable.options.deltaSource;if(n.touches=[a[0],a[1]],i)n.distance=s.touchDistance(a,c),n.box=s.touchBBox(a),n.scale=1,n.ds=0,n.angle=s.touchAngle(a,c),n.da=0,e.gesture.startDistance=n.distance,e.gesture.startAngle=n.angle;else if(o||e.pointers.length<2){const t=e.prevEvent;n.distance=t.distance,n.box=t.box,n.scale=t.scale,n.ds=0,n.angle=t.angle,n.da=0}else n.distance=s.touchDistance(a,c),n.box=s.touchBBox(a),n.scale=n.distance/e.gesture.startDistance,n.angle=s.touchAngle(a,c),n.ds=n.scale-e.gesture.scale,n.da=n.angle-e.gesture.angle;e.gesture.distance=n.distance,e.gesture.angle=n.angle,t.default.number(n.scale)&&n.scale!==1/0&&!isNaN(n.scale)&&(e.gesture.scale=n.scale)}const a={id:"actions/gesture",before:["actions/drag","actions/resize"],install(e){const{actions:s,Interactable:n,defaults:r}=e;n.prototype.gesturable=function(e){return t.default.object(e)?(this.options.gesture.enabled=!1!==e.enabled,this.setPerAction("gesture",e),this.setOnEvents("gesture",e),this):t.default.bool(e)?(this.options.gesture.enabled=e,this):this.options.gesture},s.map.gesture=a,s.methodDict.gesture="gesturable",r.actions.gesture=a.defaults},listeners:{"interactions:action-start":r,"interactions:action-move":r,"interactions:action-end":r,"interactions:new"({interaction:e}){e.gesture={angle:0,distance:0,scale:1,startAngle:0,startDistance:0}},"auto-start:check"(e){if(e.interaction.pointers.length<2)return;const t=e.interactable.options.gesture;return t&&t.enabled?(e.action={name:"gesture"},!1):void 0}},defaults:{},getCursor(){return""},filterEventType:e=>0===e.search("gesture")};exports.default=a; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/gesture/plugin.prod.js.map b/packages/@interactjs/actions/gesture/plugin.prod.js.map new file mode 100644 index 000000000..f97fe4a11 --- /dev/null +++ b/packages/@interactjs/actions/gesture/plugin.prod.js.map @@ -0,0 +1,96 @@ +{ + "version": 3, + "names": [ + "obj", + "_isProd", + "require", + "__esModule", + "default", + "pointerUtils", + "e", + "r", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "updateGestureProps", + "interaction", + "iEvent", + "phase", + "prepared", + "name", + "pointers", + "map", + "p", + "pointer", + "starting", + "ending", + "deltaSource", + "interactable", + "options", + "touches", + "distance", + "touchDistance", + "box", + "touchBBox", + "scale", + "ds", + "angle", + "touchAngle", + "da", + "gesture", + "startDistance", + "startAngle", + "length", + "prevEvent", + "is", + "number", + "Infinity", + "isNaN", + "id", + "before", + "install", + "scope", + "actions", + "Interactable", + "defaults", + "gesturable", + "object", + "this", + "enabled", + "setPerAction", + "setOnEvents", + "bool", + "methodDict", + "listeners", + "arg", + "gestureOptions", + "action", + "getCursor", + "filterEventType", + "type", + "search", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable(options: Partial> | boolean): this\n gesturable(): GesturableOptions\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n * @returns A boolean indicating if this can be the target of gesture events, or this Interactable\n */\n gesturable(options?: Partial> | boolean): this | GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n gesture: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.gesturable = function (\n this: InstanceType,\n options: GesturableOptions | boolean,\n ) {\n if (is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as GesturableOptions\n } as Interactable['gesturable']\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps({ interaction, iEvent, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') return\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n } else if (ending || interaction.pointers.length < 2) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n } else {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n\n 'auto-start:check': (arg) => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {},\n\n getCursor() {\n return ''\n },\n\n filterEventType: (type: string) => type.search('gesture') === 0,\n}\n\nexport default gesture\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/index.d.ts b/packages/@interactjs/actions/index.d.ts new file mode 100644 index 000000000..c3287de1c --- /dev/null +++ b/packages/@interactjs/actions/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/actions/plugin'; diff --git a/packages/@interactjs/actions/index.js b/packages/@interactjs/actions/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/actions/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/index.js.map b/packages/@interactjs/actions/index.js.map new file mode 100644 index 000000000..87d16301a --- /dev/null +++ b/packages/@interactjs/actions/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/index.prod.js b/packages/@interactjs/actions/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/actions/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/index.prod.js.map b/packages/@interactjs/actions/index.prod.js.map new file mode 100644 index 000000000..a669bf949 --- /dev/null +++ b/packages/@interactjs/actions/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/index.ts b/packages/@interactjs/actions/index.ts new file mode 100644 index 000000000..f76b661c4 --- /dev/null +++ b/packages/@interactjs/actions/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/actions/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/actions/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/actions/plugin.d.ts b/packages/@interactjs/actions/plugin.d.ts new file mode 100644 index 000000000..989fb96d5 --- /dev/null +++ b/packages/@interactjs/actions/plugin.d.ts @@ -0,0 +1,10 @@ +import type { Scope } from '@interactjs/core/scope'; +import './drag/plugin'; +import './drop/plugin'; +import './gesture/plugin'; +import './resize/plugin'; +declare const _default: { + id: string; + install(scope: Scope): void; +}; +export default _default; diff --git a/packages/@interactjs/actions/plugin.js b/packages/@interactjs/actions/plugin.js new file mode 100644 index 000000000..0debb2bcd --- /dev/null +++ b/packages/@interactjs/actions/plugin.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _plugin = _interopRequireDefault(require("./drag/plugin")); +var _plugin2 = _interopRequireDefault(require("./drop/plugin")); +var _plugin3 = _interopRequireDefault(require("./gesture/plugin")); +var _plugin4 = _interopRequireDefault(require("./resize/plugin")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ +/* eslint-enable import/no-duplicates */ +var _default = exports.default = { + id: 'actions', + install(scope) { + scope.usePlugin(_plugin3.default); + scope.usePlugin(_plugin4.default); + scope.usePlugin(_plugin.default); + scope.usePlugin(_plugin2.default); + } +}; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/plugin.js.map b/packages/@interactjs/actions/plugin.js.map new file mode 100644 index 000000000..78bf0f055 --- /dev/null +++ b/packages/@interactjs/actions/plugin.js.map @@ -0,0 +1,31 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_plugin2", + "_plugin3", + "_plugin4", + "obj", + "__esModule", + "default", + "_default", + "exports", + "id", + "install", + "scope", + "usePlugin", + "gesture", + "resize", + "drag", + "drop" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'actions',\n install(scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n },\n}\n" + ], + "mappings": ";;;;;;AAGA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAwB,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAJxB;AAUA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEe;EACbG,EAAE,EAAE,SAAS;EACbC,OAAOA,CAACC,KAAY,EAAE;IACpBA,KAAK,CAACC,SAAS,CAACC,gBAAO,CAAC;IACxBF,KAAK,CAACC,SAAS,CAACE,gBAAM,CAAC;IACvBH,KAAK,CAACC,SAAS,CAACG,eAAI,CAAC;IACrBJ,KAAK,CAACC,SAAS,CAACI,gBAAI,CAAC;EACvB;AACF,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/plugin.prod.js b/packages/@interactjs/actions/plugin.prod.js new file mode 100644 index 000000000..f0b1fdfe8 --- /dev/null +++ b/packages/@interactjs/actions/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=i(require("./drag/plugin")),u=i(require("./drop/plugin")),l=i(require("./gesture/plugin")),r=i(require("./resize/plugin"));function i(e){return e&&e.__esModule?e:{default:e}}exports.default={id:"actions",install(i){i.usePlugin(l.default),i.usePlugin(r.default),i.usePlugin(e.default),i.usePlugin(u.default)}}; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/plugin.prod.js.map b/packages/@interactjs/actions/plugin.prod.js.map new file mode 100644 index 000000000..0d7b00dbb --- /dev/null +++ b/packages/@interactjs/actions/plugin.prod.js.map @@ -0,0 +1,30 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_plugin2", + "_plugin3", + "_plugin4", + "obj", + "__esModule", + "default", + "exports", + "id", + "install", + "scope", + "usePlugin", + "gesture", + "resize", + "drag", + "drop" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'actions',\n install(scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n },\n}\n" + ], + "mappings": "8EAGA,IAAAA,EAAAC,EAAAC,QAAA,kBACAC,EAAAF,EAAAC,QAAA,kBACAE,EAAAH,EAAAC,QAAA,qBACAG,EAAAJ,EAAAC,QAAA,oBAAwB,SAAAD,EAAAK,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAMxBG,QAAAD,QAEe,CACbE,GAAI,UACJC,QAAQC,GACNA,EAAMC,UAAUC,WAChBF,EAAMC,UAAUE,WAChBH,EAAMC,UAAUG,WAChBJ,EAAMC,UAAUI,UAClB" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/index.d.ts b/packages/@interactjs/actions/resize/index.d.ts new file mode 100644 index 000000000..6bbea2e27 --- /dev/null +++ b/packages/@interactjs/actions/resize/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/actions/resize/plugin'; diff --git a/packages/@interactjs/actions/resize/index.js b/packages/@interactjs/actions/resize/index.js new file mode 100644 index 000000000..c88b3917a --- /dev/null +++ b/packages/@interactjs/actions/resize/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/index.js.map b/packages/@interactjs/actions/resize/index.js.map new file mode 100644 index 000000000..d3a00be3a --- /dev/null +++ b/packages/@interactjs/actions/resize/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/resize/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/resize/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/index.prod.js b/packages/@interactjs/actions/resize/index.prod.js new file mode 100644 index 000000000..d151174b8 --- /dev/null +++ b/packages/@interactjs/actions/resize/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/index.prod.js.map b/packages/@interactjs/actions/resize/index.prod.js.map new file mode 100644 index 000000000..0121603ff --- /dev/null +++ b/packages/@interactjs/actions/resize/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/actions/resize/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/actions/resize/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,iCAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/index.ts b/packages/@interactjs/actions/resize/index.ts new file mode 100644 index 000000000..a520adc45 --- /dev/null +++ b/packages/@interactjs/actions/resize/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/actions/resize/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/actions/resize/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/plugin.d.ts b/packages/@interactjs/actions/resize/plugin.d.ts new file mode 100644 index 000000000..4ca96b5d5 --- /dev/null +++ b/packages/@interactjs/actions/resize/plugin.d.ts @@ -0,0 +1,94 @@ +import type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'; +import type { PerActionDefaults } from '@interactjs/core/options'; +import type { Plugin } from '@interactjs/core/scope'; +import type { ActionName, ActionProps, EdgeOptions, FullRect, ListenersArg, OrBoolean } from '@interactjs/core/types'; +export type EdgeName = 'top' | 'left' | 'bottom' | 'right'; +declare module '@interactjs/core/Interactable' { + interface Interactable { + resizable(): ResizableOptions; + resizable(options: Partial> | boolean): this; + /** + * ```js + * interact(element).resizable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * edges: { + * top : true, // Use pointer coords to check for resize. + * left : false, // Disable resizing from left edge. + * bottom: '.resize-s',// Resize if pointer target matches selector + * right : handleEl // Resize if pointer target is the given Element + * }, + * + * // Width and height can be adjusted independently. When `true`, width and + * // height are adjusted at a 1:1 ratio. + * square: false, + * + * // Width and height can be adjusted independently. When `true`, width and + * // height maintain the aspect ratio they had when resizing started. + * preserveAspectRatio: false, + * + * // a value of 'none' will limit the resize rect to a minimum of 0x0 + * // 'negate' will allow the rect to have negative width/height + * // 'reposition' will keep the width/height positive by swapping + * // the top and bottom edges and/or swapping the left and right edges + * invert: 'none' || 'negate' || 'reposition' + * + * // limit multiple resizes. + * // See the explanation in the {@link Interactable.draggable} example + * max: Infinity, + * maxPerElement: 1, + * }) + * + * var isResizeable = interact(element).resizable() + * ``` + * + * Gets or sets whether resize actions can be performed on the target + * + * @param options - true/false or An object with event + * listeners to be fired on resize events (object makes the Interactable + * resizable) + * @returns A boolean indicating if this can be the + * target of resize elements, or this Interactable + */ + resizable(options?: Partial> | boolean): this | ResizableOptions; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + resizeAxes: 'x' | 'y' | 'xy'; + styleCursor(newValue: boolean): this; + styleCursor(): boolean; + resizeStartAspectRatio: number; + } +} +declare module '@interactjs/core/options' { + interface ActionDefaults { + resize: ResizableOptions; + } +} +declare module '@interactjs/core/types' { + interface ActionMap { + resize?: typeof resize; + } +} +export interface ResizableOptions extends PerActionDefaults { + square?: boolean; + preserveAspectRatio?: boolean; + edges?: EdgeOptions | null; + axis?: 'x' | 'y' | 'xy'; + invert?: 'none' | 'negate' | 'reposition'; + margin?: number; + squareResize?: boolean; + oninertiastart?: ListenersArg; + onstart?: ListenersArg; + onmove?: ListenersArg; + onend?: ListenersArg; +} +export interface ResizeEvent

extends InteractEvent<'resize', P> { + deltaRect?: FullRect; + edges?: ActionProps['edges']; +} +declare const resize: Plugin; +export default resize; diff --git a/packages/@interactjs/actions/resize/plugin.js b/packages/@interactjs/actions/resize/plugin.js new file mode 100644 index 000000000..090c8c50a --- /dev/null +++ b/packages/@interactjs/actions/resize/plugin.js @@ -0,0 +1,363 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var dom = _interopRequireWildcard(require("../../utils/domUtils.js")); +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _is = _interopRequireDefault(require("../../utils/is.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function install(scope) { + const { + actions, + browser, + Interactable, + // tslint:disable-line no-shadowed-variable + defaults + } = scope; + + // Less Precision with touch input + + resize.cursors = initCursors(browser); + resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10; + Interactable.prototype.resizable = function (options) { + return resizable(this, options, scope); + }; + actions.map.resize = resize; + actions.methodDict.resize = 'resizable'; + defaults.actions.resize = resize.defaults; +} +function resizeChecker(arg) { + const { + interaction, + interactable, + element, + rect, + buttons + } = arg; + if (!rect) { + return undefined; + } + const page = (0, _extend.default)({}, interaction.coords.cur.page); + const resizeOptions = interactable.options.resize; + if (!(resizeOptions && resizeOptions.enabled) || + // check mouseButton setting if the pointer is down + interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & resizeOptions.mouseButtons) === 0) { + return undefined; + } + + // if using resize.edges + if (_is.default.object(resizeOptions.edges)) { + const resizeEdges = { + left: false, + right: false, + top: false, + bottom: false + }; + for (const edge in resizeEdges) { + resizeEdges[edge] = checkResizeEdge(edge, resizeOptions.edges[edge], page, interaction._latestPointer.eventTarget, element, rect, resizeOptions.margin || resize.defaultMargin); + } + resizeEdges.left = resizeEdges.left && !resizeEdges.right; + resizeEdges.top = resizeEdges.top && !resizeEdges.bottom; + if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) { + arg.action = { + name: 'resize', + edges: resizeEdges + }; + } + } else { + const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin; + const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin; + if (right || bottom) { + arg.action = { + name: 'resize', + axes: (right ? 'x' : '') + (bottom ? 'y' : '') + }; + } + } + return arg.action ? false : undefined; +} +function resizable(interactable, options, scope) { + if (_is.default.object(options)) { + interactable.options.resize.enabled = options.enabled !== false; + interactable.setPerAction('resize', options); + interactable.setOnEvents('resize', options); + if (_is.default.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) { + interactable.options.resize.axis = options.axis; + } else if (options.axis === null) { + interactable.options.resize.axis = scope.defaults.actions.resize.axis; + } + if (_is.default.bool(options.preserveAspectRatio)) { + interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio; + } else if (_is.default.bool(options.square)) { + interactable.options.resize.square = options.square; + } + return interactable; + } + if (_is.default.bool(options)) { + interactable.options.resize.enabled = options; + return interactable; + } + return interactable.options.resize; +} +function checkResizeEdge(name, value, page, element, interactableElement, rect, margin) { + // false, '', undefined, null + if (!value) { + return false; + } + + // true value, use pointer coords and element rect + if (value === true) { + // if dimensions are negative, "switch" edges + const width = _is.default.number(rect.width) ? rect.width : rect.right - rect.left; + const height = _is.default.number(rect.height) ? rect.height : rect.bottom - rect.top; + + // don't use margin greater than half the relevent dimension + margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2)); + if (width < 0) { + if (name === 'left') { + name = 'right'; + } else if (name === 'right') { + name = 'left'; + } + } + if (height < 0) { + if (name === 'top') { + name = 'bottom'; + } else if (name === 'bottom') { + name = 'top'; + } + } + if (name === 'left') { + const edge = width >= 0 ? rect.left : rect.right; + return page.x < edge + margin; + } + if (name === 'top') { + const edge = height >= 0 ? rect.top : rect.bottom; + return page.y < edge + margin; + } + if (name === 'right') { + return page.x > (width >= 0 ? rect.right : rect.left) - margin; + } + if (name === 'bottom') { + return page.y > (height >= 0 ? rect.bottom : rect.top) - margin; + } + } + + // the remaining checks require an element + if (!_is.default.element(element)) { + return false; + } + return _is.default.element(value) ? + // the value is an element to use as a resize handle + value === element : + // otherwise check if element matches value as selector + dom.matchesUpTo(element, value, interactableElement); +} + +/* eslint-disable multiline-ternary */ +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +function initCursors(browser) { + return browser.isIe9 ? { + x: 'e-resize', + y: 's-resize', + xy: 'se-resize', + top: 'n-resize', + left: 'w-resize', + bottom: 's-resize', + right: 'e-resize', + topleft: 'se-resize', + bottomright: 'se-resize', + topright: 'ne-resize', + bottomleft: 'ne-resize' + } : { + x: 'ew-resize', + y: 'ns-resize', + xy: 'nwse-resize', + top: 'ns-resize', + left: 'ew-resize', + bottom: 'ns-resize', + right: 'ew-resize', + topleft: 'nwse-resize', + bottomright: 'nwse-resize', + topright: 'nesw-resize', + bottomleft: 'nesw-resize' + }; +} +/* eslint-enable multiline-ternary */ + +function start({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { + return; + } + const resizeEvent = iEvent; + const rect = interaction.rect; + interaction._rects = { + start: (0, _extend.default)({}, rect), + corrected: (0, _extend.default)({}, rect), + previous: (0, _extend.default)({}, rect), + delta: { + left: 0, + right: 0, + width: 0, + top: 0, + bottom: 0, + height: 0 + } + }; + resizeEvent.edges = interaction.prepared.edges; + resizeEvent.rect = interaction._rects.corrected; + resizeEvent.deltaRect = interaction._rects.delta; +} +function move({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return; + const resizeEvent = iEvent; + const resizeOptions = interaction.interactable.options.resize; + const invert = resizeOptions.invert; + const invertible = invert === 'reposition' || invert === 'negate'; + const current = interaction.rect; + const { + start: startRect, + corrected, + delta: deltaRect, + previous + } = interaction._rects; + (0, _extend.default)(previous, corrected); + if (invertible) { + // if invertible, copy the current rect + (0, _extend.default)(corrected, current); + if (invert === 'reposition') { + // swap edge values if necessary to keep width/height positive + if (corrected.top > corrected.bottom) { + const swap = corrected.top; + corrected.top = corrected.bottom; + corrected.bottom = swap; + } + if (corrected.left > corrected.right) { + const swap = corrected.left; + corrected.left = corrected.right; + corrected.right = swap; + } + } + } else { + // if not invertible, restrict to minimum of 0x0 rect + corrected.top = Math.min(current.top, startRect.bottom); + corrected.bottom = Math.max(current.bottom, startRect.top); + corrected.left = Math.min(current.left, startRect.right); + corrected.right = Math.max(current.right, startRect.left); + } + corrected.width = corrected.right - corrected.left; + corrected.height = corrected.bottom - corrected.top; + for (const edge in corrected) { + deltaRect[edge] = corrected[edge] - previous[edge]; + } + resizeEvent.edges = interaction.prepared.edges; + resizeEvent.rect = corrected; + resizeEvent.deltaRect = deltaRect; +} +function end({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return; + const resizeEvent = iEvent; + resizeEvent.edges = interaction.prepared.edges; + resizeEvent.rect = interaction._rects.corrected; + resizeEvent.deltaRect = interaction._rects.delta; +} +function updateEventAxes({ + iEvent, + interaction +}) { + if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return; + const options = interaction.interactable.options; + const resizeEvent = iEvent; + if (options.resize.square) { + if (interaction.resizeAxes === 'y') { + resizeEvent.delta.x = resizeEvent.delta.y; + } else { + resizeEvent.delta.y = resizeEvent.delta.x; + } + resizeEvent.axes = 'xy'; + } else { + resizeEvent.axes = interaction.resizeAxes; + if (interaction.resizeAxes === 'x') { + resizeEvent.delta.y = 0; + } else if (interaction.resizeAxes === 'y') { + resizeEvent.delta.x = 0; + } + } +} +const resize = { + id: 'actions/resize', + before: ['actions/drag'], + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.resizeAxes = 'xy'; + }, + 'interactions:action-start': arg => { + start(arg); + updateEventAxes(arg); + }, + 'interactions:action-move': arg => { + move(arg); + updateEventAxes(arg); + }, + 'interactions:action-end': end, + 'auto-start:check': resizeChecker + }, + defaults: { + square: false, + preserveAspectRatio: false, + axis: 'xy', + // use default margin + margin: NaN, + // object with props left, right, top, bottom which are + // true/false values to resize when the pointer is over that edge, + // CSS selectors to match the handles for each direction + // or the Elements for each handle + edges: null, + // a value of 'none' will limit the resize rect to a minimum of 0x0 + // 'negate' will alow the rect to have negative width/height + // 'reposition' will keep the width/height positive by swapping + // the top and bottom edges and/or swapping the left and right edges + invert: 'none' + }, + cursors: null, + getCursor({ + edges, + axis, + name + }) { + const cursors = resize.cursors; + let result = null; + if (axis) { + result = cursors[name + axis]; + } else if (edges) { + let cursorKey = ''; + for (const edge of ['top', 'bottom', 'left', 'right']) { + if (edges[edge]) { + cursorKey += edge; + } + } + result = cursors[cursorKey]; + } + return result; + }, + filterEventType: type => type.search('resize') === 0, + defaultMargin: null +}; +var _default = exports.default = resize; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/plugin.js.map b/packages/@interactjs/actions/resize/plugin.js.map new file mode 100644 index 000000000..3d40143d6 --- /dev/null +++ b/packages/@interactjs/actions/resize/plugin.js.map @@ -0,0 +1,146 @@ +{ + "version": 3, + "names": [ + "dom", + "_interopRequireWildcard", + "require", + "_extend", + "_interopRequireDefault", + "_is", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "actions", + "browser", + "Interactable", + "defaults", + "resize", + "cursors", + "initCursors", + "defaultMargin", + "supportsTouch", + "supportsPointerEvent", + "resizable", + "options", + "map", + "methodDict", + "resizeChecker", + "arg", + "interaction", + "interactable", + "element", + "rect", + "buttons", + "undefined", + "page", + "extend", + "coords", + "cur", + "resizeOptions", + "enabled", + "pointerIsDown", + "test", + "pointerType", + "mouseButtons", + "is", + "object", + "edges", + "resizeEdges", + "left", + "right", + "top", + "bottom", + "edge", + "checkResizeEdge", + "_latestPointer", + "eventTarget", + "margin", + "action", + "name", + "axis", + "x", + "y", + "axes", + "setPerAction", + "setOnEvents", + "string", + "bool", + "preserveAspectRatio", + "square", + "value", + "interactableElement", + "width", + "number", + "height", + "Math", + "min", + "abs", + "matchesUpTo", + "isIe9", + "xy", + "topleft", + "bottomright", + "topright", + "bottomleft", + "start", + "iEvent", + "prepared", + "resizeEvent", + "_rects", + "corrected", + "previous", + "delta", + "deltaRect", + "move", + "invert", + "invertible", + "current", + "startRect", + "swap", + "max", + "end", + "updateEventAxes", + "resizeAxes", + "id", + "before", + "listeners", + "interactions:new", + "NaN", + "getCursor", + "result", + "cursorKey", + "filterEventType", + "type", + "search", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n ActionName,\n ActionProps,\n EdgeOptions,\n FullRect,\n ListenersArg,\n OrBoolean,\n Point,\n Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable(): ResizableOptions\n resizable(options: Partial> | boolean): this\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @returns A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n resizable(options?: Partial> | boolean): this | ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n resizeStartAspectRatio: number\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n resize: ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n resize?: typeof resize\n }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n square?: boolean\n preserveAspectRatio?: boolean\n edges?: EdgeOptions | null\n axis?: 'x' | 'y' | 'xy' // deprecated\n invert?: 'none' | 'negate' | 'reposition'\n margin?: number\n squareResize?: boolean\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface ResizeEvent

extends InteractEvent<'resize', P> {\n deltaRect?: FullRect\n edges?: ActionProps['edges']\n}\n\nfunction install(scope: Scope) {\n const {\n actions,\n browser,\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as Interactable['resizable']\n\n actions.map.resize = resize\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker(arg) {\n const { interaction, interactable, element, rect, buttons } = arg\n\n if (!rect) {\n return undefined\n }\n\n const page = extend({}, interaction.coords.cur.page)\n const resizeOptions = interactable.options.resize\n\n if (\n !(resizeOptions && resizeOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & resizeOptions.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n const resizeEdges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(\n edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || resize.defaultMargin,\n )\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n arg.action = {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n } else {\n const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n if (right || bottom) {\n arg.action = {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n\n return arg.action ? false : undefined\n}\n\nfunction resizable(interactable: Interactable, options: OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n } else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n } else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge(\n name: string,\n value: any,\n page: Point,\n element: Node,\n interactableElement: Element,\n rect: Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) {\n return false\n }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n if (width < 0) {\n if (name === 'left') {\n name = 'right'\n } else if (name === 'right') {\n name = 'left'\n }\n }\n if (height < 0) {\n if (name === 'top') {\n name = 'bottom'\n } else if (name === 'bottom') {\n name = 'top'\n }\n }\n\n if (name === 'left') {\n const edge = width >= 0 ? rect.left : rect.right\n return page.x < edge + margin\n }\n if (name === 'top') {\n const edge = height >= 0 ? rect.top : rect.bottom\n return page.y < edge + margin\n }\n\n if (name === 'right') {\n return page.x > (width >= 0 ? rect.right : rect.left) - margin\n }\n if (name === 'bottom') {\n return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) {\n return false\n }\n\n return is.element(value)\n ? // the value is an element to use as a resize handle\n value === element\n : // otherwise check if element matches value as selector\n dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors(browser: typeof import('@interactjs/utils/browser').default) {\n return browser.isIe9\n ? {\n x: 'e-resize',\n y: 's-resize',\n xy: 'se-resize',\n\n top: 'n-resize',\n left: 'w-resize',\n bottom: 's-resize',\n right: 'e-resize',\n topleft: 'se-resize',\n bottomright: 'se-resize',\n topright: 'ne-resize',\n bottomleft: 'ne-resize',\n }\n : {\n x: 'ew-resize',\n y: 'ns-resize',\n xy: 'nwse-resize',\n\n top: 'ns-resize',\n left: 'ew-resize',\n bottom: 'ns-resize',\n right: 'ew-resize',\n topleft: 'nwse-resize',\n bottomright: 'nwse-resize',\n topright: 'nesw-resize',\n bottomleft: 'nesw-resize',\n }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const resizeEvent = iEvent as ResizeEvent\n const rect = interaction.rect\n\n interaction._rects = {\n start: extend({}, rect),\n corrected: extend({}, rect),\n previous: extend({}, rect),\n delta: {\n left: 0,\n right: 0,\n width: 0,\n top: 0,\n bottom: 0,\n height: 0,\n },\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n const current = interaction.rect\n const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n extend(previous, corrected)\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(corrected, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n if (corrected.top > corrected.bottom) {\n const swap = corrected.top\n\n corrected.top = corrected.bottom\n corrected.bottom = swap\n }\n if (corrected.left > corrected.right) {\n const swap = corrected.left\n\n corrected.left = corrected.right\n corrected.right = swap\n }\n }\n } else {\n // if not invertible, restrict to minimum of 0x0 rect\n corrected.top = Math.min(current.top, startRect.bottom)\n corrected.bottom = Math.max(current.bottom, startRect.top)\n corrected.left = Math.min(current.left, startRect.right)\n corrected.right = Math.max(current.right, startRect.left)\n }\n\n corrected.width = corrected.right - corrected.left\n corrected.height = corrected.bottom - corrected.top\n\n for (const edge in corrected) {\n deltaRect[edge] = corrected[edge] - previous[edge]\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = corrected\n resizeEvent.deltaRect = deltaRect\n}\n\nfunction end({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n const options = interaction.interactable.options\n const resizeEvent = iEvent as ResizeEvent\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = resizeEvent.delta.y\n } else {\n resizeEvent.delta.y = resizeEvent.delta.x\n }\n resizeEvent.axes = 'xy'\n } else {\n resizeEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n resizeEvent.delta.y = 0\n } else if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = 0\n }\n }\n}\n\nconst resize: Plugin = {\n id: 'actions/resize',\n before: ['actions/drag'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': (arg) => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': (arg) => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n 'auto-start:check': resizeChecker,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as ResizableOptions,\n\n cursors: null as ReturnType,\n\n getCursor({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n } else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n filterEventType: (type: string) => type.search('resize') === 0,\n\n defaultMargin: null as number,\n}\n\nexport default resize\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/plugin.prod.js b/packages/@interactjs/actions/resize/plugin.prod.js new file mode 100644 index 000000000..8c83f294c --- /dev/null +++ b/packages/@interactjs/actions/resize/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=o(t);if(r&&r.has(e))return r.get(e);var i={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var a=s?Object.getOwnPropertyDescriptor(e,n):null;a&&(a.get||a.set)?Object.defineProperty(i,n,a):i[n]=e[n]}return i.default=e,r&&r.set(e,i),i})(require("../../utils/domUtils.prod.js")),t=i(require("../../utils/extend.prod.js")),r=i(require("../../utils/is.prod.js"));function i(e){return e&&e.__esModule?e:{default:e}}function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(o=e=>e?r:t)(e)}function s(t,i,o,s,n,a,l){if(!i)return!1;if(!0===i){const e=r.default.number(a.width)?a.width:a.right-a.left,i=r.default.number(a.height)?a.height:a.bottom-a.top;if(l=Math.min(l,Math.abs(("left"===t||"right"===t?e:i)/2)),e<0&&("left"===t?t="right":"right"===t&&(t="left")),i<0&&("top"===t?t="bottom":"bottom"===t&&(t="top")),"left"===t){const t=e>=0?a.left:a.right;return o.x=0?a.top:a.bottom;return o.y(e>=0?a.right:a.left)-l;if("bottom"===t)return o.y>(i>=0?a.bottom:a.top)-l}return!!r.default.element(s)&&(r.default.element(i)?i===s:e.matchesUpTo(s,i,n))}function n({iEvent:e,interaction:t}){if("resize"!==t.prepared.name||!t.resizeAxes)return;const r=e;t.interactable.options.resize.square?("y"===t.resizeAxes?r.delta.x=r.delta.y:r.delta.y=r.delta.x,r.axes="xy"):(r.axes=t.resizeAxes,"x"===t.resizeAxes?r.delta.y=0:"y"===t.resizeAxes&&(r.delta.x=0))}const a={id:"actions/resize",before:["actions/drag"],install(e){const{actions:t,browser:i,Interactable:o,defaults:s}=e;a.cursors=(e=>e.isIe9?{x:"e-resize",y:"s-resize",xy:"se-resize",top:"n-resize",left:"w-resize",bottom:"s-resize",right:"e-resize",topleft:"se-resize",bottomright:"se-resize",topright:"ne-resize",bottomleft:"ne-resize"}:{x:"ew-resize",y:"ns-resize",xy:"nwse-resize",top:"ns-resize",left:"ew-resize",bottom:"ns-resize",right:"ew-resize",topleft:"nwse-resize",bottomright:"nwse-resize",topright:"nesw-resize",bottomleft:"nesw-resize"})(i),a.defaultMargin=i.supportsTouch||i.supportsPointerEvent?20:10,o.prototype.resizable=function(t){return((e,t,i)=>r.default.object(t)?(e.options.resize.enabled=!1!==t.enabled,e.setPerAction("resize",t),e.setOnEvents("resize",t),r.default.string(t.axis)&&/^x$|^y$|^xy$/.test(t.axis)?e.options.resize.axis=t.axis:null===t.axis&&(e.options.resize.axis=i.defaults.actions.resize.axis),r.default.bool(t.preserveAspectRatio)?e.options.resize.preserveAspectRatio=t.preserveAspectRatio:r.default.bool(t.square)&&(e.options.resize.square=t.square),e):r.default.bool(t)?(e.options.resize.enabled=t,e):e.options.resize)(this,t,e)},t.map.resize=a,t.methodDict.resize="resizable",s.actions.resize=a.defaults},listeners:{"interactions:new"({interaction:e}){e.resizeAxes="xy"},"interactions:action-start"(e){(({iEvent:e,interaction:r})=>{if("resize"!==r.prepared.name||!r.prepared.edges)return;const i=e,o=r.rect;r._rects={start:(0,t.default)({},o),corrected:(0,t.default)({},o),previous:(0,t.default)({},o),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},i.edges=r.prepared.edges,i.rect=r._rects.corrected,i.deltaRect=r._rects.delta})(e),n(e)},"interactions:action-move"(e){(({iEvent:e,interaction:r})=>{if("resize"!==r.prepared.name||!r.prepared.edges)return;const i=e,o=r.interactable.options.resize.invert,s="reposition"===o||"negate"===o,n=r.rect,{start:a,corrected:l,delta:p,previous:c}=r._rects;if((0,t.default)(c,l),s){if((0,t.default)(l,n),"reposition"===o){if(l.top>l.bottom){const e=l.top;l.top=l.bottom,l.bottom=e}if(l.left>l.right){const e=l.left;l.left=l.right,l.right=e}}}else l.top=Math.min(n.top,a.bottom),l.bottom=Math.max(n.bottom,a.top),l.left=Math.min(n.left,a.right),l.right=Math.max(n.right,a.left);l.width=l.right-l.left,l.height=l.bottom-l.top;for(const e in l)p[e]=l[e]-c[e];i.edges=r.prepared.edges,i.rect=l,i.deltaRect=p})(e),n(e)},"interactions:action-end"({iEvent:e,interaction:t}){if("resize"!==t.prepared.name||!t.prepared.edges)return;const r=e;r.edges=t.prepared.edges,r.rect=t._rects.corrected,r.deltaRect=t._rects.delta},"auto-start:check"(e){const{interaction:i,interactable:o,element:n,rect:l,buttons:p}=e;if(!l)return;const c=(0,t.default)({},i.coords.cur.page),f=o.options.resize;if(f&&f.enabled&&(!i.pointerIsDown||!/mouse|pointer/.test(i.pointerType)||0!=(p&f.mouseButtons))){if(r.default.object(f.edges)){const t={left:!1,right:!1,top:!1,bottom:!1};for(const e in t)t[e]=s(e,f.edges[e],c,i._latestPointer.eventTarget,n,l,f.margin||a.defaultMargin);t.left=t.left&&!t.right,t.top=t.top&&!t.bottom,(t.left||t.right||t.top||t.bottom)&&(e.action={name:"resize",edges:t})}else{const t="y"!==f.axis&&c.x>l.right-a.defaultMargin,r="x"!==f.axis&&c.y>l.bottom-a.defaultMargin;(t||r)&&(e.action={name:"resize",axes:(t?"x":"")+(r?"y":"")})}return!e.action&&void 0}}},defaults:{square:!1,preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},cursors:null,getCursor({edges:e,axis:t,name:r}){const i=a.cursors;let o=null;if(t)o=i[r+t];else if(e){let t="";for(const r of["top","bottom","left","right"])e[r]&&(t+=r);o=i[t]}return o},filterEventType:e=>0===e.search("resize"),defaultMargin:null};exports.default=a; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/actions/resize/plugin.prod.js.map b/packages/@interactjs/actions/resize/plugin.prod.js.map new file mode 100644 index 000000000..df23ce7f7 --- /dev/null +++ b/packages/@interactjs/actions/resize/plugin.prod.js.map @@ -0,0 +1,145 @@ +{ + "version": 3, + "names": [ + "dom", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_extendProd", + "_interopRequireDefault", + "_isProd", + "obj", + "WeakMap", + "checkResizeEdge", + "name", + "value", + "page", + "element", + "interactableElement", + "rect", + "margin", + "width", + "is", + "number", + "right", + "left", + "height", + "bottom", + "top", + "Math", + "min", + "abs", + "edge", + "x", + "y", + "matchesUpTo", + "updateEventAxes", + "iEvent", + "interaction", + "prepared", + "resizeAxes", + "resizeEvent", + "interactable", + "options", + "resize", + "square", + "delta", + "axes", + "id", + "before", + "install", + "scope", + "actions", + "browser", + "Interactable", + "defaults", + "cursors", + "isIe9", + "xy", + "topleft", + "bottomright", + "topright", + "bottomleft", + "initCursors", + "defaultMargin", + "supportsTouch", + "supportsPointerEvent", + "resizable", + "object", + "enabled", + "setPerAction", + "setOnEvents", + "string", + "axis", + "test", + "bool", + "preserveAspectRatio", + "this", + "map", + "methodDict", + "listeners", + "arg", + "edges", + "_rects", + "start", + "extend", + "corrected", + "previous", + "deltaRect", + "invert", + "invertible", + "current", + "startRect", + "swap", + "max", + "move", + "end", + "resizeChecker", + "buttons", + "coords", + "cur", + "resizeOptions", + "pointerIsDown", + "pointerType", + "mouseButtons", + "resizeEdges", + "_latestPointer", + "eventTarget", + "action", + "undefined", + "NaN", + "getCursor", + "result", + "cursorKey", + "filterEventType", + "type", + "search", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n ActionName,\n ActionProps,\n EdgeOptions,\n FullRect,\n ListenersArg,\n OrBoolean,\n Point,\n Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable(): ResizableOptions\n resizable(options: Partial> | boolean): this\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @returns A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n resizable(options?: Partial> | boolean): this | ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n resizeStartAspectRatio: number\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n resize: ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n resize?: typeof resize\n }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n square?: boolean\n preserveAspectRatio?: boolean\n edges?: EdgeOptions | null\n axis?: 'x' | 'y' | 'xy' // deprecated\n invert?: 'none' | 'negate' | 'reposition'\n margin?: number\n squareResize?: boolean\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface ResizeEvent

extends InteractEvent<'resize', P> {\n deltaRect?: FullRect\n edges?: ActionProps['edges']\n}\n\nfunction install(scope: Scope) {\n const {\n actions,\n browser,\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as Interactable['resizable']\n\n actions.map.resize = resize\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker(arg) {\n const { interaction, interactable, element, rect, buttons } = arg\n\n if (!rect) {\n return undefined\n }\n\n const page = extend({}, interaction.coords.cur.page)\n const resizeOptions = interactable.options.resize\n\n if (\n !(resizeOptions && resizeOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & resizeOptions.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n const resizeEdges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(\n edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || resize.defaultMargin,\n )\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n arg.action = {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n } else {\n const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n if (right || bottom) {\n arg.action = {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n\n return arg.action ? false : undefined\n}\n\nfunction resizable(interactable: Interactable, options: OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n } else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n } else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge(\n name: string,\n value: any,\n page: Point,\n element: Node,\n interactableElement: Element,\n rect: Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) {\n return false\n }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n if (width < 0) {\n if (name === 'left') {\n name = 'right'\n } else if (name === 'right') {\n name = 'left'\n }\n }\n if (height < 0) {\n if (name === 'top') {\n name = 'bottom'\n } else if (name === 'bottom') {\n name = 'top'\n }\n }\n\n if (name === 'left') {\n const edge = width >= 0 ? rect.left : rect.right\n return page.x < edge + margin\n }\n if (name === 'top') {\n const edge = height >= 0 ? rect.top : rect.bottom\n return page.y < edge + margin\n }\n\n if (name === 'right') {\n return page.x > (width >= 0 ? rect.right : rect.left) - margin\n }\n if (name === 'bottom') {\n return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) {\n return false\n }\n\n return is.element(value)\n ? // the value is an element to use as a resize handle\n value === element\n : // otherwise check if element matches value as selector\n dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors(browser: typeof import('@interactjs/utils/browser').default) {\n return browser.isIe9\n ? {\n x: 'e-resize',\n y: 's-resize',\n xy: 'se-resize',\n\n top: 'n-resize',\n left: 'w-resize',\n bottom: 's-resize',\n right: 'e-resize',\n topleft: 'se-resize',\n bottomright: 'se-resize',\n topright: 'ne-resize',\n bottomleft: 'ne-resize',\n }\n : {\n x: 'ew-resize',\n y: 'ns-resize',\n xy: 'nwse-resize',\n\n top: 'ns-resize',\n left: 'ew-resize',\n bottom: 'ns-resize',\n right: 'ew-resize',\n topleft: 'nwse-resize',\n bottomright: 'nwse-resize',\n topright: 'nesw-resize',\n bottomleft: 'nesw-resize',\n }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const resizeEvent = iEvent as ResizeEvent\n const rect = interaction.rect\n\n interaction._rects = {\n start: extend({}, rect),\n corrected: extend({}, rect),\n previous: extend({}, rect),\n delta: {\n left: 0,\n right: 0,\n width: 0,\n top: 0,\n bottom: 0,\n height: 0,\n },\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n const current = interaction.rect\n const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n extend(previous, corrected)\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(corrected, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n if (corrected.top > corrected.bottom) {\n const swap = corrected.top\n\n corrected.top = corrected.bottom\n corrected.bottom = swap\n }\n if (corrected.left > corrected.right) {\n const swap = corrected.left\n\n corrected.left = corrected.right\n corrected.right = swap\n }\n }\n } else {\n // if not invertible, restrict to minimum of 0x0 rect\n corrected.top = Math.min(current.top, startRect.bottom)\n corrected.bottom = Math.max(current.bottom, startRect.top)\n corrected.left = Math.min(current.left, startRect.right)\n corrected.right = Math.max(current.right, startRect.left)\n }\n\n corrected.width = corrected.right - corrected.left\n corrected.height = corrected.bottom - corrected.top\n\n for (const edge in corrected) {\n deltaRect[edge] = corrected[edge] - previous[edge]\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = corrected\n resizeEvent.deltaRect = deltaRect\n}\n\nfunction end({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n const options = interaction.interactable.options\n const resizeEvent = iEvent as ResizeEvent\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = resizeEvent.delta.y\n } else {\n resizeEvent.delta.y = resizeEvent.delta.x\n }\n resizeEvent.axes = 'xy'\n } else {\n resizeEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n resizeEvent.delta.y = 0\n } else if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = 0\n }\n }\n}\n\nconst resize: Plugin = {\n id: 'actions/resize',\n before: ['actions/drag'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': (arg) => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': (arg) => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n 'auto-start:check': resizeChecker,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as ResizableOptions,\n\n cursors: null as ReturnType,\n\n getCursor({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n } else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n filterEventType: (type: string) => type.search('resize') === 0,\n\n defaultMargin: null as number,\n}\n\nexport default resize\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/.npmignore b/packages/@interactjs/auto-scroll/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/auto-scroll/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/auto-scroll/LICENSE b/packages/@interactjs/auto-scroll/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/auto-scroll/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/auto-scroll/index.d.ts b/packages/@interactjs/auto-scroll/index.d.ts new file mode 100644 index 000000000..96776c871 --- /dev/null +++ b/packages/@interactjs/auto-scroll/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/auto-scroll/plugin'; diff --git a/packages/@interactjs/auto-scroll/index.js b/packages/@interactjs/auto-scroll/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/auto-scroll/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/index.js.map b/packages/@interactjs/auto-scroll/index.js.map new file mode 100644 index 000000000..def3822d0 --- /dev/null +++ b/packages/@interactjs/auto-scroll/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/auto-scroll/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/auto-scroll/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/index.prod.js b/packages/@interactjs/auto-scroll/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/auto-scroll/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/index.prod.js.map b/packages/@interactjs/auto-scroll/index.prod.js.map new file mode 100644 index 000000000..f0c11b121 --- /dev/null +++ b/packages/@interactjs/auto-scroll/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/auto-scroll/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/auto-scroll/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/index.ts b/packages/@interactjs/auto-scroll/index.ts new file mode 100644 index 000000000..b6a331b73 --- /dev/null +++ b/packages/@interactjs/auto-scroll/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/auto-scroll/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/auto-scroll/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/plugin.d.ts b/packages/@interactjs/auto-scroll/plugin.d.ts new file mode 100644 index 000000000..b1789e3e4 --- /dev/null +++ b/packages/@interactjs/auto-scroll/plugin.d.ts @@ -0,0 +1,65 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type Interaction from '@interactjs/core/Interaction'; +import type { Plugin } from '@interactjs/core/scope'; +import type { ActionName, PointerType } from '@interactjs/core/types'; +declare module '@interactjs/core/scope' { + interface Scope { + autoScroll: typeof autoScroll; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + autoScroll?: typeof autoScroll; + } +} +declare module '@interactjs/core/options' { + interface PerActionDefaults { + autoScroll?: AutoScrollOptions; + } +} +export interface AutoScrollOptions { + container?: Window | HTMLElement | string; + margin?: number; + distance?: number; + interval?: number; + speed?: number; + enabled?: boolean; +} +declare const autoScroll: { + defaults: AutoScrollOptions; + now: () => number; + interaction: Interaction; + i: number; + x: number; + y: number; + isScrolling: boolean; + prevTime: number; + margin: number; + speed: number; + start(interaction: Interaction): void; + stop(): void; + scroll(): void; + check(interactable: Interactable, actionName: ActionName): boolean; + onInteractionMove({ interaction, pointer, }: { + interaction: Interaction; + pointer: PointerType; + }): void; +}; +export declare function getContainer(value: any, interactable: Interactable, element: Element): any; +export declare function getScroll(container: any): { + x: any; + y: any; +}; +export declare function getScrollSize(container: any): { + x: any; + y: any; +}; +export declare function getScrollSizeDelta({ interaction, element, }: { + interaction: Partial>; + element: Element; +}, func: any): { + x: number; + y: number; +}; +declare const autoScrollPlugin: Plugin; +export default autoScrollPlugin; diff --git a/packages/@interactjs/auto-scroll/plugin.js b/packages/@interactjs/auto-scroll/plugin.js new file mode 100644 index 000000000..b806007b9 --- /dev/null +++ b/packages/@interactjs/auto-scroll/plugin.js @@ -0,0 +1,232 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.getContainer = getContainer; +exports.getScroll = getScroll; +exports.getScrollSize = getScrollSize; +exports.getScrollSizeDelta = getScrollSizeDelta; +var domUtils = _interopRequireWildcard(require("../utils/domUtils.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _raf = _interopRequireDefault(require("../utils/raf.js")); +var _rect = require("../utils/rect.js"); +var _window = require("../utils/window.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function install(scope) { + const { + defaults, + actions + } = scope; + scope.autoScroll = autoScroll; + autoScroll.now = () => scope.now(); + actions.phaselessTypes.autoscroll = true; + defaults.perAction.autoScroll = autoScroll.defaults; +} +const autoScroll = { + defaults: { + enabled: false, + margin: 60, + // the item that is scrolled (Window or HTMLElement) + container: null, + // the scroll speed in pixels per second + speed: 300 + }, + now: Date.now, + interaction: null, + i: 0, + // the handle returned by window.setInterval + + // Direction each pulse is to scroll in + x: 0, + y: 0, + isScrolling: false, + prevTime: 0, + margin: 0, + speed: 0, + start(interaction) { + autoScroll.isScrolling = true; + _raf.default.cancel(autoScroll.i); + interaction.autoScroll = autoScroll; + autoScroll.interaction = interaction; + autoScroll.prevTime = autoScroll.now(); + autoScroll.i = _raf.default.request(autoScroll.scroll); + }, + stop() { + autoScroll.isScrolling = false; + if (autoScroll.interaction) { + autoScroll.interaction.autoScroll = null; + } + _raf.default.cancel(autoScroll.i); + }, + // scroll the window by the values in scroll.x/y + scroll() { + const { + interaction + } = autoScroll; + const { + interactable, + element + } = interaction; + const actionName = interaction.prepared.name; + const options = interactable.options[actionName].autoScroll; + const container = getContainer(options.container, interactable, element); + const now = autoScroll.now(); + // change in time in seconds + const dt = (now - autoScroll.prevTime) / 1000; + // displacement + const s = options.speed * dt; + if (s >= 1) { + const scrollBy = { + x: autoScroll.x * s, + y: autoScroll.y * s + }; + if (scrollBy.x || scrollBy.y) { + const prevScroll = getScroll(container); + if (_is.default.window(container)) { + container.scrollBy(scrollBy.x, scrollBy.y); + } else if (container) { + container.scrollLeft += scrollBy.x; + container.scrollTop += scrollBy.y; + } + const curScroll = getScroll(container); + const delta = { + x: curScroll.x - prevScroll.x, + y: curScroll.y - prevScroll.y + }; + if (delta.x || delta.y) { + interactable.fire({ + type: 'autoscroll', + target: element, + interactable, + delta, + interaction, + container + }); + } + } + autoScroll.prevTime = now; + } + if (autoScroll.isScrolling) { + _raf.default.cancel(autoScroll.i); + autoScroll.i = _raf.default.request(autoScroll.scroll); + } + }, + check(interactable, actionName) { + var _options$actionName$a; + const options = interactable.options; + return (_options$actionName$a = options[actionName].autoScroll) == null ? void 0 : _options$actionName$a.enabled; + }, + onInteractionMove({ + interaction, + pointer + }) { + if (!(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))) { + return; + } + if (interaction.simulation) { + autoScroll.x = autoScroll.y = 0; + return; + } + let top; + let right; + let bottom; + let left; + const { + interactable, + element + } = interaction; + const actionName = interaction.prepared.name; + const options = interactable.options[actionName].autoScroll; + const container = getContainer(options.container, interactable, element); + if (_is.default.window(container)) { + left = pointer.clientX < autoScroll.margin; + top = pointer.clientY < autoScroll.margin; + right = pointer.clientX > container.innerWidth - autoScroll.margin; + bottom = pointer.clientY > container.innerHeight - autoScroll.margin; + } else { + const rect = domUtils.getElementClientRect(container); + left = pointer.clientX < rect.left + autoScroll.margin; + top = pointer.clientY < rect.top + autoScroll.margin; + right = pointer.clientX > rect.right - autoScroll.margin; + bottom = pointer.clientY > rect.bottom - autoScroll.margin; + } + autoScroll.x = right ? 1 : left ? -1 : 0; + autoScroll.y = bottom ? 1 : top ? -1 : 0; + if (!autoScroll.isScrolling) { + // set the autoScroll properties to those of the target + autoScroll.margin = options.margin; + autoScroll.speed = options.speed; + autoScroll.start(interaction); + } + } +}; +function getContainer(value, interactable, element) { + return (_is.default.string(value) ? (0, _rect.getStringOptionResult)(value, interactable, element) : value) || (0, _window.getWindow)(element); +} +function getScroll(container) { + if (_is.default.window(container)) { + container = window.document.body; + } + return { + x: container.scrollLeft, + y: container.scrollTop + }; +} +function getScrollSize(container) { + if (_is.default.window(container)) { + container = window.document.body; + } + return { + x: container.scrollWidth, + y: container.scrollHeight + }; +} +function getScrollSizeDelta({ + interaction, + element +}, func) { + const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll; + if (!scrollOptions || !scrollOptions.enabled) { + func(); + return { + x: 0, + y: 0 + }; + } + const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element); + const prevSize = getScroll(scrollContainer); + func(); + const curSize = getScroll(scrollContainer); + return { + x: curSize.x - prevSize.x, + y: curSize.y - prevSize.y + }; +} +const autoScrollPlugin = { + id: 'auto-scroll', + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.autoScroll = null; + }, + 'interactions:destroy': ({ + interaction + }) => { + interaction.autoScroll = null; + autoScroll.stop(); + if (autoScroll.interaction) { + autoScroll.interaction = null; + } + }, + 'interactions:stop': autoScroll.stop, + 'interactions:action-move': arg => autoScroll.onInteractionMove(arg) + } +}; +var _default = exports.default = autoScrollPlugin; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/plugin.js.map b/packages/@interactjs/auto-scroll/plugin.js.map new file mode 100644 index 000000000..be7056097 --- /dev/null +++ b/packages/@interactjs/auto-scroll/plugin.js.map @@ -0,0 +1,127 @@ +{ + "version": 3, + "names": [ + "domUtils", + "_interopRequireWildcard", + "require", + "_is", + "_interopRequireDefault", + "_raf", + "_rect", + "_window", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "defaults", + "actions", + "autoScroll", + "now", + "phaselessTypes", + "autoscroll", + "perAction", + "enabled", + "margin", + "container", + "speed", + "Date", + "interaction", + "x", + "y", + "isScrolling", + "prevTime", + "start", + "raf", + "cancel", + "request", + "scroll", + "stop", + "interactable", + "element", + "actionName", + "prepared", + "name", + "options", + "getContainer", + "dt", + "s", + "scrollBy", + "prevScroll", + "getScroll", + "is", + "window", + "scrollLeft", + "scrollTop", + "curScroll", + "delta", + "fire", + "type", + "target", + "check", + "_options$actionName$a", + "onInteractionMove", + "pointer", + "interacting", + "simulation", + "top", + "right", + "bottom", + "left", + "clientX", + "clientY", + "innerWidth", + "innerHeight", + "rect", + "getElementClientRect", + "value", + "string", + "getStringOptionResult", + "getWindow", + "document", + "body", + "getScrollSize", + "scrollWidth", + "scrollHeight", + "getScrollSizeDelta", + "func", + "scrollOptions", + "scrollContainer", + "prevSize", + "curSize", + "autoScrollPlugin", + "id", + "listeners", + "interactions:new", + "interactions:destroy", + "arg", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement | string\n margin?: number\n distance?: number\n interval?: number\n speed?: number\n enabled?: boolean\n}\n\nfunction install(scope: Scope) {\n const { defaults, actions } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.phaselessTypes.autoscroll = true\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled: false,\n margin: 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed: 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null as Interaction | null,\n i: 0, // the handle returned by window.setInterval\n\n // Direction each pulse is to scroll in\n x: 0,\n y: 0,\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start(interaction: Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop() {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll() {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n } else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check(interactable: Interactable, actionName: ActionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll?.enabled\n },\n onInteractionMove({\n interaction,\n pointer,\n }: {\n interaction: Interaction\n pointer: PointerType\n }) {\n if (\n !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n ) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top: boolean\n let right: boolean\n let bottom: boolean\n let left: boolean\n\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n } else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = right ? 1 : left ? -1 : 0\n autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer(value: any, interactable: Interactable, element: Element) {\n return (\n (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n )\n}\n\nexport function getScroll(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta(\n {\n interaction,\n element,\n }: {\n interaction: Partial>\n element: Element\n },\n func: any,\n) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nconst autoScrollPlugin: Plugin = {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n\nexport default autoScrollPlugin\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/plugin.prod.js b/packages/@interactjs/auto-scroll/plugin.prod.js new file mode 100644 index 000000000..3890ccc2a --- /dev/null +++ b/packages/@interactjs/auto-scroll/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.getContainer=c,exports.getScroll=s,exports.getScrollSize=e=>(t.default.window(e)&&(e=window.document.body),{x:e.scrollWidth,y:e.scrollHeight}),exports.getScrollSizeDelta=({interaction:e,element:t},n)=>{const r=e&&e.interactable.options[e.prepared.name].autoScroll;if(!r||!r.enabled)return n(),{x:0,y:0};const o=c(r.container,e.interactable,t),i=s(o);n();const l=s(o);return{x:l.x-i.x,y:l.y-i.y}};var e=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=o?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(r,i,a):r[i]=e[i]}return r.default=e,n&&n.set(e,r),r})(require("../utils/domUtils.prod.js")),t=i(require("../utils/is.prod.js")),n=i(require("../utils/raf.prod.js")),r=require("../utils/rect.prod.js"),o=require("../utils/window.prod.js");function i(e){return e&&e.__esModule?e:{default:e}}function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=e=>e?n:t)(e)}const a={defaults:{enabled:!1,margin:60,container:null,speed:300},now:Date.now,interaction:null,i:0,x:0,y:0,isScrolling:!1,prevTime:0,margin:0,speed:0,start(e){a.isScrolling=!0,n.default.cancel(a.i),e.autoScroll=a,a.interaction=e,a.prevTime=a.now(),a.i=n.default.request(a.scroll)},stop(){a.isScrolling=!1,a.interaction&&(a.interaction.autoScroll=null),n.default.cancel(a.i)},scroll(){const{interaction:e}=a,{interactable:r,element:o}=e,i=e.prepared.name,l=r.options[i].autoScroll,u=c(l.container,r,o),d=a.now(),p=(d-a.prevTime)/1e3,f=l.speed*p;if(f>=1){const n={x:a.x*f,y:a.y*f};if(n.x||n.y){const i=s(u);t.default.window(u)?u.scrollBy(n.x,n.y):u&&(u.scrollLeft+=n.x,u.scrollTop+=n.y);const l=s(u),a={x:l.x-i.x,y:l.y-i.y};(a.x||a.y)&&r.fire({type:"autoscroll",target:o,interactable:r,delta:a,interaction:e,container:u})}a.prevTime=d}a.isScrolling&&(n.default.cancel(a.i),a.i=n.default.request(a.scroll))},check(e,t){var n;return null==(n=e.options[t].autoScroll)?void 0:n.enabled},onInteractionMove({interaction:n,pointer:r}){if(!n.interacting()||!a.check(n.interactable,n.prepared.name))return;if(n.simulation)return void(a.x=a.y=0);let o,i,l,s;const{interactable:u,element:d}=n,p=n.prepared.name,f=u.options[p].autoScroll,g=c(f.container,u,d);if(t.default.window(g))s=r.clientXg.innerWidth-a.margin,l=r.clientY>g.innerHeight-a.margin;else{const t=e.getElementClientRect(g);s=r.clientXt.right-a.margin,l=r.clientY>t.bottom-a.margin}a.x=i?1:s?-1:0,a.y=l?1:o?-1:0,a.isScrolling||(a.margin=f.margin,a.speed=f.speed,a.start(n))}};function c(e,n,i){return(t.default.string(e)?(0,r.getStringOptionResult)(e,n,i):e)||(0,o.getWindow)(i)}function s(e){return t.default.window(e)&&(e=window.document.body),{x:e.scrollLeft,y:e.scrollTop}}const u={id:"auto-scroll",install(e){const{defaults:t,actions:n}=e;e.autoScroll=a,a.now=()=>e.now(),n.phaselessTypes.autoscroll=!0,t.perAction.autoScroll=a.defaults},listeners:{"interactions:new"({interaction:e}){e.autoScroll=null},"interactions:destroy"({interaction:e}){e.autoScroll=null,a.stop(),a.interaction&&(a.interaction=null)},"interactions:stop":a.stop,"interactions:action-move":e=>a.onInteractionMove(e)}};exports.default=u; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-scroll/plugin.prod.js.map b/packages/@interactjs/auto-scroll/plugin.prod.js.map new file mode 100644 index 000000000..b1d5a55c4 --- /dev/null +++ b/packages/@interactjs/auto-scroll/plugin.prod.js.map @@ -0,0 +1,122 @@ +{ + "version": 3, + "names": [ + "container", + "is", + "window", + "document", + "body", + "x", + "scrollWidth", + "y", + "scrollHeight", + "interaction", + "element", + "func", + "scrollOptions", + "interactable", + "options", + "prepared", + "name", + "autoScroll", + "enabled", + "scrollContainer", + "getContainer", + "prevSize", + "getScroll", + "curSize", + "domUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_isProd", + "_interopRequireDefault", + "_rafProd", + "_rectProd", + "_windowProd", + "obj", + "WeakMap", + "defaults", + "margin", + "speed", + "now", + "Date", + "isScrolling", + "prevTime", + "start", + "raf", + "cancel", + "request", + "scroll", + "stop", + "actionName", + "dt", + "s", + "scrollBy", + "prevScroll", + "scrollLeft", + "scrollTop", + "curScroll", + "delta", + "fire", + "type", + "target", + "check", + "_options$actionName$a", + "onInteractionMove", + "pointer", + "interacting", + "simulation", + "top", + "right", + "bottom", + "left", + "clientX", + "clientY", + "innerWidth", + "innerHeight", + "rect", + "getElementClientRect", + "value", + "string", + "getStringOptionResult", + "getWindow", + "autoScrollPlugin", + "id", + "install", + "scope", + "actions", + "phaselessTypes", + "autoscroll", + "perAction", + "listeners", + "arg", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement | string\n margin?: number\n distance?: number\n interval?: number\n speed?: number\n enabled?: boolean\n}\n\nfunction install(scope: Scope) {\n const { defaults, actions } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.phaselessTypes.autoscroll = true\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled: false,\n margin: 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed: 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null as Interaction | null,\n i: 0, // the handle returned by window.setInterval\n\n // Direction each pulse is to scroll in\n x: 0,\n y: 0,\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start(interaction: Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop() {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll() {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n } else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check(interactable: Interactable, actionName: ActionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll?.enabled\n },\n onInteractionMove({\n interaction,\n pointer,\n }: {\n interaction: Interaction\n pointer: PointerType\n }) {\n if (\n !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n ) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top: boolean\n let right: boolean\n let bottom: boolean\n let left: boolean\n\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n } else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = right ? 1 : left ? -1 : 0\n autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer(value: any, interactable: Interactable, element: Element) {\n return (\n (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n )\n}\n\nexport function getScroll(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta(\n {\n interaction,\n element,\n }: {\n interaction: Partial>\n element: Element\n },\n func: any,\n) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nconst autoScrollPlugin: Plugin = {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n\nexport default autoScrollPlugin\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/.npmignore b/packages/@interactjs/auto-start/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/auto-start/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/auto-start/InteractableMethods.d.ts b/packages/@interactjs/auto-start/InteractableMethods.d.ts new file mode 100644 index 000000000..1b72c115d --- /dev/null +++ b/packages/@interactjs/auto-start/InteractableMethods.d.ts @@ -0,0 +1,112 @@ +import type { Interaction } from '@interactjs/core/Interaction'; +import type { Scope } from '@interactjs/core/scope'; +import type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'; +declare module '@interactjs/core/Interactable' { + interface Interactable { + getAction: (this: Interactable, pointer: PointerType, event: PointerEventType, interaction: Interaction, element: Element) => ActionProps | null; + styleCursor(newValue: boolean): this; + styleCursor(): boolean; + /** + * Returns or sets whether the the cursor should be changed depending on the + * action that would be performed if the mouse were pressed and dragged. + * + * @param {boolean} [newValue] + * @return {boolean | Interactable} The current setting or this Interactable + */ + styleCursor(newValue?: boolean): boolean | this; + actionChecker(checker: Function): Interactable; + actionChecker(): Function; + /** + * ```js + * interact('.resize-drag') + * .resizable(true) + * .draggable(true) + * .actionChecker(function (pointer, event, action, interactable, element, interaction) { + * + * if (interact.matchesSelector(event.target, '.drag-handle')) { + * // force drag with handle target + * action.name = drag + * } + * else { + * // resize from the top and right edges + * action.name = 'resize' + * action.edges = { top: true, right: true } + * } + * + * return action + * }) + * ``` + * + * Returns or sets the function used to check action to be performed on + * pointerDown + * + * @param checker - A function which takes a pointer event, + * defaultAction string, interactable, element and interaction as parameters + * and returns an object with name property 'drag' 'resize' or 'gesture' and + * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right + * props. + * @returns The checker function or this Interactable + */ + actionChecker(checker?: Function): Interactable | Function; + /** @returns This interactable */ + ignoreFrom(newValue: string | Element | null): Interactable; + /** @returns The current ignoreFrom value */ + ignoreFrom(): string | Element | null; + /** + * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any + * of it's parents match the given CSS selector or Element, no + * drag/resize/gesture is started. + * + * @deprecated + * Don't use this method. Instead set the `ignoreFrom` option for each action + * or for `pointerEvents` + * + * ```js + * interact(targett) + * .draggable({ + * ignoreFrom: 'input, textarea, a[href]'', + * }) + * .pointerEvents({ + * ignoreFrom: '[no-pointer]', + * }) + * ``` + * Interactable + */ + ignoreFrom( + /** a CSS selector string, an Element or `null` to not ignore any elements */ + newValue?: string | Element | null): Interactable | string | Element | null; + allowFrom(): boolean; + /** + * + * A drag/resize/gesture is started only If the target of the `mousedown`, + * `pointerdown` or `touchstart` event or any of it's parents match the given + * CSS selector or Element. + * + * @deprecated + * Don't use this method. Instead set the `allowFrom` option for each action + * or for `pointerEvents` + * + * ```js + * interact(targett) + * .resizable({ + * allowFrom: '.resize-handle', + * .pointerEvents({ + * allowFrom: '.handle',, + * }) + * ``` + * + * @param {string | Element | null} [newValue] + * @return {string | Element | object} The current allowFrom value or this + * Interactable + */ + allowFrom( + /** A CSS selector string, an Element or `null` to allow from any element */ + newValue: string | Element | null): Interactable; + } +} +declare function install(scope: Scope): void; +declare const _default: { + id: string; + install: typeof install; +}; +export default _default; diff --git a/packages/@interactjs/auto-start/InteractableMethods.js b/packages/@interactjs/auto-start/InteractableMethods.js new file mode 100644 index 000000000..7c8070613 --- /dev/null +++ b/packages/@interactjs/auto-start/InteractableMethods.js @@ -0,0 +1,75 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _is = _interopRequireDefault(require("../utils/is.js")); +var _misc = require("../utils/misc.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function install(scope) { + const { + Interactable // tslint:disable-line no-shadowed-variable + } = scope; + Interactable.prototype.getAction = function getAction(pointer, event, interaction, element) { + const action = defaultActionChecker(this, event, interaction, element, scope); + if (this.options.actionChecker) { + return this.options.actionChecker(pointer, event, action, this, element, interaction); + } + return action; + }; + Interactable.prototype.ignoreFrom = (0, _misc.warnOnce)(function (newValue) { + return this._backCompatOption('ignoreFrom', newValue); + }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).'); + Interactable.prototype.allowFrom = (0, _misc.warnOnce)(function (newValue) { + return this._backCompatOption('allowFrom', newValue); + }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).'); + Interactable.prototype.actionChecker = actionChecker; + Interactable.prototype.styleCursor = styleCursor; +} +function defaultActionChecker(interactable, event, interaction, element, scope) { + const rect = interactable.getRect(element); + const buttons = event.buttons || { + 0: 1, + 1: 4, + 3: 8, + 4: 16 + }[event.button]; + const arg = { + action: null, + interactable, + interaction, + element, + rect, + buttons + }; + scope.fire('auto-start:check', arg); + return arg.action; +} +function styleCursor(newValue) { + if (_is.default.bool(newValue)) { + this.options.styleCursor = newValue; + return this; + } + if (newValue === null) { + delete this.options.styleCursor; + return this; + } + return this.options.styleCursor; +} +function actionChecker(checker) { + if (_is.default.func(checker)) { + this.options.actionChecker = checker; + return this; + } + if (checker === null) { + delete this.options.actionChecker; + return this; + } + return this.options.actionChecker; +} +var _default = exports.default = { + id: 'auto-start/interactableMethods', + install +}; +//# sourceMappingURL=InteractableMethods.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/InteractableMethods.js.map b/packages/@interactjs/auto-start/InteractableMethods.js.map new file mode 100644 index 000000000..e5e8c5b17 --- /dev/null +++ b/packages/@interactjs/auto-start/InteractableMethods.js.map @@ -0,0 +1,52 @@ +{ + "version": 3, + "names": [ + "_is", + "_interopRequireDefault", + "require", + "_misc", + "obj", + "__esModule", + "default", + "install", + "scope", + "Interactable", + "prototype", + "getAction", + "pointer", + "event", + "interaction", + "element", + "action", + "defaultActionChecker", + "options", + "actionChecker", + "ignoreFrom", + "warnOnce", + "newValue", + "_backCompatOption", + "allowFrom", + "styleCursor", + "interactable", + "rect", + "getRect", + "buttons", + "button", + "arg", + "fire", + "is", + "bool", + "checker", + "func", + "_default", + "exports", + "id" + ], + "sources": [ + "InteractableMethods.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ) => ActionProps | null\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n styleCursor(newValue?: boolean): boolean | this\n actionChecker(checker: Function): Interactable\n actionChecker(): Function\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param checker - A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @returns The checker function or this Interactable\n */\n actionChecker(checker?: Function): Interactable | Function\n /** @returns This interactable */\n ignoreFrom(newValue: string | Element | null): Interactable\n /** @returns The current ignoreFrom value */\n ignoreFrom(): string | Element | null\n /**\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * @deprecated\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n * ```\n * Interactable\n */\n ignoreFrom(\n /** a CSS selector string, an Element or `null` to not ignore any elements */\n newValue?: string | Element | null,\n ): Interactable | string | Element | null\n allowFrom(): boolean\n /**\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * @deprecated\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n * ```\n *\n * @param {string | Element | null} [newValue]\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n allowFrom(\n /** A CSS selector string, an Element or `null` to allow from any element */\n newValue: string | Element | null,\n ): Interactable\n }\n}\n\nfunction install(scope: Scope) {\n const {\n Interactable, // tslint:disable-line no-shadowed-variable\n } = scope\n\n Interactable.prototype.getAction = function getAction(\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ): ActionProps {\n const action = defaultActionChecker(this, event, interaction, element, scope)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n }\n\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.actionChecker = actionChecker\n\n Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker(\n interactable: Interactable,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n scope: Scope,\n) {\n const rect = interactable.getRect(element)\n const buttons =\n (event as MouseEvent).buttons ||\n {\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n const arg = {\n action: null,\n interactable,\n interaction,\n element,\n rect,\n buttons,\n }\n\n scope.fire('auto-start:check', arg)\n\n return arg.action\n}\n\nfunction styleCursor(this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker(this: Interactable, checker?: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/InteractableMethods.prod.js b/packages/@interactjs/auto-start/InteractableMethods.prod.js new file mode 100644 index 000000000..f8af872a2 --- /dev/null +++ b/packages/@interactjs/auto-start/InteractableMethods.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var t,e=(t=require("../utils/is.prod.js"))&&t.__esModule?t:{default:t},o=require("../utils/misc.prod.js");function r(t){return e.default.bool(t)?(this.options.styleCursor=t,this):null===t?(delete this.options.styleCursor,this):this.options.styleCursor}function n(t){return e.default.func(t)?(this.options.actionChecker=t,this):null===t?(delete this.options.actionChecker,this):this.options.actionChecker}exports.default={id:"auto-start/interactableMethods",install(t){const{Interactable:e}=t;e.prototype.getAction=function(e,o,r,n){const i=((t,e,o,r,n)=>{const i=t.getRect(r),s={action:null,interactable:t,interaction:o,element:r,rect:i,buttons:e.buttons||{0:1,1:4,3:8,4:16}[e.button]};return n.fire("auto-start:check",s),s.action})(this,o,r,n,t);return this.options.actionChecker?this.options.actionChecker(e,o,i,this,n,r):i},e.prototype.ignoreFrom=(0,o.warnOnce)((function(t){return this._backCompatOption("ignoreFrom",t)}),"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),e.prototype.allowFrom=(0,o.warnOnce)((function(t){return this._backCompatOption("allowFrom",t)}),"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),e.prototype.actionChecker=n,e.prototype.styleCursor=r}}; +//# sourceMappingURL=InteractableMethods.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/InteractableMethods.prod.js.map b/packages/@interactjs/auto-start/InteractableMethods.prod.js.map new file mode 100644 index 000000000..a91c68f72 --- /dev/null +++ b/packages/@interactjs/auto-start/InteractableMethods.prod.js.map @@ -0,0 +1,51 @@ +{ + "version": 3, + "names": [ + "obj", + "_isProd", + "require", + "__esModule", + "default", + "_miscProd", + "styleCursor", + "newValue", + "is", + "bool", + "this", + "options", + "actionChecker", + "checker", + "func", + "exports", + "id", + "install", + "scope", + "Interactable", + "prototype", + "getAction", + "pointer", + "event", + "interaction", + "element", + "action", + "interactable", + "rect", + "getRect", + "arg", + "buttons", + "button", + "fire", + "defaultActionChecker", + "ignoreFrom", + "warnOnce", + "_backCompatOption", + "allowFrom" + ], + "sources": [ + "InteractableMethods.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ) => ActionProps | null\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n styleCursor(newValue?: boolean): boolean | this\n actionChecker(checker: Function): Interactable\n actionChecker(): Function\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param checker - A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @returns The checker function or this Interactable\n */\n actionChecker(checker?: Function): Interactable | Function\n /** @returns This interactable */\n ignoreFrom(newValue: string | Element | null): Interactable\n /** @returns The current ignoreFrom value */\n ignoreFrom(): string | Element | null\n /**\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * @deprecated\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n * ```\n * Interactable\n */\n ignoreFrom(\n /** a CSS selector string, an Element or `null` to not ignore any elements */\n newValue?: string | Element | null,\n ): Interactable | string | Element | null\n allowFrom(): boolean\n /**\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * @deprecated\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n * ```\n *\n * @param {string | Element | null} [newValue]\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n allowFrom(\n /** A CSS selector string, an Element or `null` to allow from any element */\n newValue: string | Element | null,\n ): Interactable\n }\n}\n\nfunction install(scope: Scope) {\n const {\n Interactable, // tslint:disable-line no-shadowed-variable\n } = scope\n\n Interactable.prototype.getAction = function getAction(\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ): ActionProps {\n const action = defaultActionChecker(this, event, interaction, element, scope)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n }\n\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.actionChecker = actionChecker\n\n Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker(\n interactable: Interactable,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n scope: Scope,\n) {\n const rect = interactable.getRect(element)\n const buttons =\n (event as MouseEvent).buttons ||\n {\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n const arg = {\n action: null,\n interactable,\n interaction,\n element,\n rect,\n buttons,\n }\n\n scope.fire('auto-start:check', arg)\n\n return arg.action\n}\n\nfunction styleCursor(this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker(this: Interactable, checker?: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n" + ], + "mappings": "8EAIA,IACiDA,EADjDC,GACiDD,EADjDE,QAAA,yBACiDF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAAjDK,EAAAH,QAAA,yBAkLA,SAASI,EAAgCC,GACvC,OAAIC,UAAGC,KAAKF,IACVG,KAAKC,QAAQL,YAAcC,EAEpBG,MAGQ,OAAbH,UACKG,KAAKC,QAAQL,YAEbI,MAGFA,KAAKC,QAAQL,WACtB,CAEA,SAASM,EAAkCC,GACzC,OAAIL,UAAGM,KAAKD,IACVH,KAAKC,QAAQC,cAAgBC,EAEtBH,MAGO,OAAZG,UACKH,KAAKC,QAAQC,cAEbF,MAGFA,KAAKC,QAAQC,aACtB,CAACG,QAAAX,QAEc,CACbY,GAAI,iCACJC,QAlGeC,GACf,MAAMC,aACJA,GACED,EAEJC,EAAaC,UAAUC,UAAY,SAEjCC,EACAC,EACAC,EACAC,GAEA,MAAMC,EAsBV,EACEC,EACAJ,EACAC,EACAC,EACAP,KAEA,MAAMU,EAAOD,EAAaE,QAAQJ,GAS5BK,EAAM,CACVJ,OAAQ,KACRC,eACAH,cACAC,UACAG,OACAG,QAbCR,EAAqBQ,SACtB,CACE,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,IACFR,EAAqBS,SAY1B,OAFAd,EAAMe,KAAK,mBAAoBH,GAExBA,EAAIJ,MACb,EAlDmBQ,CAAqBxB,KAAMa,EAAOC,EAAaC,EAASP,GAEvE,OAAIR,KAAKC,QAAQC,cACRF,KAAKC,QAAQC,cAAcU,EAASC,EAAOG,EAAQhB,KAAMe,EAASD,GAGpEE,CACT,EAEAP,EAAaC,UAAUe,YAAa,EAAAC,aAAS,SAA8B7B,GACzE,OAAOG,KAAK2B,kBAAkB,aAAc9B,EAC9C,GAAG,qGAEHY,EAAaC,UAAUkB,WAAY,EAAAF,aAAS,SAA8B7B,GACxE,OAAOG,KAAK2B,kBAAkB,YAAa9B,EAC7C,GAAG,mGAEHY,EAAaC,UAAUR,cAAgBA,EAEvCO,EAAaC,UAAUd,YAAcA,CACvC" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/LICENSE b/packages/@interactjs/auto-start/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/auto-start/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/auto-start/base.d.ts b/packages/@interactjs/auto-start/base.d.ts new file mode 100644 index 000000000..0ceb9b608 --- /dev/null +++ b/packages/@interactjs/auto-start/base.d.ts @@ -0,0 +1,64 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type { Interaction } from '@interactjs/core/Interaction'; +import type { Scope, Plugin } from '@interactjs/core/scope'; +import type { CursorChecker, Element, ActionName, ActionProps } from '@interactjs/core/types'; +import './InteractableMethods'; +declare module '@interactjs/core/InteractStatic' { + interface InteractStatic { + /** + * Returns or sets the maximum number of concurrent interactions allowed. By + * default only 1 interaction is allowed at a time (for backwards + * compatibility). To allow multiple interactions on the same Interactables and + * elements, you need to enable it in the draggable, resizable and gesturable + * `'max'` and `'maxPerElement'` options. + * + * @param {number} [newValue] Any number. newValue <= 0 means no interactions. + */ + maxInteractions: (newValue: any) => any; + } +} +declare module '@interactjs/core/scope' { + interface Scope { + autoStart: AutoStart; + } + interface SignalArgs { + 'autoStart:before-start': Omit & { + interaction: Interaction; + }; + 'autoStart:prepared': { + interaction: Interaction; + }; + 'auto-start:check': CheckSignalArg; + } +} +declare module '@interactjs/core/options' { + interface BaseDefaults { + actionChecker?: any; + cursorChecker?: any; + styleCursor?: any; + } + interface PerActionDefaults { + manualStart?: boolean; + max?: number; + maxPerElement?: number; + allowFrom?: string | Element; + ignoreFrom?: string | Element; + cursorChecker?: CursorChecker; + mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16; + } +} +interface CheckSignalArg { + interactable: Interactable; + interaction: Interaction; + element: Element; + action: ActionProps; + buttons: number; +} +export interface AutoStart { + maxInteractions: number; + withinInteractionLimit: typeof withinInteractionLimit; + cursorElement: Element; +} +declare function withinInteractionLimit(interactable: Interactable, element: Element, action: ActionProps, scope: Scope): boolean; +declare const autoStart: Plugin; +export default autoStart; diff --git a/packages/@interactjs/auto-start/base.js b/packages/@interactjs/auto-start/base.js new file mode 100644 index 000000000..e3218aa87 --- /dev/null +++ b/packages/@interactjs/auto-start/base.js @@ -0,0 +1,267 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var domUtils = _interopRequireWildcard(require("../utils/domUtils.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _misc = require("../utils/misc.js"); +var _InteractableMethods = _interopRequireDefault(require("./InteractableMethods")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +function install(scope) { + const { + interactStatic: interact, + defaults + } = scope; + scope.usePlugin(_InteractableMethods.default); + defaults.base.actionChecker = null; + defaults.base.styleCursor = true; + (0, _extend.default)(defaults.perAction, { + manualStart: false, + max: Infinity, + maxPerElement: 1, + allowFrom: null, + ignoreFrom: null, + // only allow left button by default + // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value + mouseButtons: 1 + }); + interact.maxInteractions = newValue => maxInteractions(newValue, scope); + scope.autoStart = { + // Allow this many interactions to happen simultaneously + maxInteractions: Infinity, + withinInteractionLimit, + cursorElement: null + }; +} +function prepareOnDown({ + interaction, + pointer, + event, + eventTarget +}, scope) { + if (interaction.interacting()) return; + const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); +} +function prepareOnMove({ + interaction, + pointer, + event, + eventTarget +}, scope) { + if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) return; + const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); +} +function startOnMove(arg, scope) { + const { + interaction + } = arg; + if (!interaction.pointerIsDown || interaction.interacting() || !interaction.pointerWasMoved || !interaction.prepared.name) { + return; + } + scope.fire('autoStart:before-start', arg); + const { + interactable + } = interaction; + const actionName = interaction.prepared.name; + if (actionName && interactable) { + // check manualStart and interaction limit + if (interactable.options[actionName].manualStart || !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { + interaction.stop(); + } else { + interaction.start(interaction.prepared, interactable, interaction.element); + setInteractionCursor(interaction, scope); + } + } +} +function clearCursorOnStop({ + interaction +}, scope) { + const { + interactable + } = interaction; + if (interactable && interactable.options.styleCursor) { + setCursor(interaction.element, '', scope); + } +} + +// Check if the current interactable supports the action. +// If so, return the validated action. Otherwise, return null +function validateAction(action, interactable, element, eventTarget, scope) { + if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) && interactable.options[action.name].enabled && withinInteractionLimit(interactable, element, action, scope)) { + return action; + } + return null; +} +function validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope) { + for (let i = 0, len = matches.length; i < len; i++) { + const match = matches[i]; + const matchElement = matchElements[i]; + const matchAction = match.getAction(pointer, event, interaction, matchElement); + if (!matchAction) { + continue; + } + const action = validateAction(matchAction, match, matchElement, eventTarget, scope); + if (action) { + return { + action, + interactable: match, + element: matchElement + }; + } + } + return { + action: null, + interactable: null, + element: null + }; +} +function getActionInfo(interaction, pointer, event, eventTarget, scope) { + let matches = []; + let matchElements = []; + let element = eventTarget; + function pushMatches(interactable) { + matches.push(interactable); + matchElements.push(element); + } + while (_is.default.element(element)) { + matches = []; + matchElements = []; + scope.interactables.forEachMatch(element, pushMatches); + const actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope); + if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) { + return actionInfo; + } + element = domUtils.parentNode(element); + } + return { + action: null, + interactable: null, + element: null + }; +} +function prepare(interaction, { + action, + interactable, + element +}, scope) { + action = action || { + name: null + }; + interaction.interactable = interactable; + interaction.element = element; + (0, _misc.copyAction)(interaction.prepared, action); + interaction.rect = interactable && action.name ? interactable.getRect(element) : null; + setInteractionCursor(interaction, scope); + scope.fire('autoStart:prepared', { + interaction + }); +} +function withinInteractionLimit(interactable, element, action, scope) { + const options = interactable.options; + const maxActions = options[action.name].max; + const maxPerElement = options[action.name].maxPerElement; + const autoStartMax = scope.autoStart.maxInteractions; + let activeInteractions = 0; + let interactableCount = 0; + let elementCount = 0; + + // no actions if any of these values == 0 + if (!(maxActions && maxPerElement && autoStartMax)) { + return false; + } + for (const interaction of scope.interactions.list) { + const otherAction = interaction.prepared.name; + if (!interaction.interacting()) { + continue; + } + activeInteractions++; + if (activeInteractions >= autoStartMax) { + return false; + } + if (interaction.interactable !== interactable) { + continue; + } + interactableCount += otherAction === action.name ? 1 : 0; + if (interactableCount >= maxActions) { + return false; + } + if (interaction.element === element) { + elementCount++; + if (otherAction === action.name && elementCount >= maxPerElement) { + return false; + } + } + } + return autoStartMax > 0; +} +function maxInteractions(newValue, scope) { + if (_is.default.number(newValue)) { + scope.autoStart.maxInteractions = newValue; + return this; + } + return scope.autoStart.maxInteractions; +} +function setCursor(element, cursor, scope) { + const { + cursorElement: prevCursorElement + } = scope.autoStart; + if (prevCursorElement && prevCursorElement !== element) { + prevCursorElement.style.cursor = ''; + } + element.ownerDocument.documentElement.style.cursor = cursor; + element.style.cursor = cursor; + scope.autoStart.cursorElement = cursor ? element : null; +} +function setInteractionCursor(interaction, scope) { + const { + interactable, + element, + prepared + } = interaction; + if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) { + // clear previous target element cursor + if (scope.autoStart.cursorElement) { + setCursor(scope.autoStart.cursorElement, '', scope); + } + return; + } + let cursor = ''; + if (prepared.name) { + const cursorChecker = interactable.options[prepared.name].cursorChecker; + if (_is.default.func(cursorChecker)) { + cursor = cursorChecker(prepared, interactable, element, interaction._interacting); + } else { + cursor = scope.actions.map[prepared.name].getCursor(prepared); + } + } + setCursor(interaction.element, cursor || '', scope); +} +const autoStart = { + id: 'auto-start/base', + before: ['actions'], + install, + listeners: { + 'interactions:down': prepareOnDown, + 'interactions:move': (arg, scope) => { + prepareOnMove(arg, scope); + startOnMove(arg, scope); + }, + 'interactions:stop': clearCursorOnStop + }, + maxInteractions, + withinInteractionLimit, + validateAction +}; +var _default = exports.default = autoStart; +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/base.js.map b/packages/@interactjs/auto-start/base.js.map new file mode 100644 index 000000000..b8d44a0db --- /dev/null +++ b/packages/@interactjs/auto-start/base.js.map @@ -0,0 +1,141 @@ +{ + "version": 3, + "names": [ + "domUtils", + "_interopRequireWildcard", + "require", + "_extend", + "_interopRequireDefault", + "_is", + "_misc", + "_InteractableMethods", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "interactStatic", + "interact", + "defaults", + "usePlugin", + "InteractableMethods", + "base", + "actionChecker", + "styleCursor", + "extend", + "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", + "len", + "length", + "match", + "matchElement", + "matchAction", + "getAction", + "pushMatches", + "push", + "is", + "interactables", + "forEachMatch", + "parentNode", + "copyAction", + "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", + "interactions:move", + "_default", + "exports" + ], + "sources": [ + "base.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n CursorChecker,\n PointerType,\n PointerEventType,\n Element,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\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\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './InteractableMethods'\nimport InteractableMethods from './InteractableMethods'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\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 * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\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': Omit & {\n interaction: Interaction\n }\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/options' {\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 { interactStatic: interact, defaults } = 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 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(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n if (interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || 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 (\n !interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name\n ) {\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 (\n interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n ) {\n interaction.stop()\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 (\n interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)\n ) {\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) {\n continue\n }\n\n const action = validateAction(matchAction, match, matchElement, eventTarget, 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(\n interaction,\n pointer,\n event,\n matches,\n matchElements,\n eventTarget,\n scope,\n )\n\n if (actionInfo.action && !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 {\n action,\n interactable,\n element,\n }: {\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 ? interactable.getRect(element) : 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)) {\n return false\n }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) {\n continue\n }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) {\n continue\n }\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 } 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" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/base.prod.js b/packages/@interactjs/auto-start/base.prod.js new file mode 100644 index 000000000..9f83890f8 --- /dev/null +++ b/packages/@interactjs/auto-start/base.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var t=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=i(e);if(n&&n.has(t))return n.get(t);var r={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var l=a?Object.getOwnPropertyDescriptor(t,o):null;l&&(l.get||l.set)?Object.defineProperty(r,o,l):r[o]=t[o]}return r.default=t,n&&n.set(t,r),r})(require("../utils/domUtils.prod.js")),e=o(require("../utils/extend.prod.js")),n=o(require("../utils/is.prod.js")),r=require("../utils/misc.prod.js"),a=o(require("./InteractableMethods"));function o(t){return t&&t.__esModule?t:{default:t}}function i(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(i=t=>t?n:e)(t)}function l(t,e,n,r,a){return e.testIgnoreAllow(e.options[t.name],n,r)&&e.options[t.name].enabled&&p(e,n,t,a)?t:null}function u(t,e,n,r,a,o,i){for(let u=0,c=r.length;u=l)return!1;if(a.interactable===t){if(c+=r===n.name?1:0,c>=o)return!1;if(a.element===e&&(s++,r===n.name&&s>=i))return!1}}}return l>0}function m(t,e){return n.default.number(t)?(e.autoStart.maxInteractions=t,this):e.autoStart.maxInteractions}function f(t,e,n){const{cursorElement:r}=n.autoStart;r&&r!==t&&(r.style.cursor=""),t.ownerDocument.documentElement.style.cursor=e,t.style.cursor=e,n.autoStart.cursorElement=e?t:null}function d(t,e){const{interactable:r,element:a,prepared:o}=t;if("mouse"!==t.pointerType||!r||!r.options.styleCursor)return void(e.autoStart.cursorElement&&f(e.autoStart.cursorElement,"",e));let i="";if(o.name){const l=r.options[o.name].cursorChecker;i=n.default.func(l)?l(o,r,a,t._interacting):e.actions.map[o.name].getCursor(o)}f(t.element,i||"",e)}const b={id:"auto-start/base",before:["actions"],install(t){const{interactStatic:n,defaults:r}=t;t.usePlugin(a.default),r.base.actionChecker=null,r.base.styleCursor=!0,(0,e.default)(r.perAction,{manualStart:!1,max:1/0,maxPerElement:1,allowFrom:null,ignoreFrom:null,mouseButtons:1}),n.maxInteractions=e=>m(e,t),t.autoStart={maxInteractions:1/0,withinInteractionLimit:p,cursorElement:null}},listeners:{"interactions:down"({interaction:t,pointer:e,event:n,eventTarget:r},a){t.interacting()||s(t,c(t,e,n,r,a),a)},"interactions:move"(t,e){(({interaction:t,pointer:e,event:n,eventTarget:r},a)=>{"mouse"!==t.pointerType||t.pointerIsDown||t.interacting()||s(t,c(t,e,n,r,a),a)})(t,e),((t,e)=>{const{interaction:n}=t;if(!n.pointerIsDown||n.interacting()||!n.pointerWasMoved||!n.prepared.name)return;e.fire("autoStart:before-start",t);const{interactable:r}=n,a=n.prepared.name;a&&r&&(r.options[a].manualStart||!p(r,n.element,n.prepared,e)?n.stop():(n.start(n.prepared,r,n.element),d(n,e)))})(t,e)},"interactions:stop"({interaction:t},e){const{interactable:n}=t;n&&n.options.styleCursor&&f(t.element,"",e)}},maxInteractions:m,withinInteractionLimit:p,validateAction:l};exports.default=b; +//# sourceMappingURL=base.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/base.prod.js.map b/packages/@interactjs/auto-start/base.prod.js.map new file mode 100644 index 000000000..a8a53dc89 --- /dev/null +++ b/packages/@interactjs/auto-start/base.prod.js.map @@ -0,0 +1,140 @@ +{ + "version": 3, + "names": [ + "domUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_extendProd", + "_interopRequireDefault", + "_isProd", + "_miscProd", + "_InteractableMethods", + "obj", + "WeakMap", + "validateAction", + "action", + "interactable", + "element", + "eventTarget", + "scope", + "testIgnoreAllow", + "options", + "name", + "enabled", + "withinInteractionLimit", + "validateMatches", + "interaction", + "pointer", + "event", + "matches", + "matchElements", + "len", + "length", + "match", + "matchElement", + "matchAction", + "getAction", + "getActionInfo", + "pushMatches", + "push", + "is", + "interactables", + "forEachMatch", + "actionInfo", + "manualStart", + "parentNode", + "prepare", + "copyAction", + "prepared", + "rect", + "getRect", + "setInteractionCursor", + "fire", + "maxActions", + "max", + "maxPerElement", + "autoStartMax", + "autoStart", + "maxInteractions", + "activeInteractions", + "interactableCount", + "elementCount", + "interactions", + "list", + "otherAction", + "interacting", + "newValue", + "number", + "this", + "setCursor", + "cursor", + "cursorElement", + "prevCursorElement", + "style", + "ownerDocument", + "documentElement", + "pointerType", + "styleCursor", + "cursorChecker", + "func", + "_interacting", + "actions", + "map", + "getCursor", + "id", + "before", + "install", + "interactStatic", + "interact", + "defaults", + "usePlugin", + "InteractableMethods", + "base", + "actionChecker", + "extend", + "perAction", + "Infinity", + "allowFrom", + "ignoreFrom", + "mouseButtons", + "listeners", + "prepareOnDown", + "arg", + "pointerIsDown", + "prepareOnMove", + "pointerWasMoved", + "actionName", + "stop", + "start", + "startOnMove", + "clearCursorOnStop", + "exports" + ], + "sources": [ + "base.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n CursorChecker,\n PointerType,\n PointerEventType,\n Element,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\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\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './InteractableMethods'\nimport InteractableMethods from './InteractableMethods'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\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 * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\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': Omit & {\n interaction: Interaction\n }\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/options' {\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 { interactStatic: interact, defaults } = 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 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(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n if (interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || 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 (\n !interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name\n ) {\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 (\n interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n ) {\n interaction.stop()\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 (\n interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)\n ) {\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) {\n continue\n }\n\n const action = validateAction(matchAction, match, matchElement, eventTarget, 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(\n interaction,\n pointer,\n event,\n matches,\n matchElements,\n eventTarget,\n scope,\n )\n\n if (actionInfo.action && !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 {\n action,\n interactable,\n element,\n }: {\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 ? interactable.getRect(element) : 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)) {\n return false\n }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) {\n continue\n }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) {\n continue\n }\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 } 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" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/dragAxis.d.ts b/packages/@interactjs/auto-start/dragAxis.d.ts new file mode 100644 index 000000000..ad8325e35 --- /dev/null +++ b/packages/@interactjs/auto-start/dragAxis.d.ts @@ -0,0 +1,9 @@ +import type { SignalArgs, Scope } from '@interactjs/core/scope'; +declare function beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope): void; +declare const _default: { + id: string; + listeners: { + 'autoStart:before-start': typeof beforeStart; + }; +}; +export default _default; diff --git a/packages/@interactjs/auto-start/dragAxis.js b/packages/@interactjs/auto-start/dragAxis.js new file mode 100644 index 000000000..fecfd2bb8 --- /dev/null +++ b/packages/@interactjs/auto-start/dragAxis.js @@ -0,0 +1,74 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _domUtils = require("../utils/domUtils.js"); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _base = _interopRequireDefault(require("./base")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function beforeStart({ + interaction, + eventTarget, + dx, + dy +}, scope) { + if (interaction.prepared.name !== 'drag') return; + + // check if a drag is in the correct axis + const absX = Math.abs(dx); + const absY = Math.abs(dy); + const targetOptions = interaction.interactable.options.drag; + const startAxis = targetOptions.startAxis; + const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'; + interaction.prepared.axis = targetOptions.lockAxis === 'start' ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy' + : targetOptions.lockAxis; + + // if the movement isn't in the startAxis of the interactable + if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) { + // cancel the prepared action + ; + interaction.prepared.name = null; + + // then try to get a drag from another ineractable + let element = eventTarget; + const getDraggable = function (interactable) { + if (interactable === interaction.interactable) return; + const options = interaction.interactable.options.drag; + if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) { + const action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element); + if (action && action.name === 'drag' && checkStartAxis(currentAxis, interactable) && _base.default.validateAction(action, interactable, element, eventTarget, scope)) { + return interactable; + } + } + }; + + // check all interactables + while (_is.default.element(element)) { + const interactable = scope.interactables.forEachMatch(element, getDraggable); + if (interactable) { + ; + interaction.prepared.name = 'drag'; + interaction.interactable = interactable; + interaction.element = element; + break; + } + element = (0, _domUtils.parentNode)(element); + } + } +} +function checkStartAxis(startAxis, interactable) { + if (!interactable) { + return false; + } + const thisAxis = interactable.options.drag.startAxis; + return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis; +} +var _default = exports.default = { + id: 'auto-start/dragAxis', + listeners: { + 'autoStart:before-start': beforeStart + } +}; +//# sourceMappingURL=dragAxis.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/dragAxis.js.map b/packages/@interactjs/auto-start/dragAxis.js.map new file mode 100644 index 000000000..627ee6724 --- /dev/null +++ b/packages/@interactjs/auto-start/dragAxis.js.map @@ -0,0 +1,60 @@ +{ + "version": 3, + "names": [ + "_domUtils", + "require", + "_is", + "_interopRequireDefault", + "_base", + "obj", + "__esModule", + "default", + "beforeStart", + "interaction", + "eventTarget", + "dx", + "dy", + "scope", + "prepared", + "name", + "absX", + "Math", + "abs", + "absY", + "targetOptions", + "interactable", + "options", + "drag", + "startAxis", + "currentAxis", + "axis", + "lockAxis", + "element", + "getDraggable", + "manualStart", + "testIgnoreAllow", + "action", + "getAction", + "downPointer", + "downEvent", + "checkStartAxis", + "autoStart", + "validateAction", + "is", + "interactables", + "forEachMatch", + "parentNode", + "thisAxis", + "_default", + "exports", + "id", + "listeners" + ], + "sources": [ + "dragAxis.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.prepared.name !== 'drag') return\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n interaction.prepared.axis =\n targetOptions.lockAxis === 'start'\n ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n ;(interaction as Interaction).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) return\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer,\n interaction.downEvent,\n interaction,\n element,\n )\n\n if (\n action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)\n ) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n ;(interaction as Interaction).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis(startAxis: string, interactable: Interactable) {\n if (!interactable) {\n return false\n }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/dragAxis.prod.js b/packages/@interactjs/auto-start/dragAxis.prod.js new file mode 100644 index 000000000..45008c626 --- /dev/null +++ b/packages/@interactjs/auto-start/dragAxis.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=require("../utils/domUtils.prod.js"),t=a(require("../utils/is.prod.js")),r=a(require("./base"));function a(e){return e&&e.__esModule?e:{default:e}}exports.default={id:"auto-start/dragAxis",listeners:{"autoStart:before-start"({interaction:a,eventTarget:n,dx:i,dy:o},s){if("drag"!==a.prepared.name)return;const d=Math.abs(i),l=Math.abs(o),u=a.interactable.options.drag,c=u.startAxis,p=d>l?"x":d{if(e===a.interactable)return;const t=a.interactable.options.drag;if(!t.manualStart&&e.testIgnoreAllow(t,i,n)){const t=e.getAction(a.downPointer,a.downEvent,a,i);if(t&&"drag"===t.name&&((e,t)=>{if(!t)return!1;const r=t.options.drag.startAxis;return"xy"===e||"xy"===r||r===e})(p,e)&&r.default.validateAction(t,e,i,n,s))return e}};for(;t.default.element(i);){const t=s.interactables.forEachMatch(i,o);if(t){a.prepared.name="drag",a.interactable=t,a.element=i;break}i=(0,e.parentNode)(i)}}}}}; +//# sourceMappingURL=dragAxis.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/dragAxis.prod.js.map b/packages/@interactjs/auto-start/dragAxis.prod.js.map new file mode 100644 index 000000000..9be9aa64f --- /dev/null +++ b/packages/@interactjs/auto-start/dragAxis.prod.js.map @@ -0,0 +1,59 @@ +{ + "version": 3, + "names": [ + "_domUtilsProd", + "require", + "_isProd", + "_interopRequireDefault", + "_base", + "obj", + "__esModule", + "default", + "exports", + "id", + "listeners", + "beforeStart", + "interaction", + "eventTarget", + "dx", + "dy", + "scope", + "prepared", + "name", + "absX", + "Math", + "abs", + "absY", + "targetOptions", + "interactable", + "options", + "drag", + "startAxis", + "currentAxis", + "axis", + "lockAxis", + "element", + "getDraggable", + "manualStart", + "testIgnoreAllow", + "action", + "getAction", + "downPointer", + "downEvent", + "thisAxis", + "checkStartAxis", + "autoStart", + "validateAction", + "is", + "interactables", + "forEachMatch", + "parentNode" + ], + "sources": [ + "dragAxis.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.prepared.name !== 'drag') return\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n interaction.prepared.axis =\n targetOptions.lockAxis === 'start'\n ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n ;(interaction as Interaction).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) return\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer,\n interaction.downEvent,\n interaction,\n element,\n )\n\n if (\n action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)\n ) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n ;(interaction as Interaction).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis(startAxis: string, interactable: Interactable) {\n if (!interactable) {\n return false\n }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n" + ], + "mappings": "8EAIA,IAAAA,EAAAC,QAAA,6BACAC,EAAAC,EAAAF,QAAA,wBAEAG,EAAAD,EAAAF,QAAA,WAA8B,SAAAE,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAyE7BG,QAAAD,QAEc,CACbE,GAAI,sBACJC,UAAW,CAAE,wBAA0BC,EA3EpBC,YAAEA,EAAWC,YAAEA,EAAWC,GAAEA,EAAEC,GAAEA,GAAuCC,GAC1F,GAAkC,SAA9BJ,EAAYK,SAASC,KAAiB,OAG1C,MAAMC,EAAOC,KAAKC,IAAIP,GAChBQ,EAAOF,KAAKC,IAAIN,GAChBQ,EAAgBX,EAAYY,aAAaC,QAAQC,KACjDC,EAAYJ,EAAcI,UAC1BC,EAAcT,EAAOG,EAAO,IAAMH,EAAOG,EAAO,IAAM,KAQ5D,GANAV,EAAYK,SAASY,KACQ,UAA3BN,EAAcO,SACTF,EAAY,GACbL,EAAcO,SAGA,OAAhBF,GAAsC,OAAdD,GAAsBA,IAAcC,EAAa,CAEzEhB,EAAwCK,SAASC,KAAO,KAG1D,IAAIa,EAAUlB,EAEd,MAAMmB,EAAyBR,IAC7B,GAAIA,IAAiBZ,EAAYY,aAAc,OAE/C,MAAMC,EAAUb,EAAYY,aAAaC,QAAQC,KAEjD,IAAKD,EAAQQ,aAAeT,EAAaU,gBAAgBT,EAASM,EAASlB,GAAc,CACvF,MAAMsB,EAASX,EAAaY,UAC1BxB,EAAYyB,YACZzB,EAAY0B,UACZ1B,EACAmB,GAGF,GACEI,GACgB,SAAhBA,EAAOjB,MAyBjB,EAAwBS,EAAmBH,KACzC,IAAKA,EACH,OAAO,EAGT,MAAMe,EAAWf,EAAaC,QAAQC,KAAKC,UAE3C,MAAqB,OAAdA,GAAmC,OAAbY,GAAqBA,IAAaZ,CACjE,EAhCUa,CAAeZ,EAAaJ,IAC5BiB,UAAUC,eAAeP,EAAQX,EAAcO,EAASlB,EAAaG,GAErE,OAAOQ,CAEX,CACF,EAGA,KAAOmB,UAAGZ,QAAQA,IAAU,CAC1B,MAAMP,EAAeR,EAAM4B,cAAcC,aAAad,EAASC,GAE/D,GAAIR,EAAc,CACdZ,EAAwCK,SAASC,KAAO,OAC1DN,EAAYY,aAAeA,EAC3BZ,EAAYmB,QAAUA,EACtB,KACF,CAEAA,GAAU,EAAAe,cAAWf,EACvB,CACF,CACF" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/hold.d.ts b/packages/@interactjs/auto-start/hold.d.ts new file mode 100644 index 000000000..36a73261d --- /dev/null +++ b/packages/@interactjs/auto-start/hold.d.ts @@ -0,0 +1,15 @@ +import type { Plugin } from '@interactjs/core/scope'; +import './base'; +declare module '@interactjs/core/options' { + interface PerActionDefaults { + hold?: number; + delay?: number; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + autoStartHoldTimer?: any; + } +} +declare const hold: Plugin; +export default hold; diff --git a/packages/@interactjs/auto-start/hold.js b/packages/@interactjs/auto-start/hold.js new file mode 100644 index 000000000..36aa758cb --- /dev/null +++ b/packages/@interactjs/auto-start/hold.js @@ -0,0 +1,70 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _base = _interopRequireDefault(require("./base")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable */ + +function install(scope) { + const { + defaults + } = scope; + scope.usePlugin(_base.default); + defaults.perAction.hold = 0; + defaults.perAction.delay = 0; +} +function getHoldDuration(interaction) { + const actionName = interaction.prepared && interaction.prepared.name; + if (!actionName) { + return null; + } + const options = interaction.interactable.options; + return options[actionName].hold || options[actionName].delay; +} +const hold = { + id: 'auto-start/hold', + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.autoStartHoldTimer = null; + }, + 'autoStart:prepared': ({ + interaction + }) => { + const hold = getHoldDuration(interaction); + if (hold > 0) { + interaction.autoStartHoldTimer = setTimeout(() => { + interaction.start(interaction.prepared, interaction.interactable, interaction.element); + }, hold); + } + }, + 'interactions:move': ({ + interaction, + duplicate + }) => { + if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) { + clearTimeout(interaction.autoStartHoldTimer); + interaction.autoStartHoldTimer = null; + } + }, + // prevent regular down->move autoStart + 'autoStart:before-start': ({ + interaction + }) => { + const holdDuration = getHoldDuration(interaction); + if (holdDuration > 0) { + interaction.prepared.name = null; + } + } + }, + getHoldDuration +}; +var _default = exports.default = hold; +//# sourceMappingURL=hold.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/hold.js.map b/packages/@interactjs/auto-start/hold.js.map new file mode 100644 index 000000000..62bd4c6f1 --- /dev/null +++ b/packages/@interactjs/auto-start/hold.js.map @@ -0,0 +1,49 @@ +{ + "version": 3, + "names": [ + "_base", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "install", + "scope", + "defaults", + "usePlugin", + "basePlugin", + "perAction", + "hold", + "delay", + "getHoldDuration", + "interaction", + "actionName", + "prepared", + "name", + "options", + "interactable", + "id", + "listeners", + "interactions:new", + "autoStartHoldTimer", + "autoStart:prepared", + "setTimeout", + "start", + "element", + "interactions:move", + "duplicate", + "pointerWasMoved", + "clearTimeout", + "autoStart:before-start", + "holdDuration", + "_default", + "exports" + ], + "sources": [ + "hold.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable */\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration(interaction: Interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) {\n return null\n }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n interaction.autoStartHoldTimer = null\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const holdDuration = getHoldDuration(interaction)\n\n if (holdDuration > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\nexport default hold\n" + ], + "mappings": ";;;;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAe,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AADf;;AAGA;;AAeA,SAASG,OAAOA,CAACC,KAAY,EAAE;EAC7B,MAAM;IAAEC;EAAS,CAAC,GAAGD,KAAK;EAE1BA,KAAK,CAACE,SAAS,CAACC,aAAU,CAAC;EAE3BF,QAAQ,CAACG,SAAS,CAACC,IAAI,GAAG,CAAC;EAC3BJ,QAAQ,CAACG,SAAS,CAACE,KAAK,GAAG,CAAC;AAC9B;AAEA,SAASC,eAAeA,CAACC,WAAwB,EAAE;EACjD,MAAMC,UAAU,GAAGD,WAAW,CAACE,QAAQ,IAAIF,WAAW,CAACE,QAAQ,CAACC,IAAI;EAEpE,IAAI,CAACF,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EAEA,MAAMG,OAAO,GAAGJ,WAAW,CAACK,YAAY,CAACD,OAAO;EAEhD,OAAOA,OAAO,CAACH,UAAU,CAAC,CAACJ,IAAI,IAAIO,OAAO,CAACH,UAAU,CAAC,CAACH,KAAK;AAC9D;AAEA,MAAMD,IAAY,GAAG;EACnBS,EAAE,EAAE,iBAAiB;EACrBf,OAAO;EACPgB,SAAS,EAAE;IACT,kBAAkB,EAAEC,CAAC;MAAER;IAAY,CAAC,KAAK;MACvCA,WAAW,CAACS,kBAAkB,GAAG,IAAI;IACvC,CAAC;IAED,oBAAoB,EAAEC,CAAC;MAAEV;IAAY,CAAC,KAAK;MACzC,MAAMH,IAAI,GAAGE,eAAe,CAACC,WAAW,CAAC;MAEzC,IAAIH,IAAI,GAAG,CAAC,EAAE;QACZG,WAAW,CAACS,kBAAkB,GAAGE,UAAU,CAAC,MAAM;UAChDX,WAAW,CAACY,KAAK,CAACZ,WAAW,CAACE,QAAQ,EAAEF,WAAW,CAACK,YAAY,EAAEL,WAAW,CAACa,OAAO,CAAC;QACxF,CAAC,EAAEhB,IAAI,CAAC;MACV;IACF,CAAC;IAED,mBAAmB,EAAEiB,CAAC;MAAEd,WAAW;MAAEe;IAAU,CAAC,KAAK;MACnD,IAAIf,WAAW,CAACS,kBAAkB,IAAIT,WAAW,CAACgB,eAAe,IAAI,CAACD,SAAS,EAAE;QAC/EE,YAAY,CAACjB,WAAW,CAACS,kBAAkB,CAAC;QAC5CT,WAAW,CAACS,kBAAkB,GAAG,IAAI;MACvC;IACF,CAAC;IAED;IACA,wBAAwB,EAAES,CAAC;MAAElB;IAAY,CAAC,KAAK;MAC7C,MAAMmB,YAAY,GAAGpB,eAAe,CAACC,WAAW,CAAC;MAEjD,IAAImB,YAAY,GAAG,CAAC,EAAE;QACpBnB,WAAW,CAACE,QAAQ,CAACC,IAAI,GAAG,IAAI;MAClC;IACF;EACF,CAAC;EACDJ;AACF,CAAC;AAAA,IAAAqB,QAAA,GAAAC,OAAA,CAAA/B,OAAA,GACcO,IAAI" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/hold.prod.js b/packages/@interactjs/auto-start/hold.prod.js new file mode 100644 index 000000000..55f5e3b5f --- /dev/null +++ b/packages/@interactjs/auto-start/hold.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var t,e=(t=require("./base"))&&t.__esModule?t:{default:t};function r(t){const e=t.prepared&&t.prepared.name;if(!e)return null;const r=t.interactable.options;return r[e].hold||r[e].delay}const a={id:"auto-start/hold",install(t){const{defaults:r}=t;t.usePlugin(e.default),r.perAction.hold=0,r.perAction.delay=0},listeners:{"interactions:new"({interaction:t}){t.autoStartHoldTimer=null},"autoStart:prepared"({interaction:t}){const e=r(t);e>0&&(t.autoStartHoldTimer=setTimeout((()=>{t.start(t.prepared,t.interactable,t.element)}),e))},"interactions:move"({interaction:t,duplicate:e}){t.autoStartHoldTimer&&t.pointerWasMoved&&!e&&(clearTimeout(t.autoStartHoldTimer),t.autoStartHoldTimer=null)},"autoStart:before-start"({interaction:t}){r(t)>0&&(t.prepared.name=null)}},getHoldDuration:r};exports.default=a; +//# sourceMappingURL=hold.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/hold.prod.js.map b/packages/@interactjs/auto-start/hold.prod.js.map new file mode 100644 index 000000000..f60b48e29 --- /dev/null +++ b/packages/@interactjs/auto-start/hold.prod.js.map @@ -0,0 +1,42 @@ +{ + "version": 3, + "names": [ + "obj", + "_base", + "require", + "__esModule", + "default", + "getHoldDuration", + "interaction", + "actionName", + "prepared", + "name", + "options", + "interactable", + "hold", + "delay", + "id", + "install", + "scope", + "defaults", + "usePlugin", + "basePlugin", + "perAction", + "listeners", + "autoStartHoldTimer", + "setTimeout", + "start", + "element", + "duplicate", + "pointerWasMoved", + "clearTimeout", + "exports" + ], + "sources": [ + "hold.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable */\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration(interaction: Interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) {\n return null\n }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n interaction.autoStartHoldTimer = null\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const holdDuration = getHoldDuration(interaction)\n\n if (holdDuration > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\nexport default hold\n" + ], + "mappings": "8EAIA,IAAeA,EAAfC,GAAeD,EAAfE,QAAA,YAAeF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GA0Bf,SAASK,EAAgBC,GACvB,MAAMC,EAAaD,EAAYE,UAAYF,EAAYE,SAASC,KAEhE,IAAKF,EACH,OAAO,KAGT,MAAMG,EAAUJ,EAAYK,aAAaD,QAEzC,OAAOA,EAAQH,GAAYK,MAAQF,EAAQH,GAAYM,KACzD,CAEA,MAAMD,EAAe,CACnBE,GAAI,kBACJC,QAvBeC,GACf,MAAMC,SAAEA,GAAaD,EAErBA,EAAME,UAAUC,WAEhBF,EAASG,UAAUR,KAAO,EAC1BK,EAASG,UAAUP,MAAQ,CAC7B,EAiBEQ,UAAW,CACT,kBAEA,EAFuBf,gBACrBA,EAAYgB,mBAAqB,IAAI,EAGvC,oBAQA,EARyBhB,gBACvB,MAAMM,EAAOP,EAAgBC,GAEzBM,EAAO,IACTN,EAAYgB,mBAAqBC,YAAW,KAC1CjB,EAAYkB,MAAMlB,EAAYE,SAAUF,EAAYK,aAAcL,EAAYmB,QAAQ,GACrFb,GACL,EAGF,mBAKA,EALwBN,cAAaoB,cAC/BpB,EAAYgB,oBAAsBhB,EAAYqB,kBAAoBD,IACpEE,aAAatB,EAAYgB,oBACzBhB,EAAYgB,mBAAqB,KACnC,EAIF,wBAMA,EAN6BhB,gBACND,EAAgBC,GAElB,IACjBA,EAAYE,SAASC,KAAO,KAC9B,GAGJJ,mBACDwB,QAAAzB,QACcQ" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/index.d.ts b/packages/@interactjs/auto-start/index.d.ts new file mode 100644 index 000000000..1eefb5855 --- /dev/null +++ b/packages/@interactjs/auto-start/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/auto-start/plugin'; diff --git a/packages/@interactjs/auto-start/index.js b/packages/@interactjs/auto-start/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/auto-start/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/index.js.map b/packages/@interactjs/auto-start/index.js.map new file mode 100644 index 000000000..3f5b126ed --- /dev/null +++ b/packages/@interactjs/auto-start/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/auto-start/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/auto-start/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/index.prod.js b/packages/@interactjs/auto-start/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/auto-start/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/index.prod.js.map b/packages/@interactjs/auto-start/index.prod.js.map new file mode 100644 index 000000000..af5807413 --- /dev/null +++ b/packages/@interactjs/auto-start/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/auto-start/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/auto-start/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/index.ts b/packages/@interactjs/auto-start/index.ts new file mode 100644 index 000000000..dfd657d3d --- /dev/null +++ b/packages/@interactjs/auto-start/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/auto-start/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/auto-start/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/auto-start/plugin.d.ts b/packages/@interactjs/auto-start/plugin.d.ts new file mode 100644 index 000000000..6e69b8285 --- /dev/null +++ b/packages/@interactjs/auto-start/plugin.d.ts @@ -0,0 +1,9 @@ +import type { Scope } from '@interactjs/core/scope'; +import './base'; +import './dragAxis'; +import './hold'; +declare const _default: { + id: string; + install(scope: Scope): void; +}; +export default _default; diff --git a/packages/@interactjs/auto-start/plugin.js b/packages/@interactjs/auto-start/plugin.js new file mode 100644 index 000000000..67168787f --- /dev/null +++ b/packages/@interactjs/auto-start/plugin.js @@ -0,0 +1,21 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _base = _interopRequireDefault(require("./base")); +var _dragAxis = _interopRequireDefault(require("./dragAxis")); +var _hold = _interopRequireDefault(require("./hold")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ +/* eslint-enable import/no-duplicates */ +var _default = exports.default = { + id: 'auto-start', + install(scope) { + scope.usePlugin(_base.default); + scope.usePlugin(_hold.default); + scope.usePlugin(_dragAxis.default); + } +}; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/plugin.js.map b/packages/@interactjs/auto-start/plugin.js.map new file mode 100644 index 000000000..07453befc --- /dev/null +++ b/packages/@interactjs/auto-start/plugin.js.map @@ -0,0 +1,29 @@ +{ + "version": 3, + "names": [ + "_base", + "_interopRequireDefault", + "require", + "_dragAxis", + "_hold", + "obj", + "__esModule", + "default", + "_default", + "exports", + "id", + "install", + "scope", + "usePlugin", + "autoStart", + "hold", + "dragAxis" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './dragAxis'\nimport './hold'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'auto-start',\n install(scope: Scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n },\n}\n" + ], + "mappings": ";;;;;;AAGA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAe,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAHf;AAQA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEe;EACbG,EAAE,EAAE,YAAY;EAChBC,OAAOA,CAACC,KAAY,EAAE;IACpBA,KAAK,CAACC,SAAS,CAACC,aAAS,CAAC;IAC1BF,KAAK,CAACC,SAAS,CAACE,aAAI,CAAC;IACrBH,KAAK,CAACC,SAAS,CAACG,iBAAQ,CAAC;EAC3B;AACF,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/auto-start/plugin.prod.js b/packages/@interactjs/auto-start/plugin.prod.js new file mode 100644 index 000000000..986ceb95f --- /dev/null +++ b/packages/@interactjs/auto-start/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=r(require("./base")),u=r(require("./dragAxis")),t=r(require("./hold"));function r(e){return e&&e.__esModule?e:{default:e}}exports.default={id:"auto-start",install(r){r.usePlugin(e.default),r.usePlugin(t.default),r.usePlugin(u.default)}}; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/auto-start/plugin.prod.js.map b/packages/@interactjs/auto-start/plugin.prod.js.map new file mode 100644 index 000000000..04b1d43cd --- /dev/null +++ b/packages/@interactjs/auto-start/plugin.prod.js.map @@ -0,0 +1,28 @@ +{ + "version": 3, + "names": [ + "_base", + "_interopRequireDefault", + "require", + "_dragAxis", + "_hold", + "obj", + "__esModule", + "default", + "exports", + "id", + "install", + "scope", + "usePlugin", + "autoStart", + "hold", + "dragAxis" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './dragAxis'\nimport './hold'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'auto-start',\n install(scope: Scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n },\n}\n" + ], + "mappings": "8EAGA,IAAAA,EAAAC,EAAAC,QAAA,WACAC,EAAAF,EAAAC,QAAA,eACAE,EAAAH,EAAAC,QAAA,WAAe,SAAAD,EAAAI,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAKfG,QAAAD,QAEe,CACbE,GAAI,aACJC,QAAQC,GACNA,EAAMC,UAAUC,WAChBF,EAAMC,UAAUE,WAChBH,EAAMC,UAAUG,UAClB" +} \ No newline at end of file diff --git a/packages/@interactjs/core/.npmignore b/packages/@interactjs/core/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/core/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/core/BaseEvent.d.ts b/packages/@interactjs/core/BaseEvent.d.ts new file mode 100644 index 000000000..54c6e744a --- /dev/null +++ b/packages/@interactjs/core/BaseEvent.d.ts @@ -0,0 +1,25 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'; +import type { ActionName } from '@interactjs/core/types'; +export declare class BaseEvent { + type: string; + target: EventTarget; + currentTarget: Node; + interactable: Interactable; + timeStamp: number; + immediatePropagationStopped: boolean; + propagationStopped: boolean; + constructor(interaction: Interaction); + preventDefault(): void; + /** + * Don't call any other listeners (even on the current target) + */ + stopPropagation(): void; + /** + * Don't call listeners on the remaining targets + */ + stopImmediatePropagation(): void; +} +export interface BaseEvent { + interaction: InteractionProxy; +} diff --git a/packages/@interactjs/core/BaseEvent.js b/packages/@interactjs/core/BaseEvent.js new file mode 100644 index 000000000..e5b4c531a --- /dev/null +++ b/packages/@interactjs/core/BaseEvent.js @@ -0,0 +1,43 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BaseEvent = void 0; +class BaseEvent { + /** @internal */ + + immediatePropagationStopped = false; + propagationStopped = false; + constructor(interaction) { + this._interaction = interaction; + } + preventDefault() {} + + /** + * Don't call any other listeners (even on the current target) + */ + stopPropagation() { + this.propagationStopped = true; + } + + /** + * Don't call listeners on the remaining targets + */ + stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } +} + +// defined outside of class definition to avoid assignment of undefined during +// construction +exports.BaseEvent = BaseEvent; +// getters and setters defined here to support typescript 3.6 and below which +// don't support getter and setters in .d.ts files +Object.defineProperty(BaseEvent.prototype, 'interaction', { + get() { + return this._interaction._proxy; + }, + set() {} +}); +//# sourceMappingURL=BaseEvent.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/BaseEvent.js.map b/packages/@interactjs/core/BaseEvent.js.map new file mode 100644 index 000000000..f0dea203c --- /dev/null +++ b/packages/@interactjs/core/BaseEvent.js.map @@ -0,0 +1,28 @@ +{ + "version": 3, + "names": [ + "BaseEvent", + "immediatePropagationStopped", + "propagationStopped", + "constructor", + "interaction", + "_interaction", + "preventDefault", + "stopPropagation", + "stopImmediatePropagation", + "exports", + "Object", + "defineProperty", + "prototype", + "get", + "_proxy", + "set" + ], + "sources": [ + "BaseEvent.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent {\n declare type: string\n declare target: EventTarget\n declare currentTarget: Node\n declare interactable: Interactable\n /** @internal */\n declare _interaction: Interaction\n declare timeStamp: number\n immediatePropagationStopped = false\n propagationStopped = false\n\n constructor(interaction: Interaction) {\n this._interaction = interaction\n }\n\n preventDefault() {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent {\n interaction: InteractionProxy\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n get(this: BaseEvent) {\n return this._interaction._proxy\n },\n set(this: BaseEvent) {},\n})\n" + ], + "mappings": ";;;;;;AAIO,MAAMA,SAAS,CAAsC;EAK1D;;EAGAC,2BAA2B,GAAG,KAAK;EACnCC,kBAAkB,GAAG,KAAK;EAE1BC,WAAWA,CAACC,WAA2B,EAAE;IACvC,IAAI,CAACC,YAAY,GAAGD,WAAW;EACjC;EAEAE,cAAcA,CAAA,EAAG,CAAC;;EAElB;AACF;AACA;EACEC,eAAeA,CAAA,EAAG;IAChB,IAAI,CAACL,kBAAkB,GAAG,IAAI;EAChC;;EAEA;AACF;AACA;EACEM,wBAAwBA,CAAA,EAAG;IACzB,IAAI,CAACP,2BAA2B,GAAG,IAAI,CAACC,kBAAkB,GAAG,IAAI;EACnE;AACF;;AAEA;AACA;AAAAO,OAAA,CAAAT,SAAA,GAAAA,SAAA;AAKA;AACA;AACAU,MAAM,CAACC,cAAc,CAACX,SAAS,CAACY,SAAS,EAAE,aAAa,EAAE;EACxDC,GAAGA,CAAA,EAAkB;IACnB,OAAO,IAAI,CAACR,YAAY,CAACS,MAAM;EACjC,CAAC;EACDC,GAAGA,CAAA,EAAkB,CAAC;AACxB,CAAC,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/core/BaseEvent.prod.js b/packages/@interactjs/core/BaseEvent.prod.js new file mode 100644 index 000000000..26c0ae7b4 --- /dev/null +++ b/packages/@interactjs/core/BaseEvent.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.BaseEvent=void 0;class t{immediatePropagationStopped=!1;propagationStopped=!1;constructor(t){this._interaction=t}preventDefault(){}stopPropagation(){this.propagationStopped=!0}stopImmediatePropagation(){this.immediatePropagationStopped=this.propagationStopped=!0}}exports.BaseEvent=t,Object.defineProperty(t.prototype,"interaction",{get(){return this._interaction._proxy},set(){}}); +//# sourceMappingURL=BaseEvent.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/BaseEvent.prod.js.map b/packages/@interactjs/core/BaseEvent.prod.js.map new file mode 100644 index 000000000..b95d8e175 --- /dev/null +++ b/packages/@interactjs/core/BaseEvent.prod.js.map @@ -0,0 +1,29 @@ +{ + "version": 3, + "names": [ + "BaseEvent", + "immediatePropagationStopped", + "propagationStopped", + "constructor", + "interaction", + "this", + "_interaction", + "preventDefault", + "stopPropagation", + "stopImmediatePropagation", + "exports", + "Object", + "defineProperty", + "prototype", + "get", + "_proxy", + "set" + ], + "sources": [ + "BaseEvent.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent {\n declare type: string\n declare target: EventTarget\n declare currentTarget: Node\n declare interactable: Interactable\n /** @internal */\n declare _interaction: Interaction\n declare timeStamp: number\n immediatePropagationStopped = false\n propagationStopped = false\n\n constructor(interaction: Interaction) {\n this._interaction = interaction\n }\n\n preventDefault() {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent {\n interaction: InteractionProxy\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n get(this: BaseEvent) {\n return this._interaction._proxy\n },\n set(this: BaseEvent) {},\n})\n" + ], + "mappings": "gFAIO,MAAMA,EAQXC,6BAA8B,EAC9BC,oBAAqB,EAErBC,YAAYC,GACVC,KAAKC,aAAeF,CACtB,CAEAG,iBAAkB,CAKlBC,kBACEH,KAAKH,oBAAqB,CAC5B,CAKAO,2BACEJ,KAAKJ,4BAA8BI,KAAKH,oBAAqB,CAC/D,EAIFQ,QAAAV,YAOAW,OAAOC,eAAeZ,EAAUa,UAAW,cAAe,CACxDC,MACE,OAAOT,KAAKC,aAAaS,MAC3B,EACAC,MAAsB" +} \ No newline at end of file diff --git a/packages/@interactjs/core/Eventable.d.ts b/packages/@interactjs/core/Eventable.d.ts new file mode 100644 index 000000000..6185f017c --- /dev/null +++ b/packages/@interactjs/core/Eventable.d.ts @@ -0,0 +1,19 @@ +import type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'; +import type { ListenersArg, Rect } from '@interactjs/core/types'; +export declare class Eventable { + options: any; + types: NormalizedListeners; + propagationStopped: boolean; + immediatePropagationStopped: boolean; + global: any; + constructor(options?: { + [index: string]: any; + }); + fire(event: T): void; + on(type: string, listener: ListenersArg): void; + off(type: string, listener: ListenersArg): void; + getRect(_element: Element): Rect; +} diff --git a/packages/@interactjs/core/Eventable.js b/packages/@interactjs/core/Eventable.js new file mode 100644 index 000000000..589e170f2 --- /dev/null +++ b/packages/@interactjs/core/Eventable.js @@ -0,0 +1,71 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Eventable = void 0; +var arr = _interopRequireWildcard(require("../utils/arr.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _normalizeListeners = _interopRequireDefault(require("../utils/normalizeListeners.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function fireUntilImmediateStopped(event, listeners) { + for (const listener of listeners) { + if (event.immediatePropagationStopped) { + break; + } + listener(event); + } +} +class Eventable { + options; + types = {}; + propagationStopped = false; + immediatePropagationStopped = false; + global; + constructor(options) { + this.options = (0, _extend.default)({}, options || {}); + } + fire(event) { + let listeners; + const global = this.global; + + // Interactable#on() listeners + // tslint:disable no-conditional-assignment + if (listeners = this.types[event.type]) { + fireUntilImmediateStopped(event, listeners); + } + + // interact.on() listeners + if (!event.propagationStopped && global && (listeners = global[event.type])) { + fireUntilImmediateStopped(event, listeners); + } + } + on(type, listener) { + const listeners = (0, _normalizeListeners.default)(type, listener); + for (type in listeners) { + this.types[type] = arr.merge(this.types[type] || [], listeners[type]); + } + } + off(type, listener) { + const listeners = (0, _normalizeListeners.default)(type, listener); + for (type in listeners) { + const eventList = this.types[type]; + if (!eventList || !eventList.length) { + continue; + } + for (const subListener of listeners[type]) { + const index = eventList.indexOf(subListener); + if (index !== -1) { + eventList.splice(index, 1); + } + } + } + } + getRect(_element) { + return null; + } +} +exports.Eventable = Eventable; +//# sourceMappingURL=Eventable.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/Eventable.js.map b/packages/@interactjs/core/Eventable.js.map new file mode 100644 index 000000000..b3b7995ca --- /dev/null +++ b/packages/@interactjs/core/Eventable.js.map @@ -0,0 +1,67 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_extend", + "_interopRequireDefault", + "_normalizeListeners", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "fireUntilImmediateStopped", + "event", + "listeners", + "listener", + "immediatePropagationStopped", + "Eventable", + "options", + "types", + "propagationStopped", + "global", + "constructor", + "extend", + "fire", + "type", + "on", + "normalize", + "merge", + "off", + "eventList", + "length", + "subListener", + "index", + "indexOf", + "splice", + "getRect", + "_element", + "exports" + ], + "sources": [ + "Eventable.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nimport type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\n\nfunction fireUntilImmediateStopped(event: any, listeners: Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) {\n break\n }\n\n listener(event)\n }\n}\n\nexport class Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor(options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire(event: T) {\n let listeners: Listener[]\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) {\n continue\n }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect(_element: Element): Rect {\n return null\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/Eventable.prod.js b/packages/@interactjs/core/Eventable.prod.js new file mode 100644 index 000000000..4ba26b824 --- /dev/null +++ b/packages/@interactjs/core/Eventable.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.Eventable=void 0;var e=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in e)if("default"!==p&&Object.prototype.hasOwnProperty.call(e,p)){var s=i?Object.getOwnPropertyDescriptor(e,p):null;s&&(s.get||s.set)?Object.defineProperty(o,p,s):o[p]=e[p]}return o.default=e,r&&r.set(e,o),o})(require("../utils/arr.prod.js")),t=o(require("../utils/extend.prod.js")),r=o(require("../utils/normalizeListeners.prod.js"));function o(e){return e&&e.__esModule?e:{default:e}}function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=e=>e?r:t)(e)}function i(e,t){for(const r of t){if(e.immediatePropagationStopped)break;r(e)}}exports.Eventable=class{options;types={};propagationStopped=!1;immediatePropagationStopped=!1;global;constructor(e){this.options=(0,t.default)({},e||{})}fire(e){let t;const r=this.global;(t=this.types[e.type])&&i(e,t),!e.propagationStopped&&r&&(t=r[e.type])&&i(e,t)}on(t,o){const n=(0,r.default)(t,o);for(t in n)this.types[t]=e.merge(this.types[t]||[],n[t])}off(e,t){const o=(0,r.default)(e,t);for(e in o){const t=this.types[e];if(t&&t.length)for(const r of o[e]){const e=t.indexOf(r);-1!==e&&t.splice(e,1)}}}getRect(e){return null}}; +//# sourceMappingURL=Eventable.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/Eventable.prod.js.map b/packages/@interactjs/core/Eventable.prod.js.map new file mode 100644 index 000000000..da6117c84 --- /dev/null +++ b/packages/@interactjs/core/Eventable.prod.js.map @@ -0,0 +1,68 @@ +{ + "version": 3, + "names": [ + "arr", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_extendProd", + "_interopRequireDefault", + "_normalizeListenersProd", + "obj", + "WeakMap", + "fireUntilImmediateStopped", + "event", + "listeners", + "listener", + "immediatePropagationStopped", + "exports", + "Eventable", + "options", + "types", + "propagationStopped", + "global", + "constructor", + "this", + "extend", + "fire", + "type", + "on", + "normalize", + "merge", + "off", + "eventList", + "length", + "subListener", + "index", + "indexOf", + "splice", + "getRect", + "_element" + ], + "sources": [ + "Eventable.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nimport type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\n\nfunction fireUntilImmediateStopped(event: any, listeners: Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) {\n break\n }\n\n listener(event)\n }\n}\n\nexport class Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor(options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire(event: T) {\n let listeners: Listener[]\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) {\n continue\n }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect(_element: Element): Rect {\n return null\n }\n}\n" + ], + "mappings": "gFAAA,IAAAA,EAG4D,EAAAC,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,QAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,IAAA,EAH5DY,CAAAC,QAAA,yBACAC,EAAAC,EAAAF,QAAA,4BAEAG,EAAAD,EAAAF,QAAA,wCAA4D,SAAAE,EAAAE,GAAA,OAAAA,KAAAvB,WAAAuB,EAAA,CAAAtB,QAAAsB,EAAA,UAAApB,EAAAL,GAAA,sBAAA0B,QAAA,gBAAAzB,EAAA,IAAAyB,QAAAtB,EAAA,IAAAsB,QAAA,OAAArB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA,CAI5D,SAAS2B,EAA0BC,EAAYC,GAC7C,IAAK,MAAMC,KAAYD,EAAW,CAChC,GAAID,EAAMG,4BACR,MAGFD,EAASF,EACX,CACF,CA4DCI,QAAAC,UA1DM,MACLC,QACAC,MAA6B,CAAC,EAC9BC,oBAAqB,EACrBL,6BAA8B,EAC9BM,OAEAC,YAAYJ,GACVK,KAAKL,SAAU,EAAAM,WAAO,CAAC,EAAGN,GAAW,CAAC,EACxC,CAEAO,KAA+Db,GAC7D,IAAIC,EACJ,MAAMQ,EAASE,KAAKF,QAIfR,EAAYU,KAAKJ,MAAMP,EAAMc,QAChCf,EAA0BC,EAAOC,IAI9BD,EAAMQ,oBAAsBC,IAAWR,EAAYQ,EAAOT,EAAMc,QACnEf,EAA0BC,EAAOC,EAErC,CAEAc,GAAGD,EAAcZ,GACf,MAAMD,GAAY,EAAAe,WAAUF,EAAMZ,GAElC,IAAKY,KAAQb,EACXU,KAAKJ,MAAMO,GAAQ3C,EAAI8C,MAAMN,KAAKJ,MAAMO,IAAS,GAAIb,EAAUa,GAEnE,CAEAI,IAAIJ,EAAcZ,GAChB,MAAMD,GAAY,EAAAe,WAAUF,EAAMZ,GAElC,IAAKY,KAAQb,EAAW,CACtB,MAAMkB,EAAYR,KAAKJ,MAAMO,GAE7B,GAAKK,GAAcA,EAAUC,OAI7B,IAAK,MAAMC,KAAepB,EAAUa,GAAO,CACzC,MAAMQ,EAAQH,EAAUI,QAAQF,IAEjB,IAAXC,GACFH,EAAUK,OAAOF,EAAO,EAE5B,CACF,CACF,CAEAG,QAAQC,GACN,OAAO,IACT" +} \ No newline at end of file diff --git a/packages/@interactjs/core/InteractEvent.d.ts b/packages/@interactjs/core/InteractEvent.d.ts new file mode 100644 index 000000000..8acb770c0 --- /dev/null +++ b/packages/@interactjs/core/InteractEvent.d.ts @@ -0,0 +1,69 @@ +import type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'; +import { BaseEvent } from './BaseEvent'; +import type { Interaction } from './Interaction'; +export type EventPhase = keyof PhaseMap; +export interface PhaseMap { + start: true; + move: true; + end: true; +} +export interface InteractEvent { + pageX: number; + pageY: number; + clientX: number; + clientY: number; + dx: number; + dy: number; + velocityX: number; + velocityY: number; +} +export declare class InteractEvent extends BaseEvent { + target: Element; + currentTarget: Element; + relatedTarget: Element | null; + screenX?: number; + screenY?: number; + button: number; + buttons: number; + ctrlKey: boolean; + shiftKey: boolean; + altKey: boolean; + metaKey: boolean; + page: Point; + client: Point; + delta: Point; + rect: FullRect; + x0: number; + y0: number; + t0: number; + dt: number; + duration: number; + clientX0: number; + clientY0: number; + velocity: Point; + speed: number; + swipe: ReturnType['getSwipe']>; + axes?: 'x' | 'y' | 'xy'; + constructor(interaction: Interaction, event: PointerEventType, actionName: T, phase: P, element: Element, preEnd?: boolean, type?: string); + getSwipe(): { + up: boolean; + down: boolean; + left: boolean; + right: boolean; + angle: number; + speed: number; + velocity: { + x: number; + y: number; + }; + }; + preventDefault(): void; + /** + * Don't call listeners on the remaining targets + */ + stopImmediatePropagation(): void; + /** + * Don't call any other listeners (even on the current target) + */ + stopPropagation(): void; +} diff --git a/packages/@interactjs/core/InteractEvent.js b/packages/@interactjs/core/InteractEvent.js new file mode 100644 index 000000000..2cff66625 --- /dev/null +++ b/packages/@interactjs/core/InteractEvent.js @@ -0,0 +1,216 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.InteractEvent = void 0; +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _getOriginXY = _interopRequireDefault(require("../utils/getOriginXY.js")); +var _hypot = _interopRequireDefault(require("../utils/hypot.js")); +var _BaseEvent = require("./BaseEvent"); +var _options = require("./options"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// defined outside of class definition to avoid assignment of undefined during +// construction + +class InteractEvent extends _BaseEvent.BaseEvent { + relatedTarget = null; + screenX; + screenY; + button; + buttons; + ctrlKey; + shiftKey; + altKey; + metaKey; + page; + client; + delta; + rect; + x0; + y0; + t0; + dt; + duration; + clientX0; + clientY0; + velocity; + speed; + swipe; + // resize + axes; + /** @internal */ + preEnd; + constructor(interaction, event, actionName, phase, element, preEnd, type) { + super(interaction); + element = element || interaction.element; + const target = interaction.interactable; + const deltaSource = (target && target.options || _options.defaults).deltaSource; + const origin = (0, _getOriginXY.default)(target, element, actionName); + const starting = phase === 'start'; + const ending = phase === 'end'; + const prevEvent = starting ? this : interaction.prevEvent; + const coords = starting ? interaction.coords.start : ending ? { + page: prevEvent.page, + client: prevEvent.client, + timeStamp: interaction.coords.cur.timeStamp + } : interaction.coords.cur; + this.page = (0, _extend.default)({}, coords.page); + this.client = (0, _extend.default)({}, coords.client); + this.rect = (0, _extend.default)({}, interaction.rect); + this.timeStamp = coords.timeStamp; + if (!ending) { + this.page.x -= origin.x; + this.page.y -= origin.y; + this.client.x -= origin.x; + this.client.y -= origin.y; + } + this.ctrlKey = event.ctrlKey; + this.altKey = event.altKey; + this.shiftKey = event.shiftKey; + this.metaKey = event.metaKey; + this.button = event.button; + this.buttons = event.buttons; + this.target = element; + this.currentTarget = element; + this.preEnd = preEnd; + this.type = type || actionName + (phase || ''); + this.interactable = target; + this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0; + this.x0 = interaction.coords.start.page.x - origin.x; + this.y0 = interaction.coords.start.page.y - origin.y; + this.clientX0 = interaction.coords.start.client.x - origin.x; + this.clientY0 = interaction.coords.start.client.y - origin.y; + if (starting || ending) { + this.delta = { + x: 0, + y: 0 + }; + } else { + this.delta = { + x: this[deltaSource].x - prevEvent[deltaSource].x, + y: this[deltaSource].y - prevEvent[deltaSource].y + }; + } + this.dt = interaction.coords.delta.timeStamp; + this.duration = this.timeStamp - this.t0; + + // velocity and speed in pixels per second + this.velocity = (0, _extend.default)({}, interaction.coords.velocity[deltaSource]); + this.speed = (0, _hypot.default)(this.velocity.x, this.velocity.y); + this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null; + } + getSwipe() { + const interaction = this._interaction; + if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) { + return null; + } + let angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI; + const overlap = 22.5; + if (angle < 0) { + angle += 360; + } + const left = 135 - overlap <= angle && angle < 225 + overlap; + const up = 225 - overlap <= angle && angle < 315 + overlap; + const right = !left && (315 - overlap <= angle || angle < 45 + overlap); + const down = !up && 45 - overlap <= angle && angle < 135 + overlap; + return { + up, + down, + left, + right, + angle, + speed: interaction.prevEvent.speed, + velocity: { + x: interaction.prevEvent.velocityX, + y: interaction.prevEvent.velocityY + } + }; + } + preventDefault() {} + + /** + * Don't call listeners on the remaining targets + */ + stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + + /** + * Don't call any other listeners (even on the current target) + */ + stopPropagation() { + this.propagationStopped = true; + } +} + +// getters and setters defined here to support typescript 3.6 and below which +// don't support getter and setters in .d.ts files +exports.InteractEvent = InteractEvent; +Object.defineProperties(InteractEvent.prototype, { + pageX: { + get() { + return this.page.x; + }, + set(value) { + this.page.x = value; + } + }, + pageY: { + get() { + return this.page.y; + }, + set(value) { + this.page.y = value; + } + }, + clientX: { + get() { + return this.client.x; + }, + set(value) { + this.client.x = value; + } + }, + clientY: { + get() { + return this.client.y; + }, + set(value) { + this.client.y = value; + } + }, + dx: { + get() { + return this.delta.x; + }, + set(value) { + this.delta.x = value; + } + }, + dy: { + get() { + return this.delta.y; + }, + set(value) { + this.delta.y = value; + } + }, + velocityX: { + get() { + return this.velocity.x; + }, + set(value) { + this.velocity.x = value; + } + }, + velocityY: { + get() { + return this.velocity.y; + }, + set(value) { + this.velocity.y = value; + } + } +}); +//# sourceMappingURL=InteractEvent.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/InteractEvent.js.map b/packages/@interactjs/core/InteractEvent.js.map new file mode 100644 index 000000000..eb3b484ce --- /dev/null +++ b/packages/@interactjs/core/InteractEvent.js.map @@ -0,0 +1,109 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "_getOriginXY", + "_hypot", + "_BaseEvent", + "_options", + "obj", + "__esModule", + "default", + "InteractEvent", + "BaseEvent", + "relatedTarget", + "screenX", + "screenY", + "button", + "buttons", + "ctrlKey", + "shiftKey", + "altKey", + "metaKey", + "page", + "client", + "delta", + "rect", + "x0", + "y0", + "t0", + "dt", + "duration", + "clientX0", + "clientY0", + "velocity", + "speed", + "swipe", + "axes", + "preEnd", + "constructor", + "interaction", + "event", + "actionName", + "phase", + "element", + "type", + "target", + "interactable", + "deltaSource", + "options", + "defaults", + "origin", + "getOriginXY", + "starting", + "ending", + "prevEvent", + "coords", + "start", + "timeStamp", + "cur", + "extend", + "x", + "y", + "currentTarget", + "pointers", + "length", + "downTime", + "hypot", + "getSwipe", + "_interaction", + "angle", + "Math", + "atan2", + "velocityY", + "velocityX", + "PI", + "overlap", + "left", + "up", + "right", + "down", + "preventDefault", + "stopImmediatePropagation", + "immediatePropagationStopped", + "propagationStopped", + "stopPropagation", + "exports", + "Object", + "defineProperties", + "prototype", + "pageX", + "get", + "set", + "value", + "pageY", + "clientX", + "clientY", + "dx", + "dy" + ], + "sources": [ + "InteractEvent.ts" + ], + "sourcesContent": [ + "import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n start: true\n move: true\n end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n pageX: number\n pageY: number\n\n clientX: number\n clientY: number\n\n dx: number\n dy: number\n\n velocityX: number\n velocityY: number\n}\n\nexport class InteractEvent<\n T extends ActionName = never,\n P extends EventPhase = EventPhase,\n> extends BaseEvent {\n declare target: Element\n declare currentTarget: Element\n relatedTarget: Element | null = null\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Point\n client: Point\n delta: Point\n rect: FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Point\n speed: number\n swipe: ReturnType['getSwipe']>\n // resize\n axes?: 'x' | 'y' | 'xy'\n /** @internal */\n preEnd?: boolean\n\n constructor(\n interaction: Interaction,\n event: PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.preEnd = preEnd\n this.type = type || actionName + (phase || '')\n this.interactable = target\n\n this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n } else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n }\n\n getSwipe() {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault() {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n pageX: {\n get() {\n return this.page.x\n },\n set(value) {\n this.page.x = value\n },\n },\n pageY: {\n get() {\n return this.page.y\n },\n set(value) {\n this.page.y = value\n },\n },\n\n clientX: {\n get() {\n return this.client.x\n },\n set(value) {\n this.client.x = value\n },\n },\n clientY: {\n get() {\n return this.client.y\n },\n set(value) {\n this.client.y = value\n },\n },\n\n dx: {\n get() {\n return this.delta.x\n },\n set(value) {\n this.delta.x = value\n },\n },\n dy: {\n get() {\n return this.delta.y\n },\n set(value) {\n this.delta.y = value\n },\n },\n\n velocityX: {\n get() {\n return this.velocity.x\n },\n set(value) {\n this.velocity.x = value\n },\n },\n velocityY: {\n get() {\n return this.velocity.y\n },\n set(value) {\n this.velocity.y = value\n },\n },\n})\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/InteractEvent.prod.js b/packages/@interactjs/core/InteractEvent.prod.js new file mode 100644 index 000000000..1fc5341d9 --- /dev/null +++ b/packages/@interactjs/core/InteractEvent.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.InteractEvent=void 0;var t=n(require("../utils/extend.prod.js")),e=n(require("../utils/getOriginXY.prod.js")),i=n(require("../utils/hypot.prod.js")),s=require("./BaseEvent"),r=require("./options");function n(t){return t&&t.__esModule?t:{default:t}}class a extends s.BaseEvent{relatedTarget=null;screenX;screenY;button;buttons;ctrlKey;shiftKey;altKey;metaKey;page;client;delta;rect;x0;y0;t0;dt;duration;clientX0;clientY0;velocity;speed;swipe;axes;preEnd;constructor(s,n,a,o,l,p,c){super(s),l=l||s.element;const h=s.interactable,d=(h&&h.options||r.defaults).deltaSource,y=(0,e.default)(h,l,a),u="start"===o,v="end"===o,g=u?this:s.prevEvent,x=u?s.coords.start:v?{page:g.page,client:g.client,timeStamp:s.coords.cur.timeStamp}:s.coords.cur;this.page=(0,t.default)({},x.page),this.client=(0,t.default)({},x.client),this.rect=(0,t.default)({},s.rect),this.timeStamp=x.timeStamp,v||(this.page.x-=y.x,this.page.y-=y.y,this.client.x-=y.x,this.client.y-=y.y),this.ctrlKey=n.ctrlKey,this.altKey=n.altKey,this.shiftKey=n.shiftKey,this.metaKey=n.metaKey,this.button=n.button,this.buttons=n.buttons,this.target=l,this.currentTarget=l,this.preEnd=p,this.type=c||a+(o||""),this.interactable=h,this.t0=u?s.pointers[s.pointers.length-1].downTime:g.t0,this.x0=s.coords.start.page.x-y.x,this.y0=s.coords.start.page.y-y.y,this.clientX0=s.coords.start.client.x-y.x,this.clientY0=s.coords.start.client.y-y.y,this.delta=u||v?{x:0,y:0}:{x:this[d].x-g[d].x,y:this[d].y-g[d].y},this.dt=s.coords.delta.timeStamp,this.duration=this.timeStamp-this.t0,this.velocity=(0,t.default)({},s.coords.velocity[d]),this.speed=(0,i.default)(this.velocity.x,this.velocity.y),this.swipe=v||"inertiastart"===o?this.getSwipe():null}getSwipe(){const t=this._interaction;if(t.prevEvent.speed<600||this.timeStamp-t.prevEvent.timeStamp>150)return null;let e=180*Math.atan2(t.prevEvent.velocityY,t.prevEvent.velocityX)/Math.PI;e<0&&(e+=360);const i=112.5<=e&&e<247.5,s=202.5<=e&&e<337.5;return{up:s,down:!s&&22.5<=e&&e<157.5,left:i,right:!i&&(292.5<=e||e<67.5),angle:e,speed:t.prevEvent.speed,velocity:{x:t.prevEvent.velocityX,y:t.prevEvent.velocityY}}}preventDefault(){}stopImmediatePropagation(){this.immediatePropagationStopped=this.propagationStopped=!0}stopPropagation(){this.propagationStopped=!0}}exports.InteractEvent=a,Object.defineProperties(a.prototype,{pageX:{get(){return this.page.x},set(t){this.page.x=t}},pageY:{get(){return this.page.y},set(t){this.page.y=t}},clientX:{get(){return this.client.x},set(t){this.client.x=t}},clientY:{get(){return this.client.y},set(t){this.client.y=t}},dx:{get(){return this.delta.x},set(t){this.delta.x=t}},dy:{get(){return this.delta.y},set(t){this.delta.y=t}},velocityX:{get(){return this.velocity.x},set(t){this.velocity.x=t}},velocityY:{get(){return this.velocity.y},set(t){this.velocity.y=t}}}); +//# sourceMappingURL=InteractEvent.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/InteractEvent.prod.js.map b/packages/@interactjs/core/InteractEvent.prod.js.map new file mode 100644 index 000000000..ff0efbeea --- /dev/null +++ b/packages/@interactjs/core/InteractEvent.prod.js.map @@ -0,0 +1,110 @@ +{ + "version": 3, + "names": [ + "_extendProd", + "_interopRequireDefault", + "require", + "_getOriginXYProd", + "_hypotProd", + "_BaseEvent", + "_options", + "obj", + "__esModule", + "default", + "InteractEvent", + "BaseEvent", + "relatedTarget", + "screenX", + "screenY", + "button", + "buttons", + "ctrlKey", + "shiftKey", + "altKey", + "metaKey", + "page", + "client", + "delta", + "rect", + "x0", + "y0", + "t0", + "dt", + "duration", + "clientX0", + "clientY0", + "velocity", + "speed", + "swipe", + "axes", + "preEnd", + "constructor", + "interaction", + "event", + "actionName", + "phase", + "element", + "type", + "super", + "target", + "interactable", + "deltaSource", + "options", + "defaults", + "origin", + "getOriginXY", + "starting", + "ending", + "prevEvent", + "this", + "coords", + "start", + "timeStamp", + "cur", + "extend", + "x", + "y", + "currentTarget", + "pointers", + "length", + "downTime", + "hypot", + "getSwipe", + "_interaction", + "angle", + "Math", + "atan2", + "velocityY", + "velocityX", + "PI", + "left", + "up", + "down", + "right", + "preventDefault", + "stopImmediatePropagation", + "immediatePropagationStopped", + "propagationStopped", + "stopPropagation", + "exports", + "Object", + "defineProperties", + "prototype", + "pageX", + "get", + "set", + "value", + "pageY", + "clientX", + "clientY", + "dx", + "dy" + ], + "sources": [ + "InteractEvent.ts" + ], + "sourcesContent": [ + "import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n start: true\n move: true\n end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n pageX: number\n pageY: number\n\n clientX: number\n clientY: number\n\n dx: number\n dy: number\n\n velocityX: number\n velocityY: number\n}\n\nexport class InteractEvent<\n T extends ActionName = never,\n P extends EventPhase = EventPhase,\n> extends BaseEvent {\n declare target: Element\n declare currentTarget: Element\n relatedTarget: Element | null = null\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Point\n client: Point\n delta: Point\n rect: FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Point\n speed: number\n swipe: ReturnType['getSwipe']>\n // resize\n axes?: 'x' | 'y' | 'xy'\n /** @internal */\n preEnd?: boolean\n\n constructor(\n interaction: Interaction,\n event: PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.preEnd = preEnd\n this.type = type || actionName + (phase || '')\n this.interactable = target\n\n this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n } else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n }\n\n getSwipe() {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault() {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n pageX: {\n get() {\n return this.page.x\n },\n set(value) {\n this.page.x = value\n },\n },\n pageY: {\n get() {\n return this.page.y\n },\n set(value) {\n this.page.y = value\n },\n },\n\n clientX: {\n get() {\n return this.client.x\n },\n set(value) {\n this.client.x = value\n },\n },\n clientY: {\n get() {\n return this.client.y\n },\n set(value) {\n this.client.y = value\n },\n },\n\n dx: {\n get() {\n return this.delta.x\n },\n set(value) {\n this.delta.x = value\n },\n },\n dy: {\n get() {\n return this.delta.y\n },\n set(value) {\n this.delta.y = value\n },\n },\n\n velocityX: {\n get() {\n return this.velocity.x\n },\n set(value) {\n this.velocity.x = value\n },\n },\n velocityY: {\n get() {\n return this.velocity.y\n },\n set(value) {\n this.velocity.y = value\n },\n },\n})\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/InteractStatic.d.ts b/packages/@interactjs/core/InteractStatic.d.ts new file mode 100644 index 000000000..9ac1d5bd5 --- /dev/null +++ b/packages/@interactjs/core/InteractStatic.d.ts @@ -0,0 +1,80 @@ +import * as domUtils from '@interactjs/utils/domUtils'; +import * as pointerUtils from '@interactjs/utils/pointerUtils'; +import type { Scope, Plugin } from '@interactjs/core/scope'; +import type { EventTypes, ListenersArg, Target } from '@interactjs/core/types'; +import type { Interactable } from './Interactable'; +import type { Options } from './options'; +/** + * ```js + * interact('#draggable').draggable(true) + * + * var rectables = interact('rect') + * rectables + * .gesturable(true) + * .on('gesturemove', function (event) { + * // ... + * }) + * ``` + * + * The methods of this variable can be used to set elements as interactables + * and also to change various default settings. + * + * Calling it as a function and passing an element or a valid CSS selector + * string returns an Interactable object which has various methods to configure + * it. + * + * @param {Element | string} target The HTML or SVG Element to interact with + * or CSS selector + * @return {Interactable} + */ +export interface InteractStatic { + (target: Target, options?: Options): Interactable; + getPointerAverage: typeof pointerUtils.pointerAverage; + getTouchBBox: typeof pointerUtils.touchBBox; + getTouchDistance: typeof pointerUtils.touchDistance; + getTouchAngle: typeof pointerUtils.touchAngle; + getElementRect: typeof domUtils.getElementRect; + getElementClientRect: typeof domUtils.getElementClientRect; + matchesSelector: typeof domUtils.matchesSelector; + closest: typeof domUtils.closest; + version: string; + /** + * Use a plugin + */ + use(plugin: Plugin, options?: { + [key: string]: any; + }): any; + /** + * Check if an element or selector has been set with the `interact(target)` + * function + * + * @return {boolean} Indicates if the element or CSS selector was previously + * passed to interact + */ + isSet(target: Target, options?: any): boolean; + on(type: string | EventTypes, listener: ListenersArg, options?: object): any; + off(type: EventTypes, listener: any, options?: object): any; + debug(): any; + /** + * Whether or not the browser supports touch input + */ + supportsTouch(): boolean; + /** + * Whether or not the browser supports PointerEvents + */ + supportsPointerEvent(): boolean; + /** + * Cancels all interactions (end events are not fired) + */ + stop(): InteractStatic; + /** + * Returns or sets the distance the pointer must be moved before an action + * sequence occurs. This also affects tolerance for tap events. + */ + pointerMoveTolerance( + /** The movement from the start position must be greater than this value */ + newValue?: number): InteractStatic | number; + addDocument(doc: Document, options?: object): void; + removeDocument(doc: Document): void; +} +export declare function createInteractStatic(scope: Scope): InteractStatic; diff --git a/packages/@interactjs/core/InteractStatic.js b/packages/@interactjs/core/InteractStatic.js new file mode 100644 index 000000000..24edf2f76 --- /dev/null +++ b/packages/@interactjs/core/InteractStatic.js @@ -0,0 +1,161 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createInteractStatic = createInteractStatic; +var _browser = _interopRequireDefault(require("../utils/browser.js")); +var domUtils = _interopRequireWildcard(require("../utils/domUtils.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _isNonNativeEvent = _interopRequireDefault(require("../utils/isNonNativeEvent.js")); +var _misc = require("../utils/misc.js"); +var pointerUtils = _interopRequireWildcard(require("../utils/pointerUtils.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * ```js + * interact('#draggable').draggable(true) + * + * var rectables = interact('rect') + * rectables + * .gesturable(true) + * .on('gesturemove', function (event) { + * // ... + * }) + * ``` + * + * The methods of this variable can be used to set elements as interactables + * and also to change various default settings. + * + * Calling it as a function and passing an element or a valid CSS selector + * string returns an Interactable object which has various methods to configure + * it. + * + * @param {Element | string} target The HTML or SVG Element to interact with + * or CSS selector + * @return {Interactable} + */ + +function createInteractStatic(scope) { + const interact = (target, options) => { + let interactable = scope.interactables.getExisting(target, options); + if (!interactable) { + interactable = scope.interactables.new(target, options); + interactable.events.global = interact.globalEvents; + } + return interactable; + }; + + // expose the functions used to calculate multi-touch properties + interact.getPointerAverage = pointerUtils.pointerAverage; + interact.getTouchBBox = pointerUtils.touchBBox; + interact.getTouchDistance = pointerUtils.touchDistance; + interact.getTouchAngle = pointerUtils.touchAngle; + interact.getElementRect = domUtils.getElementRect; + interact.getElementClientRect = domUtils.getElementClientRect; + interact.matchesSelector = domUtils.matchesSelector; + interact.closest = domUtils.closest; + interact.globalEvents = {}; + + // eslint-disable-next-line no-undef + interact.version = "1.10.25"; + interact.scope = scope; + interact.use = function (plugin, options) { + this.scope.usePlugin(plugin, options); + return this; + }; + interact.isSet = function (target, options) { + return !!this.scope.interactables.get(target, options && options.context); + }; + interact.on = (0, _misc.warnOnce)(function on(type, listener, options) { + if (_is.default.string(type) && type.search(' ') !== -1) { + type = type.trim().split(/ +/); + } + if (_is.default.array(type)) { + for (const eventType of type) { + this.on(eventType, listener, options); + } + return this; + } + if (_is.default.object(type)) { + for (const prop in type) { + this.on(prop, type[prop], listener); + } + return this; + } + + // if it is an InteractEvent type, add listener to globalEvents + if ((0, _isNonNativeEvent.default)(type, this.scope.actions)) { + // if this type of event was never bound + if (!this.globalEvents[type]) { + this.globalEvents[type] = [listener]; + } else { + this.globalEvents[type].push(listener); + } + } + // If non InteractEvent type, addEventListener to document + else { + this.scope.events.add(this.scope.document, type, listener, { + options + }); + } + return this; + }, 'The interact.on() method is being deprecated'); + interact.off = (0, _misc.warnOnce)(function off(type, listener, options) { + if (_is.default.string(type) && type.search(' ') !== -1) { + type = type.trim().split(/ +/); + } + if (_is.default.array(type)) { + for (const eventType of type) { + this.off(eventType, listener, options); + } + return this; + } + if (_is.default.object(type)) { + for (const prop in type) { + this.off(prop, type[prop], listener); + } + return this; + } + if ((0, _isNonNativeEvent.default)(type, this.scope.actions)) { + let index; + if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) { + this.globalEvents[type].splice(index, 1); + } + } else { + this.scope.events.remove(this.scope.document, type, listener, options); + } + return this; + }, 'The interact.off() method is being deprecated'); + interact.debug = function () { + return this.scope; + }; + interact.supportsTouch = function () { + return _browser.default.supportsTouch; + }; + interact.supportsPointerEvent = function () { + return _browser.default.supportsPointerEvent; + }; + interact.stop = function () { + for (const interaction of this.scope.interactions.list) { + interaction.stop(); + } + return this; + }; + interact.pointerMoveTolerance = function (newValue) { + if (_is.default.number(newValue)) { + this.scope.interactions.pointerMoveTolerance = newValue; + return this; + } + return this.scope.interactions.pointerMoveTolerance; + }; + interact.addDocument = function (doc, options) { + this.scope.addDocument(doc, options); + }; + interact.removeDocument = function (doc) { + this.scope.removeDocument(doc); + }; + return interact; +} +//# sourceMappingURL=InteractStatic.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/InteractStatic.js.map b/packages/@interactjs/core/InteractStatic.js.map new file mode 100644 index 000000000..ded602fb9 --- /dev/null +++ b/packages/@interactjs/core/InteractStatic.js.map @@ -0,0 +1,110 @@ +{ + "version": 3, + "names": [ + "_browser", + "_interopRequireDefault", + "require", + "domUtils", + "_interopRequireWildcard", + "_is", + "_isNonNativeEvent", + "_misc", + "pointerUtils", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "createInteractStatic", + "scope", + "interact", + "target", + "options", + "interactable", + "interactables", + "getExisting", + "new", + "events", + "global", + "globalEvents", + "getPointerAverage", + "pointerAverage", + "getTouchBBox", + "touchBBox", + "getTouchDistance", + "touchDistance", + "getTouchAngle", + "touchAngle", + "getElementRect", + "getElementClientRect", + "matchesSelector", + "closest", + "version", + "use", + "plugin", + "usePlugin", + "isSet", + "context", + "on", + "warnOnce", + "type", + "listener", + "is", + "string", + "search", + "trim", + "split", + "array", + "eventType", + "object", + "prop", + "isNonNativeEvent", + "actions", + "push", + "add", + "document", + "off", + "index", + "indexOf", + "splice", + "remove", + "debug", + "supportsTouch", + "browser", + "supportsPointerEvent", + "stop", + "interaction", + "interactions", + "list", + "pointerMoveTolerance", + "newValue", + "number", + "addDocument", + "doc", + "removeDocument" + ], + "sources": [ + "InteractStatic.ts" + ], + "sourcesContent": [ + "import browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { Options } from './options'\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport interface InteractStatic {\n (target: Target, options?: Options): Interactable\n getPointerAverage: typeof pointerUtils.pointerAverage\n getTouchBBox: typeof pointerUtils.touchBBox\n getTouchDistance: typeof pointerUtils.touchDistance\n getTouchAngle: typeof pointerUtils.touchAngle\n getElementRect: typeof domUtils.getElementRect\n getElementClientRect: typeof domUtils.getElementClientRect\n matchesSelector: typeof domUtils.matchesSelector\n closest: typeof domUtils.closest\n /** @internal */ globalEvents: any\n version: string\n /** @internal */ scope: Scope\n /**\n * Use a plugin\n */\n use(\n plugin: Plugin,\n options?: {\n [key: string]: any\n },\n ): any\n /**\n * Check if an element or selector has been set with the `interact(target)`\n * function\n *\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\n isSet(\n /* The Element or string being searched for */\n target: Target,\n options?: any,\n ): boolean\n on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n off(type: EventTypes, listener: any, options?: object): any\n debug(): any\n /**\n * Whether or not the browser supports touch input\n */\n supportsTouch(): boolean\n /**\n * Whether or not the browser supports PointerEvents\n */\n supportsPointerEvent(): boolean\n /**\n * Cancels all interactions (end events are not fired)\n */\n stop(): InteractStatic\n /**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n */\n pointerMoveTolerance(\n /** The movement from the start position must be greater than this value */\n newValue?: number,\n ): InteractStatic | number\n addDocument(doc: Document, options?: object): void\n removeDocument(doc: Document): void\n}\n\nexport function createInteractStatic(scope: Scope): InteractStatic {\n const interact = ((target: Target, options: Options) => {\n let interactable = scope.interactables.getExisting(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = interact.globalEvents\n }\n\n return interactable\n }) as InteractStatic\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerUtils.pointerAverage\n interact.getTouchBBox = pointerUtils.touchBBox\n interact.getTouchDistance = pointerUtils.touchDistance\n interact.getTouchAngle = pointerUtils.touchAngle\n\n interact.getElementRect = domUtils.getElementRect\n interact.getElementClientRect = domUtils.getElementClientRect\n interact.matchesSelector = domUtils.matchesSelector\n interact.closest = domUtils.closest\n\n interact.globalEvents = {} as any\n\n // eslint-disable-next-line no-undef\n interact.version = process.env.npm_package_version\n interact.scope = scope\n interact.use = function (plugin, options) {\n this.scope.usePlugin(plugin, options)\n\n return this\n }\n\n interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n return !!this.scope.interactables.get(target, options && options.context)\n }\n\n interact.on = warnOnce(function on(type: string | EventTypes, listener: ListenersArg, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type as any[]) {\n this.on(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.on(prop, (type as any)[prop], listener)\n }\n\n return this\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (isNonNativeEvent(type, this.scope.actions)) {\n // if this type of event was never bound\n if (!this.globalEvents[type]) {\n this.globalEvents[type] = [listener]\n } else {\n this.globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n }\n\n return this\n }, 'The interact.on() method is being deprecated')\n\n interact.off = warnOnce(function off(type: EventTypes, listener: any, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type) {\n this.off(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.off(prop, type[prop], listener)\n }\n\n return this\n }\n\n if (isNonNativeEvent(type, this.scope.actions)) {\n let index: number\n\n if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n this.globalEvents[type].splice(index, 1)\n }\n } else {\n this.scope.events.remove(this.scope.document, type, listener, options)\n }\n\n return this\n }, 'The interact.off() method is being deprecated')\n\n interact.debug = function () {\n return this.scope\n }\n\n interact.supportsTouch = function () {\n return browser.supportsTouch\n }\n\n interact.supportsPointerEvent = function () {\n return browser.supportsPointerEvent\n }\n\n interact.stop = function () {\n for (const interaction of this.scope.interactions.list) {\n interaction.stop()\n }\n\n return this\n }\n\n interact.pointerMoveTolerance = function (newValue?: number) {\n if (is.number(newValue)) {\n this.scope.interactions.pointerMoveTolerance = newValue\n\n return this\n }\n\n return this.scope.interactions.pointerMoveTolerance\n }\n\n interact.addDocument = function (doc: Document, options?: object) {\n this.scope.addDocument(doc, options)\n }\n\n interact.removeDocument = function (doc: Document) {\n this.scope.removeDocument(doc)\n }\n\n return interact\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/InteractStatic.prod.js b/packages/@interactjs/core/InteractStatic.prod.js new file mode 100644 index 000000000..bb5a58936 --- /dev/null +++ b/packages/@interactjs/core/InteractStatic.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.createInteractStatic=function(i){const c=(e,t)=>{let n=i.interactables.getExisting(e,t);return n||(n=i.interactables.new(e,t),n.events.global=c.globalEvents),n};return c.getPointerAverage=s.pointerAverage,c.getTouchBBox=s.touchBBox,c.getTouchDistance=s.touchDistance,c.getTouchAngle=s.touchAngle,c.getElementRect=t.getElementRect,c.getElementClientRect=t.getElementClientRect,c.matchesSelector=t.matchesSelector,c.closest=t.closest,c.globalEvents={},c.version="1.10.25",c.scope=i,c.use=function(e,t){return this.scope.usePlugin(e,t),this},c.isSet=function(e,t){return!!this.scope.interactables.get(e,t&&t.context)},c.on=(0,r.warnOnce)((function(e,t,r){if(n.default.string(e)&&-1!==e.search(" ")&&(e=e.trim().split(/ +/)),n.default.array(e)){for(const n of e)this.on(n,t,r);return this}if(n.default.object(e)){for(const n in e)this.on(n,e[n],t);return this}return(0,o.default)(e,this.scope.actions)?this.globalEvents[e]?this.globalEvents[e].push(t):this.globalEvents[e]=[t]:this.scope.events.add(this.scope.document,e,t,{options:r}),this}),"The interact.on() method is being deprecated"),c.off=(0,r.warnOnce)((function(e,t,r){if(n.default.string(e)&&-1!==e.search(" ")&&(e=e.trim().split(/ +/)),n.default.array(e)){for(const n of e)this.off(n,t,r);return this}if(n.default.object(e)){for(const n in e)this.off(n,e[n],t);return this}if((0,o.default)(e,this.scope.actions)){let n;e in this.globalEvents&&-1!==(n=this.globalEvents[e].indexOf(t))&&this.globalEvents[e].splice(n,1)}else this.scope.events.remove(this.scope.document,e,t,r);return this}),"The interact.off() method is being deprecated"),c.debug=function(){return this.scope},c.supportsTouch=()=>e.default.supportsTouch,c.supportsPointerEvent=()=>e.default.supportsPointerEvent,c.stop=function(){for(const e of this.scope.interactions.list)e.stop();return this},c.pointerMoveTolerance=function(e){return n.default.number(e)?(this.scope.interactions.pointerMoveTolerance=e,this):this.scope.interactions.pointerMoveTolerance},c.addDocument=function(e,t){this.scope.addDocument(e,t)},c.removeDocument=function(e){this.scope.removeDocument(e)},c};var e=u(require("../utils/browser.prod.js")),t=c(require("../utils/domUtils.prod.js")),n=u(require("../utils/is.prod.js")),o=u(require("../utils/isNonNativeEvent.prod.js")),r=require("../utils/misc.prod.js"),s=c(require("../utils/pointerUtils.prod.js"));function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=e=>e?n:t)(e)}function c(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var c=r?Object.getOwnPropertyDescriptor(e,s):null;c&&(c.get||c.set)?Object.defineProperty(o,s,c):o[s]=e[s]}return o.default=e,n&&n.set(e,o),o}function u(e){return e&&e.__esModule?e:{default:e}} +//# sourceMappingURL=InteractStatic.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/InteractStatic.prod.js.map b/packages/@interactjs/core/InteractStatic.prod.js.map new file mode 100644 index 000000000..274da3209 --- /dev/null +++ b/packages/@interactjs/core/InteractStatic.prod.js.map @@ -0,0 +1,110 @@ +{ + "version": 3, + "names": [ + "scope", + "interact", + "target", + "options", + "interactable", + "interactables", + "getExisting", + "new", + "events", + "global", + "globalEvents", + "getPointerAverage", + "pointerUtils", + "pointerAverage", + "getTouchBBox", + "touchBBox", + "getTouchDistance", + "touchDistance", + "getTouchAngle", + "touchAngle", + "getElementRect", + "domUtils", + "getElementClientRect", + "matchesSelector", + "closest", + "version", + "use", + "plugin", + "this", + "usePlugin", + "isSet", + "get", + "context", + "on", + "warnOnce", + "type", + "listener", + "is", + "string", + "search", + "trim", + "split", + "array", + "eventType", + "object", + "prop", + "isNonNativeEvent", + "actions", + "push", + "add", + "document", + "off", + "index", + "indexOf", + "splice", + "remove", + "debug", + "supportsTouch", + "browser", + "supportsPointerEvent", + "stop", + "interaction", + "interactions", + "list", + "pointerMoveTolerance", + "newValue", + "number", + "addDocument", + "doc", + "removeDocument", + "_browserProd", + "_interopRequireDefault", + "require", + "_interopRequireWildcard", + "_isProd", + "_isNonNativeEventProd", + "_miscProd", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj" + ], + "sources": [ + "InteractStatic.ts" + ], + "sourcesContent": [ + "import browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { Options } from './options'\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport interface InteractStatic {\n (target: Target, options?: Options): Interactable\n getPointerAverage: typeof pointerUtils.pointerAverage\n getTouchBBox: typeof pointerUtils.touchBBox\n getTouchDistance: typeof pointerUtils.touchDistance\n getTouchAngle: typeof pointerUtils.touchAngle\n getElementRect: typeof domUtils.getElementRect\n getElementClientRect: typeof domUtils.getElementClientRect\n matchesSelector: typeof domUtils.matchesSelector\n closest: typeof domUtils.closest\n /** @internal */ globalEvents: any\n version: string\n /** @internal */ scope: Scope\n /**\n * Use a plugin\n */\n use(\n plugin: Plugin,\n options?: {\n [key: string]: any\n },\n ): any\n /**\n * Check if an element or selector has been set with the `interact(target)`\n * function\n *\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\n isSet(\n /* The Element or string being searched for */\n target: Target,\n options?: any,\n ): boolean\n on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n off(type: EventTypes, listener: any, options?: object): any\n debug(): any\n /**\n * Whether or not the browser supports touch input\n */\n supportsTouch(): boolean\n /**\n * Whether or not the browser supports PointerEvents\n */\n supportsPointerEvent(): boolean\n /**\n * Cancels all interactions (end events are not fired)\n */\n stop(): InteractStatic\n /**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n */\n pointerMoveTolerance(\n /** The movement from the start position must be greater than this value */\n newValue?: number,\n ): InteractStatic | number\n addDocument(doc: Document, options?: object): void\n removeDocument(doc: Document): void\n}\n\nexport function createInteractStatic(scope: Scope): InteractStatic {\n const interact = ((target: Target, options: Options) => {\n let interactable = scope.interactables.getExisting(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = interact.globalEvents\n }\n\n return interactable\n }) as InteractStatic\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerUtils.pointerAverage\n interact.getTouchBBox = pointerUtils.touchBBox\n interact.getTouchDistance = pointerUtils.touchDistance\n interact.getTouchAngle = pointerUtils.touchAngle\n\n interact.getElementRect = domUtils.getElementRect\n interact.getElementClientRect = domUtils.getElementClientRect\n interact.matchesSelector = domUtils.matchesSelector\n interact.closest = domUtils.closest\n\n interact.globalEvents = {} as any\n\n // eslint-disable-next-line no-undef\n interact.version = process.env.npm_package_version\n interact.scope = scope\n interact.use = function (plugin, options) {\n this.scope.usePlugin(plugin, options)\n\n return this\n }\n\n interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n return !!this.scope.interactables.get(target, options && options.context)\n }\n\n interact.on = warnOnce(function on(type: string | EventTypes, listener: ListenersArg, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type as any[]) {\n this.on(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.on(prop, (type as any)[prop], listener)\n }\n\n return this\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (isNonNativeEvent(type, this.scope.actions)) {\n // if this type of event was never bound\n if (!this.globalEvents[type]) {\n this.globalEvents[type] = [listener]\n } else {\n this.globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n }\n\n return this\n }, 'The interact.on() method is being deprecated')\n\n interact.off = warnOnce(function off(type: EventTypes, listener: any, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type) {\n this.off(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.off(prop, type[prop], listener)\n }\n\n return this\n }\n\n if (isNonNativeEvent(type, this.scope.actions)) {\n let index: number\n\n if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n this.globalEvents[type].splice(index, 1)\n }\n } else {\n this.scope.events.remove(this.scope.document, type, listener, options)\n }\n\n return this\n }, 'The interact.off() method is being deprecated')\n\n interact.debug = function () {\n return this.scope\n }\n\n interact.supportsTouch = function () {\n return browser.supportsTouch\n }\n\n interact.supportsPointerEvent = function () {\n return browser.supportsPointerEvent\n }\n\n interact.stop = function () {\n for (const interaction of this.scope.interactions.list) {\n interaction.stop()\n }\n\n return this\n }\n\n interact.pointerMoveTolerance = function (newValue?: number) {\n if (is.number(newValue)) {\n this.scope.interactions.pointerMoveTolerance = newValue\n\n return this\n }\n\n return this.scope.interactions.pointerMoveTolerance\n }\n\n interact.addDocument = function (doc: Document, options?: object) {\n this.scope.addDocument(doc, options)\n }\n\n interact.removeDocument = function (doc: Document) {\n this.scope.removeDocument(doc)\n }\n\n return interact\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/Interactable.d.ts b/packages/@interactjs/core/Interactable.d.ts new file mode 100644 index 000000000..a4feef60f --- /dev/null +++ b/packages/@interactjs/core/Interactable.d.ts @@ -0,0 +1,117 @@ +import type { Scope } from '@interactjs/core/scope'; +import type { ActionName, Context, Element, EventTypes, Listeners, ListenersArg, OrBoolean, Target } from '@interactjs/core/types'; +import { Eventable } from './Eventable'; +import type { OptionsArg, Options } from './options'; +type DeltaSource = 'page' | 'client'; +/** + * ```ts + * const interactable = interact('.cards') + * .draggable({ + * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) } + * }) + * .resizable({ + * listeners: { move: event => console.log(event.rect) }, + * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })] + * }) + * ``` + */ +export declare class Interactable implements Partial { + readonly target: Target; + constructor(target: Target, options: any, defaultContext: Document | Element, scopeEvents: Scope['events']); + setOnEvents(actionName: ActionName, phases: NonNullable): this; + updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined): void; + setPerAction(actionName: ActionName, options: OrBoolean): void; + /** + * The default function to get an Interactables bounding rect. Can be + * overridden using {@link Interactable.rectChecker}. + * + * @param {Element} [element] The element to measure. + * @return {Rect} The object's bounding rectangle. + */ + getRect(element: Element): Required; + /** + * Returns or sets the function used to calculate the interactable's + * element's rectangle + * + * @param {function} [checker] A function which returns this Interactable's + * bounding rectangle. See {@link Interactable.getRect} + * @return {function | object} The checker function or this Interactable + */ + rectChecker(): (element: Element) => any | null; + rectChecker(checker: (element: Element) => any): this; + /** + * Gets or sets the origin of the Interactable's element. The x and y + * of the origin will be subtracted from action event coordinates. + * + * @param {Element | object | string} [origin] An HTML or SVG Element whose + * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self' + * or any CSS selector + * + * @return {object} The current origin or this Interactable + */ + origin(newValue: any): any; + /** + * Returns or sets the mouse coordinate types used to calculate the + * movement of the pointer. + * + * @param {string} [newValue] Use 'client' if you will be scrolling while + * interacting; Use 'page' if you want autoScroll to work + * @return {string | object} The current deltaSource or this Interactable + */ + deltaSource(): DeltaSource; + deltaSource(newValue: DeltaSource): this; + /** + * Gets the selector context Node of the Interactable. The default is + * `window.document`. + * + * @return {Node} The context Node of this Interactable + */ + context(): Context; + inContext(element: Document | Node): boolean; + /** + * Calls listeners for the given InteractEvent type bound globally + * and directly to this Interactable + * + * @param {InteractEvent} iEvent The InteractEvent object to be fired on this + * Interactable + * @return {Interactable} this Interactable + */ + fire(iEvent: E): this; + /** + * Binds a listener for an InteractEvent, pointerEvent or DOM event. + * + * @param {string | array | object} types The types of events to listen + * for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * addEventListener + * @return {Interactable} This Interactable + */ + on(types: EventTypes, listener?: ListenersArg, options?: any): this; + /** + * Removes an InteractEvent, pointerEvent or DOM event listener. + * + * @param {string | array | object} types The types of events that were + * listened for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * removeEventListener + * @return {Interactable} This Interactable + */ + off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any): this; + /** + * Reset the options of this Interactable + * + * @param {object} options The new settings to apply + * @return {object} This Interactable + */ + set(options: OptionsArg): this; + /** + * Remove this interactable from the list of interactables and remove it's + * action capabilities and event listeners + */ + unset(): void; +} +export {}; diff --git a/packages/@interactjs/core/Interactable.js b/packages/@interactjs/core/Interactable.js new file mode 100644 index 000000000..7960cc5fd --- /dev/null +++ b/packages/@interactjs/core/Interactable.js @@ -0,0 +1,421 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Interactable = void 0; +var arr = _interopRequireWildcard(require("../utils/arr.js")); +var _browser = _interopRequireDefault(require("../utils/browser.js")); +var _clone = _interopRequireDefault(require("../utils/clone.js")); +var _domUtils = require("../utils/domUtils.js"); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _isNonNativeEvent = _interopRequireDefault(require("../utils/isNonNativeEvent.js")); +var _normalizeListeners = _interopRequireDefault(require("../utils/normalizeListeners.js")); +var _window = require("../utils/window.js"); +var _Eventable = require("./Eventable"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +/* eslint-disable no-dupe-class-members */ +var OnOffMethod = /*#__PURE__*/function (OnOffMethod) { + OnOffMethod[OnOffMethod["On"] = 0] = "On"; + OnOffMethod[OnOffMethod["Off"] = 1] = "Off"; + return OnOffMethod; +}(OnOffMethod || {}); +/** + * ```ts + * const interactable = interact('.cards') + * .draggable({ + * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) } + * }) + * .resizable({ + * listeners: { move: event => console.log(event.rect) }, + * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })] + * }) + * ``` + */ +class Interactable { + /** @internal */get _defaults() { + return { + base: {}, + perAction: {}, + actions: {} + }; + } + target; + /** @internal */ + options; + /** @internal */ + _actions; + /** @internal */ + events = new _Eventable.Eventable(); + /** @internal */ + _context; + /** @internal */ + _win; + /** @internal */ + _doc; + /** @internal */ + _scopeEvents; + constructor(target, options, defaultContext, scopeEvents) { + this._actions = options.actions; + this.target = target; + this._context = options.context || defaultContext; + this._win = (0, _window.getWindow)((0, _domUtils.trySelector)(target) ? this._context : target); + this._doc = this._win.document; + this._scopeEvents = scopeEvents; + this.set(options); + } + setOnEvents(actionName, phases) { + if (_is.default.func(phases.onstart)) { + this.on(`${actionName}start`, phases.onstart); + } + if (_is.default.func(phases.onmove)) { + this.on(`${actionName}move`, phases.onmove); + } + if (_is.default.func(phases.onend)) { + this.on(`${actionName}end`, phases.onend); + } + if (_is.default.func(phases.oninertiastart)) { + this.on(`${actionName}inertiastart`, phases.oninertiastart); + } + return this; + } + updatePerActionListeners(actionName, prev, cur) { + var _this$_actions$map$ac; + const actionFilter = (_this$_actions$map$ac = this._actions.map[actionName]) == null ? void 0 : _this$_actions$map$ac.filterEventType; + const filter = type => (actionFilter == null || actionFilter(type)) && (0, _isNonNativeEvent.default)(type, this._actions); + if (_is.default.array(prev) || _is.default.object(prev)) { + this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter); + } + if (_is.default.array(cur) || _is.default.object(cur)) { + this._onOff(OnOffMethod.On, actionName, cur, undefined, filter); + } + } + setPerAction(actionName, options) { + const defaults = this._defaults; + + // for all the default per-action options + for (const optionName_ in options) { + const optionName = optionName_; + const actionOptions = this.options[actionName]; + const optionValue = options[optionName]; + + // remove old event listeners and add new ones + if (optionName === 'listeners') { + this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue); + } + + // if the option value is an array + if (_is.default.array(optionValue)) { + ; + actionOptions[optionName] = arr.from(optionValue); + } + // if the option value is an object + else if (_is.default.plainObject(optionValue)) { + // copy the object + ; + actionOptions[optionName] = (0, _extend.default)(actionOptions[optionName] || {}, (0, _clone.default)(optionValue)); + + // set anabled field to true if it exists in the defaults + if (_is.default.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) { + ; + actionOptions[optionName].enabled = optionValue.enabled !== false; + } + } + // if the option value is a boolean and the default is an object + else if (_is.default.bool(optionValue) && _is.default.object(defaults.perAction[optionName])) { + ; + actionOptions[optionName].enabled = optionValue; + } + // if it's anything else, do a plain assignment + else { + ; + actionOptions[optionName] = optionValue; + } + } + } + + /** + * The default function to get an Interactables bounding rect. Can be + * overridden using {@link Interactable.rectChecker}. + * + * @param {Element} [element] The element to measure. + * @return {Rect} The object's bounding rectangle. + */ + getRect(element) { + element = element || (_is.default.element(this.target) ? this.target : null); + if (_is.default.string(this.target)) { + element = element || this._context.querySelector(this.target); + } + return (0, _domUtils.getElementRect)(element); + } + + /** + * Returns or sets the function used to calculate the interactable's + * element's rectangle + * + * @param {function} [checker] A function which returns this Interactable's + * bounding rectangle. See {@link Interactable.getRect} + * @return {function | object} The checker function or this Interactable + */ + + rectChecker(checker) { + if (_is.default.func(checker)) { + this.getRect = element => { + const rect = (0, _extend.default)({}, checker.apply(this, element)); + if (!('width' in rect)) { + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + return rect; + }; + return this; + } + if (checker === null) { + delete this.getRect; + return this; + } + return this.getRect; + } + + /** @internal */ + _backCompatOption(optionName, newValue) { + if ((0, _domUtils.trySelector)(newValue) || _is.default.object(newValue)) { + ; + this.options[optionName] = newValue; + for (const action in this._actions.map) { + ; + this.options[action][optionName] = newValue; + } + return this; + } + return this.options[optionName]; + } + + /** + * Gets or sets the origin of the Interactable's element. The x and y + * of the origin will be subtracted from action event coordinates. + * + * @param {Element | object | string} [origin] An HTML or SVG Element whose + * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self' + * or any CSS selector + * + * @return {object} The current origin or this Interactable + */ + origin(newValue) { + return this._backCompatOption('origin', newValue); + } + + /** + * Returns or sets the mouse coordinate types used to calculate the + * movement of the pointer. + * + * @param {string} [newValue] Use 'client' if you will be scrolling while + * interacting; Use 'page' if you want autoScroll to work + * @return {string | object} The current deltaSource or this Interactable + */ + + deltaSource(newValue) { + if (newValue === 'page' || newValue === 'client') { + this.options.deltaSource = newValue; + return this; + } + return this.options.deltaSource; + } + + /** @internal */ + getAllElements() { + const { + target + } = this; + if (_is.default.string(target)) { + return Array.from(this._context.querySelectorAll(target)); + } + if (_is.default.func(target) && target.getAllElements) { + return target.getAllElements(); + } + return _is.default.element(target) ? [target] : []; + } + + /** + * Gets the selector context Node of the Interactable. The default is + * `window.document`. + * + * @return {Node} The context Node of this Interactable + */ + context() { + return this._context; + } + inContext(element) { + return this._context === element.ownerDocument || (0, _domUtils.nodeContains)(this._context, element); + } + + /** @internal */ + testIgnoreAllow(options, targetNode, eventTarget) { + return !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && this.testAllow(options.allowFrom, targetNode, eventTarget); + } + + /** @internal */ + testAllow(allowFrom, targetNode, element) { + if (!allowFrom) { + return true; + } + if (!_is.default.element(element)) { + return false; + } + if (_is.default.string(allowFrom)) { + return (0, _domUtils.matchesUpTo)(element, allowFrom, targetNode); + } else if (_is.default.element(allowFrom)) { + return (0, _domUtils.nodeContains)(allowFrom, element); + } + return false; + } + + /** @internal */ + testIgnore(ignoreFrom, targetNode, element) { + if (!ignoreFrom || !_is.default.element(element)) { + return false; + } + if (_is.default.string(ignoreFrom)) { + return (0, _domUtils.matchesUpTo)(element, ignoreFrom, targetNode); + } else if (_is.default.element(ignoreFrom)) { + return (0, _domUtils.nodeContains)(ignoreFrom, element); + } + return false; + } + + /** + * Calls listeners for the given InteractEvent type bound globally + * and directly to this Interactable + * + * @param {InteractEvent} iEvent The InteractEvent object to be fired on this + * Interactable + * @return {Interactable} this Interactable + */ + fire(iEvent) { + this.events.fire(iEvent); + return this; + } + + /** @internal */ + _onOff(method, typeArg, listenerArg, options, filter) { + if (_is.default.object(typeArg) && !_is.default.array(typeArg)) { + options = listenerArg; + listenerArg = null; + } + const listeners = (0, _normalizeListeners.default)(typeArg, listenerArg, filter); + for (let type in listeners) { + if (type === 'wheel') { + type = _browser.default.wheelEvent; + } + for (const listener of listeners[type]) { + // if it is an action event type + if ((0, _isNonNativeEvent.default)(type, this._actions)) { + this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener); + } + // delegated event + else if (_is.default.string(this.target)) { + this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](this.target, this._context, type, listener, options); + } + // remove listener from this Interactable's element + else { + this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](this.target, type, listener, options); + } + } + } + return this; + } + + /** + * Binds a listener for an InteractEvent, pointerEvent or DOM event. + * + * @param {string | array | object} types The types of events to listen + * for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * addEventListener + * @return {Interactable} This Interactable + */ + on(types, listener, options) { + return this._onOff(OnOffMethod.On, types, listener, options); + } + + /** + * Removes an InteractEvent, pointerEvent or DOM event listener. + * + * @param {string | array | object} types The types of events that were + * listened for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * removeEventListener + * @return {Interactable} This Interactable + */ + off(types, listener, options) { + return this._onOff(OnOffMethod.Off, types, listener, options); + } + + /** + * Reset the options of this Interactable + * + * @param {object} options The new settings to apply + * @return {object} This Interactable + */ + set(options) { + const defaults = this._defaults; + if (!_is.default.object(options)) { + options = {}; + } + ; + this.options = (0, _clone.default)(defaults.base); + for (const actionName_ in this._actions.methodDict) { + const actionName = actionName_; + const methodName = this._actions.methodDict[actionName]; + this.options[actionName] = {}; + this.setPerAction(actionName, (0, _extend.default)((0, _extend.default)({}, defaults.perAction), defaults.actions[actionName])); + this[methodName](options[actionName]); + } + for (const setting in options) { + if (setting === 'getRect') { + this.rectChecker(options.getRect); + continue; + } + if (_is.default.func(this[setting])) { + ; + this[setting](options[setting]); + } + } + return this; + } + + /** + * Remove this interactable from the list of interactables and remove it's + * action capabilities and event listeners + */ + unset() { + if (_is.default.string(this.target)) { + // remove delegated events + for (const type in this._scopeEvents.delegatedEvents) { + const delegated = this._scopeEvents.delegatedEvents[type]; + for (let i = delegated.length - 1; i >= 0; i--) { + const { + selector, + context, + listeners + } = delegated[i]; + if (selector === this.target && context === this._context) { + delegated.splice(i, 1); + } + for (let l = listeners.length - 1; l >= 0; l--) { + this._scopeEvents.removeDelegate(this.target, this._context, type, listeners[l][0], listeners[l][1]); + } + } + } + } else { + this._scopeEvents.remove(this.target, 'all'); + } + } +} +exports.Interactable = Interactable; +//# sourceMappingURL=Interactable.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/Interactable.js.map b/packages/@interactjs/core/Interactable.js.map new file mode 100644 index 000000000..1efdeea5d --- /dev/null +++ b/packages/@interactjs/core/Interactable.js.map @@ -0,0 +1,167 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_browser", + "_interopRequireDefault", + "_clone", + "_domUtils", + "_extend", + "_is", + "_isNonNativeEvent", + "_normalizeListeners", + "_window", + "_Eventable", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "OnOffMethod", + "Interactable", + "_defaults", + "base", + "perAction", + "actions", + "target", + "options", + "_actions", + "events", + "Eventable", + "_context", + "_win", + "_doc", + "_scopeEvents", + "constructor", + "defaultContext", + "scopeEvents", + "context", + "getWindow", + "trySelector", + "document", + "setOnEvents", + "actionName", + "phases", + "is", + "func", + "onstart", + "on", + "onmove", + "onend", + "oninertiastart", + "updatePerActionListeners", + "prev", + "cur", + "_this$_actions$map$ac", + "actionFilter", + "map", + "filterEventType", + "filter", + "type", + "isNonNativeEvent", + "array", + "object", + "_onOff", + "Off", + "undefined", + "On", + "setPerAction", + "defaults", + "optionName_", + "optionName", + "actionOptions", + "optionValue", + "listeners", + "from", + "plainObject", + "extend", + "clone", + "enabled", + "bool", + "getRect", + "element", + "string", + "querySelector", + "getElementRect", + "rectChecker", + "checker", + "rect", + "apply", + "width", + "right", + "left", + "height", + "bottom", + "top", + "_backCompatOption", + "newValue", + "action", + "origin", + "deltaSource", + "getAllElements", + "Array", + "querySelectorAll", + "inContext", + "ownerDocument", + "nodeContains", + "testIgnoreAllow", + "targetNode", + "eventTarget", + "testIgnore", + "ignoreFrom", + "testAllow", + "allowFrom", + "matchesUpTo", + "fire", + "iEvent", + "method", + "typeArg", + "listenerArg", + "normalizeListeners", + "browser", + "wheelEvent", + "listener", + "types", + "off", + "actionName_", + "methodDict", + "methodName", + "setting", + "unset", + "delegatedEvents", + "delegated", + "length", + "selector", + "splice", + "l", + "removeDelegate", + "remove", + "exports" + ], + "sources": [ + "Interactable.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-dupe-class-members */\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n ActionMap,\n ActionMethod,\n ActionName,\n Actions,\n Context,\n Element,\n EventTypes,\n Listeners,\n ListenersArg,\n OrBoolean,\n Target,\n} from '@interactjs/core/types'\n\nimport { Eventable } from './Eventable'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\nconst enum OnOffMethod {\n On,\n Off,\n}\n\n/**\n * ```ts\n * const interactable = interact('.cards')\n * .draggable({\n * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) }\n * })\n * .resizable({\n * listeners: { move: event => console.log(event.rect) },\n * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })]\n * })\n * ```\n */\nexport class Interactable implements Partial {\n /** @internal */ get _defaults(): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly target: Target\n /** @internal */ readonly options!: Required\n /** @internal */ readonly _actions: Actions\n /** @internal */ readonly events = new Eventable()\n /** @internal */ readonly _context: Context\n /** @internal */ readonly _win: Window\n /** @internal */ readonly _doc: Document\n /** @internal */ readonly _scopeEvents: Scope['events']\n\n constructor(\n target: Target,\n options: any,\n defaultContext: Document | Element,\n scopeEvents: Scope['events'],\n ) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n this._scopeEvents = scopeEvents\n\n this.set(options)\n }\n\n setOnEvents(actionName: ActionName, phases: NonNullable) {\n if (is.func(phases.onstart)) {\n this.on(`${actionName}start`, phases.onstart)\n }\n if (is.func(phases.onmove)) {\n this.on(`${actionName}move`, phases.onmove)\n }\n if (is.func(phases.onend)) {\n this.on(`${actionName}end`, phases.onend)\n }\n if (is.func(phases.oninertiastart)) {\n this.on(`${actionName}inertiastart`, phases.oninertiastart)\n }\n\n return this\n }\n\n updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined) {\n const actionFilter = (this._actions.map[actionName] as { filterEventType?: (type: string) => boolean })\n ?.filterEventType\n const filter = (type: string) =>\n (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, this._actions)\n\n if (is.array(prev) || is.object(prev)) {\n this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this._onOff(OnOffMethod.On, actionName, cur, undefined, filter)\n }\n }\n\n setPerAction(actionName: ActionName, options: OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName_ in options) {\n const optionName = optionName_ as keyof PerActionDefaults\n const actionOptions = this.options[actionName]\n const optionValue: any = options[optionName]\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n }\n\n // if the option value is an array\n if (is.array(optionValue)) {\n ;(actionOptions[optionName] as any) = arr.from(optionValue)\n }\n // if the option value is an object\n else if (is.plainObject(optionValue)) {\n // copy the object\n ;(actionOptions[optionName] as any) = extend(\n actionOptions[optionName] || ({} as any),\n clone(optionValue),\n )\n\n // set anabled field to true if it exists in the defaults\n if (\n is.object(defaults.perAction[optionName]) &&\n 'enabled' in (defaults.perAction[optionName] as any)\n ) {\n ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n ;(actionOptions[optionName] as any).enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n ;(actionOptions[optionName] as any) = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {Rect} The object's bounding rectangle.\n */\n getRect(element: Element) {\n element = element || (is.element(this.target) ? this.target : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker(): (element: Element) => any | null\n rectChecker(checker: (element: Element) => any): this\n rectChecker(checker?: (element: Element) => any) {\n if (is.func(checker)) {\n this.getRect = (element) => {\n const rect = extend({}, checker.apply(this, element))\n\n if (!(('width' in rect) as unknown)) {\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n return rect\n }\n\n return this\n }\n\n if (checker === null) {\n delete (this as Partial).getRect\n\n return this\n }\n\n return this.getRect\n }\n\n /** @internal */\n _backCompatOption(optionName: keyof Options, newValue: any) {\n if (trySelector(newValue) || is.object(newValue)) {\n ;(this.options[optionName] as any) = newValue\n\n for (const action in this._actions.map) {\n ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin(newValue: any) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource(): DeltaSource\n deltaSource(newValue: DeltaSource): this\n deltaSource(newValue?: DeltaSource) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /** @internal */\n getAllElements(): Element[] {\n const { target } = this\n\n if (is.string(target)) {\n return Array.from(this._context.querySelectorAll(target))\n }\n\n if (is.func(target) && (target as any).getAllElements) {\n return (target as any).getAllElements()\n }\n\n return is.element(target) ? [target] : []\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context() {\n return this._context\n }\n\n inContext(element: Document | Node) {\n return this._context === element.ownerDocument || nodeContains(this._context, element)\n }\n\n /** @internal */\n testIgnoreAllow(\n this: Interactable,\n options: { ignoreFrom?: IgnoreValue; allowFrom?: IgnoreValue },\n targetNode: Node,\n eventTarget: Node,\n ) {\n return (\n !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget)\n )\n }\n\n /** @internal */\n testAllow(this: Interactable, allowFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!allowFrom) {\n return true\n }\n\n if (!is.element(element)) {\n return false\n }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n } else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n /** @internal */\n testIgnore(this: Interactable, ignoreFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!ignoreFrom || !is.element(element)) {\n return false\n }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n } else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire(iEvent: E) {\n this.events.fire(iEvent)\n\n return this\n }\n\n /** @internal */\n _onOff(\n method: OnOffMethod,\n typeArg: EventTypes,\n listenerArg?: ListenersArg | null,\n options?: any,\n filter?: (type: string) => boolean,\n ) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const listeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (let type in listeners) {\n if (type === 'wheel') {\n type = browser.wheelEvent\n }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (isNonNativeEvent(type, this._actions)) {\n this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](\n this.target,\n this._context,\n type,\n listener,\n options,\n )\n }\n // remove listener from this Interactable's element\n else {\n this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](\n this.target,\n type,\n listener,\n options,\n )\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on(types: EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.On, types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.Off, types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set(options: OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n ;(this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName_ in this._actions.methodDict) {\n const actionName = actionName_ as ActionName\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n ;(this[methodName] as ActionMethod)(options[actionName])\n }\n\n for (const setting in options) {\n if (setting === 'getRect') {\n this.rectChecker(options.getRect)\n continue\n }\n\n if (is.func((this as any)[setting])) {\n ;(this as any)[setting](options[setting as keyof typeof options])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n */\n unset() {\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in this._scopeEvents.delegatedEvents) {\n const delegated = this._scopeEvents.delegatedEvents[type]\n\n for (let i = delegated.length - 1; i >= 0; i--) {\n const { selector, context, listeners } = delegated[i]\n\n if (selector === this.target && context === this._context) {\n delegated.splice(i, 1)\n }\n\n for (let l = listeners.length - 1; l >= 0; l--) {\n this._scopeEvents.removeDelegate(\n this.target,\n this._context,\n type,\n listeners[l][0],\n listeners[l][1],\n )\n }\n }\n }\n } else {\n this._scopeEvents.remove(this.target, 'all')\n }\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/Interactable.prod.js b/packages/@interactjs/core/Interactable.prod.js new file mode 100644 index 000000000..ef7672764 --- /dev/null +++ b/packages/@interactjs/core/Interactable.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.Interactable=void 0;var t=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=f(e);if(n&&n.has(t))return n.get(t);var s={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var i=r?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(s,o,i):s[o]=t[o]}return s.default=t,n&&n.set(t,s),s})(require("../utils/arr.prod.js")),e=c(require("../utils/browser.prod.js")),n=c(require("../utils/clone.prod.js")),s=require("../utils/domUtils.prod.js"),r=c(require("../utils/extend.prod.js")),o=c(require("../utils/is.prod.js")),i=c(require("../utils/isNonNativeEvent.prod.js")),a=c(require("../utils/normalizeListeners.prod.js")),l=require("../utils/window.prod.js"),u=require("./Eventable");function c(t){return t&&t.__esModule?t:{default:t}}function f(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(f=t=>t?n:e)(t)}var d=(t=>(t[t.On=0]="On",t[t.Off=1]="Off",t))(d||{});exports.Interactable=class{get _defaults(){return{base:{},perAction:{},actions:{}}}target;options;_actions;events=new u.Eventable;_context;_win;_doc;_scopeEvents;constructor(t,e,n,r){this._actions=e.actions,this.target=t,this._context=e.context||n,this._win=(0,l.getWindow)((0,s.trySelector)(t)?this._context:t),this._doc=this._win.document,this._scopeEvents=r,this.set(e)}setOnEvents(t,e){return o.default.func(e.onstart)&&this.on(t+"start",e.onstart),o.default.func(e.onmove)&&this.on(t+"move",e.onmove),o.default.func(e.onend)&&this.on(t+"end",e.onend),o.default.func(e.oninertiastart)&&this.on(t+"inertiastart",e.oninertiastart),this}updatePerActionListeners(t,e,n){var s;const r=null==(s=this._actions.map[t])?void 0:s.filterEventType,a=t=>(null==r||r(t))&&(0,i.default)(t,this._actions);(o.default.array(e)||o.default.object(e))&&this._onOff(d.Off,t,e,void 0,a),(o.default.array(n)||o.default.object(n))&&this._onOff(d.On,t,n,void 0,a)}setPerAction(e,s){const i=this._defaults;for(const a in s){const l=a,u=this.options[e],c=s[l];"listeners"===l&&this.updatePerActionListeners(e,u.listeners,c),o.default.array(c)?u[l]=t.from(c):o.default.plainObject(c)?(u[l]=(0,r.default)(u[l]||{},(0,n.default)(c)),o.default.object(i.perAction[l])&&"enabled"in i.perAction[l]&&(u[l].enabled=!1!==c.enabled)):o.default.bool(c)&&o.default.object(i.perAction[l])?u[l].enabled=c:u[l]=c}}getRect(t){return t=t||(o.default.element(this.target)?this.target:null),o.default.string(this.target)&&(t=t||this._context.querySelector(this.target)),(0,s.getElementRect)(t)}rectChecker(t){return o.default.func(t)?(this.getRect=e=>{const n=(0,r.default)({},t.apply(this,e));return"width"in n||(n.width=n.right-n.left,n.height=n.bottom-n.top),n},this):null===t?(delete this.getRect,this):this.getRect}_backCompatOption(t,e){if((0,s.trySelector)(e)||o.default.object(e)){this.options[t]=e;for(const n in this._actions.map)this.options[n][t]=e;return this}return this.options[t]}origin(t){return this._backCompatOption("origin",t)}deltaSource(t){return"page"===t||"client"===t?(this.options.deltaSource=t,this):this.options.deltaSource}getAllElements(){const{target:t}=this;return o.default.string(t)?Array.from(this._context.querySelectorAll(t)):o.default.func(t)&&t.getAllElements?t.getAllElements():o.default.element(t)?[t]:[]}context(){return this._context}inContext(t){return this._context===t.ownerDocument||(0,s.nodeContains)(this._context,t)}testIgnoreAllow(t,e,n){return!this.testIgnore(t.ignoreFrom,e,n)&&this.testAllow(t.allowFrom,e,n)}testAllow(t,e,n){return!t||!!o.default.element(n)&&(o.default.string(t)?(0,s.matchesUpTo)(n,t,e):!!o.default.element(t)&&(0,s.nodeContains)(t,n))}testIgnore(t,e,n){return!(!t||!o.default.element(n))&&(o.default.string(t)?(0,s.matchesUpTo)(n,t,e):!!o.default.element(t)&&(0,s.nodeContains)(t,n))}fire(t){return this.events.fire(t),this}_onOff(t,n,s,r,l){o.default.object(n)&&!o.default.array(n)&&(r=s,s=null);const u=(0,a.default)(n,s,l);for(let n in u){"wheel"===n&&(n=e.default.wheelEvent);for(const e of u[n])(0,i.default)(n,this._actions)?this.events[t===d.On?"on":"off"](n,e):o.default.string(this.target)?this._scopeEvents[t===d.On?"addDelegate":"removeDelegate"](this.target,this._context,n,e,r):this._scopeEvents[t===d.On?"add":"remove"](this.target,n,e,r)}return this}on(t,e,n){return this._onOff(d.On,t,e,n)}off(t,e,n){return this._onOff(d.Off,t,e,n)}set(t){const e=this._defaults;o.default.object(t)||(t={}),this.options=(0,n.default)(e.base);for(const n in this._actions.methodDict){const s=n,o=this._actions.methodDict[s];this.options[s]={},this.setPerAction(s,(0,r.default)((0,r.default)({},e.perAction),e.actions[s])),this[o](t[s])}for(const e in t)"getRect"!==e?o.default.func(this[e])&&this[e](t[e]):this.rectChecker(t.getRect);return this}unset(){if(o.default.string(this.target))for(const t in this._scopeEvents.delegatedEvents){const e=this._scopeEvents.delegatedEvents[t];for(let n=e.length-1;n>=0;n--){const{selector:s,context:r,listeners:o}=e[n];s===this.target&&r===this._context&&e.splice(n,1);for(let e=o.length-1;e>=0;e--)this._scopeEvents.removeDelegate(this.target,this._context,t,o[e][0],o[e][1])}}else this._scopeEvents.remove(this.target,"all")}}; +//# sourceMappingURL=Interactable.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/Interactable.prod.js.map b/packages/@interactjs/core/Interactable.prod.js.map new file mode 100644 index 000000000..940bf54ba --- /dev/null +++ b/packages/@interactjs/core/Interactable.prod.js.map @@ -0,0 +1,168 @@ +{ + "version": 3, + "names": [ + "arr", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_browserProd", + "_interopRequireDefault", + "_cloneProd", + "_domUtilsProd", + "_extendProd", + "_isProd", + "_isNonNativeEventProd", + "_normalizeListenersProd", + "_windowProd", + "_Eventable", + "obj", + "WeakMap", + "OnOffMethod", + "exports", + "Interactable", + "_defaults", + "base", + "perAction", + "actions", + "target", + "options", + "_actions", + "events", + "Eventable", + "_context", + "_win", + "_doc", + "_scopeEvents", + "constructor", + "defaultContext", + "scopeEvents", + "this", + "context", + "getWindow", + "trySelector", + "document", + "setOnEvents", + "actionName", + "phases", + "is", + "func", + "onstart", + "on", + "onmove", + "onend", + "oninertiastart", + "updatePerActionListeners", + "prev", + "cur", + "_this$_actions$map$ac", + "actionFilter", + "map", + "filterEventType", + "filter", + "type", + "isNonNativeEvent", + "array", + "object", + "_onOff", + "Off", + "undefined", + "On", + "setPerAction", + "defaults", + "optionName_", + "optionName", + "actionOptions", + "optionValue", + "listeners", + "from", + "plainObject", + "extend", + "clone", + "enabled", + "bool", + "getRect", + "element", + "string", + "querySelector", + "getElementRect", + "rectChecker", + "checker", + "rect", + "apply", + "width", + "right", + "left", + "height", + "bottom", + "top", + "_backCompatOption", + "newValue", + "action", + "origin", + "deltaSource", + "getAllElements", + "Array", + "querySelectorAll", + "inContext", + "ownerDocument", + "nodeContains", + "testIgnoreAllow", + "targetNode", + "eventTarget", + "testIgnore", + "ignoreFrom", + "testAllow", + "allowFrom", + "matchesUpTo", + "fire", + "iEvent", + "method", + "typeArg", + "listenerArg", + "normalizeListeners", + "browser", + "wheelEvent", + "listener", + "types", + "off", + "actionName_", + "methodDict", + "methodName", + "setting", + "unset", + "delegatedEvents", + "delegated", + "length", + "selector", + "splice", + "l", + "removeDelegate", + "remove" + ], + "sources": [ + "Interactable.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-dupe-class-members */\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n ActionMap,\n ActionMethod,\n ActionName,\n Actions,\n Context,\n Element,\n EventTypes,\n Listeners,\n ListenersArg,\n OrBoolean,\n Target,\n} from '@interactjs/core/types'\n\nimport { Eventable } from './Eventable'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\nconst enum OnOffMethod {\n On,\n Off,\n}\n\n/**\n * ```ts\n * const interactable = interact('.cards')\n * .draggable({\n * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) }\n * })\n * .resizable({\n * listeners: { move: event => console.log(event.rect) },\n * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })]\n * })\n * ```\n */\nexport class Interactable implements Partial {\n /** @internal */ get _defaults(): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly target: Target\n /** @internal */ readonly options!: Required\n /** @internal */ readonly _actions: Actions\n /** @internal */ readonly events = new Eventable()\n /** @internal */ readonly _context: Context\n /** @internal */ readonly _win: Window\n /** @internal */ readonly _doc: Document\n /** @internal */ readonly _scopeEvents: Scope['events']\n\n constructor(\n target: Target,\n options: any,\n defaultContext: Document | Element,\n scopeEvents: Scope['events'],\n ) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n this._scopeEvents = scopeEvents\n\n this.set(options)\n }\n\n setOnEvents(actionName: ActionName, phases: NonNullable) {\n if (is.func(phases.onstart)) {\n this.on(`${actionName}start`, phases.onstart)\n }\n if (is.func(phases.onmove)) {\n this.on(`${actionName}move`, phases.onmove)\n }\n if (is.func(phases.onend)) {\n this.on(`${actionName}end`, phases.onend)\n }\n if (is.func(phases.oninertiastart)) {\n this.on(`${actionName}inertiastart`, phases.oninertiastart)\n }\n\n return this\n }\n\n updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined) {\n const actionFilter = (this._actions.map[actionName] as { filterEventType?: (type: string) => boolean })\n ?.filterEventType\n const filter = (type: string) =>\n (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, this._actions)\n\n if (is.array(prev) || is.object(prev)) {\n this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this._onOff(OnOffMethod.On, actionName, cur, undefined, filter)\n }\n }\n\n setPerAction(actionName: ActionName, options: OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName_ in options) {\n const optionName = optionName_ as keyof PerActionDefaults\n const actionOptions = this.options[actionName]\n const optionValue: any = options[optionName]\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n }\n\n // if the option value is an array\n if (is.array(optionValue)) {\n ;(actionOptions[optionName] as any) = arr.from(optionValue)\n }\n // if the option value is an object\n else if (is.plainObject(optionValue)) {\n // copy the object\n ;(actionOptions[optionName] as any) = extend(\n actionOptions[optionName] || ({} as any),\n clone(optionValue),\n )\n\n // set anabled field to true if it exists in the defaults\n if (\n is.object(defaults.perAction[optionName]) &&\n 'enabled' in (defaults.perAction[optionName] as any)\n ) {\n ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n ;(actionOptions[optionName] as any).enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n ;(actionOptions[optionName] as any) = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {Rect} The object's bounding rectangle.\n */\n getRect(element: Element) {\n element = element || (is.element(this.target) ? this.target : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker(): (element: Element) => any | null\n rectChecker(checker: (element: Element) => any): this\n rectChecker(checker?: (element: Element) => any) {\n if (is.func(checker)) {\n this.getRect = (element) => {\n const rect = extend({}, checker.apply(this, element))\n\n if (!(('width' in rect) as unknown)) {\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n return rect\n }\n\n return this\n }\n\n if (checker === null) {\n delete (this as Partial).getRect\n\n return this\n }\n\n return this.getRect\n }\n\n /** @internal */\n _backCompatOption(optionName: keyof Options, newValue: any) {\n if (trySelector(newValue) || is.object(newValue)) {\n ;(this.options[optionName] as any) = newValue\n\n for (const action in this._actions.map) {\n ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin(newValue: any) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource(): DeltaSource\n deltaSource(newValue: DeltaSource): this\n deltaSource(newValue?: DeltaSource) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /** @internal */\n getAllElements(): Element[] {\n const { target } = this\n\n if (is.string(target)) {\n return Array.from(this._context.querySelectorAll(target))\n }\n\n if (is.func(target) && (target as any).getAllElements) {\n return (target as any).getAllElements()\n }\n\n return is.element(target) ? [target] : []\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context() {\n return this._context\n }\n\n inContext(element: Document | Node) {\n return this._context === element.ownerDocument || nodeContains(this._context, element)\n }\n\n /** @internal */\n testIgnoreAllow(\n this: Interactable,\n options: { ignoreFrom?: IgnoreValue; allowFrom?: IgnoreValue },\n targetNode: Node,\n eventTarget: Node,\n ) {\n return (\n !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget)\n )\n }\n\n /** @internal */\n testAllow(this: Interactable, allowFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!allowFrom) {\n return true\n }\n\n if (!is.element(element)) {\n return false\n }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n } else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n /** @internal */\n testIgnore(this: Interactable, ignoreFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!ignoreFrom || !is.element(element)) {\n return false\n }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n } else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire(iEvent: E) {\n this.events.fire(iEvent)\n\n return this\n }\n\n /** @internal */\n _onOff(\n method: OnOffMethod,\n typeArg: EventTypes,\n listenerArg?: ListenersArg | null,\n options?: any,\n filter?: (type: string) => boolean,\n ) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const listeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (let type in listeners) {\n if (type === 'wheel') {\n type = browser.wheelEvent\n }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (isNonNativeEvent(type, this._actions)) {\n this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](\n this.target,\n this._context,\n type,\n listener,\n options,\n )\n }\n // remove listener from this Interactable's element\n else {\n this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](\n this.target,\n type,\n listener,\n options,\n )\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on(types: EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.On, types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.Off, types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set(options: OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n ;(this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName_ in this._actions.methodDict) {\n const actionName = actionName_ as ActionName\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n ;(this[methodName] as ActionMethod)(options[actionName])\n }\n\n for (const setting in options) {\n if (setting === 'getRect') {\n this.rectChecker(options.getRect)\n continue\n }\n\n if (is.func((this as any)[setting])) {\n ;(this as any)[setting](options[setting as keyof typeof options])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n */\n unset() {\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in this._scopeEvents.delegatedEvents) {\n const delegated = this._scopeEvents.delegatedEvents[type]\n\n for (let i = delegated.length - 1; i >= 0; i--) {\n const { selector, context, listeners } = delegated[i]\n\n if (selector === this.target && context === this._context) {\n delegated.splice(i, 1)\n }\n\n for (let l = listeners.length - 1; l >= 0; l--) {\n this._scopeEvents.removeDelegate(\n this.target,\n this._context,\n type,\n listeners[l][0],\n listeners[l][1],\n )\n }\n }\n }\n } else {\n this._scopeEvents.remove(this.target, 'all')\n }\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/InteractableSet.d.ts b/packages/@interactjs/core/InteractableSet.d.ts new file mode 100644 index 000000000..d315ad11a --- /dev/null +++ b/packages/@interactjs/core/InteractableSet.d.ts @@ -0,0 +1,25 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type { OptionsArg, Options } from '@interactjs/core/options'; +import type { Scope } from '@interactjs/core/scope'; +import type { Target } from '@interactjs/core/types'; +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactable:new': { + interactable: Interactable; + target: Target; + options: OptionsArg; + win: Window; + }; + } +} +export declare class InteractableSet { + list: Interactable[]; + selectorMap: { + [selector: string]: Interactable[]; + }; + scope: Scope; + constructor(scope: Scope); + new(target: Target, options?: any): Interactable; + getExisting(target: Target, options?: Options): Interactable; + forEachMatch(node: Node, callback: (interactable: Interactable) => T): T | void; +} diff --git a/packages/@interactjs/core/InteractableSet.js b/packages/@interactjs/core/InteractableSet.js new file mode 100644 index 000000000..c833e9bc6 --- /dev/null +++ b/packages/@interactjs/core/InteractableSet.js @@ -0,0 +1,90 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.InteractableSet = void 0; +var arr = _interopRequireWildcard(require("../utils/arr.js")); +var domUtils = _interopRequireWildcard(require("../utils/domUtils.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class InteractableSet { + // all set interactables + list = []; + selectorMap = {}; + scope; + constructor(scope) { + this.scope = scope; + scope.addListeners({ + 'interactable:unset': ({ + interactable + }) => { + const { + target + } = interactable; + const interactablesOnTarget = _is.default.string(target) ? this.selectorMap[target] : target[this.scope.id]; + const targetIndex = arr.findIndex(interactablesOnTarget, i => i === interactable); + interactablesOnTarget.splice(targetIndex, 1); + } + }); + } + new(target, options) { + options = (0, _extend.default)(options || {}, { + actions: this.scope.actions + }); + const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events); + this.scope.addDocument(interactable._doc); + this.list.push(interactable); + if (_is.default.string(target)) { + if (!this.selectorMap[target]) { + this.selectorMap[target] = []; + } + this.selectorMap[target].push(interactable); + } else { + if (!interactable.target[this.scope.id]) { + Object.defineProperty(target, this.scope.id, { + value: [], + configurable: true + }); + } + ; + target[this.scope.id].push(interactable); + } + this.scope.fire('interactable:new', { + target, + options, + interactable, + win: this.scope._win + }); + return interactable; + } + getExisting(target, options) { + const context = options && options.context || this.scope.document; + const isSelector = _is.default.string(target); + const interactablesOnTarget = isSelector ? this.selectorMap[target] : target[this.scope.id]; + if (!interactablesOnTarget) return undefined; + return arr.find(interactablesOnTarget, interactable => interactable._context === context && (isSelector || interactable.inContext(target))); + } + forEachMatch(node, callback) { + for (const interactable of this.list) { + let ret; + if ((_is.default.string(interactable.target) ? + // target is a selector and the element matches + _is.default.element(node) && domUtils.matchesSelector(node, interactable.target) : + // target is the element + node === interactable.target) && + // the element is in context + interactable.inContext(node)) { + ret = callback(interactable); + } + if (ret !== undefined) { + return ret; + } + } + } +} +exports.InteractableSet = InteractableSet; +//# sourceMappingURL=InteractableSet.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/InteractableSet.js.map b/packages/@interactjs/core/InteractableSet.js.map new file mode 100644 index 000000000..abb1057d2 --- /dev/null +++ b/packages/@interactjs/core/InteractableSet.js.map @@ -0,0 +1,86 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "domUtils", + "_extend", + "_interopRequireDefault", + "_is", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "InteractableSet", + "list", + "selectorMap", + "scope", + "constructor", + "addListeners", + "interactable:unset", + "interactable", + "target", + "interactablesOnTarget", + "is", + "string", + "id", + "targetIndex", + "findIndex", + "splice", + "new", + "options", + "extend", + "actions", + "Interactable", + "document", + "events", + "addDocument", + "_doc", + "push", + "value", + "configurable", + "fire", + "win", + "_win", + "getExisting", + "context", + "isSelector", + "undefined", + "find", + "_context", + "inContext", + "forEachMatch", + "node", + "callback", + "ret", + "element", + "matchesSelector", + "exports" + ], + "sources": [ + "InteractableSet.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target } from '@interactjs/core/types'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interactable\n target: Target\n options: OptionsArg\n win: Window\n }\n }\n}\n\nexport class InteractableSet {\n // all set interactables\n list: Interactable[] = []\n\n selectorMap: {\n [selector: string]: Interactable[]\n } = {}\n\n scope: Scope\n\n constructor(scope: Scope) {\n this.scope = scope\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target } = interactable\n const interactablesOnTarget: Interactable[] = is.string(target)\n ? this.selectorMap[target]\n : (target as any)[this.scope.id]\n\n const targetIndex = arr.findIndex(interactablesOnTarget, (i) => i === interactable)\n interactablesOnTarget.splice(targetIndex, 1)\n },\n })\n }\n\n new(target: Target, options?: any): Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) {\n this.selectorMap[target] = []\n }\n this.selectorMap[target].push(interactable)\n } else {\n if (!(interactable.target as any)[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n ;(target as any)[this.scope.id].push(interactable)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n getExisting(target: Target, options?: Options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const interactablesOnTarget: Interactable[] = isSelector\n ? this.selectorMap[target as string]\n : (target as any)[this.scope.id]\n\n if (!interactablesOnTarget) return undefined\n\n return arr.find(\n interactablesOnTarget,\n (interactable) =>\n interactable._context === context && (isSelector || interactable.inContext(target as any)),\n )\n }\n\n forEachMatch(node: Node, callback: (interactable: Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret: T\n\n if (\n (is.string(interactable.target)\n ? // target is a selector and the element matches\n is.element(node) && domUtils.matchesSelector(node, interactable.target)\n : // target is the element\n node === interactable.target) &&\n // the element is in context\n interactable.inContext(node)\n ) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/InteractableSet.prod.js b/packages/@interactjs/core/InteractableSet.prod.js new file mode 100644 index 000000000..5bec8e60b --- /dev/null +++ b/packages/@interactjs/core/InteractableSet.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.InteractableSet=void 0;var e=n(require("../utils/arr.prod.js")),t=n(require("../utils/domUtils.prod.js")),r=i(require("../utils/extend.prod.js")),s=i(require("../utils/is.prod.js"));function i(e){return e&&e.__esModule?e:{default:e}}function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(o=e=>e?r:t)(e)}function n(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=o(t);if(r&&r.has(e))return r.get(e);var s={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in e)if("default"!==n&&Object.prototype.hasOwnProperty.call(e,n)){var c=i?Object.getOwnPropertyDescriptor(e,n):null;c&&(c.get||c.set)?Object.defineProperty(s,n,c):s[n]=e[n]}return s.default=e,r&&r.set(e,s),s}exports.InteractableSet=class{list=[];selectorMap={};scope;constructor(t){this.scope=t,t.addListeners({"interactable:unset":({interactable:t})=>{const{target:r}=t,i=s.default.string(r)?this.selectorMap[r]:r[this.scope.id],o=e.findIndex(i,(e=>e===t));i.splice(o,1)}})}new(e,t){t=(0,r.default)(t||{},{actions:this.scope.actions});const i=new this.scope.Interactable(e,t,this.scope.document,this.scope.events);return this.scope.addDocument(i._doc),this.list.push(i),s.default.string(e)?(this.selectorMap[e]||(this.selectorMap[e]=[]),this.selectorMap[e].push(i)):(i.target[this.scope.id]||Object.defineProperty(e,this.scope.id,{value:[],configurable:!0}),e[this.scope.id].push(i)),this.scope.fire("interactable:new",{target:e,options:t,interactable:i,win:this.scope._win}),i}getExisting(t,r){const i=r&&r.context||this.scope.document,o=s.default.string(t),n=o?this.selectorMap[t]:t[this.scope.id];if(n)return e.find(n,(e=>e._context===i&&(o||e.inContext(t))))}forEachMatch(e,r){for(const i of this.list){let o;if((s.default.string(i.target)?s.default.element(e)&&t.matchesSelector(e,i.target):e===i.target)&&i.inContext(e)&&(o=r(i)),void 0!==o)return o}}}; +//# sourceMappingURL=InteractableSet.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/InteractableSet.prod.js.map b/packages/@interactjs/core/InteractableSet.prod.js.map new file mode 100644 index 000000000..ee1ed370f --- /dev/null +++ b/packages/@interactjs/core/InteractableSet.prod.js.map @@ -0,0 +1,87 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "domUtils", + "_extendProd", + "_interopRequireDefault", + "_isProd", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "exports", + "InteractableSet", + "list", + "selectorMap", + "scope", + "constructor", + "this", + "addListeners", + "interactable:unset", + "interactable", + "target", + "interactablesOnTarget", + "is", + "string", + "id", + "targetIndex", + "findIndex", + "splice", + "new", + "options", + "extend", + "actions", + "Interactable", + "document", + "events", + "addDocument", + "_doc", + "push", + "value", + "configurable", + "fire", + "win", + "_win", + "getExisting", + "context", + "isSelector", + "find", + "_context", + "inContext", + "forEachMatch", + "node", + "callback", + "ret", + "element", + "matchesSelector", + "undefined" + ], + "sources": [ + "InteractableSet.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target } from '@interactjs/core/types'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interactable\n target: Target\n options: OptionsArg\n win: Window\n }\n }\n}\n\nexport class InteractableSet {\n // all set interactables\n list: Interactable[] = []\n\n selectorMap: {\n [selector: string]: Interactable[]\n } = {}\n\n scope: Scope\n\n constructor(scope: Scope) {\n this.scope = scope\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target } = interactable\n const interactablesOnTarget: Interactable[] = is.string(target)\n ? this.selectorMap[target]\n : (target as any)[this.scope.id]\n\n const targetIndex = arr.findIndex(interactablesOnTarget, (i) => i === interactable)\n interactablesOnTarget.splice(targetIndex, 1)\n },\n })\n }\n\n new(target: Target, options?: any): Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) {\n this.selectorMap[target] = []\n }\n this.selectorMap[target].push(interactable)\n } else {\n if (!(interactable.target as any)[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n ;(target as any)[this.scope.id].push(interactable)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n getExisting(target: Target, options?: Options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const interactablesOnTarget: Interactable[] = isSelector\n ? this.selectorMap[target as string]\n : (target as any)[this.scope.id]\n\n if (!interactablesOnTarget) return undefined\n\n return arr.find(\n interactablesOnTarget,\n (interactable) =>\n interactable._context === context && (isSelector || interactable.inContext(target as any)),\n )\n }\n\n forEachMatch(node: Node, callback: (interactable: Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret: T\n\n if (\n (is.string(interactable.target)\n ? // target is a selector and the element matches\n is.element(node) && domUtils.matchesSelector(node, interactable.target)\n : // target is the element\n node === interactable.target) &&\n // the element is in context\n interactable.inContext(node)\n ) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/Interaction.d.ts b/packages/@interactjs/core/Interaction.d.ts new file mode 100644 index 000000000..c29dbd1ad --- /dev/null +++ b/packages/@interactjs/core/Interaction.d.ts @@ -0,0 +1,175 @@ +import type { Element, PointerEventType, PointerType, FullRect, CoordsSet, ActionName, ActionProps } from '@interactjs/core/types'; +import type { Interactable } from './Interactable'; +import type { EventPhase } from './InteractEvent'; +import { InteractEvent } from './InteractEvent'; +import { PointerInfo } from './PointerInfo'; +import type { Scope } from './scope'; +export declare enum _ProxyValues { + interactable = "", + element = "", + prepared = "", + pointerIsDown = "", + pointerWasMoved = "", + _proxy = "" +} +export declare enum _ProxyMethods { + start = "", + move = "", + end = "", + stop = "", + interacting = "" +} +export type PointerArgProps = { + pointer: PointerType; + event: PointerEventType; + eventTarget: Node; + pointerIndex: number; + pointerInfo: PointerInfo; + interaction: Interaction; +} & T; +export interface DoPhaseArg { + event: PointerEventType; + phase: EventPhase; + interaction: Interaction; + iEvent: InteractEvent; + preEnd?: boolean; + type?: string; +} +export type DoAnyPhaseArg = DoPhaseArg; +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:new': { + interaction: Interaction; + }; + 'interactions:down': PointerArgProps<{ + type: 'down'; + }>; + 'interactions:move': PointerArgProps<{ + type: 'move'; + dx: number; + dy: number; + duplicate: boolean; + }>; + 'interactions:up': PointerArgProps<{ + type: 'up'; + curEventTarget: EventTarget; + }>; + 'interactions:cancel': SignalArgs['interactions:up'] & { + type: 'cancel'; + curEventTarget: EventTarget; + }; + 'interactions:update-pointer': PointerArgProps<{ + down: boolean; + }>; + 'interactions:remove-pointer': PointerArgProps; + 'interactions:blur': { + interaction: Interaction; + event: Event; + type: 'blur'; + }; + 'interactions:before-action-start': Omit; + 'interactions:action-start': DoAnyPhaseArg; + 'interactions:after-action-start': DoAnyPhaseArg; + 'interactions:before-action-move': Omit; + 'interactions:action-move': DoAnyPhaseArg; + 'interactions:after-action-move': DoAnyPhaseArg; + 'interactions:before-action-end': Omit; + 'interactions:action-end': DoAnyPhaseArg; + 'interactions:after-action-end': DoAnyPhaseArg; + 'interactions:stop': { + interaction: Interaction; + }; + } +} +export type InteractionProxy = Pick, keyof typeof _ProxyValues | keyof typeof _ProxyMethods>; +export declare class Interaction { + /** current interactable being interacted with */ + interactable: Interactable | null; + /** the target element of the interactable */ + element: Element | null; + rect: FullRect | null; + prepared: ActionProps; + pointerType: string; + pointerIsDown: boolean; + pointerWasMoved: boolean; + doMove: (this: void) => any; + coords: CoordsSet; + constructor({ pointerType, scopeFire }: { + pointerType?: string; + scopeFire: Scope['fire']; + }); + pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node): void; + /** + * ```js + * interact(target) + * .draggable({ + * // disable the default drag start by down->move + * manualStart: true + * }) + * // start dragging after the user holds the pointer down + * .on('hold', function (event) { + * var interaction = event.interaction + * + * if (!interaction.interacting()) { + * interaction.start({ name: 'drag' }, + * event.interactable, + * event.currentTarget) + * } + * }) + * ``` + * + * Start an action with the given Interactable and Element as tartgets. The + * action must be enabled for the target Interactable and an appropriate + * number of pointers must be held down - 1 for drag/resize, 2 for gesture. + * + * Use it with `interactable.able({ manualStart: false })` to always + * [start actions manually](https://github.com/taye/interact.js/issues/114) + * + * @param action - The action to be performed - drag, resize, etc. + * @param target - The Interactable to target + * @param element - The DOM Element to target + * @returns Whether the interaction was successfully started + */ + start(action: ActionProps, interactable: Interactable, element: Element): boolean; + pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node): void; + /** + * ```js + * interact(target) + * .draggable(true) + * .on('dragmove', function (event) { + * if (someCondition) { + * // change the snap settings + * event.interactable.draggable({ snap: { targets: [] }}) + * // fire another move event with re-calculated snap + * event.interaction.move() + * } + * }) + * ``` + * + * Force a move of the current action at the same coordinates. Useful if + * snap/restrict has been changed and you want a movement with the new + * settings. + */ + move(signalArg?: any): void; + /** + * ```js + * interact(target) + * .draggable(true) + * .on('move', function (event) { + * if (event.pageX > 1000) { + * // end the current action + * event.interaction.end() + * // stop all further listeners from being called + * event.stopImmediatePropagation() + * } + * }) + * ``` + */ + end(event?: PointerEventType): void; + currentAction(): T; + interacting(): boolean; + stop(): void; + destroy(): void; +} +export default Interaction; +export { PointerInfo }; diff --git a/packages/@interactjs/core/Interaction.js b/packages/@interactjs/core/Interaction.js new file mode 100644 index 000000000..f71521a24 --- /dev/null +++ b/packages/@interactjs/core/Interaction.js @@ -0,0 +1,503 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Interaction = void 0; +Object.defineProperty(exports, "PointerInfo", { + enumerable: true, + get: function () { + return _PointerInfo.PointerInfo; + } +}); +exports.default = exports._ProxyValues = exports._ProxyMethods = void 0; +var arr = _interopRequireWildcard(require("../utils/arr.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _hypot = _interopRequireDefault(require("../utils/hypot.js")); +var _misc = require("../utils/misc.js"); +var pointerUtils = _interopRequireWildcard(require("../utils/pointerUtils.js")); +var rectUtils = _interopRequireWildcard(require("../utils/rect.js")); +var _InteractEvent = require("./InteractEvent"); +var _PointerInfo = require("./PointerInfo"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +let _ProxyValues = exports._ProxyValues = /*#__PURE__*/function (_ProxyValues) { + _ProxyValues["interactable"] = ""; + _ProxyValues["element"] = ""; + _ProxyValues["prepared"] = ""; + _ProxyValues["pointerIsDown"] = ""; + _ProxyValues["pointerWasMoved"] = ""; + _ProxyValues["_proxy"] = ""; + return _ProxyValues; +}({}); +let _ProxyMethods = exports._ProxyMethods = /*#__PURE__*/function (_ProxyMethods) { + _ProxyMethods["start"] = ""; + _ProxyMethods["move"] = ""; + _ProxyMethods["end"] = ""; + _ProxyMethods["stop"] = ""; + _ProxyMethods["interacting"] = ""; + return _ProxyMethods; +}({}); +let idCounter = 0; +class Interaction { + /** current interactable being interacted with */ + interactable = null; + + /** the target element of the interactable */ + element = null; + rect = null; + /** @internal */ + _rects; + /** @internal */ + edges = null; + + /** @internal */ + _scopeFire; + + // action that's ready to be fired on next move event + prepared = { + name: null, + axis: null, + edges: null + }; + pointerType; + + /** @internal keep track of added pointers */ + pointers = []; + + /** @internal pointerdown/mousedown/touchstart event */ + downEvent = null; + + /** @internal */ + downPointer = {}; + + /** @internal */ + _latestPointer = { + pointer: null, + event: null, + eventTarget: null + }; + + /** @internal */ + prevEvent = null; + pointerIsDown = false; + pointerWasMoved = false; + /** @internal */ + _interacting = false; + /** @internal */ + _ending = false; + /** @internal */ + _stopped = true; + /** @internal */ + _proxy; + + /** @internal */ + simulation = null; + + /** @internal */ + get pointerMoveTolerance() { + return 1; + } + doMove = (0, _misc.warnOnce)(function (signalArg) { + this.move(signalArg); + }, 'The interaction.doMove() method has been renamed to interaction.move()'); + coords = { + // Starting InteractEvent pointer coordinates + start: pointerUtils.newCoords(), + // Previous native pointer move event coordinates + prev: pointerUtils.newCoords(), + // current native pointer move event coordinates + cur: pointerUtils.newCoords(), + // Change in coordinates and time of the pointer + delta: pointerUtils.newCoords(), + // pointer velocity + velocity: pointerUtils.newCoords() + }; + + /** @internal */ + _id = idCounter++; + constructor({ + pointerType, + scopeFire + }) { + this._scopeFire = scopeFire; + this.pointerType = pointerType; + const that = this; + this._proxy = {}; + for (const key in _ProxyValues) { + Object.defineProperty(this._proxy, key, { + get() { + return that[key]; + } + }); + } + for (const key in _ProxyMethods) { + Object.defineProperty(this._proxy, key, { + value: (...args) => that[key](...args) + }); + } + this._scopeFire('interactions:new', { + interaction: this + }); + } + pointerDown(pointer, event, eventTarget) { + const pointerIndex = this.updatePointer(pointer, event, eventTarget, true); + const pointerInfo = this.pointers[pointerIndex]; + this._scopeFire('interactions:down', { + pointer, + event, + eventTarget, + pointerIndex, + pointerInfo, + type: 'down', + interaction: this + }); + } + + /** + * ```js + * interact(target) + * .draggable({ + * // disable the default drag start by down->move + * manualStart: true + * }) + * // start dragging after the user holds the pointer down + * .on('hold', function (event) { + * var interaction = event.interaction + * + * if (!interaction.interacting()) { + * interaction.start({ name: 'drag' }, + * event.interactable, + * event.currentTarget) + * } + * }) + * ``` + * + * Start an action with the given Interactable and Element as tartgets. The + * action must be enabled for the target Interactable and an appropriate + * number of pointers must be held down - 1 for drag/resize, 2 for gesture. + * + * Use it with `interactable.able({ manualStart: false })` to always + * [start actions manually](https://github.com/taye/interact.js/issues/114) + * + * @param action - The action to be performed - drag, resize, etc. + * @param target - The Interactable to target + * @param element - The DOM Element to target + * @returns Whether the interaction was successfully started + */ + start(action, interactable, element) { + if (this.interacting() || !this.pointerIsDown || this.pointers.length < (action.name === 'gesture' ? 2 : 1) || !interactable.options[action.name].enabled) { + return false; + } + (0, _misc.copyAction)(this.prepared, action); + this.interactable = interactable; + this.element = element; + this.rect = interactable.getRect(element); + this.edges = this.prepared.edges ? (0, _extend.default)({}, this.prepared.edges) : { + left: true, + right: true, + top: true, + bottom: true + }; + this._stopped = false; + this._interacting = this._doPhase({ + interaction: this, + event: this.downEvent, + phase: 'start' + }) && !this._stopped; + return this._interacting; + } + pointerMove(pointer, event, eventTarget) { + if (!this.simulation && !(this.modification && this.modification.endResult)) { + this.updatePointer(pointer, event, eventTarget, false); + } + const duplicateMove = this.coords.cur.page.x === this.coords.prev.page.x && this.coords.cur.page.y === this.coords.prev.page.y && this.coords.cur.client.x === this.coords.prev.client.x && this.coords.cur.client.y === this.coords.prev.client.y; + let dx; + let dy; + + // register movement greater than pointerMoveTolerance + if (this.pointerIsDown && !this.pointerWasMoved) { + dx = this.coords.cur.client.x - this.coords.start.client.x; + dy = this.coords.cur.client.y - this.coords.start.client.y; + this.pointerWasMoved = (0, _hypot.default)(dx, dy) > this.pointerMoveTolerance; + } + const pointerIndex = this.getPointerIndex(pointer); + const signalArg = { + pointer, + pointerIndex, + pointerInfo: this.pointers[pointerIndex], + event, + type: 'move', + eventTarget, + dx, + dy, + duplicate: duplicateMove, + interaction: this + }; + if (!duplicateMove) { + // set pointer coordinate, time changes and velocity + pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta); + } + this._scopeFire('interactions:move', signalArg); + if (!duplicateMove && !this.simulation) { + // if interacting, fire an 'action-move' signal etc + if (this.interacting()) { + signalArg.type = null; + this.move(signalArg); + } + if (this.pointerWasMoved) { + pointerUtils.copyCoords(this.coords.prev, this.coords.cur); + } + } + } + + /** + * ```js + * interact(target) + * .draggable(true) + * .on('dragmove', function (event) { + * if (someCondition) { + * // change the snap settings + * event.interactable.draggable({ snap: { targets: [] }}) + * // fire another move event with re-calculated snap + * event.interaction.move() + * } + * }) + * ``` + * + * Force a move of the current action at the same coordinates. Useful if + * snap/restrict has been changed and you want a movement with the new + * settings. + */ + move(signalArg) { + if (!signalArg || !signalArg.event) { + pointerUtils.setZeroCoords(this.coords.delta); + } + signalArg = (0, _extend.default)({ + pointer: this._latestPointer.pointer, + event: this._latestPointer.event, + eventTarget: this._latestPointer.eventTarget, + interaction: this + }, signalArg || {}); + signalArg.phase = 'move'; + this._doPhase(signalArg); + } + + /** + * @internal + * End interact move events and stop auto-scroll unless simulation is running + */ + pointerUp(pointer, event, eventTarget, curEventTarget) { + let pointerIndex = this.getPointerIndex(pointer); + if (pointerIndex === -1) { + pointerIndex = this.updatePointer(pointer, event, eventTarget, false); + } + const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'; + this._scopeFire(`interactions:${type}`, { + pointer, + pointerIndex, + pointerInfo: this.pointers[pointerIndex], + event, + eventTarget, + type: type, + curEventTarget, + interaction: this + }); + if (!this.simulation) { + this.end(event); + } + this.removePointer(pointer, event); + } + + /** @internal */ + documentBlur(event) { + this.end(event); + this._scopeFire('interactions:blur', { + event, + type: 'blur', + interaction: this + }); + } + + /** + * ```js + * interact(target) + * .draggable(true) + * .on('move', function (event) { + * if (event.pageX > 1000) { + * // end the current action + * event.interaction.end() + * // stop all further listeners from being called + * event.stopImmediatePropagation() + * } + * }) + * ``` + */ + end(event) { + this._ending = true; + event = event || this._latestPointer.event; + let endPhaseResult; + if (this.interacting()) { + endPhaseResult = this._doPhase({ + event, + interaction: this, + phase: 'end' + }); + } + this._ending = false; + if (endPhaseResult === true) { + this.stop(); + } + } + currentAction() { + return this._interacting ? this.prepared.name : null; + } + interacting() { + return this._interacting; + } + stop() { + this._scopeFire('interactions:stop', { + interaction: this + }); + this.interactable = this.element = null; + this._interacting = false; + this._stopped = true; + this.prepared.name = this.prevEvent = null; + } + + /** @internal */ + getPointerIndex(pointer) { + const pointerId = pointerUtils.getPointerId(pointer); + + // mouse and pen interactions may have only one pointer + return this.pointerType === 'mouse' || this.pointerType === 'pen' ? this.pointers.length - 1 : arr.findIndex(this.pointers, curPointer => curPointer.id === pointerId); + } + + /** @internal */ + getPointerInfo(pointer) { + return this.pointers[this.getPointerIndex(pointer)]; + } + + /** @internal */ + updatePointer(pointer, event, eventTarget, down) { + const id = pointerUtils.getPointerId(pointer); + let pointerIndex = this.getPointerIndex(pointer); + let pointerInfo = this.pointers[pointerIndex]; + down = down === false ? false : down || /(down|start)$/i.test(event.type); + if (!pointerInfo) { + pointerInfo = new _PointerInfo.PointerInfo(id, pointer, event, null, null); + pointerIndex = this.pointers.length; + this.pointers.push(pointerInfo); + } else { + pointerInfo.pointer = pointer; + } + pointerUtils.setCoords(this.coords.cur, this.pointers.map(p => p.pointer), this._now()); + pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur); + if (down) { + this.pointerIsDown = true; + pointerInfo.downTime = this.coords.cur.timeStamp; + pointerInfo.downTarget = eventTarget; + pointerUtils.pointerExtend(this.downPointer, pointer); + if (!this.interacting()) { + pointerUtils.copyCoords(this.coords.start, this.coords.cur); + pointerUtils.copyCoords(this.coords.prev, this.coords.cur); + this.downEvent = event; + this.pointerWasMoved = false; + } + } + this._updateLatestPointer(pointer, event, eventTarget); + this._scopeFire('interactions:update-pointer', { + pointer, + event, + eventTarget, + down, + pointerInfo, + pointerIndex, + interaction: this + }); + return pointerIndex; + } + + /** @internal */ + removePointer(pointer, event) { + const pointerIndex = this.getPointerIndex(pointer); + if (pointerIndex === -1) return; + const pointerInfo = this.pointers[pointerIndex]; + this._scopeFire('interactions:remove-pointer', { + pointer, + event, + eventTarget: null, + pointerIndex, + pointerInfo, + interaction: this + }); + this.pointers.splice(pointerIndex, 1); + this.pointerIsDown = false; + } + + /** @internal */ + _updateLatestPointer(pointer, event, eventTarget) { + this._latestPointer.pointer = pointer; + this._latestPointer.event = event; + this._latestPointer.eventTarget = eventTarget; + } + destroy() { + this._latestPointer.pointer = null; + this._latestPointer.event = null; + this._latestPointer.eventTarget = null; + } + + /** @internal */ + _createPreparedEvent(event, phase, preEnd, type) { + return new _InteractEvent.InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type); + } + + /** @internal */ + _fireEvent(iEvent) { + var _this$interactable; + (_this$interactable = this.interactable) == null ? void 0 : _this$interactable.fire(iEvent); + if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) { + this.prevEvent = iEvent; + } + } + + /** @internal */ + _doPhase(signalArg) { + const { + event, + phase, + preEnd, + type + } = signalArg; + const { + rect + } = this; + if (rect && phase === 'move') { + // update the rect changes due to pointer move + rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource]); + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + const beforeResult = this._scopeFire(`interactions:before-action-${phase}`, signalArg); + if (beforeResult === false) { + return false; + } + const iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type); + this._scopeFire(`interactions:action-${phase}`, signalArg); + if (phase === 'start') { + this.prevEvent = iEvent; + } + this._fireEvent(iEvent); + this._scopeFire(`interactions:after-action-${phase}`, signalArg); + return true; + } + + /** @internal */ + _now() { + return Date.now(); + } +} +exports.Interaction = Interaction; +var _default = exports.default = Interaction; +//# sourceMappingURL=Interaction.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/Interaction.js.map b/packages/@interactjs/core/Interaction.js.map new file mode 100644 index 000000000..9ab2ad60b --- /dev/null +++ b/packages/@interactjs/core/Interaction.js.map @@ -0,0 +1,175 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_extend", + "_interopRequireDefault", + "_hypot", + "_misc", + "pointerUtils", + "rectUtils", + "_InteractEvent", + "_PointerInfo", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_ProxyValues", + "exports", + "_ProxyMethods", + "idCounter", + "Interaction", + "interactable", + "element", + "rect", + "_rects", + "edges", + "_scopeFire", + "prepared", + "name", + "axis", + "pointerType", + "pointers", + "downEvent", + "downPointer", + "_latestPointer", + "pointer", + "event", + "eventTarget", + "prevEvent", + "pointerIsDown", + "pointerWasMoved", + "_interacting", + "_ending", + "_stopped", + "_proxy", + "simulation", + "pointerMoveTolerance", + "doMove", + "warnOnce", + "signalArg", + "move", + "coords", + "start", + "newCoords", + "prev", + "cur", + "delta", + "velocity", + "_id", + "constructor", + "scopeFire", + "that", + "key", + "value", + "args", + "interaction", + "pointerDown", + "pointerIndex", + "updatePointer", + "pointerInfo", + "type", + "action", + "interacting", + "length", + "options", + "enabled", + "copyAction", + "getRect", + "extend", + "left", + "right", + "top", + "bottom", + "_doPhase", + "phase", + "pointerMove", + "modification", + "endResult", + "duplicateMove", + "page", + "x", + "y", + "client", + "dx", + "dy", + "hypot", + "getPointerIndex", + "duplicate", + "setCoordVelocity", + "copyCoords", + "setZeroCoords", + "pointerUp", + "curEventTarget", + "test", + "end", + "removePointer", + "documentBlur", + "endPhaseResult", + "stop", + "currentAction", + "pointerId", + "getPointerId", + "findIndex", + "curPointer", + "id", + "getPointerInfo", + "down", + "PointerInfo", + "push", + "setCoords", + "map", + "p", + "_now", + "setCoordDeltas", + "downTime", + "timeStamp", + "downTarget", + "pointerExtend", + "_updateLatestPointer", + "splice", + "destroy", + "_createPreparedEvent", + "preEnd", + "InteractEvent", + "_fireEvent", + "iEvent", + "_this$interactable", + "fire", + "addEdges", + "deltaSource", + "width", + "height", + "beforeResult", + "Date", + "now", + "_default" + ], + "sources": [ + "Interaction.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type {\n Element,\n EdgeOptions,\n PointerEventType,\n PointerType,\n FullRect,\n CoordsSet,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { ActionDefaults } from './options'\nimport { PointerInfo } from './PointerInfo'\nimport type { Scope } from './scope'\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = '',\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = '',\n}\n\nexport type PointerArgProps = {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n pointerIndex: number\n pointerInfo: PointerInfo\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps\n 'interactions:blur': { interaction: Interaction; event: Event; type: 'blur' }\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoAnyPhaseArg\n 'interactions:after-action-start': DoAnyPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoAnyPhaseArg\n 'interactions:after-action-move': DoAnyPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoAnyPhaseArg\n 'interactions:after-action-end': DoAnyPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type InteractionProxy = Pick<\n Interaction,\n keyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nlet idCounter = 0\n\nexport class Interaction {\n /** current interactable being interacted with */\n interactable: Interactable | null = null\n\n /** the target element of the interactable */\n element: Element | null = null\n rect: FullRect | null = null\n /** @internal */\n _rects?: {\n start: FullRect\n corrected: FullRect\n previous: FullRect\n delta: FullRect\n }\n /** @internal */\n edges: EdgeOptions | null = null\n\n /** @internal */\n _scopeFire: Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name: null,\n axis: null,\n edges: null,\n }\n\n pointerType: string\n\n /** @internal keep track of added pointers */\n pointers: PointerInfo[] = []\n\n /** @internal pointerdown/mousedown/touchstart event */\n downEvent: PointerEventType | null = null\n\n /** @internal */ downPointer: PointerType = {} as PointerType\n\n /** @internal */\n _latestPointer: {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n /** @internal */ prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n /** @internal */ _interacting = false\n /** @internal */ _ending = false\n /** @internal */ _stopped = true\n /** @internal */ _proxy: InteractionProxy\n\n /** @internal */ simulation = null\n\n /** @internal */ get pointerMoveTolerance() {\n return 1\n }\n\n doMove = warnOnce(function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords: CoordsSet = {\n // Starting InteractEvent pointer coordinates\n start: pointerUtils.newCoords(),\n // Previous native pointer move event coordinates\n prev: pointerUtils.newCoords(),\n // current native pointer move event coordinates\n cur: pointerUtils.newCoords(),\n // Change in coordinates and time of the pointer\n delta: pointerUtils.newCoords(),\n // pointer velocity\n velocity: pointerUtils.newCoords(),\n }\n\n /** @internal */ readonly _id: number = idCounter++\n\n constructor({ pointerType, scopeFire }: { pointerType?: string; scopeFire: Scope['fire'] }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get() {\n return that[key]\n },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args: any[]) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n pointerInfo,\n type: 'down',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param action - The action to be performed - drag, resize, etc.\n * @param target - The Interactable to target\n * @param element - The DOM Element to target\n * @returns Whether the interaction was successfully started\n */\n start(action: ActionProps, interactable: Interactable, element: Element): boolean {\n if (\n this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n !interactable.options[action.name as keyof ActionDefaults].enabled\n ) {\n return false\n }\n\n copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n ? extend({}, this.prepared.edges)\n : { left: true, right: true, top: true, bottom: true }\n this._stopped = false\n this._interacting =\n this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modification && this.modification.endResult)) {\n this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const duplicateMove =\n this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y\n\n let dx: number\n let dy: number\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const pointerIndex = this.getPointerIndex(pointer)\n const signalArg = {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n type: 'move' as const,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this as unknown as Interaction,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove && !this.simulation) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move(signalArg?: any) {\n if (!signalArg || !signalArg.event) {\n pointerUtils.setZeroCoords(this.coords.delta)\n }\n\n signalArg = extend(\n {\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n },\n signalArg || {},\n )\n\n signalArg.phase = 'move'\n\n this._doPhase(signalArg)\n }\n\n /**\n * @internal\n * End interact move events and stop auto-scroll unless simulation is running\n */\n pointerUp(pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n eventTarget,\n type: type as any,\n curEventTarget,\n interaction: this as unknown as Interaction,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.removePointer(pointer, event)\n }\n\n /** @internal */\n documentBlur(event: Event) {\n this.end(event as any)\n this._scopeFire('interactions:blur', {\n event,\n type: 'blur',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n */\n end(event?: PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult: boolean\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction() {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting() {\n return this._interacting\n }\n\n stop() {\n this._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n /** @internal */\n getPointerIndex(pointer: any) {\n const pointerId = pointerUtils.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return this.pointerType === 'mouse' || this.pointerType === 'pen'\n ? this.pointers.length - 1\n : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n /** @internal */\n getPointerInfo(pointer: any) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n /** @internal */\n updatePointer(pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n const id = pointerUtils.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n } else {\n pointerInfo.pointer = pointer\n }\n\n pointerUtils.setCoords(\n this.coords.cur,\n this.pointers.map((p) => p.pointer),\n this._now(),\n )\n pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n if (down) {\n this.pointerIsDown = true\n\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n pointerUtils.pointerExtend(this.downPointer, pointer)\n\n if (!this.interacting()) {\n pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n this.downEvent = event\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this as unknown as Interaction,\n })\n\n return pointerIndex\n }\n\n /** @internal */\n removePointer(pointer: PointerType, event: PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) return\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this as unknown as Interaction,\n })\n\n this.pointers.splice(pointerIndex, 1)\n this.pointerIsDown = false\n }\n\n /** @internal */\n _updateLatestPointer(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy() {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n /** @internal */\n _createPreparedEvent

(\n event: PointerEventType,\n phase: P,\n preEnd?: boolean,\n type?: string,\n ) {\n return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type)\n }\n\n /** @internal */\n _fireEvent

(iEvent: InteractEvent) {\n this.interactable?.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n /** @internal */\n _doPhase

(\n signalArg: Omit, 'iEvent'> & { iEvent?: InteractEvent },\n ) {\n const { event, phase, preEnd, type } = signalArg\n const { rect } = this\n\n if (rect && phase === 'move') {\n // update the rect changes due to pointer move\n rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n if (phase === 'start') {\n this.prevEvent = iEvent\n }\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n /** @internal */\n _now() {\n return Date.now()\n }\n}\n\nexport default Interaction\nexport { PointerInfo }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/Interaction.prod.js b/packages/@interactjs/core/Interaction.prod.js new file mode 100644 index 000000000..e4dfc5c01 --- /dev/null +++ b/packages/@interactjs/core/Interaction.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.Interaction=void 0,Object.defineProperty(exports,"PointerInfo",{enumerable:!0,get:()=>p.PointerInfo}),exports.default=exports._ProxyValues=exports._ProxyMethods=void 0;var t=h(require("../utils/arr.prod.js")),e=a(require("../utils/extend.prod.js")),i=a(require("../utils/hypot.prod.js")),n=require("../utils/misc.prod.js"),r=h(require("../utils/pointerUtils.prod.js")),o=h(require("../utils/rect.prod.js")),s=require("./InteractEvent"),p=require("./PointerInfo");function a(t){return t&&t.__esModule?t:{default:t}}function c(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,i=new WeakMap;return(c=t=>t?i:e)(t)}function h(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var i=c(e);if(i&&i.has(t))return i.get(t);var n={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var s=r?Object.getOwnPropertyDescriptor(t,o):null;s&&(s.get||s.set)?Object.defineProperty(n,o,s):n[o]=t[o]}return n.default=t,i&&i.set(t,n),n}let d=exports._ProxyValues=(t=>(t.interactable="",t.element="",t.prepared="",t.pointerIsDown="",t.pointerWasMoved="",t._proxy="",t))({}),l=exports._ProxyMethods=(t=>(t.start="",t.move="",t.end="",t.stop="",t.interacting="",t))({}),u=0;class v{interactable=null;element=null;rect=null;_rects;edges=null;_scopeFire;prepared={name:null,axis:null,edges:null};pointerType;pointers=[];downEvent=null;downPointer={};_latestPointer={pointer:null,event:null,eventTarget:null};prevEvent=null;pointerIsDown=!1;pointerWasMoved=!1;_interacting=!1;_ending=!1;_stopped=!0;_proxy;simulation=null;get pointerMoveTolerance(){return 1}doMove=(0,n.warnOnce)((function(t){this.move(t)}),"The interaction.doMove() method has been renamed to interaction.move()");coords={start:r.newCoords(),prev:r.newCoords(),cur:r.newCoords(),delta:r.newCoords(),velocity:r.newCoords()};_id=u++;constructor({pointerType:t,scopeFire:e}){this._scopeFire=e,this.pointerType=t;const i=this;this._proxy={};for(const t in d)Object.defineProperty(this._proxy,t,{get(){return i[t]}});for(const t in l)Object.defineProperty(this._proxy,t,{value:(...e)=>i[t](...e)});this._scopeFire("interactions:new",{interaction:this})}pointerDown(t,e,i){const n=this.updatePointer(t,e,i,!0),r=this.pointers[n];this._scopeFire("interactions:down",{pointer:t,event:e,eventTarget:i,pointerIndex:n,pointerInfo:r,type:"down",interaction:this})}start(t,i,r){return!(this.interacting()||!this.pointerIsDown||this.pointers.length<("gesture"===t.name?2:1)||!i.options[t.name].enabled)&&((0,n.copyAction)(this.prepared,t),this.interactable=i,this.element=r,this.rect=i.getRect(r),this.edges=this.prepared.edges?(0,e.default)({},this.prepared.edges):{left:!0,right:!0,top:!0,bottom:!0},this._stopped=!1,this._interacting=this._doPhase({interaction:this,event:this.downEvent,phase:"start"})&&!this._stopped,this._interacting)}pointerMove(t,e,n){this.simulation||this.modification&&this.modification.endResult||this.updatePointer(t,e,n,!1);const o=this.coords.cur.page.x===this.coords.prev.page.x&&this.coords.cur.page.y===this.coords.prev.page.y&&this.coords.cur.client.x===this.coords.prev.client.x&&this.coords.cur.client.y===this.coords.prev.client.y;let s,p;this.pointerIsDown&&!this.pointerWasMoved&&(s=this.coords.cur.client.x-this.coords.start.client.x,p=this.coords.cur.client.y-this.coords.start.client.y,this.pointerWasMoved=(0,i.default)(s,p)>this.pointerMoveTolerance);const a=this.getPointerIndex(t),c={pointer:t,pointerIndex:a,pointerInfo:this.pointers[a],event:e,type:"move",eventTarget:n,dx:s,dy:p,duplicate:o,interaction:this};o||r.setCoordVelocity(this.coords.velocity,this.coords.delta),this._scopeFire("interactions:move",c),o||this.simulation||(this.interacting()&&(c.type=null,this.move(c)),this.pointerWasMoved&&r.copyCoords(this.coords.prev,this.coords.cur))}move(t){t&&t.event||r.setZeroCoords(this.coords.delta),(t=(0,e.default)({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this},t||{})).phase="move",this._doPhase(t)}pointerUp(t,e,i,n){let r=this.getPointerIndex(t);-1===r&&(r=this.updatePointer(t,e,i,!1));const o=/cancel$/i.test(e.type)?"cancel":"up";this._scopeFire("interactions:"+o,{pointer:t,pointerIndex:r,pointerInfo:this.pointers[r],event:e,eventTarget:i,type:o,curEventTarget:n,interaction:this}),this.simulation||this.end(e),this.removePointer(t,e)}documentBlur(t){this.end(t),this._scopeFire("interactions:blur",{event:t,type:"blur",interaction:this})}end(t){let e;this._ending=!0,t=t||this._latestPointer.event,this.interacting()&&(e=this._doPhase({event:t,interaction:this,phase:"end"})),this._ending=!1,!0===e&&this.stop()}currentAction(){return this._interacting?this.prepared.name:null}interacting(){return this._interacting}stop(){this._scopeFire("interactions:stop",{interaction:this}),this.interactable=this.element=null,this._interacting=!1,this._stopped=!0,this.prepared.name=this.prevEvent=null}getPointerIndex(e){const i=r.getPointerId(e);return"mouse"===this.pointerType||"pen"===this.pointerType?this.pointers.length-1:t.findIndex(this.pointers,(t=>t.id===i))}getPointerInfo(t){return this.pointers[this.getPointerIndex(t)]}updatePointer(t,e,i,n){const o=r.getPointerId(t);let s=this.getPointerIndex(t),a=this.pointers[s];return n=!1!==n&&(n||/(down|start)$/i.test(e.type)),a?a.pointer=t:(a=new p.PointerInfo(o,t,e,null,null),s=this.pointers.length,this.pointers.push(a)),r.setCoords(this.coords.cur,this.pointers.map((t=>t.pointer)),this._now()),r.setCoordDeltas(this.coords.delta,this.coords.prev,this.coords.cur),n&&(this.pointerIsDown=!0,a.downTime=this.coords.cur.timeStamp,a.downTarget=i,r.pointerExtend(this.downPointer,t),this.interacting()||(r.copyCoords(this.coords.start,this.coords.cur),r.copyCoords(this.coords.prev,this.coords.cur),this.downEvent=e,this.pointerWasMoved=!1)),this._updateLatestPointer(t,e,i),this._scopeFire("interactions:update-pointer",{pointer:t,event:e,eventTarget:i,down:n,pointerInfo:a,pointerIndex:s,interaction:this}),s}removePointer(t,e){const i=this.getPointerIndex(t);if(-1===i)return;const n=this.pointers[i];this._scopeFire("interactions:remove-pointer",{pointer:t,event:e,eventTarget:null,pointerIndex:i,pointerInfo:n,interaction:this}),this.pointers.splice(i,1),this.pointerIsDown=!1}_updateLatestPointer(t,e,i){this._latestPointer.pointer=t,this._latestPointer.event=e,this._latestPointer.eventTarget=i}destroy(){this._latestPointer.pointer=null,this._latestPointer.event=null,this._latestPointer.eventTarget=null}_createPreparedEvent(t,e,i,n){return new s.InteractEvent(this,t,this.prepared.name,e,this.element,i,n)}_fireEvent(t){var e;null==(e=this.interactable)||e.fire(t),(!this.prevEvent||t.timeStamp>=this.prevEvent.timeStamp)&&(this.prevEvent=t)}_doPhase(t){const{event:e,phase:i,preEnd:n,type:r}=t,{rect:s}=this;if(s&&"move"===i&&(o.addEdges(this.edges,s,this.coords.delta[this.interactable.options.deltaSource]),s.width=s.right-s.left,s.height=s.bottom-s.top),!1===this._scopeFire("interactions:before-action-"+i,t))return!1;const p=t.iEvent=this._createPreparedEvent(e,i,n,r);return this._scopeFire("interactions:action-"+i,t),"start"===i&&(this.prevEvent=p),this._fireEvent(p),this._scopeFire("interactions:after-action-"+i,t),!0}_now(){return Date.now()}}exports.Interaction=v,exports.default=v; +//# sourceMappingURL=Interaction.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/Interaction.prod.js.map b/packages/@interactjs/core/Interaction.prod.js.map new file mode 100644 index 000000000..cb3afdfe9 --- /dev/null +++ b/packages/@interactjs/core/Interaction.prod.js.map @@ -0,0 +1,174 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_extendProd", + "_interopRequireDefault", + "_hypotProd", + "_miscProd", + "pointerUtils", + "rectUtils", + "_InteractEvent", + "_PointerInfo", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_ProxyValues", + "exports", + "_ProxyMethods", + "idCounter", + "Interaction", + "interactable", + "element", + "rect", + "_rects", + "edges", + "_scopeFire", + "prepared", + "name", + "axis", + "pointerType", + "pointers", + "downEvent", + "downPointer", + "_latestPointer", + "pointer", + "event", + "eventTarget", + "prevEvent", + "pointerIsDown", + "pointerWasMoved", + "_interacting", + "_ending", + "_stopped", + "_proxy", + "simulation", + "pointerMoveTolerance", + "doMove", + "warnOnce", + "signalArg", + "this", + "move", + "coords", + "start", + "newCoords", + "prev", + "cur", + "delta", + "velocity", + "_id", + "constructor", + "scopeFire", + "that", + "key", + "value", + "args", + "interaction", + "pointerDown", + "pointerIndex", + "updatePointer", + "pointerInfo", + "type", + "action", + "interacting", + "length", + "options", + "enabled", + "copyAction", + "getRect", + "extend", + "left", + "right", + "top", + "bottom", + "_doPhase", + "phase", + "pointerMove", + "modification", + "endResult", + "duplicateMove", + "page", + "x", + "y", + "client", + "dx", + "dy", + "hypot", + "getPointerIndex", + "duplicate", + "setCoordVelocity", + "copyCoords", + "setZeroCoords", + "pointerUp", + "curEventTarget", + "test", + "end", + "removePointer", + "documentBlur", + "endPhaseResult", + "stop", + "currentAction", + "pointerId", + "getPointerId", + "findIndex", + "curPointer", + "id", + "getPointerInfo", + "down", + "PointerInfo", + "push", + "setCoords", + "map", + "p", + "_now", + "setCoordDeltas", + "downTime", + "timeStamp", + "downTarget", + "pointerExtend", + "_updateLatestPointer", + "splice", + "destroy", + "_createPreparedEvent", + "preEnd", + "InteractEvent", + "_fireEvent", + "iEvent", + "_this$interactable", + "fire", + "addEdges", + "deltaSource", + "width", + "height", + "Date", + "now" + ], + "sources": [ + "Interaction.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type {\n Element,\n EdgeOptions,\n PointerEventType,\n PointerType,\n FullRect,\n CoordsSet,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { ActionDefaults } from './options'\nimport { PointerInfo } from './PointerInfo'\nimport type { Scope } from './scope'\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = '',\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = '',\n}\n\nexport type PointerArgProps = {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n pointerIndex: number\n pointerInfo: PointerInfo\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps\n 'interactions:blur': { interaction: Interaction; event: Event; type: 'blur' }\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoAnyPhaseArg\n 'interactions:after-action-start': DoAnyPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoAnyPhaseArg\n 'interactions:after-action-move': DoAnyPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoAnyPhaseArg\n 'interactions:after-action-end': DoAnyPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type InteractionProxy = Pick<\n Interaction,\n keyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nlet idCounter = 0\n\nexport class Interaction {\n /** current interactable being interacted with */\n interactable: Interactable | null = null\n\n /** the target element of the interactable */\n element: Element | null = null\n rect: FullRect | null = null\n /** @internal */\n _rects?: {\n start: FullRect\n corrected: FullRect\n previous: FullRect\n delta: FullRect\n }\n /** @internal */\n edges: EdgeOptions | null = null\n\n /** @internal */\n _scopeFire: Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name: null,\n axis: null,\n edges: null,\n }\n\n pointerType: string\n\n /** @internal keep track of added pointers */\n pointers: PointerInfo[] = []\n\n /** @internal pointerdown/mousedown/touchstart event */\n downEvent: PointerEventType | null = null\n\n /** @internal */ downPointer: PointerType = {} as PointerType\n\n /** @internal */\n _latestPointer: {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n /** @internal */ prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n /** @internal */ _interacting = false\n /** @internal */ _ending = false\n /** @internal */ _stopped = true\n /** @internal */ _proxy: InteractionProxy\n\n /** @internal */ simulation = null\n\n /** @internal */ get pointerMoveTolerance() {\n return 1\n }\n\n doMove = warnOnce(function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords: CoordsSet = {\n // Starting InteractEvent pointer coordinates\n start: pointerUtils.newCoords(),\n // Previous native pointer move event coordinates\n prev: pointerUtils.newCoords(),\n // current native pointer move event coordinates\n cur: pointerUtils.newCoords(),\n // Change in coordinates and time of the pointer\n delta: pointerUtils.newCoords(),\n // pointer velocity\n velocity: pointerUtils.newCoords(),\n }\n\n /** @internal */ readonly _id: number = idCounter++\n\n constructor({ pointerType, scopeFire }: { pointerType?: string; scopeFire: Scope['fire'] }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get() {\n return that[key]\n },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args: any[]) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n pointerInfo,\n type: 'down',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param action - The action to be performed - drag, resize, etc.\n * @param target - The Interactable to target\n * @param element - The DOM Element to target\n * @returns Whether the interaction was successfully started\n */\n start(action: ActionProps, interactable: Interactable, element: Element): boolean {\n if (\n this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n !interactable.options[action.name as keyof ActionDefaults].enabled\n ) {\n return false\n }\n\n copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n ? extend({}, this.prepared.edges)\n : { left: true, right: true, top: true, bottom: true }\n this._stopped = false\n this._interacting =\n this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modification && this.modification.endResult)) {\n this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const duplicateMove =\n this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y\n\n let dx: number\n let dy: number\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const pointerIndex = this.getPointerIndex(pointer)\n const signalArg = {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n type: 'move' as const,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this as unknown as Interaction,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove && !this.simulation) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move(signalArg?: any) {\n if (!signalArg || !signalArg.event) {\n pointerUtils.setZeroCoords(this.coords.delta)\n }\n\n signalArg = extend(\n {\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n },\n signalArg || {},\n )\n\n signalArg.phase = 'move'\n\n this._doPhase(signalArg)\n }\n\n /**\n * @internal\n * End interact move events and stop auto-scroll unless simulation is running\n */\n pointerUp(pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n eventTarget,\n type: type as any,\n curEventTarget,\n interaction: this as unknown as Interaction,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.removePointer(pointer, event)\n }\n\n /** @internal */\n documentBlur(event: Event) {\n this.end(event as any)\n this._scopeFire('interactions:blur', {\n event,\n type: 'blur',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n */\n end(event?: PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult: boolean\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction() {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting() {\n return this._interacting\n }\n\n stop() {\n this._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n /** @internal */\n getPointerIndex(pointer: any) {\n const pointerId = pointerUtils.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return this.pointerType === 'mouse' || this.pointerType === 'pen'\n ? this.pointers.length - 1\n : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n /** @internal */\n getPointerInfo(pointer: any) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n /** @internal */\n updatePointer(pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n const id = pointerUtils.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n } else {\n pointerInfo.pointer = pointer\n }\n\n pointerUtils.setCoords(\n this.coords.cur,\n this.pointers.map((p) => p.pointer),\n this._now(),\n )\n pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n if (down) {\n this.pointerIsDown = true\n\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n pointerUtils.pointerExtend(this.downPointer, pointer)\n\n if (!this.interacting()) {\n pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n this.downEvent = event\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this as unknown as Interaction,\n })\n\n return pointerIndex\n }\n\n /** @internal */\n removePointer(pointer: PointerType, event: PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) return\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this as unknown as Interaction,\n })\n\n this.pointers.splice(pointerIndex, 1)\n this.pointerIsDown = false\n }\n\n /** @internal */\n _updateLatestPointer(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy() {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n /** @internal */\n _createPreparedEvent

(\n event: PointerEventType,\n phase: P,\n preEnd?: boolean,\n type?: string,\n ) {\n return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type)\n }\n\n /** @internal */\n _fireEvent

(iEvent: InteractEvent) {\n this.interactable?.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n /** @internal */\n _doPhase

(\n signalArg: Omit, 'iEvent'> & { iEvent?: InteractEvent },\n ) {\n const { event, phase, preEnd, type } = signalArg\n const { rect } = this\n\n if (rect && phase === 'move') {\n // update the rect changes due to pointer move\n rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n if (phase === 'start') {\n this.prevEvent = iEvent\n }\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n /** @internal */\n _now() {\n return Date.now()\n }\n}\n\nexport default Interaction\nexport { PointerInfo }\n" + ], + "mappings": "uOAAA,IAAAA,EAAAC,EAAAC,QAAA,yBACAC,EAAAC,EAAAF,QAAA,4BACAG,EAAAD,EAAAF,QAAA,2BACAI,EAAAJ,QAAA,yBACAK,EAAAN,EAAAC,QAAA,kCACAM,EAAAP,EAAAC,QAAA,0BAeAO,EAAAP,QAAA,mBAEAQ,EAAAR,QAAA,iBAA2C,SAAAE,EAAAO,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,UAAAG,EAAAC,GAAA,sBAAAC,QAAA,gBAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAAA,OAAAF,EAAAC,KAAAG,EAAAD,GAAAF,EAAA,UAAAd,EAAAc,EAAAE,GAAA,IAAAA,GAAAF,KAAAH,WAAA,OAAAG,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAF,QAAAE,GAAA,IAAAG,EAAAJ,EAAAG,GAAA,GAAAC,KAAAC,IAAAJ,GAAA,OAAAG,EAAAE,IAAAL,GAAA,IAAAM,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAZ,EAAA,eAAAY,GAAAH,OAAAI,UAAAC,eAAAC,KAAAf,EAAAY,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAX,EAAAY,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAZ,EAAAY,EAAA,QAAAN,EAAAR,QAAAE,EAAAG,KAAAc,IAAAjB,EAAAM,IAAA,KAG/BY,EAAYC,QAAAD,aAAA,CAAZA,MAAY,gBAAZA,EAAY,WAAZA,EAAY,YAAZA,EAAY,iBAAZA,EAAY,mBAAZA,EAAY,UAAZA,GAAY,KASZE,EAAaD,QAAAC,cAAA,CAAbA,MAAa,SAAbA,EAAa,QAAbA,EAAa,OAAbA,EAAa,QAAbA,EAAa,eAAbA,GAAa,KAuErBC,EAAY,EAET,MAAMC,EAEXC,aAAoC,KAGpCC,QAA0B,KAC1BC,KAAwB,KAExBC,OAOAC,MAA4B,KAG5BC,WAGAC,SAA2B,CACzBC,KAAM,KACNC,KAAM,KACNJ,MAAO,MAGTK,YAGAC,SAA0B,GAG1BC,UAAqC,KAEpBC,YAA2B,CAAC,EAG7CC,eAII,CACFC,QAAS,KACTC,MAAO,KACPC,YAAa,MAGEC,UAA0C,KAE3DC,eAAgB,EAChBC,iBAAkB,EACDC,cAAe,EACfC,SAAU,EACVC,UAAW,EACXC,OAEAC,WAAa,KAEb,wBAAIC,GACnB,OAAO,CACT,CAEAC,QAAS,EAAAC,aAAS,SAA6BC,GAC7CC,KAAKC,KAAKF,EACZ,GAAG,0EAEHG,OAAoB,CAElBC,MAAO/D,EAAagE,YAEpBC,KAAMjE,EAAagE,YAEnBE,IAAKlE,EAAagE,YAElBG,MAAOnE,EAAagE,YAEpBI,SAAUpE,EAAagE,aAGCK,IAAcxC,IAExCyC,aAAY9B,YAAEA,EAAW+B,UAAEA,IACzBX,KAAKxB,WAAamC,EAClBX,KAAKpB,YAAcA,EAEnB,MAAMgC,EAAOZ,KAEbA,KAAKN,OAAS,CAAC,EAEf,IAAK,MAAMmB,KAAO/C,EAChBT,OAAOC,eAAe0C,KAAKN,OAAQmB,EAAK,CACtC5D,GAEA,GADE,OAAO2D,EAAKC,EACd,IAIJ,IAAK,MAAMA,KAAO7C,EAChBX,OAAOC,eAAe0C,KAAKN,OAAQmB,EAAK,CACtCC,MAAOA,IAAIC,IAAgBH,EAAKC,MAAQE,KAI5Cf,KAAKxB,WAAW,mBAAoB,CAAEwC,YAAahB,MACrD,CAEAiB,YAAYhC,EAAsBC,EAAyBC,GACzD,MAAM+B,EAAelB,KAAKmB,cAAclC,EAASC,EAAOC,GAAa,GAC/DiC,EAAcpB,KAAKnB,SAASqC,GAElClB,KAAKxB,WAAW,oBAAqB,CACnCS,UACAC,QACAC,cACA+B,eACAE,cACAC,KAAM,OACNL,YAAahB,MAEjB,CAiCAG,MAA4BmB,EAAwBnD,EAA4BC,GAC9E,QACE4B,KAAKuB,gBACJvB,KAAKX,eACNW,KAAKnB,SAAS2C,QAA0B,YAAhBF,EAAO5C,KAAqB,EAAI,KACvDP,EAAasD,QAAQH,EAAO5C,MAA8BgD,YAK7D,EAAAC,cAAW3B,KAAKvB,SAAU6C,GAE1BtB,KAAK7B,aAAeA,EACpB6B,KAAK5B,QAAUA,EACf4B,KAAK3B,KAAOF,EAAayD,QAAQxD,GACjC4B,KAAKzB,MAAQyB,KAAKvB,SAASF,OACvB,EAAAsD,WAAO,CAAC,EAAG7B,KAAKvB,SAASF,OACzB,CAAEuD,MAAM,EAAMC,OAAO,EAAMC,KAAK,EAAMC,QAAQ,GAClDjC,KAAKP,UAAW,EAChBO,KAAKT,aACHS,KAAKkC,SAAS,CACZlB,YAAahB,KACbd,MAAOc,KAAKlB,UACZqD,MAAO,YACFnC,KAAKP,SAEPO,KAAKT,aACd,CAEA6C,YAAYnD,EAAsBC,EAAyBC,GACpDa,KAAKL,YAAgBK,KAAKqC,cAAgBrC,KAAKqC,aAAaC,WAC/DtC,KAAKmB,cAAclC,EAASC,EAAOC,GAAa,GAGlD,MAAMoD,EACJvC,KAAKE,OAAOI,IAAIkC,KAAKC,IAAMzC,KAAKE,OAAOG,KAAKmC,KAAKC,GACjDzC,KAAKE,OAAOI,IAAIkC,KAAKE,IAAM1C,KAAKE,OAAOG,KAAKmC,KAAKE,GACjD1C,KAAKE,OAAOI,IAAIqC,OAAOF,IAAMzC,KAAKE,OAAOG,KAAKsC,OAAOF,GACrDzC,KAAKE,OAAOI,IAAIqC,OAAOD,IAAM1C,KAAKE,OAAOG,KAAKsC,OAAOD,EAEvD,IAAIE,EACAC,EAGA7C,KAAKX,gBAAkBW,KAAKV,kBAC9BsD,EAAK5C,KAAKE,OAAOI,IAAIqC,OAAOF,EAAIzC,KAAKE,OAAOC,MAAMwC,OAAOF,EACzDI,EAAK7C,KAAKE,OAAOI,IAAIqC,OAAOD,EAAI1C,KAAKE,OAAOC,MAAMwC,OAAOD,EAEzD1C,KAAKV,iBAAkB,EAAAwD,WAAMF,EAAIC,GAAM7C,KAAKJ,sBAG9C,MAAMsB,EAAelB,KAAK+C,gBAAgB9D,GACpCc,EAAY,CAChBd,UACAiC,eACAE,YAAapB,KAAKnB,SAASqC,GAC3BhC,QACAmC,KAAM,OACNlC,cACAyD,KACAC,KACAG,UAAWT,EACXvB,YAAahB,MAGVuC,GAEHnG,EAAa6G,iBAAiBjD,KAAKE,OAAOM,SAAUR,KAAKE,OAAOK,OAGlEP,KAAKxB,WAAW,oBAAqBuB,GAEhCwC,GAAkBvC,KAAKL,aAEtBK,KAAKuB,gBACPxB,EAAUsB,KAAO,KACjBrB,KAAKC,KAAKF,IAGRC,KAAKV,iBACPlD,EAAa8G,WAAWlD,KAAKE,OAAOG,KAAML,KAAKE,OAAOI,KAG5D,CAoBAL,KAAKF,GACEA,GAAcA,EAAUb,OAC3B9C,EAAa+G,cAAcnD,KAAKE,OAAOK,QAGzCR,GAAY,EAAA8B,WACV,CACE5C,QAASe,KAAKhB,eAAeC,QAC7BC,MAAOc,KAAKhB,eAAeE,MAC3BC,YAAaa,KAAKhB,eAAeG,YACjC6B,YAAahB,MAEfD,GAAa,CAAC,IAGNoC,MAAQ,OAElBnC,KAAKkC,SAASnC,EAChB,CAMAqD,UAAUnE,EAAsBC,EAAyBC,EAAmBkE,GAC1E,IAAInC,EAAelB,KAAK+C,gBAAgB9D,IAElB,IAAlBiC,IACFA,EAAelB,KAAKmB,cAAclC,EAASC,EAAOC,GAAa,IAGjE,MAAMkC,EAAO,WAAWiC,KAAKpE,EAAMmC,MAAQ,SAAW,KAEtDrB,KAAKxB,WAAY,gBAAe6C,EAAqD,CACnFpC,UACAiC,eACAE,YAAapB,KAAKnB,SAASqC,GAC3BhC,QACAC,cACAkC,KAAMA,EACNgC,iBACArC,YAAahB,OAGVA,KAAKL,YACRK,KAAKuD,IAAIrE,GAGXc,KAAKwD,cAAcvE,EAASC,EAC9B,CAGAuE,aAAavE,GACXc,KAAKuD,IAAIrE,GACTc,KAAKxB,WAAW,oBAAqB,CACnCU,QACAmC,KAAM,OACNL,YAAahB,MAEjB,CAgBAuD,IAAIrE,GAGF,IAAIwE,EAFJ1D,KAAKR,SAAU,EACfN,EAAQA,GAASc,KAAKhB,eAAeE,MAGjCc,KAAKuB,gBACPmC,EAAiB1D,KAAKkC,SAAS,CAC7BhD,QACA8B,YAAahB,KACbmC,MAAO,SAIXnC,KAAKR,SAAU,GAEQ,IAAnBkE,GACF1D,KAAK2D,MAET,CAEAC,gBACE,OAAO5D,KAAKT,aAAeS,KAAKvB,SAASC,KAAO,IAClD,CAEA6C,cACE,OAAOvB,KAAKT,YACd,CAEAoE,OACE3D,KAAKxB,WAAW,oBAAqB,CAAEwC,YAAahB,OAEpDA,KAAK7B,aAAe6B,KAAK5B,QAAU,KAEnC4B,KAAKT,cAAe,EACpBS,KAAKP,UAAW,EAChBO,KAAKvB,SAASC,KAAOsB,KAAKZ,UAAY,IACxC,CAGA2D,gBAAgB9D,GACd,MAAM4E,EAAYzH,EAAa0H,aAAa7E,GAG5C,MAA4B,UAArBe,KAAKpB,aAAgD,QAArBoB,KAAKpB,YACxCoB,KAAKnB,SAAS2C,OAAS,EACvB3F,EAAIkI,UAAU/D,KAAKnB,UAAWmF,GAAeA,EAAWC,KAAOJ,GACrE,CAGAK,eAAejF,GACb,OAAOe,KAAKnB,SAASmB,KAAK+C,gBAAgB9D,GAC5C,CAGAkC,cAAclC,EAAsBC,EAAyBC,EAAmBgF,GAC9E,MAAMF,EAAK7H,EAAa0H,aAAa7E,GACrC,IAAIiC,EAAelB,KAAK+C,gBAAgB9D,GACpCmC,EAAcpB,KAAKnB,SAASqC,GAgDhC,OA9CAiD,GAAgB,IAATA,IAAyBA,GAAQ,iBAAiBb,KAAKpE,EAAMmC,OAE/DD,EAMHA,EAAYnC,QAAUA,GALtBmC,EAAc,IAAIgD,cAAYH,EAAIhF,EAASC,EAAO,KAAM,MAExDgC,EAAelB,KAAKnB,SAAS2C,OAC7BxB,KAAKnB,SAASwF,KAAKjD,IAKrBhF,EAAakI,UACXtE,KAAKE,OAAOI,IACZN,KAAKnB,SAAS0F,KAAKC,GAAMA,EAAEvF,UAC3Be,KAAKyE,QAEPrI,EAAasI,eAAe1E,KAAKE,OAAOK,MAAOP,KAAKE,OAAOG,KAAML,KAAKE,OAAOI,KAEzE6D,IACFnE,KAAKX,eAAgB,EAErB+B,EAAYuD,SAAW3E,KAAKE,OAAOI,IAAIsE,UACvCxD,EAAYyD,WAAa1F,EACzB/C,EAAa0I,cAAc9E,KAAKjB,YAAaE,GAExCe,KAAKuB,gBACRnF,EAAa8G,WAAWlD,KAAKE,OAAOC,MAAOH,KAAKE,OAAOI,KACvDlE,EAAa8G,WAAWlD,KAAKE,OAAOG,KAAML,KAAKE,OAAOI,KAEtDN,KAAKlB,UAAYI,EACjBc,KAAKV,iBAAkB,IAI3BU,KAAK+E,qBAAqB9F,EAASC,EAAOC,GAE1Ca,KAAKxB,WAAW,8BAA+B,CAC7CS,UACAC,QACAC,cACAgF,OACA/C,cACAF,eACAF,YAAahB,OAGRkB,CACT,CAGAsC,cAAcvE,EAAsBC,GAClC,MAAMgC,EAAelB,KAAK+C,gBAAgB9D,GAE1C,IAAsB,IAAlBiC,EAAqB,OAEzB,MAAME,EAAcpB,KAAKnB,SAASqC,GAElClB,KAAKxB,WAAW,8BAA+B,CAC7CS,UACAC,QACAC,YAAa,KACb+B,eACAE,cACAJ,YAAahB,OAGfA,KAAKnB,SAASmG,OAAO9D,EAAc,GACnClB,KAAKX,eAAgB,CACvB,CAGA0F,qBAAqB9F,EAAsBC,EAAyBC,GAClEa,KAAKhB,eAAeC,QAAUA,EAC9Be,KAAKhB,eAAeE,MAAQA,EAC5Bc,KAAKhB,eAAeG,YAAcA,CACpC,CAEA8F,UACEjF,KAAKhB,eAAeC,QAAU,KAC9Be,KAAKhB,eAAeE,MAAQ,KAC5Bc,KAAKhB,eAAeG,YAAc,IACpC,CAGA+F,qBACEhG,EACAiD,EACAgD,EACA9D,GAEA,OAAO,IAAI+D,gBAAoBpF,KAAMd,EAAOc,KAAKvB,SAASC,KAAMyD,EAAOnC,KAAK5B,QAAS+G,EAAQ9D,EAC/F,CAGAgE,WAAiCC,GAA6B,IAAAC,EAC3C,OAAjBA,EAAAvF,KAAK7B,eAALoH,EAAmBC,KAAKF,KAEnBtF,KAAKZ,WAAakG,EAAOV,WAAa5E,KAAKZ,UAAUwF,aACxD5E,KAAKZ,UAAYkG,EAErB,CAGApD,SACEnC,GAEA,MAAMb,MAAEA,EAAKiD,MAAEA,EAAKgD,OAAEA,EAAM9D,KAAEA,GAAStB,GACjC1B,KAAEA,GAAS2B,KAYjB,GAVI3B,GAAkB,SAAV8D,IAEV9F,EAAUoJ,SAASzF,KAAKzB,MAAOF,EAAM2B,KAAKE,OAAOK,MAAMP,KAAK7B,aAAasD,QAAQiE,cAEjFrH,EAAKsH,MAAQtH,EAAK0D,MAAQ1D,EAAKyD,KAC/BzD,EAAKuH,OAASvH,EAAK4D,OAAS5D,EAAK2D,MAKd,IAFAhC,KAAKxB,WAAY,8BAA6B2D,EAAgBpC,GAGjF,OAAO,EAGT,MAAMuF,EAAUvF,EAAUuF,OAAStF,KAAKkF,qBAAqBhG,EAAOiD,EAAOgD,EAAQ9D,GAYnF,OAVArB,KAAKxB,WAAY,uBAAsB2D,EAAgBpC,GAEzC,UAAVoC,IACFnC,KAAKZ,UAAYkG,GAGnBtF,KAAKqF,WAAWC,GAEhBtF,KAAKxB,WAAY,6BAA4B2D,EAAgBpC,IAEtD,CACT,CAGA0E,OACE,OAAOoB,KAAKC,KACd,EACD/H,QAAAG,cAAAH,QAAArB,QAEcwB" +} \ No newline at end of file diff --git a/packages/@interactjs/core/LICENSE b/packages/@interactjs/core/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/core/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/core/NativeTypes.d.ts b/packages/@interactjs/core/NativeTypes.d.ts new file mode 100644 index 000000000..80b544d95 --- /dev/null +++ b/packages/@interactjs/core/NativeTypes.d.ts @@ -0,0 +1,3 @@ +export declare const NativePointerEvent: PointerEvent; +export type NativeEventTarget = EventTarget; +export type NativeElement = Element; diff --git a/packages/@interactjs/core/NativeTypes.js b/packages/@interactjs/core/NativeTypes.js new file mode 100644 index 000000000..b512f22fe --- /dev/null +++ b/packages/@interactjs/core/NativeTypes.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.NativePointerEvent = void 0; +const NativePointerEvent = exports.NativePointerEvent = null; +//# sourceMappingURL=NativeTypes.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/NativeTypes.js.map b/packages/@interactjs/core/NativeTypes.js.map new file mode 100644 index 000000000..b94dfec68 --- /dev/null +++ b/packages/@interactjs/core/NativeTypes.js.map @@ -0,0 +1,14 @@ +{ + "version": 3, + "names": [ + "NativePointerEvent", + "exports" + ], + "sources": [ + "NativeTypes.ts" + ], + "sourcesContent": [ + "export const NativePointerEvent = null as unknown as InstanceType\nexport type NativeEventTarget = EventTarget\nexport type NativeElement = Element\n" + ], + "mappings": ";;;;;;AAAO,MAAMA,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG,IAAoD" +} \ No newline at end of file diff --git a/packages/@interactjs/core/NativeTypes.prod.js b/packages/@interactjs/core/NativeTypes.prod.js new file mode 100644 index 000000000..3dc71d217 --- /dev/null +++ b/packages/@interactjs/core/NativeTypes.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.NativePointerEvent=void 0,exports.NativePointerEvent=null; +//# sourceMappingURL=NativeTypes.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/NativeTypes.prod.js.map b/packages/@interactjs/core/NativeTypes.prod.js.map new file mode 100644 index 000000000..d9fdb5c03 --- /dev/null +++ b/packages/@interactjs/core/NativeTypes.prod.js.map @@ -0,0 +1,14 @@ +{ + "version": 3, + "names": [ + "exports", + "NativePointerEvent" + ], + "sources": [ + "NativeTypes.ts" + ], + "sourcesContent": [ + "export const NativePointerEvent = null as unknown as InstanceType\nexport type NativeEventTarget = EventTarget\nexport type NativeElement = Element\n" + ], + "mappings": "yFAA+BA,QAAAC,mBAAG" +} \ No newline at end of file diff --git a/packages/@interactjs/core/PointerInfo.d.ts b/packages/@interactjs/core/PointerInfo.d.ts new file mode 100644 index 000000000..243ace863 --- /dev/null +++ b/packages/@interactjs/core/PointerInfo.d.ts @@ -0,0 +1,9 @@ +import type { PointerEventType, PointerType } from '@interactjs/core/types'; +export declare class PointerInfo { + id: number; + pointer: PointerType; + event: PointerEventType; + downTime: number; + downTarget: Node; + constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node); +} diff --git a/packages/@interactjs/core/PointerInfo.js b/packages/@interactjs/core/PointerInfo.js new file mode 100644 index 000000000..a7f60e63f --- /dev/null +++ b/packages/@interactjs/core/PointerInfo.js @@ -0,0 +1,22 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PointerInfo = void 0; +class PointerInfo { + id; + pointer; + event; + downTime; + downTarget; + constructor(id, pointer, event, downTime, downTarget) { + this.id = id; + this.pointer = pointer; + this.event = event; + this.downTime = downTime; + this.downTarget = downTarget; + } +} +exports.PointerInfo = PointerInfo; +//# sourceMappingURL=PointerInfo.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/PointerInfo.js.map b/packages/@interactjs/core/PointerInfo.js.map new file mode 100644 index 000000000..16b9006dd --- /dev/null +++ b/packages/@interactjs/core/PointerInfo.js.map @@ -0,0 +1,20 @@ +{ + "version": 3, + "names": [ + "PointerInfo", + "id", + "pointer", + "event", + "downTime", + "downTarget", + "constructor", + "exports" + ], + "sources": [ + "PointerInfo.ts" + ], + "sourcesContent": [ + "import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n id: number\n pointer: PointerType\n event: PointerEventType\n downTime: number\n downTarget: Node\n\n constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n this.id = id\n this.pointer = pointer\n this.event = event\n this.downTime = downTime\n this.downTarget = downTarget\n }\n}\n" + ], + "mappings": ";;;;;;AAEO,MAAMA,WAAW,CAAC;EACvBC,EAAE;EACFC,OAAO;EACPC,KAAK;EACLC,QAAQ;EACRC,UAAU;EAEVC,WAAWA,CAACL,EAAU,EAAEC,OAAoB,EAAEC,KAAuB,EAAEC,QAAgB,EAAEC,UAAgB,EAAE;IACzG,IAAI,CAACJ,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;AACF;AAACE,OAAA,CAAAP,WAAA,GAAAA,WAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/core/PointerInfo.prod.js b/packages/@interactjs/core/PointerInfo.prod.js new file mode 100644 index 000000000..7cef64a1b --- /dev/null +++ b/packages/@interactjs/core/PointerInfo.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.PointerInfo=void 0,exports.PointerInfo=class{id;pointer;event;downTime;downTarget;constructor(e,t,o,i,n){this.id=e,this.pointer=t,this.event=o,this.downTime=i,this.downTarget=n}}; +//# sourceMappingURL=PointerInfo.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/PointerInfo.prod.js.map b/packages/@interactjs/core/PointerInfo.prod.js.map new file mode 100644 index 000000000..e49ece0df --- /dev/null +++ b/packages/@interactjs/core/PointerInfo.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "exports", + "PointerInfo", + "id", + "pointer", + "event", + "downTime", + "downTarget", + "constructor", + "this" + ], + "sources": [ + "PointerInfo.ts" + ], + "sourcesContent": [ + "import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n id: number\n pointer: PointerType\n event: PointerEventType\n downTime: number\n downTarget: Node\n\n constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n this.id = id\n this.pointer = pointer\n this.event = event\n this.downTime = downTime\n this.downTarget = downTarget\n }\n}\n" + ], + "mappings": "kFAgBCA,QAAAC,YAdM,MACLC,GACAC,QACAC,MACAC,SACAC,WAEAC,YAAYL,EAAYC,EAAsBC,EAAyBC,EAAkBC,GACvFE,KAAKN,GAAKA,EACVM,KAAKL,QAAUA,EACfK,KAAKJ,MAAQA,EACbI,KAAKH,SAAWA,EAChBG,KAAKF,WAAaA,CACpB" +} \ No newline at end of file diff --git a/packages/@interactjs/core/events.d.ts b/packages/@interactjs/core/events.d.ts new file mode 100644 index 000000000..5131f0401 --- /dev/null +++ b/packages/@interactjs/core/events.d.ts @@ -0,0 +1,55 @@ +import type { Scope } from '@interactjs/core/scope'; +import type { Element } from '@interactjs/core/types'; +import type { NativeEventTarget } from './NativeTypes'; +declare module '@interactjs/core/scope' { + interface Scope { + events: ReturnType; + } +} +interface EventOptions { + capture: boolean; + passive: boolean; +} +type PartialEventTarget = Partial; +type ListenerEntry = { + func: (event: Event | FakeEvent) => any; + options: EventOptions; +}; +declare function install(scope: Scope): { + add: (eventTarget: PartialEventTarget, type: string, listener: ListenerEntry['func'], optionalArg?: boolean | EventOptions) => void; + remove: (eventTarget: PartialEventTarget, type: string, listener?: 'all' | ListenerEntry['func'], optionalArg?: boolean | EventOptions) => void; + addDelegate: (selector: string, context: Node, type: string, listener: ListenerEntry['func'], optionalArg?: any) => void; + removeDelegate: (selector: string, context: Document | Element, type: string, listener?: ListenerEntry['func'], optionalArg?: any) => void; + delegateListener: (event: Event | FakeEvent, optionalArg?: any) => void; + delegateUseCapture: (this: Element, event: Event | FakeEvent) => any; + delegatedEvents: { + [type: string]: { + selector: string; + context: Node; + listeners: ListenerEntry[]; + }[]; + }; + documents: Document[]; + targets: { + eventTarget: PartialEventTarget; + events: { + [type: string]: ListenerEntry[]; + }; + }[]; + supportsOptions: boolean; + supportsPassive: boolean; +}; +declare class FakeEvent implements Partial { + currentTarget: Node; + originalEvent: Event; + type: string; + constructor(originalEvent: Event); + preventOriginalDefault(): void; + stopPropagation(): void; + stopImmediatePropagation(): void; +} +declare const _default: { + id: string; + install: typeof install; +}; +export default _default; diff --git a/packages/@interactjs/core/events.js b/packages/@interactjs/core/events.js new file mode 100644 index 000000000..4f2a8f501 --- /dev/null +++ b/packages/@interactjs/core/events.js @@ -0,0 +1,262 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var arr = _interopRequireWildcard(require("../utils/arr.js")); +var domUtils = _interopRequireWildcard(require("../utils/domUtils.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _pointerExtend = _interopRequireDefault(require("../utils/pointerExtend.js")); +var pointerUtils = _interopRequireWildcard(require("../utils/pointerUtils.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function install(scope) { + var _scope$document; + const targets = []; + const delegatedEvents = {}; + const documents = []; + const eventsMethods = { + add, + remove, + addDelegate, + removeDelegate, + delegateListener, + delegateUseCapture, + delegatedEvents, + documents, + targets, + supportsOptions: false, + supportsPassive: false + }; + + // check if browser supports passive events and options arg + (_scope$document = scope.document) == null ? void 0 : _scope$document.createElement('div').addEventListener('test', null, { + get capture() { + return eventsMethods.supportsOptions = true; + }, + get passive() { + return eventsMethods.supportsPassive = true; + } + }); + scope.events = eventsMethods; + function add(eventTarget, type, listener, optionalArg) { + if (!eventTarget.addEventListener) return; + const options = getOptions(optionalArg); + let target = arr.find(targets, t => t.eventTarget === eventTarget); + if (!target) { + target = { + eventTarget, + events: {} + }; + targets.push(target); + } + if (!target.events[type]) { + target.events[type] = []; + } + if (!arr.find(target.events[type], l => l.func === listener && optionsMatch(l.options, options))) { + eventTarget.addEventListener(type, listener, eventsMethods.supportsOptions ? options : options.capture); + target.events[type].push({ + func: listener, + options + }); + } + } + function remove(eventTarget, type, listener, optionalArg) { + if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return; + const targetIndex = arr.findIndex(targets, t => t.eventTarget === eventTarget); + const target = targets[targetIndex]; + if (!target || !target.events) { + return; + } + if (type === 'all') { + for (type in target.events) { + if (target.events.hasOwnProperty(type)) { + remove(eventTarget, type, 'all'); + } + } + return; + } + let typeIsEmpty = false; + const typeListeners = target.events[type]; + if (typeListeners) { + if (listener === 'all') { + for (let i = typeListeners.length - 1; i >= 0; i--) { + const entry = typeListeners[i]; + remove(eventTarget, type, entry.func, entry.options); + } + return; + } else { + const options = getOptions(optionalArg); + for (let i = 0; i < typeListeners.length; i++) { + const entry = typeListeners[i]; + if (entry.func === listener && optionsMatch(entry.options, options)) { + eventTarget.removeEventListener(type, listener, eventsMethods.supportsOptions ? options : options.capture); + typeListeners.splice(i, 1); + if (typeListeners.length === 0) { + delete target.events[type]; + typeIsEmpty = true; + } + break; + } + } + } + } + if (typeIsEmpty && !Object.keys(target.events).length) { + targets.splice(targetIndex, 1); + } + } + function addDelegate(selector, context, type, listener, optionalArg) { + const options = getOptions(optionalArg); + if (!delegatedEvents[type]) { + delegatedEvents[type] = []; + + // add delegate listener functions + for (const doc of documents) { + add(doc, type, delegateListener); + add(doc, type, delegateUseCapture, true); + } + } + const delegates = delegatedEvents[type]; + let delegate = arr.find(delegates, d => d.selector === selector && d.context === context); + if (!delegate) { + delegate = { + selector, + context, + listeners: [] + }; + delegates.push(delegate); + } + delegate.listeners.push({ + func: listener, + options + }); + } + function removeDelegate(selector, context, type, listener, optionalArg) { + const options = getOptions(optionalArg); + const delegates = delegatedEvents[type]; + let matchFound = false; + let index; + if (!delegates) return; + + // count from last index of delegated to 0 + for (index = delegates.length - 1; index >= 0; index--) { + const cur = delegates[index]; + // look for matching selector and context Node + if (cur.selector === selector && cur.context === context) { + const { + listeners + } = cur; + + // each item of the listeners array is an array: [function, capture, passive] + for (let i = listeners.length - 1; i >= 0; i--) { + const entry = listeners[i]; + + // check if the listener functions and capture and passive flags match + if (entry.func === listener && optionsMatch(entry.options, options)) { + // remove the listener from the array of listeners + listeners.splice(i, 1); + + // if all listeners for this target have been removed + // remove the target from the delegates array + if (!listeners.length) { + delegates.splice(index, 1); + + // remove delegate function from context + remove(context, type, delegateListener); + remove(context, type, delegateUseCapture, true); + } + + // only remove one listener + matchFound = true; + break; + } + } + if (matchFound) { + break; + } + } + } + } + + // bound to the interactable context when a DOM event + // listener is added to a selector interactable + function delegateListener(event, optionalArg) { + const options = getOptions(optionalArg); + const fakeEvent = new FakeEvent(event); + const delegates = delegatedEvents[event.type]; + const [eventTarget] = pointerUtils.getEventTargets(event); + let element = eventTarget; + + // climb up document tree looking for selector matches + while (_is.default.element(element)) { + for (let i = 0; i < delegates.length; i++) { + const cur = delegates[i]; + const { + selector, + context + } = cur; + if (domUtils.matchesSelector(element, selector) && domUtils.nodeContains(context, eventTarget) && domUtils.nodeContains(context, element)) { + const { + listeners + } = cur; + fakeEvent.currentTarget = element; + for (const entry of listeners) { + if (optionsMatch(entry.options, options)) { + entry.func(fakeEvent); + } + } + } + } + element = domUtils.parentNode(element); + } + } + function delegateUseCapture(event) { + return delegateListener.call(this, event, true); + } + + // for type inferrence + return eventsMethods; +} +class FakeEvent { + currentTarget; + originalEvent; + type; + constructor(originalEvent) { + this.originalEvent = originalEvent; + // duplicate the event so that currentTarget can be changed + (0, _pointerExtend.default)(this, originalEvent); + } + preventOriginalDefault() { + this.originalEvent.preventDefault(); + } + stopPropagation() { + this.originalEvent.stopPropagation(); + } + stopImmediatePropagation() { + this.originalEvent.stopImmediatePropagation(); + } +} +function getOptions(param) { + if (!_is.default.object(param)) { + return { + capture: !!param, + passive: false + }; + } + return { + capture: !!param.capture, + passive: !!param.passive + }; +} +function optionsMatch(a, b) { + if (a === b) return true; + if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false; + return !!a.capture === !!b.capture && !!a.passive === !!b.passive; +} +var _default = exports.default = { + id: 'events', + install +}; +//# sourceMappingURL=events.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/events.js.map b/packages/@interactjs/core/events.js.map new file mode 100644 index 000000000..818681116 --- /dev/null +++ b/packages/@interactjs/core/events.js.map @@ -0,0 +1,117 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "domUtils", + "_is", + "_interopRequireDefault", + "_pointerExtend", + "pointerUtils", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "_scope$document", + "targets", + "delegatedEvents", + "documents", + "eventsMethods", + "add", + "remove", + "addDelegate", + "removeDelegate", + "delegateListener", + "delegateUseCapture", + "supportsOptions", + "supportsPassive", + "document", + "createElement", + "addEventListener", + "capture", + "passive", + "events", + "eventTarget", + "type", + "listener", + "optionalArg", + "options", + "getOptions", + "target", + "find", + "push", + "l", + "func", + "optionsMatch", + "removeEventListener", + "targetIndex", + "findIndex", + "typeIsEmpty", + "typeListeners", + "length", + "entry", + "splice", + "keys", + "selector", + "context", + "doc", + "delegates", + "delegate", + "d", + "listeners", + "matchFound", + "index", + "cur", + "event", + "fakeEvent", + "FakeEvent", + "getEventTargets", + "element", + "is", + "matchesSelector", + "nodeContains", + "currentTarget", + "parentNode", + "originalEvent", + "constructor", + "pExtend", + "preventOriginalDefault", + "preventDefault", + "stopPropagation", + "stopImmediatePropagation", + "param", + "object", + "b", + "_default", + "exports", + "id" + ], + "sources": [ + "events.ts" + ], + "sourcesContent": [ + "import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\n\nimport type { NativeEventTarget } from './NativeTypes'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n events: ReturnType\n }\n}\n\ninterface EventOptions {\n capture: boolean\n passive: boolean\n}\n\ntype PartialEventTarget = Partial\n\ntype ListenerEntry = { func: (event: Event | FakeEvent) => any; options: EventOptions }\n\nfunction install(scope: Scope) {\n const targets: Array<{\n eventTarget: PartialEventTarget\n events: { [type: string]: ListenerEntry[] }\n }> = []\n\n const delegatedEvents: {\n [type: string]: Array<{\n selector: string\n context: Node\n listeners: ListenerEntry[]\n }>\n } = {}\n const documents: Document[] = []\n\n const eventsMethods = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n targets,\n\n supportsOptions: false,\n supportsPassive: false,\n }\n\n // check if browser supports passive events and options arg\n scope.document?.createElement('div').addEventListener('test', null, {\n get capture() {\n return (eventsMethods.supportsOptions = true)\n },\n get passive() {\n return (eventsMethods.supportsPassive = true)\n },\n })\n\n scope.events = eventsMethods\n\n function add(\n eventTarget: PartialEventTarget,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener) return\n\n const options = getOptions(optionalArg)\n let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n if (!target) {\n target = {\n eventTarget,\n events: {},\n }\n\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n }\n\n if (!arr.find(target.events[type], (l) => l.func === listener && optionsMatch(l.options, options))) {\n eventTarget.addEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n target.events[type].push({ func: listener, options })\n }\n }\n\n function remove(\n eventTarget: PartialEventTarget,\n type: string,\n listener?: 'all' | ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return\n\n const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n const target = targets[targetIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(eventTarget, type, 'all')\n }\n }\n return\n }\n\n let typeIsEmpty = false\n const typeListeners = target.events[type]\n\n if (typeListeners) {\n if (listener === 'all') {\n for (let i = typeListeners.length - 1; i >= 0; i--) {\n const entry = typeListeners[i]\n remove(eventTarget, type, entry.func, entry.options)\n }\n return\n } else {\n const options = getOptions(optionalArg)\n\n for (let i = 0; i < typeListeners.length; i++) {\n const entry = typeListeners[i]\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n eventTarget.removeEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n typeListeners.splice(i, 1)\n\n if (typeListeners.length === 0) {\n delete target.events[type]\n typeIsEmpty = true\n }\n\n break\n }\n }\n }\n }\n\n if (typeIsEmpty && !Object.keys(target.events).length) {\n targets.splice(targetIndex, 1)\n }\n }\n\n function addDelegate(\n selector: string,\n context: Node,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = []\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegates = delegatedEvents[type]\n let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n if (!delegate) {\n delegate = { selector, context, listeners: [] }\n delegates.push(delegate)\n }\n\n delegate.listeners.push({ func: listener, options })\n }\n\n function removeDelegate(\n selector: string,\n context: Document | Element,\n type: string,\n listener?: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n const delegates = delegatedEvents[type]\n let matchFound = false\n let index: number\n\n if (!delegates) return\n\n // count from last index of delegated to 0\n for (index = delegates.length - 1; index >= 0; index--) {\n const cur = delegates[index]\n // look for matching selector and context Node\n if (cur.selector === selector && cur.context === context) {\n const { listeners } = cur\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const entry = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this target have been removed\n // remove the target from the delegates array\n if (!listeners.length) {\n delegates.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) {\n break\n }\n }\n }\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener(event: Event | FakeEvent, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event as Event)\n const delegates = delegatedEvents[event.type]\n const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n let element: Node = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegates.length; i++) {\n const cur = delegates[i]\n const { selector, context } = cur\n\n if (\n domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)\n ) {\n const { listeners } = cur\n\n fakeEvent.currentTarget = element\n\n for (const entry of listeners) {\n if (optionsMatch(entry.options, options)) {\n entry.func(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n }\n\n function delegateUseCapture(this: Element, event: Event | FakeEvent) {\n return delegateListener.call(this, event, true)\n }\n\n // for type inferrence\n return eventsMethods\n}\n\nclass FakeEvent implements Partial {\n currentTarget: Node\n originalEvent: Event\n type: string\n\n constructor(originalEvent: Event) {\n this.originalEvent = originalEvent\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault() {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation() {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation() {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nfunction getOptions(param: { [index: string]: any } | boolean): { capture: boolean; passive: boolean } {\n if (!is.object(param)) {\n return { capture: !!param, passive: false }\n }\n\n return {\n capture: !!param.capture,\n passive: !!param.passive,\n }\n}\n\nfunction optionsMatch(a: Partial | boolean, b: Partial) {\n if (a === b) return true\n\n if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false\n\n return !!a.capture === !!b.capture && !!a.passive === !!b.passive\n}\n\nexport default {\n id: 'events',\n install,\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/events.prod.js b/packages/@interactjs/core/events.prod.js new file mode 100644 index 000000000..f392dd445 --- /dev/null +++ b/packages/@interactjs/core/events.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=a(require("../utils/arr.prod.js")),t=a(require("../utils/domUtils.prod.js")),n=o(require("../utils/is.prod.js")),r=o(require("../utils/pointerExtend.prod.js")),s=a(require("../utils/pointerUtils.prod.js"));function o(e){return e&&e.__esModule?e:{default:e}}function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=e=>e?n:t)(e)}function a(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var a=s?Object.getOwnPropertyDescriptor(e,o):null;a&&(a.get||a.set)?Object.defineProperty(r,o,a):r[o]=e[o]}return r.default=e,n&&n.set(e,r),r}class u{currentTarget;originalEvent;type;constructor(e){this.originalEvent=e,(0,r.default)(this,e)}preventOriginalDefault(){this.originalEvent.preventDefault()}stopPropagation(){this.originalEvent.stopPropagation()}stopImmediatePropagation(){this.originalEvent.stopImmediatePropagation()}}function l(e){return n.default.object(e)?{capture:!!e.capture,passive:!!e.passive}:{capture:!!e,passive:!1}}function p(e,t){return e===t||("boolean"==typeof e?!!t.capture===e&&0==!!t.passive:!!e.capture==!!t.capture&&!!e.passive==!!t.passive)}exports.default={id:"events",install(r){var o;const i=[],a={},c=[],f={add:d,remove:v,addDelegate(t,n,r,s,o){const i=l(o);if(!a[r]){a[r]=[];for(const e of c)d(e,r,g),d(e,r,h,!0)}const u=a[r];let p=e.find(u,(e=>e.selector===t&&e.context===n));p||(p={selector:t,context:n,listeners:[]},u.push(p)),p.listeners.push({func:s,options:i})},removeDelegate(e,t,n,r,s){const o=l(s),i=a[n];let u,c=!1;if(i)for(u=i.length-1;u>=0;u--){const s=i[u];if(s.selector===e&&s.context===t){const{listeners:e}=s;for(let s=e.length-1;s>=0;s--){const a=e[s];if(a.func===r&&p(a.options,o)){e.splice(s,1),e.length||(i.splice(u,1),v(t,n,g),v(t,n,h,!0)),c=!0;break}}if(c)break}}},delegateListener:g,delegateUseCapture:h,delegatedEvents:a,documents:c,targets:i,supportsOptions:!1,supportsPassive:!1};function d(t,n,r,s){if(!t.addEventListener)return;const o=l(s);let a=e.find(i,(e=>e.eventTarget===t));a||(a={eventTarget:t,events:{}},i.push(a)),a.events[n]||(a.events[n]=[]),e.find(a.events[n],(e=>e.func===r&&p(e.options,o)))||(t.addEventListener(n,r,f.supportsOptions?o:o.capture),a.events[n].push({func:r,options:o}))}function v(t,n,r,s){if(!t.addEventListener||!t.removeEventListener)return;const o=e.findIndex(i,(e=>e.eventTarget===t)),a=i[o];if(!a||!a.events)return;if("all"===n){for(n in a.events)a.events.hasOwnProperty(n)&&v(t,n,"all");return}let u=!1;const c=a.events[n];if(c){if("all"===r){for(let e=c.length-1;e>=0;e--){const r=c[e];v(t,n,r.func,r.options)}return}{const e=l(s);for(let s=0;s\n }\n}\n\ninterface EventOptions {\n capture: boolean\n passive: boolean\n}\n\ntype PartialEventTarget = Partial\n\ntype ListenerEntry = { func: (event: Event | FakeEvent) => any; options: EventOptions }\n\nfunction install(scope: Scope) {\n const targets: Array<{\n eventTarget: PartialEventTarget\n events: { [type: string]: ListenerEntry[] }\n }> = []\n\n const delegatedEvents: {\n [type: string]: Array<{\n selector: string\n context: Node\n listeners: ListenerEntry[]\n }>\n } = {}\n const documents: Document[] = []\n\n const eventsMethods = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n targets,\n\n supportsOptions: false,\n supportsPassive: false,\n }\n\n // check if browser supports passive events and options arg\n scope.document?.createElement('div').addEventListener('test', null, {\n get capture() {\n return (eventsMethods.supportsOptions = true)\n },\n get passive() {\n return (eventsMethods.supportsPassive = true)\n },\n })\n\n scope.events = eventsMethods\n\n function add(\n eventTarget: PartialEventTarget,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener) return\n\n const options = getOptions(optionalArg)\n let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n if (!target) {\n target = {\n eventTarget,\n events: {},\n }\n\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n }\n\n if (!arr.find(target.events[type], (l) => l.func === listener && optionsMatch(l.options, options))) {\n eventTarget.addEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n target.events[type].push({ func: listener, options })\n }\n }\n\n function remove(\n eventTarget: PartialEventTarget,\n type: string,\n listener?: 'all' | ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return\n\n const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n const target = targets[targetIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(eventTarget, type, 'all')\n }\n }\n return\n }\n\n let typeIsEmpty = false\n const typeListeners = target.events[type]\n\n if (typeListeners) {\n if (listener === 'all') {\n for (let i = typeListeners.length - 1; i >= 0; i--) {\n const entry = typeListeners[i]\n remove(eventTarget, type, entry.func, entry.options)\n }\n return\n } else {\n const options = getOptions(optionalArg)\n\n for (let i = 0; i < typeListeners.length; i++) {\n const entry = typeListeners[i]\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n eventTarget.removeEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n typeListeners.splice(i, 1)\n\n if (typeListeners.length === 0) {\n delete target.events[type]\n typeIsEmpty = true\n }\n\n break\n }\n }\n }\n }\n\n if (typeIsEmpty && !Object.keys(target.events).length) {\n targets.splice(targetIndex, 1)\n }\n }\n\n function addDelegate(\n selector: string,\n context: Node,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = []\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegates = delegatedEvents[type]\n let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n if (!delegate) {\n delegate = { selector, context, listeners: [] }\n delegates.push(delegate)\n }\n\n delegate.listeners.push({ func: listener, options })\n }\n\n function removeDelegate(\n selector: string,\n context: Document | Element,\n type: string,\n listener?: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n const delegates = delegatedEvents[type]\n let matchFound = false\n let index: number\n\n if (!delegates) return\n\n // count from last index of delegated to 0\n for (index = delegates.length - 1; index >= 0; index--) {\n const cur = delegates[index]\n // look for matching selector and context Node\n if (cur.selector === selector && cur.context === context) {\n const { listeners } = cur\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const entry = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this target have been removed\n // remove the target from the delegates array\n if (!listeners.length) {\n delegates.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) {\n break\n }\n }\n }\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener(event: Event | FakeEvent, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event as Event)\n const delegates = delegatedEvents[event.type]\n const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n let element: Node = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegates.length; i++) {\n const cur = delegates[i]\n const { selector, context } = cur\n\n if (\n domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)\n ) {\n const { listeners } = cur\n\n fakeEvent.currentTarget = element\n\n for (const entry of listeners) {\n if (optionsMatch(entry.options, options)) {\n entry.func(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n }\n\n function delegateUseCapture(this: Element, event: Event | FakeEvent) {\n return delegateListener.call(this, event, true)\n }\n\n // for type inferrence\n return eventsMethods\n}\n\nclass FakeEvent implements Partial {\n currentTarget: Node\n originalEvent: Event\n type: string\n\n constructor(originalEvent: Event) {\n this.originalEvent = originalEvent\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault() {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation() {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation() {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nfunction getOptions(param: { [index: string]: any } | boolean): { capture: boolean; passive: boolean } {\n if (!is.object(param)) {\n return { capture: !!param, passive: false }\n }\n\n return {\n capture: !!param.capture,\n passive: !!param.passive,\n }\n}\n\nfunction optionsMatch(a: Partial | boolean, b: Partial) {\n if (a === b) return true\n\n if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false\n\n return !!a.capture === !!b.capture && !!a.passive === !!b.passive\n}\n\nexport default {\n id: 'events',\n install,\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/interactablePreventDefault.d.ts b/packages/@interactjs/core/interactablePreventDefault.d.ts new file mode 100644 index 000000000..548f5e756 --- /dev/null +++ b/packages/@interactjs/core/interactablePreventDefault.d.ts @@ -0,0 +1,27 @@ +import type { Scope } from '@interactjs/core/scope'; +type PreventDefaultValue = 'always' | 'never' | 'auto'; +declare module '@interactjs/core/Interactable' { + interface Interactable { + preventDefault(newValue: PreventDefaultValue): this; + preventDefault(): PreventDefaultValue; + /** + * Returns or sets whether to prevent the browser's default behaviour in + * response to pointer events. Can be set to: + * - `'always'` to always prevent + * - `'never'` to never prevent + * - `'auto'` to let interact.js try to determine what would be best + * + * @param newValue - `'always'`, `'never'` or `'auto'` + * @returns The current setting or this Interactable + */ + preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this; + checkAndPreventDefault(event: Event): void; + } +} +export declare function install(scope: Scope): void; +declare const _default: { + id: string; + install: typeof install; + listeners: any; +}; +export default _default; diff --git a/packages/@interactjs/core/interactablePreventDefault.js b/packages/@interactjs/core/interactablePreventDefault.js new file mode 100644 index 000000000..91abc73ed --- /dev/null +++ b/packages/@interactjs/core/interactablePreventDefault.js @@ -0,0 +1,93 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.install = install; +var _domUtils = require("../utils/domUtils.js"); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _window = require("../utils/window.js"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const preventDefault = function preventDefault(newValue) { + if (/^(always|never|auto)$/.test(newValue)) { + this.options.preventDefault = newValue; + return this; + } + if (_is.default.bool(newValue)) { + this.options.preventDefault = newValue ? 'always' : 'never'; + return this; + } + return this.options.preventDefault; +}; +function checkAndPreventDefault(interactable, scope, event) { + const setting = interactable.options.preventDefault; + if (setting === 'never') return; + if (setting === 'always') { + event.preventDefault(); + return; + } + + // setting === 'auto' + + // if the browser supports passive event listeners and isn't running on iOS, + // don't preventDefault of touch{start,move} events. CSS touch-action and + // user-select should be used instead of calling event.preventDefault(). + if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) { + const doc = (0, _window.getWindow)(event.target).document; + const docOptions = scope.getDocOptions(doc); + if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) { + return; + } + } + + // don't preventDefault of pointerdown events + if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) { + return; + } + + // don't preventDefault on editable elements + if (_is.default.element(event.target) && (0, _domUtils.matchesSelector)(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { + return; + } + event.preventDefault(); +} +function onInteractionEvent({ + interaction, + event +}) { + if (interaction.interactable) { + interaction.interactable.checkAndPreventDefault(event); + } +} +function install(scope) { + const { + Interactable + } = scope; + Interactable.prototype.preventDefault = preventDefault; + Interactable.prototype.checkAndPreventDefault = function (event) { + return checkAndPreventDefault(this, scope, event); + }; + + // prevent native HTML5 drag on interact.js target elements + scope.interactions.docEvents.push({ + type: 'dragstart', + listener(event) { + for (const interaction of scope.interactions.list) { + if (interaction.element && (interaction.element === event.target || (0, _domUtils.nodeContains)(interaction.element, event.target))) { + interaction.interactable.checkAndPreventDefault(event); + return; + } + } + } + }); +} +var _default = exports.default = { + id: 'core/interactablePreventDefault', + install, + listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => { + acc[`interactions:${eventType}`] = onInteractionEvent; + return acc; + }, {}) +}; +//# sourceMappingURL=interactablePreventDefault.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/interactablePreventDefault.js.map b/packages/@interactjs/core/interactablePreventDefault.js.map new file mode 100644 index 000000000..8c12ee4d0 --- /dev/null +++ b/packages/@interactjs/core/interactablePreventDefault.js.map @@ -0,0 +1,61 @@ +{ + "version": 3, + "names": [ + "_domUtils", + "require", + "_is", + "_interopRequireDefault", + "_window", + "obj", + "__esModule", + "default", + "preventDefault", + "newValue", + "test", + "options", + "is", + "bool", + "checkAndPreventDefault", + "interactable", + "scope", + "event", + "setting", + "events", + "supportsPassive", + "type", + "doc", + "getWindow", + "target", + "document", + "docOptions", + "getDocOptions", + "passive", + "element", + "matchesSelector", + "onInteractionEvent", + "interaction", + "install", + "Interactable", + "prototype", + "interactions", + "docEvents", + "push", + "listener", + "list", + "nodeContains", + "_default", + "exports", + "id", + "listeners", + "reduce", + "acc", + "eventType" + ], + "sources": [ + "interactablePreventDefault.ts" + ], + "sourcesContent": [ + "import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault(newValue: PreventDefaultValue): this\n preventDefault(): PreventDefaultValue\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param newValue - `'always'`, `'never'` or `'auto'`\n * @returns The current setting or this Interactable\n */\n preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this\n checkAndPreventDefault(event: Event): void\n }\n}\n\nconst preventDefault = function preventDefault(this: Interactable, newValue?: PreventDefaultValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n} as Interactable['preventDefault']\n\nfunction checkAndPreventDefault(interactable: Interactable, scope: Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') return\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (\n is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n ) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent({ interaction, event }: { interaction: Interaction; event: PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n if (\n interaction.element &&\n (interaction.element === event.target || nodeContains(interaction.element, event.target))\n ) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {} as any),\n}\n" + ], + "mappings": ";;;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,GAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAAoD,SAAAE,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AA4BpD,MAAMG,cAAc,GAAG,SAASA,cAAcA,CAAqBC,QAA8B,EAAE;EACjG,IAAI,uBAAuB,CAACC,IAAI,CAACD,QAAQ,CAAC,EAAE;IAC1C,IAAI,CAACE,OAAO,CAACH,cAAc,GAAGC,QAAQ;IACtC,OAAO,IAAI;EACb;EAEA,IAAIG,WAAE,CAACC,IAAI,CAACJ,QAAQ,CAAC,EAAE;IACrB,IAAI,CAACE,OAAO,CAACH,cAAc,GAAGC,QAAQ,GAAG,QAAQ,GAAG,OAAO;IAC3D,OAAO,IAAI;EACb;EAEA,OAAO,IAAI,CAACE,OAAO,CAACH,cAAc;AACpC,CAAmC;AAEnC,SAASM,sBAAsBA,CAACC,YAA0B,EAAEC,KAAY,EAAEC,KAAY,EAAE;EACtF,MAAMC,OAAO,GAAGH,YAAY,CAACJ,OAAO,CAACH,cAAc;EAEnD,IAAIU,OAAO,KAAK,OAAO,EAAE;EAEzB,IAAIA,OAAO,KAAK,QAAQ,EAAE;IACxBD,KAAK,CAACT,cAAc,CAAC,CAAC;IACtB;EACF;;EAEA;;EAEA;EACA;EACA;EACA,IAAIQ,KAAK,CAACG,MAAM,CAACC,eAAe,IAAI,qBAAqB,CAACV,IAAI,CAACO,KAAK,CAACI,IAAI,CAAC,EAAE;IAC1E,MAAMC,GAAG,GAAG,IAAAC,iBAAS,EAACN,KAAK,CAACO,MAAM,CAAC,CAACC,QAAQ;IAC5C,MAAMC,UAAU,GAAGV,KAAK,CAACW,aAAa,CAACL,GAAG,CAAC;IAE3C,IAAI,EAAEI,UAAU,IAAIA,UAAU,CAACP,MAAM,CAAC,IAAIO,UAAU,CAACP,MAAM,CAACS,OAAO,KAAK,KAAK,EAAE;MAC7E;IACF;EACF;;EAEA;EACA,IAAI,sCAAsC,CAAClB,IAAI,CAACO,KAAK,CAACI,IAAI,CAAC,EAAE;IAC3D;EACF;;EAEA;EACA,IACET,WAAE,CAACiB,OAAO,CAACZ,KAAK,CAACO,MAAM,CAAC,IACxB,IAAAM,yBAAe,EAACb,KAAK,CAACO,MAAM,EAAE,uEAAuE,CAAC,EACtG;IACA;EACF;EAEAP,KAAK,CAACT,cAAc,CAAC,CAAC;AACxB;AAEA,SAASuB,kBAAkBA,CAAC;EAAEC,WAAW;EAAEf;AAA6D,CAAC,EAAE;EACzG,IAAIe,WAAW,CAACjB,YAAY,EAAE;IAC5BiB,WAAW,CAACjB,YAAY,CAACD,sBAAsB,CAACG,KAAc,CAAC;EACjE;AACF;AAEO,SAASgB,OAAOA,CAACjB,KAAY,EAAE;EACpC,MAAM;IAAEkB;EAAa,CAAC,GAAGlB,KAAK;EAE9BkB,YAAY,CAACC,SAAS,CAAC3B,cAAc,GAAGA,cAAc;EAEtD0B,YAAY,CAACC,SAAS,CAACrB,sBAAsB,GAAG,UAAUG,KAAK,EAAE;IAC/D,OAAOH,sBAAsB,CAAC,IAAI,EAAEE,KAAK,EAAEC,KAAK,CAAC;EACnD,CAAC;;EAED;EACAD,KAAK,CAACoB,YAAY,CAACC,SAAS,CAACC,IAAI,CAAC;IAChCjB,IAAI,EAAE,WAAW;IACjBkB,QAAQA,CAACtB,KAAK,EAAE;MACd,KAAK,MAAMe,WAAW,IAAIhB,KAAK,CAACoB,YAAY,CAACI,IAAI,EAAE;QACjD,IACER,WAAW,CAACH,OAAO,KAClBG,WAAW,CAACH,OAAO,KAAKZ,KAAK,CAACO,MAAM,IAAI,IAAAiB,sBAAY,EAACT,WAAW,CAACH,OAAO,EAAEZ,KAAK,CAACO,MAAM,CAAC,CAAC,EACzF;UACAQ,WAAW,CAACjB,YAAY,CAACD,sBAAsB,CAACG,KAAK,CAAC;UACtD;QACF;MACF;IACF;EACF,CAAC,CAAC;AACJ;AAAC,IAAAyB,QAAA,GAAAC,OAAA,CAAApC,OAAA,GAEc;EACbqC,EAAE,EAAE,iCAAiC;EACrCX,OAAO;EACPY,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAACC,MAAM,CAAC,CAACC,GAAG,EAAEC,SAAS,KAAK;IACrED,GAAG,CAAE,gBAAeC,SAAU,EAAC,CAAC,GAAGjB,kBAAkB;IACrD,OAAOgB,GAAG;EACZ,CAAC,EAAE,CAAC,CAAQ;AACd,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/core/interactablePreventDefault.prod.js b/packages/@interactjs/core/interactablePreventDefault.prod.js new file mode 100644 index 000000000..e7798b458 --- /dev/null +++ b/packages/@interactjs/core/interactablePreventDefault.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.install=a;var e,t=require("../utils/domUtils.prod.js"),n=(e=require("../utils/is.prod.js"))&&e.__esModule?e:{default:e},r=require("../utils/window.prod.js");const o=function(e){return/^(always|never|auto)$/.test(e)?(this.options.preventDefault=e,this):n.default.bool(e)?(this.options.preventDefault=e?"always":"never",this):this.options.preventDefault};function s({interaction:e,event:t}){e.interactable&&e.interactable.checkAndPreventDefault(t)}function a(e){const{Interactable:s}=e;s.prototype.preventDefault=o,s.prototype.checkAndPreventDefault=function(o){return((e,o,s)=>{const a=e.options.preventDefault;if("never"!==a)if("always"!==a){if(o.events.supportsPassive&&/^touch(start|move)$/.test(s.type)){const e=(0,r.getWindow)(s.target).document,t=o.getDocOptions(e);if(!t||!t.events||!1!==t.events.passive)return}/^(mouse|pointer|touch)*(down|start)/i.test(s.type)||n.default.element(s.target)&&(0,t.matchesSelector)(s.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||s.preventDefault()}else s.preventDefault()})(this,e,o)},e.interactions.docEvents.push({type:"dragstart",listener(n){for(const r of e.interactions.list)if(r.element&&(r.element===n.target||(0,t.nodeContains)(r.element,n.target)))return void r.interactable.checkAndPreventDefault(n)}})}exports.default={id:"core/interactablePreventDefault",install:a,listeners:["down","move","up","cancel"].reduce(((e,t)=>(e["interactions:"+t]=s,e)),{})}; +//# sourceMappingURL=interactablePreventDefault.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/interactablePreventDefault.prod.js.map b/packages/@interactjs/core/interactablePreventDefault.prod.js.map new file mode 100644 index 000000000..b8852c1b8 --- /dev/null +++ b/packages/@interactjs/core/interactablePreventDefault.prod.js.map @@ -0,0 +1,60 @@ +{ + "version": 3, + "names": [ + "obj", + "_domUtilsProd", + "require", + "_isProd", + "__esModule", + "default", + "_windowProd", + "preventDefault", + "newValue", + "test", + "this", + "options", + "is", + "bool", + "onInteractionEvent", + "interaction", + "event", + "interactable", + "checkAndPreventDefault", + "install", + "scope", + "Interactable", + "prototype", + "setting", + "events", + "supportsPassive", + "type", + "doc", + "getWindow", + "target", + "document", + "docOptions", + "getDocOptions", + "passive", + "element", + "matchesSelector", + "interactions", + "docEvents", + "push", + "listener", + "list", + "nodeContains", + "exports", + "id", + "listeners", + "reduce", + "acc", + "eventType" + ], + "sources": [ + "interactablePreventDefault.ts" + ], + "sourcesContent": [ + "import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault(newValue: PreventDefaultValue): this\n preventDefault(): PreventDefaultValue\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param newValue - `'always'`, `'never'` or `'auto'`\n * @returns The current setting or this Interactable\n */\n preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this\n checkAndPreventDefault(event: Event): void\n }\n}\n\nconst preventDefault = function preventDefault(this: Interactable, newValue?: PreventDefaultValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n} as Interactable['preventDefault']\n\nfunction checkAndPreventDefault(interactable: Interactable, scope: Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') return\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (\n is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n ) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent({ interaction, event }: { interaction: Interaction; event: PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n if (\n interaction.element &&\n (interaction.element === event.target || nodeContains(interaction.element, event.target))\n ) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {} as any),\n}\n" + ], + "mappings": "gGAAA,IAEoDA,EAFpDC,EAAAC,QAAA,6BACAC,GACoDH,EADpDE,QAAA,yBACoDF,EAAAI,WAAAJ,EAAA,CAAAK,QAAAL,GAApDM,EAAAJ,QAAA,2BA4BA,MAAMK,EAAiB,SAA4CC,GACjE,MAAI,wBAAwBC,KAAKD,IAC/BE,KAAKC,QAAQJ,eAAiBC,EACvBE,MAGLE,UAAGC,KAAKL,IACVE,KAAKC,QAAQJ,eAAiBC,EAAW,SAAW,QAC7CE,MAGFA,KAAKC,QAAQJ,cACtB,EA0CA,SAASO,GAAmBC,YAAEA,EAAWC,MAAEA,IACrCD,EAAYE,cACdF,EAAYE,aAAaC,uBAAuBF,EAEpD,CAEO,SAASG,EAAQC,GACtB,MAAMC,aAAEA,GAAiBD,EAEzBC,EAAaC,UAAUf,eAAiBA,EAExCc,EAAaC,UAAUJ,uBAAyB,SAAUF,GACxD,MApDJ,EAAgCC,EAA4BG,EAAcJ,KACxE,MAAMO,EAAUN,EAAaN,QAAQJ,eAErC,GAAgB,UAAZgB,EAEJ,GAAgB,WAAZA,EAAJ,CAUA,GAAIH,EAAMI,OAAOC,iBAAmB,sBAAsBhB,KAAKO,EAAMU,MAAO,CAC1E,MAAMC,GAAM,EAAAC,aAAUZ,EAAMa,QAAQC,SAC9BC,EAAaX,EAAMY,cAAcL,GAEvC,IAAMI,IAAcA,EAAWP,SAAyC,IAA9BO,EAAWP,OAAOS,QAC1D,MAEJ,CAGI,uCAAuCxB,KAAKO,EAAMU,OAMpDd,UAAGsB,QAAQlB,EAAMa,UACjB,EAAAM,mBAAgBnB,EAAMa,OAAQ,0EAKhCb,EAAMT,gBA7BN,MAFES,EAAMT,gBAgCV,EAcWW,CAAuBR,KAAMU,EAAOJ,EAC7C,EAGAI,EAAMgB,aAAaC,UAAUC,KAAK,CAChCZ,KAAM,YACNa,SAASvB,GACP,IAAK,MAAMD,KAAeK,EAAMgB,aAAaI,KAC3C,GACEzB,EAAYmB,UACXnB,EAAYmB,UAAYlB,EAAMa,SAAU,EAAAY,gBAAa1B,EAAYmB,QAASlB,EAAMa,SAGjF,YADAd,EAAYE,aAAaC,uBAAuBF,EAItD,GAEJ,CAAC0B,QAAArC,QAEc,CACbsC,GAAI,kCACJxB,UACAyB,UAAW,CAAC,OAAQ,OAAQ,KAAM,UAAUC,QAAO,CAACC,EAAKC,KACvDD,EAAK,gBAAeC,GAAejC,EAC5BgC,IACN,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/core/interactionFinder.d.ts b/packages/@interactjs/core/interactionFinder.d.ts new file mode 100644 index 000000000..6eca1c0a6 --- /dev/null +++ b/packages/@interactjs/core/interactionFinder.d.ts @@ -0,0 +1,21 @@ +import type Interaction from '@interactjs/core/Interaction'; +import type { Scope } from '@interactjs/core/scope'; +import type { PointerType } from '@interactjs/core/types'; +export interface SearchDetails { + pointer: PointerType; + pointerId: number; + pointerType: string; + eventType: string; + eventTarget: EventTarget; + curEventTarget: EventTarget; + scope: Scope; +} +declare const finder: { + methodOrder: readonly ["simulationResume", "mouseOrPen", "hasPointer", "idle"]; + search(details: SearchDetails): any; + simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails): Interaction; + mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails): any; + hasPointer({ pointerId, scope }: SearchDetails): Interaction; + idle({ pointerType, scope }: SearchDetails): Interaction; +}; +export default finder; diff --git a/packages/@interactjs/core/interactionFinder.js b/packages/@interactjs/core/interactionFinder.js new file mode 100644 index 000000000..c0ba25d06 --- /dev/null +++ b/packages/@interactjs/core/interactionFinder.js @@ -0,0 +1,134 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var dom = _interopRequireWildcard(require("../utils/domUtils.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +const finder = { + methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'], + search(details) { + for (const method of finder.methodOrder) { + const interaction = finder[method](details); + if (interaction) { + return interaction; + } + } + return null; + }, + // try to resume simulation with a new pointer + simulationResume({ + pointerType, + eventType, + eventTarget, + scope + }) { + if (!/down|start/i.test(eventType)) { + return null; + } + for (const interaction of scope.interactions.list) { + let element = eventTarget; + if (interaction.simulation && interaction.simulation.allowResume && interaction.pointerType === pointerType) { + while (element) { + // if the element is the interaction element + if (element === interaction.element) { + return interaction; + } + element = dom.parentNode(element); + } + } + } + return null; + }, + // if it's a mouse or pen interaction + mouseOrPen({ + pointerId, + pointerType, + eventType, + scope + }) { + if (pointerType !== 'mouse' && pointerType !== 'pen') { + return null; + } + let firstNonActive; + for (const interaction of scope.interactions.list) { + if (interaction.pointerType === pointerType) { + // if it's a down event, skip interactions with running simulations + if (interaction.simulation && !hasPointerId(interaction, pointerId)) { + continue; + } + + // if the interaction is active, return it immediately + if (interaction.interacting()) { + return interaction; + } + // otherwise save it and look for another active interaction + else if (!firstNonActive) { + firstNonActive = interaction; + } + } + } + + // if no active mouse interaction was found use the first inactive mouse + // interaction + if (firstNonActive) { + return firstNonActive; + } + + // find any mouse or pen interaction. + // ignore the interaction if the eventType is a *down, and a simulation + // is active + for (const interaction of scope.interactions.list) { + if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) { + return interaction; + } + } + return null; + }, + // get interaction that has this pointer + hasPointer({ + pointerId, + scope + }) { + for (const interaction of scope.interactions.list) { + if (hasPointerId(interaction, pointerId)) { + return interaction; + } + } + return null; + }, + // get first idle interaction with a matching pointerType + idle({ + pointerType, + scope + }) { + for (const interaction of scope.interactions.list) { + // if there's already a pointer held down + if (interaction.pointers.length === 1) { + const target = interaction.interactable; + // don't add this pointer if there is a target interactable and it + // isn't gesturable + if (target && !(target.options.gesture && target.options.gesture.enabled)) { + continue; + } + } + // maximum of 2 pointers per interaction + else if (interaction.pointers.length >= 2) { + continue; + } + if (!interaction.interacting() && pointerType === interaction.pointerType) { + return interaction; + } + } + return null; + } +}; +function hasPointerId(interaction, pointerId) { + return interaction.pointers.some(({ + id + }) => id === pointerId); +} +var _default = exports.default = finder; +//# sourceMappingURL=interactionFinder.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/interactionFinder.js.map b/packages/@interactjs/core/interactionFinder.js.map new file mode 100644 index 000000000..4de0c513a --- /dev/null +++ b/packages/@interactjs/core/interactionFinder.js.map @@ -0,0 +1,72 @@ +{ + "version": 3, + "names": [ + "dom", + "_interopRequireWildcard", + "require", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "finder", + "methodOrder", + "search", + "details", + "method", + "interaction", + "simulationResume", + "pointerType", + "eventType", + "eventTarget", + "scope", + "test", + "interactions", + "list", + "element", + "simulation", + "allowResume", + "parentNode", + "mouseOrPen", + "pointerId", + "firstNonActive", + "hasPointerId", + "interacting", + "hasPointer", + "idle", + "pointers", + "length", + "target", + "interactable", + "options", + "gesture", + "enabled", + "some", + "id", + "_default", + "exports" + ], + "sources": [ + "interactionFinder.ts" + ], + "sourcesContent": [ + "import * as dom from '@interactjs/utils/domUtils'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\n\nexport interface SearchDetails {\n pointer: PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: EventTarget\n curEventTarget: EventTarget\n scope: Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n search(details: SearchDetails) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n\n return null\n },\n\n // try to resume simulation with a new pointer\n simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget as Node\n\n if (\n interaction.simulation &&\n interaction.simulation.allowResume &&\n interaction.pointerType === pointerType\n ) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n continue\n }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && pointerType === interaction.pointerType) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId(interaction: Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/interactionFinder.prod.js b/packages/@interactjs/core/interactionFinder.prod.js new file mode 100644 index 000000000..67d92d128 --- /dev/null +++ b/packages/@interactjs/core/interactionFinder.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=((e,n)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=t(n);if(r&&r.has(e))return r.get(e);var o={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var u=i?Object.getOwnPropertyDescriptor(e,s):null;u&&(u.get||u.set)?Object.defineProperty(o,s,u):o[s]=e[s]}return o.default=e,r&&r.set(e,o),o})(require("../utils/domUtils.prod.js"));function t(e){if("function"!=typeof WeakMap)return null;var n=new WeakMap,r=new WeakMap;return(t=e=>e?r:n)(e)}const n={methodOrder:["simulationResume","mouseOrPen","hasPointer","idle"],search(e){for(const t of n.methodOrder){const r=n[t](e);if(r)return r}return null},simulationResume({pointerType:t,eventType:n,eventTarget:r,scope:o}){if(!/down|start/i.test(n))return null;for(const n of o.interactions.list){let o=r;if(n.simulation&&n.simulation.allowResume&&n.pointerType===t)for(;o;){if(o===n.element)return n;o=e.parentNode(o)}}return null},mouseOrPen({pointerId:e,pointerType:t,eventType:n,scope:o}){if("mouse"!==t&&"pen"!==t)return null;let i;for(const n of o.interactions.list)if(n.pointerType===t){if(n.simulation&&!r(n,e))continue;if(n.interacting())return n;i||(i=n)}if(i)return i;for(const e of o.interactions.list)if(!(e.pointerType!==t||/down/i.test(n)&&e.simulation))return e;return null},hasPointer({pointerId:e,scope:t}){for(const n of t.interactions.list)if(r(n,e))return n;return null},idle({pointerType:e,scope:t}){for(const n of t.interactions.list){if(1===n.pointers.length){const e=n.interactable;if(e&&(!e.options.gesture||!e.options.gesture.enabled))continue}else if(n.pointers.length>=2)continue;if(!n.interacting()&&e===n.pointerType)return n}return null}};function r(e,t){return e.pointers.some((({id:e})=>e===t))}exports.default=n; +//# sourceMappingURL=interactionFinder.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/interactionFinder.prod.js.map b/packages/@interactjs/core/interactionFinder.prod.js.map new file mode 100644 index 000000000..880952edf --- /dev/null +++ b/packages/@interactjs/core/interactionFinder.prod.js.map @@ -0,0 +1,71 @@ +{ + "version": 3, + "names": [ + "dom", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "WeakMap", + "finder", + "methodOrder", + "search", + "details", + "method", + "interaction", + "simulationResume", + "pointerType", + "eventType", + "eventTarget", + "scope", + "test", + "interactions", + "list", + "element", + "simulation", + "allowResume", + "parentNode", + "mouseOrPen", + "pointerId", + "firstNonActive", + "hasPointerId", + "interacting", + "hasPointer", + "idle", + "pointers", + "length", + "target", + "interactable", + "options", + "gesture", + "enabled", + "some", + "id", + "exports" + ], + "sources": [ + "interactionFinder.ts" + ], + "sourcesContent": [ + "import * as dom from '@interactjs/utils/domUtils'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\n\nexport interface SearchDetails {\n pointer: PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: EventTarget\n curEventTarget: EventTarget\n scope: Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n search(details: SearchDetails) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n\n return null\n },\n\n // try to resume simulation with a new pointer\n simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget as Node\n\n if (\n interaction.simulation &&\n interaction.simulation.allowResume &&\n interaction.pointerType === pointerType\n ) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n continue\n }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && pointerType === interaction.pointerType) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId(interaction: Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/interactions.d.ts b/packages/@interactjs/core/interactions.d.ts new file mode 100644 index 000000000..7a7c513da --- /dev/null +++ b/packages/@interactjs/core/interactions.d.ts @@ -0,0 +1,31 @@ +import type { Plugin } from '@interactjs/core/scope'; +import type { ActionName, Listener } from '@interactjs/core/types'; +import './interactablePreventDefault'; +import InteractionBase from './Interaction'; +import type { SearchDetails } from './interactionFinder'; +declare module '@interactjs/core/scope' { + interface Scope { + Interaction: typeof InteractionBase; + interactions: { + new: (options: any) => InteractionBase; + list: Array>; + listeners: { + [type: string]: Listener; + }; + docEvents: Array<{ + type: string; + listener: Listener; + }>; + pointerMoveTolerance: number; + }; + prevTouchTime: number; + } + interface SignalArgs { + 'interactions:find': { + interaction: InteractionBase; + searchDetails: SearchDetails; + }; + } +} +declare const interactions: Plugin; +export default interactions; diff --git a/packages/@interactjs/core/interactions.js b/packages/@interactjs/core/interactions.js new file mode 100644 index 000000000..263079035 --- /dev/null +++ b/packages/@interactjs/core/interactions.js @@ -0,0 +1,266 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _browser = _interopRequireDefault(require("../utils/browser.js")); +var _domObjects = _interopRequireDefault(require("../utils/domObjects.js")); +var _domUtils = require("../utils/domUtils.js"); +var pointerUtils = _interopRequireWildcard(require("../utils/pointerUtils.js")); +var _interactablePreventDefault = _interopRequireDefault(require("./interactablePreventDefault")); +var _Interaction = _interopRequireDefault(require("./Interaction")); +var _interactionFinder = _interopRequireDefault(require("./interactionFinder")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +const methodNames = ['pointerDown', 'pointerMove', 'pointerUp', 'updatePointer', 'removePointer', 'windowBlur']; +function install(scope) { + const listeners = {}; + for (const method of methodNames) { + listeners[method] = doOnInteractions(method, scope); + } + const pEventTypes = _browser.default.pEventTypes; + let docEvents; + if (_domObjects.default.PointerEvent) { + docEvents = [{ + type: pEventTypes.down, + listener: releasePointersOnRemovedEls + }, { + type: pEventTypes.down, + listener: listeners.pointerDown + }, { + type: pEventTypes.move, + listener: listeners.pointerMove + }, { + type: pEventTypes.up, + listener: listeners.pointerUp + }, { + type: pEventTypes.cancel, + listener: listeners.pointerUp + }]; + } else { + docEvents = [{ + type: 'mousedown', + listener: listeners.pointerDown + }, { + type: 'mousemove', + listener: listeners.pointerMove + }, { + type: 'mouseup', + listener: listeners.pointerUp + }, { + type: 'touchstart', + listener: releasePointersOnRemovedEls + }, { + type: 'touchstart', + listener: listeners.pointerDown + }, { + type: 'touchmove', + listener: listeners.pointerMove + }, { + type: 'touchend', + listener: listeners.pointerUp + }, { + type: 'touchcancel', + listener: listeners.pointerUp + }]; + } + docEvents.push({ + type: 'blur', + listener(event) { + for (const interaction of scope.interactions.list) { + interaction.documentBlur(event); + } + } + }); + + // for ignoring browser's simulated mouse events + scope.prevTouchTime = 0; + scope.Interaction = class extends _Interaction.default { + get pointerMoveTolerance() { + return scope.interactions.pointerMoveTolerance; + } + set pointerMoveTolerance(value) { + scope.interactions.pointerMoveTolerance = value; + } + _now() { + return scope.now(); + } + }; + scope.interactions = { + // all active and idle interactions + list: [], + new(options) { + options.scopeFire = (name, arg) => scope.fire(name, arg); + const interaction = new scope.Interaction(options); + scope.interactions.list.push(interaction); + return interaction; + }, + listeners, + docEvents, + pointerMoveTolerance: 1 + }; + function releasePointersOnRemovedEls() { + // for all inactive touch interactions with pointers down + for (const interaction of scope.interactions.list) { + if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) { + continue; + } + + // if a pointer is down on an element that is no longer in the DOM tree + for (const pointer of interaction.pointers) { + if (!scope.documents.some(({ + doc + }) => (0, _domUtils.nodeContains)(doc, pointer.downTarget))) { + // remove the pointer from the interaction + interaction.removePointer(pointer.pointer, pointer.event); + } + } + } + } + scope.usePlugin(_interactablePreventDefault.default); +} +function doOnInteractions(method, scope) { + return function (event) { + const interactions = scope.interactions.list; + const pointerType = pointerUtils.getPointerType(event); + const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event); + const matches = []; // [ [pointer, interaction], ...] + + if (/^touch/.test(event.type)) { + scope.prevTouchTime = scope.now(); + + // @ts-expect-error + for (const changedTouch of event.changedTouches) { + const pointer = changedTouch; + const pointerId = pointerUtils.getPointerId(pointer); + const searchDetails = { + pointer, + pointerId, + pointerType, + eventType: event.type, + eventTarget, + curEventTarget, + scope + }; + const interaction = getInteraction(searchDetails); + matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]); + } + } else { + let invalidPointer = false; + if (!_browser.default.supportsPointerEvent && /mouse/.test(event.type)) { + // ignore mouse events while touch interactions are active + for (let i = 0; i < interactions.length && !invalidPointer; i++) { + invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown; + } + + // try to ignore mouse events that are simulated by the browser + // after a touch event + invalidPointer = invalidPointer || scope.now() - scope.prevTouchTime < 500 || + // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated + event.timeStamp === 0; + } + if (!invalidPointer) { + const searchDetails = { + pointer: event, + pointerId: pointerUtils.getPointerId(event), + pointerType, + eventType: event.type, + curEventTarget, + eventTarget, + scope + }; + const interaction = getInteraction(searchDetails); + matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]); + } + } + + // eslint-disable-next-line no-shadow + for (const [pointer, eventTarget, curEventTarget, interaction] of matches) { + interaction[method](pointer, event, eventTarget, curEventTarget); + } + }; +} +function getInteraction(searchDetails) { + const { + pointerType, + scope + } = searchDetails; + const foundInteraction = _interactionFinder.default.search(searchDetails); + const signalArg = { + interaction: foundInteraction, + searchDetails + }; + scope.fire('interactions:find', signalArg); + return signalArg.interaction || scope.interactions.new({ + pointerType + }); +} +function onDocSignal({ + doc, + scope, + options +}, eventMethodName) { + const { + interactions: { + docEvents + }, + events + } = scope; + const eventMethod = events[eventMethodName]; + if (scope.browser.isIOS && !options.events) { + options.events = { + passive: false + }; + } + + // delegate event listener + for (const eventType in events.delegatedEvents) { + eventMethod(doc, eventType, events.delegateListener); + eventMethod(doc, eventType, events.delegateUseCapture, true); + } + const eventOptions = options && options.events; + for (const { + type, + listener + } of docEvents) { + eventMethod(doc, type, listener, eventOptions); + } +} +const interactions = { + id: 'core/interactions', + install, + listeners: { + 'scope:add-document': arg => onDocSignal(arg, 'add'), + 'scope:remove-document': arg => onDocSignal(arg, 'remove'), + 'interactable:unset': ({ + interactable + }, scope) => { + // Stop and destroy related interactions when an Interactable is unset + for (let i = scope.interactions.list.length - 1; i >= 0; i--) { + const interaction = scope.interactions.list[i]; + if (interaction.interactable !== interactable) { + continue; + } + interaction.stop(); + scope.fire('interactions:destroy', { + interaction + }); + interaction.destroy(); + if (scope.interactions.list.length > 2) { + scope.interactions.list.splice(i, 1); + } + } + } + }, + onDocSignal, + doOnInteractions, + methodNames +}; +var _default = exports.default = interactions; +//# sourceMappingURL=interactions.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/interactions.js.map b/packages/@interactjs/core/interactions.js.map new file mode 100644 index 000000000..45bd05199 --- /dev/null +++ b/packages/@interactjs/core/interactions.js.map @@ -0,0 +1,136 @@ +{ + "version": 3, + "names": [ + "_browser", + "_interopRequireDefault", + "require", + "_domObjects", + "_domUtils", + "pointerUtils", + "_interopRequireWildcard", + "_interactablePreventDefault", + "_Interaction", + "_interactionFinder", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "methodNames", + "install", + "scope", + "listeners", + "method", + "doOnInteractions", + "pEventTypes", + "browser", + "docEvents", + "domObjects", + "PointerEvent", + "type", + "down", + "listener", + "releasePointersOnRemovedEls", + "pointerDown", + "move", + "pointerMove", + "up", + "pointerUp", + "cancel", + "push", + "event", + "interaction", + "interactions", + "list", + "documentBlur", + "prevTouchTime", + "Interaction", + "InteractionBase", + "pointerMoveTolerance", + "value", + "_now", + "now", + "new", + "options", + "scopeFire", + "name", + "arg", + "fire", + "pointerIsDown", + "pointerType", + "_interacting", + "pointer", + "pointers", + "documents", + "some", + "doc", + "nodeContains", + "downTarget", + "removePointer", + "usePlugin", + "interactablePreventDefault", + "getPointerType", + "eventTarget", + "curEventTarget", + "getEventTargets", + "matches", + "test", + "changedTouch", + "changedTouches", + "pointerId", + "getPointerId", + "searchDetails", + "eventType", + "getInteraction", + "invalidPointer", + "supportsPointerEvent", + "length", + "timeStamp", + "foundInteraction", + "finder", + "search", + "signalArg", + "onDocSignal", + "eventMethodName", + "events", + "eventMethod", + "isIOS", + "passive", + "delegatedEvents", + "delegateListener", + "delegateUseCapture", + "eventOptions", + "id", + "interactable:unset", + "interactable", + "stop", + "destroy", + "splice", + "_default", + "exports" + ], + "sources": [ + "interactions.ts" + ], + "sourcesContent": [ + "import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './interactablePreventDefault'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport InteractionBase from './Interaction'\n/* eslint-enable import/no-duplicates */\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: Array>\n listeners: { [type: string]: Listener }\n docEvents: Array<{ type: string; listener: Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown',\n 'pointerMove',\n 'pointerUp',\n 'updatePointer',\n 'removePointer',\n 'windowBlur',\n]\n\nfunction install(scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n } else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class extends InteractionBase {\n get pointerMoveTolerance() {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance(value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now() {\n return scope.now()\n }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new(options: { pointerType?: string; scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls() {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n\n scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions(method: string, scope: Scope) {\n return function (event: Event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches: any[] = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n // @ts-expect-error\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n } else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer =\n invalidPointer ||\n scope.now() - scope.prevTouchTime < 500 ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event as PointerEvent,\n pointerId: pointerUtils.getPointerId(event as PointerEvent),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction(searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal(\n { doc, scope, options }: SignalArgs[T],\n eventMethodName: 'add' | 'remove',\n) {\n const {\n interactions: { docEvents },\n events,\n } = scope\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nconst interactions: Plugin = {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n 'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n 'interactable:unset': ({ interactable }, scope) => {\n // Stop and destroy related interactions when an Interactable is unset\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable !== interactable) {\n continue\n }\n\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n },\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n\nexport default interactions\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/interactions.prod.js b/packages/@interactjs/core/interactions.prod.js new file mode 100644 index 000000000..5dd23fff5 --- /dev/null +++ b/packages/@interactjs/core/interactions.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=c(require("../utils/browser.prod.js")),t=c(require("../utils/domObjects.prod.js")),n=require("../utils/domUtils.prod.js"),o=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var s=r?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(o,i,s):o[i]=e[i]}return o.default=e,n&&n.set(e,o),o})(require("../utils/pointerUtils.prod.js")),r=c(require("./interactablePreventDefault")),i=c(require("./Interaction")),s=c(require("./interactionFinder"));function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=e=>e?n:t)(e)}function c(e){return e&&e.__esModule?e:{default:e}}const a=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"];function l(t,n){return r=>{const i=n.interactions.list,s=o.getPointerType(r),[p,c]=o.getEventTargets(r),a=[];if(/^touch/.test(r.type)){n.prevTouchTime=n.now();for(const e of r.changedTouches){const t=e,i={pointer:t,pointerId:o.getPointerId(t),pointerType:s,eventType:r.type,eventTarget:p,curEventTarget:c,scope:n},l=u(i);a.push([i.pointer,i.eventTarget,i.curEventTarget,l])}}else{let t=!1;if(!e.default.supportsPointerEvent&&/mouse/.test(r.type)){for(let e=0;e(0,n.nodeContains)(e,t.downTarget)))||e.removePointer(t.pointer,t.event)}c=t.default.PointerEvent?[{type:p.down,listener:u},{type:p.down,listener:s.pointerDown},{type:p.move,listener:s.pointerMove},{type:p.up,listener:s.pointerUp},{type:p.cancel,listener:s.pointerUp}]:[{type:"mousedown",listener:s.pointerDown},{type:"mousemove",listener:s.pointerMove},{type:"mouseup",listener:s.pointerUp},{type:"touchstart",listener:u},{type:"touchstart",listener:s.pointerDown},{type:"touchmove",listener:s.pointerMove},{type:"touchend",listener:s.pointerUp},{type:"touchcancel",listener:s.pointerUp}],c.push({type:"blur",listener(e){for(const t of o.interactions.list)t.documentBlur(e)}}),o.prevTouchTime=0,o.Interaction=class extends i.default{get pointerMoveTolerance(){return o.interactions.pointerMoveTolerance}set pointerMoveTolerance(e){o.interactions.pointerMoveTolerance=e}_now(){return o.now()}},o.interactions={list:[],new(e){e.scopeFire=(e,t)=>o.fire(e,t);const t=new o.Interaction(e);return o.interactions.list.push(t),t},listeners:s,docEvents:c,pointerMoveTolerance:1},o.usePlugin(r.default)},listeners:{"scope:add-document":e=>d(e,"add"),"scope:remove-document":e=>d(e,"remove"),"interactable:unset"({interactable:e},t){for(let n=t.interactions.list.length-1;n>=0;n--){const o=t.interactions.list[n];o.interactable===e&&(o.stop(),t.fire("interactions:destroy",{interaction:o}),o.destroy(),t.interactions.list.length>2&&t.interactions.list.splice(n,1))}}},onDocSignal:d,doOnInteractions:l,methodNames:a};exports.default=f; +//# sourceMappingURL=interactions.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/interactions.prod.js.map b/packages/@interactjs/core/interactions.prod.js.map new file mode 100644 index 000000000..fcefac377 --- /dev/null +++ b/packages/@interactjs/core/interactions.prod.js.map @@ -0,0 +1,133 @@ +{ + "version": 3, + "names": [ + "_browserProd", + "_interopRequireDefault", + "require", + "_domObjectsProd", + "_domUtilsProd", + "pointerUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "_interactablePreventDefault", + "_Interaction", + "_interactionFinder", + "WeakMap", + "obj", + "methodNames", + "doOnInteractions", + "method", + "scope", + "event", + "interactions", + "list", + "pointerType", + "getPointerType", + "eventTarget", + "curEventTarget", + "getEventTargets", + "matches", + "test", + "type", + "prevTouchTime", + "now", + "changedTouch", + "changedTouches", + "pointer", + "searchDetails", + "pointerId", + "getPointerId", + "eventType", + "interaction", + "getInteraction", + "push", + "invalidPointer", + "browser", + "supportsPointerEvent", + "length", + "pointerIsDown", + "timeStamp", + "signalArg", + "finder", + "search", + "fire", + "new", + "onDocSignal", + "doc", + "options", + "eventMethodName", + "docEvents", + "events", + "eventMethod", + "isIOS", + "passive", + "delegatedEvents", + "delegateListener", + "delegateUseCapture", + "eventOptions", + "listener", + "id", + "install", + "listeners", + "pEventTypes", + "releasePointersOnRemovedEls", + "_interacting", + "pointers", + "documents", + "some", + "nodeContains", + "downTarget", + "removePointer", + "domObjects", + "PointerEvent", + "down", + "pointerDown", + "move", + "pointerMove", + "up", + "pointerUp", + "cancel", + "documentBlur", + "Interaction", + "InteractionBase", + "pointerMoveTolerance", + "value", + "_now", + "scopeFire", + "name", + "arg", + "usePlugin", + "interactablePreventDefault", + "interactable", + "stop", + "destroy", + "splice", + "exports" + ], + "sources": [ + "interactions.ts" + ], + "sourcesContent": [ + "import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './interactablePreventDefault'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport InteractionBase from './Interaction'\n/* eslint-enable import/no-duplicates */\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: Array>\n listeners: { [type: string]: Listener }\n docEvents: Array<{ type: string; listener: Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown',\n 'pointerMove',\n 'pointerUp',\n 'updatePointer',\n 'removePointer',\n 'windowBlur',\n]\n\nfunction install(scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n } else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class extends InteractionBase {\n get pointerMoveTolerance() {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance(value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now() {\n return scope.now()\n }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new(options: { pointerType?: string; scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls() {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n\n scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions(method: string, scope: Scope) {\n return function (event: Event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches: any[] = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n // @ts-expect-error\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n } else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer =\n invalidPointer ||\n scope.now() - scope.prevTouchTime < 500 ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event as PointerEvent,\n pointerId: pointerUtils.getPointerId(event as PointerEvent),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction(searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal(\n { doc, scope, options }: SignalArgs[T],\n eventMethodName: 'add' | 'remove',\n) {\n const {\n interactions: { docEvents },\n events,\n } = scope\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nconst interactions: Plugin = {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n 'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n 'interactable:unset': ({ interactable }, scope) => {\n // Stop and destroy related interactions when an Interactable is unset\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable !== interactable) {\n continue\n }\n\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n },\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n\nexport default interactions\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/options.d.ts b/packages/@interactjs/core/options.d.ts new file mode 100644 index 000000000..b3f8da1a0 --- /dev/null +++ b/packages/@interactjs/core/options.d.ts @@ -0,0 +1,27 @@ +import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'; +export interface Defaults { + base: BaseDefaults; + perAction: PerActionDefaults; + actions: ActionDefaults; +} +export interface ActionDefaults { +} +export interface BaseDefaults { + preventDefault?: 'always' | 'never' | 'auto'; + deltaSource?: 'page' | 'client'; + context?: Node; + getRect?: (element: Element) => Rect; +} +export interface PerActionDefaults { + enabled?: boolean; + origin?: Point | string | Element; + listeners?: Listeners; + allowFrom?: string | Element; + ignoreFrom?: string | Element; +} +export type Options = Partial & Partial & { + [P in keyof ActionDefaults]?: Partial; +}; +export interface OptionsArg extends BaseDefaults, OrBoolean> { +} +export declare const defaults: Defaults; diff --git a/packages/@interactjs/core/options.js b/packages/@interactjs/core/options.js new file mode 100644 index 000000000..52eb4d237 --- /dev/null +++ b/packages/@interactjs/core/options.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.defaults = void 0; +// eslint-disable-next-line @typescript-eslint/no-empty-interface + +const defaults = exports.defaults = { + base: { + preventDefault: 'auto', + deltaSource: 'page' + }, + perAction: { + enabled: false, + origin: { + x: 0, + y: 0 + } + }, + actions: {} +}; +//# sourceMappingURL=options.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/options.js.map b/packages/@interactjs/core/options.js.map new file mode 100644 index 000000000..8d9bafbaf --- /dev/null +++ b/packages/@interactjs/core/options.js.map @@ -0,0 +1,23 @@ +{ + "version": 3, + "names": [ + "defaults", + "exports", + "base", + "preventDefault", + "deltaSource", + "perAction", + "enabled", + "origin", + "x", + "y", + "actions" + ], + "sources": [ + "options.ts" + ], + "sourcesContent": [ + "import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n preventDefault?: 'always' | 'never' | 'auto'\n deltaSource?: 'page' | 'client'\n context?: Node\n getRect?: (element: Element) => Rect\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Point | string | Element\n listeners?: Listeners\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n}\n\nexport type Options = Partial &\n Partial & {\n [P in keyof ActionDefaults]?: Partial\n }\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean> {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n" + ], + "mappings": ";;;;;;AAQA;;AAyBO,MAAMA,QAAkB,GAAAC,OAAA,CAAAD,QAAA,GAAG;EAChCE,IAAI,EAAE;IACJC,cAAc,EAAE,MAAM;IACtBC,WAAW,EAAE;EACf,CAAC;EAEDC,SAAS,EAAE;IACTC,OAAO,EAAE,KAAK;IACdC,MAAM,EAAE;MAAEC,CAAC,EAAE,CAAC;MAAEC,CAAC,EAAE;IAAE;EACvB,CAAC;EAEDC,OAAO,EAAE,CAAC;AACZ,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/core/options.prod.js b/packages/@interactjs/core/options.prod.js new file mode 100644 index 000000000..79b8c25ef --- /dev/null +++ b/packages/@interactjs/core/options.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.defaults=void 0,exports.defaults={base:{preventDefault:"auto",deltaSource:"page"},perAction:{enabled:!1,origin:{x:0,y:0}},actions:{}}; +//# sourceMappingURL=options.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/options.prod.js.map b/packages/@interactjs/core/options.prod.js.map new file mode 100644 index 000000000..c6cecbafa --- /dev/null +++ b/packages/@interactjs/core/options.prod.js.map @@ -0,0 +1,23 @@ +{ + "version": 3, + "names": [ + "exports", + "defaults", + "base", + "preventDefault", + "deltaSource", + "perAction", + "enabled", + "origin", + "x", + "y", + "actions" + ], + "sources": [ + "options.ts" + ], + "sourcesContent": [ + "import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n preventDefault?: 'always' | 'never' | 'auto'\n deltaSource?: 'page' | 'client'\n context?: Node\n getRect?: (element: Element) => Rect\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Point | string | Element\n listeners?: Listeners\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n}\n\nexport type Options = Partial &\n Partial & {\n [P in keyof ActionDefaults]?: Partial\n }\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean> {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n" + ], + "mappings": "+EAiC+BA,QAAAC,SAAG,CAChCC,KAAM,CACJC,eAAgB,OAChBC,YAAa,QAGfC,UAAW,CACTC,SAAS,EACTC,OAAQ,CAAEC,EAAG,EAAGC,EAAG,IAGrBC,QAAS,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/core/scope.d.ts b/packages/@interactjs/core/scope.d.ts new file mode 100644 index 000000000..86d302270 --- /dev/null +++ b/packages/@interactjs/core/scope.d.ts @@ -0,0 +1,31 @@ +import type Interaction from '@interactjs/core/Interaction'; +import './events'; +import './interactions'; +import { Interactable as InteractableBase } from './Interactable'; +import './InteractableSet'; +import type { OptionsArg } from './options'; +export interface SignalArgs { + 'scope:add-document': DocSignalArg; + 'scope:remove-document': DocSignalArg; + 'interactable:unset': { + interactable: InteractableBase; + }; + 'interactable:set': { + interactable: InteractableBase; + options: OptionsArg; + }; + 'interactions:destroy': { + interaction: Interaction; + }; +} +export type ListenerName = keyof SignalArgs; +export type ListenerMap = { + [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean; +}; +interface DocSignalArg { + doc: Document; + window: Window; + scope: Scope; + options: Record; +} +export {}; diff --git a/packages/@interactjs/core/scope.js b/packages/@interactjs/core/scope.js new file mode 100644 index 000000000..ecc95f079 --- /dev/null +++ b/packages/@interactjs/core/scope.js @@ -0,0 +1,239 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Scope = void 0; +exports.initScope = initScope; +var _browser = _interopRequireDefault(require("../utils/browser.js")); +var _clone = _interopRequireDefault(require("../utils/clone.js")); +var _domObjects = _interopRequireDefault(require("../utils/domObjects.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _raf = _interopRequireDefault(require("../utils/raf.js")); +var win = _interopRequireWildcard(require("../utils/window.js")); +var _Eventable = require("./Eventable"); +var _events = _interopRequireDefault(require("./events")); +var _interactions = _interopRequireDefault(require("./interactions")); +var _Interactable = require("./Interactable"); +var _InteractableSet = require("./InteractableSet"); +var _InteractEvent = require("./InteractEvent"); +var _InteractStatic = require("./InteractStatic"); +var _options = require("./options"); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +/** @internal */ + +/** @internal */ +class Scope { + id = `__interact_scope_${Math.floor(Math.random() * 100)}`; + isInitialized = false; + listenerMaps = []; + browser = _browser.default; + defaults = (0, _clone.default)(_options.defaults); + Eventable = _Eventable.Eventable; + actions = { + map: {}, + phases: { + start: true, + move: true, + end: true + }, + methodDict: {}, + phaselessTypes: {} + }; + interactStatic = (0, _InteractStatic.createInteractStatic)(this); + InteractEvent = _InteractEvent.InteractEvent; + Interactable; + interactables = new _InteractableSet.InteractableSet(this); + + // main window + _win; + + // main document + document; + + // main window + window; + + // all documents being listened to + documents = []; + _plugins = { + list: [], + map: {} + }; + constructor() { + const scope = this; + this.Interactable = class extends _Interactable.Interactable { + get _defaults() { + return scope.defaults; + } + set(options) { + super.set(options); + scope.fire('interactable:set', { + options, + interactable: this + }); + return this; + } + unset() { + super.unset(); + const index = scope.interactables.list.indexOf(this); + if (index < 0) return; + scope.interactables.list.splice(index, 1); + scope.fire('interactable:unset', { + interactable: this + }); + } + }; + } + addListeners(map, id) { + this.listenerMaps.push({ + id, + map + }); + } + fire(name, arg) { + for (const { + map: { + [name]: listener + } + } of this.listenerMaps) { + if (!!listener && listener(arg, this, name) === false) { + return false; + } + } + } + onWindowUnload = event => this.removeDocument(event.target); + init(window) { + return this.isInitialized ? this : initScope(this, window); + } + pluginIsInstalled(plugin) { + const { + id + } = plugin; + return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1; + } + usePlugin(plugin, options) { + if (!this.isInitialized) { + return this; + } + if (this.pluginIsInstalled(plugin)) { + return this; + } + if (plugin.id) { + this._plugins.map[plugin.id] = plugin; + } + this._plugins.list.push(plugin); + if (plugin.install) { + plugin.install(this, options); + } + if (plugin.listeners && plugin.before) { + let index = 0; + const len = this.listenerMaps.length; + const before = plugin.before.reduce((acc, id) => { + acc[id] = true; + acc[pluginIdRoot(id)] = true; + return acc; + }, {}); + for (; index < len; index++) { + const otherId = this.listenerMaps[index].id; + if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) { + break; + } + } + this.listenerMaps.splice(index, 0, { + id: plugin.id, + map: plugin.listeners + }); + } else if (plugin.listeners) { + this.listenerMaps.push({ + id: plugin.id, + map: plugin.listeners + }); + } + return this; + } + addDocument(doc, options) { + // do nothing if document is already known + if (this.getDocIndex(doc) !== -1) { + return false; + } + const window = win.getWindow(doc); + options = options ? (0, _extend.default)({}, options) : {}; + this.documents.push({ + doc, + options + }); + this.events.documents.push(doc); + + // don't add an unload event for the main document + // so that the page may be cached in browser history + if (doc !== this.document) { + this.events.add(window, 'unload', this.onWindowUnload); + } + this.fire('scope:add-document', { + doc, + window, + scope: this, + options + }); + } + removeDocument(doc) { + const index = this.getDocIndex(doc); + const window = win.getWindow(doc); + const options = this.documents[index].options; + this.events.remove(window, 'unload', this.onWindowUnload); + this.documents.splice(index, 1); + this.events.documents.splice(index, 1); + this.fire('scope:remove-document', { + doc, + window, + scope: this, + options + }); + } + getDocIndex(doc) { + for (let i = 0; i < this.documents.length; i++) { + if (this.documents[i].doc === doc) { + return i; + } + } + return -1; + } + getDocOptions(doc) { + const docIndex = this.getDocIndex(doc); + return docIndex === -1 ? null : this.documents[docIndex].options; + } + now() { + return (this.window.Date || Date).now(); + } +} + +/** @internal */ +exports.Scope = Scope; +function initScope(scope, window) { + scope.isInitialized = true; + if (_is.default.window(window)) { + win.init(window); + } + _domObjects.default.init(window); + _browser.default.init(window); + _raf.default.init(window); + + // @ts-expect-error + scope.window = window; + scope.document = window.document; + scope.usePlugin(_interactions.default); + scope.usePlugin(_events.default); + return scope; +} +function pluginIdRoot(id) { + return id && id.replace(/\/.*$/, ''); +} +//# sourceMappingURL=scope.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/scope.js.map b/packages/@interactjs/core/scope.js.map new file mode 100644 index 000000000..700215b68 --- /dev/null +++ b/packages/@interactjs/core/scope.js.map @@ -0,0 +1,135 @@ +{ + "version": 3, + "names": [ + "_browser", + "_interopRequireDefault", + "require", + "_clone", + "_domObjects", + "_extend", + "_is", + "_raf", + "win", + "_interopRequireWildcard", + "_Eventable", + "_events", + "_interactions", + "_Interactable", + "_InteractableSet", + "_InteractEvent", + "_InteractStatic", + "_options", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "Scope", + "id", + "Math", + "floor", + "random", + "isInitialized", + "listenerMaps", + "browser", + "defaults", + "clone", + "Eventable", + "actions", + "map", + "phases", + "start", + "move", + "end", + "methodDict", + "phaselessTypes", + "interactStatic", + "createInteractStatic", + "InteractEvent", + "Interactable", + "interactables", + "InteractableSet", + "_win", + "document", + "window", + "documents", + "_plugins", + "list", + "constructor", + "scope", + "InteractableBase", + "_defaults", + "options", + "fire", + "interactable", + "unset", + "index", + "indexOf", + "splice", + "addListeners", + "push", + "name", + "arg", + "listener", + "onWindowUnload", + "event", + "removeDocument", + "target", + "init", + "initScope", + "pluginIsInstalled", + "plugin", + "usePlugin", + "install", + "listeners", + "before", + "len", + "length", + "reduce", + "acc", + "pluginIdRoot", + "otherId", + "addDocument", + "doc", + "getDocIndex", + "getWindow", + "extend", + "events", + "add", + "remove", + "getDocOptions", + "docIndex", + "now", + "Date", + "exports", + "is", + "domObjects", + "raf", + "interactions", + "replace" + ], + "sources": [ + "scope.ts" + ], + "sourcesContent": [ + "import browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport type Interaction from '@interactjs/core/Interaction'\n\nimport { Eventable } from './Eventable'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './events'\nimport './interactions'\nimport events from './events'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport { InteractEvent } from './InteractEvent'\nimport interactions from './interactions'\n/* eslint-enable import/no-duplicates */\nimport { createInteractStatic } from './InteractStatic'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\nimport type { Actions } from './types'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase; options: OptionsArg }\n 'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options: Record\n}\n\n/** @internal */\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string[]\n install?(scope: Scope, options?: any): void\n}\n\n/** @internal */\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n isInitialized = false\n listenerMaps: Array<{\n map: ListenerMap\n id?: string\n }> = []\n\n browser = browser\n defaults = clone(defaults) as typeof defaults\n Eventable = Eventable\n actions: Actions = {\n map: {},\n phases: {\n start: true,\n move: true,\n end: true,\n },\n methodDict: {} as any,\n phaselessTypes: {},\n }\n\n interactStatic = createInteractStatic(this)\n InteractEvent = InteractEvent\n Interactable: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document; options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\n\n constructor() {\n const scope = this\n\n this.Interactable = class extends InteractableBase {\n get _defaults() {\n return scope.defaults\n }\n\n set(this: T, options: OptionsArg) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset(this: InteractableBase) {\n super.unset()\n\n const index = scope.interactables.list.indexOf(this)\n if (index < 0) return\n\n scope.interactables.list.splice(index, 1)\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners(map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire(name: T, arg: SignalArgs[T]): void | false {\n for (const {\n map: { [name]: listener },\n } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init(window: Window | typeof globalThis) {\n return this.isInitialized ? this : initScope(this, window)\n }\n\n pluginIsInstalled(plugin: Plugin) {\n const { id } = plugin\n return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin(plugin: Plugin, options?: { [key: string]: any }) {\n if (!this.isInitialized) {\n return this\n }\n\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) {\n this._plugins.map[plugin.id] = plugin\n }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n const len = this.listenerMaps.length\n const before = plugin.before.reduce((acc, id) => {\n acc[id] = true\n acc[pluginIdRoot(id)] = true\n return acc\n }, {})\n\n for (; index < len; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) {\n break\n }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n } else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument(doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) {\n return false\n }\n\n const window = win.getWindow(doc)\n\n options = options ? extend({}, options) : {}\n\n this.documents.push({ doc, options })\n this.events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n this.events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument(doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n this.events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n this.events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex(doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions(doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now() {\n return (((this.window as any).Date as typeof Date) || Date).now()\n }\n}\n\n/** @internal */\nexport function initScope(scope: Scope, window: Window | typeof globalThis) {\n scope.isInitialized = true\n\n if (is.window(window)) {\n win.init(window)\n }\n\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n\n // @ts-expect-error\n scope.window = window\n scope.document = window.document\n\n scope.usePlugin(interactions)\n scope.usePlugin(events)\n\n return scope\n}\n\nfunction pluginIdRoot(id: string) {\n return id && id.replace(/\\/.*$/, '')\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/scope.prod.js b/packages/@interactjs/core/scope.prod.js new file mode 100644 index 000000000..7d025efc5 --- /dev/null +++ b/packages/@interactjs/core/scope.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.Scope=void 0,exports.initScope=b;var e=w(require("../utils/browser.prod.js")),t=w(require("../utils/clone.prod.js")),i=w(require("../utils/domObjects.prod.js")),s=w(require("../utils/extend.prod.js")),n=w(require("../utils/is.prod.js")),r=w(require("../utils/raf.prod.js")),o=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var i=m(t);if(i&&i.has(e))return i.get(e);var s={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in e)if("default"!==r&&Object.prototype.hasOwnProperty.call(e,r)){var o=n?Object.getOwnPropertyDescriptor(e,r):null;o&&(o.get||o.set)?Object.defineProperty(s,r,o):s[r]=e[r]}return s.default=e,i&&i.set(e,s),s})(require("../utils/window.prod.js")),a=require("./Eventable"),u=w(require("./events")),l=w(require("./interactions")),d=require("./Interactable"),c=require("./InteractableSet"),p=require("./InteractEvent"),h=require("./InteractStatic"),f=require("./options");function m(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,i=new WeakMap;return(m=e=>e?i:t)(e)}function w(e){return e&&e.__esModule?e:{default:e}}function b(t,s){return t.isInitialized=!0,n.default.window(s)&&o.init(s),i.default.init(s),e.default.init(s),r.default.init(s),t.window=s,t.document=s.document,t.usePlugin(l.default),t.usePlugin(u.default),t}function g(e){return e&&e.replace(/\/.*$/,"")}exports.Scope=class{id="__interact_scope_"+Math.floor(100*Math.random());isInitialized=!1;listenerMaps=[];browser=e.default;defaults=(0,t.default)(f.defaults);Eventable=a.Eventable;actions={map:{},phases:{start:!0,move:!0,end:!0},methodDict:{},phaselessTypes:{}};interactStatic=(0,h.createInteractStatic)(this);InteractEvent=p.InteractEvent;Interactable;interactables=new c.InteractableSet(this);_win;document;window;documents=[];_plugins={list:[],map:{}};constructor(){const e=this;this.Interactable=class extends d.Interactable{get _defaults(){return e.defaults}set(t){return super.set(t),e.fire("interactable:set",{options:t,interactable:this}),this}unset(){super.unset();const t=e.interactables.list.indexOf(this);t<0||(e.interactables.list.splice(t,1),e.fire("interactable:unset",{interactable:this}))}}}addListeners(e,t){this.listenerMaps.push({id:t,map:e})}fire(e,t){for(const{map:{[e]:i}}of this.listenerMaps)if(i&&!1===i(t,this,e))return!1}onWindowUnload=e=>this.removeDocument(e.target);init(e){return this.isInitialized?this:b(this,e)}pluginIsInstalled(e){const{id:t}=e;return t?!!this._plugins.map[t]:-1!==this._plugins.list.indexOf(e)}usePlugin(e,t){if(!this.isInitialized)return this;if(this.pluginIsInstalled(e))return this;if(e.id&&(this._plugins.map[e.id]=e),this._plugins.list.push(e),e.install&&e.install(this,t),e.listeners&&e.before){let t=0;const i=this.listenerMaps.length,s=e.before.reduce(((e,t)=>(e[t]=!0,e[g(t)]=!0,e)),{});for(;t void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options: Record\n}\n\n/** @internal */\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string[]\n install?(scope: Scope, options?: any): void\n}\n\n/** @internal */\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n isInitialized = false\n listenerMaps: Array<{\n map: ListenerMap\n id?: string\n }> = []\n\n browser = browser\n defaults = clone(defaults) as typeof defaults\n Eventable = Eventable\n actions: Actions = {\n map: {},\n phases: {\n start: true,\n move: true,\n end: true,\n },\n methodDict: {} as any,\n phaselessTypes: {},\n }\n\n interactStatic = createInteractStatic(this)\n InteractEvent = InteractEvent\n Interactable: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document; options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\n\n constructor() {\n const scope = this\n\n this.Interactable = class extends InteractableBase {\n get _defaults() {\n return scope.defaults\n }\n\n set(this: T, options: OptionsArg) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset(this: InteractableBase) {\n super.unset()\n\n const index = scope.interactables.list.indexOf(this)\n if (index < 0) return\n\n scope.interactables.list.splice(index, 1)\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners(map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire(name: T, arg: SignalArgs[T]): void | false {\n for (const {\n map: { [name]: listener },\n } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init(window: Window | typeof globalThis) {\n return this.isInitialized ? this : initScope(this, window)\n }\n\n pluginIsInstalled(plugin: Plugin) {\n const { id } = plugin\n return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin(plugin: Plugin, options?: { [key: string]: any }) {\n if (!this.isInitialized) {\n return this\n }\n\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) {\n this._plugins.map[plugin.id] = plugin\n }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n const len = this.listenerMaps.length\n const before = plugin.before.reduce((acc, id) => {\n acc[id] = true\n acc[pluginIdRoot(id)] = true\n return acc\n }, {})\n\n for (; index < len; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) {\n break\n }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n } else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument(doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) {\n return false\n }\n\n const window = win.getWindow(doc)\n\n options = options ? extend({}, options) : {}\n\n this.documents.push({ doc, options })\n this.events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n this.events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument(doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n this.events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n this.events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex(doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions(doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now() {\n return (((this.window as any).Date as typeof Date) || Date).now()\n }\n}\n\n/** @internal */\nexport function initScope(scope: Scope, window: Window | typeof globalThis) {\n scope.isInitialized = true\n\n if (is.window(window)) {\n win.init(window)\n }\n\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n\n // @ts-expect-error\n scope.window = window\n scope.document = window.document\n\n scope.usePlugin(interactions)\n scope.usePlugin(events)\n\n return scope\n}\n\nfunction pluginIdRoot(id: string) {\n return id && id.replace(/\\/.*$/, '')\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/core/tests/_helpers.d.ts b/packages/@interactjs/core/tests/_helpers.d.ts new file mode 100644 index 000000000..6133bd3f9 --- /dev/null +++ b/packages/@interactjs/core/tests/_helpers.d.ts @@ -0,0 +1,111 @@ +import * as pointerUtils from '@interactjs/utils/pointerUtils'; +import type { PointerType, Rect, Target, ActionProps } from '@interactjs/core/types'; +import type { Plugin } from '../scope'; +import { Scope } from '../scope'; +export declare function unique(): number; +export declare function uniqueProps(obj: any): void; +export declare function newCoordsSet(n?: number): { + start: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + cur: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + prev: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + delta: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + velocity: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; +}; +export declare function newPointer(n?: number): PointerType; +export declare function mockScope({ document }?: any): Scope; +export declare function getProps(src: T, props: readonly K[]): Pick; +export declare function testEnv({ plugins, target, rect, document, }?: { + plugins?: Plugin[]; + target?: T; + rect?: Rect; + document?: Document; +}): { + scope: Scope; + interaction: import("@interactjs/core/Interaction").Interaction; + target: T extends undefined ? HTMLElement : T; + interactable: import("@interactjs/core/Interactable").Interactable; + coords: pointerUtils.MockCoords; + event: { + coords: pointerUtils.MockCoords; + readonly page: any; + readonly client: any; + readonly timeStamp: any; + readonly pageX: any; + readonly pageY: any; + readonly clientX: any; + readonly clientY: any; + readonly pointerId: any; + readonly target: any; + readonly type: any; + readonly pointerType: any; + readonly buttons: any; + preventDefault(): void; + } & PointerType & import("@interactjs/core/types").PointerEventType; + interact: import("@interactjs/core/InteractStatic").InteractStatic; + start: (action: ActionProps) => boolean; + stop: () => void; + down: () => void; + move: (force?: boolean) => void; + up: () => void; +}; +export declare function timeout(n: number): Promise; +export declare function ltrbwh(left: number, top: number, right: number, bottom: number, width: number, height: number): { + left: number; + top: number; + right: number; + bottom: number; + width: number; + height: number; +}; diff --git a/packages/@interactjs/core/types.d.ts b/packages/@interactjs/core/types.d.ts new file mode 100644 index 000000000..d490a3857 --- /dev/null +++ b/packages/@interactjs/core/types.d.ts @@ -0,0 +1,105 @@ +import type Interaction from '@interactjs/core/Interaction'; +import type { Interactable } from './Interactable'; +import type { PhaseMap, InteractEvent } from './InteractEvent'; +import type { NativePointerEvent as NativePointerEvent_ } from './NativeTypes'; +export type OrBoolean = { + [P in keyof T]: T[P] | boolean; +}; +export type Element = HTMLElement | SVGElement; +export type Context = Document | Element; +export type EventTarget = Window | Document | Element; +export type Target = EventTarget | string; +export interface Point { + x: number; + y: number; +} +export interface Size { + width: number; + height: number; +} +export interface Rect { + top: number; + left: number; + bottom: number; + right: number; + width?: number; + height?: number; +} +export type FullRect = Required; +export type RectFunction = (...args: T) => Rect | Element; +export type RectResolvable = Rect | string | Element | RectFunction; +export type Dimensions = Point & Size; +export interface CoordsSetMember { + page: Point; + client: Point; + timeStamp: number; +} +export interface CoordsSet { + cur: CoordsSetMember; + prev: CoordsSetMember; + start: CoordsSetMember; + delta: CoordsSetMember; + velocity: CoordsSetMember; +} +export interface HasGetRect { + getRect(element: Element): Rect; +} +export interface ActionMap { +} +export type ActionName = keyof ActionMap; +export interface Actions { + map: ActionMap; + phases: PhaseMap; + methodDict: Record; + phaselessTypes: { + [type: string]: true; + }; +} +export interface ActionProps { + name: T; + axis?: 'x' | 'y' | 'xy' | null; + edges?: EdgeOptions | null; +} +export interface InertiaOption { + resistance?: number; + minSpeed?: number; + endSpeed?: number; + allowResume?: boolean; + smoothEndDuration?: number; +} +export type InertiaOptions = InertiaOption | boolean; +export interface EdgeOptions { + top?: boolean | string | Element; + left?: boolean | string | Element; + bottom?: boolean | string | Element; + right?: boolean | string | Element; +} +export type CursorChecker = (action: ActionProps, interactable: Interactable, element: Element, interacting: boolean) => string; +export interface ActionMethod { + (this: Interactable): T; + (this: Interactable, options?: Partial> | boolean): typeof this; +} +export interface OptionMethod { + (this: Interactable): T; + (this: Interactable, options: T): typeof this; +} +export type ActionChecker = (pointerEvent: any, defaultAction: string, interactable: Interactable, element: Element, interaction: Interaction) => ActionProps; +export type OriginFunction = (target: Element) => Rect; +export interface PointerEventsOptions { + holdDuration?: number; + allowFrom?: string; + ignoreFrom?: string; + origin?: Rect | Point | string | Element | OriginFunction; +} +export type RectChecker = (element: Element) => Rect; +export type NativePointerEventType = typeof NativePointerEvent_; +export type PointerEventType = MouseEvent | TouchEvent | Partial | InteractEvent; +export type PointerType = MouseEvent | Touch | Partial | InteractEvent; +export type EventTypes = string | ListenerMap | Array; +export type Listener = (...args: any[]) => any; +export type Listeners = ListenerMap | ListenerMap[]; +export type ListenersArg = Listener | ListenerMap | Array; +export interface ListenerMap { + [index: string]: ListenersArg | ListenersArg[]; +} +export type ArrayElementType = T extends Array ? P : never; diff --git a/packages/@interactjs/core/types.js b/packages/@interactjs/core/types.js new file mode 100644 index 000000000..239667a3d --- /dev/null +++ b/packages/@interactjs/core/types.js @@ -0,0 +1,6 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/types.js.map b/packages/@interactjs/core/types.js.map new file mode 100644 index 000000000..22be8b624 --- /dev/null +++ b/packages/@interactjs/core/types.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "types.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\n\nimport type { Interactable } from './Interactable'\nimport type { PhaseMap, InteractEvent } from './InteractEvent'\nimport type { NativePointerEvent as NativePointerEvent_ } from './NativeTypes'\n\nexport type OrBoolean = {\n [P in keyof T]: T[P] | boolean\n}\n\nexport type Element = HTMLElement | SVGElement\nexport type Context = Document | Element\nexport type EventTarget = Window | Document | Element\nexport type Target = EventTarget | string\n\nexport interface Point {\n x: number\n y: number\n}\n\nexport interface Size {\n width: number\n height: number\n}\n\nexport interface Rect {\n top: number\n left: number\n bottom: number\n right: number\n width?: number\n height?: number\n}\n\nexport type FullRect = Required\n\nexport type RectFunction = (...args: T) => Rect | Element\n\nexport type RectResolvable = Rect | string | Element | RectFunction\n\nexport type Dimensions = Point & Size\n\nexport interface CoordsSetMember {\n page: Point\n client: Point\n timeStamp: number\n}\n\nexport interface CoordsSet {\n cur: CoordsSetMember\n prev: CoordsSetMember\n start: CoordsSetMember\n delta: CoordsSetMember\n velocity: CoordsSetMember\n}\n\nexport interface HasGetRect {\n getRect(element: Element): Rect\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionMap {}\n\nexport type ActionName = keyof ActionMap\n\nexport interface Actions {\n map: ActionMap\n phases: PhaseMap\n methodDict: Record\n phaselessTypes: { [type: string]: true }\n}\n\nexport interface ActionProps {\n name: T\n axis?: 'x' | 'y' | 'xy' | null\n edges?: EdgeOptions | null\n}\n\nexport interface InertiaOption {\n resistance?: number\n minSpeed?: number\n endSpeed?: number\n allowResume?: boolean\n smoothEndDuration?: number\n}\nexport type InertiaOptions = InertiaOption | boolean\n\nexport interface EdgeOptions {\n top?: boolean | string | Element\n left?: boolean | string | Element\n bottom?: boolean | string | Element\n right?: boolean | string | Element\n}\n\nexport type CursorChecker = (\n action: ActionProps,\n interactable: Interactable,\n element: Element,\n interacting: boolean,\n) => string\n\nexport interface ActionMethod {\n (this: Interactable): T\n (this: Interactable, options?: Partial> | boolean): typeof this\n}\n\nexport interface OptionMethod {\n (this: Interactable): T\n // eslint-disable-next-line no-undef\n (this: Interactable, options: T): typeof this\n}\n\nexport type ActionChecker = (\n pointerEvent: any,\n defaultAction: string,\n interactable: Interactable,\n element: Element,\n interaction: Interaction,\n) => ActionProps\n\nexport type OriginFunction = (target: Element) => Rect\n\nexport interface PointerEventsOptions {\n holdDuration?: number\n allowFrom?: string\n ignoreFrom?: string\n origin?: Rect | Point | string | Element | OriginFunction\n}\n\nexport type RectChecker = (element: Element) => Rect\n\nexport type NativePointerEventType = typeof NativePointerEvent_\nexport type PointerEventType = MouseEvent | TouchEvent | Partial | InteractEvent\nexport type PointerType = MouseEvent | Touch | Partial | InteractEvent\n\nexport type EventTypes = string | ListenerMap | Array\n\nexport type Listener = (...args: any[]) => any\nexport type Listeners = ListenerMap | ListenerMap[]\nexport type ListenersArg = Listener | ListenerMap | Array\nexport interface ListenerMap {\n [index: string]: ListenersArg | ListenersArg[]\n}\n\nexport type ArrayElementType = T extends Array ? P : never\n" + ], + "mappings": "" +} \ No newline at end of file diff --git a/packages/@interactjs/core/types.prod.js b/packages/@interactjs/core/types.prod.js new file mode 100644 index 000000000..1cdf1cd66 --- /dev/null +++ b/packages/@interactjs/core/types.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}); +//# sourceMappingURL=types.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/core/types.prod.js.map b/packages/@interactjs/core/types.prod.js.map new file mode 100644 index 000000000..32e471b75 --- /dev/null +++ b/packages/@interactjs/core/types.prod.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "names": [], + "sources": [], + "mappings": "" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/.npmignore b/packages/@interactjs/dev-tools/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/dev-tools/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/dev-tools/LICENSE b/packages/@interactjs/dev-tools/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/dev-tools/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/dev-tools/index.d.ts b/packages/@interactjs/dev-tools/index.d.ts new file mode 100644 index 000000000..294904723 --- /dev/null +++ b/packages/@interactjs/dev-tools/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/dev-tools/plugin'; diff --git a/packages/@interactjs/dev-tools/index.js b/packages/@interactjs/dev-tools/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/dev-tools/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/index.js.map b/packages/@interactjs/dev-tools/index.js.map new file mode 100644 index 000000000..49c6bc745 --- /dev/null +++ b/packages/@interactjs/dev-tools/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/dev-tools/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/dev-tools/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/index.prod.js b/packages/@interactjs/dev-tools/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/dev-tools/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/index.prod.js.map b/packages/@interactjs/dev-tools/index.prod.js.map new file mode 100644 index 000000000..88ad25620 --- /dev/null +++ b/packages/@interactjs/dev-tools/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/dev-tools/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/dev-tools/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/index.ts b/packages/@interactjs/dev-tools/index.ts new file mode 100644 index 000000000..7e677ad37 --- /dev/null +++ b/packages/@interactjs/dev-tools/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/dev-tools/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/dev-tools/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/plugin.d.ts b/packages/@interactjs/dev-tools/plugin.d.ts new file mode 100644 index 000000000..9bb5680df --- /dev/null +++ b/packages/@interactjs/dev-tools/plugin.d.ts @@ -0,0 +1,48 @@ +import type Interaction from '@interactjs/core/Interaction'; +import type { Plugin } from '@interactjs/core/scope'; +import type { OptionMethod } from '@interactjs/core/types'; +import './visualizer/plugin'; +import visualizer from './visualizer/plugin'; +declare module '@interactjs/core/scope' { + interface Scope { + logger: Logger; + } +} +declare module '@interactjs/core/InteractStatic' { + interface InteractStatic { + visializer: typeof visualizer; + } +} +declare module '@interactjs/core/options' { + interface BaseDefaults { + devTools?: DevToolsOptions; + } +} +declare module '@interactjs/core/Interactable' { + interface Interactable { + devTools: OptionMethod; + } +} +export interface DevToolsOptions { + ignore: { + [P in keyof typeof CheckName]?: boolean; + }; +} +export interface Logger { + warn: (...args: any[]) => void; + error: (...args: any[]) => void; + log: (...args: any[]) => void; +} +export interface Check { + name: CheckName; + text: string; + perform: (interaction: Interaction) => boolean; + getInfo: (interaction: Interaction) => any[]; +} +declare enum CheckName { + touchAction = "touchAction", + boxSizing = "boxSizing", + noListeners = "noListeners" +} +declare const defaultExport: Plugin; +export default defaultExport; diff --git a/packages/@interactjs/dev-tools/plugin.js b/packages/@interactjs/dev-tools/plugin.js new file mode 100644 index 000000000..2283d772c --- /dev/null +++ b/packages/@interactjs/dev-tools/plugin.js @@ -0,0 +1,153 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _domObjects = _interopRequireDefault(require("../utils/domObjects.js")); +var _domUtils = require("../utils/domUtils.js"); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _isNonNativeEvent = _interopRequireDefault(require("../utils/isNonNativeEvent.js")); +var _normalizeListeners = _interopRequireDefault(require("../utils/normalizeListeners.js")); +var win = _interopRequireWildcard(require("../utils/window.js")); +var _plugin = _interopRequireDefault(require("./visualizer/plugin")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ +/* eslint-enable import/no-duplicates */ +var CheckName = /*#__PURE__*/function (CheckName) { + CheckName["touchAction"] = "touchAction"; + CheckName["boxSizing"] = "boxSizing"; + CheckName["noListeners"] = "noListeners"; + return CheckName; +}(CheckName || {}); +const prefix = '[interact.js] '; +const links = { + touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action', + boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing' +}; + +// eslint-disable-next-line no-undef +const isProduction = "development" === 'production'; +function install(scope, { + logger +} = {}) { + const { + Interactable, + defaults + } = scope; + scope.logger = logger || console; + defaults.base.devTools = { + ignore: {} + }; + Interactable.prototype.devTools = function (options) { + if (options) { + (0, _extend.default)(this.options.devTools, options); + return this; + } + return this.options.devTools; + }; + + // can't set native events on non string targets without `addEventListener` prop + const { + _onOff + } = Interactable.prototype; + Interactable.prototype._onOff = function (method, typeArg, listenerArg, options, filter) { + if (_is.default.string(this.target) || this.target.addEventListener) { + return _onOff.call(this, method, typeArg, listenerArg, options, filter); + } + if (_is.default.object(typeArg) && !_is.default.array(typeArg)) { + options = listenerArg; + listenerArg = null; + } + const normalizedListeners = (0, _normalizeListeners.default)(typeArg, listenerArg, filter); + for (const type in normalizedListeners) { + if ((0, _isNonNativeEvent.default)(type, scope.actions)) continue; + scope.logger.warn(prefix + `Can't add native "${type}" event listener to target without \`addEventListener(type, listener, options)\` prop.`); + } + return _onOff.call(this, method, normalizedListeners, options); + }; + scope.usePlugin(_plugin.default); +} +const checks = [{ + name: CheckName.touchAction, + perform({ + element + }) { + return !!element && !parentHasStyle(element, 'touchAction', /pan-|pinch|none/); + }, + getInfo({ + element + }) { + return [element, links.touchAction]; + }, + text: 'Consider adding CSS "touch-action: none" to this element\n' +}, { + name: CheckName.boxSizing, + perform(interaction) { + const { + element + } = interaction; + return interaction.prepared.name === 'resize' && element instanceof _domObjects.default.HTMLElement && !hasStyle(element, 'boxSizing', /border-box/); + }, + text: 'Consider adding CSS "box-sizing: border-box" to this resizable element', + getInfo({ + element + }) { + return [element, links.boxSizing]; + } +}, { + name: CheckName.noListeners, + perform(interaction) { + var _interaction$interact; + const actionName = interaction.prepared.name; + const moveListeners = ((_interaction$interact = interaction.interactable) == null ? void 0 : _interaction$interact.events.types[`${actionName}move`]) || []; + return !moveListeners.length; + }, + getInfo(interaction) { + return [interaction.prepared.name, interaction.interactable]; + }, + text: 'There are no listeners set for this action' +}]; +function hasStyle(element, prop, styleRe) { + const value = element.style[prop] || win.window.getComputedStyle(element)[prop]; + return styleRe.test((value || '').toString()); +} +function parentHasStyle(element, prop, styleRe) { + let parent = element; + while (_is.default.element(parent)) { + if (hasStyle(parent, prop, styleRe)) { + return true; + } + parent = (0, _domUtils.parentNode)(parent); + } + return false; +} +const id = 'dev-tools'; +const defaultExport = isProduction ? { + id, + install: () => {} +} : { + id, + install, + listeners: { + 'interactions:action-start': ({ + interaction + }, scope) => { + for (const check of checks) { + const options = interaction.interactable && interaction.interactable.options; + if (!(options && options.devTools && options.devTools.ignore[check.name]) && check.perform(interaction)) { + scope.logger.warn(prefix + check.text, ...check.getInfo(interaction)); + } + } + } + }, + checks, + CheckName, + links, + prefix +}; +var _default = exports.default = defaultExport; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/plugin.js.map b/packages/@interactjs/dev-tools/plugin.js.map new file mode 100644 index 000000000..6c99dd25c --- /dev/null +++ b/packages/@interactjs/dev-tools/plugin.js.map @@ -0,0 +1,118 @@ +{ + "version": 3, + "names": [ + "_domObjects", + "_interopRequireDefault", + "require", + "_domUtils", + "_extend", + "_is", + "_isNonNativeEvent", + "_normalizeListeners", + "win", + "_interopRequireWildcard", + "_plugin", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "CheckName", + "prefix", + "links", + "touchAction", + "boxSizing", + "isProduction", + "install", + "scope", + "logger", + "Interactable", + "defaults", + "console", + "base", + "devTools", + "ignore", + "options", + "extend", + "_onOff", + "method", + "typeArg", + "listenerArg", + "filter", + "is", + "string", + "target", + "addEventListener", + "object", + "array", + "normalizedListeners", + "normalizeListeners", + "type", + "isNonNativeEvent", + "actions", + "warn", + "usePlugin", + "visualizer", + "checks", + "name", + "perform", + "element", + "parentHasStyle", + "getInfo", + "text", + "interaction", + "prepared", + "domObjects", + "HTMLElement", + "hasStyle", + "noListeners", + "_interaction$interact", + "actionName", + "moveListeners", + "interactable", + "events", + "types", + "length", + "prop", + "styleRe", + "value", + "style", + "window", + "getComputedStyle", + "test", + "toString", + "parent", + "parentNode", + "id", + "defaultExport", + "listeners", + "interactions:action-start", + "check", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, OptionMethod } from '@interactjs/core/types'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as win from '@interactjs/utils/window'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './visualizer/plugin'\nimport visualizer from './visualizer/plugin'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n visializer: typeof visualizer\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools: OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: CheckName\n text: string\n perform: (interaction: Interaction) => boolean\n getInfo: (interaction: Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = 'touchAction',\n boxSizing = 'boxSizing',\n noListeners = 'noListeners',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\n// eslint-disable-next-line no-undef\nconst isProduction = process.env.NODE_ENV === 'production'\n\nfunction install(scope: Scope, { logger }: { logger?: Logger } = {}) {\n const { Interactable, defaults } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?: object) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n\n // can't set native events on non string targets without `addEventListener` prop\n const { _onOff } = Interactable.prototype\n Interactable.prototype._onOff = function (method, typeArg, listenerArg, options, filter) {\n if (is.string(this.target) || this.target.addEventListener) {\n return _onOff.call(this, method, typeArg, listenerArg, options, filter)\n }\n\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const normalizedListeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (const type in normalizedListeners) {\n if (isNonNativeEvent(type, scope.actions)) continue\n scope.logger.warn(\n prefix +\n `Can't add native \"${type}\" event listener to target without \\`addEventListener(type, listener, options)\\` prop.`,\n )\n }\n\n return _onOff.call(this, method, normalizedListeners, options)\n }\n scope.usePlugin(visualizer)\n}\n\nconst checks: Check[] = [\n {\n name: CheckName.touchAction,\n perform({ element }) {\n return !!element && !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo({ element }) {\n return [element, links.touchAction]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: CheckName.boxSizing,\n perform(interaction) {\n const { element } = interaction\n\n return (\n interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n )\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo({ element }) {\n return [element, links.boxSizing]\n },\n },\n\n {\n name: CheckName.noListeners,\n perform(interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable?.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo(interaction) {\n return [interaction.prepared.name, interaction.interactable]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle(element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n const value = element.style[prop] || win.window.getComputedStyle(element)[prop]\n return styleRe.test((value || '').toString())\n}\n\nfunction parentHasStyle(element: Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent) as HTMLElement\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport: Plugin = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/plugin.prod.js b/packages/@interactjs/dev-tools/plugin.prod.js new file mode 100644 index 000000000..6f1e3d8f0 --- /dev/null +++ b/packages/@interactjs/dev-tools/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;t(require("../utils/domObjects.prod.js")),require("../utils/domUtils.prod.js"),t(require("../utils/extend.prod.js")),t(require("../utils/is.prod.js")),t(require("../utils/isNonNativeEvent.prod.js")),t(require("../utils/normalizeListeners.prod.js")),((t,r)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var i=e(r);if(i&&i.has(t))return i.get(t);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if("default"!==u&&Object.prototype.hasOwnProperty.call(t,u)){var s=n?Object.getOwnPropertyDescriptor(t,u):null;s&&(s.get||s.set)?Object.defineProperty(o,u,s):o[u]=t[u]}o.default=t,i&&i.set(t,o)})(require("../utils/window.prod.js"));function e(t){if("function"!=typeof WeakMap)return null;var r=new WeakMap,i=new WeakMap;return(e=e=>e?i:r)(t)}function t(e){return e&&e.__esModule?e:{default:e}}t(require("./visualizer/plugin"));var r=(e=>(e.touchAction="touchAction",e.boxSizing="boxSizing",e.noListeners="noListeners",e))(r||{});r.touchAction,r.boxSizing,r.noListeners;const i={id:"dev-tools",install(){}};exports.default=i; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/plugin.prod.js.map b/packages/@interactjs/dev-tools/plugin.prod.js.map new file mode 100644 index 000000000..4243d8030 --- /dev/null +++ b/packages/@interactjs/dev-tools/plugin.prod.js.map @@ -0,0 +1,45 @@ +{ + "version": 3, + "names": [ + "_interopRequireDefault", + "require", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "obj", + "CheckName", + "touchAction", + "boxSizing", + "noListeners", + "defaultExport", + "id", + "install", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, OptionMethod } from '@interactjs/core/types'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as win from '@interactjs/utils/window'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './visualizer/plugin'\nimport visualizer from './visualizer/plugin'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n visializer: typeof visualizer\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools: OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: CheckName\n text: string\n perform: (interaction: Interaction) => boolean\n getInfo: (interaction: Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = 'touchAction',\n boxSizing = 'boxSizing',\n noListeners = 'noListeners',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\n// eslint-disable-next-line no-undef\nconst isProduction = process.env.NODE_ENV === 'production'\n\nfunction install(scope: Scope, { logger }: { logger?: Logger } = {}) {\n const { Interactable, defaults } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?: object) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n\n // can't set native events on non string targets without `addEventListener` prop\n const { _onOff } = Interactable.prototype\n Interactable.prototype._onOff = function (method, typeArg, listenerArg, options, filter) {\n if (is.string(this.target) || this.target.addEventListener) {\n return _onOff.call(this, method, typeArg, listenerArg, options, filter)\n }\n\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const normalizedListeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (const type in normalizedListeners) {\n if (isNonNativeEvent(type, scope.actions)) continue\n scope.logger.warn(\n prefix +\n `Can't add native \"${type}\" event listener to target without \\`addEventListener(type, listener, options)\\` prop.`,\n )\n }\n\n return _onOff.call(this, method, normalizedListeners, options)\n }\n scope.usePlugin(visualizer)\n}\n\nconst checks: Check[] = [\n {\n name: CheckName.touchAction,\n perform({ element }) {\n return !!element && !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo({ element }) {\n return [element, links.touchAction]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: CheckName.boxSizing,\n perform(interaction) {\n const { element } = interaction\n\n return (\n interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n )\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo({ element }) {\n return [element, links.boxSizing]\n },\n },\n\n {\n name: CheckName.noListeners,\n perform(interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable?.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo(interaction) {\n return [interaction.prepared.name, interaction.interactable]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle(element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n const value = element.style[prop] || win.window.getComputedStyle(element)[prop]\n return styleRe.test((value || '').toString())\n}\n\nfunction parentHasStyle(element: Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent) as HTMLElement\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport: Plugin = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n" + ], + "mappings": "8EAGAA,EAAAC,QAAA,gCACAA,QAAA,6BACAD,EAAAC,QAAA,4BACAD,EAAAC,QAAA,wBACAD,EAAAC,QAAA,sCACAD,EAAAC,QAAA,wCAI4B,EAAAC,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,CAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,EAAA,EAH5BY,CAAArB,QAAA,4BAG4B,SAAAM,EAAAL,GAAA,sBAAAqB,QAAA,gBAAApB,EAAA,IAAAoB,QAAAjB,EAAA,IAAAiB,QAAA,OAAAhB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA,UAAAF,EAAAwB,GAAA,OAAAA,KAAApB,WAAAoB,EAAA,CAAAnB,QAAAmB,EAAA,CAA5BxB,EAAAC,QAAA,wBAEA,IA2CKwB,EAAS,CAATA,MAAS,0BAATA,EAAS,sBAATA,EAAS,0BAATA,GAAS,CAATA,GAAS,IA8DJA,EAAUC,YAWVD,EAAUE,UAiBVF,EAAUG,YAiCpB,MACMC,EACF,CAAEC,GAFK,YAEDC,OAAgB,GAAPA,GAsBdC,QAAA3B,QAEUwB" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/plugin.d.ts b/packages/@interactjs/dev-tools/visualizer/plugin.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/plugin.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/dev-tools/visualizer/plugin.js b/packages/@interactjs/dev-tools/visualizer/plugin.js new file mode 100644 index 000000000..aeaf751ef --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/plugin.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = exports.default = {}; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/plugin.js.map b/packages/@interactjs/dev-tools/visualizer/plugin.js.map new file mode 100644 index 000000000..786333d73 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/plugin.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": ";;;;;;iCAAe,CAAC,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/plugin.prod.js b/packages/@interactjs/dev-tools/visualizer/plugin.prod.js new file mode 100644 index 000000000..89cd79a09 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default={}; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/plugin.prod.js.map b/packages/@interactjs/dev-tools/visualizer/plugin.prod.js.map new file mode 100644 index 000000000..144d8e245 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/plugin.prod.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": "8FAAe,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/plugin.stub.d.ts b/packages/@interactjs/dev-tools/visualizer/plugin.stub.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/plugin.stub.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/dev-tools/visualizer/visualizer.spec.stub.d.ts b/packages/@interactjs/dev-tools/visualizer/visualizer.spec.stub.d.ts new file mode 100644 index 000000000..e69de29bb diff --git a/packages/@interactjs/dev-tools/visualizer/vueModules.d.ts b/packages/@interactjs/dev-tools/visualizer/vueModules.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/vueModules.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/@interactjs/dev-tools/visualizer/vueModules.js b/packages/@interactjs/dev-tools/visualizer/vueModules.js new file mode 100644 index 000000000..d5c102cc6 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/vueModules.js @@ -0,0 +1,6 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +//# sourceMappingURL=vueModules.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/vueModules.js.map b/packages/@interactjs/dev-tools/visualizer/vueModules.js.map new file mode 100644 index 000000000..84b81943f --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/vueModules.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "vueModules.ts" + ], + "sourcesContent": [ + "export {}\n" + ], + "mappings": "" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/vueModules.prod.js b/packages/@interactjs/dev-tools/visualizer/vueModules.prod.js new file mode 100644 index 000000000..45e510d9a --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/vueModules.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}); +//# sourceMappingURL=vueModules.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/vueModules.prod.js.map b/packages/@interactjs/dev-tools/visualizer/vueModules.prod.js.map new file mode 100644 index 000000000..32e471b75 --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/vueModules.prod.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "names": [], + "sources": [], + "mappings": "" +} \ No newline at end of file diff --git a/packages/@interactjs/dev-tools/visualizer/vueModules.stub.d.ts b/packages/@interactjs/dev-tools/visualizer/vueModules.stub.d.ts new file mode 100644 index 000000000..cb0ff5c3b --- /dev/null +++ b/packages/@interactjs/dev-tools/visualizer/vueModules.stub.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/@interactjs/inertia/.npmignore b/packages/@interactjs/inertia/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/inertia/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/inertia/LICENSE b/packages/@interactjs/inertia/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/inertia/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/inertia/index.d.ts b/packages/@interactjs/inertia/index.d.ts new file mode 100644 index 000000000..71fc5fcdc --- /dev/null +++ b/packages/@interactjs/inertia/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/inertia/plugin'; diff --git a/packages/@interactjs/inertia/index.js b/packages/@interactjs/inertia/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/inertia/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/inertia/index.js.map b/packages/@interactjs/inertia/index.js.map new file mode 100644 index 000000000..c6494b719 --- /dev/null +++ b/packages/@interactjs/inertia/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/inertia/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/inertia/index.prod.js b/packages/@interactjs/inertia/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/inertia/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/inertia/index.prod.js.map b/packages/@interactjs/inertia/index.prod.js.map new file mode 100644 index 000000000..ba5f67fff --- /dev/null +++ b/packages/@interactjs/inertia/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/inertia/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/inertia/index.ts b/packages/@interactjs/inertia/index.ts new file mode 100644 index 000000000..6415881ae --- /dev/null +++ b/packages/@interactjs/inertia/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/inertia/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/inertia/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/inertia/plugin.d.ts b/packages/@interactjs/inertia/plugin.d.ts new file mode 100644 index 000000000..c2976caa3 --- /dev/null +++ b/packages/@interactjs/inertia/plugin.d.ts @@ -0,0 +1,72 @@ +import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'; +import type { SignalArgs, Plugin } from '@interactjs/core/scope'; +import type { ActionName, Point, PointerEventType } from '@interactjs/core/types'; +import '@interactjs/modifiers/base'; +import '@interactjs/offset/plugin'; +import { Modification } from '@interactjs/modifiers/Modification'; +import type { ModifierArg } from '@interactjs/modifiers/types'; +declare module '@interactjs/core/InteractEvent' { + interface PhaseMap { + resume?: true; + inertiastart?: true; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + inertia?: InertiaState; + } +} +declare module '@interactjs/core/options' { + interface PerActionDefaults { + inertia?: { + enabled?: boolean; + resistance?: number; + minSpeed?: number; + endSpeed?: number; + allowResume?: true; + smoothEndDuration?: number; + }; + } +} +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:before-action-inertiastart': Omit, 'iEvent'>; + 'interactions:action-inertiastart': DoPhaseArg; + 'interactions:after-action-inertiastart': DoPhaseArg; + 'interactions:before-action-resume': Omit, 'iEvent'>; + 'interactions:action-resume': DoPhaseArg; + 'interactions:after-action-resume': DoPhaseArg; + } +} +export declare class InertiaState { + active: boolean; + isModified: boolean; + smoothEnd: boolean; + allowResume: boolean; + modification: Modification; + modifierCount: number; + modifierArg: ModifierArg; + startCoords: Point; + t0: number; + v0: number; + te: number; + targetOffset: Point; + modifiedOffset: Point; + currentOffset: Point; + lambda_v0?: number; + one_ve_v0?: number; + timeout: number; + readonly interaction: Interaction; + constructor(interaction: Interaction); + start(event: PointerEventType): boolean; + startInertia(): void; + startSmoothEnd(): void; + onNextFrame(tickFn: () => void): void; + inertiaTick(): void; + smoothEndTick(): void; + resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']): void; + end(): void; + stop(): void; +} +declare const inertia: Plugin; +export default inertia; diff --git a/packages/@interactjs/inertia/plugin.js b/packages/@interactjs/inertia/plugin.js new file mode 100644 index 000000000..d1575f4a5 --- /dev/null +++ b/packages/@interactjs/inertia/plugin.js @@ -0,0 +1,370 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = exports.InertiaState = void 0; +var modifiers = _interopRequireWildcard(require("../modifiers/base.js")); +var _plugin = _interopRequireDefault(require("../offset/plugin.js")); +var _Modification = require("../modifiers/Modification.js"); +var dom = _interopRequireWildcard(require("../utils/domUtils.js")); +var _hypot = _interopRequireDefault(require("../utils/hypot.js")); +var _is = _interopRequireDefault(require("../utils/is.js")); +var _pointerUtils = require("../utils/pointerUtils.js"); +var _raf = _interopRequireDefault(require("../utils/raf.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +function install(scope) { + const { + defaults + } = scope; + scope.usePlugin(_plugin.default); + scope.usePlugin(modifiers.default); + scope.actions.phases.inertiastart = true; + scope.actions.phases.resume = true; + defaults.perAction.inertia = { + enabled: false, + resistance: 10, + // the lambda in exponential decay + minSpeed: 100, + // target speed must be above this for inertia to start + endSpeed: 10, + // the speed at which inertia is slow enough to stop + allowResume: true, + // allow resuming an action in inertia phase + smoothEndDuration: 300 // animate to snap/restrict endOnly if there's no inertia + }; +} +class InertiaState { + active = false; + isModified = false; + smoothEnd = false; + allowResume = false; + modification; + modifierCount = 0; + modifierArg; + startCoords; + t0 = 0; + v0 = 0; + te = 0; + targetOffset; + modifiedOffset; + currentOffset; + lambda_v0 = 0; // eslint-disable-line camelcase + one_ve_v0 = 0; // eslint-disable-line camelcase + timeout; + interaction; + constructor(interaction) { + this.interaction = interaction; + } + start(event) { + const { + interaction + } = this; + const options = getOptions(interaction); + if (!options || !options.enabled) { + return false; + } + const { + client: velocityClient + } = interaction.coords.velocity; + const pointerSpeed = (0, _hypot.default)(velocityClient.x, velocityClient.y); + const modification = this.modification || (this.modification = new _Modification.Modification(interaction)); + modification.copyFrom(interaction.modification); + this.t0 = interaction._now(); + this.allowResume = options.allowResume; + this.v0 = pointerSpeed; + this.currentOffset = { + x: 0, + y: 0 + }; + this.startCoords = interaction.coords.cur.page; + this.modifierArg = modification.fillArg({ + pageCoords: this.startCoords, + preEnd: true, + phase: 'inertiastart' + }); + const thrown = this.t0 - interaction.coords.cur.timeStamp < 50 && pointerSpeed > options.minSpeed && pointerSpeed > options.endSpeed; + if (thrown) { + this.startInertia(); + } else { + modification.result = modification.setAll(this.modifierArg); + if (!modification.result.changed) { + return false; + } + this.startSmoothEnd(); + } + + // force modification change + interaction.modification.result.rect = null; + + // bring inertiastart event to the target coords + interaction.offsetBy(this.targetOffset); + interaction._doPhase({ + interaction, + event, + phase: 'inertiastart' + }); + interaction.offsetBy({ + x: -this.targetOffset.x, + y: -this.targetOffset.y + }); + // force modification change + interaction.modification.result.rect = null; + this.active = true; + interaction.simulation = this; + return true; + } + startInertia() { + const startVelocity = this.interaction.coords.velocity.client; + const options = getOptions(this.interaction); + const lambda = options.resistance; + const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda; + this.targetOffset = { + x: (startVelocity.x - inertiaDur) / lambda, + y: (startVelocity.y - inertiaDur) / lambda + }; + this.te = inertiaDur; + this.lambda_v0 = lambda / this.v0; + this.one_ve_v0 = 1 - options.endSpeed / this.v0; + const { + modification, + modifierArg + } = this; + modifierArg.pageCoords = { + x: this.startCoords.x + this.targetOffset.x, + y: this.startCoords.y + this.targetOffset.y + }; + modification.result = modification.setAll(modifierArg); + if (modification.result.changed) { + this.isModified = true; + this.modifiedOffset = { + x: this.targetOffset.x + modification.result.delta.x, + y: this.targetOffset.y + modification.result.delta.y + }; + } + this.onNextFrame(() => this.inertiaTick()); + } + startSmoothEnd() { + this.smoothEnd = true; + this.isModified = true; + this.targetOffset = { + x: this.modification.result.delta.x, + y: this.modification.result.delta.y + }; + this.onNextFrame(() => this.smoothEndTick()); + } + onNextFrame(tickFn) { + this.timeout = _raf.default.request(() => { + if (this.active) { + tickFn(); + } + }); + } + inertiaTick() { + const { + interaction + } = this; + const options = getOptions(interaction); + const lambda = options.resistance; + const t = (interaction._now() - this.t0) / 1000; + if (t < this.te) { + const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0; + let newOffset; + if (this.isModified) { + newOffset = getQuadraticCurvePoint(0, 0, this.targetOffset.x, this.targetOffset.y, this.modifiedOffset.x, this.modifiedOffset.y, progress); + } else { + newOffset = { + x: this.targetOffset.x * progress, + y: this.targetOffset.y * progress + }; + } + const delta = { + x: newOffset.x - this.currentOffset.x, + y: newOffset.y - this.currentOffset.y + }; + this.currentOffset.x += delta.x; + this.currentOffset.y += delta.y; + interaction.offsetBy(delta); + interaction.move(); + this.onNextFrame(() => this.inertiaTick()); + } else { + interaction.offsetBy({ + x: this.modifiedOffset.x - this.currentOffset.x, + y: this.modifiedOffset.y - this.currentOffset.y + }); + this.end(); + } + } + smoothEndTick() { + const { + interaction + } = this; + const t = interaction._now() - this.t0; + const { + smoothEndDuration: duration + } = getOptions(interaction); + if (t < duration) { + const newOffset = { + x: easeOutQuad(t, 0, this.targetOffset.x, duration), + y: easeOutQuad(t, 0, this.targetOffset.y, duration) + }; + const delta = { + x: newOffset.x - this.currentOffset.x, + y: newOffset.y - this.currentOffset.y + }; + this.currentOffset.x += delta.x; + this.currentOffset.y += delta.y; + interaction.offsetBy(delta); + interaction.move({ + skipModifiers: this.modifierCount + }); + this.onNextFrame(() => this.smoothEndTick()); + } else { + interaction.offsetBy({ + x: this.targetOffset.x - this.currentOffset.x, + y: this.targetOffset.y - this.currentOffset.y + }); + this.end(); + } + } + resume({ + pointer, + event, + eventTarget + }) { + const { + interaction + } = this; + + // undo inertia changes to interaction coords + interaction.offsetBy({ + x: -this.currentOffset.x, + y: -this.currentOffset.y + }); + + // update pointer at pointer down position + interaction.updatePointer(pointer, event, eventTarget, true); + + // fire resume signals and event + interaction._doPhase({ + interaction, + event, + phase: 'resume' + }); + (0, _pointerUtils.copyCoords)(interaction.coords.prev, interaction.coords.cur); + this.stop(); + } + end() { + this.interaction.move(); + this.interaction.end(); + this.stop(); + } + stop() { + this.active = this.smoothEnd = false; + this.interaction.simulation = null; + _raf.default.cancel(this.timeout); + } +} +exports.InertiaState = InertiaState; +function start({ + interaction, + event +}) { + if (!interaction._interacting || interaction.simulation) { + return null; + } + const started = interaction.inertia.start(event); + + // prevent action end if inertia or smoothEnd + return started ? false : null; +} + +// Check if the down event hits the current inertia target +// control should be return to the user +function resume(arg) { + const { + interaction, + eventTarget + } = arg; + const state = interaction.inertia; + if (!state.active) return; + let element = eventTarget; + + // climb up the DOM tree from the event target + while (_is.default.element(element)) { + // if interaction element is the current inertia target element + if (element === interaction.element) { + state.resume(arg); + break; + } + element = dom.parentNode(element); + } +} +function stop({ + interaction +}) { + const state = interaction.inertia; + if (state.active) { + state.stop(); + } +} +function getOptions({ + interactable, + prepared +}) { + return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia; +} +const inertia = { + id: 'inertia', + before: ['modifiers', 'actions'], + install, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.inertia = new InertiaState(interaction); + }, + 'interactions:before-action-end': start, + 'interactions:down': resume, + 'interactions:stop': stop, + 'interactions:before-action-resume': arg => { + const { + modification + } = arg.interaction; + modification.stop(arg); + modification.start(arg, arg.interaction.coords.cur.page); + modification.applyToInteraction(arg); + }, + 'interactions:before-action-inertiastart': arg => arg.interaction.modification.setAndApply(arg), + 'interactions:action-resume': modifiers.addEventModifiers, + 'interactions:action-inertiastart': modifiers.addEventModifiers, + 'interactions:after-action-inertiastart': arg => arg.interaction.modification.restoreInteractionCoords(arg), + 'interactions:after-action-resume': arg => arg.interaction.modification.restoreInteractionCoords(arg) + } +}; + +// http://stackoverflow.com/a/5634528/2280888 +function _getQBezierValue(t, p1, p2, p3) { + const iT = 1 - t; + return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3; +} +function getQuadraticCurvePoint(startX, startY, cpX, cpY, endX, endY, position) { + return { + x: _getQBezierValue(position, startX, cpX, endX), + y: _getQBezierValue(position, startY, cpY, endY) + }; +} + +// http://gizma.com/easing/ +function easeOutQuad(t, b, c, d) { + t /= d; + return -c * t * (t - 2) + b; +} +var _default = exports.default = inertia; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/inertia/plugin.js.map b/packages/@interactjs/inertia/plugin.js.map new file mode 100644 index 000000000..84517c82a --- /dev/null +++ b/packages/@interactjs/inertia/plugin.js.map @@ -0,0 +1,176 @@ +{ + "version": 3, + "names": [ + "modifiers", + "_interopRequireWildcard", + "require", + "_plugin", + "_interopRequireDefault", + "_Modification", + "dom", + "_hypot", + "_is", + "_pointerUtils", + "_raf", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "defaults", + "usePlugin", + "offset", + "actions", + "phases", + "inertiastart", + "resume", + "perAction", + "inertia", + "enabled", + "resistance", + "minSpeed", + "endSpeed", + "allowResume", + "smoothEndDuration", + "InertiaState", + "active", + "isModified", + "smoothEnd", + "modification", + "modifierCount", + "modifierArg", + "startCoords", + "t0", + "v0", + "te", + "targetOffset", + "modifiedOffset", + "currentOffset", + "lambda_v0", + "one_ve_v0", + "timeout", + "interaction", + "constructor", + "start", + "event", + "options", + "getOptions", + "client", + "velocityClient", + "coords", + "velocity", + "pointerSpeed", + "hypot", + "x", + "y", + "Modification", + "copyFrom", + "_now", + "cur", + "page", + "fillArg", + "pageCoords", + "preEnd", + "phase", + "thrown", + "timeStamp", + "startInertia", + "result", + "setAll", + "changed", + "startSmoothEnd", + "rect", + "offsetBy", + "_doPhase", + "simulation", + "startVelocity", + "lambda", + "inertiaDur", + "Math", + "log", + "delta", + "onNextFrame", + "inertiaTick", + "smoothEndTick", + "tickFn", + "raf", + "request", + "progress", + "exp", + "newOffset", + "getQuadraticCurvePoint", + "move", + "end", + "duration", + "easeOutQuad", + "skipModifiers", + "pointer", + "eventTarget", + "updatePointer", + "copyCoords", + "prev", + "stop", + "cancel", + "exports", + "_interacting", + "started", + "arg", + "state", + "element", + "is", + "parentNode", + "interactable", + "prepared", + "name", + "id", + "before", + "listeners", + "interactions:new", + "applyToInteraction", + "setAndApply", + "addEventModifiers", + "restoreInteractionCoords", + "_getQBezierValue", + "p1", + "p2", + "p3", + "iT", + "startX", + "startY", + "cpX", + "cpY", + "endX", + "endY", + "position", + "b", + "c", + "d", + "_default" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/modifiers/base'\nimport '@interactjs/offset/plugin'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport { Modification } from '@interactjs/modifiers/Modification'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\n/* eslint-enable import/no-duplicates */\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n resume?: true\n inertiastart?: true\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: InertiaState\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-inertiastart': Omit, 'iEvent'>\n 'interactions:action-inertiastart': DoPhaseArg\n 'interactions:after-action-inertiastart': DoPhaseArg\n 'interactions:before-action-resume': Omit, 'iEvent'>\n 'interactions:action-resume': DoPhaseArg\n 'interactions:after-action-resume': DoPhaseArg\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(offset)\n scope.usePlugin(modifiers.default)\n scope.actions.phases.inertiastart = true\n scope.actions.phases.resume = true\n\n defaults.perAction.inertia = {\n enabled: false,\n resistance: 10, // the lambda in exponential decay\n minSpeed: 100, // target speed must be above this for inertia to start\n endSpeed: 10, // the speed at which inertia is slow enough to stop\n allowResume: true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nexport class InertiaState {\n active = false\n isModified = false\n smoothEnd = false\n allowResume = false\n\n modification!: Modification\n modifierCount = 0\n modifierArg!: ModifierArg\n\n startCoords!: Point\n t0 = 0\n v0 = 0\n\n te = 0\n targetOffset!: Point\n modifiedOffset!: Point\n currentOffset!: Point\n\n lambda_v0? = 0 // eslint-disable-line camelcase\n one_ve_v0? = 0 // eslint-disable-line camelcase\n timeout!: number\n readonly interaction: Interaction\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n }\n\n start(event: PointerEventType) {\n const { interaction } = this\n const options = getOptions(interaction)\n\n if (!options || !options.enabled) {\n return false\n }\n\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n const modification = this.modification || (this.modification = new Modification(interaction))\n\n modification.copyFrom(interaction.modification)\n\n this.t0 = interaction._now()\n this.allowResume = options.allowResume\n this.v0 = pointerSpeed\n this.currentOffset = { x: 0, y: 0 }\n this.startCoords = interaction.coords.cur.page\n\n this.modifierArg = modification.fillArg({\n pageCoords: this.startCoords,\n preEnd: true,\n phase: 'inertiastart',\n })\n\n const thrown =\n this.t0 - interaction.coords.cur.timeStamp < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed\n\n if (thrown) {\n this.startInertia()\n } else {\n modification.result = modification.setAll(this.modifierArg)\n\n if (!modification.result.changed) {\n return false\n }\n\n this.startSmoothEnd()\n }\n\n // force modification change\n interaction.modification.result.rect = null\n\n // bring inertiastart event to the target coords\n interaction.offsetBy(this.targetOffset)\n interaction._doPhase({\n interaction,\n event,\n phase: 'inertiastart',\n })\n interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n // force modification change\n interaction.modification.result.rect = null\n\n this.active = true\n interaction.simulation = this\n\n return true\n }\n\n startInertia() {\n const startVelocity = this.interaction.coords.velocity.client\n const options = getOptions(this.interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n this.targetOffset = {\n x: (startVelocity.x - inertiaDur) / lambda,\n y: (startVelocity.y - inertiaDur) / lambda,\n }\n\n this.te = inertiaDur\n this.lambda_v0 = lambda / this.v0\n this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n const { modification, modifierArg } = this\n\n modifierArg.pageCoords = {\n x: this.startCoords.x + this.targetOffset.x,\n y: this.startCoords.y + this.targetOffset.y,\n }\n\n modification.result = modification.setAll(modifierArg)\n\n if (modification.result.changed) {\n this.isModified = true\n this.modifiedOffset = {\n x: this.targetOffset.x + modification.result.delta.x,\n y: this.targetOffset.y + modification.result.delta.y,\n }\n }\n\n this.onNextFrame(() => this.inertiaTick())\n }\n\n startSmoothEnd() {\n this.smoothEnd = true\n this.isModified = true\n this.targetOffset = {\n x: this.modification.result.delta.x,\n y: this.modification.result.delta.y,\n }\n\n this.onNextFrame(() => this.smoothEndTick())\n }\n\n onNextFrame(tickFn: () => void) {\n this.timeout = raf.request(() => {\n if (this.active) {\n tickFn()\n }\n })\n }\n\n inertiaTick() {\n const { interaction } = this\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = (interaction._now() - this.t0) / 1000\n\n if (t < this.te) {\n const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n let newOffset: Point\n\n if (this.isModified) {\n newOffset = getQuadraticCurvePoint(\n 0,\n 0,\n this.targetOffset.x,\n this.targetOffset.y,\n this.modifiedOffset.x,\n this.modifiedOffset.y,\n progress,\n )\n } else {\n newOffset = {\n x: this.targetOffset.x * progress,\n y: this.targetOffset.y * progress,\n }\n }\n\n const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move()\n\n this.onNextFrame(() => this.inertiaTick())\n } else {\n interaction.offsetBy({\n x: this.modifiedOffset.x - this.currentOffset.x,\n y: this.modifiedOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n smoothEndTick() {\n const { interaction } = this\n const t = interaction._now() - this.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n const newOffset = {\n x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n }\n const delta = {\n x: newOffset.x - this.currentOffset.x,\n y: newOffset.y - this.currentOffset.y,\n }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move({ skipModifiers: this.modifierCount })\n\n this.onNextFrame(() => this.smoothEndTick())\n } else {\n interaction.offsetBy({\n x: this.targetOffset.x - this.currentOffset.x,\n y: this.targetOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n const { interaction } = this\n\n // undo inertia changes to interaction coords\n interaction.offsetBy({\n x: -this.currentOffset.x,\n y: -this.currentOffset.y,\n })\n\n // update pointer at pointer down position\n interaction.updatePointer(pointer, event, eventTarget, true)\n\n // fire resume signals and event\n interaction._doPhase({\n interaction,\n event,\n phase: 'resume',\n })\n copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n this.stop()\n }\n\n end() {\n this.interaction.move()\n this.interaction.end()\n this.stop()\n }\n\n stop() {\n this.active = this.smoothEnd = false\n this.interaction.simulation = null\n raf.cancel(this.timeout)\n }\n}\n\nfunction start({ interaction, event }: DoPhaseArg) {\n if (!interaction._interacting || interaction.simulation) {\n return null\n }\n\n const started = interaction.inertia.start(event)\n\n // prevent action end if inertia or smoothEnd\n return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume(arg: SignalArgs['interactions:down']) {\n const { interaction, eventTarget } = arg\n const state = interaction.inertia\n\n if (!state.active) return\n\n let element = eventTarget as Node\n\n // climb up the DOM tree from the event target\n while (is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n state.resume(arg)\n break\n }\n\n element = dom.parentNode(element)\n }\n}\n\nfunction stop({ interaction }: { interaction: Interaction }) {\n const state = interaction.inertia\n\n if (state.active) {\n state.stop()\n }\n}\n\nfunction getOptions({ interactable, prepared }: Interaction) {\n return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n id: 'inertia',\n before: ['modifiers', 'actions'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = new InertiaState(interaction)\n },\n\n 'interactions:before-action-end': start,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n\n 'interactions:before-action-resume': (arg) => {\n const { modification } = arg.interaction\n\n modification.stop(arg)\n modification.start(arg, arg.interaction.coords.cur.page)\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n 'interactions:action-resume': modifiers.addEventModifiers,\n 'interactions:action-inertiastart': modifiers.addEventModifiers,\n 'interactions:after-action-inertiastart': (arg) =>\n arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue(t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint(\n startX: number,\n startY: number,\n cpX: number,\n cpY: number,\n endX: number,\n endY: number,\n position: number,\n) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad(t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport default inertia\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/inertia/plugin.prod.js b/packages/@interactjs/inertia/plugin.prod.js new file mode 100644 index 000000000..77ceb0788 --- /dev/null +++ b/packages/@interactjs/inertia/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.InertiaState=void 0;var t=d(require("../modifiers/base.prod.js")),e=f(require("../offset/plugin.prod.js")),i=require("../modifiers/Modification.prod.js"),s=d(require("../utils/domUtils.prod.js")),r=f(require("../utils/hypot.prod.js")),o=f(require("../utils/is.prod.js")),n=require("../utils/pointerUtils.prod.js"),a=f(require("../utils/raf.prod.js"));function f(t){return t&&t.__esModule?t:{default:t}}function c(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,i=new WeakMap;return(c=t=>t?i:e)(t)}function d(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var i=c(e);if(i&&i.has(t))return i.get(t);var s={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if("default"!==o&&Object.prototype.hasOwnProperty.call(t,o)){var n=r?Object.getOwnPropertyDescriptor(t,o):null;n&&(n.get||n.set)?Object.defineProperty(s,o,n):s[o]=t[o]}return s.default=t,i&&i.set(t,s),s}class h{active=!1;isModified=!1;smoothEnd=!1;allowResume=!1;modification;modifierCount=0;modifierArg;startCoords;t0=0;v0=0;te=0;targetOffset;modifiedOffset;currentOffset;lambda_v0=0;one_ve_v0=0;timeout;interaction;constructor(t){this.interaction=t}start(t){const{interaction:e}=this,s=u(e);if(!s||!s.enabled)return!1;const{client:o}=e.coords.velocity,n=(0,r.default)(o.x,o.y),a=this.modification||(this.modification=new i.Modification(e));if(a.copyFrom(e.modification),this.t0=e._now(),this.allowResume=s.allowResume,this.v0=n,this.currentOffset={x:0,y:0},this.startCoords=e.coords.cur.page,this.modifierArg=a.fillArg({pageCoords:this.startCoords,preEnd:!0,phase:"inertiastart"}),this.t0-e.coords.cur.timeStamp<50&&n>s.minSpeed&&n>s.endSpeed)this.startInertia();else{if(a.result=a.setAll(this.modifierArg),!a.result.changed)return!1;this.startSmoothEnd()}return e.modification.result.rect=null,e.offsetBy(this.targetOffset),e._doPhase({interaction:e,event:t,phase:"inertiastart"}),e.offsetBy({x:-this.targetOffset.x,y:-this.targetOffset.y}),e.modification.result.rect=null,this.active=!0,e.simulation=this,!0}startInertia(){const t=this.interaction.coords.velocity.client,e=u(this.interaction),i=e.resistance,s=-Math.log(e.endSpeed/this.v0)/i;this.targetOffset={x:(t.x-s)/i,y:(t.y-s)/i},this.te=s,this.lambda_v0=i/this.v0,this.one_ve_v0=1-e.endSpeed/this.v0;const{modification:r,modifierArg:o}=this;o.pageCoords={x:this.startCoords.x+this.targetOffset.x,y:this.startCoords.y+this.targetOffset.y},r.result=r.setAll(o),r.result.changed&&(this.isModified=!0,this.modifiedOffset={x:this.targetOffset.x+r.result.delta.x,y:this.targetOffset.y+r.result.delta.y}),this.onNextFrame((()=>this.inertiaTick()))}startSmoothEnd(){this.smoothEnd=!0,this.isModified=!0,this.targetOffset={x:this.modification.result.delta.x,y:this.modification.result.delta.y},this.onNextFrame((()=>this.smoothEndTick()))}onNextFrame(t){this.timeout=a.default.request((()=>{this.active&&t()}))}inertiaTick(){const{interaction:t}=this,e=u(t).resistance,i=(t._now()-this.t0)/1e3;if(ithis.inertiaTick()))}else t.offsetBy({x:this.modifiedOffset.x-this.currentOffset.x,y:this.modifiedOffset.y-this.currentOffset.y}),this.end();var s,r,o,n,a}smoothEndTick(){const{interaction:t}=this,e=t._now()-this.t0,{smoothEndDuration:i}=u(t);if(ethis.smoothEndTick()))}else t.offsetBy({x:this.targetOffset.x-this.currentOffset.x,y:this.targetOffset.y-this.currentOffset.y}),this.end()}resume({pointer:t,event:e,eventTarget:i}){const{interaction:s}=this;s.offsetBy({x:-this.currentOffset.x,y:-this.currentOffset.y}),s.updatePointer(t,e,i,!0),s._doPhase({interaction:s,event:e,phase:"resume"}),(0,n.copyCoords)(s.coords.prev,s.coords.cur),this.stop()}end(){this.interaction.move(),this.interaction.end(),this.stop()}stop(){this.active=this.smoothEnd=!1,this.interaction.simulation=null,a.default.cancel(this.timeout)}}function u({interactable:t,prepared:e}){return t&&t.options&&e.name&&t.options[e.name].inertia}exports.InertiaState=h;const l={id:"inertia",before:["modifiers","actions"],install(i){const{defaults:s}=i;i.usePlugin(e.default),i.usePlugin(t.default),i.actions.phases.inertiastart=!0,i.actions.phases.resume=!0,s.perAction.inertia={enabled:!1,resistance:10,minSpeed:100,endSpeed:10,allowResume:!0,smoothEndDuration:300}},listeners:{"interactions:new"({interaction:t}){t.inertia=new h(t)},"interactions:before-action-end":({interaction:t,event:e})=>(!t._interacting||t.simulation||!t.inertia.start(e))&&null,"interactions:down"(t){const{interaction:e,eventTarget:i}=t,r=e.inertia;if(!r.active)return;let n=i;for(;o.default.element(n);){if(n===e.element){r.resume(t);break}n=s.parentNode(n)}},"interactions:stop"({interaction:t}){const e=t.inertia;e.active&&e.stop()},"interactions:before-action-resume"(t){const{modification:e}=t.interaction;e.stop(t),e.start(t,t.interaction.coords.cur.page),e.applyToInteraction(t)},"interactions:before-action-inertiastart":t=>t.interaction.modification.setAndApply(t),"interactions:action-resume":t.addEventModifiers,"interactions:action-inertiastart":t.addEventModifiers,"interactions:after-action-inertiastart":t=>t.interaction.modification.restoreInteractionCoords(t),"interactions:after-action-resume":t=>t.interaction.modification.restoreInteractionCoords(t)}};function m(t,e,i,s){const r=1-t;return r*r*e+2*r*t*i+t*t*s}function p(t,e,i,s){return-i*(t/=s)*(t-2)+e}exports.default=l; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/inertia/plugin.prod.js.map b/packages/@interactjs/inertia/plugin.prod.js.map new file mode 100644 index 000000000..b565cc302 --- /dev/null +++ b/packages/@interactjs/inertia/plugin.prod.js.map @@ -0,0 +1,170 @@ +{ + "version": 3, + "names": [ + "modifiers", + "_interopRequireWildcard", + "require", + "_pluginProd", + "_interopRequireDefault", + "_ModificationProd", + "dom", + "_hypotProd", + "_isProd", + "_pointerUtilsProd", + "_rafProd", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "InertiaState", + "active", + "isModified", + "smoothEnd", + "allowResume", + "modification", + "modifierCount", + "modifierArg", + "startCoords", + "t0", + "v0", + "te", + "targetOffset", + "modifiedOffset", + "currentOffset", + "lambda_v0", + "one_ve_v0", + "timeout", + "interaction", + "constructor", + "this", + "start", + "event", + "options", + "getOptions", + "enabled", + "client", + "velocityClient", + "coords", + "velocity", + "pointerSpeed", + "hypot", + "x", + "y", + "Modification", + "copyFrom", + "_now", + "cur", + "page", + "fillArg", + "pageCoords", + "preEnd", + "phase", + "timeStamp", + "minSpeed", + "endSpeed", + "startInertia", + "result", + "setAll", + "changed", + "startSmoothEnd", + "rect", + "offsetBy", + "_doPhase", + "simulation", + "startVelocity", + "lambda", + "resistance", + "inertiaDur", + "Math", + "log", + "delta", + "onNextFrame", + "inertiaTick", + "smoothEndTick", + "tickFn", + "raf", + "request", + "progress", + "exp", + "newOffset", + "cpX", + "cpY", + "endX", + "endY", + "_getQBezierValue", + "position", + "move", + "end", + "smoothEndDuration", + "duration", + "easeOutQuad", + "skipModifiers", + "resume", + "pointer", + "eventTarget", + "updatePointer", + "copyCoords", + "prev", + "stop", + "cancel", + "interactable", + "prepared", + "name", + "inertia", + "exports", + "id", + "before", + "install", + "scope", + "defaults", + "usePlugin", + "offset", + "actions", + "phases", + "inertiastart", + "perAction", + "listeners", + "_interacting", + "arg", + "state", + "element", + "is", + "parentNode", + "applyToInteraction", + "setAndApply", + "addEventModifiers", + "restoreInteractionCoords", + "p1", + "p2", + "p3", + "iT", + "b", + "c", + "d" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/modifiers/base'\nimport '@interactjs/offset/plugin'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport { Modification } from '@interactjs/modifiers/Modification'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\n/* eslint-enable import/no-duplicates */\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n resume?: true\n inertiastart?: true\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: InertiaState\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-inertiastart': Omit, 'iEvent'>\n 'interactions:action-inertiastart': DoPhaseArg\n 'interactions:after-action-inertiastart': DoPhaseArg\n 'interactions:before-action-resume': Omit, 'iEvent'>\n 'interactions:action-resume': DoPhaseArg\n 'interactions:after-action-resume': DoPhaseArg\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(offset)\n scope.usePlugin(modifiers.default)\n scope.actions.phases.inertiastart = true\n scope.actions.phases.resume = true\n\n defaults.perAction.inertia = {\n enabled: false,\n resistance: 10, // the lambda in exponential decay\n minSpeed: 100, // target speed must be above this for inertia to start\n endSpeed: 10, // the speed at which inertia is slow enough to stop\n allowResume: true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nexport class InertiaState {\n active = false\n isModified = false\n smoothEnd = false\n allowResume = false\n\n modification!: Modification\n modifierCount = 0\n modifierArg!: ModifierArg\n\n startCoords!: Point\n t0 = 0\n v0 = 0\n\n te = 0\n targetOffset!: Point\n modifiedOffset!: Point\n currentOffset!: Point\n\n lambda_v0? = 0 // eslint-disable-line camelcase\n one_ve_v0? = 0 // eslint-disable-line camelcase\n timeout!: number\n readonly interaction: Interaction\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n }\n\n start(event: PointerEventType) {\n const { interaction } = this\n const options = getOptions(interaction)\n\n if (!options || !options.enabled) {\n return false\n }\n\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n const modification = this.modification || (this.modification = new Modification(interaction))\n\n modification.copyFrom(interaction.modification)\n\n this.t0 = interaction._now()\n this.allowResume = options.allowResume\n this.v0 = pointerSpeed\n this.currentOffset = { x: 0, y: 0 }\n this.startCoords = interaction.coords.cur.page\n\n this.modifierArg = modification.fillArg({\n pageCoords: this.startCoords,\n preEnd: true,\n phase: 'inertiastart',\n })\n\n const thrown =\n this.t0 - interaction.coords.cur.timeStamp < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed\n\n if (thrown) {\n this.startInertia()\n } else {\n modification.result = modification.setAll(this.modifierArg)\n\n if (!modification.result.changed) {\n return false\n }\n\n this.startSmoothEnd()\n }\n\n // force modification change\n interaction.modification.result.rect = null\n\n // bring inertiastart event to the target coords\n interaction.offsetBy(this.targetOffset)\n interaction._doPhase({\n interaction,\n event,\n phase: 'inertiastart',\n })\n interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n // force modification change\n interaction.modification.result.rect = null\n\n this.active = true\n interaction.simulation = this\n\n return true\n }\n\n startInertia() {\n const startVelocity = this.interaction.coords.velocity.client\n const options = getOptions(this.interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n this.targetOffset = {\n x: (startVelocity.x - inertiaDur) / lambda,\n y: (startVelocity.y - inertiaDur) / lambda,\n }\n\n this.te = inertiaDur\n this.lambda_v0 = lambda / this.v0\n this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n const { modification, modifierArg } = this\n\n modifierArg.pageCoords = {\n x: this.startCoords.x + this.targetOffset.x,\n y: this.startCoords.y + this.targetOffset.y,\n }\n\n modification.result = modification.setAll(modifierArg)\n\n if (modification.result.changed) {\n this.isModified = true\n this.modifiedOffset = {\n x: this.targetOffset.x + modification.result.delta.x,\n y: this.targetOffset.y + modification.result.delta.y,\n }\n }\n\n this.onNextFrame(() => this.inertiaTick())\n }\n\n startSmoothEnd() {\n this.smoothEnd = true\n this.isModified = true\n this.targetOffset = {\n x: this.modification.result.delta.x,\n y: this.modification.result.delta.y,\n }\n\n this.onNextFrame(() => this.smoothEndTick())\n }\n\n onNextFrame(tickFn: () => void) {\n this.timeout = raf.request(() => {\n if (this.active) {\n tickFn()\n }\n })\n }\n\n inertiaTick() {\n const { interaction } = this\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = (interaction._now() - this.t0) / 1000\n\n if (t < this.te) {\n const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n let newOffset: Point\n\n if (this.isModified) {\n newOffset = getQuadraticCurvePoint(\n 0,\n 0,\n this.targetOffset.x,\n this.targetOffset.y,\n this.modifiedOffset.x,\n this.modifiedOffset.y,\n progress,\n )\n } else {\n newOffset = {\n x: this.targetOffset.x * progress,\n y: this.targetOffset.y * progress,\n }\n }\n\n const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move()\n\n this.onNextFrame(() => this.inertiaTick())\n } else {\n interaction.offsetBy({\n x: this.modifiedOffset.x - this.currentOffset.x,\n y: this.modifiedOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n smoothEndTick() {\n const { interaction } = this\n const t = interaction._now() - this.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n const newOffset = {\n x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n }\n const delta = {\n x: newOffset.x - this.currentOffset.x,\n y: newOffset.y - this.currentOffset.y,\n }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move({ skipModifiers: this.modifierCount })\n\n this.onNextFrame(() => this.smoothEndTick())\n } else {\n interaction.offsetBy({\n x: this.targetOffset.x - this.currentOffset.x,\n y: this.targetOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n const { interaction } = this\n\n // undo inertia changes to interaction coords\n interaction.offsetBy({\n x: -this.currentOffset.x,\n y: -this.currentOffset.y,\n })\n\n // update pointer at pointer down position\n interaction.updatePointer(pointer, event, eventTarget, true)\n\n // fire resume signals and event\n interaction._doPhase({\n interaction,\n event,\n phase: 'resume',\n })\n copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n this.stop()\n }\n\n end() {\n this.interaction.move()\n this.interaction.end()\n this.stop()\n }\n\n stop() {\n this.active = this.smoothEnd = false\n this.interaction.simulation = null\n raf.cancel(this.timeout)\n }\n}\n\nfunction start({ interaction, event }: DoPhaseArg) {\n if (!interaction._interacting || interaction.simulation) {\n return null\n }\n\n const started = interaction.inertia.start(event)\n\n // prevent action end if inertia or smoothEnd\n return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume(arg: SignalArgs['interactions:down']) {\n const { interaction, eventTarget } = arg\n const state = interaction.inertia\n\n if (!state.active) return\n\n let element = eventTarget as Node\n\n // climb up the DOM tree from the event target\n while (is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n state.resume(arg)\n break\n }\n\n element = dom.parentNode(element)\n }\n}\n\nfunction stop({ interaction }: { interaction: Interaction }) {\n const state = interaction.inertia\n\n if (state.active) {\n state.stop()\n }\n}\n\nfunction getOptions({ interactable, prepared }: Interaction) {\n return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n id: 'inertia',\n before: ['modifiers', 'actions'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = new InertiaState(interaction)\n },\n\n 'interactions:before-action-end': start,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n\n 'interactions:before-action-resume': (arg) => {\n const { modification } = arg.interaction\n\n modification.stop(arg)\n modification.start(arg, arg.interaction.coords.cur.page)\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n 'interactions:action-resume': modifiers.addEventModifiers,\n 'interactions:action-inertiastart': modifiers.addEventModifiers,\n 'interactions:after-action-inertiastart': (arg) =>\n arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue(t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint(\n startX: number,\n startY: number,\n cpX: number,\n cpY: number,\n endX: number,\n endY: number,\n position: number,\n) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad(t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport default inertia\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/interact/.npmignore b/packages/@interactjs/interact/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/interact/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/interact/LICENSE b/packages/@interactjs/interact/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/interact/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/interact/index.d.ts b/packages/@interactjs/interact/index.d.ts new file mode 100644 index 000000000..515776ed1 --- /dev/null +++ b/packages/@interactjs/interact/index.d.ts @@ -0,0 +1,2 @@ +declare const interact: import("@interactjs/core/InteractStatic").InteractStatic; +export default interact; diff --git a/packages/@interactjs/interact/index.js b/packages/@interactjs/interact/index.js new file mode 100644 index 000000000..de1b8cf5c --- /dev/null +++ b/packages/@interactjs/interact/index.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _scope = require("../core/scope.js"); +const scope = new _scope.Scope(); +const interact = scope.interactStatic; +var _default = exports.default = interact; +const _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : void 0; +scope.init(_global); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/interact/index.js.map b/packages/@interactjs/interact/index.js.map new file mode 100644 index 000000000..a7d3a49fc --- /dev/null +++ b/packages/@interactjs/interact/index.js.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "names": [ + "_scope", + "require", + "scope", + "Scope", + "interact", + "interactStatic", + "_default", + "exports", + "default", + "_global", + "globalThis", + "window", + "init" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n" + ], + "mappings": ";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,KAAK,GAAG,IAAIC,YAAK,CAAC,CAAC;AAEzB,MAAMC,QAAQ,GAAGF,KAAK,CAACG,cAAc;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEtBJ,QAAQ;AAEvB,MAAMK,OAAO,GAAG,OAAOC,UAAU,KAAK,WAAW,GAAGA,UAAU,GAAG,OAAOC,MAAM,KAAK,WAAW,GAAGA,MAAM,SAAO;AAC9GT,KAAK,CAACU,IAAI,CAACH,OAAO,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/interact/index.prod.js b/packages/@interactjs/interact/index.prod.js new file mode 100644 index 000000000..36088b6d1 --- /dev/null +++ b/packages/@interactjs/interact/index.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;const e=new(require("../core/scope.prod.js").Scope),o=e.interactStatic;exports.default=o;const t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0;e.init(t); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/interact/index.prod.js.map b/packages/@interactjs/interact/index.prod.js.map new file mode 100644 index 000000000..66e8be1c8 --- /dev/null +++ b/packages/@interactjs/interact/index.prod.js.map @@ -0,0 +1,23 @@ +{ + "version": 3, + "names": [ + "scope", + "require", + "Scope", + "interact", + "interactStatic", + "exports", + "default", + "_global", + "globalThis", + "window", + "init" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n" + ], + "mappings": "8EAEA,MAAMA,EAAQ,IAFdC,QAAA,yBAEkBC,OAEZC,EAAWH,EAAMI,eAAcC,QAAAC,QAEtBH,EAEf,MAAMI,EAAgC,oBAAfC,WAA6BA,WAA+B,oBAAXC,OAAyBA,YAAM,EACvGT,EAAMU,KAAKH" +} \ No newline at end of file diff --git a/packages/@interactjs/interactjs/.npmignore b/packages/@interactjs/interactjs/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/interactjs/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/interactjs/LICENSE b/packages/@interactjs/interactjs/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/interactjs/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/interactjs/README.md b/packages/@interactjs/interactjs/README.md new file mode 100644 index 000000000..1824b547d --- /dev/null +++ b/packages/@interactjs/interactjs/README.md @@ -0,0 +1,108 @@ +interact.js + +

+ JavaScript drag and drop, resizing and multi-touch gestures with inertia and snapping for modern browsers (and also IE9+). +

+ +
+Gitter +jsDelivr +Build Status + +
+
+ +Features include: + +- **inertia** and **snapping** +- **multi-touch**, simultaneous interactions +- cross browser and device, supporting the **desktop and mobile** versions of + Chrome, Firefox and Opera as well as **Internet Explorer 9+** +- interaction with [**SVG**](http://interactjs.io/#use_in_svg_files) elements +- being **standalone and customizable** +- **not modifying the DOM** except to change the cursor (but you can disable + that) + +## Installation + +- [npm](https://www.npmjs.org/): `npm install interactjs` +- [jsDelivr CDN](https://cdn.jsdelivr.net/npm/interactjs/): `` +- [unpkg CDN](https://unpkg.com/interactjs/): `` +- [Rails 5.1+](https://rubyonrails.org/): + 1. `yarn add interactjs` + 2. `//= require interactjs/interact` +- [Webjars SBT/Play 2](https://www.webjars.org/): `libraryDependencies ++= Seq("org.webjars.npm" % "interactjs" % version)` + +### Typescript definitions + +The project is written in Typescript and the npm package includes the type +definitions, but if you need the typings alone, you can install them with: + +``` +npm install --save-dev @interactjs/types +``` + +## Documentation + +http://interactjs.io/docs + +## Example + +```javascript +var pixelSize = 16; + +interact('.rainbow-pixel-canvas') + .origin('self') + .draggable({ + modifiers: [ + interact.modifiers.snap({ + // snap to the corners of a grid + targets: [ + interact.snappers.grid({ x: pixelSize, y: pixelSize }), + ], + }) + ], + listeners: { + // draw colored squares on move + move: function (event) { + var context = event.target.getContext('2d'), + // calculate the angle of the drag direction + dragAngle = 180 * Math.atan2(event.dx, event.dy) / Math.PI; + + // set color based on drag angle and speed + context.fillStyle = 'hsl(' + dragAngle + ', 86%, ' + + (30 + Math.min(event.speed / 1000, 1) * 50) + '%)'; + + // draw squares + context.fillRect(event.pageX - pixelSize / 2, event.pageY - pixelSize / 2, + pixelSize, pixelSize); + } + } + }) + // clear the canvas on doubletap + .on('doubletap', function (event) { + var context = event.target.getContext('2d'); + + context.clearRect(0, 0, context.canvas.width, context.canvas.height); + }); + + function resizeCanvases () { + [].forEach.call(document.querySelectorAll('.rainbow-pixel-canvas'), function (canvas) { + canvas.width = document.body.clientWidth; + canvas.height = window.innerHeight * 0.7; + }); + } + + // interact.js can also add DOM event listeners + interact(document).on('DOMContentLoaded', resizeCanvases); + interact(window).on('resize', resizeCanvases); +``` + +See the above code in action at https://codepen.io/taye/pen/tCKAm + +## License + +interact.js is released under the [MIT License](http://taye.mit-license.org). + +[ijs-twitter]: https://twitter.com/interactjs +[upcoming-changes]: https://github.com/taye/interact.js/blob/main/CHANGELOG.md#upcoming-changes diff --git a/packages/@interactjs/interactjs/index.d.ts b/packages/@interactjs/interactjs/index.d.ts new file mode 100644 index 000000000..a0bd2f63a --- /dev/null +++ b/packages/@interactjs/interactjs/index.d.ts @@ -0,0 +1,13 @@ +import '@interactjs/actions/plugin'; +import '@interactjs/auto-scroll/plugin'; +import '@interactjs/auto-start/plugin'; +import '@interactjs/core/interactablePreventDefault'; +import '@interactjs/dev-tools/plugin'; +import '@interactjs/inertia/plugin'; +import '@interactjs/interact'; +import '@interactjs/modifiers/plugin'; +import '@interactjs/offset/plugin'; +import '@interactjs/pointer-events/plugin'; +import '@interactjs/reflow/plugin'; +import interact from '@interactjs/interact'; +export default interact; diff --git a/packages/@interactjs/interactjs/index.js b/packages/@interactjs/interactjs/index.js new file mode 100644 index 000000000..de39e39af --- /dev/null +++ b/packages/@interactjs/interactjs/index.js @@ -0,0 +1,53 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _plugin = _interopRequireDefault(require("../actions/plugin.js")); +var _plugin2 = _interopRequireDefault(require("../auto-scroll/plugin.js")); +var _plugin3 = _interopRequireDefault(require("../auto-start/plugin.js")); +var _interactablePreventDefault = _interopRequireDefault(require("../core/interactablePreventDefault.js")); +var _plugin4 = _interopRequireDefault(require("../dev-tools/plugin.js")); +var _plugin5 = _interopRequireDefault(require("../inertia/plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +var _plugin6 = _interopRequireDefault(require("../modifiers/plugin.js")); +var _plugin7 = _interopRequireDefault(require("../offset/plugin.js")); +var _plugin8 = _interopRequireDefault(require("../pointer-events/plugin.js")); +var _plugin9 = _interopRequireDefault(require("../reflow/plugin.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +_index.default.use(_interactablePreventDefault.default); +_index.default.use(_plugin7.default); + +// pointerEvents +_index.default.use(_plugin8.default); + +// inertia +_index.default.use(_plugin5.default); + +// snap, resize, etc. +_index.default.use(_plugin6.default); + +// autoStart, hold +_index.default.use(_plugin3.default); + +// drag and drop, resize, gesture +_index.default.use(_plugin.default); + +// autoScroll +_index.default.use(_plugin2.default); + +// reflow +_index.default.use(_plugin9.default); + +// eslint-disable-next-line no-undef +if ("development" !== 'production') { + _index.default.use(_plugin4.default); +} +var _default = exports.default = _index.default; +_index.default.default = _index.default; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/interactjs/index.js.map b/packages/@interactjs/interactjs/index.js.map new file mode 100644 index 000000000..31c84f1f5 --- /dev/null +++ b/packages/@interactjs/interactjs/index.js.map @@ -0,0 +1,42 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_plugin2", + "_plugin3", + "_interactablePreventDefault", + "_plugin4", + "_plugin5", + "_index", + "_plugin6", + "_plugin7", + "_plugin8", + "_plugin9", + "obj", + "__esModule", + "default", + "interact", + "use", + "interactablePreventDefault", + "offset", + "pointerEvents", + "inertia", + "modifiers", + "autoStart", + "actions", + "autoScroll", + "reflow", + "devTools", + "_default", + "exports" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/actions/plugin'\nimport '@interactjs/auto-scroll/plugin'\nimport '@interactjs/auto-start/plugin'\nimport '@interactjs/core/interactablePreventDefault'\nimport '@interactjs/dev-tools/plugin'\nimport '@interactjs/inertia/plugin'\nimport '@interactjs/interact'\nimport '@interactjs/modifiers/plugin'\nimport '@interactjs/offset/plugin'\nimport '@interactjs/pointer-events/plugin'\nimport '@interactjs/reflow/plugin'\n\nimport actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n/* eslint-enable import/no-duplicates */\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n" + ], + "mappings": ";;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,2BAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,QAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,MAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,QAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,QAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,QAAA,GAAAX,sBAAA,CAAAC,OAAA;AAAkC,SAAAD,uBAAAY,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAXlC;;AAwBA;;AAEAG,cAAQ,CAACC,GAAG,CAACC,mCAA0B,CAAC;AAExCF,cAAQ,CAACC,GAAG,CAACE,gBAAM,CAAC;;AAEpB;AACAH,cAAQ,CAACC,GAAG,CAACG,gBAAa,CAAC;;AAE3B;AACAJ,cAAQ,CAACC,GAAG,CAACI,gBAAO,CAAC;;AAErB;AACAL,cAAQ,CAACC,GAAG,CAACK,gBAAS,CAAC;;AAEvB;AACAN,cAAQ,CAACC,GAAG,CAACM,gBAAS,CAAC;;AAEvB;AACAP,cAAQ,CAACC,GAAG,CAACO,eAAO,CAAC;;AAErB;AACAR,cAAQ,CAACC,GAAG,CAACQ,gBAAU,CAAC;;AAExB;AACAT,cAAQ,CAACC,GAAG,CAACS,gBAAM,CAAC;;AAEpB;AACA,IAAI,kBAAyB,YAAY,EAAE;EACzCV,cAAQ,CAACC,GAAG,CAACU,gBAAQ,CAAC;AACxB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAd,OAAA,GAEcC,cAAQ;AACrBA,cAAQ,CAASD,OAAO,GAAGC,cAAQ" +} \ No newline at end of file diff --git a/packages/@interactjs/interactjs/index.prod.js b/packages/@interactjs/interactjs/index.prod.js new file mode 100644 index 000000000..36459e134 --- /dev/null +++ b/packages/@interactjs/interactjs/index.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("../actions/plugin.prod.js")),u=o(require("../auto-scroll/plugin.prod.js")),r=o(require("../auto-start/plugin.prod.js")),t=o(require("../core/interactablePreventDefault.prod.js")),d=(o(require("../dev-tools/plugin.prod.js")),o(require("../inertia/plugin.prod.js"))),l=o(require("../interact/index.prod.js")),a=o(require("../modifiers/plugin.prod.js")),f=o(require("../offset/plugin.prod.js")),i=o(require("../pointer-events/plugin.prod.js")),s=o(require("../reflow/plugin.prod.js"));function o(e){return e&&e.__esModule?e:{default:e}}l.default.use(t.default),l.default.use(f.default),l.default.use(i.default),l.default.use(d.default),l.default.use(a.default),l.default.use(r.default),l.default.use(e.default),l.default.use(u.default),l.default.use(s.default),exports.default=l.default,l.default.default=l.default; +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/interactjs/index.prod.js.map b/packages/@interactjs/interactjs/index.prod.js.map new file mode 100644 index 000000000..3c9db6e34 --- /dev/null +++ b/packages/@interactjs/interactjs/index.prod.js.map @@ -0,0 +1,39 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "_pluginProd2", + "_pluginProd3", + "_interactablePreventDefaultProd", + "_pluginProd5", + "_indexProd", + "_pluginProd6", + "_pluginProd7", + "_pluginProd8", + "_pluginProd9", + "obj", + "__esModule", + "default", + "interact", + "use", + "interactablePreventDefault", + "offset", + "pointerEvents", + "inertia", + "modifiers", + "autoStart", + "actions", + "autoScroll", + "reflow", + "exports" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/actions/plugin'\nimport '@interactjs/auto-scroll/plugin'\nimport '@interactjs/auto-start/plugin'\nimport '@interactjs/core/interactablePreventDefault'\nimport '@interactjs/dev-tools/plugin'\nimport '@interactjs/inertia/plugin'\nimport '@interactjs/interact'\nimport '@interactjs/modifiers/plugin'\nimport '@interactjs/offset/plugin'\nimport '@interactjs/pointer-events/plugin'\nimport '@interactjs/reflow/plugin'\n\nimport actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n/* eslint-enable import/no-duplicates */\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n" + ], + "mappings": "8EACA,IAAAA,EAAAC,EAAAC,QAAA,8BACAC,EAAAF,EAAAC,QAAA,kCACAE,EAAAH,EAAAC,QAAA,iCACAG,EAAAJ,EAAAC,QAAA,+CAEAI,GADAL,EAAAC,QAAA,gCACAD,EAAAC,QAAA,+BACAK,EAAAN,EAAAC,QAAA,8BACAM,EAAAP,EAAAC,QAAA,gCACAO,EAAAR,EAAAC,QAAA,6BACAQ,EAAAT,EAAAC,QAAA,qCACAS,EAAAV,EAAAC,QAAA,6BAAkC,SAAAD,EAAAW,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAelCG,UAASC,IAAIC,WAEbF,UAASC,IAAIE,WAGbH,UAASC,IAAIG,WAGbJ,UAASC,IAAII,WAGbL,UAASC,IAAIK,WAGbN,UAASC,IAAIM,WAGbP,UAASC,IAAIO,WAGbR,UAASC,IAAIQ,WAGbT,UAASC,IAAIS,WAKZC,QAAAZ,QAEcC,UACbA,UAAiBD,QAAUC" +} \ No newline at end of file diff --git a/packages/@interactjs/interactjs/index.stub.d.ts b/packages/@interactjs/interactjs/index.stub.d.ts new file mode 100644 index 000000000..a0bd2f63a --- /dev/null +++ b/packages/@interactjs/interactjs/index.stub.d.ts @@ -0,0 +1,13 @@ +import '@interactjs/actions/plugin'; +import '@interactjs/auto-scroll/plugin'; +import '@interactjs/auto-start/plugin'; +import '@interactjs/core/interactablePreventDefault'; +import '@interactjs/dev-tools/plugin'; +import '@interactjs/inertia/plugin'; +import '@interactjs/interact'; +import '@interactjs/modifiers/plugin'; +import '@interactjs/offset/plugin'; +import '@interactjs/pointer-events/plugin'; +import '@interactjs/reflow/plugin'; +import interact from '@interactjs/interact'; +export default interact; diff --git a/packages/@interactjs/interactjs/package.json b/packages/@interactjs/interactjs/package.json index b59ded0df..45a6f9935 100644 --- a/packages/@interactjs/interactjs/package.json +++ b/packages/@interactjs/interactjs/package.json @@ -10,25 +10,17 @@ }, "dependencies": { "@interactjs/actions": "1.10.25", - "@interactjs/arrange": "1.10.25", "@interactjs/auto-scroll": "1.10.25", "@interactjs/auto-start": "1.10.25", - "@interactjs/clone": "1.10.25", "@interactjs/core": "1.10.25", "@interactjs/dev-tools": "1.10.25", - "@interactjs/feedback": "1.10.25", "@interactjs/inertia": "1.10.25", "@interactjs/interact": "1.10.25", "@interactjs/modifiers": "1.10.25", - "@interactjs/multi-target": "1.10.25", "@interactjs/offset": "1.10.25", "@interactjs/pointer-events": "1.10.25", - "@interactjs/react": "1.10.25", - "@interactjs/rebound": "1.10.25", - "@interactjs/symbol-tree": "1.10.25", "@interactjs/reflow": "1.10.25", - "@interactjs/utils": "1.10.25", - "@interactjs/vue": "1.10.25" + "@interactjs/utils": "1.10.25" }, "publishConfig": { "access": "public" diff --git a/packages/@interactjs/modifiers/.npmignore b/packages/@interactjs/modifiers/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/modifiers/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/modifiers/LICENSE b/packages/@interactjs/modifiers/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/modifiers/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/modifiers/Modification.d.ts b/packages/@interactjs/modifiers/Modification.d.ts new file mode 100644 index 000000000..3c0a4810a --- /dev/null +++ b/packages/@interactjs/modifiers/Modification.d.ts @@ -0,0 +1,87 @@ +import type { EventPhase } from '@interactjs/core/InteractEvent'; +import type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'; +import type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'; +import type { Modifier, ModifierArg, ModifierState } from './types'; +export interface ModificationResult { + delta: Point; + rectDelta: Rect; + coords: Point; + rect: FullRect; + eventProps: any[]; + changed: boolean; +} +interface MethodArg { + phase: EventPhase; + pageCoords: Point; + rect: FullRect; + coords: Point; + preEnd?: boolean; + skipModifiers?: number; +} +export declare class Modification { + states: ModifierState[]; + startOffset: Rect; + startDelta: Point; + result: ModificationResult; + endResult: Point; + startEdges: EdgeOptions; + edges: EdgeOptions; + readonly interaction: Readonly; + constructor(interaction: Interaction); + start({ phase }: { + phase: EventPhase; + }, pageCoords: Point): ModificationResult; + fillArg(arg: Partial): ModifierArg<{ + options: unknown; + methods?: { + start?: (arg: ModifierArg) => void; + set?: (arg: ModifierArg) => any; + beforeEnd?: (arg: ModifierArg) => void | Point; + stop?: (arg: ModifierArg) => void; + }; + index?: number; + name?: any; + }>; + startAll(arg: MethodArg & Partial): void; + setAll(arg: MethodArg & Partial): ModificationResult; + applyToInteraction(arg: { + phase: EventPhase; + rect?: Rect; + }): void; + setAndApply(arg: Partial & { + phase: EventPhase; + preEnd?: boolean; + skipModifiers?: number; + modifiedCoords?: Point; + }): void | false; + beforeEnd(arg: Omit & { + state?: ModifierState; + }): void | false; + stop(arg: { + interaction: Interaction; + }): void; + prepareStates(modifierList: Modifier[]): { + options: unknown; + methods?: { + start?: (arg: ModifierArg) => void; + set?: (arg: ModifierArg) => any; + beforeEnd?: (arg: ModifierArg) => void | Point; + stop?: (arg: ModifierArg) => void; + }; + index?: number; + name?: any; + }[]; + restoreInteractionCoords({ interaction: { coords, rect, modification } }: { + interaction: Interaction; + }): void; + shouldDo(options: any, preEnd?: boolean, phase?: string, requireEndOnly?: boolean): boolean; + copyFrom(other: Modification): void; + destroy(): void; +} +export declare function getRectOffset(rect: any, coords: any): { + left: number; + top: number; + right: number; + bottom: number; +}; +export {}; diff --git a/packages/@interactjs/modifiers/Modification.js b/packages/@interactjs/modifiers/Modification.js new file mode 100644 index 000000000..633815a22 --- /dev/null +++ b/packages/@interactjs/modifiers/Modification.js @@ -0,0 +1,370 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.Modification = void 0; +exports.getRectOffset = getRectOffset; +var _clone = _interopRequireDefault(require("../utils/clone.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var rectUtils = _interopRequireWildcard(require("../utils/rect.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +class Modification { + states = []; + startOffset = { + left: 0, + right: 0, + top: 0, + bottom: 0 + }; + startDelta; + result; + endResult; + startEdges; + edges; + interaction; + constructor(interaction) { + this.interaction = interaction; + this.result = createResult(); + this.edges = { + left: false, + right: false, + top: false, + bottom: false + }; + } + start({ + phase + }, pageCoords) { + const { + interaction + } = this; + const modifierList = getModifierList(interaction); + this.prepareStates(modifierList); + this.startEdges = (0, _extend.default)({}, interaction.edges); + this.edges = (0, _extend.default)({}, this.startEdges); + this.startOffset = getRectOffset(interaction.rect, pageCoords); + this.startDelta = { + x: 0, + y: 0 + }; + const arg = this.fillArg({ + phase, + pageCoords, + preEnd: false + }); + this.result = createResult(); + this.startAll(arg); + const result = this.result = this.setAll(arg); + return result; + } + fillArg(arg) { + const { + interaction + } = this; + arg.interaction = interaction; + arg.interactable = interaction.interactable; + arg.element = interaction.element; + arg.rect || (arg.rect = interaction.rect); + arg.edges || (arg.edges = this.startEdges); + arg.startOffset = this.startOffset; + return arg; + } + startAll(arg) { + for (const state of this.states) { + if (state.methods.start) { + arg.state = state; + state.methods.start(arg); + } + } + } + setAll(arg) { + const { + phase, + preEnd, + skipModifiers, + rect: unmodifiedRect, + edges: unmodifiedEdges + } = arg; + arg.coords = (0, _extend.default)({}, arg.pageCoords); + arg.rect = (0, _extend.default)({}, unmodifiedRect); + arg.edges = (0, _extend.default)({}, unmodifiedEdges); + const states = skipModifiers ? this.states.slice(skipModifiers) : this.states; + const newResult = createResult(arg.coords, arg.rect); + for (const state of states) { + var _state$methods; + const { + options + } = state; + const lastModifierCoords = (0, _extend.default)({}, arg.coords); + let returnValue = null; + if ((_state$methods = state.methods) != null && _state$methods.set && this.shouldDo(options, preEnd, phase)) { + arg.state = state; + returnValue = state.methods.set(arg); + rectUtils.addEdges(arg.edges, arg.rect, { + x: arg.coords.x - lastModifierCoords.x, + y: arg.coords.y - lastModifierCoords.y + }); + } + newResult.eventProps.push(returnValue); + } + (0, _extend.default)(this.edges, arg.edges); + newResult.delta.x = arg.coords.x - arg.pageCoords.x; + newResult.delta.y = arg.coords.y - arg.pageCoords.y; + newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left; + newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right; + newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top; + newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom; + const prevCoords = this.result.coords; + const prevRect = this.result.rect; + if (prevCoords && prevRect) { + const rectChanged = newResult.rect.left !== prevRect.left || newResult.rect.right !== prevRect.right || newResult.rect.top !== prevRect.top || newResult.rect.bottom !== prevRect.bottom; + newResult.changed = rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y; + } + return newResult; + } + applyToInteraction(arg) { + const { + interaction + } = this; + const { + phase + } = arg; + const curCoords = interaction.coords.cur; + const startCoords = interaction.coords.start; + const { + result, + startDelta + } = this; + const curDelta = result.delta; + if (phase === 'start') { + (0, _extend.default)(this.startDelta, result.delta); + } + for (const [coordsSet, delta] of [[startCoords, startDelta], [curCoords, curDelta]]) { + coordsSet.page.x += delta.x; + coordsSet.page.y += delta.y; + coordsSet.client.x += delta.x; + coordsSet.client.y += delta.y; + } + const { + rectDelta + } = this.result; + const rect = arg.rect || interaction.rect; + rect.left += rectDelta.left; + rect.right += rectDelta.right; + rect.top += rectDelta.top; + rect.bottom += rectDelta.bottom; + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + setAndApply(arg) { + const { + interaction + } = this; + const { + phase, + preEnd, + skipModifiers + } = arg; + const result = this.setAll(this.fillArg({ + preEnd, + phase, + pageCoords: arg.modifiedCoords || interaction.coords.cur.page + })); + this.result = result; + + // don't fire an action move if a modifier would keep the event in the same + // cordinates as before + if (!result.changed && (!skipModifiers || skipModifiers < this.states.length) && interaction.interacting()) { + return false; + } + if (arg.modifiedCoords) { + const { + page + } = interaction.coords.cur; + const adjustment = { + x: arg.modifiedCoords.x - page.x, + y: arg.modifiedCoords.y - page.y + }; + result.coords.x += adjustment.x; + result.coords.y += adjustment.y; + result.delta.x += adjustment.x; + result.delta.y += adjustment.y; + } + this.applyToInteraction(arg); + } + beforeEnd(arg) { + const { + interaction, + event + } = arg; + const states = this.states; + if (!states || !states.length) { + return; + } + let doPreend = false; + for (const state of states) { + arg.state = state; + const { + options, + methods + } = state; + const endPosition = methods.beforeEnd && methods.beforeEnd(arg); + if (endPosition) { + this.endResult = endPosition; + return false; + } + doPreend = doPreend || !doPreend && this.shouldDo(options, true, arg.phase, true); + } + if (doPreend) { + // trigger a final modified move before ending + interaction.move({ + event, + preEnd: true + }); + } + } + stop(arg) { + const { + interaction + } = arg; + if (!this.states || !this.states.length) { + return; + } + const modifierArg = (0, _extend.default)({ + states: this.states, + interactable: interaction.interactable, + element: interaction.element, + rect: null + }, arg); + this.fillArg(modifierArg); + for (const state of this.states) { + modifierArg.state = state; + if (state.methods.stop) { + state.methods.stop(modifierArg); + } + } + this.states = null; + this.endResult = null; + } + prepareStates(modifierList) { + this.states = []; + for (let index = 0; index < modifierList.length; index++) { + const { + options, + methods, + name + } = modifierList[index]; + this.states.push({ + options, + methods, + index, + name + }); + } + return this.states; + } + restoreInteractionCoords({ + interaction: { + coords, + rect, + modification + } + }) { + if (!modification.result) return; + const { + startDelta + } = modification; + const { + delta: curDelta, + rectDelta + } = modification.result; + const coordsAndDeltas = [[coords.start, startDelta], [coords.cur, curDelta]]; + for (const [coordsSet, delta] of coordsAndDeltas) { + coordsSet.page.x -= delta.x; + coordsSet.page.y -= delta.y; + coordsSet.client.x -= delta.x; + coordsSet.client.y -= delta.y; + } + rect.left -= rectDelta.left; + rect.right -= rectDelta.right; + rect.top -= rectDelta.top; + rect.bottom -= rectDelta.bottom; + } + shouldDo(options, preEnd, phase, requireEndOnly) { + if ( + // ignore disabled modifiers + !options || options.enabled === false || + // check if we require endOnly option to fire move before end + requireEndOnly && !options.endOnly || + // don't apply endOnly modifiers when not ending + options.endOnly && !preEnd || + // check if modifier should run be applied on start + phase === 'start' && !options.setStart) { + return false; + } + return true; + } + copyFrom(other) { + this.startOffset = other.startOffset; + this.startDelta = other.startDelta; + this.startEdges = other.startEdges; + this.edges = other.edges; + this.states = other.states.map(s => (0, _clone.default)(s)); + this.result = createResult((0, _extend.default)({}, other.result.coords), (0, _extend.default)({}, other.result.rect)); + } + destroy() { + for (const prop in this) { + this[prop] = null; + } + } +} +exports.Modification = Modification; +function createResult(coords, rect) { + return { + rect, + coords, + delta: { + x: 0, + y: 0 + }, + rectDelta: { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + eventProps: [], + changed: true + }; +} +function getModifierList(interaction) { + const actionOptions = interaction.interactable.options[interaction.prepared.name]; + const actionModifiers = actionOptions.modifiers; + if (actionModifiers && actionModifiers.length) { + return actionModifiers; + } + return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize'].map(type => { + const options = actionOptions[type]; + return options && options.enabled && { + options, + methods: options._methods + }; + }).filter(m => !!m); +} +function getRectOffset(rect, coords) { + return rect ? { + left: coords.x - rect.left, + top: coords.y - rect.top, + right: rect.right - coords.x, + bottom: rect.bottom - coords.y + } : { + left: 0, + top: 0, + right: 0, + bottom: 0 + }; +} +//# sourceMappingURL=Modification.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/Modification.js.map b/packages/@interactjs/modifiers/Modification.js.map new file mode 100644 index 000000000..0acca87c3 --- /dev/null +++ b/packages/@interactjs/modifiers/Modification.js.map @@ -0,0 +1,142 @@ +{ + "version": 3, + "names": [ + "_clone", + "_interopRequireDefault", + "require", + "_extend", + "rectUtils", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "Modification", + "states", + "startOffset", + "left", + "right", + "top", + "bottom", + "startDelta", + "result", + "endResult", + "startEdges", + "edges", + "interaction", + "constructor", + "createResult", + "start", + "phase", + "pageCoords", + "modifierList", + "getModifierList", + "prepareStates", + "extend", + "getRectOffset", + "rect", + "x", + "y", + "arg", + "fillArg", + "preEnd", + "startAll", + "setAll", + "interactable", + "element", + "state", + "methods", + "skipModifiers", + "unmodifiedRect", + "unmodifiedEdges", + "coords", + "slice", + "newResult", + "_state$methods", + "options", + "lastModifierCoords", + "returnValue", + "shouldDo", + "addEdges", + "eventProps", + "push", + "delta", + "rectDelta", + "prevCoords", + "prevRect", + "rectChanged", + "changed", + "applyToInteraction", + "curCoords", + "cur", + "startCoords", + "curDelta", + "coordsSet", + "page", + "client", + "width", + "height", + "setAndApply", + "modifiedCoords", + "length", + "interacting", + "adjustment", + "beforeEnd", + "event", + "doPreend", + "endPosition", + "move", + "stop", + "modifierArg", + "index", + "name", + "restoreInteractionCoords", + "modification", + "coordsAndDeltas", + "requireEndOnly", + "enabled", + "endOnly", + "setStart", + "copyFrom", + "other", + "map", + "s", + "clone", + "destroy", + "prop", + "exports", + "actionOptions", + "prepared", + "actionModifiers", + "modifiers", + "type", + "_methods", + "filter", + "m" + ], + "sources": [ + "Modification.ts" + ], + "sourcesContent": [ + "import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n delta: Point\n rectDelta: Rect\n coords: Point\n rect: FullRect\n eventProps: any[]\n changed: boolean\n}\n\ninterface MethodArg {\n phase: EventPhase\n pageCoords: Point\n rect: FullRect\n coords: Point\n preEnd?: boolean\n skipModifiers?: number\n}\n\nexport class Modification {\n states: ModifierState[] = []\n startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n startDelta!: Point\n result!: ModificationResult\n endResult!: Point\n startEdges!: EdgeOptions\n edges: EdgeOptions\n readonly interaction: Readonly\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n this.result = createResult()\n this.edges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n }\n\n start({ phase }: { phase: EventPhase }, pageCoords: Point) {\n const { interaction } = this\n const modifierList = getModifierList(interaction)\n this.prepareStates(modifierList)\n\n this.startEdges = extend({}, interaction.edges)\n this.edges = extend({}, this.startEdges)\n this.startOffset = getRectOffset(interaction.rect, pageCoords)\n this.startDelta = { x: 0, y: 0 }\n\n const arg = this.fillArg({\n phase,\n pageCoords,\n preEnd: false,\n })\n\n this.result = createResult()\n this.startAll(arg)\n\n const result = (this.result = this.setAll(arg))\n\n return result\n }\n\n fillArg(arg: Partial) {\n const { interaction } = this\n\n arg.interaction = interaction\n arg.interactable = interaction.interactable\n arg.element = interaction.element\n arg.rect ||= interaction.rect\n arg.edges ||= this.startEdges\n arg.startOffset = this.startOffset\n\n return arg as ModifierArg\n }\n\n startAll(arg: MethodArg & Partial) {\n for (const state of this.states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg as ModifierArg)\n }\n }\n }\n\n setAll(arg: MethodArg & Partial): ModificationResult {\n const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, unmodifiedRect)\n arg.edges = extend({}, unmodifiedEdges)\n\n const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n const newResult = createResult(arg.coords, arg.rect)\n\n for (const state of states) {\n const { options } = state\n const lastModifierCoords = extend({}, arg.coords)\n let returnValue = null\n\n if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n arg.state = state\n returnValue = state.methods.set(arg as ModifierArg)\n\n rectUtils.addEdges(arg.edges, arg.rect, {\n x: arg.coords.x - lastModifierCoords.x,\n y: arg.coords.y - lastModifierCoords.y,\n })\n }\n\n newResult.eventProps.push(returnValue)\n }\n\n extend(this.edges, arg.edges)\n\n newResult.delta.x = arg.coords.x - arg.pageCoords.x\n newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n const prevCoords = this.result.coords\n const prevRect = this.result.rect\n\n if (prevCoords && prevRect) {\n const rectChanged =\n newResult.rect.left !== prevRect.left ||\n newResult.rect.right !== prevRect.right ||\n newResult.rect.top !== prevRect.top ||\n newResult.rect.bottom !== prevRect.bottom\n\n newResult.changed =\n rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n }\n\n return newResult\n }\n\n applyToInteraction(arg: { phase: EventPhase; rect?: Rect }) {\n const { interaction } = this\n const { phase } = arg\n const curCoords = interaction.coords.cur\n const startCoords = interaction.coords.start\n const { result, startDelta } = this\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(this.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [\n [startCoords, startDelta],\n [curCoords, curDelta],\n ] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = this.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n setAndApply(\n arg: Partial & {\n phase: EventPhase\n preEnd?: boolean\n skipModifiers?: number\n modifiedCoords?: Point\n },\n ): void | false {\n const { interaction } = this\n const { phase, preEnd, skipModifiers } = arg\n\n const result = this.setAll(\n this.fillArg({\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n }),\n )\n\n this.result = result\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (\n !result.changed &&\n (!skipModifiers || skipModifiers < this.states.length) &&\n interaction.interacting()\n ) {\n return false\n }\n\n if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n result.coords.x += adjustment.x\n result.coords.y += adjustment.y\n result.delta.x += adjustment.x\n result.delta.y += adjustment.y\n }\n\n this.applyToInteraction(arg)\n }\n\n beforeEnd(arg: Omit & { state?: ModifierState }): void | false {\n const { interaction, event } = arg\n const states = this.states\n\n if (!states || !states.length) {\n return\n }\n\n let doPreend = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endPosition) {\n this.endResult = endPosition\n return false\n }\n\n doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n }\n\n if (doPreend) {\n // trigger a final modified move before ending\n interaction.move({ event, preEnd: true })\n }\n }\n\n stop(arg: { interaction: Interaction }) {\n const { interaction } = arg\n\n if (!this.states || !this.states.length) {\n return\n }\n\n const modifierArg: Partial = extend(\n {\n states: this.states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n },\n arg,\n )\n\n this.fillArg(modifierArg)\n\n for (const state of this.states) {\n modifierArg.state = state\n\n if (state.methods.stop) {\n state.methods.stop(modifierArg as ModifierArg)\n }\n }\n\n this.states = null\n this.endResult = null\n }\n\n prepareStates(modifierList: Modifier[]) {\n this.states = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n this.states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return this.states\n }\n\n restoreInteractionCoords({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n if (!modification.result) return\n\n const { startDelta } = modification\n const { delta: curDelta, rectDelta } = modification.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n }\n\n shouldDo(options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n if (\n // ignore disabled modifiers\n !options ||\n options.enabled === false ||\n // check if we require endOnly option to fire move before end\n (requireEndOnly && !options.endOnly) ||\n // don't apply endOnly modifiers when not ending\n (options.endOnly && !preEnd) ||\n // check if modifier should run be applied on start\n (phase === 'start' && !options.setStart)\n ) {\n return false\n }\n\n return true\n }\n\n copyFrom(other: Modification) {\n this.startOffset = other.startOffset\n this.startDelta = other.startDelta\n this.startEdges = other.startEdges\n this.edges = other.edges\n this.states = other.states.map((s) => clone(s) as ModifierState)\n this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n }\n\n destroy() {\n for (const prop in this) {\n this[prop] = null\n }\n }\n}\n\nfunction createResult(coords?: Point, rect?: FullRect): ModificationResult {\n return {\n rect,\n coords,\n delta: { x: 0, y: 0 },\n rectDelta: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n eventProps: [],\n changed: true,\n }\n}\n\nfunction getModifierList(interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map((type) => {\n const options = actionOptions[type]\n\n return (\n options &&\n options.enabled && {\n options,\n methods: options._methods,\n }\n )\n })\n .filter((m) => !!m)\n}\n\nexport function getRectOffset(rect, coords) {\n return rect\n ? {\n left: coords.x - rect.left,\n top: coords.y - rect.top,\n right: rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/Modification.prod.js b/packages/@interactjs/modifiers/Modification.prod.js new file mode 100644 index 000000000..99f721c78 --- /dev/null +++ b/packages/@interactjs/modifiers/Modification.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.Modification=void 0,exports.getRectOffset=a;var t=o(require("../utils/clone.prod.js")),e=o(require("../utils/extend.prod.js")),s=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var s=r(e);if(s&&s.has(t))return s.get(t);var o={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if("default"!==a&&Object.prototype.hasOwnProperty.call(t,a)){var n=i?Object.getOwnPropertyDescriptor(t,a):null;n&&(n.get||n.set)?Object.defineProperty(o,a,n):o[a]=t[a]}return o.default=t,s&&s.set(t,o),o})(require("../utils/rect.prod.js"));function r(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,s=new WeakMap;return(r=t=>t?s:e)(t)}function o(t){return t&&t.__esModule?t:{default:t}}function i(t,e){return{rect:e,coords:t,delta:{x:0,y:0},rectDelta:{left:0,right:0,top:0,bottom:0},eventProps:[],changed:!0}}function a(t,e){return t?{left:e.x-t.left,top:e.y-t.top,right:t.right-e.x,bottom:t.bottom-e.y}:{left:0,top:0,right:0,bottom:0}}exports.Modification=class{states=[];startOffset={left:0,right:0,top:0,bottom:0};startDelta;result;endResult;startEdges;edges;interaction;constructor(t){this.interaction=t,this.result=i(),this.edges={left:!1,right:!1,top:!1,bottom:!1}}start({phase:t},s){const{interaction:r}=this,o=(t=>{const e=t.interactable.options[t.prepared.name],s=e.modifiers;return s&&s.length?s:["snap","snapSize","snapEdges","restrict","restrictEdges","restrictSize"].map((t=>{const s=e[t];return s&&s.enabled&&{options:s,methods:s._methods}})).filter((t=>!!t))})(r);this.prepareStates(o),this.startEdges=(0,e.default)({},r.edges),this.edges=(0,e.default)({},this.startEdges),this.startOffset=a(r.rect,s),this.startDelta={x:0,y:0};const n=this.fillArg({phase:t,pageCoords:s,preEnd:!1});return this.result=i(),this.startAll(n),this.result=this.setAll(n)}fillArg(t){const{interaction:e}=this;return t.interaction=e,t.interactable=e.interactable,t.element=e.element,t.rect||(t.rect=e.rect),t.edges||(t.edges=this.startEdges),t.startOffset=this.startOffset,t}startAll(t){for(const e of this.states)e.methods.start&&(t.state=e,e.methods.start(t))}setAll(t){const{phase:r,preEnd:o,skipModifiers:a,rect:n,edges:l}=t;t.coords=(0,e.default)({},t.pageCoords),t.rect=(0,e.default)({},n),t.edges=(0,e.default)({},l);const d=a?this.states.slice(a):this.states,c=i(t.coords,t.rect);for(const i of d){var h;const{options:a}=i,n=(0,e.default)({},t.coords);let l=null;null!=(h=i.methods)&&h.set&&this.shouldDo(a,o,r)&&(t.state=i,l=i.methods.set(t),s.addEdges(t.edges,t.rect,{x:t.coords.x-n.x,y:t.coords.y-n.y})),c.eventProps.push(l)}(0,e.default)(this.edges,t.edges),c.delta.x=t.coords.x-t.pageCoords.x,c.delta.y=t.coords.y-t.pageCoords.y,c.rectDelta.left=t.rect.left-n.left,c.rectDelta.right=t.rect.right-n.right,c.rectDelta.top=t.rect.top-n.top,c.rectDelta.bottom=t.rect.bottom-n.bottom;const f=this.result.coords,p=this.result.rect;if(f&&p){const t=c.rect.left!==p.left||c.rect.right!==p.right||c.rect.top!==p.top||c.rect.bottom!==p.bottom;c.changed=t||f.x!==c.coords.x||f.y!==c.coords.y}return c}applyToInteraction(t){const{interaction:s}=this,{phase:r}=t,o=s.coords.cur,i=s.coords.start,{result:a,startDelta:n}=this,l=a.delta;"start"===r&&(0,e.default)(this.startDelta,a.delta);for(const[t,e]of[[i,n],[o,l]])t.page.x+=e.x,t.page.y+=e.y,t.client.x+=e.x,t.client.y+=e.y;const{rectDelta:d}=this.result,c=t.rect||s.rect;c.left+=d.left,c.right+=d.right,c.top+=d.top,c.bottom+=d.bottom,c.width=c.right-c.left,c.height=c.bottom-c.top}setAndApply(t){const{interaction:e}=this,{phase:s,preEnd:r,skipModifiers:o}=t,i=this.setAll(this.fillArg({preEnd:r,phase:s,pageCoords:t.modifiedCoords||e.coords.cur.page}));if(this.result=i,!i.changed&&(!o||o(0,t.default)(e))),this.result=i((0,e.default)({},s.result.coords),(0,e.default)({},s.result.rect))}destroy(){for(const t in this)this[t]=null}}; +//# sourceMappingURL=Modification.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/Modification.prod.js.map b/packages/@interactjs/modifiers/Modification.prod.js.map new file mode 100644 index 000000000..0d52cbb09 --- /dev/null +++ b/packages/@interactjs/modifiers/Modification.prod.js.map @@ -0,0 +1,143 @@ +{ + "version": 3, + "names": [ + "_cloneProd", + "_interopRequireDefault", + "require", + "_extendProd", + "rectUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "obj", + "createResult", + "coords", + "rect", + "delta", + "x", + "y", + "rectDelta", + "left", + "right", + "top", + "bottom", + "eventProps", + "changed", + "getRectOffset", + "exports", + "Modification", + "states", + "startOffset", + "startDelta", + "result", + "endResult", + "startEdges", + "edges", + "interaction", + "constructor", + "this", + "start", + "phase", + "pageCoords", + "modifierList", + "actionOptions", + "interactable", + "options", + "prepared", + "name", + "actionModifiers", + "modifiers", + "length", + "map", + "type", + "enabled", + "methods", + "_methods", + "filter", + "m", + "getModifierList", + "prepareStates", + "extend", + "arg", + "fillArg", + "preEnd", + "startAll", + "setAll", + "element", + "state", + "skipModifiers", + "unmodifiedRect", + "unmodifiedEdges", + "slice", + "newResult", + "_state$methods", + "lastModifierCoords", + "returnValue", + "shouldDo", + "addEdges", + "push", + "prevCoords", + "prevRect", + "rectChanged", + "applyToInteraction", + "curCoords", + "cur", + "startCoords", + "curDelta", + "coordsSet", + "page", + "client", + "width", + "height", + "setAndApply", + "modifiedCoords", + "interacting", + "adjustment", + "beforeEnd", + "event", + "doPreend", + "endPosition", + "move", + "stop", + "modifierArg", + "index", + "restoreInteractionCoords", + "modification", + "coordsAndDeltas", + "requireEndOnly", + "endOnly", + "setStart", + "copyFrom", + "other", + "s", + "clone", + "destroy", + "prop" + ], + "sources": [ + "Modification.ts" + ], + "sourcesContent": [ + "import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n delta: Point\n rectDelta: Rect\n coords: Point\n rect: FullRect\n eventProps: any[]\n changed: boolean\n}\n\ninterface MethodArg {\n phase: EventPhase\n pageCoords: Point\n rect: FullRect\n coords: Point\n preEnd?: boolean\n skipModifiers?: number\n}\n\nexport class Modification {\n states: ModifierState[] = []\n startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n startDelta!: Point\n result!: ModificationResult\n endResult!: Point\n startEdges!: EdgeOptions\n edges: EdgeOptions\n readonly interaction: Readonly\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n this.result = createResult()\n this.edges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n }\n\n start({ phase }: { phase: EventPhase }, pageCoords: Point) {\n const { interaction } = this\n const modifierList = getModifierList(interaction)\n this.prepareStates(modifierList)\n\n this.startEdges = extend({}, interaction.edges)\n this.edges = extend({}, this.startEdges)\n this.startOffset = getRectOffset(interaction.rect, pageCoords)\n this.startDelta = { x: 0, y: 0 }\n\n const arg = this.fillArg({\n phase,\n pageCoords,\n preEnd: false,\n })\n\n this.result = createResult()\n this.startAll(arg)\n\n const result = (this.result = this.setAll(arg))\n\n return result\n }\n\n fillArg(arg: Partial) {\n const { interaction } = this\n\n arg.interaction = interaction\n arg.interactable = interaction.interactable\n arg.element = interaction.element\n arg.rect ||= interaction.rect\n arg.edges ||= this.startEdges\n arg.startOffset = this.startOffset\n\n return arg as ModifierArg\n }\n\n startAll(arg: MethodArg & Partial) {\n for (const state of this.states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg as ModifierArg)\n }\n }\n }\n\n setAll(arg: MethodArg & Partial): ModificationResult {\n const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, unmodifiedRect)\n arg.edges = extend({}, unmodifiedEdges)\n\n const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n const newResult = createResult(arg.coords, arg.rect)\n\n for (const state of states) {\n const { options } = state\n const lastModifierCoords = extend({}, arg.coords)\n let returnValue = null\n\n if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n arg.state = state\n returnValue = state.methods.set(arg as ModifierArg)\n\n rectUtils.addEdges(arg.edges, arg.rect, {\n x: arg.coords.x - lastModifierCoords.x,\n y: arg.coords.y - lastModifierCoords.y,\n })\n }\n\n newResult.eventProps.push(returnValue)\n }\n\n extend(this.edges, arg.edges)\n\n newResult.delta.x = arg.coords.x - arg.pageCoords.x\n newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n const prevCoords = this.result.coords\n const prevRect = this.result.rect\n\n if (prevCoords && prevRect) {\n const rectChanged =\n newResult.rect.left !== prevRect.left ||\n newResult.rect.right !== prevRect.right ||\n newResult.rect.top !== prevRect.top ||\n newResult.rect.bottom !== prevRect.bottom\n\n newResult.changed =\n rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n }\n\n return newResult\n }\n\n applyToInteraction(arg: { phase: EventPhase; rect?: Rect }) {\n const { interaction } = this\n const { phase } = arg\n const curCoords = interaction.coords.cur\n const startCoords = interaction.coords.start\n const { result, startDelta } = this\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(this.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [\n [startCoords, startDelta],\n [curCoords, curDelta],\n ] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = this.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n setAndApply(\n arg: Partial & {\n phase: EventPhase\n preEnd?: boolean\n skipModifiers?: number\n modifiedCoords?: Point\n },\n ): void | false {\n const { interaction } = this\n const { phase, preEnd, skipModifiers } = arg\n\n const result = this.setAll(\n this.fillArg({\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n }),\n )\n\n this.result = result\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (\n !result.changed &&\n (!skipModifiers || skipModifiers < this.states.length) &&\n interaction.interacting()\n ) {\n return false\n }\n\n if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n result.coords.x += adjustment.x\n result.coords.y += adjustment.y\n result.delta.x += adjustment.x\n result.delta.y += adjustment.y\n }\n\n this.applyToInteraction(arg)\n }\n\n beforeEnd(arg: Omit & { state?: ModifierState }): void | false {\n const { interaction, event } = arg\n const states = this.states\n\n if (!states || !states.length) {\n return\n }\n\n let doPreend = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endPosition) {\n this.endResult = endPosition\n return false\n }\n\n doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n }\n\n if (doPreend) {\n // trigger a final modified move before ending\n interaction.move({ event, preEnd: true })\n }\n }\n\n stop(arg: { interaction: Interaction }) {\n const { interaction } = arg\n\n if (!this.states || !this.states.length) {\n return\n }\n\n const modifierArg: Partial = extend(\n {\n states: this.states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n },\n arg,\n )\n\n this.fillArg(modifierArg)\n\n for (const state of this.states) {\n modifierArg.state = state\n\n if (state.methods.stop) {\n state.methods.stop(modifierArg as ModifierArg)\n }\n }\n\n this.states = null\n this.endResult = null\n }\n\n prepareStates(modifierList: Modifier[]) {\n this.states = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n this.states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return this.states\n }\n\n restoreInteractionCoords({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n if (!modification.result) return\n\n const { startDelta } = modification\n const { delta: curDelta, rectDelta } = modification.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n }\n\n shouldDo(options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n if (\n // ignore disabled modifiers\n !options ||\n options.enabled === false ||\n // check if we require endOnly option to fire move before end\n (requireEndOnly && !options.endOnly) ||\n // don't apply endOnly modifiers when not ending\n (options.endOnly && !preEnd) ||\n // check if modifier should run be applied on start\n (phase === 'start' && !options.setStart)\n ) {\n return false\n }\n\n return true\n }\n\n copyFrom(other: Modification) {\n this.startOffset = other.startOffset\n this.startDelta = other.startDelta\n this.startEdges = other.startEdges\n this.edges = other.edges\n this.states = other.states.map((s) => clone(s) as ModifierState)\n this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n }\n\n destroy() {\n for (const prop in this) {\n this[prop] = null\n }\n }\n}\n\nfunction createResult(coords?: Point, rect?: FullRect): ModificationResult {\n return {\n rect,\n coords,\n delta: { x: 0, y: 0 },\n rectDelta: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n eventProps: [],\n changed: true,\n }\n}\n\nfunction getModifierList(interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map((type) => {\n const options = actionOptions[type]\n\n return (\n options &&\n options.enabled && {\n options,\n methods: options._methods,\n }\n )\n })\n .filter((m) => !!m)\n}\n\nexport function getRectOffset(rect, coords) {\n return rect\n ? {\n left: coords.x - rect.left,\n top: coords.y - rect.top,\n right: rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/all.d.ts b/packages/@interactjs/modifiers/all.d.ts new file mode 100644 index 000000000..3cfd35c91 --- /dev/null +++ b/packages/@interactjs/modifiers/all.d.ts @@ -0,0 +1,162 @@ +declare const _default: { + aspectRatio: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./aspectRatio").AspectRatioOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => unknown; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + restrictEdges: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./restrict/edges").RestrictEdgesOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => void; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + restrict: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./restrict/pointer").RestrictOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => unknown; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + restrictRect: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./restrict/pointer").RestrictOptions & { + elementRect: { + top: number; + left: number; + bottom: number; + right: number; + }; + }; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => unknown; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + restrictSize: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./restrict/size").RestrictSizeOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => void; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + snapEdges: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./snap/edges").SnapEdgesOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + snap: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./snap/pointer").SnapOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + snapSize: { + (_options?: Partial): import("./types").Modifier; + _defaults: import("./snap/size").SnapSizeOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; + }; + spring: import("./types").ModifierFunction; + avoid: import("./types").ModifierFunction; + transform: import("./types").ModifierFunction; + rubberband: import("./types").ModifierFunction; +}; +export default _default; diff --git a/packages/@interactjs/modifiers/all.js b/packages/@interactjs/modifiers/all.js new file mode 100644 index 000000000..790fbb369 --- /dev/null +++ b/packages/@interactjs/modifiers/all.js @@ -0,0 +1,35 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _aspectRatio = _interopRequireDefault(require("./aspectRatio")); +var _avoid = _interopRequireDefault(require("./avoid/avoid")); +var _edges = _interopRequireDefault(require("./restrict/edges")); +var _pointer = _interopRequireDefault(require("./restrict/pointer")); +var _rect = _interopRequireDefault(require("./restrict/rect")); +var _size = _interopRequireDefault(require("./restrict/size")); +var _rubberband = _interopRequireDefault(require("./rubberband/rubberband")); +var _edges2 = _interopRequireDefault(require("./snap/edges")); +var _pointer2 = _interopRequireDefault(require("./snap/pointer")); +var _size2 = _interopRequireDefault(require("./snap/size")); +var _spring = _interopRequireDefault(require("./spring/spring")); +var _transform = _interopRequireDefault(require("./transform/transform")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable n/no-extraneous-import, import/no-unresolved */ +var _default = exports.default = { + aspectRatio: _aspectRatio.default, + restrictEdges: _edges.default, + restrict: _pointer.default, + restrictRect: _rect.default, + restrictSize: _size.default, + snapEdges: _edges2.default, + snap: _pointer2.default, + snapSize: _size2.default, + spring: _spring.default, + avoid: _avoid.default, + transform: _transform.default, + rubberband: _rubberband.default +}; +//# sourceMappingURL=all.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/all.js.map b/packages/@interactjs/modifiers/all.js.map new file mode 100644 index 000000000..8a7a0de4b --- /dev/null +++ b/packages/@interactjs/modifiers/all.js.map @@ -0,0 +1,43 @@ +{ + "version": 3, + "names": [ + "_aspectRatio", + "_interopRequireDefault", + "require", + "_avoid", + "_edges", + "_pointer", + "_rect", + "_size", + "_rubberband", + "_edges2", + "_pointer2", + "_size2", + "_spring", + "_transform", + "obj", + "__esModule", + "default", + "_default", + "exports", + "aspectRatio", + "restrictEdges", + "restrict", + "restrictRect", + "restrictSize", + "snapEdges", + "snap", + "snapSize", + "spring", + "avoid", + "transform", + "rubberband" + ], + "sources": [ + "all.ts" + ], + "sourcesContent": [ + "/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n aspectRatio,\n restrictEdges,\n restrict,\n restrictRect,\n restrictSize,\n snapEdges,\n snap,\n snapSize,\n\n spring,\n avoid,\n transform,\n rubberband,\n}\n" + ], + "mappings": ";;;;;;AACA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,KAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,KAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,WAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,OAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,SAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,MAAA,GAAAV,sBAAA,CAAAC,OAAA;AACA,IAAAU,OAAA,GAAAX,sBAAA,CAAAC,OAAA;AACA,IAAAW,UAAA,GAAAZ,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAa,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAZ7C;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAce;EACbG,WAAW,EAAXA,oBAAW;EACXC,aAAa,EAAbA,cAAa;EACbC,QAAQ,EAARA,gBAAQ;EACRC,YAAY,EAAZA,aAAY;EACZC,YAAY,EAAZA,aAAY;EACZC,SAAS,EAATA,eAAS;EACTC,IAAI,EAAJA,iBAAI;EACJC,QAAQ,EAARA,cAAQ;EAERC,MAAM,EAANA,eAAM;EACNC,KAAK,EAALA,cAAK;EACLC,SAAS,EAATA,kBAAS;EACTC,UAAU,EAAVA;AACF,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/all.prod.js b/packages/@interactjs/modifiers/all.prod.js new file mode 100644 index 000000000..2e1ff1682 --- /dev/null +++ b/packages/@interactjs/modifiers/all.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=p(require("./aspectRatio")),r=p(require("./avoid/avoid")),t=p(require("./restrict/edges")),i=p(require("./restrict/pointer")),a=p(require("./restrict/rect")),u=p(require("./restrict/size")),s=p(require("./rubberband/rubberband")),d=p(require("./snap/edges")),n=p(require("./snap/pointer")),f=p(require("./snap/size")),l=p(require("./spring/spring")),o=p(require("./transform/transform"));function p(e){return e&&e.__esModule?e:{default:e}}exports.default={aspectRatio:e.default,restrictEdges:t.default,restrict:i.default,restrictRect:a.default,restrictSize:u.default,snapEdges:d.default,snap:n.default,snapSize:f.default,spring:l.default,avoid:r.default,transform:o.default,rubberband:s.default}; +//# sourceMappingURL=all.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/all.prod.js.map b/packages/@interactjs/modifiers/all.prod.js.map new file mode 100644 index 000000000..218ec8551 --- /dev/null +++ b/packages/@interactjs/modifiers/all.prod.js.map @@ -0,0 +1,42 @@ +{ + "version": 3, + "names": [ + "_aspectRatio", + "_interopRequireDefault", + "require", + "_avoid", + "_edges", + "_pointer", + "_rect", + "_size", + "_rubberband", + "_edges2", + "_pointer2", + "_size2", + "_spring", + "_transform", + "obj", + "__esModule", + "default", + "exports", + "aspectRatio", + "restrictEdges", + "restrict", + "restrictRect", + "restrictSize", + "snapEdges", + "snap", + "snapSize", + "spring", + "avoid", + "transform", + "rubberband" + ], + "sources": [ + "all.ts" + ], + "sourcesContent": [ + "/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n aspectRatio,\n restrictEdges,\n restrict,\n restrictRect,\n restrictSize,\n snapEdges,\n snap,\n snapSize,\n\n spring,\n avoid,\n transform,\n rubberband,\n}\n" + ], + "mappings": "8EACA,IAAAA,EAAAC,EAAAC,QAAA,kBACAC,EAAAF,EAAAC,QAAA,kBACAE,EAAAH,EAAAC,QAAA,qBACAG,EAAAJ,EAAAC,QAAA,uBACAI,EAAAL,EAAAC,QAAA,oBACAK,EAAAN,EAAAC,QAAA,oBACAM,EAAAP,EAAAC,QAAA,4BACAO,EAAAR,EAAAC,QAAA,iBACAQ,EAAAT,EAAAC,QAAA,mBACAS,EAAAV,EAAAC,QAAA,gBACAU,EAAAX,EAAAC,QAAA,oBACAW,EAAAZ,EAAAC,QAAA,0BAA6C,SAAAD,EAAAa,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAZ7CG,QAAAD,QAce,CACbE,sBACAC,wBACAC,mBACAC,uBACAC,uBACAC,oBACAC,eACAC,mBAEAC,iBACAC,gBACAC,oBACAC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/aspectRatio.d.ts b/packages/@interactjs/modifiers/aspectRatio.d.ts new file mode 100644 index 000000000..fbbc309f0 --- /dev/null +++ b/packages/@interactjs/modifiers/aspectRatio.d.ts @@ -0,0 +1,52 @@ +/** + * @module modifiers/aspectRatio + * + * @description + * This modifier forces elements to be resized with a specified dx/dy ratio. + * + * ```js + * interact(target).resizable({ + * modifiers: [ + * interact.modifiers.snapSize({ + * targets: [ interact.snappers.grid({ x: 20, y: 20 }) ], + * }), + * interact.aspectRatio({ ratio: 'preserve' }), + * ], + * }); + * ``` + */ +import type { Point, Rect, EdgeOptions } from '@interactjs/core/types'; +import { Modification } from './Modification'; +import type { Modifier, ModifierModule, ModifierState } from './types'; +export interface AspectRatioOptions { + ratio?: number | 'preserve'; + equalDelta?: boolean; + modifiers?: Modifier[]; + enabled?: boolean; +} +export type AspectRatioState = ModifierState; +declare const aspectRatio: ModifierModule; +declare const _default: { + (_options?: Partial): Modifier; + _defaults: AspectRatioOptions; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => unknown; + beforeEnd: (arg: import("./types").ModifierArg) => void | Point; + stop: (arg: import("./types").ModifierArg) => void; + }; +}; +export default _default; +export { aspectRatio }; diff --git a/packages/@interactjs/modifiers/aspectRatio.js b/packages/@interactjs/modifiers/aspectRatio.js new file mode 100644 index 000000000..6a9e38814 --- /dev/null +++ b/packages/@interactjs/modifiers/aspectRatio.js @@ -0,0 +1,157 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = exports.aspectRatio = void 0; +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _rect = require("../utils/rect.js"); +var _base = require("./base"); +var _Modification = require("./Modification"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * @module modifiers/aspectRatio + * + * @description + * This modifier forces elements to be resized with a specified dx/dy ratio. + * + * ```js + * interact(target).resizable({ + * modifiers: [ + * interact.modifiers.snapSize({ + * targets: [ interact.snappers.grid({ x: 20, y: 20 }) ], + * }), + * interact.aspectRatio({ ratio: 'preserve' }), + * ], + * }); + * ``` + */ + +const aspectRatio = exports.aspectRatio = { + start(arg) { + const { + state, + rect, + edges, + pageCoords: coords + } = arg; + let { + ratio, + enabled + } = state.options; + const { + equalDelta, + modifiers + } = state.options; + if (ratio === 'preserve') { + ratio = rect.width / rect.height; + } + state.startCoords = (0, _extend.default)({}, coords); + state.startRect = (0, _extend.default)({}, rect); + state.ratio = ratio; + state.equalDelta = equalDelta; + const linkedEdges = state.linkedEdges = { + top: edges.top || edges.left && !edges.bottom, + left: edges.left || edges.top && !edges.right, + bottom: edges.bottom || edges.right && !edges.top, + right: edges.right || edges.bottom && !edges.left + }; + state.xIsPrimaryAxis = !!(edges.left || edges.right); + if (state.equalDelta) { + const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1); + state.edgeSign = { + x: sign, + y: sign + }; + } else { + state.edgeSign = { + x: linkedEdges.left ? -1 : 1, + y: linkedEdges.top ? -1 : 1 + }; + } + if (enabled !== false) { + (0, _extend.default)(edges, linkedEdges); + } + if (!(modifiers != null && modifiers.length)) return; + const subModification = new _Modification.Modification(arg.interaction); + subModification.copyFrom(arg.interaction.modification); + subModification.prepareStates(modifiers); + state.subModification = subModification; + subModification.startAll({ + ...arg + }); + }, + set(arg) { + const { + state, + rect, + coords + } = arg; + const { + linkedEdges + } = state; + const initialCoords = (0, _extend.default)({}, coords); + const aspectMethod = state.equalDelta ? setEqualDelta : setRatio; + (0, _extend.default)(arg.edges, linkedEdges); + aspectMethod(state, state.xIsPrimaryAxis, coords, rect); + if (!state.subModification) { + return null; + } + const correctedRect = (0, _extend.default)({}, rect); + (0, _rect.addEdges)(linkedEdges, correctedRect, { + x: coords.x - initialCoords.x, + y: coords.y - initialCoords.y + }); + const result = state.subModification.setAll({ + ...arg, + rect: correctedRect, + edges: linkedEdges, + pageCoords: coords, + prevCoords: coords, + prevRect: correctedRect + }); + const { + delta + } = result; + if (result.changed) { + const xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y); + + // do aspect modification again with critical edge axis as primary + aspectMethod(state, xIsCriticalAxis, result.coords, result.rect); + (0, _extend.default)(coords, result.coords); + } + return result.eventProps; + }, + defaults: { + ratio: 'preserve', + equalDelta: false, + modifiers: [], + enabled: false + } +}; +function setEqualDelta({ + startCoords, + edgeSign +}, xIsPrimaryAxis, coords) { + if (xIsPrimaryAxis) { + coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign.y; + } else { + coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x; + } +} +function setRatio({ + startRect, + startCoords, + ratio, + edgeSign +}, xIsPrimaryAxis, coords, rect) { + if (xIsPrimaryAxis) { + const newHeight = rect.width / ratio; + coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y; + } else { + const newWidth = rect.height * ratio; + coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x; + } +} +var _default = exports.default = (0, _base.makeModifier)(aspectRatio, 'aspectRatio'); +//# sourceMappingURL=aspectRatio.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/aspectRatio.js.map b/packages/@interactjs/modifiers/aspectRatio.js.map new file mode 100644 index 000000000..f65a58b15 --- /dev/null +++ b/packages/@interactjs/modifiers/aspectRatio.js.map @@ -0,0 +1,80 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "_rect", + "_base", + "_Modification", + "obj", + "__esModule", + "default", + "aspectRatio", + "exports", + "start", + "arg", + "state", + "rect", + "edges", + "pageCoords", + "coords", + "ratio", + "enabled", + "options", + "equalDelta", + "modifiers", + "width", + "height", + "startCoords", + "extend", + "startRect", + "linkedEdges", + "top", + "left", + "bottom", + "right", + "xIsPrimaryAxis", + "sign", + "edgeSign", + "x", + "y", + "length", + "subModification", + "Modification", + "interaction", + "copyFrom", + "modification", + "prepareStates", + "startAll", + "set", + "initialCoords", + "aspectMethod", + "setEqualDelta", + "setRatio", + "correctedRect", + "addEdges", + "result", + "setAll", + "prevCoords", + "prevRect", + "delta", + "changed", + "xIsCriticalAxis", + "Math", + "abs", + "eventProps", + "defaults", + "newHeight", + "newWidth", + "_default", + "makeModifier" + ], + "sources": [ + "aspectRatio.ts" + ], + "sourcesContent": [ + "/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This modifier 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 type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport { makeModifier } from './base'\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\n AspectRatioOptions,\n {\n startCoords: Point\n startRect: Rect\n linkedEdges: EdgeOptions\n ratio: number\n equalDelta: boolean\n xIsPrimaryAxis: boolean\n edgeSign: {\n x: number\n y: number\n }\n subModification: Modification\n }\n>\n\nconst aspectRatio: ModifierModule = {\n start(arg) {\n const { state, rect, edges, pageCoords: coords } = arg\n let { ratio, enabled } = 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: edges.top || (edges.left && !edges.bottom),\n left: edges.left || (edges.top && !edges.right),\n bottom: edges.bottom || (edges.right && !edges.top),\n right: edges.right || (edges.bottom && !edges.left),\n })\n\n state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n if (state.equalDelta) {\n const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n state.edgeSign = {\n x: sign,\n y: sign,\n }\n } else {\n state.edgeSign = {\n x: linkedEdges.left ? -1 : 1,\n y: linkedEdges.top ? -1 : 1,\n }\n }\n\n if (enabled !== false) {\n extend(edges, linkedEdges)\n }\n\n if (!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 { linkedEdges } = state\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n extend(arg.edges, linkedEdges)\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) {\n return null\n }\n\n const correctedRect = extend({}, rect)\n\n addEdges(linkedEdges, correctedRect, {\n x: coords.x - initialCoords.x,\n y: coords.y - initialCoords.y,\n })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: 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.y\n } else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n }\n}\n\nfunction setRatio(\n { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n xIsPrimaryAxis: boolean,\n coords: Point,\n rect: Rect,\n) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n } else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/aspectRatio.prod.js b/packages/@interactjs/modifiers/aspectRatio.prod.js new file mode 100644 index 000000000..ac790f8b2 --- /dev/null +++ b/packages/@interactjs/modifiers/aspectRatio.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.aspectRatio=void 0;var t,e=(t=require("../utils/extend.prod.js"))&&t.__esModule?t:{default:t},o=require("../utils/rect.prod.js"),r=require("./base"),i=require("./Modification");const s=exports.aspectRatio={start(t){const{state:o,rect:r,edges:s,pageCoords:a}=t;let{ratio:d,enabled:l}=o.options;const{equalDelta:n,modifiers:c}=o.options;"preserve"===d&&(d=r.width/r.height),o.startCoords=(0,e.default)({},a),o.startRect=(0,e.default)({},r),o.ratio=d,o.equalDelta=n;const u=o.linkedEdges={top:s.top||s.left&&!s.bottom,left:s.left||s.top&&!s.right,bottom:s.bottom||s.right&&!s.top,right:s.right||s.bottom&&!s.left};if(o.xIsPrimaryAxis=!(!s.left&&!s.right),o.equalDelta){const t=(u.left?1:-1)*(u.top?1:-1);o.edgeSign={x:t,y:t}}else o.edgeSign={x:u.left?-1:1,y:u.top?-1:1};if(!1!==l&&(0,e.default)(s,u),null==c||!c.length)return;const f=new i.Modification(t.interaction);f.copyFrom(t.interaction.modification),f.prepareStates(c),o.subModification=f,f.startAll({...t})},set(t){const{state:r,rect:i,coords:s}=t,{linkedEdges:l}=r,n=(0,e.default)({},s),c=r.equalDelta?a:d;if((0,e.default)(t.edges,l),c(r,r.xIsPrimaryAxis,s,i),!r.subModification)return null;const u=(0,e.default)({},i);(0,o.addEdges)(l,u,{x:s.x-n.x,y:s.y-n.y});const f=r.subModification.setAll({...t,rect:u,edges:l,pageCoords:s,prevCoords:s,prevRect:u}),{delta:p}=f;return f.changed&&(c(r,Math.abs(p.x)>Math.abs(p.y),f.coords,f.rect),(0,e.default)(s,f.coords)),f.eventProps},defaults:{ratio:"preserve",equalDelta:!1,modifiers:[],enabled:!1}};function a({startCoords:t,edgeSign:e},o,r){o?r.y=t.y+(r.x-t.x)*e.y:r.x=t.x+(r.y-t.y)*e.x}function d({startRect:t,startCoords:e,ratio:o,edgeSign:r},i,s,a){if(i){const i=a.width/o;s.y=e.y+(i-t.height)*r.y}else{const i=a.height*o;s.x=e.x+(i-t.width)*r.x}}exports.default=(0,r.makeModifier)(s,"aspectRatio"); +//# sourceMappingURL=aspectRatio.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/aspectRatio.prod.js.map b/packages/@interactjs/modifiers/aspectRatio.prod.js.map new file mode 100644 index 000000000..2ec6095e3 --- /dev/null +++ b/packages/@interactjs/modifiers/aspectRatio.prod.js.map @@ -0,0 +1,77 @@ +{ + "version": 3, + "names": [ + "obj", + "_extendProd", + "require", + "__esModule", + "default", + "_rectProd", + "_base", + "_Modification", + "aspectRatio", + "exports", + "start", + "arg", + "state", + "rect", + "edges", + "pageCoords", + "coords", + "ratio", + "enabled", + "options", + "equalDelta", + "modifiers", + "width", + "height", + "startCoords", + "extend", + "startRect", + "linkedEdges", + "top", + "left", + "bottom", + "right", + "xIsPrimaryAxis", + "sign", + "edgeSign", + "x", + "y", + "length", + "subModification", + "Modification", + "interaction", + "copyFrom", + "modification", + "prepareStates", + "startAll", + "set", + "initialCoords", + "aspectMethod", + "setEqualDelta", + "setRatio", + "correctedRect", + "addEdges", + "result", + "setAll", + "prevCoords", + "prevRect", + "delta", + "changed", + "Math", + "abs", + "eventProps", + "defaults", + "newHeight", + "newWidth", + "makeModifier" + ], + "sources": [ + "aspectRatio.ts" + ], + "sourcesContent": [ + "/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This modifier 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 type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport { makeModifier } from './base'\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\n AspectRatioOptions,\n {\n startCoords: Point\n startRect: Rect\n linkedEdges: EdgeOptions\n ratio: number\n equalDelta: boolean\n xIsPrimaryAxis: boolean\n edgeSign: {\n x: number\n y: number\n }\n subModification: Modification\n }\n>\n\nconst aspectRatio: ModifierModule = {\n start(arg) {\n const { state, rect, edges, pageCoords: coords } = arg\n let { ratio, enabled } = 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: edges.top || (edges.left && !edges.bottom),\n left: edges.left || (edges.top && !edges.right),\n bottom: edges.bottom || (edges.right && !edges.top),\n right: edges.right || (edges.bottom && !edges.left),\n })\n\n state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n if (state.equalDelta) {\n const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n state.edgeSign = {\n x: sign,\n y: sign,\n }\n } else {\n state.edgeSign = {\n x: linkedEdges.left ? -1 : 1,\n y: linkedEdges.top ? -1 : 1,\n }\n }\n\n if (enabled !== false) {\n extend(edges, linkedEdges)\n }\n\n if (!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 { linkedEdges } = state\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n extend(arg.edges, linkedEdges)\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) {\n return null\n }\n\n const correctedRect = extend({}, rect)\n\n addEdges(linkedEdges, correctedRect, {\n x: coords.x - initialCoords.x,\n y: coords.y - initialCoords.y,\n })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: 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.y\n } else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n }\n}\n\nfunction setRatio(\n { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n xIsPrimaryAxis: boolean,\n coords: Point,\n rect: Rect,\n) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n } else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/avoid/avoid.d.ts b/packages/@interactjs/modifiers/avoid/avoid.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/avoid/avoid.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/avoid/avoid.js b/packages/@interactjs/modifiers/avoid/avoid.js new file mode 100644 index 000000000..2526411d3 --- /dev/null +++ b/packages/@interactjs/modifiers/avoid/avoid.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function () { + return _noop.default; + } +}); +var _noop = _interopRequireDefault(require("../noop")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +//# sourceMappingURL=avoid.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/avoid/avoid.js.map b/packages/@interactjs/modifiers/avoid/avoid.js.map new file mode 100644 index 000000000..a22f204ff --- /dev/null +++ b/packages/@interactjs/modifiers/avoid/avoid.js.map @@ -0,0 +1,18 @@ +{ + "version": 3, + "names": [ + "_noop", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default" + ], + "sources": [ + "avoid.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": ";;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/avoid/avoid.prod.js b/packages/@interactjs/modifiers/avoid/avoid.prod.js new file mode 100644 index 000000000..e2e6e643a --- /dev/null +++ b/packages/@interactjs/modifiers/avoid/avoid.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r.default});var e,r=(e=require("../noop"))&&e.__esModule?e:{default:e}; +//# sourceMappingURL=avoid.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/avoid/avoid.prod.js.map b/packages/@interactjs/modifiers/avoid/avoid.prod.js.map new file mode 100644 index 000000000..e23056d49 --- /dev/null +++ b/packages/@interactjs/modifiers/avoid/avoid.prod.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "obj", + "_noop", + "require", + "__esModule", + "default" + ], + "sources": [ + "avoid.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": "kIAAA,IAAiCA,EAAjCC,GAAiCD,EAAjCE,QAAA,aAAiCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/avoid/avoid.stub.d.ts b/packages/@interactjs/modifiers/avoid/avoid.stub.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/avoid/avoid.stub.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/base.d.ts b/packages/@interactjs/modifiers/base.d.ts new file mode 100644 index 000000000..e63acd805 --- /dev/null +++ b/packages/@interactjs/modifiers/base.d.ts @@ -0,0 +1,41 @@ +import type { InteractEvent } from '@interactjs/core/InteractEvent'; +import type Interaction from '@interactjs/core/Interaction'; +import type { Plugin } from '@interactjs/core/scope'; +import { Modification } from './Modification'; +import type { Modifier, ModifierModule, ModifierState } from './types'; +declare module '@interactjs/core/Interaction' { + interface Interaction { + modification?: Modification; + } +} +declare module '@interactjs/core/InteractEvent' { + interface InteractEvent { + modifiers?: Array<{ + name: string; + [key: string]: any; + }>; + } +} +declare module '@interactjs/core/options' { + interface PerActionDefaults { + modifiers?: Modifier[]; + } +} +export declare function makeModifier(module: ModifierModule, name?: Name): { + (_options?: Partial): Modifier; + _defaults: Defaults; + _methods: { + start: (arg: import("./types").ModifierArg) => void; + set: (arg: import("./types").ModifierArg) => Result; + beforeEnd: (arg: import("./types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("./types").ModifierArg) => void; + }; +}; +export declare function addEventModifiers({ iEvent, interaction, }: { + iEvent: InteractEvent; + interaction: Interaction; +}): void; +declare const modifiersBase: Plugin; +export default modifiersBase; diff --git a/packages/@interactjs/modifiers/base.js b/packages/@interactjs/modifiers/base.js new file mode 100644 index 000000000..8a708228c --- /dev/null +++ b/packages/@interactjs/modifiers/base.js @@ -0,0 +1,114 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.addEventModifiers = addEventModifiers; +exports.default = void 0; +exports.makeModifier = makeModifier; +var _Modification = require("./Modification"); +function makeModifier(module, name) { + const { + defaults + } = module; + const methods = { + start: module.start, + set: module.set, + beforeEnd: module.beforeEnd, + stop: module.stop + }; + const modifier = _options => { + const options = _options || {}; + options.enabled = options.enabled !== false; + + // add missing defaults to options + for (const prop in defaults) { + if (!(prop in options)) { + ; + options[prop] = defaults[prop]; + } + } + const m = { + options, + methods, + name, + enable: () => { + options.enabled = true; + return m; + }, + disable: () => { + options.enabled = false; + return m; + } + }; + return m; + }; + if (name && typeof name === 'string') { + // for backwrads compatibility + modifier._defaults = defaults; + modifier._methods = methods; + } + return modifier; +} +function addEventModifiers({ + iEvent, + interaction +}) { + const result = interaction.modification.result; + if (result) { + iEvent.modifiers = result.eventProps; + } +} +const modifiersBase = { + id: 'modifiers/base', + before: ['actions'], + install: scope => { + scope.defaults.perAction.modifiers = []; + }, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.modification = new _Modification.Modification(interaction); + }, + 'interactions:before-action-start': arg => { + const { + interaction + } = arg; + const modification = arg.interaction.modification; + modification.start(arg, interaction.coords.start.page); + interaction.edges = modification.edges; + modification.applyToInteraction(arg); + }, + 'interactions:before-action-move': arg => { + const { + interaction + } = arg; + const { + modification + } = interaction; + const ret = modification.setAndApply(arg); + interaction.edges = modification.edges; + return ret; + }, + 'interactions:before-action-end': arg => { + const { + interaction + } = arg; + const { + modification + } = interaction; + const ret = modification.beforeEnd(arg); + interaction.edges = modification.startEdges; + return ret; + }, + 'interactions:action-start': addEventModifiers, + 'interactions:action-move': addEventModifiers, + 'interactions:action-end': addEventModifiers, + 'interactions:after-action-start': arg => arg.interaction.modification.restoreInteractionCoords(arg), + 'interactions:after-action-move': arg => arg.interaction.modification.restoreInteractionCoords(arg), + 'interactions:stop': arg => arg.interaction.modification.stop(arg) + } +}; +var _default = exports.default = modifiersBase; +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/base.js.map b/packages/@interactjs/modifiers/base.js.map new file mode 100644 index 000000000..d5df6ea08 --- /dev/null +++ b/packages/@interactjs/modifiers/base.js.map @@ -0,0 +1,61 @@ +{ + "version": 3, + "names": [ + "_Modification", + "require", + "makeModifier", + "module", + "name", + "defaults", + "methods", + "start", + "set", + "beforeEnd", + "stop", + "modifier", + "_options", + "options", + "enabled", + "prop", + "m", + "enable", + "disable", + "_defaults", + "_methods", + "addEventModifiers", + "iEvent", + "interaction", + "result", + "modification", + "modifiers", + "eventProps", + "modifiersBase", + "id", + "before", + "install", + "scope", + "perAction", + "listeners", + "interactions:new", + "Modification", + "arg", + "coords", + "page", + "edges", + "applyToInteraction", + "ret", + "setAndApply", + "startEdges", + "restoreInteractionCoords", + "_default", + "exports", + "default" + ], + "sources": [ + "base.ts" + ], + "sourcesContent": [ + "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modification?: Modification\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n modifiers?: Array<{\n name: string\n [key: string]: any\n }>\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n Result,\n>(module: ModifierModule, name?: Name) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n ;(options as any)[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = {\n options,\n methods,\n name,\n enable: () => {\n options.enabled = true\n return m\n },\n disable: () => {\n options.enabled = false\n return m\n },\n }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport function addEventModifiers({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n const result = interaction.modification!.result\n\n if (result) {\n iEvent.modifiers = result.eventProps\n }\n}\n\nconst modifiersBase: Plugin = {\n id: 'modifiers/base',\n before: ['actions'],\n install: (scope) => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modification = new Modification(interaction)\n },\n\n 'interactions:before-action-start': (arg) => {\n const { interaction } = arg\n const modification = arg.interaction.modification!\n\n modification.start(arg, interaction.coords.start.page)\n interaction.edges = modification.edges\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-move': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.setAndApply(arg)\n interaction.edges = modification.edges\n\n return ret\n },\n\n 'interactions:before-action-end': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.beforeEnd(arg)\n interaction.edges = modification.startEdges\n\n return ret\n },\n\n 'interactions:action-start': addEventModifiers,\n 'interactions:action-move': addEventModifiers,\n 'interactions:action-end': addEventModifiers,\n\n 'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n 'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n },\n}\n\nexport default modifiersBase\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/base.prod.js b/packages/@interactjs/modifiers/base.prod.js new file mode 100644 index 000000000..81c891d98 --- /dev/null +++ b/packages/@interactjs/modifiers/base.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.addEventModifiers=e,exports.default=void 0,exports.makeModifier=(t,e)=>{const{defaults:o}=t,i={start:t.start,set:t.set,beforeEnd:t.beforeEnd,stop:t.stop},n=t=>{const n=t||{};n.enabled=!1!==n.enabled;for(const t in o)t in n||(n[t]=o[t]);const r={options:n,methods:i,name:e,enable:()=>(n.enabled=!0,r),disable:()=>(n.enabled=!1,r)};return r};return e&&"string"==typeof e&&(n._defaults=o,n._methods=i),n};var t=require("./Modification");function e({iEvent:t,interaction:e}){const o=e.modification.result;o&&(t.modifiers=o.eventProps)}const o={id:"modifiers/base",before:["actions"],install(t){t.defaults.perAction.modifiers=[]},listeners:{"interactions:new"({interaction:e}){e.modification=new t.Modification(e)},"interactions:before-action-start"(t){const{interaction:e}=t,o=t.interaction.modification;o.start(t,e.coords.start.page),e.edges=o.edges,o.applyToInteraction(t)},"interactions:before-action-move"(t){const{interaction:e}=t,{modification:o}=e,i=o.setAndApply(t);return e.edges=o.edges,i},"interactions:before-action-end"(t){const{interaction:e}=t,{modification:o}=e,i=o.beforeEnd(t);return e.edges=o.startEdges,i},"interactions:action-start":e,"interactions:action-move":e,"interactions:action-end":e,"interactions:after-action-start":t=>t.interaction.modification.restoreInteractionCoords(t),"interactions:after-action-move":t=>t.interaction.modification.restoreInteractionCoords(t),"interactions:stop":t=>t.interaction.modification.stop(t)}};exports.default=o; +//# sourceMappingURL=base.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/base.prod.js.map b/packages/@interactjs/modifiers/base.prod.js.map new file mode 100644 index 000000000..d063025bb --- /dev/null +++ b/packages/@interactjs/modifiers/base.prod.js.map @@ -0,0 +1,58 @@ +{ + "version": 3, + "names": [ + "module", + "name", + "defaults", + "methods", + "start", + "set", + "beforeEnd", + "stop", + "modifier", + "_options", + "options", + "enabled", + "prop", + "m", + "enable", + "disable", + "_defaults", + "_methods", + "_Modification", + "require", + "addEventModifiers", + "iEvent", + "interaction", + "result", + "modification", + "modifiers", + "eventProps", + "modifiersBase", + "id", + "before", + "install", + "scope", + "perAction", + "listeners", + "Modification", + "arg", + "coords", + "page", + "edges", + "applyToInteraction", + "ret", + "setAndApply", + "startEdges", + "restoreInteractionCoords", + "exports", + "default" + ], + "sources": [ + "base.ts" + ], + "sourcesContent": [ + "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modification?: Modification\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n modifiers?: Array<{\n name: string\n [key: string]: any\n }>\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n Result,\n>(module: ModifierModule, name?: Name) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n ;(options as any)[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = {\n options,\n methods,\n name,\n enable: () => {\n options.enabled = true\n return m\n },\n disable: () => {\n options.enabled = false\n return m\n },\n }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport function addEventModifiers({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n const result = interaction.modification!.result\n\n if (result) {\n iEvent.modifiers = result.eventProps\n }\n}\n\nconst modifiersBase: Plugin = {\n id: 'modifiers/base',\n before: ['actions'],\n install: (scope) => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modification = new Modification(interaction)\n },\n\n 'interactions:before-action-start': (arg) => {\n const { interaction } = arg\n const modification = arg.interaction.modification!\n\n modification.start(arg, interaction.coords.start.page)\n interaction.edges = modification.edges\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-move': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.setAndApply(arg)\n interaction.edges = modification.edges\n\n return ret\n },\n\n 'interactions:before-action-end': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.beforeEnd(arg)\n interaction.edges = modification.startEdges\n\n return ret\n },\n\n 'interactions:action-start': addEventModifiers,\n 'interactions:action-move': addEventModifiers,\n 'interactions:action-end': addEventModifiers,\n\n 'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n 'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n },\n}\n\nexport default modifiersBase\n" + ], + "mappings": "+HA4BO,CAKLA,EAAiDC,KACjD,MAAMC,SAAEA,GAAaF,EACfG,EAAU,CACdC,MAAOJ,EAAOI,MACdC,IAAKL,EAAOK,IACZC,UAAWN,EAAOM,UAClBC,KAAMP,EAAOO,MAGTC,EAAYC,IAChB,MAAMC,EAAWD,GAAY,CAAC,EAE9BC,EAAQC,SAA8B,IAApBD,EAAQC,QAG1B,IAAK,MAAMC,KAAQV,EACXU,KAAQF,IACVA,EAAgBE,GAAQV,EAASU,IAIvC,MAAMC,EAA6C,CACjDH,UACAP,UACAF,OACAa,OAAQA,KACNJ,EAAQC,SAAU,EACXE,GAETE,QAASA,KACPL,EAAQC,SAAU,EACXE,IAIX,OAAOA,CAAC,EASV,OANIZ,GAAwB,iBAATA,IAEjBO,EAASQ,UAAYd,EACrBM,EAASS,SAAWd,GAGfK,CACT,EA1EA,IAAAU,EAAAC,QAAA,kBA4EO,SAASC,GAAkBC,OAChCA,EAAMC,YACNA,IAKA,MAAMC,EAASD,EAAYE,aAAcD,OAErCA,IACFF,EAAOI,UAAYF,EAAOG,WAE9B,CAEA,MAAMC,EAAwB,CAC5BC,GAAI,iBACJC,OAAQ,CAAC,WACTC,OAEA,CAFUC,GACRA,EAAM7B,SAAS8B,UAAUP,UAAY,EAAE,EAEzCQ,UAAW,CACT,kBAEA,EAFuBX,gBACrBA,EAAYE,aAAe,IAAIU,eAAaZ,EAAY,EAG1D,kCAOA,CAPqCa,GACnC,MAAMb,YAAEA,GAAgBa,EAClBX,EAAeW,EAAIb,YAAYE,aAErCA,EAAapB,MAAM+B,EAAKb,EAAYc,OAAOhC,MAAMiC,MACjDf,EAAYgB,MAAQd,EAAac,MACjCd,EAAae,mBAAmBJ,EAAI,EAGtC,iCAOA,CAPoCA,GAClC,MAAMb,YAAEA,GAAgBa,GAClBX,aAAEA,GAAiBF,EACnBkB,EAAMhB,EAAaiB,YAAYN,GAGrC,OAFAb,EAAYgB,MAAQd,EAAac,MAE1BE,CAAG,EAGZ,gCAOA,CAPmCL,GACjC,MAAMb,YAAEA,GAAgBa,GAClBX,aAAEA,GAAiBF,EACnBkB,EAAMhB,EAAalB,UAAU6B,GAGnC,OAFAb,EAAYgB,MAAQd,EAAakB,WAE1BF,CAAG,EAGZ,4BAA6BpB,EAC7B,2BAA4BA,EAC5B,0BAA2BA,EAE3B,kCAAoCe,GAAQA,EAAIb,YAAYE,aAAamB,yBAAyBR,GAClG,iCAAmCA,GAAQA,EAAIb,YAAYE,aAAamB,yBAAyBR,GAEjG,oBAAsBA,GAAQA,EAAIb,YAAYE,aAAajB,KAAK4B,KAEnES,QAAAC,QAEclB" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/index.d.ts b/packages/@interactjs/modifiers/index.d.ts new file mode 100644 index 000000000..d187da63d --- /dev/null +++ b/packages/@interactjs/modifiers/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/modifiers/plugin'; diff --git a/packages/@interactjs/modifiers/index.js b/packages/@interactjs/modifiers/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/modifiers/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/index.js.map b/packages/@interactjs/modifiers/index.js.map new file mode 100644 index 000000000..b835b5333 --- /dev/null +++ b/packages/@interactjs/modifiers/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/modifiers/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/modifiers/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/index.prod.js b/packages/@interactjs/modifiers/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/modifiers/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/index.prod.js.map b/packages/@interactjs/modifiers/index.prod.js.map new file mode 100644 index 000000000..cbc577fd0 --- /dev/null +++ b/packages/@interactjs/modifiers/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/modifiers/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/modifiers/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/index.ts b/packages/@interactjs/modifiers/index.ts new file mode 100644 index 000000000..99e1c828e --- /dev/null +++ b/packages/@interactjs/modifiers/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/modifiers/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/modifiers/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/modifiers/noop.d.ts b/packages/@interactjs/modifiers/noop.d.ts new file mode 100644 index 000000000..bf30c39b4 --- /dev/null +++ b/packages/@interactjs/modifiers/noop.d.ts @@ -0,0 +1,3 @@ +import type { ModifierFunction } from './types'; +declare const noop: ModifierFunction; +export default noop; diff --git a/packages/@interactjs/modifiers/noop.js b/packages/@interactjs/modifiers/noop.js new file mode 100644 index 000000000..2dad2ed8c --- /dev/null +++ b/packages/@interactjs/modifiers/noop.js @@ -0,0 +1,10 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +const noop = () => {}; +noop._defaults = {}; +var _default = exports.default = noop; +//# sourceMappingURL=noop.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/noop.js.map b/packages/@interactjs/modifiers/noop.js.map new file mode 100644 index 000000000..d722a1581 --- /dev/null +++ b/packages/@interactjs/modifiers/noop.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "noop", + "_defaults", + "_default", + "exports", + "default" + ], + "sources": [ + "noop.ts" + ], + "sourcesContent": [ + "import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction\n\nnoop._defaults = {}\n\nexport default noop\n" + ], + "mappings": ";;;;;;AAEA,MAAMA,IAAI,GAAIA,CAAA,KAAM,CAAC,CAAmD;AAExEA,IAAI,CAACC,SAAS,GAAG,CAAC,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEJJ,IAAI" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/noop.prod.js b/packages/@interactjs/modifiers/noop.prod.js new file mode 100644 index 000000000..3e2deb3af --- /dev/null +++ b/packages/@interactjs/modifiers/noop.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;const e=()=>{};e._defaults={},exports.default=e; +//# sourceMappingURL=noop.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/noop.prod.js.map b/packages/@interactjs/modifiers/noop.prod.js.map new file mode 100644 index 000000000..9680c54ca --- /dev/null +++ b/packages/@interactjs/modifiers/noop.prod.js.map @@ -0,0 +1,16 @@ +{ + "version": 3, + "names": [ + "noop", + "_defaults", + "exports", + "default" + ], + "sources": [ + "noop.ts" + ], + "sourcesContent": [ + "import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction\n\nnoop._defaults = {}\n\nexport default noop\n" + ], + "mappings": "8EAEA,MAAMA,EAAQA,OAEdA,EAAKC,UAAY,CAAC,EAACC,QAAAC,QAEJH" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/package.json b/packages/@interactjs/modifiers/package.json index e2d5ffaf6..0433f25cf 100644 --- a/packages/@interactjs/modifiers/package.json +++ b/packages/@interactjs/modifiers/package.json @@ -14,7 +14,6 @@ }, "peerDependencies": { "@interactjs/core": "1.10.25", - "@interactjs/rebound": "1.10.25", "@interactjs/utils": "1.10.25" }, "optionalDependencies": { diff --git a/packages/@interactjs/modifiers/plugin.d.ts b/packages/@interactjs/modifiers/plugin.d.ts new file mode 100644 index 000000000..602fbbcc2 --- /dev/null +++ b/packages/@interactjs/modifiers/plugin.d.ts @@ -0,0 +1,11 @@ +import type { Plugin } from '@interactjs/core/scope'; +import './all'; +import './base'; +import all from './all'; +declare module '@interactjs/core/InteractStatic' { + interface InteractStatic { + modifiers: typeof all; + } +} +declare const modifiers: Plugin; +export default modifiers; diff --git a/packages/@interactjs/modifiers/plugin.js b/packages/@interactjs/modifiers/plugin.js new file mode 100644 index 000000000..9bc608a60 --- /dev/null +++ b/packages/@interactjs/modifiers/plugin.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _plugin = _interopRequireDefault(require("../snappers/plugin.js")); +var _all = _interopRequireDefault(require("./all")); +var _base = _interopRequireDefault(require("./base")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +const modifiers = { + id: 'modifiers', + install(scope) { + const { + interactStatic: interact + } = scope; + scope.usePlugin(_base.default); + scope.usePlugin(_plugin.default); + interact.modifiers = _all.default; + + // for backwrads compatibility + for (const type in _all.default) { + const { + _defaults, + _methods + } = _all.default[type]; + _defaults._methods = _methods; + scope.defaults.perAction[type] = _defaults; + } + } +}; +var _default = exports.default = modifiers; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/plugin.js.map b/packages/@interactjs/modifiers/plugin.js.map new file mode 100644 index 000000000..48a0c9bc3 --- /dev/null +++ b/packages/@interactjs/modifiers/plugin.js.map @@ -0,0 +1,37 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_all", + "_base", + "obj", + "__esModule", + "default", + "modifiers", + "id", + "install", + "scope", + "interactStatic", + "interact", + "usePlugin", + "base", + "snappers", + "all", + "type", + "_defaults", + "_methods", + "defaults", + "perAction", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './all'\nimport './base'\n\nimport all from './all'\nimport base from './base'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n modifiers: typeof all\n }\n}\n\nconst modifiers: Plugin = {\n id: 'modifiers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n scope.usePlugin(base)\n scope.usePlugin(snappers)\n\n interact.modifiers = all\n\n // for backwrads compatibility\n for (const type in all) {\n const { _defaults, _methods } = all[type as keyof typeof all]\n\n ;(_defaults as any)._methods = _methods\n ;(scope.defaults.perAction as any)[type] = _defaults\n }\n },\n}\n\nexport default modifiers\n" + ], + "mappings": ";;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGA,IAAAC,IAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAe,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFf;;AAMA;;AAQA,MAAMG,SAAiB,GAAG;EACxBC,EAAE,EAAE,WAAW;EACfC,OAAOA,CAACC,KAAK,EAAE;IACb,MAAM;MAAEC,cAAc,EAAEC;IAAS,CAAC,GAAGF,KAAK;IAE1CA,KAAK,CAACG,SAAS,CAACC,aAAI,CAAC;IACrBJ,KAAK,CAACG,SAAS,CAACE,eAAQ,CAAC;IAEzBH,QAAQ,CAACL,SAAS,GAAGS,YAAG;;IAExB;IACA,KAAK,MAAMC,IAAI,IAAID,YAAG,EAAE;MACtB,MAAM;QAAEE,SAAS;QAAEC;MAAS,CAAC,GAAGH,YAAG,CAACC,IAAI,CAAqB;MAE3DC,SAAS,CAASC,QAAQ,GAAGA,QAAQ;MACrCT,KAAK,CAACU,QAAQ,CAACC,SAAS,CAASJ,IAAI,CAAC,GAAGC,SAAS;IACtD;EACF;AACF,CAAC;AAAA,IAAAI,QAAA,GAAAC,OAAA,CAAAjB,OAAA,GAEcC,SAAS" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/plugin.prod.js b/packages/@interactjs/modifiers/plugin.prod.js new file mode 100644 index 000000000..7e4fd6fe5 --- /dev/null +++ b/packages/@interactjs/modifiers/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=s(require("../snappers/plugin.prod.js")),t=s(require("./all")),u=s(require("./base"));function s(e){return e&&e.__esModule?e:{default:e}}const r={id:"modifiers",install(s){const{interactStatic:r}=s;s.usePlugin(u.default),s.usePlugin(e.default),r.modifiers=t.default;for(const e in t.default){const{_defaults:u,_methods:r}=t.default[e];u._methods=r,s.defaults.perAction[e]=u}}};exports.default=r; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/plugin.prod.js.map b/packages/@interactjs/modifiers/plugin.prod.js.map new file mode 100644 index 000000000..1a3d93fab --- /dev/null +++ b/packages/@interactjs/modifiers/plugin.prod.js.map @@ -0,0 +1,36 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "_all", + "_base", + "obj", + "__esModule", + "default", + "modifiers", + "id", + "install", + "scope", + "interactStatic", + "interact", + "usePlugin", + "base", + "snappers", + "all", + "type", + "_defaults", + "_methods", + "defaults", + "perAction", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './all'\nimport './base'\n\nimport all from './all'\nimport base from './base'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n modifiers: typeof all\n }\n}\n\nconst modifiers: Plugin = {\n id: 'modifiers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n scope.usePlugin(base)\n scope.usePlugin(snappers)\n\n interact.modifiers = all\n\n // for backwrads compatibility\n for (const type in all) {\n const { _defaults, _methods } = all[type as keyof typeof all]\n\n ;(_defaults as any)._methods = _methods\n ;(scope.defaults.perAction as any)[type] = _defaults\n }\n },\n}\n\nexport default modifiers\n" + ], + "mappings": "8EACA,IAAAA,EAAAC,EAAAC,QAAA,+BAGAC,EAAAF,EAAAC,QAAA,UACAE,EAAAH,EAAAC,QAAA,WAAe,SAAAD,EAAAI,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAYf,MAAMG,EAAoB,CACxBC,GAAI,YACJC,QAAQC,GACN,MAAQC,eAAgBC,GAAaF,EAErCA,EAAMG,UAAUC,WAChBJ,EAAMG,UAAUE,WAEhBH,EAASL,UAAYS,UAGrB,IAAK,MAAMC,KAAQD,UAAK,CACtB,MAAME,UAAEA,EAASC,SAAEA,GAAaH,UAAIC,GAElCC,EAAkBC,SAAWA,EAC7BT,EAAMU,SAASC,UAAkBJ,GAAQC,CAC7C,CACF,GACDI,QAAAhB,QAEcC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/edges.d.ts b/packages/@interactjs/modifiers/restrict/edges.d.ts new file mode 100644 index 000000000..37bbed864 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/edges.d.ts @@ -0,0 +1,46 @@ +import type { Point, Rect } from '@interactjs/core/types'; +import type { ModifierArg, ModifierState } from '../types'; +import type { RestrictOptions } from './pointer'; +export interface RestrictEdgesOptions { + inner: RestrictOptions['restriction']; + outer: RestrictOptions['restriction']; + offset?: RestrictOptions['offset']; + endOnly: boolean; + enabled?: boolean; +} +export type RestrictEdgesState = ModifierState; +declare function start({ interaction, startOffset, state }: ModifierArg): void; +declare function set({ coords, edges, interaction, state }: ModifierArg): void; +declare const restrictEdges: { + noInner: { + top: number; + left: number; + bottom: number; + right: number; + }; + noOuter: { + top: number; + left: number; + bottom: number; + right: number; + }; + start: typeof start; + set: typeof set; + defaults: RestrictEdgesOptions; +}; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: RestrictEdgesOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => void; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; +}; +export default _default; +export { restrictEdges }; diff --git a/packages/@interactjs/modifiers/restrict/edges.js b/packages/@interactjs/modifiers/restrict/edges.js new file mode 100644 index 000000000..d4fe5e3a7 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/edges.js @@ -0,0 +1,113 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.restrictEdges = exports.default = void 0; +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var rectUtils = _interopRequireWildcard(require("../../utils/rect.js")); +var _base = require("../base"); +var _pointer = require("./pointer"); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// This modifier adds the options.resize.restrictEdges setting which sets min and +// max for the top, left, bottom and right edges of the target being resized. +// +// interact(target).resize({ +// edges: { top: true, left: true }, +// restrictEdges: { +// inner: { top: 200, left: 200, right: 400, bottom: 400 }, +// outer: { top: 0, left: 0, right: 600, bottom: 600 }, +// }, +// }) + +const noInner = { + top: +Infinity, + left: +Infinity, + bottom: -Infinity, + right: -Infinity +}; +const noOuter = { + top: -Infinity, + left: -Infinity, + bottom: +Infinity, + right: +Infinity +}; +function start({ + interaction, + startOffset, + state +}) { + const { + options + } = state; + let offset; + if (options) { + const offsetRect = (0, _pointer.getRestrictionRect)(options.offset, interaction, interaction.coords.start.page); + offset = rectUtils.rectToXY(offsetRect); + } + offset = offset || { + x: 0, + y: 0 + }; + state.offset = { + top: offset.y + startOffset.top, + left: offset.x + startOffset.left, + bottom: offset.y - startOffset.bottom, + right: offset.x - startOffset.right + }; +} +function set({ + coords, + edges, + interaction, + state +}) { + const { + offset, + options + } = state; + if (!edges) { + return; + } + const page = (0, _extend.default)({}, coords); + const inner = (0, _pointer.getRestrictionRect)(options.inner, interaction, page) || {}; + const outer = (0, _pointer.getRestrictionRect)(options.outer, interaction, page) || {}; + fixRect(inner, noInner); + fixRect(outer, noOuter); + if (edges.top) { + coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top); + } else if (edges.bottom) { + coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom); + } + if (edges.left) { + coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left); + } else if (edges.right) { + coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right); + } +} +function fixRect(rect, defaults) { + for (const edge of ['top', 'left', 'bottom', 'right']) { + if (!(edge in rect)) { + rect[edge] = defaults[edge]; + } + } + return rect; +} +const defaults = { + inner: null, + outer: null, + offset: null, + endOnly: false, + enabled: false +}; +const restrictEdges = exports.restrictEdges = { + noInner, + noOuter, + start, + set, + defaults +}; +var _default = exports.default = (0, _base.makeModifier)(restrictEdges, 'restrictEdges'); +//# sourceMappingURL=edges.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/edges.js.map b/packages/@interactjs/modifiers/restrict/edges.js.map new file mode 100644 index 000000000..a2116fb14 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/edges.js.map @@ -0,0 +1,78 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "rectUtils", + "_interopRequireWildcard", + "_base", + "_pointer", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "noInner", + "top", + "Infinity", + "left", + "bottom", + "right", + "noOuter", + "start", + "interaction", + "startOffset", + "state", + "options", + "offset", + "offsetRect", + "getRestrictionRect", + "coords", + "page", + "rectToXY", + "x", + "y", + "edges", + "extend", + "inner", + "outer", + "fixRect", + "Math", + "min", + "max", + "rect", + "defaults", + "edge", + "endOnly", + "enabled", + "restrictEdges", + "exports", + "_default", + "makeModifier" + ], + "sources": [ + "edges.ts" + ], + "sourcesContent": [ + "// This modifier adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\n RestrictEdgesOptions,\n {\n inner: Rect\n outer: Rect\n offset: RestrictEdgesOptions['offset']\n }\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start({ interaction, startOffset, state }: ModifierArg) {\n const { options } = state\n let offset: Point\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set({ coords, edges, interaction, state }: ModifierArg) {\n const { offset, options } = state\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n } else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n } else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect(rect: Rect, defaults: Rect) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n" + ], + "mappings": ";;;;;;AAYA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,uBAAA,CAAAF,OAAA;AAEA,IAAAG,KAAA,GAAAH,OAAA;AAIA,IAAAI,QAAA,GAAAJ,OAAA;AAA8C,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAf,uBAAA2B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AAnB9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA6BA,MAAMC,OAAO,GAAG;EAAEC,GAAG,EAAE,CAACC,QAAQ;EAAEC,IAAI,EAAE,CAACD,QAAQ;EAAEE,MAAM,EAAE,CAACF,QAAQ;EAAEG,KAAK,EAAE,CAACH;AAAS,CAAC;AACxF,MAAMI,OAAO,GAAG;EAAEL,GAAG,EAAE,CAACC,QAAQ;EAAEC,IAAI,EAAE,CAACD,QAAQ;EAAEE,MAAM,EAAE,CAACF,QAAQ;EAAEG,KAAK,EAAE,CAACH;AAAS,CAAC;AAExF,SAASK,KAAKA,CAAC;EAAEC,WAAW;EAAEC,WAAW;EAAEC;AAAuC,CAAC,EAAE;EACnF,MAAM;IAAEC;EAAQ,CAAC,GAAGD,KAAK;EACzB,IAAIE,MAAa;EAEjB,IAAID,OAAO,EAAE;IACX,MAAME,UAAU,GAAG,IAAAC,2BAAkB,EAACH,OAAO,CAACC,MAAM,EAAEJ,WAAW,EAAEA,WAAW,CAACO,MAAM,CAACR,KAAK,CAACS,IAAI,CAAC;IAEjGJ,MAAM,GAAGtC,SAAS,CAAC2C,QAAQ,CAACJ,UAAU,CAAC;EACzC;EAEAD,MAAM,GAAGA,MAAM,IAAI;IAAEM,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC;EAEjCT,KAAK,CAACE,MAAM,GAAG;IACbX,GAAG,EAAEW,MAAM,CAACO,CAAC,GAAGV,WAAW,CAACR,GAAG;IAC/BE,IAAI,EAAES,MAAM,CAACM,CAAC,GAAGT,WAAW,CAACN,IAAI;IACjCC,MAAM,EAAEQ,MAAM,CAACO,CAAC,GAAGV,WAAW,CAACL,MAAM;IACrCC,KAAK,EAAEO,MAAM,CAACM,CAAC,GAAGT,WAAW,CAACJ;EAChC,CAAC;AACH;AAEA,SAASP,GAAGA,CAAC;EAAEiB,MAAM;EAAEK,KAAK;EAAEZ,WAAW;EAAEE;AAAuC,CAAC,EAAE;EACnF,MAAM;IAAEE,MAAM;IAAED;EAAQ,CAAC,GAAGD,KAAK;EAEjC,IAAI,CAACU,KAAK,EAAE;IACV;EACF;EAEA,MAAMJ,IAAI,GAAG,IAAAK,eAAM,EAAC,CAAC,CAAC,EAAEN,MAAM,CAAC;EAC/B,MAAMO,KAAK,GAAG,IAAAR,2BAAkB,EAACH,OAAO,CAACW,KAAK,EAAEd,WAAW,EAAEQ,IAAI,CAAC,IAAK,CAAC,CAAU;EAClF,MAAMO,KAAK,GAAG,IAAAT,2BAAkB,EAACH,OAAO,CAACY,KAAK,EAAEf,WAAW,EAAEQ,IAAI,CAAC,IAAK,CAAC,CAAU;EAElFQ,OAAO,CAACF,KAAK,EAAEtB,OAAO,CAAC;EACvBwB,OAAO,CAACD,KAAK,EAAEjB,OAAO,CAAC;EAEvB,IAAIc,KAAK,CAACnB,GAAG,EAAE;IACbc,MAAM,CAACI,CAAC,GAAGM,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACJ,KAAK,CAACtB,GAAG,GAAGW,MAAM,CAACX,GAAG,EAAEe,IAAI,CAACG,CAAC,CAAC,EAAEG,KAAK,CAACrB,GAAG,GAAGW,MAAM,CAACX,GAAG,CAAC;EACvF,CAAC,MAAM,IAAImB,KAAK,CAAChB,MAAM,EAAE;IACvBW,MAAM,CAACI,CAAC,GAAGM,IAAI,CAACE,GAAG,CAACF,IAAI,CAACC,GAAG,CAACH,KAAK,CAACnB,MAAM,GAAGQ,MAAM,CAACR,MAAM,EAAEY,IAAI,CAACG,CAAC,CAAC,EAAEG,KAAK,CAAClB,MAAM,GAAGQ,MAAM,CAACR,MAAM,CAAC;EACnG;EACA,IAAIgB,KAAK,CAACjB,IAAI,EAAE;IACdY,MAAM,CAACG,CAAC,GAAGO,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACJ,KAAK,CAACpB,IAAI,GAAGS,MAAM,CAACT,IAAI,EAAEa,IAAI,CAACE,CAAC,CAAC,EAAEI,KAAK,CAACnB,IAAI,GAAGS,MAAM,CAACT,IAAI,CAAC;EAC3F,CAAC,MAAM,IAAIiB,KAAK,CAACf,KAAK,EAAE;IACtBU,MAAM,CAACG,CAAC,GAAGO,IAAI,CAACE,GAAG,CAACF,IAAI,CAACC,GAAG,CAACH,KAAK,CAAClB,KAAK,GAAGO,MAAM,CAACP,KAAK,EAAEW,IAAI,CAACE,CAAC,CAAC,EAAEI,KAAK,CAACjB,KAAK,GAAGO,MAAM,CAACP,KAAK,CAAC;EAC/F;AACF;AAEA,SAASmB,OAAOA,CAACI,IAAU,EAAEC,QAAc,EAAE;EAC3C,KAAK,MAAMC,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;IACrD,IAAI,EAAEA,IAAI,IAAIF,IAAI,CAAC,EAAE;MACnBA,IAAI,CAACE,IAAI,CAAC,GAAGD,QAAQ,CAACC,IAAI,CAAC;IAC7B;EACF;EAEA,OAAOF,IAAI;AACb;AAEA,MAAMC,QAA8B,GAAG;EACrCP,KAAK,EAAE,IAAI;EACXC,KAAK,EAAE,IAAI;EACXX,MAAM,EAAE,IAAI;EACZmB,OAAO,EAAE,KAAK;EACdC,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG;EACpBjC,OAAO;EACPM,OAAO;EACPC,KAAK;EACLT,GAAG;EACH+B;AACF,CAAC;AAAA,IAAAM,QAAA,GAAAD,OAAA,CAAAlD,OAAA,GAEc,IAAAoD,kBAAY,EAACH,aAAa,EAAE,eAAe,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/edges.prod.js b/packages/@interactjs/modifiers/restrict/edges.prod.js new file mode 100644 index 000000000..53f3c5e10 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/edges.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictEdges=exports.default=void 0;var t,e=(t=require("../../utils/extend.prod.js"))&&t.__esModule?t:{default:t},o=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=i(e);if(o&&o.has(t))return o.get(t);var r={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in t)if("default"!==s&&Object.prototype.hasOwnProperty.call(t,s)){var f=n?Object.getOwnPropertyDescriptor(t,s):null;f&&(f.get||f.set)?Object.defineProperty(r,s,f):r[s]=t[s]}return r.default=t,o&&o.set(t,r),r})(require("../../utils/rect.prod.js")),r=require("../base"),n=require("./pointer");function i(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,o=new WeakMap;return(i=t=>t?o:e)(t)}const s={top:1/0,left:1/0,bottom:-1/0,right:-1/0},f={top:-1/0,left:-1/0,bottom:1/0,right:1/0};function a(t,e){for(const o of["top","left","bottom","right"])o in t||(t[o]=e[o]);return t}const l=exports.restrictEdges={noInner:s,noOuter:f,start({interaction:t,startOffset:e,state:r}){const{options:i}=r;let s;if(i){const e=(0,n.getRestrictionRect)(i.offset,t,t.coords.start.page);s=o.rectToXY(e)}s=s||{x:0,y:0},r.offset={top:s.y+e.top,left:s.x+e.left,bottom:s.y-e.bottom,right:s.x-e.right}},set({coords:t,edges:o,interaction:r,state:i}){const{offset:l,options:u}=i;if(!o)return;const p=(0,e.default)({},t),c=(0,n.getRestrictionRect)(u.inner,r,p)||{},d=(0,n.getRestrictionRect)(u.outer,r,p)||{};a(c,s),a(d,f),o.top?t.y=Math.min(Math.max(d.top+l.top,p.y),c.top+l.top):o.bottom&&(t.y=Math.max(Math.min(d.bottom+l.bottom,p.y),c.bottom+l.bottom)),o.left?t.x=Math.min(Math.max(d.left+l.left,p.x),c.left+l.left):o.right&&(t.x=Math.max(Math.min(d.right+l.right,p.x),c.right+l.right))},defaults:{inner:null,outer:null,offset:null,endOnly:!1,enabled:!1}};exports.default=(0,r.makeModifier)(l,"restrictEdges"); +//# sourceMappingURL=edges.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/edges.prod.js.map b/packages/@interactjs/modifiers/restrict/edges.prod.js.map new file mode 100644 index 000000000..eee972889 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/edges.prod.js.map @@ -0,0 +1,75 @@ +{ + "version": 3, + "names": [ + "obj", + "_extendProd", + "require", + "__esModule", + "default", + "rectUtils", + "e", + "r", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "_base", + "_pointer", + "WeakMap", + "noInner", + "top", + "left", + "bottom", + "right", + "noOuter", + "fixRect", + "rect", + "defaults", + "edge", + "restrictEdges", + "exports", + "start", + "interaction", + "startOffset", + "state", + "options", + "offset", + "offsetRect", + "getRestrictionRect", + "coords", + "page", + "rectToXY", + "x", + "y", + "edges", + "extend", + "inner", + "outer", + "Math", + "min", + "max", + "endOnly", + "enabled", + "makeModifier" + ], + "sources": [ + "edges.ts" + ], + "sourcesContent": [ + "// This modifier adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\n RestrictEdgesOptions,\n {\n inner: Rect\n outer: Rect\n offset: RestrictEdgesOptions['offset']\n }\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start({ interaction, startOffset, state }: ModifierArg) {\n const { options } = state\n let offset: Point\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set({ coords, edges, interaction, state }: ModifierArg) {\n const { offset, options } = state\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n } else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n } else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect(rect: Rect, defaults: Rect) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/pointer.d.ts b/packages/@interactjs/modifiers/restrict/pointer.d.ts new file mode 100644 index 000000000..11a9c7100 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/pointer.d.ts @@ -0,0 +1,27 @@ +import type Interaction from '@interactjs/core/Interaction'; +import type { RectResolvable, Rect, Point } from '@interactjs/core/types'; +import type { ModifierArg, ModifierModule, ModifierState } from '../types'; +export interface RestrictOptions { + restriction: RectResolvable<[number, number, Interaction]>; + elementRect: Rect; + offset: Rect; + endOnly: boolean; + enabled?: boolean; +} +export type RestrictState = ModifierState; +export declare function getRestrictionRect(value: RectResolvable<[number, number, Interaction]>, interaction: Interaction, coords?: Point): Rect; +declare const restrict: ModifierModule; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: RestrictOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => unknown; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; +}; +export default _default; +export { restrict }; diff --git a/packages/@interactjs/modifiers/restrict/pointer.js b/packages/@interactjs/modifiers/restrict/pointer.js new file mode 100644 index 000000000..60229720a --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/pointer.js @@ -0,0 +1,91 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.getRestrictionRect = getRestrictionRect; +exports.restrict = void 0; +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _is = _interopRequireDefault(require("../../utils/is.js")); +var rectUtils = _interopRequireWildcard(require("../../utils/rect.js")); +var _base = require("../base"); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function start({ + rect, + startOffset, + state, + interaction, + pageCoords +}) { + const { + options + } = state; + const { + elementRect + } = options; + const offset = (0, _extend.default)({ + left: 0, + top: 0, + right: 0, + bottom: 0 + }, options.offset || {}); + if (rect && elementRect) { + const restriction = getRestrictionRect(options.restriction, interaction, pageCoords); + if (restriction) { + const widthDiff = restriction.right - restriction.left - rect.width; + const heightDiff = restriction.bottom - restriction.top - rect.height; + if (widthDiff < 0) { + offset.left += widthDiff; + offset.right += widthDiff; + } + if (heightDiff < 0) { + offset.top += heightDiff; + offset.bottom += heightDiff; + } + } + offset.left += startOffset.left - rect.width * elementRect.left; + offset.top += startOffset.top - rect.height * elementRect.top; + offset.right += startOffset.right - rect.width * (1 - elementRect.right); + offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom); + } + state.offset = offset; +} +function set({ + coords, + interaction, + state +}) { + const { + options, + offset + } = state; + const restriction = getRestrictionRect(options.restriction, interaction, coords); + if (!restriction) return; + const rect = rectUtils.xywhToTlbr(restriction); + coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left); + coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top); +} +function getRestrictionRect(value, interaction, coords) { + if (_is.default.func(value)) { + return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction]); + } else { + return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element); + } +} +const defaults = { + restriction: null, + elementRect: null, + offset: null, + endOnly: false, + enabled: false +}; +const restrict = exports.restrict = { + start, + set, + defaults +}; +var _default = exports.default = (0, _base.makeModifier)(restrict, 'restrict'); +//# sourceMappingURL=pointer.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/pointer.js.map b/packages/@interactjs/modifiers/restrict/pointer.js.map new file mode 100644 index 000000000..edc167ba2 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/pointer.js.map @@ -0,0 +1,81 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "_is", + "rectUtils", + "_interopRequireWildcard", + "_base", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "start", + "rect", + "startOffset", + "state", + "interaction", + "pageCoords", + "options", + "elementRect", + "offset", + "extend", + "left", + "top", + "right", + "bottom", + "restriction", + "getRestrictionRect", + "widthDiff", + "width", + "heightDiff", + "height", + "coords", + "xywhToTlbr", + "x", + "Math", + "max", + "min", + "y", + "value", + "is", + "func", + "resolveRectLike", + "interactable", + "element", + "defaults", + "endOnly", + "enabled", + "restrict", + "exports", + "_default", + "makeModifier" + ], + "sources": [ + "pointer.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: RectResolvable<[number, number, Interaction]>\n // what part of self is allowed to drag over\n elementRect: Rect\n offset: Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\n RestrictOptions,\n {\n offset: Rect\n }\n>\n\nfunction start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Rect = extend(\n {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n options.offset || {},\n )\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = restriction.right - restriction.left - rect.width\n const heightDiff = restriction.bottom - restriction.top - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - rect.width * elementRect.left\n offset.top += startOffset.top - rect.height * elementRect.top\n\n offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n }\n\n state.offset = offset\n}\n\nfunction set({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) return\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect(\n value: RectResolvable<[number, number, Interaction]>,\n interaction: Interaction,\n coords?: Point,\n) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n coords.x,\n coords.y,\n interaction,\n ])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/pointer.prod.js b/packages/@interactjs/modifiers/restrict/pointer.prod.js new file mode 100644 index 000000000..30835f0a3 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/pointer.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.getRestrictionRect=s,exports.restrict=void 0;var t=n(require("../../utils/extend.prod.js")),e=n(require("../../utils/is.prod.js")),r=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var r=i(e);if(r&&r.has(t))return r.get(t);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in t)if("default"!==s&&Object.prototype.hasOwnProperty.call(t,s)){var l=n?Object.getOwnPropertyDescriptor(t,s):null;l&&(l.get||l.set)?Object.defineProperty(o,s,l):o[s]=t[s]}return o.default=t,r&&r.set(t,o),o})(require("../../utils/rect.prod.js")),o=require("../base");function i(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(i=t=>t?r:e)(t)}function n(t){return t&&t.__esModule?t:{default:t}}function s(t,o,i){return e.default.func(t)?r.resolveRectLike(t,o.interactable,o.element,[i.x,i.y,o]):r.resolveRectLike(t,o.interactable,o.element)}const l=exports.restrict={start({rect:e,startOffset:r,state:o,interaction:i,pageCoords:n}){const{options:l}=o,{elementRect:f}=l,a=(0,t.default)({left:0,top:0,right:0,bottom:0},l.offset||{});if(e&&f){const t=s(l.restriction,i,n);if(t){const r=t.right-t.left-e.width,o=t.bottom-t.top-e.height;r<0&&(a.left+=r,a.right+=r),o<0&&(a.top+=o,a.bottom+=o)}a.left+=r.left-e.width*f.left,a.top+=r.top-e.height*f.top,a.right+=r.right-e.width*(1-f.right),a.bottom+=r.bottom-e.height*(1-f.bottom)}o.offset=a},set({coords:t,interaction:e,state:o}){const{options:i,offset:n}=o,l=s(i.restriction,e,t);if(!l)return;const f=r.xywhToTlbr(l);t.x=Math.max(Math.min(f.right-n.right,t.x),f.left+n.left),t.y=Math.max(Math.min(f.bottom-n.bottom,t.y),f.top+n.top)},defaults:{restriction:null,elementRect:null,offset:null,endOnly:!1,enabled:!1}};exports.default=(0,o.makeModifier)(l,"restrict"); +//# sourceMappingURL=pointer.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/pointer.prod.js.map b/packages/@interactjs/modifiers/restrict/pointer.prod.js.map new file mode 100644 index 000000000..f92ee19c2 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/pointer.prod.js.map @@ -0,0 +1,80 @@ +{ + "version": 3, + "names": [ + "_extendProd", + "_interopRequireDefault", + "require", + "_isProd", + "rectUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "_base", + "WeakMap", + "obj", + "getRestrictionRect", + "value", + "interaction", + "coords", + "is", + "func", + "resolveRectLike", + "interactable", + "element", + "x", + "y", + "restrict", + "exports", + "start", + "rect", + "startOffset", + "state", + "pageCoords", + "options", + "elementRect", + "offset", + "extend", + "left", + "top", + "right", + "bottom", + "restriction", + "widthDiff", + "width", + "heightDiff", + "height", + "xywhToTlbr", + "Math", + "max", + "min", + "defaults", + "endOnly", + "enabled", + "makeModifier" + ], + "sources": [ + "pointer.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: RectResolvable<[number, number, Interaction]>\n // what part of self is allowed to drag over\n elementRect: Rect\n offset: Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\n RestrictOptions,\n {\n offset: Rect\n }\n>\n\nfunction start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Rect = extend(\n {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n options.offset || {},\n )\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = restriction.right - restriction.left - rect.width\n const heightDiff = restriction.bottom - restriction.top - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - rect.width * elementRect.left\n offset.top += startOffset.top - rect.height * elementRect.top\n\n offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n }\n\n state.offset = offset\n}\n\nfunction set({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) return\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect(\n value: RectResolvable<[number, number, Interaction]>,\n interaction: Interaction,\n coords?: Point,\n) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n coords.x,\n coords.y,\n interaction,\n ])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/rect.d.ts b/packages/@interactjs/modifiers/restrict/rect.d.ts new file mode 100644 index 000000000..a33457ae9 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/rect.d.ts @@ -0,0 +1,45 @@ +declare const restrictRect: { + start: (arg: import("../types").ModifierArg) => void; + set: (arg: import("../types").ModifierArg) => unknown; + defaults: import("./pointer").RestrictOptions & { + elementRect: { + top: number; + left: number; + bottom: number; + right: number; + }; + }; +}; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: import("./pointer").RestrictOptions & { + elementRect: { + top: number; + left: number; + bottom: number; + right: number; + }; + }; + _methods: { + start: (arg: import("../types").ModifierArg) => void; + set: (arg: import("../types").ModifierArg) => unknown; + beforeEnd: (arg: import("../types").ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: import("../types").ModifierArg) => void; + }; +}; +export default _default; +export { restrictRect }; diff --git a/packages/@interactjs/modifiers/restrict/rect.js b/packages/@interactjs/modifiers/restrict/rect.js new file mode 100644 index 000000000..4e6a1c14d --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/rect.js @@ -0,0 +1,28 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.restrictRect = exports.default = void 0; +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _base = require("../base"); +var _pointer = require("./pointer"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const defaults = (0, _extend.default)({ + get elementRect() { + return { + top: 0, + left: 0, + bottom: 1, + right: 1 + }; + }, + set elementRect(_) {} +}, _pointer.restrict.defaults); +const restrictRect = exports.restrictRect = { + start: _pointer.restrict.start, + set: _pointer.restrict.set, + defaults +}; +var _default = exports.default = (0, _base.makeModifier)(restrictRect, 'restrictRect'); +//# sourceMappingURL=rect.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/rect.js.map b/packages/@interactjs/modifiers/restrict/rect.js.map new file mode 100644 index 000000000..bec344efd --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/rect.js.map @@ -0,0 +1,35 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "_base", + "_pointer", + "obj", + "__esModule", + "default", + "defaults", + "extend", + "elementRect", + "top", + "left", + "bottom", + "right", + "_", + "restrict", + "restrictRect", + "exports", + "start", + "set", + "_default", + "makeModifier" + ], + "sources": [ + "rect.ts" + ], + "sourcesContent": [ + "import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n {\n get elementRect() {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect(_) {},\n },\n restrict.defaults,\n)\n\nconst restrictRect = {\n start: restrict.start,\n set: restrict.set,\n defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n" + ], + "mappings": ";;;;;;AAAA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AAAoC,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEpC,MAAMG,QAAQ,GAAG,IAAAC,eAAM,EACrB;EACE,IAAIC,WAAWA,CAAA,EAAG;IAChB,OAAO;MAAEC,GAAG,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,MAAM,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAC;EACjD,CAAC;EACD,IAAIJ,WAAWA,CAACK,CAAC,EAAE,CAAC;AACtB,CAAC,EACDC,iBAAQ,CAACR,QACX,CAAC;AAED,MAAMS,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACnBE,KAAK,EAAEH,iBAAQ,CAACG,KAAK;EACrBC,GAAG,EAAEJ,iBAAQ,CAACI,GAAG;EACjBZ;AACF,CAAC;AAAA,IAAAa,QAAA,GAAAH,OAAA,CAAAX,OAAA,GAEc,IAAAe,kBAAY,EAACL,YAAY,EAAE,cAAc,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/rect.prod.js b/packages/@interactjs/modifiers/restrict/rect.prod.js new file mode 100644 index 000000000..f2f050ac1 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/rect.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictRect=exports.default=void 0;var e,t=(e=require("../../utils/extend.prod.js"))&&e.__esModule?e:{default:e},r=require("../base"),s=require("./pointer");const i=(0,t.default)({get elementRect(){return{top:0,left:0,bottom:1,right:1}},set elementRect(e){}},s.restrict.defaults),o=exports.restrictRect={start:s.restrict.start,set:s.restrict.set,defaults:i};exports.default=(0,r.makeModifier)(o,"restrictRect"); +//# sourceMappingURL=rect.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/rect.prod.js.map b/packages/@interactjs/modifiers/restrict/rect.prod.js.map new file mode 100644 index 000000000..5d264be93 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/rect.prod.js.map @@ -0,0 +1,33 @@ +{ + "version": 3, + "names": [ + "obj", + "_extendProd", + "require", + "__esModule", + "default", + "_base", + "_pointer", + "defaults", + "extend", + "elementRect", + "top", + "left", + "bottom", + "right", + "_", + "restrict", + "restrictRect", + "exports", + "start", + "set", + "makeModifier" + ], + "sources": [ + "rect.ts" + ], + "sourcesContent": [ + "import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n {\n get elementRect() {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect(_) {},\n },\n restrict.defaults,\n)\n\nconst restrictRect = {\n start: restrict.start,\n set: restrict.set,\n defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n" + ], + "mappings": "mGAAA,IAIoCA,EAJpCC,GAIoCD,EAJpCE,QAAA,gCAIoCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAFpCK,EAAAH,QAAA,WAEAI,EAAAJ,QAAA,aAEA,MAAMK,GAAW,EAAAC,WACf,CACE,eAAIC,GACF,MAAO,CAAEC,IAAK,EAAGC,KAAM,EAAGC,OAAQ,EAAGC,MAAO,EAC9C,EACA,eAAIJ,CAAYK,GAAI,GAEtBC,WAASR,UAGLS,EAAYC,QAAAD,aAAG,CACnBE,MAAOH,WAASG,MAChBC,IAAKJ,WAASI,IACdZ,YACDU,QAAAb,SAEc,EAAAgB,gBAAaJ,EAAc" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/size.d.ts b/packages/@interactjs/modifiers/restrict/size.d.ts new file mode 100644 index 000000000..461b767a3 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/size.d.ts @@ -0,0 +1,36 @@ +import type { Point, Rect, Size } from '@interactjs/core/types'; +import type { ModifierArg, ModifierState } from '../types'; +import type { RestrictEdgesState } from './edges'; +import type { RestrictOptions } from './pointer'; +export interface RestrictSizeOptions { + min?: Size | Point | RestrictOptions['restriction']; + max?: Size | Point | RestrictOptions['restriction']; + endOnly: boolean; + enabled?: boolean; +} +declare function start(arg: ModifierArg): void; +export type RestrictSizeState = RestrictEdgesState & ModifierState; +declare function set(arg: ModifierArg): void; +declare const restrictSize: { + start: typeof start; + set: typeof set; + defaults: RestrictSizeOptions; +}; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: RestrictSizeOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => void; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; +}; +export default _default; +export { restrictSize }; diff --git a/packages/@interactjs/modifiers/restrict/size.js b/packages/@interactjs/modifiers/restrict/size.js new file mode 100644 index 000000000..f8415ae18 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/size.js @@ -0,0 +1,75 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.restrictSize = exports.default = void 0; +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var rectUtils = _interopRequireWildcard(require("../../utils/rect.js")); +var _base = require("../base"); +var _edges = require("./edges"); +var _pointer = require("./pointer"); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const noMin = { + width: -Infinity, + height: -Infinity +}; +const noMax = { + width: +Infinity, + height: +Infinity +}; +function start(arg) { + return _edges.restrictEdges.start(arg); +} +function set(arg) { + const { + interaction, + state, + rect, + edges + } = arg; + const { + options + } = state; + if (!edges) { + return; + } + const minSize = rectUtils.tlbrToXywh((0, _pointer.getRestrictionRect)(options.min, interaction, arg.coords)) || noMin; + const maxSize = rectUtils.tlbrToXywh((0, _pointer.getRestrictionRect)(options.max, interaction, arg.coords)) || noMax; + state.options = { + endOnly: options.endOnly, + inner: (0, _extend.default)({}, _edges.restrictEdges.noInner), + outer: (0, _extend.default)({}, _edges.restrictEdges.noOuter) + }; + if (edges.top) { + state.options.inner.top = rect.bottom - minSize.height; + state.options.outer.top = rect.bottom - maxSize.height; + } else if (edges.bottom) { + state.options.inner.bottom = rect.top + minSize.height; + state.options.outer.bottom = rect.top + maxSize.height; + } + if (edges.left) { + state.options.inner.left = rect.right - minSize.width; + state.options.outer.left = rect.right - maxSize.width; + } else if (edges.right) { + state.options.inner.right = rect.left + minSize.width; + state.options.outer.right = rect.left + maxSize.width; + } + _edges.restrictEdges.set(arg); + state.options = options; +} +const defaults = { + min: null, + max: null, + endOnly: false, + enabled: false +}; +const restrictSize = exports.restrictSize = { + start, + set, + defaults +}; +var _default = exports.default = (0, _base.makeModifier)(restrictSize, 'restrictSize'); +//# sourceMappingURL=size.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/size.js.map b/packages/@interactjs/modifiers/restrict/size.js.map new file mode 100644 index 000000000..ab764f856 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/size.js.map @@ -0,0 +1,78 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "rectUtils", + "_interopRequireWildcard", + "_base", + "_edges", + "_pointer", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "noMin", + "width", + "Infinity", + "height", + "noMax", + "start", + "arg", + "restrictEdges", + "interaction", + "state", + "rect", + "edges", + "options", + "minSize", + "tlbrToXywh", + "getRestrictionRect", + "min", + "coords", + "maxSize", + "max", + "endOnly", + "inner", + "extend", + "noInner", + "outer", + "noOuter", + "top", + "bottom", + "left", + "right", + "defaults", + "enabled", + "restrictSize", + "exports", + "_default", + "makeModifier" + ], + "sources": [ + "size.ts" + ], + "sourcesContent": [ + "import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Size | Point | RestrictOptions['restriction']\n max?: Size | Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start(arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\n ModifierState<\n RestrictSizeOptions & { inner: Rect; outer: Rect },\n {\n min: Rect\n max: Rect\n }\n >\n\nfunction set(arg: ModifierArg) {\n const { interaction, state, rect, edges } = arg\n const { options } = state\n\n if (!edges) {\n return\n }\n\n const minSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n const maxSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n } else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n } else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/size.prod.js b/packages/@interactjs/modifiers/restrict/size.prod.js new file mode 100644 index 000000000..dfd8dfe95 --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/size.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.restrictSize=exports.default=void 0;var t,e=(t=require("../../utils/extend.prod.js"))&&t.__esModule?t:{default:t},r=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var r=s(e);if(r&&r.has(t))return r.get(t);var o={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in t)if("default"!==n&&Object.prototype.hasOwnProperty.call(t,n)){var u=i?Object.getOwnPropertyDescriptor(t,n):null;u&&(u.get||u.set)?Object.defineProperty(o,n,u):o[n]=t[n]}return o.default=t,r&&r.set(t,o),o})(require("../../utils/rect.prod.js")),o=require("../base"),i=require("./edges"),n=require("./pointer");function s(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(s=t=>t?r:e)(t)}const u={width:-1/0,height:-1/0},p={width:1/0,height:1/0},l=exports.restrictSize={start:t=>i.restrictEdges.start(t),set(t){const{interaction:o,state:s,rect:l,edges:d}=t,{options:a}=s;if(!d)return;const c=r.tlbrToXywh((0,n.getRestrictionRect)(a.min,o,t.coords))||u,f=r.tlbrToXywh((0,n.getRestrictionRect)(a.max,o,t.coords))||p;s.options={endOnly:a.endOnly,inner:(0,e.default)({},i.restrictEdges.noInner),outer:(0,e.default)({},i.restrictEdges.noOuter)},d.top?(s.options.inner.top=l.bottom-c.height,s.options.outer.top=l.bottom-f.height):d.bottom&&(s.options.inner.bottom=l.top+c.height,s.options.outer.bottom=l.top+f.height),d.left?(s.options.inner.left=l.right-c.width,s.options.outer.left=l.right-f.width):d.right&&(s.options.inner.right=l.left+c.width,s.options.outer.right=l.left+f.width),i.restrictEdges.set(t),s.options=a},defaults:{min:null,max:null,endOnly:!1,enabled:!1}};exports.default=(0,o.makeModifier)(l,"restrictSize"); +//# sourceMappingURL=size.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/restrict/size.prod.js.map b/packages/@interactjs/modifiers/restrict/size.prod.js.map new file mode 100644 index 000000000..9f01b003f --- /dev/null +++ b/packages/@interactjs/modifiers/restrict/size.prod.js.map @@ -0,0 +1,75 @@ +{ + "version": 3, + "names": [ + "obj", + "_extendProd", + "require", + "__esModule", + "default", + "rectUtils", + "e", + "r", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "_base", + "_edges", + "_pointer", + "WeakMap", + "noMin", + "width", + "height", + "noMax", + "restrictSize", + "exports", + "start", + "arg", + "restrictEdges", + "interaction", + "state", + "rect", + "edges", + "options", + "minSize", + "tlbrToXywh", + "getRestrictionRect", + "min", + "coords", + "maxSize", + "max", + "endOnly", + "inner", + "extend", + "noInner", + "outer", + "noOuter", + "top", + "bottom", + "left", + "right", + "defaults", + "enabled", + "makeModifier" + ], + "sources": [ + "size.ts" + ], + "sourcesContent": [ + "import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Size | Point | RestrictOptions['restriction']\n max?: Size | Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start(arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\n ModifierState<\n RestrictSizeOptions & { inner: Rect; outer: Rect },\n {\n min: Rect\n max: Rect\n }\n >\n\nfunction set(arg: ModifierArg) {\n const { interaction, state, rect, edges } = arg\n const { options } = state\n\n if (!edges) {\n return\n }\n\n const minSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n const maxSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n } else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n } else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n" + ], + "mappings": "mGACA,IAS8CA,EAT9CC,GAS8CD,EAT9CE,QAAA,gCAS8CF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAR9CK,EAQ8C,EAAAC,EAAAC,KAAA,GAAAD,KAAAH,WAAA,OAAAG,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAF,QAAAE,GAAA,IAAAE,EAAAC,EAAAF,GAAA,GAAAC,KAAAE,IAAAJ,GAAA,OAAAE,EAAAG,IAAAL,GAAA,IAAAM,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAZ,EAAA,eAAAY,GAAAH,OAAAI,UAAAC,eAAAC,KAAAf,EAAAY,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAX,EAAAY,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAZ,EAAAY,EAAA,QAAAN,EAAAR,QAAAE,EAAAE,KAAAe,IAAAjB,EAAAM,IAAA,EAR9CY,CAAAtB,QAAA,6BAEAuB,EAAAvB,QAAA,WAIAwB,EAAAxB,QAAA,WAEAyB,EAAAzB,QAAA,aAA8C,SAAAO,EAAAH,GAAA,sBAAAsB,QAAA,gBAAArB,EAAA,IAAAqB,QAAApB,EAAA,IAAAoB,QAAA,OAAAnB,EAAAH,KAAAE,EAAAD,GAAAD,EAAA,CAE9C,MAAMuB,EAAQ,CAAEC,OAAO,IAAWC,QAAQ,KACpCC,EAAQ,CAAEF,MAAO,IAAWC,OAAQ,KAoEpCE,EAAYC,QAAAD,aAAG,CACnBE,MA5DaC,GACNC,gBAAcF,MAAMC,GA4D3Bb,IAhDWa,GACX,MAAME,YAAEA,EAAWC,MAAEA,EAAKC,KAAEA,EAAIC,MAAEA,GAAUL,GACtCM,QAAEA,GAAYH,EAEpB,IAAKE,EACH,OAGF,MAAME,EACJtC,EAAUuC,YAAW,EAAAC,sBAAmBH,EAAQI,IAAYR,EAAaF,EAAIW,UAAYlB,EACrFmB,EACJ3C,EAAUuC,YAAW,EAAAC,sBAAmBH,EAAQO,IAAYX,EAAaF,EAAIW,UAAYf,EAE3FO,EAAMG,QAAU,CACdQ,QAASR,EAAQQ,QACjBC,OAAO,EAAAC,WAAO,CAAC,EAAGf,gBAAcgB,SAChCC,OAAO,EAAAF,WAAO,CAAC,EAAGf,gBAAckB,UAG9Bd,EAAMe,KACRjB,EAAMG,QAAQS,MAAMK,IAAMhB,EAAKiB,OAASd,EAAQZ,OAChDQ,EAAMG,QAAQY,MAAME,IAAMhB,EAAKiB,OAAST,EAAQjB,QACvCU,EAAMgB,SACflB,EAAMG,QAAQS,MAAMM,OAASjB,EAAKgB,IAAMb,EAAQZ,OAChDQ,EAAMG,QAAQY,MAAMG,OAASjB,EAAKgB,IAAMR,EAAQjB,QAE9CU,EAAMiB,MACRnB,EAAMG,QAAQS,MAAMO,KAAOlB,EAAKmB,MAAQhB,EAAQb,MAChDS,EAAMG,QAAQY,MAAMI,KAAOlB,EAAKmB,MAAQX,EAAQlB,OACvCW,EAAMkB,QACfpB,EAAMG,QAAQS,MAAMQ,MAAQnB,EAAKkB,KAAOf,EAAQb,MAChDS,EAAMG,QAAQY,MAAMK,MAAQnB,EAAKkB,KAAOV,EAAQlB,OAGlDO,gBAAcd,IAAIa,GAElBG,EAAMG,QAAUA,CAClB,EAYEkB,SAVoC,CACpCd,IAAK,KACLG,IAAK,KACLC,SAAS,EACTW,SAAS,IAOV3B,QAAA9B,SAEc,EAAA0D,gBAAa7B,EAAc" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/rubberband/rubberband.d.ts b/packages/@interactjs/modifiers/rubberband/rubberband.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/rubberband/rubberband.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/rubberband/rubberband.js b/packages/@interactjs/modifiers/rubberband/rubberband.js new file mode 100644 index 000000000..47fe6d2aa --- /dev/null +++ b/packages/@interactjs/modifiers/rubberband/rubberband.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function () { + return _noop.default; + } +}); +var _noop = _interopRequireDefault(require("../noop")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +//# sourceMappingURL=rubberband.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/rubberband/rubberband.js.map b/packages/@interactjs/modifiers/rubberband/rubberband.js.map new file mode 100644 index 000000000..72a0bff0f --- /dev/null +++ b/packages/@interactjs/modifiers/rubberband/rubberband.js.map @@ -0,0 +1,18 @@ +{ + "version": 3, + "names": [ + "_noop", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default" + ], + "sources": [ + "rubberband.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": ";;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/rubberband/rubberband.prod.js b/packages/@interactjs/modifiers/rubberband/rubberband.prod.js new file mode 100644 index 000000000..b793f069c --- /dev/null +++ b/packages/@interactjs/modifiers/rubberband/rubberband.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r.default});var e,r=(e=require("../noop"))&&e.__esModule?e:{default:e}; +//# sourceMappingURL=rubberband.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/rubberband/rubberband.prod.js.map b/packages/@interactjs/modifiers/rubberband/rubberband.prod.js.map new file mode 100644 index 000000000..96c44811b --- /dev/null +++ b/packages/@interactjs/modifiers/rubberband/rubberband.prod.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "obj", + "_noop", + "require", + "__esModule", + "default" + ], + "sources": [ + "rubberband.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": "kIAAA,IAAiCA,EAAjCC,GAAiCD,EAAjCE,QAAA,aAAiCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/rubberband/rubberband.stub.d.ts b/packages/@interactjs/modifiers/rubberband/rubberband.stub.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/rubberband/rubberband.stub.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/snap/edges.d.ts b/packages/@interactjs/modifiers/snap/edges.d.ts new file mode 100644 index 000000000..1819ad6aa --- /dev/null +++ b/packages/@interactjs/modifiers/snap/edges.d.ts @@ -0,0 +1,63 @@ +/** + * @module modifiers/snapEdges + * + * @description + * This modifier allows snapping of the edges of targets during resize + * interactions. + * + * ```js + * interact(target).resizable({ + * snapEdges: { + * targets: [interact.snappers.grid({ x: 100, y: 50 })], + * }, + * }) + * + * interact(target).resizable({ + * snapEdges: { + * targets: [ + * interact.snappers.grid({ + * top: 50, + * left: 50, + * bottom: 100, + * right: 100, + * }), + * ], + * }, + * }) + * ``` + */ +import type { ModifierArg, ModifierModule } from '../types'; +import type { SnapOptions, SnapState } from './pointer'; +import { snapSize } from './size'; +export type SnapEdgesOptions = Pick; +declare const snapEdges: ModifierModule>; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: SnapEdgesOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: ModifierArg) => void; + }; +}; +export default _default; +export { snapEdges }; diff --git a/packages/@interactjs/modifiers/snap/edges.js b/packages/@interactjs/modifiers/snap/edges.js new file mode 100644 index 000000000..ce8037861 --- /dev/null +++ b/packages/@interactjs/modifiers/snap/edges.js @@ -0,0 +1,64 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.snapEdges = exports.default = void 0; +var _clone = _interopRequireDefault(require("../../utils/clone.js")); +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _base = require("../base"); +var _size = require("./size"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * @module modifiers/snapEdges + * + * @description + * This modifier allows snapping of the edges of targets during resize + * interactions. + * + * ```js + * interact(target).resizable({ + * snapEdges: { + * targets: [interact.snappers.grid({ x: 100, y: 50 })], + * }, + * }) + * + * interact(target).resizable({ + * snapEdges: { + * targets: [ + * interact.snappers.grid({ + * top: 50, + * left: 50, + * bottom: 100, + * right: 100, + * }), + * ], + * }, + * }) + * ``` + */ + +function start(arg) { + const { + edges + } = arg; + if (!edges) { + return null; + } + arg.state.targetFields = arg.state.targetFields || [[edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom']]; + return _size.snapSize.start(arg); +} +const snapEdges = exports.snapEdges = { + start, + set: _size.snapSize.set, + defaults: (0, _extend.default)((0, _clone.default)(_size.snapSize.defaults), { + targets: undefined, + range: undefined, + offset: { + x: 0, + y: 0 + } + }) +}; +var _default = exports.default = (0, _base.makeModifier)(snapEdges, 'snapEdges'); +//# sourceMappingURL=edges.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/edges.js.map b/packages/@interactjs/modifiers/snap/edges.js.map new file mode 100644 index 000000000..c2825063d --- /dev/null +++ b/packages/@interactjs/modifiers/snap/edges.js.map @@ -0,0 +1,43 @@ +{ + "version": 3, + "names": [ + "_clone", + "_interopRequireDefault", + "require", + "_extend", + "_base", + "_size", + "obj", + "__esModule", + "default", + "start", + "arg", + "edges", + "state", + "targetFields", + "left", + "top", + "snapSize", + "snapEdges", + "exports", + "set", + "defaults", + "extend", + "clone", + "targets", + "undefined", + "range", + "offset", + "x", + "y", + "_default", + "makeModifier" + ], + "sources": [ + "edges.ts" + ], + "sourcesContent": [ + "/**\n * @module modifiers/snapEdges\n *\n * @description\n * This modifier allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { edges } = arg\n\n if (!edges) {\n return null\n }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule> = {\n start,\n set: snapSize.set,\n defaults: extend(clone(snapSize.defaults), {\n targets: undefined,\n range: undefined,\n offset: { x: 0, y: 0 },\n } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n" + ], + "mappings": ";;;;;;AA6BA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,KAAA,GAAAF,OAAA;AAIA,IAAAG,KAAA,GAAAH,OAAA;AAAiC,SAAAD,uBAAAK,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AApCjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA,SAASG,KAAKA,CAACC,GAA2B,EAAE;EAC1C,MAAM;IAAEC;EAAM,CAAC,GAAGD,GAAG;EAErB,IAAI,CAACC,KAAK,EAAE;IACV,OAAO,IAAI;EACb;EAEAD,GAAG,CAACE,KAAK,CAACC,YAAY,GAAGH,GAAG,CAACE,KAAK,CAACC,YAAY,IAAI,CACjD,CAACF,KAAK,CAACG,IAAI,GAAG,MAAM,GAAG,OAAO,EAAEH,KAAK,CAACI,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC,CAC9D;EAED,OAAOC,cAAQ,CAACP,KAAK,CAACC,GAAG,CAAC;AAC5B;AAEA,MAAMO,SAAuF,GAAAC,OAAA,CAAAD,SAAA,GAAG;EAC9FR,KAAK;EACLU,GAAG,EAAEH,cAAQ,CAACG,GAAG;EACjBC,QAAQ,EAAE,IAAAC,eAAM,EAAC,IAAAC,cAAK,EAACN,cAAQ,CAACI,QAAQ,CAAC,EAAE;IACzCG,OAAO,EAAEC,SAAS;IAClBC,KAAK,EAAED,SAAS;IAChBE,MAAM,EAAE;MAAEC,CAAC,EAAE,CAAC;MAAEC,CAAC,EAAE;IAAE;EACvB,CAAU;AACZ,CAAC;AAAA,IAAAC,QAAA,GAAAX,OAAA,CAAAV,OAAA,GAEc,IAAAsB,kBAAY,EAACb,SAAS,EAAE,WAAW,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/edges.prod.js b/packages/@interactjs/modifiers/snap/edges.prod.js new file mode 100644 index 000000000..bb125f91b --- /dev/null +++ b/packages/@interactjs/modifiers/snap/edges.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.snapEdges=exports.default=void 0;var e=a(require("../../utils/clone.prod.js")),t=a(require("../../utils/extend.prod.js")),s=require("../base"),r=require("./size");function a(e){return e&&e.__esModule?e:{default:e}}const d=exports.snapEdges={start(e){const{edges:t}=e;return t?(e.state.targetFields=e.state.targetFields||[[t.left?"left":"right",t.top?"top":"bottom"]],r.snapSize.start(e)):null},set:r.snapSize.set,defaults:(0,t.default)((0,e.default)(r.snapSize.defaults),{targets:void 0,range:void 0,offset:{x:0,y:0}})};exports.default=(0,s.makeModifier)(d,"snapEdges"); +//# sourceMappingURL=edges.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/edges.prod.js.map b/packages/@interactjs/modifiers/snap/edges.prod.js.map new file mode 100644 index 000000000..94ef4868a --- /dev/null +++ b/packages/@interactjs/modifiers/snap/edges.prod.js.map @@ -0,0 +1,42 @@ +{ + "version": 3, + "names": [ + "_cloneProd", + "_interopRequireDefault", + "require", + "_extendProd", + "_base", + "_size", + "obj", + "__esModule", + "default", + "snapEdges", + "exports", + "start", + "arg", + "edges", + "state", + "targetFields", + "left", + "top", + "snapSize", + "set", + "defaults", + "extend", + "clone", + "targets", + "undefined", + "range", + "offset", + "x", + "y", + "makeModifier" + ], + "sources": [ + "edges.ts" + ], + "sourcesContent": [ + "/**\n * @module modifiers/snapEdges\n *\n * @description\n * This modifier allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { edges } = arg\n\n if (!edges) {\n return null\n }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule> = {\n start,\n set: snapSize.set,\n defaults: extend(clone(snapSize.defaults), {\n targets: undefined,\n range: undefined,\n offset: { x: 0, y: 0 },\n } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n" + ], + "mappings": "gGA6BA,IAAAA,EAAAC,EAAAC,QAAA,8BACAC,EAAAF,EAAAC,QAAA,+BAEAE,EAAAF,QAAA,WAIAG,EAAAH,QAAA,UAAiC,SAAAD,EAAAK,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAkBjC,MAAMG,EAAuFC,QAAAD,UAAG,CAC9FE,MAfaC,GACb,MAAMC,MAAEA,GAAUD,EAElB,OAAKC,GAILD,EAAIE,MAAMC,aAAeH,EAAIE,MAAMC,cAAgB,CACjD,CAACF,EAAMG,KAAO,OAAS,QAASH,EAAMI,IAAM,MAAQ,WAG/CC,WAASP,MAAMC,IAPb,IAQX,EAIEO,IAAKD,WAASC,IACdC,UAAU,EAAAC,YAAO,EAAAC,WAAMJ,WAASE,UAAW,CACzCG,aAASC,EACTC,WAAOD,EACPE,OAAQ,CAAEC,EAAG,EAAGC,EAAG,MAEtBlB,QAAAF,SAEc,EAAAqB,gBAAapB,EAAW" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/pointer.d.ts b/packages/@interactjs/modifiers/snap/pointer.d.ts new file mode 100644 index 000000000..b2c7badff --- /dev/null +++ b/packages/@interactjs/modifiers/snap/pointer.d.ts @@ -0,0 +1,79 @@ +import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'; +import type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'; +import type { ModifierArg, ModifierState } from '../types'; +export interface Offset { + x: number; + y: number; + index: number; + relativePoint?: Point | null; +} +export interface SnapPosition { + x?: number; + y?: number; + range?: number; + offset?: Offset; + [index: string]: any; +} +export type SnapFunction = (x: number, y: number, interaction: InteractionProxy, offset: Offset, index: number) => SnapPosition; +export type SnapTarget = SnapPosition | SnapFunction; +export interface SnapOptions { + targets?: SnapTarget[]; + range?: number; + relativePoints?: Point[]; + offset?: Point | RectResolvable<[Interaction]> | 'startCoords'; + offsetWithOrigin?: boolean; + origin?: RectResolvable<[Element]> | Point; + endOnly?: boolean; + enabled?: boolean; +} +export type SnapState = ModifierState; +declare function start(arg: ModifierArg): void; +declare function set(arg: ModifierArg): { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; +}; +declare const snap: { + start: typeof start; + set: typeof set; + defaults: SnapOptions; +}; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: SnapOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; +}; +export default _default; +export { snap }; diff --git a/packages/@interactjs/modifiers/snap/pointer.js b/packages/@interactjs/modifiers/snap/pointer.js new file mode 100644 index 000000000..0c321ed3e --- /dev/null +++ b/packages/@interactjs/modifiers/snap/pointer.js @@ -0,0 +1,173 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.snap = exports.default = void 0; +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _getOriginXY = _interopRequireDefault(require("../../utils/getOriginXY.js")); +var _hypot = _interopRequireDefault(require("../../utils/hypot.js")); +var _is = _interopRequireDefault(require("../../utils/is.js")); +var _rect = require("../../utils/rect.js"); +var _base = require("../base"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function start(arg) { + const { + interaction, + interactable, + element, + rect, + state, + startOffset + } = arg; + const { + options + } = state; + const origin = options.offsetWithOrigin ? getOrigin(arg) : { + x: 0, + y: 0 + }; + let snapOffset; + if (options.offset === 'startCoords') { + snapOffset = { + x: interaction.coords.start.page.x, + y: interaction.coords.start.page.y + }; + } else { + const offsetRect = (0, _rect.resolveRectLike)(options.offset, interactable, element, [interaction]); + snapOffset = (0, _rect.rectToXY)(offsetRect) || { + x: 0, + y: 0 + }; + snapOffset.x += origin.x; + snapOffset.y += origin.y; + } + const { + relativePoints + } = options; + state.offsets = rect && relativePoints && relativePoints.length ? relativePoints.map((relativePoint, index) => ({ + index, + relativePoint, + x: startOffset.left - rect.width * relativePoint.x + snapOffset.x, + y: startOffset.top - rect.height * relativePoint.y + snapOffset.y + })) : [{ + index: 0, + relativePoint: null, + x: snapOffset.x, + y: snapOffset.y + }]; +} +function set(arg) { + const { + interaction, + coords, + state + } = arg; + const { + options, + offsets + } = state; + const origin = (0, _getOriginXY.default)(interaction.interactable, interaction.element, interaction.prepared.name); + const page = (0, _extend.default)({}, coords); + const targets = []; + if (!options.offsetWithOrigin) { + page.x -= origin.x; + page.y -= origin.y; + } + for (const offset of offsets) { + const relativeX = page.x - offset.x; + const relativeY = page.y - offset.y; + for (let index = 0, len = options.targets.length; index < len; index++) { + const snapTarget = options.targets[index]; + let target; + if (_is.default.func(snapTarget)) { + target = snapTarget(relativeX, relativeY, interaction._proxy, offset, index); + } else { + target = snapTarget; + } + if (!target) { + continue; + } + targets.push({ + x: (_is.default.number(target.x) ? target.x : relativeX) + offset.x, + y: (_is.default.number(target.y) ? target.y : relativeY) + offset.y, + range: _is.default.number(target.range) ? target.range : options.range, + source: snapTarget, + index, + offset + }); + } + } + const closest = { + target: null, + inRange: false, + distance: 0, + range: 0, + delta: { + x: 0, + y: 0 + } + }; + for (const target of targets) { + const range = target.range; + const dx = target.x - page.x; + const dy = target.y - page.y; + const distance = (0, _hypot.default)(dx, dy); + let inRange = distance <= range; + + // Infinite targets count as being out of range + // compared to non infinite ones that are in range + if (range === Infinity && closest.inRange && closest.range !== Infinity) { + inRange = false; + } + if (!closest.target || (inRange ? + // is the closest target in range? + closest.inRange && range !== Infinity ? + // the pointer is relatively deeper in this target + distance / range < closest.distance / closest.range : + // this target has Infinite range and the closest doesn't + range === Infinity && closest.range !== Infinity || + // OR this target is closer that the previous closest + distance < closest.distance : + // The other is not in range and the pointer is closer to this target + !closest.inRange && distance < closest.distance)) { + closest.target = target; + closest.distance = distance; + closest.range = range; + closest.inRange = inRange; + closest.delta.x = dx; + closest.delta.y = dy; + } + } + if (closest.inRange) { + coords.x = closest.target.x; + coords.y = closest.target.y; + } + state.closest = closest; + return closest; +} +function getOrigin(arg) { + const { + element + } = arg.interaction; + const optionsOrigin = (0, _rect.rectToXY)((0, _rect.resolveRectLike)(arg.state.options.origin, null, null, [element])); + const origin = optionsOrigin || (0, _getOriginXY.default)(arg.interactable, element, arg.interaction.prepared.name); + return origin; +} +const defaults = { + range: Infinity, + targets: null, + offset: null, + offsetWithOrigin: true, + origin: null, + relativePoints: null, + endOnly: false, + enabled: false +}; +const snap = exports.snap = { + start, + set, + defaults +}; +var _default = exports.default = (0, _base.makeModifier)(snap, 'snap'); +//# sourceMappingURL=pointer.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/pointer.js.map b/packages/@interactjs/modifiers/snap/pointer.js.map new file mode 100644 index 000000000..796cba63f --- /dev/null +++ b/packages/@interactjs/modifiers/snap/pointer.js.map @@ -0,0 +1,88 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "_getOriginXY", + "_hypot", + "_is", + "_rect", + "_base", + "obj", + "__esModule", + "default", + "start", + "arg", + "interaction", + "interactable", + "element", + "rect", + "state", + "startOffset", + "options", + "origin", + "offsetWithOrigin", + "getOrigin", + "x", + "y", + "snapOffset", + "offset", + "coords", + "page", + "offsetRect", + "resolveRectLike", + "rectToXY", + "relativePoints", + "offsets", + "length", + "map", + "relativePoint", + "index", + "left", + "width", + "top", + "height", + "set", + "getOriginXY", + "prepared", + "name", + "extend", + "targets", + "relativeX", + "relativeY", + "len", + "snapTarget", + "target", + "is", + "func", + "_proxy", + "push", + "number", + "range", + "source", + "closest", + "inRange", + "distance", + "delta", + "dx", + "dy", + "hypot", + "Infinity", + "optionsOrigin", + "defaults", + "endOnly", + "enabled", + "snap", + "exports", + "_default", + "makeModifier" + ], + "sources": [ + "pointer.ts" + ], + "sourcesContent": [ + "import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'\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 } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nexport interface Offset {\n x: number\n y: number\n index: number\n relativePoint?: Point | null\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 SnapOptions,\n {\n offsets?: Offset[]\n closest?: any\n targetFields?: string[][]\n }\n>\n\nfunction start(arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin ? getOrigin(arg) : { 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 } 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 =\n 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 : [\n {\n index: 0,\n relativePoint: null,\n x: snapOffset.x,\n y: snapOffset.y,\n },\n ]\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: SnapPosition[] = []\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 } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\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 (\n !closest.target ||\n (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 ) {\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(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\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" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/pointer.prod.js b/packages/@interactjs/modifiers/snap/pointer.prod.js new file mode 100644 index 000000000..cd5d550b9 --- /dev/null +++ b/packages/@interactjs/modifiers/snap/pointer.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.snap=exports.default=void 0;var e=o(require("../../utils/extend.prod.js")),t=o(require("../../utils/getOriginXY.prod.js")),n=o(require("../../utils/hypot.prod.js")),r=o(require("../../utils/is.prod.js")),a=require("../../utils/rect.prod.js"),s=require("../base");function o(e){return e&&e.__esModule?e:{default:e}}const i=exports.snap={start(e){const{interaction:n,interactable:r,element:s,rect:o,state:i,startOffset:l}=e,{options:u}=i,d=u.offsetWithOrigin?(e=>{const{element:n}=e.interaction;return(0,a.rectToXY)((0,a.resolveRectLike)(e.state.options.origin,null,null,[n]))||(0,t.default)(e.interactable,n,e.interaction.prepared.name)})(e):{x:0,y:0};let f;if("startCoords"===u.offset)f={x:n.coords.start.page.x,y:n.coords.start.page.y};else{const e=(0,a.resolveRectLike)(u.offset,r,s,[n]);f=(0,a.rectToXY)(e)||{x:0,y:0},f.x+=d.x,f.y+=d.y}const{relativePoints:c}=u;i.offsets=o&&c&&c.length?c.map(((e,t)=>({index:t,relativePoint:e,x:l.left-o.width*e.x+f.x,y:l.top-o.height*e.y+f.y}))):[{index:0,relativePoint:null,x:f.x,y:f.y}]},set(a){const{interaction:s,coords:o,state:i}=a,{options:l,offsets:u}=i,d=(0,t.default)(s.interactable,s.element,s.prepared.name),f=(0,e.default)({},o),c=[];l.offsetWithOrigin||(f.x-=d.x,f.y-=d.y);for(const e of u){const t=f.x-e.x,n=f.y-e.y;for(let a=0,o=l.targets.length;a,\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 SnapOptions,\n {\n offsets?: Offset[]\n closest?: any\n targetFields?: string[][]\n }\n>\n\nfunction start(arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin ? getOrigin(arg) : { 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 } 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 =\n 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 : [\n {\n index: 0,\n relativePoint: null,\n x: snapOffset.x,\n y: snapOffset.y,\n },\n ]\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: SnapPosition[] = []\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 } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\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 (\n !closest.target ||\n (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 ) {\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(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\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" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/size.d.ts b/packages/@interactjs/modifiers/snap/size.d.ts new file mode 100644 index 000000000..ed51f1fa0 --- /dev/null +++ b/packages/@interactjs/modifiers/snap/size.d.ts @@ -0,0 +1,49 @@ +import type { ModifierArg } from '../types'; +import type { SnapOptions, SnapState } from './pointer'; +export type SnapSizeOptions = Pick; +declare function start(arg: ModifierArg): any; +declare function set(arg: any): { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; +}; +declare const snapSize: { + start: typeof start; + set: typeof set; + defaults: SnapSizeOptions; +}; +declare const _default: { + (_options?: Partial): import("../types").Modifier; + _defaults: SnapSizeOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: ModifierArg) => void | import("@interactjs/core/types").Point; + stop: (arg: ModifierArg) => void; + }; +}; +export default _default; +export { snapSize }; diff --git a/packages/@interactjs/modifiers/snap/size.js b/packages/@interactjs/modifiers/snap/size.js new file mode 100644 index 000000000..83e653ba5 --- /dev/null +++ b/packages/@interactjs/modifiers/snap/size.js @@ -0,0 +1,98 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.snapSize = exports.default = void 0; +var _extend = _interopRequireDefault(require("../../utils/extend.js")); +var _is = _interopRequireDefault(require("../../utils/is.js")); +var _base = require("../base"); +var _pointer = require("./pointer"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// This modifier allows snapping of the size of targets during resize +// interactions. + +function start(arg) { + const { + state, + edges + } = arg; + const { + options + } = state; + if (!edges) { + return null; + } + arg.state = { + options: { + targets: null, + relativePoints: [{ + x: edges.left ? 0 : 1, + y: edges.top ? 0 : 1 + }], + offset: options.offset || 'self', + origin: { + x: 0, + y: 0 + }, + range: options.range + } + }; + state.targetFields = state.targetFields || [['width', 'height'], ['x', 'y']]; + _pointer.snap.start(arg); + state.offsets = arg.state.offsets; + arg.state = state; +} +function set(arg) { + const { + interaction, + state, + coords + } = arg; + const { + options, + offsets + } = state; + const relative = { + x: coords.x - offsets[0].x, + y: coords.y - offsets[0].y + }; + state.options = (0, _extend.default)({}, options); + state.options.targets = []; + for (const snapTarget of options.targets || []) { + let target; + if (_is.default.func(snapTarget)) { + target = snapTarget(relative.x, relative.y, interaction); + } else { + target = snapTarget; + } + if (!target) { + continue; + } + for (const [xField, yField] of state.targetFields) { + if (xField in target || yField in target) { + target.x = target[xField]; + target.y = target[yField]; + break; + } + } + state.options.targets.push(target); + } + const returnValue = _pointer.snap.set(arg); + state.options = options; + return returnValue; +} +const defaults = { + range: Infinity, + targets: null, + offset: null, + endOnly: false, + enabled: false +}; +const snapSize = exports.snapSize = { + start, + set, + defaults +}; +var _default = exports.default = (0, _base.makeModifier)(snapSize, 'snapSize'); +//# sourceMappingURL=size.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/size.js.map b/packages/@interactjs/modifiers/snap/size.js.map new file mode 100644 index 000000000..30e15c9d6 --- /dev/null +++ b/packages/@interactjs/modifiers/snap/size.js.map @@ -0,0 +1,59 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "_is", + "_base", + "_pointer", + "obj", + "__esModule", + "default", + "start", + "arg", + "state", + "edges", + "options", + "targets", + "relativePoints", + "x", + "left", + "y", + "top", + "offset", + "origin", + "range", + "targetFields", + "snap", + "offsets", + "set", + "interaction", + "coords", + "relative", + "extend", + "snapTarget", + "target", + "is", + "func", + "xField", + "yField", + "push", + "returnValue", + "defaults", + "Infinity", + "endOnly", + "enabled", + "snapSize", + "exports", + "_default", + "makeModifier" + ], + "sources": [ + "size.ts" + ], + "sourcesContent": [ + "// This modifier allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { state, edges } = arg\n const { options } = state\n\n if (!edges) {\n return null\n }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [\n {\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n },\n ],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set(arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of options.targets || []) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n const returnValue = snap.set(arg)\n\n state.options = options\n\n return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/size.prod.js b/packages/@interactjs/modifiers/snap/size.prod.js new file mode 100644 index 000000000..71292b7bf --- /dev/null +++ b/packages/@interactjs/modifiers/snap/size.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.snapSize=exports.default=void 0;var t=r(require("../../utils/extend.prod.js")),e=r(require("../../utils/is.prod.js")),s=require("../base"),o=require("./pointer");function r(t){return t&&t.__esModule?t:{default:t}}const n=exports.snapSize={start(t){const{state:e,edges:s}=t,{options:r}=e;if(!s)return null;t.state={options:{targets:null,relativePoints:[{x:s.left?0:1,y:s.top?0:1}],offset:r.offset||"self",origin:{x:0,y:0},range:r.range}},e.targetFields=e.targetFields||[["width","height"],["x","y"]],o.snap.start(t),e.offsets=t.state.offsets,t.state=e},set(s){const{interaction:r,state:n,coords:i}=s,{options:a,offsets:f}=n,l={x:i.x-f[0].x,y:i.y-f[0].y};n.options=(0,t.default)({},a),n.options.targets=[];for(const t of a.targets||[]){let s;if(s=e.default.func(t)?t(l.x,l.y,r):t,s){for(const[t,e]of n.targetFields)if(t in s||e in s){s.x=s[t],s.y=s[e];break}n.options.targets.push(s)}}const u=o.snap.set(s);return n.options=a,u},defaults:{range:1/0,targets:null,offset:null,endOnly:!1,enabled:!1}};exports.default=(0,s.makeModifier)(n,"snapSize"); +//# sourceMappingURL=size.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/snap/size.prod.js.map b/packages/@interactjs/modifiers/snap/size.prod.js.map new file mode 100644 index 000000000..24f9dc5ef --- /dev/null +++ b/packages/@interactjs/modifiers/snap/size.prod.js.map @@ -0,0 +1,58 @@ +{ + "version": 3, + "names": [ + "_extendProd", + "_interopRequireDefault", + "require", + "_isProd", + "_base", + "_pointer", + "obj", + "__esModule", + "default", + "snapSize", + "exports", + "start", + "arg", + "state", + "edges", + "options", + "targets", + "relativePoints", + "x", + "left", + "y", + "top", + "offset", + "origin", + "range", + "targetFields", + "snap", + "offsets", + "set", + "interaction", + "coords", + "relative", + "extend", + "snapTarget", + "target", + "is", + "func", + "xField", + "yField", + "push", + "returnValue", + "defaults", + "Infinity", + "endOnly", + "enabled", + "makeModifier" + ], + "sources": [ + "size.ts" + ], + "sourcesContent": [ + "// This modifier allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { state, edges } = arg\n const { options } = state\n\n if (!edges) {\n return null\n }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [\n {\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n },\n ],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set(arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of options.targets || []) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n const returnValue = snap.set(arg)\n\n state.options = options\n\n return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n" + ], + "mappings": "+FAGA,IAAAA,EAAAC,EAAAC,QAAA,+BACAC,EAAAF,EAAAC,QAAA,2BAEAE,EAAAF,QAAA,WAIAG,EAAAH,QAAA,aAAgC,SAAAD,EAAAK,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAiFhC,MAQMG,EAAQC,QAAAD,SAAG,CACfE,MAtFaC,GACb,MAAMC,MAAEA,EAAKC,MAAEA,GAAUF,GACnBG,QAAEA,GAAYF,EAEpB,IAAKC,EACH,OAAO,KAGTF,EAAIC,MAAQ,CACVE,QAAS,CACPC,QAAS,KACTC,eAAgB,CACd,CACEC,EAAGJ,EAAMK,KAAO,EAAI,EACpBC,EAAGN,EAAMO,IAAM,EAAI,IAGvBC,OAAQP,EAAQO,QAAU,OAC1BC,OAAQ,CAAEL,EAAG,EAAGE,EAAG,GACnBI,MAAOT,EAAQS,QAInBX,EAAMY,aAAeZ,EAAMY,cAAgB,CACzC,CAAC,QAAS,UACV,CAAC,IAAK,MAGRC,OAAKf,MAAMC,GACXC,EAAMc,QAAUf,EAAIC,MAAMc,QAE1Bf,EAAIC,MAAQA,CACd,EAuDEe,IArDWhB,GACX,MAAMiB,YAAEA,EAAWhB,MAAEA,EAAKiB,OAAEA,GAAWlB,GACjCG,QAAEA,EAAOY,QAAEA,GAAYd,EACvBkB,EAAW,CACfb,EAAGY,EAAOZ,EAAIS,EAAQ,GAAGT,EACzBE,EAAGU,EAAOV,EAAIO,EAAQ,GAAGP,GAG3BP,EAAME,SAAU,EAAAiB,WAAO,CAAC,EAAGjB,GAC3BF,EAAME,QAAQC,QAAU,GAExB,IAAK,MAAMiB,KAAclB,EAAQC,SAAW,GAAI,CAC9C,IAAIkB,EAQJ,GALEA,EADEC,UAAGC,KAAKH,GACDA,EAAWF,EAASb,EAAGa,EAASX,EAAGS,GAEnCI,EAGNC,EAAL,CAIA,IAAK,MAAOG,EAAQC,KAAWzB,EAAMY,aACnC,GAAIY,KAAUH,GAAUI,KAAUJ,EAAQ,CACxCA,EAAOhB,EAAIgB,EAAOG,GAClBH,EAAOd,EAAIc,EAAOI,GAElB,KACF,CAGFzB,EAAME,QAAQC,QAAQuB,KAAKL,EAX3B,CAYF,CAEA,MAAMM,EAAcd,OAAKE,IAAIhB,GAI7B,OAFAC,EAAME,QAAUA,EAETyB,CACT,EAaEC,SAXgC,CAChCjB,MAAOkB,IACP1B,QAAS,KACTM,OAAQ,KACRqB,SAAS,EACTC,SAAS,IAOVlC,QAAAF,SAEc,EAAAqC,gBAAapC,EAAU" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/spring/spring.d.ts b/packages/@interactjs/modifiers/spring/spring.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/spring/spring.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/spring/spring.js b/packages/@interactjs/modifiers/spring/spring.js new file mode 100644 index 000000000..c94386d53 --- /dev/null +++ b/packages/@interactjs/modifiers/spring/spring.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function () { + return _noop.default; + } +}); +var _noop = _interopRequireDefault(require("../noop")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +//# sourceMappingURL=spring.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/spring/spring.js.map b/packages/@interactjs/modifiers/spring/spring.js.map new file mode 100644 index 000000000..26bcdc634 --- /dev/null +++ b/packages/@interactjs/modifiers/spring/spring.js.map @@ -0,0 +1,18 @@ +{ + "version": 3, + "names": [ + "_noop", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default" + ], + "sources": [ + "spring.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": ";;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/spring/spring.prod.js b/packages/@interactjs/modifiers/spring/spring.prod.js new file mode 100644 index 000000000..828ba4a4d --- /dev/null +++ b/packages/@interactjs/modifiers/spring/spring.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r.default});var e,r=(e=require("../noop"))&&e.__esModule?e:{default:e}; +//# sourceMappingURL=spring.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/spring/spring.prod.js.map b/packages/@interactjs/modifiers/spring/spring.prod.js.map new file mode 100644 index 000000000..29271654a --- /dev/null +++ b/packages/@interactjs/modifiers/spring/spring.prod.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "obj", + "_noop", + "require", + "__esModule", + "default" + ], + "sources": [ + "spring.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": "kIAAA,IAAiCA,EAAjCC,GAAiCD,EAAjCE,QAAA,aAAiCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/spring/spring.stub.d.ts b/packages/@interactjs/modifiers/spring/spring.stub.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/spring/spring.stub.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/transform/transform.d.ts b/packages/@interactjs/modifiers/transform/transform.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/transform/transform.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/transform/transform.js b/packages/@interactjs/modifiers/transform/transform.js new file mode 100644 index 000000000..5bd0c454b --- /dev/null +++ b/packages/@interactjs/modifiers/transform/transform.js @@ -0,0 +1,14 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "default", { + enumerable: true, + get: function () { + return _noop.default; + } +}); +var _noop = _interopRequireDefault(require("../noop")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +//# sourceMappingURL=transform.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/transform/transform.js.map b/packages/@interactjs/modifiers/transform/transform.js.map new file mode 100644 index 000000000..60b7fbdbe --- /dev/null +++ b/packages/@interactjs/modifiers/transform/transform.js.map @@ -0,0 +1,18 @@ +{ + "version": 3, + "names": [ + "_noop", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default" + ], + "sources": [ + "transform.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": ";;;;;;;;;;;AAAA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/transform/transform.prod.js b/packages/@interactjs/modifiers/transform/transform.prod.js new file mode 100644 index 000000000..e290a5d4b --- /dev/null +++ b/packages/@interactjs/modifiers/transform/transform.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>r.default});var e,r=(e=require("../noop"))&&e.__esModule?e:{default:e}; +//# sourceMappingURL=transform.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/transform/transform.prod.js.map b/packages/@interactjs/modifiers/transform/transform.prod.js.map new file mode 100644 index 000000000..c133f57da --- /dev/null +++ b/packages/@interactjs/modifiers/transform/transform.prod.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "obj", + "_noop", + "require", + "__esModule", + "default" + ], + "sources": [ + "transform.ts" + ], + "sourcesContent": [ + "export { default } from '../noop'\n" + ], + "mappings": "kIAAA,IAAiCA,EAAjCC,GAAiCD,EAAjCE,QAAA,aAAiCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/transform/transform.stub.d.ts b/packages/@interactjs/modifiers/transform/transform.stub.d.ts new file mode 100644 index 000000000..891687912 --- /dev/null +++ b/packages/@interactjs/modifiers/transform/transform.stub.d.ts @@ -0,0 +1 @@ +export { default } from '../noop'; diff --git a/packages/@interactjs/modifiers/types.d.ts b/packages/@interactjs/modifiers/types.d.ts new file mode 100644 index 000000000..37c5130f7 --- /dev/null +++ b/packages/@interactjs/modifiers/types.d.ts @@ -0,0 +1,53 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type { EventPhase } from '@interactjs/core/InteractEvent'; +import type Interaction from '@interactjs/core/Interaction'; +import type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'; +export interface Modifier { + options: Defaults; + methods: { + start?: (arg: ModifierArg) => void; + set?: (arg: ModifierArg) => Result; + beforeEnd?: (arg: ModifierArg) => Point | void; + stop?: (arg: ModifierArg) => void; + }; + name?: Name; + enable: () => Modifier; + disable: () => Modifier; +} +export type ModifierState = { + options: Defaults; + methods?: Modifier['methods']; + index?: number; + name?: Name; +} & StateProps; +export interface ModifierArg { + interaction: Interaction; + interactable: Interactable; + phase: EventPhase; + rect: FullRect; + edges: EdgeOptions; + state: State; + element: Element; + pageCoords: Point; + prevCoords: Point; + prevRect?: FullRect; + coords: Point; + startOffset: Rect; + preEnd?: boolean; +} +export interface ModifierModule { + defaults?: Defaults; + start?(arg: ModifierArg): void; + set?(arg: ModifierArg): Result; + beforeEnd?(arg: ModifierArg): Point | void; + stop?(arg: ModifierArg): void; +} +export interface ModifierFunction { + (_options?: Partial): Modifier; + _defaults: Defaults; + _methods: ModifierModule; +} diff --git a/packages/@interactjs/modifiers/types.js b/packages/@interactjs/modifiers/types.js new file mode 100644 index 000000000..239667a3d --- /dev/null +++ b/packages/@interactjs/modifiers/types.js @@ -0,0 +1,6 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/types.js.map b/packages/@interactjs/modifiers/types.js.map new file mode 100644 index 000000000..6f4ff1d6f --- /dev/null +++ b/packages/@interactjs/modifiers/types.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "types.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\n\nexport interface Modifier<\n Defaults = any,\n State extends ModifierState = any,\n Name extends string = any,\n Result = any,\n> {\n options: Defaults\n methods: {\n start?: (arg: ModifierArg) => void\n set?: (arg: ModifierArg) => Result\n beforeEnd?: (arg: ModifierArg) => Point | void\n stop?: (arg: ModifierArg) => void\n }\n name?: Name\n enable: () => Modifier\n disable: () => Modifier\n}\n\nexport type ModifierState = {\n options: Defaults\n methods?: Modifier['methods']\n index?: number\n name?: Name\n} & StateProps\n\nexport interface ModifierArg {\n interaction: Interaction\n interactable: Interactable\n phase: EventPhase\n rect: FullRect\n edges: EdgeOptions\n state: State\n element: Element\n pageCoords: Point\n prevCoords: Point\n prevRect?: FullRect\n coords: Point\n startOffset: Rect\n preEnd?: boolean\n}\n\nexport interface ModifierModule<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Result = unknown,\n> {\n defaults?: Defaults\n start?(arg: ModifierArg): void\n set?(arg: ModifierArg): Result\n beforeEnd?(arg: ModifierArg): Point | void\n stop?(arg: ModifierArg): void\n}\n\nexport interface ModifierFunction<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n> {\n (_options?: Partial): Modifier\n _defaults: Defaults\n _methods: ModifierModule\n}\n" + ], + "mappings": "" +} \ No newline at end of file diff --git a/packages/@interactjs/modifiers/types.prod.js b/packages/@interactjs/modifiers/types.prod.js new file mode 100644 index 000000000..1cdf1cd66 --- /dev/null +++ b/packages/@interactjs/modifiers/types.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}); +//# sourceMappingURL=types.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/modifiers/types.prod.js.map b/packages/@interactjs/modifiers/types.prod.js.map new file mode 100644 index 000000000..32e471b75 --- /dev/null +++ b/packages/@interactjs/modifiers/types.prod.js.map @@ -0,0 +1,6 @@ +{ + "version": 3, + "names": [], + "sources": [], + "mappings": "" +} \ No newline at end of file diff --git a/packages/@interactjs/offset/.npmignore b/packages/@interactjs/offset/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/offset/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/offset/LICENSE b/packages/@interactjs/offset/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/offset/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/offset/plugin.d.ts b/packages/@interactjs/offset/plugin.d.ts new file mode 100644 index 000000000..322c3f4e7 --- /dev/null +++ b/packages/@interactjs/offset/plugin.d.ts @@ -0,0 +1,20 @@ +import type Interaction from '@interactjs/core/Interaction'; +import type { Plugin } from '@interactjs/core/scope'; +import type { Point } from '@interactjs/core/types'; +declare module '@interactjs/core/Interaction' { + interface Interaction { + offsetBy?: typeof offsetBy; + offset: { + total: Point; + pending: Point; + }; + } + enum _ProxyMethods { + offsetBy = "" + } +} +export declare function addTotal(interaction: Interaction): void; +export declare function applyPending(interaction: Interaction): boolean; +declare function offsetBy(this: Interaction, { x, y }: Point): void; +declare const offset: Plugin; +export default offset; diff --git a/packages/@interactjs/offset/plugin.js b/packages/@interactjs/offset/plugin.js new file mode 100644 index 000000000..c7bd77f2e --- /dev/null +++ b/packages/@interactjs/offset/plugin.js @@ -0,0 +1,116 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.addTotal = addTotal; +exports.applyPending = applyPending; +exports.default = void 0; +var _Interaction = require("../core/Interaction.js"); +var rectUtils = _interopRequireWildcard(require("../utils/rect.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +; +_Interaction._ProxyMethods.offsetBy = ''; +function addTotal(interaction) { + if (!interaction.pointerIsDown) { + return; + } + addToCoords(interaction.coords.cur, interaction.offset.total); + interaction.offset.pending.x = 0; + interaction.offset.pending.y = 0; +} +function beforeAction({ + interaction +}) { + applyPending(interaction); +} +function beforeEnd({ + interaction +}) { + const hadPending = applyPending(interaction); + if (!hadPending) return; + interaction.move({ + offset: true + }); + interaction.end(); + return false; +} +function end({ + interaction +}) { + interaction.offset.total.x = 0; + interaction.offset.total.y = 0; + interaction.offset.pending.x = 0; + interaction.offset.pending.y = 0; +} +function applyPending(interaction) { + if (!hasPending(interaction)) { + return false; + } + const { + pending + } = interaction.offset; + addToCoords(interaction.coords.cur, pending); + addToCoords(interaction.coords.delta, pending); + rectUtils.addEdges(interaction.edges, interaction.rect, pending); + pending.x = 0; + pending.y = 0; + return true; +} +function offsetBy({ + x, + y +}) { + this.offset.pending.x += x; + this.offset.pending.y += y; + this.offset.total.x += x; + this.offset.total.y += y; +} +function addToCoords({ + page, + client +}, { + x, + y +}) { + page.x += x; + page.y += y; + client.x += x; + client.y += y; +} +function hasPending(interaction) { + return !!(interaction.offset.pending.x || interaction.offset.pending.y); +} +const offset = { + id: 'offset', + before: ['modifiers', 'pointer-events', 'actions', 'inertia'], + install(scope) { + scope.Interaction.prototype.offsetBy = offsetBy; + }, + listeners: { + 'interactions:new': ({ + interaction + }) => { + interaction.offset = { + total: { + x: 0, + y: 0 + }, + pending: { + x: 0, + y: 0 + } + }; + }, + 'interactions:update-pointer': ({ + interaction + }) => addTotal(interaction), + 'interactions:before-action-start': beforeAction, + 'interactions:before-action-move': beforeAction, + 'interactions:before-action-end': beforeEnd, + 'interactions:stop': end + } +}; +var _default = exports.default = offset; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/offset/plugin.js.map b/packages/@interactjs/offset/plugin.js.map new file mode 100644 index 000000000..aced3e7d1 --- /dev/null +++ b/packages/@interactjs/offset/plugin.js.map @@ -0,0 +1,73 @@ +{ + "version": 3, + "names": [ + "_Interaction", + "require", + "rectUtils", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_ProxyMethods", + "offsetBy", + "addTotal", + "interaction", + "pointerIsDown", + "addToCoords", + "coords", + "cur", + "offset", + "total", + "pending", + "x", + "y", + "beforeAction", + "applyPending", + "beforeEnd", + "hadPending", + "move", + "end", + "hasPending", + "delta", + "addEdges", + "edges", + "rect", + "page", + "client", + "id", + "before", + "install", + "scope", + "Interaction", + "listeners", + "interactions:new", + "interactions:update-pointer", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n offsetBy?: typeof offsetBy\n offset: {\n total: Point\n pending: Point\n }\n }\n\n enum _ProxyMethods {\n offsetBy = '',\n }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal(interaction: Interaction) {\n if (!interaction.pointerIsDown) {\n return\n }\n\n addToCoords(interaction.coords.cur, interaction.offset.total)\n\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nfunction beforeAction({ interaction }: { interaction: Interaction }) {\n applyPending(interaction)\n}\n\nfunction beforeEnd({ interaction }: { interaction: Interaction }): boolean | void {\n const hadPending = applyPending(interaction)\n\n if (!hadPending) return\n\n interaction.move({ offset: true })\n interaction.end()\n\n return false\n}\n\nfunction end({ interaction }: { interaction: Interaction }) {\n interaction.offset.total.x = 0\n interaction.offset.total.y = 0\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nexport function applyPending(interaction: Interaction) {\n if (!hasPending(interaction)) {\n return false\n }\n\n const { pending } = interaction.offset\n\n addToCoords(interaction.coords.cur, pending)\n addToCoords(interaction.coords.delta, pending)\n rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n pending.x = 0\n pending.y = 0\n\n return true\n}\n\nfunction offsetBy(this: Interaction, { x, y }: Point) {\n this.offset.pending.x += x\n this.offset.pending.y += y\n\n this.offset.total.x += x\n this.offset.total.y += y\n}\n\nfunction addToCoords({ page, client }, { x, y }: Point) {\n page.x += x\n page.y += y\n client.x += x\n client.y += y\n}\n\nfunction hasPending(interaction: Interaction) {\n return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n id: 'offset',\n before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n install(scope) {\n scope.Interaction.prototype.offsetBy = offsetBy\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.offset = {\n total: { x: 0, y: 0 },\n pending: { x: 0, y: 0 },\n }\n },\n 'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n 'interactions:before-action-start': beforeAction,\n 'interactions:before-action-move': beforeAction,\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': end,\n },\n}\n\nexport default offset\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/offset/plugin.prod.js b/packages/@interactjs/offset/plugin.prod.js new file mode 100644 index 000000000..ff725850b --- /dev/null +++ b/packages/@interactjs/offset/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.addTotal=o,exports.applyPending=i,exports.default=void 0;var e=require("../core/Interaction.prod.js"),t=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=n(t);if(o&&o.has(e))return o.get(e);var r={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in e)if("default"!==f&&Object.prototype.hasOwnProperty.call(e,f)){var s=i?Object.getOwnPropertyDescriptor(e,f):null;s&&(s.get||s.set)?Object.defineProperty(r,f,s):r[f]=e[f]}return r.default=e,o&&o.set(e,r),r})(require("../utils/rect.prod.js"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(n=e=>e?o:t)(e)}function o(e){e.pointerIsDown&&(s(e.coords.cur,e.offset.total),e.offset.pending.x=0,e.offset.pending.y=0)}function r({interaction:e}){i(e)}function i(e){if(!(e=>!(!e.offset.pending.x&&!e.offset.pending.y))(e))return!1;const{pending:n}=e.offset;return s(e.coords.cur,n),s(e.coords.delta,n),t.addEdges(e.edges,e.rect,n),n.x=0,n.y=0,!0}function f({x:e,y:t}){this.offset.pending.x+=e,this.offset.pending.y+=t,this.offset.total.x+=e,this.offset.total.y+=t}function s({page:e,client:t},{x:n,y:o}){e.x+=n,e.y+=o,t.x+=n,t.y+=o}e._ProxyMethods.offsetBy="";const a={id:"offset",before:["modifiers","pointer-events","actions","inertia"],install(e){e.Interaction.prototype.offsetBy=f},listeners:{"interactions:new"({interaction:e}){e.offset={total:{x:0,y:0},pending:{x:0,y:0}}},"interactions:update-pointer":({interaction:e})=>o(e),"interactions:before-action-start":r,"interactions:before-action-move":r,"interactions:before-action-end"({interaction:e}){if(i(e))return e.move({offset:!0}),e.end(),!1},"interactions:stop"({interaction:e}){e.offset.total.x=0,e.offset.total.y=0,e.offset.pending.x=0,e.offset.pending.y=0}}};exports.default=a; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/offset/plugin.prod.js.map b/packages/@interactjs/offset/plugin.prod.js.map new file mode 100644 index 000000000..ad57a0192 --- /dev/null +++ b/packages/@interactjs/offset/plugin.prod.js.map @@ -0,0 +1,71 @@ +{ + "version": 3, + "names": [ + "_InteractionProd", + "require", + "rectUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "addTotal", + "interaction", + "pointerIsDown", + "addToCoords", + "coords", + "cur", + "offset", + "total", + "pending", + "x", + "y", + "beforeAction", + "applyPending", + "hasPending", + "delta", + "addEdges", + "edges", + "rect", + "offsetBy", + "this", + "page", + "client", + "_ProxyMethods", + "id", + "before", + "install", + "scope", + "Interaction", + "listeners", + "interactions:update-pointer", + "beforeEnd", + "move", + "end", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n offsetBy?: typeof offsetBy\n offset: {\n total: Point\n pending: Point\n }\n }\n\n enum _ProxyMethods {\n offsetBy = '',\n }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal(interaction: Interaction) {\n if (!interaction.pointerIsDown) {\n return\n }\n\n addToCoords(interaction.coords.cur, interaction.offset.total)\n\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nfunction beforeAction({ interaction }: { interaction: Interaction }) {\n applyPending(interaction)\n}\n\nfunction beforeEnd({ interaction }: { interaction: Interaction }): boolean | void {\n const hadPending = applyPending(interaction)\n\n if (!hadPending) return\n\n interaction.move({ offset: true })\n interaction.end()\n\n return false\n}\n\nfunction end({ interaction }: { interaction: Interaction }) {\n interaction.offset.total.x = 0\n interaction.offset.total.y = 0\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nexport function applyPending(interaction: Interaction) {\n if (!hasPending(interaction)) {\n return false\n }\n\n const { pending } = interaction.offset\n\n addToCoords(interaction.coords.cur, pending)\n addToCoords(interaction.coords.delta, pending)\n rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n pending.x = 0\n pending.y = 0\n\n return true\n}\n\nfunction offsetBy(this: Interaction, { x, y }: Point) {\n this.offset.pending.x += x\n this.offset.pending.y += y\n\n this.offset.total.x += x\n this.offset.total.y += y\n}\n\nfunction addToCoords({ page, client }, { x, y }: Point) {\n page.x += x\n page.y += y\n client.x += x\n client.y += y\n}\n\nfunction hasPending(interaction: Interaction) {\n return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n id: 'offset',\n before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n install(scope) {\n scope.Interaction.prototype.offsetBy = offsetBy\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.offset = {\n total: { x: 0, y: 0 },\n pending: { x: 0, y: 0 },\n }\n },\n 'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n 'interactions:before-action-start': beforeAction,\n 'interactions:before-action-move': beforeAction,\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': end,\n },\n}\n\nexport default offset\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/.npmignore b/packages/@interactjs/pointer-events/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/pointer-events/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/pointer-events/LICENSE b/packages/@interactjs/pointer-events/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/pointer-events/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/pointer-events/PointerEvent.d.ts b/packages/@interactjs/pointer-events/PointerEvent.d.ts new file mode 100644 index 000000000..d30ecd387 --- /dev/null +++ b/packages/@interactjs/pointer-events/PointerEvent.d.ts @@ -0,0 +1,24 @@ +import { BaseEvent } from '@interactjs/core/BaseEvent'; +import type Interaction from '@interactjs/core/Interaction'; +import type { PointerEventType, PointerType, Point } from '@interactjs/core/types'; +export declare class PointerEvent extends BaseEvent { + type: T; + originalEvent: PointerEventType; + pointerId: number; + pointerType: string; + double: boolean; + pageX: number; + pageY: number; + clientX: number; + clientY: number; + dt: number; + eventable: any; + [key: string]: any; + constructor(type: T, pointer: PointerType | PointerEvent, event: PointerEventType, eventTarget: Node, interaction: Interaction, timeStamp: number); + _subtractOrigin({ x: originX, y: originY }: Point): this; + _addOrigin({ x: originX, y: originY }: Point): this; + /** + * Prevent the default behaviour of the original Event + */ + preventDefault(): void; +} diff --git a/packages/@interactjs/pointer-events/PointerEvent.js b/packages/@interactjs/pointer-events/PointerEvent.js new file mode 100644 index 000000000..6143cceb5 --- /dev/null +++ b/packages/@interactjs/pointer-events/PointerEvent.js @@ -0,0 +1,64 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.PointerEvent = void 0; +var _BaseEvent = require("../core/BaseEvent.js"); +var pointerUtils = _interopRequireWildcard(require("../utils/pointerUtils.js")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +class PointerEvent extends _BaseEvent.BaseEvent { + constructor(type, pointer, event, eventTarget, interaction, timeStamp) { + super(interaction); + pointerUtils.pointerExtend(this, event); + if (event !== pointer) { + pointerUtils.pointerExtend(this, pointer); + } + this.timeStamp = timeStamp; + this.originalEvent = event; + this.type = type; + this.pointerId = pointerUtils.getPointerId(pointer); + this.pointerType = pointerUtils.getPointerType(pointer); + this.target = eventTarget; + this.currentTarget = null; + if (type === 'tap') { + const pointerIndex = interaction.getPointerIndex(pointer); + this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime; + const interval = this.timeStamp - interaction.tapTime; + this.double = !!interaction.prevTap && interaction.prevTap.type !== 'doubletap' && interaction.prevTap.target === this.target && interval < 500; + } else if (type === 'doubletap') { + this.dt = pointer.timeStamp - interaction.tapTime; + this.double = true; + } + } + _subtractOrigin({ + x: originX, + y: originY + }) { + this.pageX -= originX; + this.pageY -= originY; + this.clientX -= originX; + this.clientY -= originY; + return this; + } + _addOrigin({ + x: originX, + y: originY + }) { + this.pageX += originX; + this.pageY += originY; + this.clientX += originX; + this.clientY += originY; + return this; + } + + /** + * Prevent the default behaviour of the original Event + */ + preventDefault() { + this.originalEvent.preventDefault(); + } +} +exports.PointerEvent = PointerEvent; +//# sourceMappingURL=PointerEvent.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/PointerEvent.js.map b/packages/@interactjs/pointer-events/PointerEvent.js.map new file mode 100644 index 000000000..3fdeb44b0 --- /dev/null +++ b/packages/@interactjs/pointer-events/PointerEvent.js.map @@ -0,0 +1,75 @@ +{ + "version": 3, + "names": [ + "_BaseEvent", + "require", + "pointerUtils", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "PointerEvent", + "BaseEvent", + "constructor", + "type", + "pointer", + "event", + "eventTarget", + "interaction", + "timeStamp", + "pointerExtend", + "originalEvent", + "pointerId", + "getPointerId", + "pointerType", + "getPointerType", + "target", + "currentTarget", + "pointerIndex", + "getPointerIndex", + "dt", + "pointers", + "downTime", + "interval", + "tapTime", + "double", + "prevTap", + "_subtractOrigin", + "x", + "originX", + "y", + "originY", + "pageX", + "pageY", + "clientX", + "clientY", + "_addOrigin", + "preventDefault", + "exports" + ], + "sources": [ + "PointerEvent.ts" + ], + "sourcesContent": [ + "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport class PointerEvent extends BaseEvent {\n declare type: T\n declare originalEvent: PointerEventType\n declare pointerId: number\n declare pointerType: string\n declare double: boolean\n declare pageX: number\n declare pageY: number\n declare clientX: number\n declare clientY: number\n declare dt: number\n declare eventable: any;\n [key: string]: any\n\n constructor(\n type: T,\n pointer: PointerType | PointerEvent,\n event: PointerEventType,\n eventTarget: Node,\n interaction: Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double =\n !!interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500\n } else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n this.double = true\n }\n }\n\n _subtractOrigin({ x: originX, y: originY }: Point) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin({ x: originX, y: originY }: Point) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault() {\n this.originalEvent.preventDefault()\n }\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/PointerEvent.prod.js b/packages/@interactjs/pointer-events/PointerEvent.prod.js new file mode 100644 index 000000000..cea2a39ee --- /dev/null +++ b/packages/@interactjs/pointer-events/PointerEvent.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.PointerEvent=void 0;var t=require("../core/BaseEvent.prod.js"),e=((t,e)=>{if(t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var i=r(e);if(i&&i.has(t))return i.get(t);var n={__proto__:null},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in t)if("default"!==s&&Object.prototype.hasOwnProperty.call(t,s)){var o=p?Object.getOwnPropertyDescriptor(t,s):null;o&&(o.get||o.set)?Object.defineProperty(n,s,o):n[s]=t[s]}return n.default=t,i&&i.set(t,n),n})(require("../utils/pointerUtils.prod.js"));function r(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,i=new WeakMap;return(r=t=>t?i:e)(t)}class i extends t.BaseEvent{constructor(t,r,i,n,p,s){if(super(p),e.pointerExtend(this,i),i!==r&&e.pointerExtend(this,r),this.timeStamp=s,this.originalEvent=i,this.type=t,this.pointerId=e.getPointerId(r),this.pointerType=e.getPointerType(r),this.target=n,this.currentTarget=null,"tap"===t){const t=p.getPointerIndex(r);this.dt=this.timeStamp-p.pointers[t].downTime;const e=this.timeStamp-p.tapTime;this.double=!!p.prevTap&&"doubletap"!==p.prevTap.type&&p.prevTap.target===this.target&&e<500}else"doubletap"===t&&(this.dt=r.timeStamp-p.tapTime,this.double=!0)}_subtractOrigin({x:t,y:e}){return this.pageX-=t,this.pageY-=e,this.clientX-=t,this.clientY-=e,this}_addOrigin({x:t,y:e}){return this.pageX+=t,this.pageY+=e,this.clientX+=t,this.clientY+=e,this}preventDefault(){this.originalEvent.preventDefault()}}exports.PointerEvent=i; +//# sourceMappingURL=PointerEvent.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/PointerEvent.prod.js.map b/packages/@interactjs/pointer-events/PointerEvent.prod.js.map new file mode 100644 index 000000000..d10ad7822 --- /dev/null +++ b/packages/@interactjs/pointer-events/PointerEvent.prod.js.map @@ -0,0 +1,77 @@ +{ + "version": 3, + "names": [ + "_BaseEventProd", + "require", + "pointerUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "PointerEvent", + "BaseEvent", + "constructor", + "type", + "pointer", + "event", + "eventTarget", + "interaction", + "timeStamp", + "super", + "pointerExtend", + "this", + "originalEvent", + "pointerId", + "getPointerId", + "pointerType", + "getPointerType", + "target", + "currentTarget", + "pointerIndex", + "getPointerIndex", + "dt", + "pointers", + "downTime", + "interval", + "tapTime", + "double", + "prevTap", + "_subtractOrigin", + "x", + "originX", + "y", + "originY", + "pageX", + "pageY", + "clientX", + "clientY", + "_addOrigin", + "preventDefault", + "exports" + ], + "sources": [ + "PointerEvent.ts" + ], + "sourcesContent": [ + "import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport class PointerEvent extends BaseEvent {\n declare type: T\n declare originalEvent: PointerEventType\n declare pointerId: number\n declare pointerType: string\n declare double: boolean\n declare pageX: number\n declare pageY: number\n declare clientX: number\n declare clientY: number\n declare dt: number\n declare eventable: any;\n [key: string]: any\n\n constructor(\n type: T,\n pointer: PointerType | PointerEvent,\n event: PointerEventType,\n eventTarget: Node,\n interaction: Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double =\n !!interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500\n } else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n this.double = true\n }\n }\n\n _subtractOrigin({ x: originX, y: originY }: Point) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin({ x: originX, y: originY }: Point) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault() {\n this.originalEvent.preventDefault()\n }\n}\n" + ], + "mappings": "mFAAA,IAAAA,EAAAC,QAAA,6BAGAC,EAA8D,EAAAC,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,QAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,IAAA,EAA9DY,CAAAtB,QAAA,kCAA8D,SAAAO,EAAAL,GAAA,sBAAAqB,QAAA,gBAAApB,EAAA,IAAAoB,QAAAjB,EAAA,IAAAiB,QAAA,OAAAhB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA,CAEvD,MAAMsB,UAA6CC,YAcxDC,YACEC,EACAC,EACAC,EACAC,EACAC,EACAC,GAiBA,GAfAC,MAAMF,GACN9B,EAAaiC,cAAcC,KAAMN,GAE7BA,IAAUD,GACZ3B,EAAaiC,cAAcC,KAAMP,GAGnCO,KAAKH,UAAYA,EACjBG,KAAKC,cAAgBP,EACrBM,KAAKR,KAAOA,EACZQ,KAAKE,UAAYpC,EAAaqC,aAAaV,GAC3CO,KAAKI,YAActC,EAAauC,eAAeZ,GAC/CO,KAAKM,OAASX,EACdK,KAAKO,cAAgB,KAER,QAATf,EAAgB,CAClB,MAAMgB,EAAeZ,EAAYa,gBAAgBhB,GACjDO,KAAKU,GAAKV,KAAKH,UAAYD,EAAYe,SAASH,GAAcI,SAE9D,MAAMC,EAAWb,KAAKH,UAAYD,EAAYkB,QAE9Cd,KAAKe,SACDnB,EAAYoB,SACe,cAA7BpB,EAAYoB,QAAQxB,MACpBI,EAAYoB,QAAQV,SAAWN,KAAKM,QACpCO,EAAW,GACf,KAAoB,cAATrB,IACTQ,KAAKU,GAAMjB,EAAgCI,UAAYD,EAAYkB,QACnEd,KAAKe,QAAS,EAElB,CAEAE,iBAAkBC,EAAGC,EAASC,EAAGC,IAM/B,OALArB,KAAKsB,OAASH,EACdnB,KAAKuB,OAASF,EACdrB,KAAKwB,SAAWL,EAChBnB,KAAKyB,SAAWJ,EAETrB,IACT,CAEA0B,YAAaR,EAAGC,EAASC,EAAGC,IAM1B,OALArB,KAAKsB,OAASH,EACdnB,KAAKuB,OAASF,EACdrB,KAAKwB,SAAWL,EAChBnB,KAAKyB,SAAWJ,EAETrB,IACT,CAKA2B,iBACE3B,KAAKC,cAAc0B,gBACrB,EACDC,QAAAvC" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/base.d.ts b/packages/@interactjs/pointer-events/base.d.ts new file mode 100644 index 000000000..87b148ea1 --- /dev/null +++ b/packages/@interactjs/pointer-events/base.d.ts @@ -0,0 +1,72 @@ +import type { Eventable } from '@interactjs/core/Eventable'; +import type { Interaction } from '@interactjs/core/Interaction'; +import type { PerActionDefaults } from '@interactjs/core/options'; +import type { Plugin } from '@interactjs/core/scope'; +import type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'; +import { PointerEvent } from './PointerEvent'; +export type EventTargetList = Array<{ + node: Node; + eventable: Eventable; + props: { + [key: string]: any; + }; +}>; +export interface PointerEventOptions extends PerActionDefaults { + enabled?: undefined; + holdDuration?: number; + ignoreFrom?: any; + allowFrom?: any; + origin?: Point | string | Element; +} +declare module '@interactjs/core/scope' { + interface Scope { + pointerEvents: typeof pointerEvents; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + prevTap?: PointerEvent; + tapTime?: number; + } +} +declare module '@interactjs/core/PointerInfo' { + interface PointerInfo { + hold?: { + duration: number; + timeout: any; + }; + } +} +declare module '@interactjs/core/options' { + interface ActionDefaults { + pointerEvents: Options; + } +} +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'pointerEvents:new': { + pointerEvent: PointerEvent; + }; + 'pointerEvents:fired': { + interaction: Interaction; + pointer: PointerType | PointerEvent; + event: PointerEventType | PointerEvent; + eventTarget: Node; + pointerEvent: PointerEvent; + targets?: EventTargetList; + type: string; + }; + 'pointerEvents:collect-targets': { + interaction: Interaction; + pointer: PointerType | PointerEvent; + event: PointerEventType | PointerEvent; + eventTarget: Node; + targets?: EventTargetList; + type: string; + path: Node[]; + node: null; + }; + } +} +declare const pointerEvents: Plugin; +export default pointerEvents; diff --git a/packages/@interactjs/pointer-events/base.js b/packages/@interactjs/pointer-events/base.js new file mode 100644 index 000000000..40efab7d7 --- /dev/null +++ b/packages/@interactjs/pointer-events/base.js @@ -0,0 +1,265 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var domUtils = _interopRequireWildcard(require("../utils/domUtils.js")); +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var _getOriginXY = _interopRequireDefault(require("../utils/getOriginXY.js")); +var _PointerEvent = require("./PointerEvent"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +const defaults = { + holdDuration: 600, + ignoreFrom: null, + allowFrom: null, + origin: { + x: 0, + y: 0 + } +}; +const pointerEvents = { + id: 'pointer-events/base', + before: ['inertia', 'modifiers', 'auto-start', 'actions'], + install, + listeners: { + 'interactions:new': addInteractionProps, + 'interactions:update-pointer': addHoldInfo, + 'interactions:move': moveAndClearHold, + 'interactions:down': (arg, scope) => { + downAndStartHold(arg, scope); + fire(arg, scope); + }, + 'interactions:up': (arg, scope) => { + clearHold(arg); + fire(arg, scope); + tapAfterUp(arg, scope); + }, + 'interactions:cancel': (arg, scope) => { + clearHold(arg); + fire(arg, scope); + } + }, + PointerEvent: _PointerEvent.PointerEvent, + fire, + collectEventTargets, + defaults, + types: { + down: true, + move: true, + up: true, + cancel: true, + tap: true, + doubletap: true, + hold: true + } +}; +function fire(arg, scope) { + const { + interaction, + pointer, + event, + eventTarget, + type, + targets = collectEventTargets(arg, scope) + } = arg; + const pointerEvent = new _PointerEvent.PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()); + scope.fire('pointerEvents:new', { + pointerEvent + }); + const signalArg = { + interaction, + pointer, + event, + eventTarget, + targets, + type, + pointerEvent + }; + for (let i = 0; i < targets.length; i++) { + const target = targets[i]; + for (const prop in target.props || {}) { + ; + pointerEvent[prop] = target.props[prop]; + } + const origin = (0, _getOriginXY.default)(target.eventable, target.node); + pointerEvent._subtractOrigin(origin); + pointerEvent.eventable = target.eventable; + pointerEvent.currentTarget = target.node; + target.eventable.fire(pointerEvent); + pointerEvent._addOrigin(origin); + if (pointerEvent.immediatePropagationStopped || pointerEvent.propagationStopped && i + 1 < targets.length && targets[i + 1].node !== pointerEvent.currentTarget) { + break; + } + } + scope.fire('pointerEvents:fired', signalArg); + if (type === 'tap') { + // if pointerEvent should make a double tap, create and fire a doubletap + // PointerEvent and use that as the prevTap + const prevTap = pointerEvent.double ? fire({ + interaction, + pointer, + event, + eventTarget, + type: 'doubletap' + }, scope) : pointerEvent; + interaction.prevTap = prevTap; + interaction.tapTime = prevTap.timeStamp; + } + return pointerEvent; +} +function collectEventTargets({ + interaction, + pointer, + event, + eventTarget, + type +}, scope) { + const pointerIndex = interaction.getPointerIndex(pointer); + const pointerInfo = interaction.pointers[pointerIndex]; + + // do not fire a tap event if the pointer was moved before being lifted + if (type === 'tap' && (interaction.pointerWasMoved || + // or if the pointerup target is different to the pointerdown target + !(pointerInfo && pointerInfo.downTarget === eventTarget))) { + return []; + } + const path = domUtils.getPath(eventTarget); + const signalArg = { + interaction, + pointer, + event, + eventTarget, + type, + path, + targets: [], + node: null + }; + for (const node of path) { + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } + if (type === 'hold') { + signalArg.targets = signalArg.targets.filter(target => { + var _interaction$pointers, _interaction$pointers2; + return target.eventable.options.holdDuration === ((_interaction$pointers = interaction.pointers[pointerIndex]) == null ? void 0 : (_interaction$pointers2 = _interaction$pointers.hold) == null ? void 0 : _interaction$pointers2.duration); + }); + } + return signalArg.targets; +} +function addInteractionProps({ + interaction +}) { + interaction.prevTap = null; // the most recent tap event on this interaction + interaction.tapTime = 0; // time of the most recent tap event +} +function addHoldInfo({ + down, + pointerInfo +}) { + if (!down && pointerInfo.hold) { + return; + } + pointerInfo.hold = { + duration: Infinity, + timeout: null + }; +} +function clearHold({ + interaction, + pointerIndex +}) { + const hold = interaction.pointers[pointerIndex].hold; + if (hold && hold.timeout) { + clearTimeout(hold.timeout); + hold.timeout = null; + } +} +function moveAndClearHold(arg, scope) { + const { + interaction, + pointer, + event, + eventTarget, + duplicate + } = arg; + if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) { + if (interaction.pointerIsDown) { + clearHold(arg); + } + fire({ + interaction, + pointer, + event, + eventTarget: eventTarget, + type: 'move' + }, scope); + } +} +function downAndStartHold({ + interaction, + pointer, + event, + eventTarget, + pointerIndex +}, scope) { + const timer = interaction.pointers[pointerIndex].hold; + const path = domUtils.getPath(eventTarget); + const signalArg = { + interaction, + pointer, + event, + eventTarget, + type: 'hold', + targets: [], + path, + node: null + }; + for (const node of path) { + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } + if (!signalArg.targets.length) return; + let minDuration = Infinity; + for (const target of signalArg.targets) { + const holdDuration = target.eventable.options.holdDuration; + if (holdDuration < minDuration) { + minDuration = holdDuration; + } + } + timer.duration = minDuration; + timer.timeout = setTimeout(() => { + fire({ + interaction, + eventTarget, + pointer, + event, + type: 'hold' + }, scope); + }, minDuration); +} +function tapAfterUp({ + interaction, + pointer, + event, + eventTarget +}, scope) { + if (!interaction.pointerWasMoved) { + fire({ + interaction, + eventTarget, + pointer, + event, + type: 'tap' + }, scope); + } +} +function install(scope) { + scope.pointerEvents = pointerEvents; + scope.defaults.actions.pointerEvents = pointerEvents.defaults; + (0, _extend.default)(scope.actions.phaselessTypes, pointerEvents.types); +} +var _default = exports.default = pointerEvents; +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/base.js.map b/packages/@interactjs/pointer-events/base.js.map new file mode 100644 index 000000000..b00d868f2 --- /dev/null +++ b/packages/@interactjs/pointer-events/base.js.map @@ -0,0 +1,126 @@ +{ + "version": 3, + "names": [ + "domUtils", + "_interopRequireWildcard", + "require", + "_extend", + "_interopRequireDefault", + "_getOriginXY", + "_PointerEvent", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "defaults", + "holdDuration", + "ignoreFrom", + "allowFrom", + "origin", + "x", + "y", + "pointerEvents", + "id", + "before", + "install", + "listeners", + "addInteractionProps", + "addHoldInfo", + "moveAndClearHold", + "interactions:down", + "arg", + "scope", + "downAndStartHold", + "fire", + "interactions:up", + "clearHold", + "tapAfterUp", + "interactions:cancel", + "PointerEvent", + "collectEventTargets", + "types", + "down", + "move", + "up", + "cancel", + "tap", + "doubletap", + "hold", + "interaction", + "pointer", + "event", + "eventTarget", + "type", + "targets", + "pointerEvent", + "now", + "signalArg", + "length", + "target", + "prop", + "props", + "getOriginXY", + "eventable", + "node", + "_subtractOrigin", + "currentTarget", + "_addOrigin", + "immediatePropagationStopped", + "propagationStopped", + "prevTap", + "double", + "tapTime", + "timeStamp", + "pointerIndex", + "getPointerIndex", + "pointerInfo", + "pointers", + "pointerWasMoved", + "downTarget", + "path", + "getPath", + "filter", + "_interaction$pointers", + "_interaction$pointers2", + "options", + "duration", + "Infinity", + "timeout", + "clearTimeout", + "duplicate", + "pointerIsDown", + "timer", + "minDuration", + "setTimeout", + "actions", + "extend", + "phaselessTypes", + "_default", + "exports" + ], + "sources": [ + "base.ts" + ], + "sourcesContent": [ + "import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n pointerEvents: Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom: null,\n allowFrom: null,\n origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: {\n down: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire(\n arg: {\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n ;(pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (\n pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n i + 1 < targets.length &&\n targets[i + 1].node !== pointerEvent.currentTarget)\n ) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n },\n scope,\n )\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n }: {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n type: T\n },\n scope: Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (\n type === 'tap' &&\n (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))\n ) {\n return []\n }\n\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(\n (target) =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold?.duration,\n )\n }\n\n return signalArg.targets\n}\n\nfunction addInteractionProps({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold({ interaction, pointerIndex }) {\n const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold(arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire(\n {\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n },\n scope,\n )\n }\n}\n\nfunction downAndStartHold(\n { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n const timer = interaction.pointers[pointerIndex].hold!\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) return\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire(\n {\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n },\n scope,\n )\n }, minDuration)\n}\n\nfunction tapAfterUp(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n scope: Scope,\n) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install(scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/base.prod.js b/packages/@interactjs/pointer-events/base.prod.js new file mode 100644 index 000000000..a803bfefb --- /dev/null +++ b/packages/@interactjs/pointer-events/base.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var p=r?Object.getOwnPropertyDescriptor(e,a):null;p&&(p.get||p.set)?Object.defineProperty(o,a,p):o[a]=e[a]}return o.default=e,n&&n.set(e,o),o})(require("../utils/domUtils.prod.js")),t=r(require("../utils/extend.prod.js")),n=r(require("../utils/getOriginXY.prod.js")),o=require("./PointerEvent");function r(e){return e&&e.__esModule?e:{default:e}}function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=e=>e?n:t)(e)}const a={id:"pointer-events/base",before:["inertia","modifiers","auto-start","actions"],install(e){e.pointerEvents=a,e.defaults.actions.pointerEvents=a.defaults,(0,t.default)(e.actions.phaselessTypes,a.types)},listeners:{"interactions:new"({interaction:e}){e.prevTap=null,e.tapTime=0},"interactions:update-pointer"({down:e,pointerInfo:t}){!e&&t.hold||(t.hold={duration:1/0,timeout:null})},"interactions:move"(e,t){const{interaction:n,pointer:o,event:r,eventTarget:i,duplicate:a}=e;a||n.pointerIsDown&&!n.pointerWasMoved||(n.pointerIsDown&&l(e),p({interaction:n,pointer:o,event:r,eventTarget:i,type:"move"},t))},"interactions:down"(t,n){(({interaction:t,pointer:n,event:o,eventTarget:r,pointerIndex:i},a)=>{const s=t.pointers[i].hold,l=e.getPath(r),u={interaction:t,pointer:n,event:o,eventTarget:r,type:"hold",targets:[],path:l,node:null};for(const e of l)u.node=e,a.fire("pointerEvents:collect-targets",u);if(!u.targets.length)return;let c=1/0;for(const e of u.targets){const t=e.eventable.options.holdDuration;t{p({interaction:t,eventTarget:r,pointer:n,event:o,type:"hold"},a)}),c)})(t,n),p(t,n)},"interactions:up"(e,t){l(e),p(e,t),(({interaction:e,pointer:t,event:n,eventTarget:o},r)=>{e.pointerWasMoved||p({interaction:e,eventTarget:o,pointer:t,event:n,type:"tap"},r)})(e,t)},"interactions:cancel"(e,t){l(e),p(e,t)}},PointerEvent:o.PointerEvent,fire:p,collectEventTargets:s,defaults:{holdDuration:600,ignoreFrom:null,allowFrom:null,origin:{x:0,y:0}},types:{down:!0,move:!0,up:!0,cancel:!0,tap:!0,doubletap:!0,hold:!0}};function p(e,t){const{interaction:r,pointer:i,event:a,eventTarget:l,type:u,targets:c=s(e,t)}=e,d=new o.PointerEvent(u,i,a,l,r,t.now());t.fire("pointerEvents:new",{pointerEvent:d});const v={interaction:r,pointer:i,event:a,eventTarget:l,targets:c,type:u,pointerEvent:d};for(let e=0;e{var n,o;return e.eventable.options.holdDuration===(null==(n=t.pointers[p])||null==(o=n.hold)?void 0:o.duration)}))),u.targets}function l({interaction:e,pointerIndex:t}){const n=e.pointers[t].hold;n&&n.timeout&&(clearTimeout(n.timeout),n.timeout=null)}exports.default=a; +//# sourceMappingURL=base.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/base.prod.js.map b/packages/@interactjs/pointer-events/base.prod.js.map new file mode 100644 index 000000000..f88aed29c --- /dev/null +++ b/packages/@interactjs/pointer-events/base.prod.js.map @@ -0,0 +1,122 @@ +{ + "version": 3, + "names": [ + "domUtils", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_extendProd", + "_interopRequireDefault", + "_getOriginXYProd", + "_PointerEvent", + "obj", + "WeakMap", + "pointerEvents", + "id", + "before", + "install", + "scope", + "defaults", + "actions", + "extend", + "phaselessTypes", + "types", + "listeners", + "addInteractionProps", + "interaction", + "prevTap", + "tapTime", + "addHoldInfo", + "down", + "pointerInfo", + "hold", + "duration", + "Infinity", + "timeout", + "moveAndClearHold", + "arg", + "pointer", + "event", + "eventTarget", + "duplicate", + "pointerIsDown", + "pointerWasMoved", + "clearHold", + "fire", + "type", + "pointerIndex", + "timer", + "pointers", + "path", + "getPath", + "signalArg", + "targets", + "node", + "length", + "minDuration", + "target", + "holdDuration", + "eventable", + "options", + "setTimeout", + "downAndStartHold", + "tapAfterUp", + "PointerEvent", + "collectEventTargets", + "ignoreFrom", + "allowFrom", + "origin", + "x", + "y", + "move", + "up", + "cancel", + "tap", + "doubletap", + "pointerEvent", + "now", + "prop", + "props", + "getOriginXY", + "_subtractOrigin", + "currentTarget", + "_addOrigin", + "immediatePropagationStopped", + "propagationStopped", + "double", + "timeStamp", + "getPointerIndex", + "downTarget", + "filter", + "_interaction$pointers", + "_interaction$pointers2", + "clearTimeout", + "exports" + ], + "sources": [ + "base.ts" + ], + "sourcesContent": [ + "import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n pointerEvents: Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom: null,\n allowFrom: null,\n origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: {\n down: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire(\n arg: {\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n ;(pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (\n pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n i + 1 < targets.length &&\n targets[i + 1].node !== pointerEvent.currentTarget)\n ) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n },\n scope,\n )\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n }: {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n type: T\n },\n scope: Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (\n type === 'tap' &&\n (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))\n ) {\n return []\n }\n\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(\n (target) =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold?.duration,\n )\n }\n\n return signalArg.targets\n}\n\nfunction addInteractionProps({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold({ interaction, pointerIndex }) {\n const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold(arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire(\n {\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n },\n scope,\n )\n }\n}\n\nfunction downAndStartHold(\n { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n const timer = interaction.pointers[pointerIndex].hold!\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) return\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire(\n {\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n },\n scope,\n )\n }, minDuration)\n}\n\nfunction tapAfterUp(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n scope: Scope,\n) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install(scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/holdRepeat.d.ts b/packages/@interactjs/pointer-events/holdRepeat.d.ts new file mode 100644 index 000000000..fe9d1d527 --- /dev/null +++ b/packages/@interactjs/pointer-events/holdRepeat.d.ts @@ -0,0 +1,19 @@ +import type { Plugin } from '@interactjs/core/scope'; +import './base'; +declare module '@interactjs/core/Interaction' { + interface Interaction { + holdIntervalHandle?: any; + } +} +declare module '@interactjs/pointer-events/PointerEvent' { + interface PointerEvent { + count?: number; + } +} +declare module '@interactjs/pointer-events/base' { + interface PointerEventOptions { + holdRepeatInterval?: number; + } +} +declare const holdRepeat: Plugin; +export default holdRepeat; diff --git a/packages/@interactjs/pointer-events/holdRepeat.js b/packages/@interactjs/pointer-events/holdRepeat.js new file mode 100644 index 000000000..05b57ce10 --- /dev/null +++ b/packages/@interactjs/pointer-events/holdRepeat.js @@ -0,0 +1,78 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _base = _interopRequireDefault(require("./base")); +require("./PointerEvent"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +function install(scope) { + scope.usePlugin(_base.default); + const { + pointerEvents + } = scope; + + // don't repeat by default + pointerEvents.defaults.holdRepeatInterval = 0; + pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true; +} +function onNew({ + pointerEvent +}) { + if (pointerEvent.type !== 'hold') return; + pointerEvent.count = (pointerEvent.count || 0) + 1; +} +function onFired({ + interaction, + pointerEvent, + eventTarget, + targets +}, scope) { + if (pointerEvent.type !== 'hold' || !targets.length) return; + + // get the repeat interval from the first eventable + const interval = targets[0].eventable.options.holdRepeatInterval; + + // don't repeat if the interval is 0 or less + if (interval <= 0) return; + + // set a timeout to fire the holdrepeat event + interaction.holdIntervalHandle = setTimeout(() => { + scope.pointerEvents.fire({ + interaction, + eventTarget, + type: 'hold', + pointer: pointerEvent, + event: pointerEvent + }, scope); + }, interval); +} +function endHoldRepeat({ + interaction +}) { + // set the interaction's holdStopTime property + // to stop further holdRepeat events + if (interaction.holdIntervalHandle) { + clearInterval(interaction.holdIntervalHandle); + interaction.holdIntervalHandle = null; + } +} +const holdRepeat = { + id: 'pointer-events/holdRepeat', + install, + listeners: ['move', 'up', 'cancel', 'endall'].reduce((acc, enderTypes) => { + ; + acc[`pointerEvents:${enderTypes}`] = endHoldRepeat; + return acc; + }, { + 'pointerEvents:new': onNew, + 'pointerEvents:fired': onFired + }) +}; +var _default = exports.default = holdRepeat; +//# sourceMappingURL=holdRepeat.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/holdRepeat.js.map b/packages/@interactjs/pointer-events/holdRepeat.js.map new file mode 100644 index 000000000..c1fdf5907 --- /dev/null +++ b/packages/@interactjs/pointer-events/holdRepeat.js.map @@ -0,0 +1,56 @@ +{ + "version": 3, + "names": [ + "_base", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "install", + "scope", + "usePlugin", + "basePlugin", + "pointerEvents", + "defaults", + "holdRepeatInterval", + "types", + "holdrepeat", + "actions", + "phaselessTypes", + "onNew", + "pointerEvent", + "type", + "count", + "onFired", + "interaction", + "eventTarget", + "targets", + "length", + "interval", + "eventable", + "options", + "holdIntervalHandle", + "setTimeout", + "fire", + "pointer", + "event", + "endHoldRepeat", + "clearInterval", + "holdRepeat", + "id", + "listeners", + "reduce", + "acc", + "enderTypes", + "_default", + "exports" + ], + "sources": [ + "holdRepeat.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable import/no-duplicates */\nimport { type PointerEvent } from './PointerEvent'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n interface PointerEvent {\n count?: number\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install(scope: Scope) {\n scope.usePlugin(basePlugin)\n\n const { pointerEvents } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew({ pointerEvent }: { pointerEvent: PointerEvent }) {\n if (pointerEvent.type !== 'hold') return\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired(\n { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n scope: Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) return\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) return\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire(\n {\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n },\n scope,\n )\n }, interval)\n}\n\nfunction endHoldRepeat({ interaction }: { interaction: Interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nconst holdRepeat: Plugin = {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n } as ListenerMap,\n ),\n}\n\nexport default holdRepeat\n" + ], + "mappings": ";;;;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAGAA,OAAA;AAAkD,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAJlD;;AAGA;;AAqBA,SAASG,OAAOA,CAACC,KAAY,EAAE;EAC7BA,KAAK,CAACC,SAAS,CAACC,aAAU,CAAC;EAE3B,MAAM;IAAEC;EAAc,CAAC,GAAGH,KAAK;;EAE/B;EACAG,aAAa,CAACC,QAAQ,CAACC,kBAAkB,GAAG,CAAC;EAC7CF,aAAa,CAACG,KAAK,CAACC,UAAU,GAAGP,KAAK,CAACQ,OAAO,CAACC,cAAc,CAACF,UAAU,GAAG,IAAI;AACjF;AAEA,SAASG,KAAKA,CAAC;EAAEC;AAAkD,CAAC,EAAE;EACpE,IAAIA,YAAY,CAACC,IAAI,KAAK,MAAM,EAAE;EAElCD,YAAY,CAACE,KAAK,GAAG,CAACF,YAAY,CAACE,KAAK,IAAI,CAAC,IAAI,CAAC;AACpD;AAEA,SAASC,OAAOA,CACd;EAAEC,WAAW;EAAEJ,YAAY;EAAEK,WAAW;EAAEC;AAA2C,CAAC,EACtFjB,KAAY,EACZ;EACA,IAAIW,YAAY,CAACC,IAAI,KAAK,MAAM,IAAI,CAACK,OAAO,CAACC,MAAM,EAAE;;EAErD;EACA,MAAMC,QAAQ,GAAGF,OAAO,CAAC,CAAC,CAAC,CAACG,SAAS,CAACC,OAAO,CAAChB,kBAAkB;;EAEhE;EACA,IAAIc,QAAQ,IAAI,CAAC,EAAE;;EAEnB;EACAJ,WAAW,CAACO,kBAAkB,GAAGC,UAAU,CAAC,MAAM;IAChDvB,KAAK,CAACG,aAAa,CAACqB,IAAI,CACtB;MACET,WAAW;MACXC,WAAW;MACXJ,IAAI,EAAE,MAAM;MACZa,OAAO,EAAEd,YAAY;MACrBe,KAAK,EAAEf;IACT,CAAC,EACDX,KACF,CAAC;EACH,CAAC,EAAEmB,QAAQ,CAAC;AACd;AAEA,SAASQ,aAAaA,CAAC;EAAEZ;AAA0C,CAAC,EAAE;EACpE;EACA;EACA,IAAIA,WAAW,CAACO,kBAAkB,EAAE;IAClCM,aAAa,CAACb,WAAW,CAACO,kBAAkB,CAAC;IAC7CP,WAAW,CAACO,kBAAkB,GAAG,IAAI;EACvC;AACF;AAEA,MAAMO,UAAkB,GAAG;EACzBC,EAAE,EAAE,2BAA2B;EAC/B/B,OAAO;EACPgC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAACC,MAAM,CAClD,CAACC,GAAG,EAAEC,UAAU,KAAK;IACnB;IAAED,GAAG,CAAU,iBAAgBC,UAAW,EAAC,CAAC,GAAGP,aAAa;IAC5D,OAAOM,GAAG;EACZ,CAAC,EACD;IACE,mBAAmB,EAAEvB,KAAK;IAC1B,qBAAqB,EAAEI;EACzB,CACF;AACF,CAAC;AAAA,IAAAqB,QAAA,GAAAC,OAAA,CAAAtC,OAAA,GAEc+B,UAAU" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/holdRepeat.prod.js b/packages/@interactjs/pointer-events/holdRepeat.prod.js new file mode 100644 index 000000000..5d4e2213d --- /dev/null +++ b/packages/@interactjs/pointer-events/holdRepeat.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e,t=(e=require("./base"))&&e.__esModule?e:{default:e};function n({interaction:e}){e.holdIntervalHandle&&(clearInterval(e.holdIntervalHandle),e.holdIntervalHandle=null)}require("./PointerEvent");const l={id:"pointer-events/holdRepeat",install(e){e.usePlugin(t.default);const{pointerEvents:n}=e;n.defaults.holdRepeatInterval=0,n.types.holdrepeat=e.actions.phaselessTypes.holdrepeat=!0},listeners:["move","up","cancel","endall"].reduce(((e,t)=>(e["pointerEvents:"+t]=n,e)),{"pointerEvents:new"({pointerEvent:e}){"hold"===e.type&&(e.count=(e.count||0)+1)},"pointerEvents:fired"({interaction:e,pointerEvent:t,eventTarget:n,targets:l},o){if("hold"!==t.type||!l.length)return;const r=l[0].eventable.options.holdRepeatInterval;r<=0||(e.holdIntervalHandle=setTimeout((()=>{o.pointerEvents.fire({interaction:e,eventTarget:n,type:"hold",pointer:t,event:t},o)}),r))}})};exports.default=l; +//# sourceMappingURL=holdRepeat.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/holdRepeat.prod.js.map b/packages/@interactjs/pointer-events/holdRepeat.prod.js.map new file mode 100644 index 000000000..f8b7e99f0 --- /dev/null +++ b/packages/@interactjs/pointer-events/holdRepeat.prod.js.map @@ -0,0 +1,54 @@ +{ + "version": 3, + "names": [ + "obj", + "_base", + "require", + "__esModule", + "default", + "endHoldRepeat", + "interaction", + "holdIntervalHandle", + "clearInterval", + "holdRepeat", + "id", + "install", + "scope", + "usePlugin", + "basePlugin", + "pointerEvents", + "defaults", + "holdRepeatInterval", + "types", + "holdrepeat", + "actions", + "phaselessTypes", + "listeners", + "reduce", + "acc", + "enderTypes", + "onNew", + "pointerEvent", + "type", + "count", + "onFired", + "eventTarget", + "targets", + "length", + "interval", + "eventable", + "options", + "setTimeout", + "fire", + "pointer", + "event", + "exports" + ], + "sources": [ + "holdRepeat.ts" + ], + "sourcesContent": [ + "import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable import/no-duplicates */\nimport { type PointerEvent } from './PointerEvent'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n interface PointerEvent {\n count?: number\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install(scope: Scope) {\n scope.usePlugin(basePlugin)\n\n const { pointerEvents } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew({ pointerEvent }: { pointerEvent: PointerEvent }) {\n if (pointerEvent.type !== 'hold') return\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired(\n { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n scope: Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) return\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) return\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire(\n {\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n },\n scope,\n )\n }, interval)\n}\n\nfunction endHoldRepeat({ interaction }: { interaction: Interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nconst holdRepeat: Plugin = {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n } as ListenerMap,\n ),\n}\n\nexport default holdRepeat\n" + ], + "mappings": "8EAIA,IAGkDA,EAHlDC,GAGkDD,EAHlDE,QAAA,YAGkDF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GA+DlD,SAASK,GAAcC,YAAEA,IAGnBA,EAAYC,qBACdC,cAAcF,EAAYC,oBAC1BD,EAAYC,mBAAqB,KAErC,CAtEAL,QAAA,kBAwEA,MAAMO,EAAqB,CACzBC,GAAI,4BACJC,QAtDeC,GACfA,EAAMC,UAAUC,WAEhB,MAAMC,cAAEA,GAAkBH,EAG1BG,EAAcC,SAASC,mBAAqB,EAC5CF,EAAcG,MAAMC,WAAaP,EAAMQ,QAAQC,eAAeF,YAAa,CAC7E,EA+CEG,UAAW,CAAC,OAAQ,KAAM,SAAU,UAAUC,QAC5C,CAACC,EAAKC,KACFD,EAAa,iBAAgBC,GAAgBpB,EACxCmB,IAET,CACE,mBAAqBE,EAnDZC,aAAEA,IACW,SAAtBA,EAAaC,OAEjBD,EAAaE,OAASF,EAAaE,OAAS,GAAK,EACnD,EAgDM,qBAAuBC,EA7C3BxB,YAAEA,EAAWqB,aAAEA,EAAYI,YAAEA,EAAWC,QAAEA,GAC1CpB,GAEA,GAA0B,SAAtBe,EAAaC,OAAoBI,EAAQC,OAAQ,OAGrD,MAAMC,EAAWF,EAAQ,GAAGG,UAAUC,QAAQnB,mBAG1CiB,GAAY,IAGhB5B,EAAYC,mBAAqB8B,YAAW,KAC1CzB,EAAMG,cAAcuB,KAClB,CACEhC,cACAyB,cACAH,KAAM,OACNW,QAASZ,EACTa,MAAOb,GAETf,EACD,GACAsB,GACL,KAwBCO,QAAArC,QAEcK" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/index.d.ts b/packages/@interactjs/pointer-events/index.d.ts new file mode 100644 index 000000000..bc9145423 --- /dev/null +++ b/packages/@interactjs/pointer-events/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/pointer-events/plugin'; diff --git a/packages/@interactjs/pointer-events/index.js b/packages/@interactjs/pointer-events/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/pointer-events/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/index.js.map b/packages/@interactjs/pointer-events/index.js.map new file mode 100644 index 000000000..7a0e4fa86 --- /dev/null +++ b/packages/@interactjs/pointer-events/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/pointer-events/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/pointer-events/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/index.prod.js b/packages/@interactjs/pointer-events/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/pointer-events/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/index.prod.js.map b/packages/@interactjs/pointer-events/index.prod.js.map new file mode 100644 index 000000000..e54e7f3aa --- /dev/null +++ b/packages/@interactjs/pointer-events/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/pointer-events/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/pointer-events/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/index.ts b/packages/@interactjs/pointer-events/index.ts new file mode 100644 index 000000000..9f994b411 --- /dev/null +++ b/packages/@interactjs/pointer-events/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/pointer-events/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/pointer-events/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/interactableTargets.d.ts b/packages/@interactjs/pointer-events/interactableTargets.d.ts new file mode 100644 index 000000000..aa19f4295 --- /dev/null +++ b/packages/@interactjs/pointer-events/interactableTargets.d.ts @@ -0,0 +1,9 @@ +import type { Plugin } from '@interactjs/core/scope'; +import type { PointerEventOptions } from '@interactjs/pointer-events/base'; +declare module '@interactjs/core/Interactable' { + interface Interactable { + pointerEvents(options: Partial): this; + } +} +declare const plugin: Plugin; +export default plugin; diff --git a/packages/@interactjs/pointer-events/interactableTargets.js b/packages/@interactjs/pointer-events/interactableTargets.js new file mode 100644 index 000000000..fe8dd7223 --- /dev/null +++ b/packages/@interactjs/pointer-events/interactableTargets.js @@ -0,0 +1,67 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _extend = _interopRequireDefault(require("../utils/extend.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function install(scope) { + const { + Interactable + } = scope; + Interactable.prototype.pointerEvents = function (options) { + (0, _extend.default)(this.events.options, options); + return this; + }; + const __backCompatOption = Interactable.prototype._backCompatOption; + Interactable.prototype._backCompatOption = function (optionName, newValue) { + const ret = __backCompatOption.call(this, optionName, newValue); + if (ret === this) { + this.events.options[optionName] = newValue; + } + return ret; + }; +} +const plugin = { + id: 'pointer-events/interactableTargets', + install, + listeners: { + 'pointerEvents:collect-targets': ({ + targets, + node, + type, + eventTarget + }, scope) => { + scope.interactables.forEachMatch(node, interactable => { + const eventable = interactable.events; + const options = eventable.options; + if (eventable.types[type] && eventable.types[type].length && interactable.testIgnoreAllow(options, node, eventTarget)) { + targets.push({ + node, + eventable, + props: { + interactable + } + }); + } + }); + }, + 'interactable:new': ({ + interactable + }) => { + interactable.events.getRect = function (element) { + return interactable.getRect(element); + }; + }, + 'interactable:set': ({ + interactable, + options + }, scope) => { + (0, _extend.default)(interactable.events.options, scope.pointerEvents.defaults); + (0, _extend.default)(interactable.events.options, options.pointerEvents || {}); + } + } +}; +var _default = exports.default = plugin; +//# sourceMappingURL=interactableTargets.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/interactableTargets.js.map b/packages/@interactjs/pointer-events/interactableTargets.js.map new file mode 100644 index 000000000..380dad0a5 --- /dev/null +++ b/packages/@interactjs/pointer-events/interactableTargets.js.map @@ -0,0 +1,56 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "install", + "scope", + "Interactable", + "prototype", + "pointerEvents", + "options", + "extend", + "events", + "__backCompatOption", + "_backCompatOption", + "optionName", + "newValue", + "ret", + "call", + "plugin", + "id", + "listeners", + "pointerEvents:collect-targets", + "targets", + "node", + "type", + "eventTarget", + "interactables", + "forEachMatch", + "interactable", + "eventable", + "types", + "length", + "testIgnoreAllow", + "push", + "props", + "interactable:new", + "getRect", + "element", + "interactable:set", + "defaults", + "_default", + "exports" + ], + "sources": [ + "interactableTargets.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\n\nimport type { PointerEventOptions } from '@interactjs/pointer-events/base'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents(options: Partial): this\n /** @internal */\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.pointerEvents = function (\n this: Interactable,\n options: Partial,\n ) {\n extend(this.events.options, options)\n\n return this\n }\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nconst plugin: Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)\n ) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n" + ], + "mappings": ";;;;;;AAGA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAY7C,SAASG,OAAOA,CAACC,KAAY,EAAE;EAC7B,MAAM;IAAEC;EAAa,CAAC,GAAGD,KAAK;EAE9BC,YAAY,CAACC,SAAS,CAACC,aAAa,GAAG,UAErCC,OAAqC,EACrC;IACA,IAAAC,eAAM,EAAC,IAAI,CAACC,MAAM,CAACF,OAAO,EAAEA,OAAO,CAAC;IAEpC,OAAO,IAAI;EACb,CAAC;EAED,MAAMG,kBAAkB,GAAGN,YAAY,CAACC,SAAS,CAACM,iBAAiB;EAEnEP,YAAY,CAACC,SAAS,CAACM,iBAAiB,GAAG,UAAUC,UAAU,EAAEC,QAAQ,EAAE;IACzE,MAAMC,GAAG,GAAGJ,kBAAkB,CAACK,IAAI,CAAC,IAAI,EAAEH,UAAU,EAAEC,QAAQ,CAAC;IAE/D,IAAIC,GAAG,KAAK,IAAI,EAAE;MAChB,IAAI,CAACL,MAAM,CAACF,OAAO,CAACK,UAAU,CAAC,GAAGC,QAAQ;IAC5C;IAEA,OAAOC,GAAG;EACZ,CAAC;AACH;AAEA,MAAME,MAAc,GAAG;EACrBC,EAAE,EAAE,oCAAoC;EACxCf,OAAO;EACPgB,SAAS,EAAE;IACT,+BAA+B,EAAEC,CAAC;MAAEC,OAAO;MAAEC,IAAI;MAAEC,IAAI;MAAEC;IAAY,CAAC,EAAEpB,KAAK,KAAK;MAChFA,KAAK,CAACqB,aAAa,CAACC,YAAY,CAACJ,IAAI,EAAGK,YAA0B,IAAK;QACrE,MAAMC,SAAS,GAAGD,YAAY,CAACjB,MAAM;QACrC,MAAMF,OAAO,GAAGoB,SAAS,CAACpB,OAAO;QAEjC,IACEoB,SAAS,CAACC,KAAK,CAACN,IAAI,CAAC,IACrBK,SAAS,CAACC,KAAK,CAACN,IAAI,CAAC,CAACO,MAAM,IAC5BH,YAAY,CAACI,eAAe,CAACvB,OAAO,EAAEc,IAAI,EAAEE,WAAW,CAAC,EACxD;UACAH,OAAO,CAACW,IAAI,CAAC;YACXV,IAAI;YACJM,SAAS;YACTK,KAAK,EAAE;cAAEN;YAAa;UACxB,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB,EAAEO,CAAC;MAAEP;IAAa,CAAC,KAAK;MACxCA,YAAY,CAACjB,MAAM,CAACyB,OAAO,GAAG,UAAUC,OAAgB,EAAE;QACxD,OAAOT,YAAY,CAACQ,OAAO,CAACC,OAAO,CAAC;MACtC,CAAC;IACH,CAAC;IAED,kBAAkB,EAAEC,CAAC;MAAEV,YAAY;MAAEnB;IAAQ,CAAC,EAAEJ,KAAK,KAAK;MACxD,IAAAK,eAAM,EAACkB,YAAY,CAACjB,MAAM,CAACF,OAAO,EAAEJ,KAAK,CAACG,aAAa,CAAC+B,QAAQ,CAAC;MACjE,IAAA7B,eAAM,EAACkB,YAAY,CAACjB,MAAM,CAACF,OAAO,EAAEA,OAAO,CAACD,aAAa,IAAI,CAAC,CAAC,CAAC;IAClE;EACF;AACF,CAAC;AAAA,IAAAgC,QAAA,GAAAC,OAAA,CAAAtC,OAAA,GAEce,MAAM" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/interactableTargets.prod.js b/packages/@interactjs/pointer-events/interactableTargets.prod.js new file mode 100644 index 000000000..6d331a7e4 --- /dev/null +++ b/packages/@interactjs/pointer-events/interactableTargets.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var t,e=(t=require("../utils/extend.prod.js"))&&t.__esModule?t:{default:t};const n={id:"pointer-events/interactableTargets",install(t){const{Interactable:n}=t;n.prototype.pointerEvents=function(t){return(0,e.default)(this.events.options,t),this};const o=n.prototype._backCompatOption;n.prototype._backCompatOption=function(t,e){const n=o.call(this,t,e);return n===this&&(this.events.options[t]=e),n}},listeners:{"pointerEvents:collect-targets"({targets:t,node:e,type:n,eventTarget:o},s){s.interactables.forEachMatch(e,(s=>{const a=s.events,r=a.options;a.types[n]&&a.types[n].length&&s.testIgnoreAllow(r,e,o)&&t.push({node:e,eventable:a,props:{interactable:s}})}))},"interactable:new"({interactable:t}){t.events.getRect=e=>t.getRect(e)},"interactable:set"({interactable:t,options:n},o){(0,e.default)(t.events.options,o.pointerEvents.defaults),(0,e.default)(t.events.options,n.pointerEvents||{})}}};exports.default=n; +//# sourceMappingURL=interactableTargets.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/interactableTargets.prod.js.map b/packages/@interactjs/pointer-events/interactableTargets.prod.js.map new file mode 100644 index 000000000..dd23e0d31 --- /dev/null +++ b/packages/@interactjs/pointer-events/interactableTargets.prod.js.map @@ -0,0 +1,52 @@ +{ + "version": 3, + "names": [ + "obj", + "_extendProd", + "require", + "__esModule", + "default", + "plugin", + "id", + "install", + "scope", + "Interactable", + "prototype", + "pointerEvents", + "options", + "extend", + "this", + "events", + "__backCompatOption", + "_backCompatOption", + "optionName", + "newValue", + "ret", + "call", + "listeners", + "targets", + "node", + "type", + "eventTarget", + "interactables", + "forEachMatch", + "interactable", + "eventable", + "types", + "length", + "testIgnoreAllow", + "push", + "props", + "getRect", + "element", + "defaults", + "exports" + ], + "sources": [ + "interactableTargets.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\n\nimport type { PointerEventOptions } from '@interactjs/pointer-events/base'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents(options: Partial): this\n /** @internal */\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.pointerEvents = function (\n this: Interactable,\n options: Partial,\n ) {\n extend(this.events.options, options)\n\n return this\n }\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nconst plugin: Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)\n ) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n" + ], + "mappings": "8EAGA,IAA6CA,EAA7CC,GAA6CD,EAA7CE,QAAA,6BAA6CF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAqC7C,MAAMK,EAAiB,CACrBC,GAAI,qCACJC,QA3BeC,GACf,MAAMC,aAAEA,GAAiBD,EAEzBC,EAAaC,UAAUC,cAAgB,SAErCC,GAIA,OAFA,EAAAC,WAAOC,KAAKC,OAAOH,QAASA,GAErBE,IACT,EAEA,MAAME,EAAqBP,EAAaC,UAAUO,kBAElDR,EAAaC,UAAUO,kBAAoB,SAAUC,EAAYC,GAC/D,MAAMC,EAAMJ,EAAmBK,KAAKP,KAAMI,EAAYC,GAMtD,OAJIC,IAAQN,OACVA,KAAKC,OAAOH,QAAQM,GAAcC,GAG7BC,CACT,CACF,EAKEE,UAAW,CACT,+BAiBA,EAjBoCC,UAASC,OAAMC,OAAMC,eAAelB,GACtEA,EAAMmB,cAAcC,aAAaJ,GAAOK,IACtC,MAAMC,EAAYD,EAAad,OACzBH,EAAUkB,EAAUlB,QAGxBkB,EAAUC,MAAMN,IAChBK,EAAUC,MAAMN,GAAMO,QACtBH,EAAaI,gBAAgBrB,EAASY,EAAME,IAE5CH,EAAQW,KAAK,CACXV,OACAM,YACAK,MAAO,CAAEN,iBAEb,GACA,EAGJ,kBAIA,EAJuBA,iBACrBA,EAAad,OAAOqB,QAAoBC,GAC/BR,EAAaO,QAAQC,EAC7B,EAGH,kBAGA,EAHuBR,eAAcjB,WAAWJ,IAC9C,EAAAK,WAAOgB,EAAad,OAAOH,QAASJ,EAAMG,cAAc2B,WACxD,EAAAzB,WAAOgB,EAAad,OAAOH,QAASA,EAAQD,eAAiB,CAAC,EAAE,IAGrE4B,QAAAnC,QAEcC" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/plugin.d.ts b/packages/@interactjs/pointer-events/plugin.d.ts new file mode 100644 index 000000000..6760a50d5 --- /dev/null +++ b/packages/@interactjs/pointer-events/plugin.d.ts @@ -0,0 +1,6 @@ +import type { Plugin } from '@interactjs/core/scope'; +import './base'; +import './holdRepeat'; +import './interactableTargets'; +declare const plugin: Plugin; +export default plugin; diff --git a/packages/@interactjs/pointer-events/plugin.js b/packages/@interactjs/pointer-events/plugin.js new file mode 100644 index 000000000..869362b10 --- /dev/null +++ b/packages/@interactjs/pointer-events/plugin.js @@ -0,0 +1,26 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var pointerEvents = _interopRequireWildcard(require("./base")); +var _holdRepeat = _interopRequireDefault(require("./holdRepeat")); +var _interactableTargets = _interopRequireDefault(require("./interactableTargets")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +/* eslint-disable import/no-duplicates -- for typescript module augmentations */ + +/* eslint-enable import/no-duplicates */ + +const plugin = { + id: 'pointer-events', + install(scope) { + scope.usePlugin(pointerEvents); + scope.usePlugin(_holdRepeat.default); + scope.usePlugin(_interactableTargets.default); + } +}; +var _default = exports.default = plugin; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/plugin.js.map b/packages/@interactjs/pointer-events/plugin.js.map new file mode 100644 index 000000000..31f6a4917 --- /dev/null +++ b/packages/@interactjs/pointer-events/plugin.js.map @@ -0,0 +1,49 @@ +{ + "version": 3, + "names": [ + "pointerEvents", + "_interopRequireWildcard", + "require", + "_holdRepeat", + "_interopRequireDefault", + "_interactableTargets", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "plugin", + "id", + "install", + "scope", + "usePlugin", + "holdRepeat", + "interactableTargets", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './holdRepeat'\nimport './interactableTargets'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n/* eslint-enable import/no-duplicates */\n\nconst plugin: Plugin = {\n id: 'pointer-events',\n install(scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n },\n}\n\nexport default plugin\n" + ], + "mappings": ";;;;;;AAGA,IAAAA,aAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAD,sBAAA,CAAAF,OAAA;AAA8B,SAAAE,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAT,wBAAAS,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAH,UAAA,SAAAG,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAF,OAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAJ,CAAA,UAAAG,CAAA,CAAAE,GAAA,CAAAL,CAAA,OAAAM,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAY,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAE,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAc,GAAA,CAAAjB,CAAA,EAAAM,CAAA,GAAAA,CAAA;AAH9B;;AAQA;;AAEA,MAAMY,MAAc,GAAG;EACrBC,EAAE,EAAE,gBAAgB;EACpBC,OAAOA,CAACC,KAAK,EAAE;IACbA,KAAK,CAACC,SAAS,CAAChC,aAAa,CAAC;IAC9B+B,KAAK,CAACC,SAAS,CAACC,mBAAU,CAAC;IAC3BF,KAAK,CAACC,SAAS,CAACE,4BAAmB,CAAC;EACtC;AACF,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAA5B,OAAA,GAEcoB,MAAM" +} \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/plugin.prod.js b/packages/@interactjs/pointer-events/plugin.prod.js new file mode 100644 index 000000000..f48ae633f --- /dev/null +++ b/packages/@interactjs/pointer-events/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=u(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var l=o?Object.getOwnPropertyDescriptor(e,a):null;l&&(l.get||l.set)?Object.defineProperty(n,a,l):n[a]=e[a]}return n.default=e,r&&r.set(e,n),n})(require("./base")),t=n(require("./holdRepeat")),r=n(require("./interactableTargets"));function n(e){return e&&e.__esModule?e:{default:e}}function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(u=e=>e?r:t)(e)}const o={id:"pointer-events",install(n){n.usePlugin(e),n.usePlugin(t.default),n.usePlugin(r.default)}};exports.default=o; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/pointer-events/plugin.prod.js.map b/packages/@interactjs/pointer-events/plugin.prod.js.map new file mode 100644 index 000000000..a7b337896 --- /dev/null +++ b/packages/@interactjs/pointer-events/plugin.prod.js.map @@ -0,0 +1,48 @@ +{ + "version": 3, + "names": [ + "pointerEvents", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_holdRepeat", + "_interopRequireDefault", + "_interactableTargets", + "obj", + "WeakMap", + "plugin", + "id", + "install", + "scope", + "usePlugin", + "holdRepeat", + "interactableTargets", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './holdRepeat'\nimport './interactableTargets'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n/* eslint-enable import/no-duplicates */\n\nconst plugin: Plugin = {\n id: 'pointer-events',\n install(scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n },\n}\n\nexport default plugin\n" + ], + "mappings": "8EAGA,IAAAA,EAE8B,EAAAC,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,QAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,IAAA,EAF9BY,CAAAC,QAAA,WACAC,EAAAC,EAAAF,QAAA,iBACAG,EAAAD,EAAAF,QAAA,0BAA8B,SAAAE,EAAAE,GAAA,OAAAA,KAAAvB,WAAAuB,EAAA,CAAAtB,QAAAsB,EAAA,UAAApB,EAAAL,GAAA,sBAAA0B,QAAA,gBAAAzB,EAAA,IAAAyB,QAAAtB,EAAA,IAAAsB,QAAA,OAAArB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA,CAO9B,MAAM2B,EAAiB,CACrBC,GAAI,iBACJC,QAAQC,GACNA,EAAMC,UAAUhC,GAChB+B,EAAMC,UAAUC,WAChBF,EAAMC,UAAUE,UAClB,GACDC,QAAA/B,QAEcwB" +} \ No newline at end of file diff --git a/packages/@interactjs/reflow/.npmignore b/packages/@interactjs/reflow/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/reflow/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/reflow/LICENSE b/packages/@interactjs/reflow/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/reflow/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/reflow/index.d.ts b/packages/@interactjs/reflow/index.d.ts new file mode 100644 index 000000000..d5834e4dc --- /dev/null +++ b/packages/@interactjs/reflow/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/reflow/plugin'; diff --git a/packages/@interactjs/reflow/index.js b/packages/@interactjs/reflow/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/reflow/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/reflow/index.js.map b/packages/@interactjs/reflow/index.js.map new file mode 100644 index 000000000..3c0a0559a --- /dev/null +++ b/packages/@interactjs/reflow/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/reflow/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/reflow/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/reflow/index.prod.js b/packages/@interactjs/reflow/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/reflow/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/reflow/index.prod.js.map b/packages/@interactjs/reflow/index.prod.js.map new file mode 100644 index 000000000..549dc6248 --- /dev/null +++ b/packages/@interactjs/reflow/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/reflow/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/reflow/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/reflow/index.ts b/packages/@interactjs/reflow/index.ts new file mode 100644 index 000000000..1b23f1996 --- /dev/null +++ b/packages/@interactjs/reflow/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/reflow/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/reflow/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/reflow/plugin.d.ts b/packages/@interactjs/reflow/plugin.d.ts new file mode 100644 index 000000000..8e5a89128 --- /dev/null +++ b/packages/@interactjs/reflow/plugin.d.ts @@ -0,0 +1,46 @@ +import type { Interactable } from '@interactjs/core/Interactable'; +import type { DoAnyPhaseArg } from '@interactjs/core/Interaction'; +import type { Scope, Plugin } from '@interactjs/core/scope'; +import type { ActionName, ActionProps } from '@interactjs/core/types'; +declare module '@interactjs/core/scope' { + interface SignalArgs { + 'interactions:before-action-reflow': Omit; + 'interactions:action-reflow': DoAnyPhaseArg; + 'interactions:after-action-reflow': DoAnyPhaseArg; + } +} +declare module '@interactjs/core/Interactable' { + interface Interactable { + /** + * ```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 } A promise that resolves to the `Interactable` when actions on all targets have ended + */ + reflow(action: ActionProps): ReturnType; + } +} +declare module '@interactjs/core/Interaction' { + interface Interaction { + _reflowPromise: Promise; + _reflowResolve: (...args: unknown[]) => void; + } +} +declare module '@interactjs/core/InteractEvent' { + interface PhaseMap { + reflow?: true; + } +} +declare function doReflow(interactable: Interactable, action: ActionProps, scope: Scope): Promise; +declare const reflow: Plugin; +export default reflow; diff --git a/packages/@interactjs/reflow/plugin.js b/packages/@interactjs/reflow/plugin.js new file mode 100644 index 000000000..ad345a5ec --- /dev/null +++ b/packages/@interactjs/reflow/plugin.js @@ -0,0 +1,120 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var arr = _interopRequireWildcard(require("../utils/arr.js")); +var _misc = require("../utils/misc.js"); +var pointerUtils = _interopRequireWildcard(require("../utils/pointerUtils.js")); +var _rect = require("../utils/rect.js"); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function install(scope) { + const { + Interactable + } = scope; + scope.actions.phases.reflow = true; + Interactable.prototype.reflow = function (action) { + return doReflow(this, action, scope); + }; +} +function doReflow(interactable, action, scope) { + const elements = interactable.getAllElements(); + + // tslint:disable-next-line variable-name + const Promise = scope.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.interactable === interactable && interaction.element === element && interaction.prepared.name === action.name; + }); + let reflowPromise; + if (runningInteraction) { + runningInteraction.move(); + if (promises) { + reflowPromise = runningInteraction._reflowPromise || new Promise(resolve => { + runningInteraction._reflowResolve = resolve; + }); + } + } else { + const xywh = (0, _rect.tlbrToXywh)(rect); + const coords = { + page: { + x: xywh.x, + y: xywh.y + }, + client: { + x: xywh.x, + y: xywh.y + }, + timeStamp: scope.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 = scope.interactions.new({ + pointerType: 'reflow' + }); + const signalArg = { + interaction, + event, + pointer: event, + eventTarget: element, + phase: 'reflow' + }; + interaction.interactable = interactable; + interaction.element = element; + interaction.prevEvent = event; + interaction.updatePointer(event, event, element, true); + pointerUtils.setZeroCoords(interaction.coords.delta); + (0, _misc.copyAction)(interaction.prepared, action); + interaction._doPhase(signalArg); + const { + Promise + } = scope.window; + const reflowPromise = Promise ? new Promise(resolve => { + interaction._reflowResolve = resolve; + }) : undefined; + interaction._reflowPromise = reflowPromise; + interaction.start(action, interactable, element); + if (interaction._interacting) { + interaction.move(signalArg); + interaction.end(event); + } else { + interaction.stop(); + interaction._reflowResolve(); + } + interaction.removePointer(event, event); + return reflowPromise; +} +const reflow = { + id: 'reflow', + install, + listeners: { + // remove completed reflow interactions + 'interactions:stop': ({ + interaction + }, scope) => { + if (interaction.pointerType === 'reflow') { + if (interaction._reflowResolve) { + interaction._reflowResolve(); + } + arr.remove(scope.interactions.list, interaction); + } + } + } +}; +var _default = exports.default = reflow; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/reflow/plugin.js.map b/packages/@interactjs/reflow/plugin.js.map new file mode 100644 index 000000000..e8605f924 --- /dev/null +++ b/packages/@interactjs/reflow/plugin.js.map @@ -0,0 +1,108 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_misc", + "pointerUtils", + "_rect", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "install", + "scope", + "Interactable", + "actions", + "phases", + "reflow", + "action", + "doReflow", + "interactable", + "elements", + "getAllElements", + "Promise", + "window", + "promises", + "element", + "rect", + "getRect", + "runningInteraction", + "find", + "interactions", + "list", + "interaction", + "interacting", + "prepared", + "name", + "reflowPromise", + "move", + "_reflowPromise", + "resolve", + "_reflowResolve", + "xywh", + "tlbrToXywh", + "coords", + "page", + "x", + "y", + "client", + "timeStamp", + "now", + "event", + "coordsToEvent", + "startReflow", + "push", + "all", + "then", + "new", + "pointerType", + "signalArg", + "pointer", + "eventTarget", + "phase", + "prevEvent", + "updatePointer", + "setZeroCoords", + "delta", + "copyAction", + "_doPhase", + "undefined", + "start", + "_interacting", + "end", + "stop", + "removePointer", + "id", + "listeners", + "interactions:stop", + "remove", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-reflow': Omit\n 'interactions:action-reflow': DoAnyPhaseArg\n 'interactions:after-action-reflow': DoAnyPhaseArg\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n reflow(action: ActionProps): ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: (...args: unknown[]) => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n reflow?: true\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n scope.actions.phases.reflow = true\n\n Interactable.prototype.reflow = function (action: ActionProps) {\n return doReflow(this, action, scope)\n }\n}\n\nfunction doReflow(\n interactable: Interactable,\n action: ActionProps,\n scope: Scope,\n): Promise {\n const elements = interactable.getAllElements()\n\n // tslint:disable-next-line variable-name\n const Promise = (scope.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n if (!rect) {\n break\n }\n\n const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n return (\n interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n )\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise =\n runningInteraction._reflowPromise ||\n new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n } else {\n const xywh = tlbrToXywh(rect)\n const coords = {\n page: { x: xywh.x, y: xywh.y },\n client: { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow(\n scope: Scope,\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n event: any,\n) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n } as const\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n pointerUtils.setZeroCoords(interaction.coords.delta)\n\n copyAction(interaction.prepared, action)\n interaction._doPhase(signalArg)\n\n const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n const reflowPromise = Promise\n ? new Promise((resolve) => {\n interaction._reflowResolve = resolve\n })\n : undefined\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n } else {\n interaction.stop()\n interaction._reflowResolve()\n }\n\n interaction.removePointer(event, event)\n\n return reflowPromise\n}\n\nconst reflow: Plugin = {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === 'reflow') {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n}\n\nexport default reflow\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/reflow/plugin.prod.js b/packages/@interactjs/reflow/plugin.prod.js new file mode 100644 index 000000000..8160bf75b --- /dev/null +++ b/packages/@interactjs/reflow/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=i(require("../utils/arr.prod.js")),t=require("../utils/misc.prod.js"),r=i(require("../utils/pointerUtils.prod.js")),o=require("../utils/rect.prod.js");function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=e=>e?r:t)(e)}function i(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var l=i?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(o,s,l):o[s]=e[s]}return o.default=e,r&&r.set(e,o),o}function s(e,o,n,i,s){const l=e.interactions.new({pointerType:"reflow"}),a={interaction:l,event:s,pointer:s,eventTarget:n,phase:"reflow"};l.interactable=o,l.element=n,l.prevEvent=s,l.updatePointer(s,s,n,!0),r.setZeroCoords(l.coords.delta),(0,t.copyAction)(l.prepared,i),l._doPhase(a);const{Promise:p}=e.window,c=p?new p((e=>{l._reflowResolve=e})):void 0;return l._reflowPromise=c,l.start(i,o,n),l._interacting?(l.move(a),l.end(s)):(l.stop(),l._reflowResolve()),l.removePointer(s,s),c}const l={id:"reflow",install(t){const{Interactable:n}=t;t.actions.phases.reflow=!0,n.prototype.reflow=function(n){return((t,n,i)=>{const l=t.getAllElements(),a=i.window.Promise,p=a?[]:null;for(const c of l){const l=t.getRect(c);if(!l)break;const f=e.find(i.interactions.list,(e=>e.interacting()&&e.interactable===t&&e.element===c&&e.prepared.name===n.name));let u;if(f)f.move(),p&&(u=f._reflowPromise||new a((e=>{f._reflowResolve=e})));else{const e=(0,o.tlbrToXywh)(l),a={page:{x:e.x,y:e.y},client:{x:e.x,y:e.y},timeStamp:i.now()},p=r.coordsToEvent(a);u=s(i,t,c,n,p)}p&&p.push(u)}return p&&a.all(p).then((()=>t))})(this,n,t)}},listeners:{"interactions:stop"({interaction:t},r){"reflow"===t.pointerType&&(t._reflowResolve&&t._reflowResolve(),e.remove(r.interactions.list,t))}}};exports.default=l; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/reflow/plugin.prod.js.map b/packages/@interactjs/reflow/plugin.prod.js.map new file mode 100644 index 000000000..871d9ed50 --- /dev/null +++ b/packages/@interactjs/reflow/plugin.prod.js.map @@ -0,0 +1,107 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_miscProd", + "pointerUtils", + "_rectProd", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "startReflow", + "scope", + "interactable", + "element", + "action", + "event", + "interaction", + "interactions", + "new", + "pointerType", + "signalArg", + "pointer", + "eventTarget", + "phase", + "prevEvent", + "updatePointer", + "setZeroCoords", + "coords", + "delta", + "copyAction", + "prepared", + "_doPhase", + "Promise", + "window", + "reflowPromise", + "resolve", + "_reflowResolve", + "undefined", + "_reflowPromise", + "start", + "_interacting", + "move", + "end", + "stop", + "removePointer", + "reflow", + "id", + "install", + "Interactable", + "actions", + "phases", + "elements", + "getAllElements", + "promises", + "rect", + "getRect", + "runningInteraction", + "find", + "list", + "interacting", + "name", + "xywh", + "tlbrToXywh", + "page", + "x", + "y", + "client", + "timeStamp", + "now", + "coordsToEvent", + "push", + "all", + "then", + "doReflow", + "this", + "listeners", + "remove", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-reflow': Omit\n 'interactions:action-reflow': DoAnyPhaseArg\n 'interactions:after-action-reflow': DoAnyPhaseArg\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n reflow(action: ActionProps): ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: (...args: unknown[]) => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n reflow?: true\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n scope.actions.phases.reflow = true\n\n Interactable.prototype.reflow = function (action: ActionProps) {\n return doReflow(this, action, scope)\n }\n}\n\nfunction doReflow(\n interactable: Interactable,\n action: ActionProps,\n scope: Scope,\n): Promise {\n const elements = interactable.getAllElements()\n\n // tslint:disable-next-line variable-name\n const Promise = (scope.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n if (!rect) {\n break\n }\n\n const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n return (\n interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n )\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise =\n runningInteraction._reflowPromise ||\n new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n } else {\n const xywh = tlbrToXywh(rect)\n const coords = {\n page: { x: xywh.x, y: xywh.y },\n client: { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow(\n scope: Scope,\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n event: any,\n) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n } as const\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n pointerUtils.setZeroCoords(interaction.coords.delta)\n\n copyAction(interaction.prepared, action)\n interaction._doPhase(signalArg)\n\n const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n const reflowPromise = Promise\n ? new Promise((resolve) => {\n interaction._reflowResolve = resolve\n })\n : undefined\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n } else {\n interaction.stop()\n interaction._reflowResolve()\n }\n\n interaction.removePointer(event, event)\n\n return reflowPromise\n}\n\nconst reflow: Plugin = {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === 'reflow') {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n}\n\nexport default reflow\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/.npmignore b/packages/@interactjs/snappers/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/snappers/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/snappers/LICENSE b/packages/@interactjs/snappers/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/snappers/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/snappers/all.d.ts b/packages/@interactjs/snappers/all.d.ts new file mode 100644 index 000000000..87a63ac90 --- /dev/null +++ b/packages/@interactjs/snappers/all.d.ts @@ -0,0 +1,3 @@ +export { default as edgeTarget } from './edgeTarget'; +export { default as elements } from './elements'; +export { default as grid } from './grid'; diff --git a/packages/@interactjs/snappers/all.js b/packages/@interactjs/snappers/all.js new file mode 100644 index 000000000..be5f828de --- /dev/null +++ b/packages/@interactjs/snappers/all.js @@ -0,0 +1,28 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "edgeTarget", { + enumerable: true, + get: function () { + return _edgeTarget.default; + } +}); +Object.defineProperty(exports, "elements", { + enumerable: true, + get: function () { + return _elements.default; + } +}); +Object.defineProperty(exports, "grid", { + enumerable: true, + get: function () { + return _grid.default; + } +}); +var _edgeTarget = _interopRequireDefault(require("./edgeTarget")); +var _elements = _interopRequireDefault(require("./elements")); +var _grid = _interopRequireDefault(require("./grid")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +//# sourceMappingURL=all.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/all.js.map b/packages/@interactjs/snappers/all.js.map new file mode 100644 index 000000000..875ef28c9 --- /dev/null +++ b/packages/@interactjs/snappers/all.js.map @@ -0,0 +1,20 @@ +{ + "version": 3, + "names": [ + "_edgeTarget", + "_interopRequireDefault", + "require", + "_elements", + "_grid", + "obj", + "__esModule", + "default" + ], + "sources": [ + "all.ts" + ], + "sourcesContent": [ + "/* eslint-disable import/no-named-as-default, import/no-unresolved */\nexport { default as edgeTarget } from './edgeTarget'\nexport { default as elements } from './elements'\nexport { default as grid } from './grid'\n" + ], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,KAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAwC,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/all.prod.js b/packages/@interactjs/snappers/all.prod.js new file mode 100644 index 000000000..199b0dc68 --- /dev/null +++ b/packages/@interactjs/snappers/all.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"edgeTarget",{enumerable:!0,get:()=>e.default}),Object.defineProperty(exports,"elements",{enumerable:!0,get:()=>r.default}),Object.defineProperty(exports,"grid",{enumerable:!0,get:()=>t.default});var e=u(require("./edgeTarget")),r=u(require("./elements")),t=u(require("./grid"));function u(e){return e&&e.__esModule?e:{default:e}} +//# sourceMappingURL=all.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/all.prod.js.map b/packages/@interactjs/snappers/all.prod.js.map new file mode 100644 index 000000000..0a79d5f68 --- /dev/null +++ b/packages/@interactjs/snappers/all.prod.js.map @@ -0,0 +1,20 @@ +{ + "version": 3, + "names": [ + "_edgeTarget", + "_interopRequireDefault", + "require", + "_elements", + "_grid", + "obj", + "__esModule", + "default" + ], + "sources": [ + "all.ts" + ], + "sourcesContent": [ + "/* eslint-disable import/no-named-as-default, import/no-unresolved */\nexport { default as edgeTarget } from './edgeTarget'\nexport { default as elements } from './elements'\nexport { default as grid } from './grid'\n" + ], + "mappings": "yRACA,IAAAA,EAAAC,EAAAC,QAAA,iBACAC,EAAAF,EAAAC,QAAA,eACAE,EAAAH,EAAAC,QAAA,WAAwC,SAAAD,EAAAI,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/edgeTarget.d.ts b/packages/@interactjs/snappers/edgeTarget.d.ts new file mode 100644 index 000000000..4cab5535a --- /dev/null +++ b/packages/@interactjs/snappers/edgeTarget.d.ts @@ -0,0 +1,2 @@ +declare const _default: () => void; +export default _default; diff --git a/packages/@interactjs/snappers/edgeTarget.js b/packages/@interactjs/snappers/edgeTarget.js new file mode 100644 index 000000000..0e0e36ee2 --- /dev/null +++ b/packages/@interactjs/snappers/edgeTarget.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = () => {}; +exports.default = _default; +//# sourceMappingURL=edgeTarget.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/edgeTarget.js.map b/packages/@interactjs/snappers/edgeTarget.js.map new file mode 100644 index 000000000..249408ab2 --- /dev/null +++ b/packages/@interactjs/snappers/edgeTarget.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "names": [ + "_default", + "exports", + "default" + ], + "sources": [ + "edgeTarget.ts" + ], + "sourcesContent": [ + "export default () => {}\n" + ], + "mappings": ";;;;;;eAAeA,CAAA,KAAM,CAAC,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAF,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/edgeTarget.prod.js b/packages/@interactjs/snappers/edgeTarget.prod.js new file mode 100644 index 000000000..d7b8528c7 --- /dev/null +++ b/packages/@interactjs/snappers/edgeTarget.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default=()=>{}; +//# sourceMappingURL=edgeTarget.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/edgeTarget.prod.js.map b/packages/@interactjs/snappers/edgeTarget.prod.js.map new file mode 100644 index 000000000..db9ec6fd6 --- /dev/null +++ b/packages/@interactjs/snappers/edgeTarget.prod.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "names": [ + "exports", + "default", + "_default" + ], + "sources": [ + "edgeTarget.ts" + ], + "sourcesContent": [ + "export default () => {}\n" + ], + "mappings": "8EAAuBA,QAAAC,QAARC" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/edgeTarget.stub.d.ts b/packages/@interactjs/snappers/edgeTarget.stub.d.ts new file mode 100644 index 000000000..4cab5535a --- /dev/null +++ b/packages/@interactjs/snappers/edgeTarget.stub.d.ts @@ -0,0 +1,2 @@ +declare const _default: () => void; +export default _default; diff --git a/packages/@interactjs/snappers/elements.d.ts b/packages/@interactjs/snappers/elements.d.ts new file mode 100644 index 000000000..4cab5535a --- /dev/null +++ b/packages/@interactjs/snappers/elements.d.ts @@ -0,0 +1,2 @@ +declare const _default: () => void; +export default _default; diff --git a/packages/@interactjs/snappers/elements.js b/packages/@interactjs/snappers/elements.js new file mode 100644 index 000000000..0353b57c4 --- /dev/null +++ b/packages/@interactjs/snappers/elements.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = () => {}; +exports.default = _default; +//# sourceMappingURL=elements.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/elements.js.map b/packages/@interactjs/snappers/elements.js.map new file mode 100644 index 000000000..a0b04241b --- /dev/null +++ b/packages/@interactjs/snappers/elements.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "names": [ + "_default", + "exports", + "default" + ], + "sources": [ + "elements.ts" + ], + "sourcesContent": [ + "export default () => {}\n" + ], + "mappings": ";;;;;;eAAeA,CAAA,KAAM,CAAC,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAF,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/elements.prod.js b/packages/@interactjs/snappers/elements.prod.js new file mode 100644 index 000000000..23c6d38dc --- /dev/null +++ b/packages/@interactjs/snappers/elements.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default=()=>{}; +//# sourceMappingURL=elements.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/elements.prod.js.map b/packages/@interactjs/snappers/elements.prod.js.map new file mode 100644 index 000000000..6b4f9fa3e --- /dev/null +++ b/packages/@interactjs/snappers/elements.prod.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "names": [ + "exports", + "default", + "_default" + ], + "sources": [ + "elements.ts" + ], + "sourcesContent": [ + "export default () => {}\n" + ], + "mappings": "8EAAuBA,QAAAC,QAARC" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/elements.stub.d.ts b/packages/@interactjs/snappers/elements.stub.d.ts new file mode 100644 index 000000000..4cab5535a --- /dev/null +++ b/packages/@interactjs/snappers/elements.stub.d.ts @@ -0,0 +1,2 @@ +declare const _default: () => void; +export default _default; diff --git a/packages/@interactjs/snappers/grid.d.ts b/packages/@interactjs/snappers/grid.d.ts new file mode 100644 index 000000000..7190fe565 --- /dev/null +++ b/packages/@interactjs/snappers/grid.d.ts @@ -0,0 +1,29 @@ +import type { Rect, Point } from '@interactjs/core/types'; +import type { SnapFunction } from '@interactjs/modifiers/snap/pointer'; +export interface GridOptionsBase { + range?: number; + limits?: Rect; + offset?: Point; +} +export interface GridOptionsXY extends GridOptionsBase { + x: number; + y: number; +} +export interface GridOptionsTopLeft extends GridOptionsBase { + top?: number; + left?: number; +} +export interface GridOptionsBottomRight extends GridOptionsBase { + bottom?: number; + right?: number; +} +export interface GridOptionsWidthHeight extends GridOptionsBase { + width?: number; + height?: number; +} +export type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight; +declare const _default: (grid: GridOptions) => SnapFunction & { + grid: GridOptions; + coordFields: (readonly ["x", "y"] | readonly ["left", "top"] | readonly ["right", "bottom"] | readonly ["width", "height"])[]; +}; +export default _default; diff --git a/packages/@interactjs/snappers/grid.js b/packages/@interactjs/snappers/grid.js new file mode 100644 index 000000000..6009413bc --- /dev/null +++ b/packages/@interactjs/snappers/grid.js @@ -0,0 +1,42 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = grid => { + const coordFields = [['x', 'y'], ['left', 'top'], ['right', 'bottom'], ['width', 'height']].filter(([xField, yField]) => xField in grid || yField in grid); + const gridFunc = (x, y) => { + const { + range, + limits = { + left: -Infinity, + right: Infinity, + top: -Infinity, + bottom: Infinity + }, + offset = { + x: 0, + y: 0 + } + } = grid; + const result = { + range, + grid, + x: null, + y: null + }; + for (const [xField, yField] of coordFields) { + const gridx = Math.round((x - offset.x) / grid[xField]); + const gridy = Math.round((y - offset.y) / grid[yField]); + result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x)); + result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y)); + } + return result; + }; + gridFunc.grid = grid; + gridFunc.coordFields = coordFields; + return gridFunc; +}; +exports.default = _default; +//# sourceMappingURL=grid.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/grid.js.map b/packages/@interactjs/snappers/grid.js.map new file mode 100644 index 000000000..28d4fc2db --- /dev/null +++ b/packages/@interactjs/snappers/grid.js.map @@ -0,0 +1,38 @@ +{ + "version": 3, + "names": [ + "grid", + "coordFields", + "filter", + "xField", + "yField", + "gridFunc", + "x", + "y", + "range", + "limits", + "left", + "Infinity", + "right", + "top", + "bottom", + "offset", + "result", + "gridx", + "Math", + "round", + "gridy", + "max", + "min", + "exports", + "default", + "_default" + ], + "sources": [ + "grid.ts" + ], + "sourcesContent": [ + "import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport interface GridOptionsBase {\n range?: number\n limits?: Rect\n offset?: Point\n}\nexport interface GridOptionsXY extends GridOptionsBase {\n x: number\n y: number\n}\nexport interface GridOptionsTopLeft extends GridOptionsBase {\n top?: number\n left?: number\n}\nexport interface GridOptionsBottomRight extends GridOptionsBase {\n bottom?: number\n right?: number\n}\nexport interface GridOptionsWidthHeight extends GridOptionsBase {\n width?: number\n height?: number\n}\n\nexport type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight\n\nexport default (grid: GridOptions) => {\n const coordFields = (\n [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ] as const\n ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc: SnapFunction & {\n grid: typeof grid\n coordFields: typeof coordFields\n } = (x, y) => {\n const {\n range,\n limits = {\n left: -Infinity,\n right: Infinity,\n top: -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result: SnapTarget & {\n grid: typeof grid\n } = { range, grid, x: null as number, y: null as number }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n }\n\n return result\n }\n\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n" + ], + "mappings": ";;;;;;eA2BgBA,IAAiB,IAAK;EACpC,MAAMC,WAAW,GACf,CACE,CAAC,GAAG,EAAE,GAAG,CAAC,EACV,CAAC,MAAM,EAAE,KAAK,CAAC,EACf,CAAC,OAAO,EAAE,QAAQ,CAAC,EACnB,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpB,CACDC,MAAM,CAAC,CAAC,CAACC,MAAM,EAAEC,MAAM,CAAC,KAAKD,MAAM,IAAIH,IAAI,IAAII,MAAM,IAAIJ,IAAI,CAAC;EAEhE,MAAMK,QAGL,GAAGA,CAACC,CAAC,EAAEC,CAAC,KAAK;IACZ,MAAM;MACJC,KAAK;MACLC,MAAM,GAAG;QACPC,IAAI,EAAE,CAACC,QAAQ;QACfC,KAAK,EAAED,QAAQ;QACfE,GAAG,EAAE,CAACF,QAAQ;QACdG,MAAM,EAAEH;MACV,CAAC;MACDI,MAAM,GAAG;QAAET,CAAC,EAAE,CAAC;QAAEC,CAAC,EAAE;MAAE;IACxB,CAAC,GAAGP,IAAI;IAER,MAAMgB,MAEL,GAAG;MAAER,KAAK;MAAER,IAAI;MAAEM,CAAC,EAAE,IAAc;MAAEC,CAAC,EAAE;IAAe,CAAC;IAEzD,KAAK,MAAM,CAACJ,MAAM,EAAEC,MAAM,CAAC,IAAIH,WAAW,EAAE;MAC1C,MAAMgB,KAAK,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACb,CAAC,GAAGS,MAAM,CAACT,CAAC,IAAKN,IAAI,CAASG,MAAM,CAAC,CAAC;MAChE,MAAMiB,KAAK,GAAGF,IAAI,CAACC,KAAK,CAAC,CAACZ,CAAC,GAAGQ,MAAM,CAACR,CAAC,IAAKP,IAAI,CAASI,MAAM,CAAC,CAAC;MAEhEY,MAAM,CAACb,MAAM,CAAC,GAAGe,IAAI,CAACG,GAAG,CAACZ,MAAM,CAACC,IAAI,EAAEQ,IAAI,CAACI,GAAG,CAACb,MAAM,CAACG,KAAK,EAAEK,KAAK,GAAIjB,IAAI,CAASG,MAAM,CAAC,GAAGY,MAAM,CAACT,CAAC,CAAC,CAAC;MACxGU,MAAM,CAACZ,MAAM,CAAC,GAAGc,IAAI,CAACG,GAAG,CAACZ,MAAM,CAACI,GAAG,EAAEK,IAAI,CAACI,GAAG,CAACb,MAAM,CAACK,MAAM,EAAEM,KAAK,GAAIpB,IAAI,CAASI,MAAM,CAAC,GAAGW,MAAM,CAACR,CAAC,CAAC,CAAC;IAC1G;IAEA,OAAOS,MAAM;EACf,CAAC;EAEDX,QAAQ,CAACL,IAAI,GAAGA,IAAI;EACpBK,QAAQ,CAACJ,WAAW,GAAGA,WAAW;EAElC,OAAOI,QAAQ;AACjB,CAAC;AAAAkB,OAAA,CAAAC,OAAA,GAAAC,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/grid.prod.js b/packages/@interactjs/snappers/grid.prod.js new file mode 100644 index 000000000..9cc22a144 --- /dev/null +++ b/packages/@interactjs/snappers/grid.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default=t=>{const o=[["x","y"],["left","top"],["right","bottom"],["width","height"]].filter((([o,e])=>o in t||e in t)),e=(e,r)=>{const{range:i,limits:n={left:-1/0,right:1/0,top:-1/0,bottom:1/0},offset:l={x:0,y:0}}=t,a={range:i,grid:t,x:null,y:null};for(const[i,d]of o){const o=Math.round((e-l.x)/t[i]),h=Math.round((r-l.y)/t[d]);a[i]=Math.max(n.left,Math.min(n.right,o*t[i]+l.x)),a[d]=Math.max(n.top,Math.min(n.bottom,h*t[d]+l.y))}return a};return e.grid=t,e.coordFields=o,e}; +//# sourceMappingURL=grid.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/grid.prod.js.map b/packages/@interactjs/snappers/grid.prod.js.map new file mode 100644 index 000000000..bbfb2aeb5 --- /dev/null +++ b/packages/@interactjs/snappers/grid.prod.js.map @@ -0,0 +1,37 @@ +{ + "version": 3, + "names": [ + "exports", + "default", + "grid", + "coordFields", + "filter", + "xField", + "yField", + "gridFunc", + "x", + "y", + "range", + "limits", + "left", + "right", + "Infinity", + "top", + "bottom", + "offset", + "result", + "gridx", + "Math", + "round", + "gridy", + "max", + "min" + ], + "sources": [ + "grid.ts" + ], + "sourcesContent": [ + "import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport interface GridOptionsBase {\n range?: number\n limits?: Rect\n offset?: Point\n}\nexport interface GridOptionsXY extends GridOptionsBase {\n x: number\n y: number\n}\nexport interface GridOptionsTopLeft extends GridOptionsBase {\n top?: number\n left?: number\n}\nexport interface GridOptionsBottomRight extends GridOptionsBase {\n bottom?: number\n right?: number\n}\nexport interface GridOptionsWidthHeight extends GridOptionsBase {\n width?: number\n height?: number\n}\n\nexport type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight\n\nexport default (grid: GridOptions) => {\n const coordFields = (\n [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ] as const\n ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc: SnapFunction & {\n grid: typeof grid\n coordFields: typeof coordFields\n } = (x, y) => {\n const {\n range,\n limits = {\n left: -Infinity,\n right: Infinity,\n top: -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result: SnapTarget & {\n grid: typeof grid\n } = { range, grid, x: null as number, y: null as number }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n }\n\n return result\n }\n\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n" + ], + "mappings": "8EAuECA,QAAAC,QA5CeC,IACd,MAAMC,EACJ,CACE,CAAC,IAAK,KACN,CAAC,OAAQ,OACT,CAAC,QAAS,UACV,CAAC,QAAS,WAEZC,QAAO,EAAEC,EAAQC,KAAYD,KAAUH,GAAQI,KAAUJ,IAErDK,EAGFA,CAACC,EAAGC,KACN,MAAMC,MACJA,EAAKC,OACLA,EAAS,CACPC,MAAM,IACNC,MAAOC,IACPC,KAAK,IACLC,OAAQF,KACTG,OACDA,EAAS,CAAET,EAAG,EAAGC,EAAG,IAClBP,EAEEgB,EAEF,CAAER,QAAOR,OAAMM,EAAG,KAAgBC,EAAG,MAEzC,IAAK,MAAOJ,EAAQC,KAAWH,EAAa,CAC1C,MAAMgB,EAAQC,KAAKC,OAAOb,EAAIS,EAAOT,GAAMN,EAAaG,IAClDiB,EAAQF,KAAKC,OAAOZ,EAAIQ,EAAOR,GAAMP,EAAaI,IAExDY,EAAOb,GAAUe,KAAKG,IAAIZ,EAAOC,KAAMQ,KAAKI,IAAIb,EAAOE,MAAOM,EAASjB,EAAaG,GAAUY,EAAOT,IACrGU,EAAOZ,GAAUc,KAAKG,IAAIZ,EAAOI,IAAKK,KAAKI,IAAIb,EAAOK,OAAQM,EAASpB,EAAaI,GAAUW,EAAOR,GACvG,CAEA,OAAOS,CAAM,EAMf,OAHAX,EAASL,KAAOA,EAChBK,EAASJ,YAAcA,EAEhBI,CAAQ" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/index.d.ts b/packages/@interactjs/snappers/index.d.ts new file mode 100644 index 000000000..fc81c7ffe --- /dev/null +++ b/packages/@interactjs/snappers/index.d.ts @@ -0,0 +1 @@ +import '@interactjs/snappers/plugin'; diff --git a/packages/@interactjs/snappers/index.js b/packages/@interactjs/snappers/index.js new file mode 100644 index 000000000..61f2d3a72 --- /dev/null +++ b/packages/@interactjs/snappers/index.js @@ -0,0 +1,9 @@ +"use strict"; + +var _plugin = _interopRequireDefault(require("./plugin.js")); +var _index = _interopRequireDefault(require("../interact/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ + +_index.default.use(_plugin.default); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/index.js.map b/packages/@interactjs/snappers/index.js.map new file mode 100644 index 000000000..dfaa8094c --- /dev/null +++ b/packages/@interactjs/snappers/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "_plugin", + "_interopRequireDefault", + "require", + "_index", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/snappers/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/snappers/plugin'\ninteract.use(plugin)" + ], + "mappings": ";;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAFjD;;AAIAG,cAAQ,CAACC,GAAG,CAACC,eAAM,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/index.prod.js b/packages/@interactjs/snappers/index.prod.js new file mode 100644 index 000000000..10ea6902f --- /dev/null +++ b/packages/@interactjs/snappers/index.prod.js @@ -0,0 +1,2 @@ +var e=r(require("./plugin.prod.js"));function r(e){return e&&e.__esModule?e:{default:e}}r(require("../interact/index.prod.js")).default.use(e.default); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/index.prod.js.map b/packages/@interactjs/snappers/index.prod.js.map new file mode 100644 index 000000000..68f6de391 --- /dev/null +++ b/packages/@interactjs/snappers/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "_pluginProd", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "interact", + "use", + "plugin" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */\nimport '@interactjs/snappers/plugin'\nimport interact from '@interactjs/interact/index'\nimport plugin from '@interactjs/snappers/plugin'\ninteract.use(plugin)" + ], + "mappings": "AACA,IAAAA,EAAAC,EAAAC,QAAA,qBACiD,SAAAD,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAAjDF,EAAAC,QAAA,8BAEAI,QAASC,IAAIC" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/index.ts b/packages/@interactjs/snappers/index.ts new file mode 100644 index 000000000..5f45adeac --- /dev/null +++ b/packages/@interactjs/snappers/index.ts @@ -0,0 +1,5 @@ +/* eslint-disable no-console, eol-last, import/no-duplicates, import/no-extraneous-dependencies, import/order */ +import '@interactjs/snappers/plugin' +import interact from '@interactjs/interact/index' +import plugin from '@interactjs/snappers/plugin' +interact.use(plugin) \ No newline at end of file diff --git a/packages/@interactjs/snappers/plugin.d.ts b/packages/@interactjs/snappers/plugin.d.ts new file mode 100644 index 000000000..224cc5c4f --- /dev/null +++ b/packages/@interactjs/snappers/plugin.d.ts @@ -0,0 +1,10 @@ +import type { Plugin } from '@interactjs/core/scope'; +import * as allSnappers from './all'; +declare module '@interactjs/core/InteractStatic' { + interface InteractStatic { + snappers: typeof allSnappers; + createSnapGrid: typeof allSnappers.grid; + } +} +declare const snappersPlugin: Plugin; +export default snappersPlugin; diff --git a/packages/@interactjs/snappers/plugin.js b/packages/@interactjs/snappers/plugin.js new file mode 100644 index 000000000..215e96940 --- /dev/null +++ b/packages/@interactjs/snappers/plugin.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _extend = _interopRequireDefault(require("../utils/extend.js")); +var allSnappers = _interopRequireWildcard(require("./all")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const snappersPlugin = { + id: 'snappers', + install(scope) { + const { + interactStatic: interact + } = scope; + interact.snappers = (0, _extend.default)(interact.snappers || {}, allSnappers); + interact.createSnapGrid = interact.snappers.grid; + } +}; +var _default = exports.default = snappersPlugin; +//# sourceMappingURL=plugin.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/plugin.js.map b/packages/@interactjs/snappers/plugin.js.map new file mode 100644 index 000000000..c96d11508 --- /dev/null +++ b/packages/@interactjs/snappers/plugin.js.map @@ -0,0 +1,51 @@ +{ + "version": 3, + "names": [ + "_extend", + "_interopRequireDefault", + "require", + "allSnappers", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "snappersPlugin", + "id", + "install", + "scope", + "interactStatic", + "interact", + "snappers", + "extend", + "createSnapGrid", + "grid", + "_default", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n snappers: typeof allSnappers\n createSnapGrid: typeof allSnappers.grid\n }\n}\n\nconst snappersPlugin: Plugin = {\n id: 'snappers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n interact.snappers = extend(interact.snappers || {}, allSnappers)\n interact.createSnapGrid = interact.snappers.grid\n },\n}\n\nexport default snappersPlugin\n" + ], + "mappings": ";;;;;;AACA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAoC,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAb,uBAAAyB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AASpC,MAAMC,cAAsB,GAAG;EAC7BC,EAAE,EAAE,UAAU;EACdC,OAAOA,CAACC,KAAK,EAAE;IACb,MAAM;MAAEC,cAAc,EAAEC;IAAS,CAAC,GAAGF,KAAK;IAE1CE,QAAQ,CAACC,QAAQ,GAAG,IAAAC,eAAM,EAACF,QAAQ,CAACC,QAAQ,IAAI,CAAC,CAAC,EAAE9B,WAAW,CAAC;IAChE6B,QAAQ,CAACG,cAAc,GAAGH,QAAQ,CAACC,QAAQ,CAACG,IAAI;EAClD;AACF,CAAC;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAA3B,OAAA,GAEcgB,cAAc" +} \ No newline at end of file diff --git a/packages/@interactjs/snappers/plugin.prod.js b/packages/@interactjs/snappers/plugin.prod.js new file mode 100644 index 000000000..9e050c821 --- /dev/null +++ b/packages/@interactjs/snappers/plugin.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e,t=(e=require("../utils/extend.prod.js"))&&e.__esModule?e:{default:e},r=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=n(t);if(r&&r.has(e))return r.get(e);var a={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in e)if("default"!==p&&Object.prototype.hasOwnProperty.call(e,p)){var u=o?Object.getOwnPropertyDescriptor(e,p):null;u&&(u.get||u.set)?Object.defineProperty(a,p,u):a[p]=e[p]}return a.default=e,r&&r.set(e,a),a})(require("./all"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(n=e=>e?r:t)(e)}const a={id:"snappers",install(e){const{interactStatic:n}=e;n.snappers=(0,t.default)(n.snappers||{},r),n.createSnapGrid=n.snappers.grid}};exports.default=a; +//# sourceMappingURL=plugin.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/snappers/plugin.prod.js.map b/packages/@interactjs/snappers/plugin.prod.js.map new file mode 100644 index 000000000..79f54bbbf --- /dev/null +++ b/packages/@interactjs/snappers/plugin.prod.js.map @@ -0,0 +1,49 @@ +{ + "version": 3, + "names": [ + "obj", + "_extendProd", + "require", + "__esModule", + "default", + "allSnappers", + "e", + "r", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "snappersPlugin", + "id", + "install", + "scope", + "interactStatic", + "interact", + "snappers", + "extend", + "createSnapGrid", + "grid", + "exports" + ], + "sources": [ + "plugin.ts" + ], + "sourcesContent": [ + "import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n snappers: typeof allSnappers\n createSnapGrid: typeof allSnappers.grid\n }\n}\n\nconst snappersPlugin: Plugin = {\n id: 'snappers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n interact.snappers = extend(interact.snappers || {}, allSnappers)\n interact.createSnapGrid = interact.snappers.grid\n },\n}\n\nexport default snappersPlugin\n" + ], + "mappings": "8EACA,IAEoCA,EAFpCC,GAEoCD,EAFpCE,QAAA,6BAEoCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAApCK,EAAoC,EAAAC,EAAAC,KAAA,GAAAD,KAAAH,WAAA,OAAAG,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAF,QAAAE,GAAA,IAAAE,EAAAC,EAAAF,GAAA,GAAAC,KAAAE,IAAAJ,GAAA,OAAAE,EAAAG,IAAAL,GAAA,IAAAM,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAZ,EAAA,eAAAY,GAAAH,OAAAI,UAAAC,eAAAC,KAAAf,EAAAY,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAX,EAAAY,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAZ,EAAAY,EAAA,QAAAN,EAAAR,QAAAE,EAAAE,KAAAe,IAAAjB,EAAAM,IAAA,EAApCY,CAAAtB,QAAA,UAAoC,SAAAO,EAAAH,GAAA,sBAAAmB,QAAA,gBAAAlB,EAAA,IAAAkB,QAAAjB,EAAA,IAAAiB,QAAA,OAAAhB,EAAAH,KAAAE,EAAAD,GAAAD,EAAA,CASpC,MAAMoB,EAAyB,CAC7BC,GAAI,WACJC,QAAQC,GACN,MAAQC,eAAgBC,GAAaF,EAErCE,EAASC,UAAW,EAAAC,WAAOF,EAASC,UAAY,CAAC,EAAG3B,GACpD0B,EAASG,eAAiBH,EAASC,SAASG,IAC9C,GACDC,QAAAhC,QAEcsB" +} \ No newline at end of file diff --git a/packages/@interactjs/types/.npmignore b/packages/@interactjs/types/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/types/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/types/LICENSE b/packages/@interactjs/types/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/types/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/types/index.d.ts b/packages/@interactjs/types/index.d.ts new file mode 100644 index 000000000..4975b61de --- /dev/null +++ b/packages/@interactjs/types/index.d.ts @@ -0,0 +1,3257 @@ +declare module "@interactjs/utils/domObjects" { + const domObjects: { + init: any; + document: Document; + DocumentFragment: typeof DocumentFragment; + SVGElement: typeof SVGElement; + SVGSVGElement: typeof SVGSVGElement; + SVGElementInstance: any; + Element: typeof Element; + HTMLElement: typeof HTMLElement; + Event: typeof Event; + Touch: typeof Touch; + PointerEvent: typeof PointerEvent; + }; + export default domObjects; +} +declare module "@interactjs/utils/isWindow" { + const _default: (thing: any) => boolean; + export default _default; +} +declare module "@interactjs/utils/window" { + export let realWindow: Window; + let win: Window; + export { win as window }; + export function init(window: Window & { + wrap?: (...args: any[]) => any; + }): void; + export function getWindow(node: any): any; +} +declare module "@interactjs/utils/is" { + const _default_1: { + window: (thing: any) => thing is Window; + docFrag: (thing: any) => thing is DocumentFragment; + object: (thing: any) => thing is { + [index: string]: any; + }; + func: (thing: any) => thing is (...args: any[]) => any; + number: (thing: any) => thing is number; + bool: (thing: any) => thing is boolean; + string: (thing: any) => thing is string; + element: (thing: any) => thing is HTMLElement | SVGElement; + plainObject: (thing: any) => thing is { + [index: string]: any; + }; + array: (thing: any) => thing is T[]; + }; + export default _default_1; +} +declare module "@interactjs/utils/browser" { + const browser: { + init: typeof init; + supportsTouch: boolean; + supportsPointerEvent: boolean; + isIOS7: boolean; + isIOS: boolean; + isIe9: boolean; + isOperaMobile: boolean; + prefixedMatchesSelector: "matches"; + pEventTypes: { + up: string; + down: string; + over: string; + out: string; + move: string; + cancel: string; + }; + wheelEvent: string; + }; + function init(window: any): void; + export default browser; +} +declare module "@interactjs/utils/arr" { + type Filter = (element: T, index: number, array: T[]) => boolean; + export const contains: (array: T[], target: T) => boolean; + export const remove: (array: T[], target: T) => T[]; + export const merge: (target: (T | U)[], source: U[]) => (T | U)[]; + export const from: (source: ArrayLike) => T[]; + export const findIndex: (array: T[], func: Filter) => number; + export const find: (array: T[], func: Filter) => T; +} +declare module "@interactjs/utils/clone" { + export default function clone(source: T): Partial; +} +declare module "@interactjs/utils/extend" { + export default function extend(dest: U & Partial, source: T): T & U; +} +declare module "@interactjs/utils/raf" { + function init(global: Window | typeof globalThis): void; + const _default_2: { + request: (callback: FrameRequestCallback) => number; + cancel: (token: number) => void; + init: typeof init; + }; + export default _default_2; +} +declare module "@interactjs/utils/hypot" { + const _default_3: (x: number, y: number) => number; + export default _default_3; +} +declare module "@interactjs/utils/domUtils" { + import type { Rect, Target, Element } from "@interactjs/core/types"; + export function nodeContains(parent: Node, child: Node): boolean; + export function closest(element: Node, selector: string): HTMLElement | SVGElement; + export function parentNode(node: Node | Document): ParentNode; + export function matchesSelector(element: Element, selector: string): boolean; + export function indexOfDeepestElement(elements: Element[] | NodeListOf): number; + export function matchesUpTo(element: Element, selector: string, limit: Node): boolean; + export function getActualElement(element: Element): any; + export function getScrollXY(relevantWindow?: Window): { + x: number; + y: number; + }; + export function getElementClientRect(element: Element): Required; + export function getElementRect(element: Element): Required; + export function getPath(node: Node | Document): any[]; + export function trySelector(value: Target): boolean; +} +declare module "@interactjs/utils/isNonNativeEvent" { + import type { Actions } from "@interactjs/core/types"; + export default function isNonNativeEvent(type: string, actions: Actions): boolean; +} +declare module "@interactjs/utils/normalizeListeners" { + import type { EventTypes, Listener, ListenersArg } from "@interactjs/core/types"; + export interface NormalizedListeners { + [type: string]: Listener[]; + } + export default function normalize(type: EventTypes, listeners?: ListenersArg | ListenersArg[] | null, filter?: (_typeOrPrefix: string) => boolean, result?: NormalizedListeners): NormalizedListeners; +} +declare module "@interactjs/core/Eventable" { + import type { NormalizedListeners } from "@interactjs/utils/normalizeListeners"; + import type { ListenersArg, Rect } from "@interactjs/core/types"; + export class Eventable { + options: any; + types: NormalizedListeners; + propagationStopped: boolean; + immediatePropagationStopped: boolean; + global: any; + constructor(options?: { + [index: string]: any; + }); + fire(event: T): void; + on(type: string, listener: ListenersArg): void; + off(type: string, listener: ListenersArg): void; + getRect(_element: Element): Rect; + } +} +declare module "@interactjs/core/options" { + import type { Point, Listeners, OrBoolean, Element, Rect } from "@interactjs/core/types"; + export interface Defaults { + base: BaseDefaults; + perAction: PerActionDefaults; + actions: ActionDefaults; + } + export interface ActionDefaults { + } + export interface BaseDefaults { + preventDefault?: 'always' | 'never' | 'auto'; + deltaSource?: 'page' | 'client'; + context?: Node; + getRect?: (element: Element) => Rect; + } + export interface PerActionDefaults { + enabled?: boolean; + origin?: Point | string | Element; + listeners?: Listeners; + allowFrom?: string | Element; + ignoreFrom?: string | Element; + } + export type Options = Partial & Partial & { + [P in keyof ActionDefaults]?: Partial; + }; + export interface OptionsArg extends BaseDefaults, OrBoolean> { + } + export const defaults: Defaults; +} +declare module "@interactjs/core/Interactable" { + import type { Scope } from "@interactjs/core/scope"; + import type { ActionName, Context, Element, EventTypes, Listeners, ListenersArg, OrBoolean, Target } from "@interactjs/core/types"; + import { Eventable } from "@interactjs/core/Eventable"; + import type { OptionsArg, Options } from "@interactjs/core/options"; + type DeltaSource = 'page' | 'client'; + /** + * ```ts + * const interactable = interact('.cards') + * .draggable({ + * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) } + * }) + * .resizable({ + * listeners: { move: event => console.log(event.rect) }, + * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })] + * }) + * ``` + */ + export class Interactable implements Partial { + readonly target: Target; + constructor(target: Target, options: any, defaultContext: Document | Element, scopeEvents: Scope['events']); + setOnEvents(actionName: ActionName, phases: NonNullable): this; + updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined): void; + setPerAction(actionName: ActionName, options: OrBoolean): void; + /** + * The default function to get an Interactables bounding rect. Can be + * overridden using {@link Interactable.rectChecker}. + * + * @param {Element} [element] The element to measure. + * @return {Rect} The object's bounding rectangle. + */ + getRect(element: Element): Required; + /** + * Returns or sets the function used to calculate the interactable's + * element's rectangle + * + * @param {function} [checker] A function which returns this Interactable's + * bounding rectangle. See {@link Interactable.getRect} + * @return {function | object} The checker function or this Interactable + */ + rectChecker(): (element: Element) => any | null; + rectChecker(checker: (element: Element) => any): this; + /** + * Gets or sets the origin of the Interactable's element. The x and y + * of the origin will be subtracted from action event coordinates. + * + * @param {Element | object | string} [origin] An HTML or SVG Element whose + * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self' + * or any CSS selector + * + * @return {object} The current origin or this Interactable + */ + origin(newValue: any): any; + /** + * Returns or sets the mouse coordinate types used to calculate the + * movement of the pointer. + * + * @param {string} [newValue] Use 'client' if you will be scrolling while + * interacting; Use 'page' if you want autoScroll to work + * @return {string | object} The current deltaSource or this Interactable + */ + deltaSource(): DeltaSource; + deltaSource(newValue: DeltaSource): this; + /** + * Gets the selector context Node of the Interactable. The default is + * `window.document`. + * + * @return {Node} The context Node of this Interactable + */ + context(): Context; + inContext(element: Document | Node): boolean; + /** + * Calls listeners for the given InteractEvent type bound globally + * and directly to this Interactable + * + * @param {InteractEvent} iEvent The InteractEvent object to be fired on this + * Interactable + * @return {Interactable} this Interactable + */ + fire(iEvent: E): this; + /** + * Binds a listener for an InteractEvent, pointerEvent or DOM event. + * + * @param {string | array | object} types The types of events to listen + * for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * addEventListener + * @return {Interactable} This Interactable + */ + on(types: EventTypes, listener?: ListenersArg, options?: any): this; + /** + * Removes an InteractEvent, pointerEvent or DOM event listener. + * + * @param {string | array | object} types The types of events that were + * listened for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * removeEventListener + * @return {Interactable} This Interactable + */ + off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any): this; + /** + * Reset the options of this Interactable + * + * @param {object} options The new settings to apply + * @return {object} This Interactable + */ + set(options: OptionsArg): this; + /** + * Remove this interactable from the list of interactables and remove it's + * action capabilities and event listeners + */ + unset(): void; + } +} +declare module "@interactjs/utils/rect" { + import type { HasGetRect, RectResolvable, Rect, Point, FullRect, EdgeOptions } from "@interactjs/core/types"; + export function getStringOptionResult(value: any, target: HasGetRect, element: Node): ParentNode | Rect; + export function resolveRectLike(value: RectResolvable, target?: HasGetRect, element?: Node, functionArgs?: T): Rect; + export function toFullRect(rect: Rect): FullRect; + export function rectToXY(rect: Rect | Point): { + x: number; + y: number; + }; + export function xywhToTlbr>(rect: T): Rect & T; + export function tlbrToXywh(rect: Rect & Partial): Required & Point; + export function addEdges(edges: EdgeOptions, rect: Rect, delta: Point): void; +} +declare module "@interactjs/utils/getOriginXY" { + import type { PerActionDefaults } from "@interactjs/core/options"; + import type { ActionName, HasGetRect } from "@interactjs/core/types"; + export default function getOriginXY(target: HasGetRect & { + options: PerActionDefaults; + }, element: Node, actionName?: ActionName): { + x: number; + y: number; + }; +} +declare module "@interactjs/core/BaseEvent" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type { Interaction, InteractionProxy } from "@interactjs/core/Interaction"; + import type { ActionName } from "@interactjs/core/types"; + export class BaseEvent { + type: string; + target: EventTarget; + currentTarget: Node; + interactable: Interactable; + timeStamp: number; + immediatePropagationStopped: boolean; + propagationStopped: boolean; + constructor(interaction: Interaction); + preventDefault(): void; + /** + * Don't call any other listeners (even on the current target) + */ + stopPropagation(): void; + /** + * Don't call listeners on the remaining targets + */ + stopImmediatePropagation(): void; + } + export interface BaseEvent { + interaction: InteractionProxy; + } +} +declare module "@interactjs/core/InteractEvent" { + import type { Point, FullRect, PointerEventType, Element, ActionName } from "@interactjs/core/types"; + import { BaseEvent } from "@interactjs/core/BaseEvent"; + import type { Interaction } from "@interactjs/core/Interaction"; + export type EventPhase = keyof PhaseMap; + export interface PhaseMap { + start: true; + move: true; + end: true; + } + export interface InteractEvent { + pageX: number; + pageY: number; + clientX: number; + clientY: number; + dx: number; + dy: number; + velocityX: number; + velocityY: number; + } + export class InteractEvent extends BaseEvent { + target: Element; + currentTarget: Element; + relatedTarget: Element | null; + screenX?: number; + screenY?: number; + button: number; + buttons: number; + ctrlKey: boolean; + shiftKey: boolean; + altKey: boolean; + metaKey: boolean; + page: Point; + client: Point; + delta: Point; + rect: FullRect; + x0: number; + y0: number; + t0: number; + dt: number; + duration: number; + clientX0: number; + clientY0: number; + velocity: Point; + speed: number; + swipe: ReturnType['getSwipe']>; + axes?: 'x' | 'y' | 'xy'; + constructor(interaction: Interaction, event: PointerEventType, actionName: T, phase: P, element: Element, preEnd?: boolean, type?: string); + getSwipe(): { + up: boolean; + down: boolean; + left: boolean; + right: boolean; + angle: number; + speed: number; + velocity: { + x: number; + y: number; + }; + }; + preventDefault(): void; + /** + * Don't call listeners on the remaining targets + */ + stopImmediatePropagation(): void; + /** + * Don't call any other listeners (even on the current target) + */ + stopPropagation(): void; + } +} +declare module "@interactjs/core/NativeTypes" { + export const NativePointerEvent: PointerEvent; + export type NativeEventTarget = EventTarget; + export type NativeElement = Element; +} +declare module "@interactjs/core/types" { + import type Interaction from "@interactjs/core/Interaction"; + import type { Interactable } from "@interactjs/core/Interactable"; + import type { PhaseMap, InteractEvent } from "@interactjs/core/InteractEvent"; + import type { NativePointerEvent as NativePointerEvent_ } from "@interactjs/core/NativeTypes"; + export type OrBoolean = { + [P in keyof T]: T[P] | boolean; + }; + export type Element = HTMLElement | SVGElement; + export type Context = Document | Element; + export type EventTarget = Window | Document | Element; + export type Target = EventTarget | string; + export interface Point { + x: number; + y: number; + } + export interface Size { + width: number; + height: number; + } + export interface Rect { + top: number; + left: number; + bottom: number; + right: number; + width?: number; + height?: number; + } + export type FullRect = Required; + export type RectFunction = (...args: T) => Rect | Element; + export type RectResolvable = Rect | string | Element | RectFunction; + export type Dimensions = Point & Size; + export interface CoordsSetMember { + page: Point; + client: Point; + timeStamp: number; + } + export interface CoordsSet { + cur: CoordsSetMember; + prev: CoordsSetMember; + start: CoordsSetMember; + delta: CoordsSetMember; + velocity: CoordsSetMember; + } + export interface HasGetRect { + getRect(element: Element): Rect; + } + export interface ActionMap { + } + export type ActionName = keyof ActionMap; + export interface Actions { + map: ActionMap; + phases: PhaseMap; + methodDict: Record; + phaselessTypes: { + [type: string]: true; + }; + } + export interface ActionProps { + name: T; + axis?: 'x' | 'y' | 'xy' | null; + edges?: EdgeOptions | null; + } + export interface InertiaOption { + resistance?: number; + minSpeed?: number; + endSpeed?: number; + allowResume?: boolean; + smoothEndDuration?: number; + } + export type InertiaOptions = InertiaOption | boolean; + export interface EdgeOptions { + top?: boolean | string | Element; + left?: boolean | string | Element; + bottom?: boolean | string | Element; + right?: boolean | string | Element; + } + export type CursorChecker = (action: ActionProps, interactable: Interactable, element: Element, interacting: boolean) => string; + export interface ActionMethod { + (this: Interactable): T; + (this: Interactable, options?: Partial> | boolean): typeof this; + } + export interface OptionMethod { + (this: Interactable): T; + (this: Interactable, options: T): typeof this; + } + export type ActionChecker = (pointerEvent: any, defaultAction: string, interactable: Interactable, element: Element, interaction: Interaction) => ActionProps; + export type OriginFunction = (target: Element) => Rect; + export interface PointerEventsOptions { + holdDuration?: number; + allowFrom?: string; + ignoreFrom?: string; + origin?: Rect | Point | string | Element | OriginFunction; + } + export type RectChecker = (element: Element) => Rect; + export type NativePointerEventType = typeof NativePointerEvent_; + export type PointerEventType = MouseEvent | TouchEvent | Partial | InteractEvent; + export type PointerType = MouseEvent | Touch | Partial | InteractEvent; + export type EventTypes = string | ListenerMap | Array; + export type Listener = (...args: any[]) => any; + export type Listeners = ListenerMap | ListenerMap[]; + export type ListenersArg = Listener | ListenerMap | Array; + export interface ListenerMap { + [index: string]: ListenersArg | ListenersArg[]; + } + export type ArrayElementType = T extends Array ? P : never; +} +declare module "@interactjs/utils/misc" { + import type { ActionName, ActionProps } from "@interactjs/core/types"; + export function warnOnce(this: T, method: (...args: any[]) => any, message: string): (this: T) => any; + export function copyAction(dest: ActionProps, src: ActionProps): ActionProps; + export const sign: (n: number) => 1 | -1; +} +declare module "@interactjs/utils/pointerExtend" { + export default function pointerExtend(dest: Partial; + }>, source: T): Partial; + }>; +} +declare module "@interactjs/utils/pointerUtils" { + import type { InteractEvent } from "@interactjs/core/InteractEvent"; + import type { CoordsSetMember, PointerType, Point, PointerEventType } from "@interactjs/core/types"; + import pointerExtend from "@interactjs/utils/pointerExtend"; + export function copyCoords(dest: CoordsSetMember, src: CoordsSetMember): void; + export function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember): void; + export function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember): void; + export function setZeroCoords(targetObj: CoordsSetMember): void; + export function isNativePointer(pointer: any): boolean; + export function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point): Point; + export function getPageXY(pointer: PointerType | InteractEvent, page?: Point): Point; + export function getClientXY(pointer: PointerType, client: Point): Point; + export function getPointerId(pointer: { + pointerId?: number; + identifier?: number; + type?: string; + }): number; + export function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number): void; + export function getTouchPair(event: TouchEvent | PointerType[]): PointerType[]; + export function pointerAverage(pointers: PointerType[]): { + pageX: number; + pageY: number; + clientX: number; + clientY: number; + screenX: number; + screenY: number; + }; + export function touchBBox(event: PointerType[]): { + x: number; + y: number; + left: number; + top: number; + right: number; + bottom: number; + width: number; + height: number; + }; + export function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string): number; + export function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string): number; + export function getPointerType(pointer: { + pointerType?: string; + identifier?: number; + type?: string; + }): string; + export function getEventTargets(event: Event): any[]; + export function newCoords(): CoordsSetMember; + export function coordsToEvent(coords: MockCoords): { + coords: MockCoords; + readonly page: any; + readonly client: any; + readonly timeStamp: any; + readonly pageX: any; + readonly pageY: any; + readonly clientX: any; + readonly clientY: any; + readonly pointerId: any; + readonly target: any; + readonly type: any; + readonly pointerType: any; + readonly buttons: any; + preventDefault(): void; + } & PointerType & PointerEventType; + export interface MockCoords { + page: Point; + client: Point; + timeStamp?: number; + pointerId?: any; + target?: any; + type?: string; + pointerType?: string; + buttons?: number; + } + export { pointerExtend }; +} +declare module "@interactjs/core/PointerInfo" { + import type { PointerEventType, PointerType } from "@interactjs/core/types"; + export class PointerInfo { + id: number; + pointer: PointerType; + event: PointerEventType; + downTime: number; + downTarget: Node; + constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node); + } +} +declare module "@interactjs/core/Interaction" { + import type { Element, PointerEventType, PointerType, FullRect, CoordsSet, ActionName, ActionProps } from "@interactjs/core/types"; + import type { Interactable } from "@interactjs/core/Interactable"; + import type { EventPhase } from "@interactjs/core/InteractEvent"; + import { InteractEvent } from "@interactjs/core/InteractEvent"; + import { PointerInfo } from "@interactjs/core/PointerInfo"; + import type { Scope } from "@interactjs/core/scope"; + export enum _ProxyValues { + interactable = "", + element = "", + prepared = "", + pointerIsDown = "", + pointerWasMoved = "", + _proxy = "" + } + export enum _ProxyMethods { + start = "", + move = "", + end = "", + stop = "", + interacting = "" + } + export type PointerArgProps = { + pointer: PointerType; + event: PointerEventType; + eventTarget: Node; + pointerIndex: number; + pointerInfo: PointerInfo; + interaction: Interaction; + } & T; + export interface DoPhaseArg { + event: PointerEventType; + phase: EventPhase; + interaction: Interaction; + iEvent: InteractEvent; + preEnd?: boolean; + type?: string; + } + export type DoAnyPhaseArg = DoPhaseArg; + module "@interactjs/core/scope" { + interface SignalArgs { + 'interactions:new': { + interaction: Interaction; + }; + 'interactions:down': PointerArgProps<{ + type: 'down'; + }>; + 'interactions:move': PointerArgProps<{ + type: 'move'; + dx: number; + dy: number; + duplicate: boolean; + }>; + 'interactions:up': PointerArgProps<{ + type: 'up'; + curEventTarget: EventTarget; + }>; + 'interactions:cancel': SignalArgs['interactions:up'] & { + type: 'cancel'; + curEventTarget: EventTarget; + }; + 'interactions:update-pointer': PointerArgProps<{ + down: boolean; + }>; + 'interactions:remove-pointer': PointerArgProps; + 'interactions:blur': { + interaction: Interaction; + event: Event; + type: 'blur'; + }; + 'interactions:before-action-start': Omit; + 'interactions:action-start': DoAnyPhaseArg; + 'interactions:after-action-start': DoAnyPhaseArg; + 'interactions:before-action-move': Omit; + 'interactions:action-move': DoAnyPhaseArg; + 'interactions:after-action-move': DoAnyPhaseArg; + 'interactions:before-action-end': Omit; + 'interactions:action-end': DoAnyPhaseArg; + 'interactions:after-action-end': DoAnyPhaseArg; + 'interactions:stop': { + interaction: Interaction; + }; + } + } + export type InteractionProxy = Pick, keyof typeof _ProxyValues | keyof typeof _ProxyMethods>; + export class Interaction { + /** current interactable being interacted with */ + interactable: Interactable | null; + /** the target element of the interactable */ + element: Element | null; + rect: FullRect | null; + prepared: ActionProps; + pointerType: string; + pointerIsDown: boolean; + pointerWasMoved: boolean; + doMove: (this: void) => any; + coords: CoordsSet; + constructor({ pointerType, scopeFire }: { + pointerType?: string; + scopeFire: Scope['fire']; + }); + pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node): void; + /** + * ```js + * interact(target) + * .draggable({ + * // disable the default drag start by down->move + * manualStart: true + * }) + * // start dragging after the user holds the pointer down + * .on('hold', function (event) { + * var interaction = event.interaction + * + * if (!interaction.interacting()) { + * interaction.start({ name: 'drag' }, + * event.interactable, + * event.currentTarget) + * } + * }) + * ``` + * + * Start an action with the given Interactable and Element as tartgets. The + * action must be enabled for the target Interactable and an appropriate + * number of pointers must be held down - 1 for drag/resize, 2 for gesture. + * + * Use it with `interactable.able({ manualStart: false })` to always + * [start actions manually](https://github.com/taye/interact.js/issues/114) + * + * @param action - The action to be performed - drag, resize, etc. + * @param target - The Interactable to target + * @param element - The DOM Element to target + * @returns Whether the interaction was successfully started + */ + start(action: ActionProps, interactable: Interactable, element: Element): boolean; + pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node): void; + /** + * ```js + * interact(target) + * .draggable(true) + * .on('dragmove', function (event) { + * if (someCondition) { + * // change the snap settings + * event.interactable.draggable({ snap: { targets: [] }}) + * // fire another move event with re-calculated snap + * event.interaction.move() + * } + * }) + * ``` + * + * Force a move of the current action at the same coordinates. Useful if + * snap/restrict has been changed and you want a movement with the new + * settings. + */ + move(signalArg?: any): void; + /** + * ```js + * interact(target) + * .draggable(true) + * .on('move', function (event) { + * if (event.pageX > 1000) { + * // end the current action + * event.interaction.end() + * // stop all further listeners from being called + * event.stopImmediatePropagation() + * } + * }) + * ``` + */ + end(event?: PointerEventType): void; + currentAction(): T; + interacting(): boolean; + stop(): void; + destroy(): void; + } + export default Interaction; + export { PointerInfo }; +} +declare module "@interactjs/core/events" { + import type { Scope } from "@interactjs/core/scope"; + import type { Element } from "@interactjs/core/types"; + import type { NativeEventTarget } from "@interactjs/core/NativeTypes"; + module "@interactjs/core/scope" { + interface Scope { + events: ReturnType; + } + } + interface EventOptions { + capture: boolean; + passive: boolean; + } + type PartialEventTarget = Partial; + type ListenerEntry = { + func: (event: Event | FakeEvent) => any; + options: EventOptions; + }; + function install(scope: Scope): { + add: (eventTarget: PartialEventTarget, type: string, listener: ListenerEntry['func'], optionalArg?: boolean | EventOptions) => void; + remove: (eventTarget: PartialEventTarget, type: string, listener?: 'all' | ListenerEntry['func'], optionalArg?: boolean | EventOptions) => void; + addDelegate: (selector: string, context: Node, type: string, listener: ListenerEntry['func'], optionalArg?: any) => void; + removeDelegate: (selector: string, context: Document | Element, type: string, listener?: ListenerEntry['func'], optionalArg?: any) => void; + delegateListener: (event: Event | FakeEvent, optionalArg?: any) => void; + delegateUseCapture: (this: Element, event: Event | FakeEvent) => any; + delegatedEvents: { + [type: string]: { + selector: string; + context: Node; + listeners: ListenerEntry[]; + }[]; + }; + documents: Document[]; + targets: { + eventTarget: PartialEventTarget; + events: { + [type: string]: ListenerEntry[]; + }; + }[]; + supportsOptions: boolean; + supportsPassive: boolean; + }; + class FakeEvent implements Partial { + currentTarget: Node; + originalEvent: Event; + type: string; + constructor(originalEvent: Event); + preventOriginalDefault(): void; + stopPropagation(): void; + stopImmediatePropagation(): void; + } + const _default_4: { + id: string; + install: typeof install; + }; + export default _default_4; +} +declare module "@interactjs/core/interactablePreventDefault" { + import type { Scope } from "@interactjs/core/scope"; + type PreventDefaultValue = 'always' | 'never' | 'auto'; + module "@interactjs/core/Interactable" { + interface Interactable { + preventDefault(newValue: PreventDefaultValue): this; + preventDefault(): PreventDefaultValue; + /** + * Returns or sets whether to prevent the browser's default behaviour in + * response to pointer events. Can be set to: + * - `'always'` to always prevent + * - `'never'` to never prevent + * - `'auto'` to let interact.js try to determine what would be best + * + * @param newValue - `'always'`, `'never'` or `'auto'` + * @returns The current setting or this Interactable + */ + preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this; + checkAndPreventDefault(event: Event): void; + } + } + export function install(scope: Scope): void; + const _default_5: { + id: string; + install: typeof install; + listeners: any; + }; + export default _default_5; +} +declare module "@interactjs/core/interactionFinder" { + import type Interaction from "@interactjs/core/Interaction"; + import type { Scope } from "@interactjs/core/scope"; + import type { PointerType } from "@interactjs/core/types"; + export interface SearchDetails { + pointer: PointerType; + pointerId: number; + pointerType: string; + eventType: string; + eventTarget: EventTarget; + curEventTarget: EventTarget; + scope: Scope; + } + const finder: { + methodOrder: readonly ["simulationResume", "mouseOrPen", "hasPointer", "idle"]; + search(details: SearchDetails): any; + simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails): Interaction; + mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails): any; + hasPointer({ pointerId, scope }: SearchDetails): Interaction; + idle({ pointerType, scope }: SearchDetails): Interaction; + }; + export default finder; +} +declare module "@interactjs/core/interactions" { + import type { Plugin } from "@interactjs/core/scope"; + import type { ActionName, Listener } from "@interactjs/core/types"; + import "@interactjs/core/interactablePreventDefault"; + import InteractionBase from "@interactjs/core/Interaction"; + import type { SearchDetails } from "@interactjs/core/interactionFinder"; + module "@interactjs/core/scope" { + interface Scope { + Interaction: typeof InteractionBase; + interactions: { + new: (options: any) => InteractionBase; + list: Array>; + listeners: { + [type: string]: Listener; + }; + docEvents: Array<{ + type: string; + listener: Listener; + }>; + pointerMoveTolerance: number; + }; + prevTouchTime: number; + } + interface SignalArgs { + 'interactions:find': { + interaction: InteractionBase; + searchDetails: SearchDetails; + }; + } + } + const interactions: Plugin; + export default interactions; +} +declare module "@interactjs/core/InteractableSet" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type { OptionsArg, Options } from "@interactjs/core/options"; + import type { Scope } from "@interactjs/core/scope"; + import type { Target } from "@interactjs/core/types"; + module "@interactjs/core/scope" { + interface SignalArgs { + 'interactable:new': { + interactable: Interactable; + target: Target; + options: OptionsArg; + win: Window; + }; + } + } + export class InteractableSet { + list: Interactable[]; + selectorMap: { + [selector: string]: Interactable[]; + }; + scope: Scope; + constructor(scope: Scope); + new(target: Target, options?: any): Interactable; + getExisting(target: Target, options?: Options): Interactable; + forEachMatch(node: Node, callback: (interactable: Interactable) => T): T | void; + } +} +declare module "@interactjs/core/InteractStatic" { + import * as domUtils from "@interactjs/utils/domUtils"; + import * as pointerUtils from "@interactjs/utils/pointerUtils"; + import type { Scope, Plugin } from "@interactjs/core/scope"; + import type { EventTypes, ListenersArg, Target } from "@interactjs/core/types"; + import type { Interactable } from "@interactjs/core/Interactable"; + import type { Options } from "@interactjs/core/options"; + /** + * ```js + * interact('#draggable').draggable(true) + * + * var rectables = interact('rect') + * rectables + * .gesturable(true) + * .on('gesturemove', function (event) { + * // ... + * }) + * ``` + * + * The methods of this variable can be used to set elements as interactables + * and also to change various default settings. + * + * Calling it as a function and passing an element or a valid CSS selector + * string returns an Interactable object which has various methods to configure + * it. + * + * @param {Element | string} target The HTML or SVG Element to interact with + * or CSS selector + * @return {Interactable} + */ + export interface InteractStatic { + (target: Target, options?: Options): Interactable; + getPointerAverage: typeof pointerUtils.pointerAverage; + getTouchBBox: typeof pointerUtils.touchBBox; + getTouchDistance: typeof pointerUtils.touchDistance; + getTouchAngle: typeof pointerUtils.touchAngle; + getElementRect: typeof domUtils.getElementRect; + getElementClientRect: typeof domUtils.getElementClientRect; + matchesSelector: typeof domUtils.matchesSelector; + closest: typeof domUtils.closest; + version: string; + /** + * Use a plugin + */ + use(plugin: Plugin, options?: { + [key: string]: any; + }): any; + /** + * Check if an element or selector has been set with the `interact(target)` + * function + * + * @return {boolean} Indicates if the element or CSS selector was previously + * passed to interact + */ + isSet(target: Target, options?: any): boolean; + on(type: string | EventTypes, listener: ListenersArg, options?: object): any; + off(type: EventTypes, listener: any, options?: object): any; + debug(): any; + /** + * Whether or not the browser supports touch input + */ + supportsTouch(): boolean; + /** + * Whether or not the browser supports PointerEvents + */ + supportsPointerEvent(): boolean; + /** + * Cancels all interactions (end events are not fired) + */ + stop(): InteractStatic; + /** + * Returns or sets the distance the pointer must be moved before an action + * sequence occurs. This also affects tolerance for tap events. + */ + pointerMoveTolerance( + /** The movement from the start position must be greater than this value */ + newValue?: number): InteractStatic | number; + addDocument(doc: Document, options?: object): void; + removeDocument(doc: Document): void; + } + export function createInteractStatic(scope: Scope): InteractStatic; +} +declare module "@interactjs/core/scope" { + import type Interaction from "@interactjs/core/Interaction"; + import "@interactjs/core/events"; + import "@interactjs/core/interactions"; + import { Interactable as InteractableBase } from "@interactjs/core/Interactable"; + import "@interactjs/core/InteractableSet"; + import type { OptionsArg } from "@interactjs/core/options"; + export interface SignalArgs { + 'scope:add-document': DocSignalArg; + 'scope:remove-document': DocSignalArg; + 'interactable:unset': { + interactable: InteractableBase; + }; + 'interactable:set': { + interactable: InteractableBase; + options: OptionsArg; + }; + 'interactions:destroy': { + interaction: Interaction; + }; + } + export type ListenerName = keyof SignalArgs; + export type ListenerMap = { + [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean; + }; + interface DocSignalArg { + doc: Document; + window: Window; + scope: Scope; + options: Record; + } +} +declare module "@interactjs/actions/drag/plugin" { + import type { InteractEvent } from "@interactjs/core/InteractEvent"; + import type { PerActionDefaults } from "@interactjs/core/options"; + import type { Plugin } from "@interactjs/core/scope"; + import type { ListenersArg, OrBoolean } from "@interactjs/core/types"; + module "@interactjs/core/Interactable" { + interface Interactable { + draggable(options: Partial> | boolean): this; + draggable(): DraggableOptions; + /** + * ```js + * interact(element).draggable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * // the axis in which the first movement must be + * // for the drag sequence to start + * // 'xy' by default - any direction + * startAxis: 'x' || 'y' || 'xy', + * + * // 'xy' by default - don't restrict to one axis (move in any direction) + * // 'x' or 'y' to restrict movement to either axis + * // 'start' to restrict movement to the axis the drag started in + * lockAxis: 'x' || 'y' || 'xy' || 'start', + * + * // max number of drags that can happen concurrently + * // with elements of this Interactable. Infinity by default + * max: Infinity, + * + * // max number of drags that can target the same element+Interactable + * // 1 by default + * maxPerElement: 2 + * }) + * + * var isDraggable = interact('element').draggable(); // true + * ``` + * + * Get or set whether drag actions can be performed on the target + * + * @param options - true/false or An object with event + * listeners to be fired on drag events (object makes the Interactable + * draggable) + */ + draggable(options?: Partial> | boolean): this | DraggableOptions; + } + } + module "@interactjs/core/options" { + interface ActionDefaults { + drag: DraggableOptions; + } + } + module "@interactjs/core/types" { + interface ActionMap { + drag?: typeof drag; + } + } + export type DragEvent = InteractEvent<'drag'>; + export interface DraggableOptions extends PerActionDefaults { + startAxis?: 'x' | 'y' | 'xy'; + lockAxis?: 'x' | 'y' | 'xy' | 'start'; + oninertiastart?: ListenersArg; + onstart?: ListenersArg; + onmove?: ListenersArg; + onend?: ListenersArg; + } + const drag: Plugin; + export default drag; +} +declare module "@interactjs/actions/drop/DropEvent" { + import { BaseEvent } from "@interactjs/core/BaseEvent"; + import type { Interactable } from "@interactjs/core/Interactable"; + import type { InteractEvent } from "@interactjs/core/InteractEvent"; + import type { Element } from "@interactjs/core/types"; + import type { DropState } from "@interactjs/actions/drop/plugin"; + export class DropEvent extends BaseEvent<'drag'> { + target: Element; + dropzone: Interactable; + dragEvent: InteractEvent<'drag'>; + relatedTarget: Element; + draggable: Interactable; + propagationStopped: boolean; + immediatePropagationStopped: boolean; + /** + * Class of events fired on dropzones during drags with acceptable targets. + */ + constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string); + /** + * If this is a `dropactivate` event, the dropzone element will be + * deactivated. + * + * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the + * dropzone element and more. + */ + reject(): void; + preventDefault(): void; + stopPropagation(): void; + stopImmediatePropagation(): void; + } +} +declare module "@interactjs/actions/drop/plugin" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type { InteractEvent } from "@interactjs/core/InteractEvent"; + import type { Interaction } from "@interactjs/core/Interaction"; + import type { PerActionDefaults } from "@interactjs/core/options"; + import type { Plugin } from "@interactjs/core/scope"; + import type { Element, PointerEventType, Rect, ListenersArg } from "@interactjs/core/types"; + import "@interactjs/actions/drag/plugin"; + import type { DragEvent } from "@interactjs/actions/drag/plugin"; + import { DropEvent } from "@interactjs/actions/drop/DropEvent"; + export type DropFunctionChecker = (dragEvent: any, // related drag operation + event: any, // touch or mouse EventEmitter + dropped: boolean, // default checker result + dropzone: Interactable, // dropzone interactable + dropElement: Element, // drop zone element + draggable: Interactable, // draggable's Interactable + draggableElement: Element) => boolean; + export interface DropzoneOptions extends PerActionDefaults { + accept?: string | Element | (({ dropzone, draggableElement }: { + dropzone: Interactable; + draggableElement: Element; + }) => boolean); + overlap?: 'pointer' | 'center' | number; + checker?: DropFunctionChecker; + ondropactivate?: ListenersArg; + ondropdeactivate?: ListenersArg; + ondragenter?: ListenersArg; + ondragleave?: ListenersArg; + ondropmove?: ListenersArg; + ondrop?: ListenersArg; + } + export interface DropzoneMethod { + (this: Interactable, options: DropzoneOptions | boolean): Interactable; + (): DropzoneOptions; + } + module "@interactjs/core/Interactable" { + interface Interactable { + /** + * + * ```js + * interact('.drop').dropzone({ + * accept: '.can-drop' || document.getElementById('single-drop'), + * overlap: 'pointer' || 'center' || zeroToOne + * } + * ``` + * + * Returns or sets whether draggables can be dropped onto this target to + * trigger drop events + * + * Dropzones can receive the following events: + * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends + * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone + * - `dragmove` when a draggable that has entered the dropzone is moved + * - `drop` when a draggable is dropped into this dropzone + * + * Use the `accept` option to allow only elements that match the given CSS + * selector or element. The value can be: + * + * - **an Element** - only that element can be dropped into this dropzone. + * - **a string**, - the element being dragged must match it as a CSS selector. + * - **`null`** - accept options is cleared - it accepts any element. + * + * Use the `overlap` option to set how drops are checked for. The allowed + * values are: + * + * - `'pointer'`, the pointer must be over the dropzone (default) + * - `'center'`, the draggable element's center must be over the dropzone + * - a number from 0-1 which is the `(intersection area) / (draggable area)`. + * e.g. `0.5` for drop to happen when half of the area of the draggable is + * over the dropzone + * + * Use the `checker` option to specify a function to check if a dragged element + * is over this Interactable. + * + * @param options - The new options to be set + */ + dropzone(options: DropzoneOptions | boolean): Interactable; + /** @returns The current setting */ + dropzone(): DropzoneOptions; + /** + * ```js + * interact(target) + * .dropChecker(function(dragEvent, // related dragmove or dragend event + * event, // TouchEvent/PointerEvent/MouseEvent + * dropped, // bool result of the default checker + * dropzone, // dropzone Interactable + * dropElement, // dropzone elemnt + * draggable, // draggable Interactable + * draggableElement) {// draggable element + * + * return dropped && event.target.hasAttribute('allow-drop') + * } + * ``` + */ + dropCheck(dragEvent: InteractEvent, event: PointerEventType, draggable: Interactable, draggableElement: Element, dropElemen: Element, rect: any): boolean; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + dropState?: DropState; + } + } + module "@interactjs/core/InteractEvent" { + interface InteractEvent { + dropzone?: Interactable; + dragEnter?: Element; + dragLeave?: Element; + } + } + module "@interactjs/core/options" { + interface ActionDefaults { + drop: DropzoneOptions; + } + } + module "@interactjs/core/scope" { + interface Scope { + dynamicDrop?: boolean; + } + interface SignalArgs { + 'actions/drop:start': DropSignalArg; + 'actions/drop:move': DropSignalArg; + 'actions/drop:end': DropSignalArg; + } + } + module "@interactjs/core/types" { + interface ActionMap { + drop?: typeof drop; + } + } + module "@interactjs/core/InteractStatic" { + interface InteractStatic { + /** + * Returns or sets whether the dimensions of dropzone elements are calculated + * on every dragmove or only on dragstart for the default dropChecker + * + * @param {boolean} [newValue] True to check on each move. False to check only + * before start + * @return {boolean | interact} The current setting or interact + */ + dynamicDrop: (newValue?: boolean) => boolean | this; + } + } + interface DropSignalArg { + interaction: Interaction<'drag'>; + dragEvent: DragEvent; + } + export interface ActiveDrop { + dropzone: Interactable; + element: Element; + rect: Rect; + } + export interface DropState { + cur: { + dropzone: Interactable; + element: Element; + }; + prev: { + dropzone: Interactable; + element: Element; + }; + rejected: boolean; + events: FiredDropEvents; + activeDrops: ActiveDrop[]; + } + type FiredDropEvents = Partial>; + const drop: Plugin; + export default drop; +} +declare module "@interactjs/actions/gesture/plugin" { + import type { InteractEvent, EventPhase } from "@interactjs/core/InteractEvent"; + import type { Interaction, DoPhaseArg } from "@interactjs/core/Interaction"; + import type { PerActionDefaults } from "@interactjs/core/options"; + import type { Plugin } from "@interactjs/core/scope"; + import type { Rect, PointerType, ListenersArg, OrBoolean } from "@interactjs/core/types"; + module "@interactjs/core/Interaction" { + interface Interaction { + gesture?: { + angle: number; + distance: number; + scale: number; + startAngle: number; + startDistance: number; + }; + } + } + module "@interactjs/core/Interactable" { + interface Interactable { + gesturable(options: Partial> | boolean): this; + gesturable(): GesturableOptions; + /** + * ```js + * interact(element).gesturable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * // limit multiple gestures. + * // See the explanation in {@link Interactable.draggable} example + * max: Infinity, + * maxPerElement: 1, + * }) + * + * var isGestureable = interact(element).gesturable() + * ``` + * + * Gets or sets whether multitouch gestures can be performed on the target + * + * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable) + * @returns A boolean indicating if this can be the target of gesture events, or this Interactable + */ + gesturable(options?: Partial> | boolean): this | GesturableOptions; + } + } + module "@interactjs/core/options" { + interface ActionDefaults { + gesture: GesturableOptions; + } + } + module "@interactjs/core/types" { + interface ActionMap { + gesture?: typeof gesture; + } + } + export interface GesturableOptions extends PerActionDefaults { + onstart?: ListenersArg; + onmove?: ListenersArg; + onend?: ListenersArg; + } + export interface GestureEvent extends InteractEvent<'gesture'> { + distance: number; + angle: number; + da: number; + scale: number; + ds: number; + box: Rect; + touches: PointerType[]; + } + export interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> { + iEvent: GestureEvent; + interaction: Interaction<'gesture'>; + } + const gesture: Plugin; + export default gesture; +} +declare module "@interactjs/actions/resize/plugin" { + import type { EventPhase, InteractEvent } from "@interactjs/core/InteractEvent"; + import type { PerActionDefaults } from "@interactjs/core/options"; + import type { Plugin } from "@interactjs/core/scope"; + import type { ActionName, ActionProps, EdgeOptions, FullRect, ListenersArg, OrBoolean } from "@interactjs/core/types"; + export type EdgeName = 'top' | 'left' | 'bottom' | 'right'; + module "@interactjs/core/Interactable" { + interface Interactable { + resizable(): ResizableOptions; + resizable(options: Partial> | boolean): this; + /** + * ```js + * interact(element).resizable({ + * onstart: function (event) {}, + * onmove : function (event) {}, + * onend : function (event) {}, + * + * edges: { + * top : true, // Use pointer coords to check for resize. + * left : false, // Disable resizing from left edge. + * bottom: '.resize-s',// Resize if pointer target matches selector + * right : handleEl // Resize if pointer target is the given Element + * }, + * + * // Width and height can be adjusted independently. When `true`, width and + * // height are adjusted at a 1:1 ratio. + * square: false, + * + * // Width and height can be adjusted independently. When `true`, width and + * // height maintain the aspect ratio they had when resizing started. + * preserveAspectRatio: false, + * + * // a value of 'none' will limit the resize rect to a minimum of 0x0 + * // 'negate' will allow the rect to have negative width/height + * // 'reposition' will keep the width/height positive by swapping + * // the top and bottom edges and/or swapping the left and right edges + * invert: 'none' || 'negate' || 'reposition' + * + * // limit multiple resizes. + * // See the explanation in the {@link Interactable.draggable} example + * max: Infinity, + * maxPerElement: 1, + * }) + * + * var isResizeable = interact(element).resizable() + * ``` + * + * Gets or sets whether resize actions can be performed on the target + * + * @param options - true/false or An object with event + * listeners to be fired on resize events (object makes the Interactable + * resizable) + * @returns A boolean indicating if this can be the + * target of resize elements, or this Interactable + */ + resizable(options?: Partial> | boolean): this | ResizableOptions; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + resizeAxes: 'x' | 'y' | 'xy'; + styleCursor(newValue: boolean): this; + styleCursor(): boolean; + resizeStartAspectRatio: number; + } + } + module "@interactjs/core/options" { + interface ActionDefaults { + resize: ResizableOptions; + } + } + module "@interactjs/core/types" { + interface ActionMap { + resize?: typeof resize; + } + } + export interface ResizableOptions extends PerActionDefaults { + square?: boolean; + preserveAspectRatio?: boolean; + edges?: EdgeOptions | null; + axis?: 'x' | 'y' | 'xy'; + invert?: 'none' | 'negate' | 'reposition'; + margin?: number; + squareResize?: boolean; + oninertiastart?: ListenersArg; + onstart?: ListenersArg; + onmove?: ListenersArg; + onend?: ListenersArg; + } + export interface ResizeEvent

extends InteractEvent<'resize', P> { + deltaRect?: FullRect; + edges?: ActionProps['edges']; + } + const resize: Plugin; + export default resize; +} +declare module "@interactjs/actions/plugin" { + import type { Scope } from "@interactjs/core/scope"; + import "@interactjs/actions/drag/plugin"; + import "@interactjs/actions/drop/plugin"; + import "@interactjs/actions/gesture/plugin"; + import "@interactjs/actions/resize/plugin"; + const _default_6: { + id: string; + install(scope: Scope): void; + }; + export default _default_6; +} +declare module "@interactjs/interact/index" { + const interact: import("@interactjs/core/InteractStatic").InteractStatic; + export default interact; +} +declare module "@interactjs/actions/index" { + import "@interactjs/actions/plugin"; +} +declare module "@interactjs/actions/drag/index" { + import "@interactjs/actions/drag/plugin"; +} +declare module "@interactjs/actions/drop/index" { + import "@interactjs/actions/drop/plugin"; +} +declare module "@interactjs/actions/gesture/index" { + import "@interactjs/actions/gesture/plugin"; +} +declare module "@interactjs/actions/resize/index" { + import "@interactjs/actions/resize/plugin"; +} +declare module "@interactjs/auto-scroll/plugin" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type Interaction from "@interactjs/core/Interaction"; + import type { Plugin } from "@interactjs/core/scope"; + import type { ActionName, PointerType } from "@interactjs/core/types"; + module "@interactjs/core/scope" { + interface Scope { + autoScroll: typeof autoScroll; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + autoScroll?: typeof autoScroll; + } + } + module "@interactjs/core/options" { + interface PerActionDefaults { + autoScroll?: AutoScrollOptions; + } + } + export interface AutoScrollOptions { + container?: Window | HTMLElement | string; + margin?: number; + distance?: number; + interval?: number; + speed?: number; + enabled?: boolean; + } + const autoScroll: { + defaults: AutoScrollOptions; + now: () => number; + interaction: Interaction; + i: number; + x: number; + y: number; + isScrolling: boolean; + prevTime: number; + margin: number; + speed: number; + start(interaction: Interaction): void; + stop(): void; + scroll(): void; + check(interactable: Interactable, actionName: ActionName): boolean; + onInteractionMove({ interaction, pointer, }: { + interaction: Interaction; + pointer: PointerType; + }): void; + }; + export function getContainer(value: any, interactable: Interactable, element: Element): any; + export function getScroll(container: any): { + x: any; + y: any; + }; + export function getScrollSize(container: any): { + x: any; + y: any; + }; + export function getScrollSizeDelta({ interaction, element, }: { + interaction: Partial>; + element: Element; + }, func: any): { + x: number; + y: number; + }; + const autoScrollPlugin: Plugin; + export default autoScrollPlugin; +} +declare module "@interactjs/auto-scroll/index" { + import "@interactjs/auto-scroll/plugin"; +} +declare module "@interactjs/auto-start/InteractableMethods" { + import type { Interaction } from "@interactjs/core/Interaction"; + import type { Scope } from "@interactjs/core/scope"; + import type { ActionProps, PointerType, PointerEventType, Element } from "@interactjs/core/types"; + module "@interactjs/core/Interactable" { + interface Interactable { + getAction: (this: Interactable, pointer: PointerType, event: PointerEventType, interaction: Interaction, element: Element) => ActionProps | null; + styleCursor(newValue: boolean): this; + styleCursor(): boolean; + /** + * Returns or sets whether the the cursor should be changed depending on the + * action that would be performed if the mouse were pressed and dragged. + * + * @param {boolean} [newValue] + * @return {boolean | Interactable} The current setting or this Interactable + */ + styleCursor(newValue?: boolean): boolean | this; + actionChecker(checker: Function): Interactable; + actionChecker(): Function; + /** + * ```js + * interact('.resize-drag') + * .resizable(true) + * .draggable(true) + * .actionChecker(function (pointer, event, action, interactable, element, interaction) { + * + * if (interact.matchesSelector(event.target, '.drag-handle')) { + * // force drag with handle target + * action.name = drag + * } + * else { + * // resize from the top and right edges + * action.name = 'resize' + * action.edges = { top: true, right: true } + * } + * + * return action + * }) + * ``` + * + * Returns or sets the function used to check action to be performed on + * pointerDown + * + * @param checker - A function which takes a pointer event, + * defaultAction string, interactable, element and interaction as parameters + * and returns an object with name property 'drag' 'resize' or 'gesture' and + * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right + * props. + * @returns The checker function or this Interactable + */ + actionChecker(checker?: Function): Interactable | Function; + /** @returns This interactable */ + ignoreFrom(newValue: string | Element | null): Interactable; + /** @returns The current ignoreFrom value */ + ignoreFrom(): string | Element | null; + /** + * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any + * of it's parents match the given CSS selector or Element, no + * drag/resize/gesture is started. + * + * @deprecated + * Don't use this method. Instead set the `ignoreFrom` option for each action + * or for `pointerEvents` + * + * ```js + * interact(targett) + * .draggable({ + * ignoreFrom: 'input, textarea, a[href]'', + * }) + * .pointerEvents({ + * ignoreFrom: '[no-pointer]', + * }) + * ``` + * Interactable + */ + ignoreFrom( + /** a CSS selector string, an Element or `null` to not ignore any elements */ + newValue?: string | Element | null): Interactable | string | Element | null; + allowFrom(): boolean; + /** + * + * A drag/resize/gesture is started only If the target of the `mousedown`, + * `pointerdown` or `touchstart` event or any of it's parents match the given + * CSS selector or Element. + * + * @deprecated + * Don't use this method. Instead set the `allowFrom` option for each action + * or for `pointerEvents` + * + * ```js + * interact(targett) + * .resizable({ + * allowFrom: '.resize-handle', + * .pointerEvents({ + * allowFrom: '.handle',, + * }) + * ``` + * + * @param {string | Element | null} [newValue] + * @return {string | Element | object} The current allowFrom value or this + * Interactable + */ + allowFrom( + /** A CSS selector string, an Element or `null` to allow from any element */ + newValue: string | Element | null): Interactable; + } + } + function install(scope: Scope): void; + const _default_7: { + id: string; + install: typeof install; + }; + export default _default_7; +} +declare module "@interactjs/auto-start/base" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type { Interaction } from "@interactjs/core/Interaction"; + import type { Scope, Plugin } from "@interactjs/core/scope"; + import type { CursorChecker, Element, ActionName, ActionProps } from "@interactjs/core/types"; + import "@interactjs/auto-start/InteractableMethods"; + module "@interactjs/core/InteractStatic" { + interface InteractStatic { + /** + * Returns or sets the maximum number of concurrent interactions allowed. By + * default only 1 interaction is allowed at a time (for backwards + * compatibility). To allow multiple interactions on the same Interactables and + * elements, you need to enable it in the draggable, resizable and gesturable + * `'max'` and `'maxPerElement'` options. + * + * @param {number} [newValue] Any number. newValue <= 0 means no interactions. + */ + maxInteractions: (newValue: any) => any; + } + } + module "@interactjs/core/scope" { + interface Scope { + autoStart: AutoStart; + } + interface SignalArgs { + 'autoStart:before-start': Omit & { + interaction: Interaction; + }; + 'autoStart:prepared': { + interaction: Interaction; + }; + 'auto-start:check': CheckSignalArg; + } + } + module "@interactjs/core/options" { + interface BaseDefaults { + actionChecker?: any; + cursorChecker?: any; + styleCursor?: any; + } + interface PerActionDefaults { + manualStart?: boolean; + max?: number; + maxPerElement?: number; + allowFrom?: string | Element; + ignoreFrom?: string | Element; + cursorChecker?: CursorChecker; + mouseButtons?: 0 | 1 | 2 | 4 | 8 | 16; + } + } + interface CheckSignalArg { + interactable: Interactable; + interaction: Interaction; + element: Element; + action: ActionProps; + buttons: number; + } + export interface AutoStart { + maxInteractions: number; + withinInteractionLimit: typeof withinInteractionLimit; + cursorElement: Element; + } + function withinInteractionLimit(interactable: Interactable, element: Element, action: ActionProps, scope: Scope): boolean; + const autoStart: Plugin; + export default autoStart; +} +declare module "@interactjs/auto-start/dragAxis" { + import type { SignalArgs, Scope } from "@interactjs/core/scope"; + function beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope): void; + const _default_8: { + id: string; + listeners: { + 'autoStart:before-start': typeof beforeStart; + }; + }; + export default _default_8; +} +declare module "@interactjs/auto-start/hold" { + import type { Plugin } from "@interactjs/core/scope"; + import "@interactjs/auto-start/base"; + module "@interactjs/core/options" { + interface PerActionDefaults { + hold?: number; + delay?: number; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + autoStartHoldTimer?: any; + } + } + const hold: Plugin; + export default hold; +} +declare module "@interactjs/auto-start/plugin" { + import type { Scope } from "@interactjs/core/scope"; + import "@interactjs/auto-start/base"; + import "@interactjs/auto-start/dragAxis"; + import "@interactjs/auto-start/hold"; + const _default_9: { + id: string; + install(scope: Scope): void; + }; + export default _default_9; +} +declare module "@interactjs/auto-start/index" { + import "@interactjs/auto-start/plugin"; +} +declare module "@interactjs/core/tests/_helpers" { + import * as pointerUtils from "@interactjs/utils/pointerUtils"; + import type { PointerType, Rect, Target, ActionProps } from "@interactjs/core/types"; + import type { Plugin } from "@interactjs/core/scope"; + import { Scope } from "@interactjs/core/scope"; + export function unique(): number; + export function uniqueProps(obj: any): void; + export function newCoordsSet(n?: number): { + start: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + cur: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + prev: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + delta: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + velocity: { + page: { + x: number; + y: number; + }; + client: { + x: number; + y: number; + }; + timeStamp: number; + }; + }; + export function newPointer(n?: number): PointerType; + export function mockScope({ document }?: any): Scope; + export function getProps(src: T, props: readonly K[]): Pick; + export function testEnv({ plugins, target, rect, document, }?: { + plugins?: Plugin[]; + target?: T; + rect?: Rect; + document?: Document; + }): { + scope: Scope; + interaction: import("@interactjs/core/Interaction").Interaction; + target: T extends undefined ? HTMLElement : T; + interactable: import("@interactjs/types").Interactable; + coords: pointerUtils.MockCoords; + event: { + coords: pointerUtils.MockCoords; + readonly page: any; + readonly client: any; + readonly timeStamp: any; + readonly pageX: any; + readonly pageY: any; + readonly clientX: any; + readonly clientY: any; + readonly pointerId: any; + readonly target: any; + readonly type: any; + readonly pointerType: any; + readonly buttons: any; + preventDefault(): void; + } & PointerType & import("@interactjs/core/types").PointerEventType; + interact: import("@interactjs/core/InteractStatic").InteractStatic; + start: (action: ActionProps) => boolean; + stop: () => void; + down: () => void; + move: (force?: boolean) => void; + up: () => void; + }; + export function timeout(n: number): Promise; + export function ltrbwh(left: number, top: number, right: number, bottom: number, width: number, height: number): { + left: number; + top: number; + right: number; + bottom: number; + width: number; + height: number; + }; +} +declare module "@interactjs/dev-tools/visualizer/plugin" { + const _default_10: {}; + export default _default_10; +} +declare module "@interactjs/dev-tools/plugin" { + import type Interaction from "@interactjs/core/Interaction"; + import type { Plugin } from "@interactjs/core/scope"; + import type { OptionMethod } from "@interactjs/core/types"; + import "@interactjs/dev-tools/visualizer/plugin"; + import visualizer from "@interactjs/dev-tools/visualizer/plugin"; + module "@interactjs/core/scope" { + interface Scope { + logger: Logger; + } + } + module "@interactjs/core/InteractStatic" { + interface InteractStatic { + visializer: typeof visualizer; + } + } + module "@interactjs/core/options" { + interface BaseDefaults { + devTools?: DevToolsOptions; + } + } + module "@interactjs/core/Interactable" { + interface Interactable { + devTools: OptionMethod; + } + } + export interface DevToolsOptions { + ignore: { + [P in keyof typeof CheckName]?: boolean; + }; + } + export interface Logger { + warn: (...args: any[]) => void; + error: (...args: any[]) => void; + log: (...args: any[]) => void; + } + export interface Check { + name: CheckName; + text: string; + perform: (interaction: Interaction) => boolean; + getInfo: (interaction: Interaction) => any[]; + } + enum CheckName { + touchAction = "touchAction", + boxSizing = "boxSizing", + noListeners = "noListeners" + } + const defaultExport: Plugin; + export default defaultExport; +} +declare module "@interactjs/dev-tools/index" { + import "@interactjs/dev-tools/plugin"; +} +declare module "@interactjs/dev-tools/visualizer/plugin.stub" { + const _default_11: {}; + export default _default_11; +} +declare module "@interactjs/dev-tools/visualizer/vueModules.stub" { + export {}; +} +declare module "@interactjs/dev-tools/visualizer/vueModules" { + export {}; +} +declare module "@interactjs/modifiers/types" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type { EventPhase } from "@interactjs/core/InteractEvent"; + import type Interaction from "@interactjs/core/Interaction"; + import type { EdgeOptions, FullRect, Point, Rect } from "@interactjs/core/types"; + export interface Modifier { + options: Defaults; + methods: { + start?: (arg: ModifierArg) => void; + set?: (arg: ModifierArg) => Result; + beforeEnd?: (arg: ModifierArg) => Point | void; + stop?: (arg: ModifierArg) => void; + }; + name?: Name; + enable: () => Modifier; + disable: () => Modifier; + } + export type ModifierState = { + options: Defaults; + methods?: Modifier['methods']; + index?: number; + name?: Name; + } & StateProps; + export interface ModifierArg { + interaction: Interaction; + interactable: Interactable; + phase: EventPhase; + rect: FullRect; + edges: EdgeOptions; + state: State; + element: Element; + pageCoords: Point; + prevCoords: Point; + prevRect?: FullRect; + coords: Point; + startOffset: Rect; + preEnd?: boolean; + } + export interface ModifierModule { + defaults?: Defaults; + start?(arg: ModifierArg): void; + set?(arg: ModifierArg): Result; + beforeEnd?(arg: ModifierArg): Point | void; + stop?(arg: ModifierArg): void; + } + export interface ModifierFunction { + (_options?: Partial): Modifier; + _defaults: Defaults; + _methods: ModifierModule; + } +} +declare module "@interactjs/modifiers/Modification" { + import type { EventPhase } from "@interactjs/core/InteractEvent"; + import type { Interaction, DoAnyPhaseArg } from "@interactjs/core/Interaction"; + import type { EdgeOptions, FullRect, Point, Rect } from "@interactjs/core/types"; + import type { Modifier, ModifierArg, ModifierState } from "@interactjs/modifiers/types"; + export interface ModificationResult { + delta: Point; + rectDelta: Rect; + coords: Point; + rect: FullRect; + eventProps: any[]; + changed: boolean; + } + interface MethodArg { + phase: EventPhase; + pageCoords: Point; + rect: FullRect; + coords: Point; + preEnd?: boolean; + skipModifiers?: number; + } + export class Modification { + states: ModifierState[]; + startOffset: Rect; + startDelta: Point; + result: ModificationResult; + endResult: Point; + startEdges: EdgeOptions; + edges: EdgeOptions; + readonly interaction: Readonly; + constructor(interaction: Interaction); + start({ phase }: { + phase: EventPhase; + }, pageCoords: Point): ModificationResult; + fillArg(arg: Partial): ModifierArg<{ + options: unknown; + methods?: { + start?: (arg: ModifierArg) => void; + set?: (arg: ModifierArg) => any; + beforeEnd?: (arg: ModifierArg) => void | Point; + stop?: (arg: ModifierArg) => void; + }; + index?: number; + name?: any; + }>; + startAll(arg: MethodArg & Partial): void; + setAll(arg: MethodArg & Partial): ModificationResult; + applyToInteraction(arg: { + phase: EventPhase; + rect?: Rect; + }): void; + setAndApply(arg: Partial & { + phase: EventPhase; + preEnd?: boolean; + skipModifiers?: number; + modifiedCoords?: Point; + }): void | false; + beforeEnd(arg: Omit & { + state?: ModifierState; + }): void | false; + stop(arg: { + interaction: Interaction; + }): void; + prepareStates(modifierList: Modifier[]): { + options: unknown; + methods?: { + start?: (arg: ModifierArg) => void; + set?: (arg: ModifierArg) => any; + beforeEnd?: (arg: ModifierArg) => void | Point; + stop?: (arg: ModifierArg) => void; + }; + index?: number; + name?: any; + }[]; + restoreInteractionCoords({ interaction: { coords, rect, modification } }: { + interaction: Interaction; + }): void; + shouldDo(options: any, preEnd?: boolean, phase?: string, requireEndOnly?: boolean): boolean; + copyFrom(other: Modification): void; + destroy(): void; + } + export function getRectOffset(rect: any, coords: any): { + left: number; + top: number; + right: number; + bottom: number; + }; +} +declare module "@interactjs/modifiers/base" { + import type { InteractEvent } from "@interactjs/core/InteractEvent"; + import type Interaction from "@interactjs/core/Interaction"; + import type { Plugin } from "@interactjs/core/scope"; + import { Modification } from "@interactjs/modifiers/Modification"; + import type { Modifier, ModifierModule, ModifierState } from "@interactjs/modifiers/types"; + module "@interactjs/core/Interaction" { + interface Interaction { + modification?: Modification; + } + } + module "@interactjs/core/InteractEvent" { + interface InteractEvent { + modifiers?: Array<{ + name: string; + [key: string]: any; + }>; + } + } + module "@interactjs/core/options" { + interface PerActionDefaults { + modifiers?: Modifier[]; + } + } + export function makeModifier(module: ModifierModule, name?: Name): { + (_options?: Partial): Modifier; + _defaults: Defaults; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => Result; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + export function addEventModifiers({ iEvent, interaction, }: { + iEvent: InteractEvent; + interaction: Interaction; + }): void; + const modifiersBase: Plugin; + export default modifiersBase; +} +declare module "@interactjs/offset/plugin" { + import type Interaction from "@interactjs/core/Interaction"; + import type { Plugin } from "@interactjs/core/scope"; + import type { Point } from "@interactjs/core/types"; + module "@interactjs/core/Interaction" { + interface Interaction { + offsetBy?: typeof offsetBy; + offset: { + total: Point; + pending: Point; + }; + } + enum _ProxyMethods { + offsetBy = "" + } + } + export function addTotal(interaction: Interaction): void; + export function applyPending(interaction: Interaction): boolean; + function offsetBy(this: Interaction, { x, y }: Point): void; + const offset: Plugin; + export default offset; +} +declare module "@interactjs/inertia/plugin" { + import type { Interaction, DoPhaseArg } from "@interactjs/core/Interaction"; + import type { SignalArgs, Plugin } from "@interactjs/core/scope"; + import type { ActionName, Point, PointerEventType } from "@interactjs/core/types"; + import "@interactjs/modifiers/base"; + import "@interactjs/offset/plugin"; + import { Modification } from "@interactjs/modifiers/Modification"; + import type { ModifierArg } from "@interactjs/modifiers/types"; + module "@interactjs/core/InteractEvent" { + interface PhaseMap { + resume?: true; + inertiastart?: true; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + inertia?: InertiaState; + } + } + module "@interactjs/core/options" { + interface PerActionDefaults { + inertia?: { + enabled?: boolean; + resistance?: number; + minSpeed?: number; + endSpeed?: number; + allowResume?: true; + smoothEndDuration?: number; + }; + } + } + module "@interactjs/core/scope" { + interface SignalArgs { + 'interactions:before-action-inertiastart': Omit, 'iEvent'>; + 'interactions:action-inertiastart': DoPhaseArg; + 'interactions:after-action-inertiastart': DoPhaseArg; + 'interactions:before-action-resume': Omit, 'iEvent'>; + 'interactions:action-resume': DoPhaseArg; + 'interactions:after-action-resume': DoPhaseArg; + } + } + export class InertiaState { + active: boolean; + isModified: boolean; + smoothEnd: boolean; + allowResume: boolean; + modification: Modification; + modifierCount: number; + modifierArg: ModifierArg; + startCoords: Point; + t0: number; + v0: number; + te: number; + targetOffset: Point; + modifiedOffset: Point; + currentOffset: Point; + lambda_v0?: number; + one_ve_v0?: number; + timeout: number; + readonly interaction: Interaction; + constructor(interaction: Interaction); + start(event: PointerEventType): boolean; + startInertia(): void; + startSmoothEnd(): void; + onNextFrame(tickFn: () => void): void; + inertiaTick(): void; + smoothEndTick(): void; + resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']): void; + end(): void; + stop(): void; + } + const inertia: Plugin; + export default inertia; +} +declare module "@interactjs/inertia/index" { + import "@interactjs/inertia/plugin"; +} +declare module "@interactjs/snappers/edgeTarget" { + const _default_12: () => void; + export default _default_12; +} +declare module "@interactjs/snappers/elements" { + const _default_13: () => void; + export default _default_13; +} +declare module "@interactjs/modifiers/snap/pointer" { + import type { Interaction, InteractionProxy } from "@interactjs/core/Interaction"; + import type { ActionName, Point, RectResolvable, Element } from "@interactjs/core/types"; + import type { ModifierArg, ModifierState } from "@interactjs/modifiers/types"; + export interface Offset { + x: number; + y: number; + index: number; + relativePoint?: Point | null; + } + export interface SnapPosition { + x?: number; + y?: number; + range?: number; + offset?: Offset; + [index: string]: any; + } + export type SnapFunction = (x: number, y: number, interaction: InteractionProxy, offset: Offset, index: number) => SnapPosition; + export type SnapTarget = SnapPosition | SnapFunction; + export interface SnapOptions { + targets?: SnapTarget[]; + range?: number; + relativePoints?: Point[]; + offset?: Point | RectResolvable<[Interaction]> | 'startCoords'; + offsetWithOrigin?: boolean; + origin?: RectResolvable<[Element]> | Point; + endOnly?: boolean; + enabled?: boolean; + } + export type SnapState = ModifierState; + function start(arg: ModifierArg): void; + function set(arg: ModifierArg): { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + const snap: { + start: typeof start; + set: typeof set; + defaults: SnapOptions; + }; + const _default_14: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: SnapOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; + }; + export default _default_14; + export { snap }; +} +declare module "@interactjs/snappers/grid" { + import type { Rect, Point } from "@interactjs/core/types"; + import type { SnapFunction } from "@interactjs/modifiers/snap/pointer"; + export interface GridOptionsBase { + range?: number; + limits?: Rect; + offset?: Point; + } + export interface GridOptionsXY extends GridOptionsBase { + x: number; + y: number; + } + export interface GridOptionsTopLeft extends GridOptionsBase { + top?: number; + left?: number; + } + export interface GridOptionsBottomRight extends GridOptionsBase { + bottom?: number; + right?: number; + } + export interface GridOptionsWidthHeight extends GridOptionsBase { + width?: number; + height?: number; + } + export type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight; + const _default_15: (grid: GridOptions) => SnapFunction & { + grid: GridOptions; + coordFields: (readonly ["x", "y"] | readonly ["left", "top"] | readonly ["right", "bottom"] | readonly ["width", "height"])[]; + }; + export default _default_15; +} +declare module "@interactjs/snappers/all" { + export { default as edgeTarget } from "@interactjs/snappers/edgeTarget"; + export { default as elements } from "@interactjs/snappers/elements"; + export { default as grid } from "@interactjs/snappers/grid"; +} +declare module "@interactjs/snappers/plugin" { + import type { Plugin } from "@interactjs/core/scope"; + import * as allSnappers from "@interactjs/snappers/all"; + module "@interactjs/core/InteractStatic" { + interface InteractStatic { + snappers: typeof allSnappers; + createSnapGrid: typeof allSnappers.grid; + } + } + const snappersPlugin: Plugin; + export default snappersPlugin; +} +declare module "@interactjs/modifiers/aspectRatio" { + /** + * @module modifiers/aspectRatio + * + * @description + * This modifier forces elements to be resized with a specified dx/dy ratio. + * + * ```js + * interact(target).resizable({ + * modifiers: [ + * interact.modifiers.snapSize({ + * targets: [ interact.snappers.grid({ x: 20, y: 20 }) ], + * }), + * interact.aspectRatio({ ratio: 'preserve' }), + * ], + * }); + * ``` + */ + import type { Point, Rect, EdgeOptions } from "@interactjs/core/types"; + import { Modification } from "@interactjs/modifiers/Modification"; + import type { Modifier, ModifierModule, ModifierState } from "@interactjs/modifiers/types"; + export interface AspectRatioOptions { + ratio?: number | 'preserve'; + equalDelta?: boolean; + modifiers?: Modifier[]; + enabled?: boolean; + } + export type AspectRatioState = ModifierState; + const aspectRatio: ModifierModule; + const _default_16: { + (_options?: Partial): Modifier; + _defaults: AspectRatioOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => unknown; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + export default _default_16; + export { aspectRatio }; +} +declare module "@interactjs/modifiers/noop" { + import type { ModifierFunction } from "@interactjs/modifiers/types"; + const noop: ModifierFunction; + export default noop; +} +declare module "@interactjs/modifiers/avoid/avoid" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/restrict/pointer" { + import type Interaction from "@interactjs/core/Interaction"; + import type { RectResolvable, Rect, Point } from "@interactjs/core/types"; + import type { ModifierArg, ModifierModule, ModifierState } from "@interactjs/modifiers/types"; + export interface RestrictOptions { + restriction: RectResolvable<[number, number, Interaction]>; + elementRect: Rect; + offset: Rect; + endOnly: boolean; + enabled?: boolean; + } + export type RestrictState = ModifierState; + export function getRestrictionRect(value: RectResolvable<[number, number, Interaction]>, interaction: Interaction, coords?: Point): Rect; + const restrict: ModifierModule; + const _default_17: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: RestrictOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => unknown; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; + }; + export default _default_17; + export { restrict }; +} +declare module "@interactjs/modifiers/restrict/edges" { + import type { Point, Rect } from "@interactjs/core/types"; + import type { ModifierArg, ModifierState } from "@interactjs/modifiers/types"; + import type { RestrictOptions } from "@interactjs/modifiers/restrict/pointer"; + export interface RestrictEdgesOptions { + inner: RestrictOptions['restriction']; + outer: RestrictOptions['restriction']; + offset?: RestrictOptions['offset']; + endOnly: boolean; + enabled?: boolean; + } + export type RestrictEdgesState = ModifierState; + function start({ interaction, startOffset, state }: ModifierArg): void; + function set({ coords, edges, interaction, state }: ModifierArg): void; + const restrictEdges: { + noInner: { + top: number; + left: number; + bottom: number; + right: number; + }; + noOuter: { + top: number; + left: number; + bottom: number; + right: number; + }; + start: typeof start; + set: typeof set; + defaults: RestrictEdgesOptions; + }; + const _default_18: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: RestrictEdgesOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => void; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; + }; + export default _default_18; + export { restrictEdges }; +} +declare module "@interactjs/modifiers/restrict/rect" { + const restrictRect: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => unknown; + defaults: import("@interactjs/modifiers/restrict/pointer").RestrictOptions & { + elementRect: { + top: number; + left: number; + bottom: number; + right: number; + }; + }; + }; + const _default_19: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/restrict/pointer").RestrictOptions & { + elementRect: { + top: number; + left: number; + bottom: number; + right: number; + }; + }; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => unknown; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + export default _default_19; + export { restrictRect }; +} +declare module "@interactjs/modifiers/restrict/size" { + import type { Point, Rect, Size } from "@interactjs/core/types"; + import type { ModifierArg, ModifierState } from "@interactjs/modifiers/types"; + import type { RestrictEdgesState } from "@interactjs/modifiers/restrict/edges"; + import type { RestrictOptions } from "@interactjs/modifiers/restrict/pointer"; + export interface RestrictSizeOptions { + min?: Size | Point | RestrictOptions['restriction']; + max?: Size | Point | RestrictOptions['restriction']; + endOnly: boolean; + enabled?: boolean; + } + function start(arg: ModifierArg): void; + export type RestrictSizeState = RestrictEdgesState & ModifierState; + function set(arg: ModifierArg): void; + const restrictSize: { + start: typeof start; + set: typeof set; + defaults: RestrictSizeOptions; + }; + const _default_20: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: RestrictSizeOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => void; + beforeEnd: (arg: ModifierArg) => void | Point; + stop: (arg: ModifierArg) => void; + }; + }; + export default _default_20; + export { restrictSize }; +} +declare module "@interactjs/modifiers/rubberband/rubberband" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/snap/size" { + import type { ModifierArg } from "@interactjs/modifiers/types"; + import type { SnapOptions, SnapState } from "@interactjs/modifiers/snap/pointer"; + export type SnapSizeOptions = Pick; + function start(arg: ModifierArg): any; + function set(arg: any): { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + const snapSize: { + start: typeof start; + set: typeof set; + defaults: SnapSizeOptions; + }; + const _default_21: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: SnapSizeOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: ModifierArg) => void; + }; + }; + export default _default_21; + export { snapSize }; +} +declare module "@interactjs/modifiers/snap/edges" { + import type { ModifierArg, ModifierModule } from "@interactjs/modifiers/types"; + import type { SnapOptions, SnapState } from "@interactjs/modifiers/snap/pointer"; + import { snapSize } from "@interactjs/modifiers/snap/size"; + export type SnapEdgesOptions = Pick; + const snapEdges: ModifierModule>; + const _default_22: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: SnapEdgesOptions; + _methods: { + start: (arg: ModifierArg) => void; + set: (arg: ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: ModifierArg) => void; + }; + }; + export default _default_22; + export { snapEdges }; +} +declare module "@interactjs/modifiers/spring/spring" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/transform/transform" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/all" { + const _default_23: { + aspectRatio: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/aspectRatio").AspectRatioOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => unknown; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + restrictEdges: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/restrict/edges").RestrictEdgesOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + restrict: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/restrict/pointer").RestrictOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => unknown; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + restrictRect: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/restrict/pointer").RestrictOptions & { + elementRect: { + top: number; + left: number; + bottom: number; + right: number; + }; + }; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => unknown; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + restrictSize: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/restrict/size").RestrictSizeOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + snapEdges: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/snap/edges").SnapEdgesOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + snap: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/snap/pointer").SnapOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + snapSize: { + (_options?: Partial): import("@interactjs/modifiers/types").Modifier; + _defaults: import("@interactjs/modifiers/snap/size").SnapSizeOptions; + _methods: { + start: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + set: (arg: import("@interactjs/modifiers/types").ModifierArg) => { + target: any; + inRange: boolean; + distance: number; + range: number; + delta: { + x: number; + y: number; + }; + }; + beforeEnd: (arg: import("@interactjs/modifiers/types").ModifierArg) => void | import("@interactjs/types").Point; + stop: (arg: import("@interactjs/modifiers/types").ModifierArg) => void; + }; + }; + spring: import("@interactjs/modifiers/types").ModifierFunction; + avoid: import("@interactjs/modifiers/types").ModifierFunction; + transform: import("@interactjs/modifiers/types").ModifierFunction; + rubberband: import("@interactjs/modifiers/types").ModifierFunction; + }; + export default _default_23; +} +declare module "@interactjs/modifiers/plugin" { + import type { Plugin } from "@interactjs/core/scope"; + import "@interactjs/modifiers/all"; + import "@interactjs/modifiers/base"; + import all from "@interactjs/modifiers/all"; + module "@interactjs/core/InteractStatic" { + interface InteractStatic { + modifiers: typeof all; + } + } + const modifiers: Plugin; + export default modifiers; +} +declare module "@interactjs/pointer-events/PointerEvent" { + import { BaseEvent } from "@interactjs/core/BaseEvent"; + import type Interaction from "@interactjs/core/Interaction"; + import type { PointerEventType, PointerType, Point } from "@interactjs/core/types"; + export class PointerEvent extends BaseEvent { + type: T; + originalEvent: PointerEventType; + pointerId: number; + pointerType: string; + double: boolean; + pageX: number; + pageY: number; + clientX: number; + clientY: number; + dt: number; + eventable: any; + [key: string]: any; + constructor(type: T, pointer: PointerType | PointerEvent, event: PointerEventType, eventTarget: Node, interaction: Interaction, timeStamp: number); + _subtractOrigin({ x: originX, y: originY }: Point): this; + _addOrigin({ x: originX, y: originY }: Point): this; + /** + * Prevent the default behaviour of the original Event + */ + preventDefault(): void; + } +} +declare module "@interactjs/pointer-events/base" { + import type { Eventable } from "@interactjs/core/Eventable"; + import type { Interaction } from "@interactjs/core/Interaction"; + import type { PerActionDefaults } from "@interactjs/core/options"; + import type { Plugin } from "@interactjs/core/scope"; + import type { Point, PointerType, PointerEventType, Element } from "@interactjs/core/types"; + import { PointerEvent } from "@interactjs/pointer-events/PointerEvent"; + export type EventTargetList = Array<{ + node: Node; + eventable: Eventable; + props: { + [key: string]: any; + }; + }>; + export interface PointerEventOptions extends PerActionDefaults { + enabled?: undefined; + holdDuration?: number; + ignoreFrom?: any; + allowFrom?: any; + origin?: Point | string | Element; + } + module "@interactjs/core/scope" { + interface Scope { + pointerEvents: typeof pointerEvents; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + prevTap?: PointerEvent; + tapTime?: number; + } + } + module "@interactjs/core/PointerInfo" { + interface PointerInfo { + hold?: { + duration: number; + timeout: any; + }; + } + } + module "@interactjs/core/options" { + interface ActionDefaults { + pointerEvents: Options; + } + } + module "@interactjs/core/scope" { + interface SignalArgs { + 'pointerEvents:new': { + pointerEvent: PointerEvent; + }; + 'pointerEvents:fired': { + interaction: Interaction; + pointer: PointerType | PointerEvent; + event: PointerEventType | PointerEvent; + eventTarget: Node; + pointerEvent: PointerEvent; + targets?: EventTargetList; + type: string; + }; + 'pointerEvents:collect-targets': { + interaction: Interaction; + pointer: PointerType | PointerEvent; + event: PointerEventType | PointerEvent; + eventTarget: Node; + targets?: EventTargetList; + type: string; + path: Node[]; + node: null; + }; + } + } + const pointerEvents: Plugin; + export default pointerEvents; +} +declare module "@interactjs/pointer-events/holdRepeat" { + import type { Plugin } from "@interactjs/core/scope"; + import "@interactjs/pointer-events/base"; + module "@interactjs/core/Interaction" { + interface Interaction { + holdIntervalHandle?: any; + } + } + module "@interactjs/pointer-events/PointerEvent" { + interface PointerEvent { + count?: number; + } + } + module "@interactjs/pointer-events/base" { + interface PointerEventOptions { + holdRepeatInterval?: number; + } + } + const holdRepeat: Plugin; + export default holdRepeat; +} +declare module "@interactjs/pointer-events/interactableTargets" { + import type { Plugin } from "@interactjs/core/scope"; + import type { PointerEventOptions } from "@interactjs/pointer-events/base"; + module "@interactjs/core/Interactable" { + interface Interactable { + pointerEvents(options: Partial): this; + } + } + const plugin: Plugin; + export default plugin; +} +declare module "@interactjs/pointer-events/plugin" { + import type { Plugin } from "@interactjs/core/scope"; + import "@interactjs/pointer-events/base"; + import "@interactjs/pointer-events/holdRepeat"; + import "@interactjs/pointer-events/interactableTargets"; + const plugin: Plugin; + export default plugin; +} +declare module "@interactjs/reflow/plugin" { + import type { Interactable } from "@interactjs/core/Interactable"; + import type { DoAnyPhaseArg } from "@interactjs/core/Interaction"; + import type { Scope, Plugin } from "@interactjs/core/scope"; + import type { ActionName, ActionProps } from "@interactjs/core/types"; + module "@interactjs/core/scope" { + interface SignalArgs { + 'interactions:before-action-reflow': Omit; + 'interactions:action-reflow': DoAnyPhaseArg; + 'interactions:after-action-reflow': DoAnyPhaseArg; + } + } + module "@interactjs/core/Interactable" { + interface Interactable { + /** + * ```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 } A promise that resolves to the `Interactable` when actions on all targets have ended + */ + reflow(action: ActionProps): ReturnType; + } + } + module "@interactjs/core/Interaction" { + interface Interaction { + _reflowPromise: Promise; + _reflowResolve: (...args: unknown[]) => void; + } + } + module "@interactjs/core/InteractEvent" { + interface PhaseMap { + reflow?: true; + } + } + function doReflow(interactable: Interactable, action: ActionProps, scope: Scope): Promise; + const reflow: Plugin; + export default reflow; +} +declare module "@interactjs/interactjs/index.stub" { + import "@interactjs/actions/plugin"; + import "@interactjs/auto-scroll/plugin"; + import "@interactjs/auto-start/plugin"; + import "@interactjs/core/interactablePreventDefault"; + import "@interactjs/dev-tools/plugin"; + import "@interactjs/inertia/plugin"; + import "@interactjs/interact/index"; + import "@interactjs/modifiers/plugin"; + import "@interactjs/offset/plugin"; + import "@interactjs/pointer-events/plugin"; + import "@interactjs/reflow/plugin"; + import interact from "@interactjs/interact/index"; + export default interact; +} +declare module "@interactjs/interactjs/index" { + import "@interactjs/actions/plugin"; + import "@interactjs/auto-scroll/plugin"; + import "@interactjs/auto-start/plugin"; + import "@interactjs/core/interactablePreventDefault"; + import "@interactjs/dev-tools/plugin"; + import "@interactjs/inertia/plugin"; + import "@interactjs/interact/index"; + import "@interactjs/modifiers/plugin"; + import "@interactjs/offset/plugin"; + import "@interactjs/pointer-events/plugin"; + import "@interactjs/reflow/plugin"; + import interact from "@interactjs/interact/index"; + export default interact; +} +declare module "@interactjs/modifiers/index" { + import "@interactjs/modifiers/plugin"; +} +declare module "@interactjs/modifiers/avoid/avoid.stub" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/rubberband/rubberband.stub" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/spring/spring.stub" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/modifiers/transform/transform.stub" { + export { default } from "@interactjs/modifiers/noop"; +} +declare module "@interactjs/pointer-events/index" { + import "@interactjs/pointer-events/plugin"; +} +declare module "@interactjs/reflow/index" { + import "@interactjs/reflow/plugin"; +} +declare module "@interactjs/snappers/edgeTarget.stub" { + const _default_24: () => void; + export default _default_24; +} +declare module "@interactjs/snappers/elements.stub" { + const _default_25: () => void; + export default _default_25; +} +declare module "@interactjs/snappers/index" { + import "@interactjs/snappers/plugin"; +} +declare module "@interactjs/types/index" { + import type { InteractEvent as _InteractEvent, EventPhase } from "@interactjs/core/InteractEvent"; + import type * as interaction from "@interactjs/core/Interaction"; + import type { ActionName, ActionProps as _ActionProps } from "@interactjs/core/types"; + import "@interactjs/interactjs/index"; + export * from "@interactjs/core/types"; + export type { Plugin } from "@interactjs/core/scope"; + export type { EventPhase } from "@interactjs/core/InteractEvent"; + export type { Options } from "@interactjs/core/options"; + export type { PointerEvent } from "@interactjs/pointer-events/PointerEvent"; + export type { Interactable } from "@interactjs/core/Interactable"; + export type { DragEvent } from "@interactjs/actions/drag/plugin"; + export type { DropEvent } from "@interactjs/actions/drop/DropEvent"; + export type { GestureEvent } from "@interactjs/actions/gesture/plugin"; + export type { ResizeEvent } from "@interactjs/actions/resize/plugin"; + export type { SnapFunction, SnapTarget } from "@interactjs/modifiers/snap/pointer"; + export type ActionProps = _ActionProps; + export type Interaction = interaction.Interaction; + export type InteractionProxy = interaction.InteractionProxy; + export type PointerArgProps = interaction.PointerArgProps; + export type InteractEvent = _InteractEvent; +} +declare module "@interactjs/utils/ElementState.stub" { + const _default_26: {}; + export default _default_26; +} +declare module "@interactjs/utils/ElementState" { + const _default_27: {}; + export default _default_27; +} +declare module "@interactjs/utils/center" { + import type { Rect } from "@interactjs/core/types"; + const _default_28: (rect: Rect) => { + x: number; + y: number; + }; + export default _default_28; +} +declare module "@interactjs/utils/displace.stub" { + const _default_29: {}; + export default _default_29; +} +declare module "@interactjs/utils/displace" { + const _default_30: {}; + export default _default_30; +} +declare module "@interactjs/utils/exchange.stub" { + const _default_31: {}; + export default _default_31; +} +declare module "@interactjs/utils/exchange" { + const _default_32: {}; + export default _default_32; +} +declare module "@interactjs/utils/shallowEqual" { + export default function shallowEqual(left: any, right: any): boolean; +} diff --git a/packages/@interactjs/types/index.js b/packages/@interactjs/types/index.js new file mode 100644 index 000000000..6d298d0e8 --- /dev/null +++ b/packages/@interactjs/types/index.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +require("../interactjs/index.js"); +var _types = require("../core/types.js"); +Object.keys(_types).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _types[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _types[key]; + } + }); +}); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/@interactjs/types/index.js.map b/packages/@interactjs/types/index.js.map new file mode 100644 index 000000000..5e408c91a --- /dev/null +++ b/packages/@interactjs/types/index.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "require", + "_types", + "Object", + "keys", + "forEach", + "key", + "exports", + "defineProperty", + "enumerable", + "get" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable import/no-extraneous-dependencies */\nimport type { InteractEvent as _InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type * as interaction from '@interactjs/core/Interaction'\nimport type { ActionName, ActionProps as _ActionProps } from '@interactjs/core/types'\n// import module augmentations\nimport '@interactjs/interactjs'\n\nexport * from '@interactjs/core/types'\nexport type { Plugin } from '@interactjs/core/scope'\nexport type { EventPhase } from '@interactjs/core/InteractEvent'\nexport type { Options } from '@interactjs/core/options'\nexport type { PointerEvent } from '@interactjs/pointer-events/PointerEvent'\nexport type { Interactable } from '@interactjs/core/Interactable'\nexport type { DragEvent } from '@interactjs/actions/drag/plugin'\nexport type { DropEvent } from '@interactjs/actions/drop/DropEvent'\nexport type { GestureEvent } from '@interactjs/actions/gesture/plugin'\nexport type { ResizeEvent } from '@interactjs/actions/resize/plugin'\nexport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport type ActionProps = _ActionProps\nexport type Interaction = interaction.Interaction\nexport type InteractionProxy = interaction.InteractionProxy\nexport type PointerArgProps = interaction.PointerArgProps\nexport type InteractEvent = _InteractEvent<\n T,\n P\n>\n" + ], + "mappings": ";;;;;AAKAA,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAAAE,MAAA,CAAAC,IAAA,CAAAF,MAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAJ,MAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAR,MAAA,CAAAI,GAAA;IAAA;EAAA;AAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/types/index.prod.js b/packages/@interactjs/types/index.prod.js new file mode 100644 index 000000000..8b39bb14a --- /dev/null +++ b/packages/@interactjs/types/index.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),require("../interactjs/index.prod.js");var e=require("../core/types.prod.js");Object.keys(e).forEach((r=>{"default"!==r&&"__esModule"!==r&&(r in exports&&exports[r]===e[r]||Object.defineProperty(exports,r,{enumerable:!0,get:()=>e[r]}))})); +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/types/index.prod.js.map b/packages/@interactjs/types/index.prod.js.map new file mode 100644 index 000000000..6c7b37d81 --- /dev/null +++ b/packages/@interactjs/types/index.prod.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "require", + "_typesProd", + "Object", + "keys", + "forEach", + "key", + "exports", + "defineProperty", + "enumerable", + "get" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "/* eslint-disable import/no-extraneous-dependencies */\nimport type { InteractEvent as _InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type * as interaction from '@interactjs/core/Interaction'\nimport type { ActionName, ActionProps as _ActionProps } from '@interactjs/core/types'\n// import module augmentations\nimport '@interactjs/interactjs'\n\nexport * from '@interactjs/core/types'\nexport type { Plugin } from '@interactjs/core/scope'\nexport type { EventPhase } from '@interactjs/core/InteractEvent'\nexport type { Options } from '@interactjs/core/options'\nexport type { PointerEvent } from '@interactjs/pointer-events/PointerEvent'\nexport type { Interactable } from '@interactjs/core/Interactable'\nexport type { DragEvent } from '@interactjs/actions/drag/plugin'\nexport type { DropEvent } from '@interactjs/actions/drop/DropEvent'\nexport type { GestureEvent } from '@interactjs/actions/gesture/plugin'\nexport type { ResizeEvent } from '@interactjs/actions/resize/plugin'\nexport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport type ActionProps = _ActionProps\nexport type Interaction = interaction.Interaction\nexport type InteractionProxy = interaction.InteractionProxy\nexport type PointerArgProps = interaction.PointerArgProps\nexport type InteractEvent = _InteractEvent<\n T,\n P\n>\n" + ], + "mappings": "uDAKAA,QAAA,+BAEA,IAAAC,EAAAD,QAAA,yBAAAE,OAAAC,KAAAF,GAAAG,SAAAC,IAAA,YAAAA,GAAA,eAAAA,SAAAC,iBAAAD,KAAAJ,EAAAI,IAAAH,OAAAK,eAAAD,QAAAD,EAAA,CAAAG,YAAA,EAAAC,IAAA,IAAAR,EAAAI,KAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/types/package.json b/packages/@interactjs/types/package.json index 4786b91fc..448f0ed40 100644 --- a/packages/@interactjs/types/package.json +++ b/packages/@interactjs/types/package.json @@ -12,7 +12,6 @@ "typings": "typings.d.ts", "devDependencies": { "@interactjs/actions": "1.10.25", - "@interactjs/arrange": "1.10.25", "@interactjs/auto-scroll": "1.10.25", "@interactjs/auto-start": "1.10.25", "@interactjs/core": "1.10.25", diff --git a/packages/@interactjs/types/typings.d.ts b/packages/@interactjs/types/typings.d.ts new file mode 100644 index 000000000..fa7bba483 --- /dev/null +++ b/packages/@interactjs/types/typings.d.ts @@ -0,0 +1,4 @@ +import * as Interact from '@interactjs/types/index' + +export as namespace Interact +export = Interact diff --git a/packages/@interactjs/utils/.npmignore b/packages/@interactjs/utils/.npmignore new file mode 100644 index 000000000..d5cdeb8b3 --- /dev/null +++ b/packages/@interactjs/utils/.npmignore @@ -0,0 +1,7 @@ +*.ts +!*.d.ts +*.map.* +*.spec.ts +*.spec.js +dist/docs +guide diff --git a/packages/@interactjs/utils/ElementState.d.ts b/packages/@interactjs/utils/ElementState.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/utils/ElementState.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/utils/ElementState.js b/packages/@interactjs/utils/ElementState.js new file mode 100644 index 000000000..b8f483625 --- /dev/null +++ b/packages/@interactjs/utils/ElementState.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = exports.default = {}; +//# sourceMappingURL=ElementState.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/ElementState.js.map b/packages/@interactjs/utils/ElementState.js.map new file mode 100644 index 000000000..aa992ab93 --- /dev/null +++ b/packages/@interactjs/utils/ElementState.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "ElementState.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": ";;;;;;iCAAe,CAAC,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/ElementState.prod.js b/packages/@interactjs/utils/ElementState.prod.js new file mode 100644 index 000000000..35c41f1af --- /dev/null +++ b/packages/@interactjs/utils/ElementState.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default={}; +//# sourceMappingURL=ElementState.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/ElementState.prod.js.map b/packages/@interactjs/utils/ElementState.prod.js.map new file mode 100644 index 000000000..2046cb3d6 --- /dev/null +++ b/packages/@interactjs/utils/ElementState.prod.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "ElementState.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": "8FAAe,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/ElementState.stub.d.ts b/packages/@interactjs/utils/ElementState.stub.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/utils/ElementState.stub.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/utils/LICENSE b/packages/@interactjs/utils/LICENSE new file mode 100644 index 000000000..e4854f77d --- /dev/null +++ b/packages/@interactjs/utils/LICENSE @@ -0,0 +1,23 @@ +Copyright (c) 2012-present Taye Adeyemi + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to +whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/@interactjs/utils/arr.d.ts b/packages/@interactjs/utils/arr.d.ts new file mode 100644 index 000000000..7432d8b78 --- /dev/null +++ b/packages/@interactjs/utils/arr.d.ts @@ -0,0 +1,8 @@ +type Filter = (element: T, index: number, array: T[]) => boolean; +export declare const contains: (array: T[], target: T) => boolean; +export declare const remove: (array: T[], target: T) => T[]; +export declare const merge: (target: (T | U)[], source: U[]) => (T | U)[]; +export declare const from: (source: ArrayLike) => T[]; +export declare const findIndex: (array: T[], func: Filter) => number; +export declare const find: (array: T[], func: Filter) => T; +export {}; diff --git a/packages/@interactjs/utils/arr.js b/packages/@interactjs/utils/arr.js new file mode 100644 index 000000000..d38f0a207 --- /dev/null +++ b/packages/@interactjs/utils/arr.js @@ -0,0 +1,31 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.remove = exports.merge = exports.from = exports.findIndex = exports.find = exports.contains = void 0; +const contains = (array, target) => array.indexOf(target) !== -1; +exports.contains = contains; +const remove = (array, target) => array.splice(array.indexOf(target), 1); +exports.remove = remove; +const merge = (target, source) => { + for (const item of source) { + target.push(item); + } + return target; +}; +exports.merge = merge; +const from = source => merge([], source); +exports.from = from; +const findIndex = (array, func) => { + for (let i = 0; i < array.length; i++) { + if (func(array[i], i, array)) { + return i; + } + } + return -1; +}; +exports.findIndex = findIndex; +const find = (array, func) => array[findIndex(array, func)]; +exports.find = find; +//# sourceMappingURL=arr.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/arr.js.map b/packages/@interactjs/utils/arr.js.map new file mode 100644 index 000000000..6181cac17 --- /dev/null +++ b/packages/@interactjs/utils/arr.js.map @@ -0,0 +1,29 @@ +{ + "version": 3, + "names": [ + "contains", + "array", + "target", + "indexOf", + "exports", + "remove", + "splice", + "merge", + "source", + "item", + "push", + "from", + "findIndex", + "func", + "i", + "length", + "find" + ], + "sources": [ + "arr.ts" + ], + "sourcesContent": [ + "type Filter = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = (array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = (array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = (target: Array, source: U[]) => {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport const from = (source: ArrayLike) => merge([] as T[], source as T[])\n\nexport const findIndex = (array: T[], func: Filter) => {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport const find = (array: T[], func: Filter): T | undefined => array[findIndex(array, func)]\n" + ], + "mappings": ";;;;;;AAEO,MAAMA,QAAQ,GAAGA,CAAIC,KAAU,EAAEC,MAAS,KAAKD,KAAK,CAACE,OAAO,CAACD,MAAM,CAAC,KAAK,CAAC,CAAC;AAAAE,OAAA,CAAAJ,QAAA,GAAAA,QAAA;AAE3E,MAAMK,MAAM,GAAGA,CAAIJ,KAAU,EAAEC,MAAS,KAAKD,KAAK,CAACK,MAAM,CAACL,KAAK,CAACE,OAAO,CAACD,MAAM,CAAC,EAAE,CAAC,CAAC;AAAAE,OAAA,CAAAC,MAAA,GAAAA,MAAA;AAEnF,MAAME,KAAK,GAAGA,CAAOL,MAAoB,EAAEM,MAAW,KAAK;EAChE,KAAK,MAAMC,IAAI,IAAID,MAAM,EAAE;IACzBN,MAAM,CAACQ,IAAI,CAACD,IAAI,CAAC;EACnB;EAEA,OAAOP,MAAM;AACf,CAAC;AAAAE,OAAA,CAAAG,KAAA,GAAAA,KAAA;AAEM,MAAMI,IAAI,GAAaH,MAAoB,IAAKD,KAAK,CAAC,EAAE,EAASC,MAAa,CAAC;AAAAJ,OAAA,CAAAO,IAAA,GAAAA,IAAA;AAE/E,MAAMC,SAAS,GAAGA,CAAIX,KAAU,EAAEY,IAAe,KAAK;EAC3D,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGb,KAAK,CAACc,MAAM,EAAED,CAAC,EAAE,EAAE;IACrC,IAAID,IAAI,CAACZ,KAAK,CAACa,CAAC,CAAC,EAAEA,CAAC,EAAEb,KAAK,CAAC,EAAE;MAC5B,OAAOa,CAAC;IACV;EACF;EAEA,OAAO,CAAC,CAAC;AACX,CAAC;AAAAV,OAAA,CAAAQ,SAAA,GAAAA,SAAA;AAEM,MAAMI,IAAI,GAAGA,CAAUf,KAAU,EAAEY,IAAe,KAAoBZ,KAAK,CAACW,SAAS,CAACX,KAAK,EAAEY,IAAI,CAAC,CAAC;AAAAT,OAAA,CAAAY,IAAA,GAAAA,IAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/arr.prod.js b/packages/@interactjs/utils/arr.prod.js new file mode 100644 index 000000000..0568f62b1 --- /dev/null +++ b/packages/@interactjs/utils/arr.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.remove=exports.merge=exports.from=exports.findIndex=exports.find=exports.contains=void 0,exports.contains=(e,r)=>-1!==e.indexOf(r),exports.remove=(e,r)=>e.splice(e.indexOf(r),1);const e=(e,r)=>{for(const o of r)e.push(o);return e};exports.merge=e,exports.from=r=>e([],r);const r=(e,r)=>{for(let o=0;oe[r(e,o)]; +//# sourceMappingURL=arr.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/arr.prod.js.map b/packages/@interactjs/utils/arr.prod.js.map new file mode 100644 index 000000000..9fe5ec2e7 --- /dev/null +++ b/packages/@interactjs/utils/arr.prod.js.map @@ -0,0 +1,29 @@ +{ + "version": 3, + "names": [ + "exports", + "contains", + "array", + "target", + "indexOf", + "remove", + "splice", + "merge", + "source", + "item", + "push", + "from", + "findIndex", + "func", + "i", + "length", + "find" + ], + "sources": [ + "arr.ts" + ], + "sourcesContent": [ + "type Filter = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = (array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = (array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = (target: Array, source: U[]) => {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport const from = (source: ArrayLike) => merge([] as T[], source as T[])\n\nexport const findIndex = (array: T[], func: Filter) => {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport const find = (array: T[], func: Filter): T | undefined => array[findIndex(array, func)]\n" + ], + "mappings": "wJAEkFA,QAAAC,SAA1DA,CAAIC,EAAYC,KAAyC,IAA3BD,EAAME,QAAQD,GAEsBH,QAAAK,OAApEA,CAAIH,EAAYC,IAAcD,EAAMI,OAAOJ,EAAME,QAAQD,GAAS,GAEjF,MAAMI,EAAQA,CAAOJ,EAAsBK,KAChD,IAAK,MAAMC,KAAQD,EACjBL,EAAOO,KAAKD,GAGd,OAAON,CAAM,EACdH,QAAAO,QAEqFP,QAAAW,KAAxDH,GAAyBD,EAAM,GAAWC,GAEjE,MAAMI,EAAYA,CAAIV,EAAYW,KACvC,IAAK,IAAIC,EAAI,EAAGA,EAAIZ,EAAMa,OAAQD,IAChC,GAAID,EAAKX,EAAMY,GAAIA,EAAGZ,GACpB,OAAOY,EAIX,OAAQ,CAAC,EACVd,QAAAY,YAEyGZ,QAAAgB,KAAtFA,CAAUd,EAAYW,IAAmCX,EAAMU,EAAUV,EAAOW" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/browser.d.ts b/packages/@interactjs/utils/browser.d.ts new file mode 100644 index 000000000..1475b9110 --- /dev/null +++ b/packages/@interactjs/utils/browser.d.ts @@ -0,0 +1,21 @@ +declare const browser: { + init: typeof init; + supportsTouch: boolean; + supportsPointerEvent: boolean; + isIOS7: boolean; + isIOS: boolean; + isIe9: boolean; + isOperaMobile: boolean; + prefixedMatchesSelector: "matches"; + pEventTypes: { + up: string; + down: string; + over: string; + out: string; + move: string; + cancel: string; + }; + wheelEvent: string; +}; +declare function init(window: any): void; +export default browser; diff --git a/packages/@interactjs/utils/browser.js b/packages/@interactjs/utils/browser.js new file mode 100644 index 000000000..4e3075928 --- /dev/null +++ b/packages/@interactjs/utils/browser.js @@ -0,0 +1,63 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _domObjects = _interopRequireDefault(require("./domObjects")); +var _is = _interopRequireDefault(require("./is")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const browser = { + init, + supportsTouch: null, + supportsPointerEvent: null, + isIOS7: null, + isIOS: null, + isIe9: null, + isOperaMobile: null, + prefixedMatchesSelector: null, + pEventTypes: null, + wheelEvent: null +}; +function init(window) { + const Element = _domObjects.default.Element; + const navigator = window.navigator || {}; + + // Does the browser support touch input? + browser.supportsTouch = 'ontouchstart' in window || _is.default.func(window.DocumentTouch) && _domObjects.default.document instanceof window.DocumentTouch; + + // Does the browser support PointerEvents + // https://github.com/taye/interact.js/issues/703#issuecomment-471570492 + browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!_domObjects.default.PointerEvent; + browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform); + + // scrolling doesn't change the result of getClientRects on iOS 7 + browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\d]/.test(navigator.appVersion); + browser.isIe9 = /MSIE 9/.test(navigator.userAgent); + + // Opera Mobile must be handled differently + browser.isOperaMobile = navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent); + + // prefix matchesSelector + browser.prefixedMatchesSelector = 'matches' in Element.prototype ? 'matches' : 'webkitMatchesSelector' in Element.prototype ? 'webkitMatchesSelector' : 'mozMatchesSelector' in Element.prototype ? 'mozMatchesSelector' : 'oMatchesSelector' in Element.prototype ? 'oMatchesSelector' : 'msMatchesSelector'; + browser.pEventTypes = browser.supportsPointerEvent ? _domObjects.default.PointerEvent === window.MSPointerEvent ? { + up: 'MSPointerUp', + down: 'MSPointerDown', + over: 'mouseover', + out: 'mouseout', + move: 'MSPointerMove', + cancel: 'MSPointerCancel' + } : { + up: 'pointerup', + down: 'pointerdown', + over: 'pointerover', + out: 'pointerout', + move: 'pointermove', + cancel: 'pointercancel' + } : null; + + // because Webkit and Opera still use 'mousewheel' event type + browser.wheelEvent = _domObjects.default.document && 'onmousewheel' in _domObjects.default.document ? 'mousewheel' : 'wheel'; +} +var _default = exports.default = browser; +//# sourceMappingURL=browser.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/browser.js.map b/packages/@interactjs/utils/browser.js.map new file mode 100644 index 000000000..b89106de8 --- /dev/null +++ b/packages/@interactjs/utils/browser.js.map @@ -0,0 +1,55 @@ +{ + "version": 3, + "names": [ + "_domObjects", + "_interopRequireDefault", + "require", + "_is", + "obj", + "__esModule", + "default", + "browser", + "init", + "supportsTouch", + "supportsPointerEvent", + "isIOS7", + "isIOS", + "isIe9", + "isOperaMobile", + "prefixedMatchesSelector", + "pEventTypes", + "wheelEvent", + "window", + "Element", + "domObjects", + "navigator", + "is", + "func", + "DocumentTouch", + "document", + "pointerEnabled", + "PointerEvent", + "test", + "platform", + "appVersion", + "userAgent", + "appName", + "prototype", + "MSPointerEvent", + "up", + "down", + "over", + "out", + "move", + "cancel", + "_default", + "exports" + ], + "sources": [ + "browser.ts" + ], + "sourcesContent": [ + "import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as 'matches',\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init(window: any) {\n const Element = domObjects.Element\n const navigator: Partial = window.navigator || {}\n\n // Does the browser support touch input?\n browser.supportsTouch =\n 'ontouchstart' in window ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n browser.supportsPointerEvent = (navigator as any).pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile =\n navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = (\n 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n ) as 'matches'\n\n browser.pEventTypes = browser.supportsPointerEvent\n ? domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n }\n : null\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n" + ], + "mappings": ";;;;;;AAAA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,GAAA,GAAAF,sBAAA,CAAAC,OAAA;AAAqB,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAErB,MAAMG,OAAO,GAAG;EACdC,IAAI;EACJC,aAAa,EAAE,IAAe;EAC9BC,oBAAoB,EAAE,IAAe;EACrCC,MAAM,EAAE,IAAe;EACvBC,KAAK,EAAE,IAAe;EACtBC,KAAK,EAAE,IAAe;EACtBC,aAAa,EAAE,IAAe;EAC9BC,uBAAuB,EAAE,IAAiB;EAC1CC,WAAW,EAAE,IAOZ;EACDC,UAAU,EAAE;AACd,CAAC;AAED,SAAST,IAAIA,CAACU,MAAW,EAAE;EACzB,MAAMC,OAAO,GAAGC,mBAAU,CAACD,OAAO;EAClC,MAAME,SAA6B,GAAGH,MAAM,CAACG,SAAS,IAAI,CAAC,CAAC;;EAE5D;EACAd,OAAO,CAACE,aAAa,GACnB,cAAc,IAAIS,MAAM,IACvBI,WAAE,CAACC,IAAI,CAACL,MAAM,CAACM,aAAa,CAAC,IAAIJ,mBAAU,CAACK,QAAQ,YAAYP,MAAM,CAACM,aAAc;;EAExF;EACA;EACAjB,OAAO,CAACG,oBAAoB,GAAIW,SAAS,CAASK,cAAc,KAAK,KAAK,IAAI,CAAC,CAACN,mBAAU,CAACO,YAAY;EAEvGpB,OAAO,CAACK,KAAK,GAAG,gBAAgB,CAACgB,IAAI,CAACP,SAAS,CAACQ,QAAQ,CAAC;;EAEzD;EACAtB,OAAO,CAACI,MAAM,GAAG,gBAAgB,CAACiB,IAAI,CAACP,SAAS,CAACQ,QAAQ,CAAC,IAAI,WAAW,CAACD,IAAI,CAACP,SAAS,CAACS,UAAU,CAAC;EAEpGvB,OAAO,CAACM,KAAK,GAAG,QAAQ,CAACe,IAAI,CAACP,SAAS,CAACU,SAAS,CAAC;;EAElD;EACAxB,OAAO,CAACO,aAAa,GACnBO,SAAS,CAACW,OAAO,KAAK,OAAO,IAAIzB,OAAO,CAACE,aAAa,IAAI,QAAQ,CAACmB,IAAI,CAACP,SAAS,CAACU,SAAS,CAAC;;EAE9F;EACAxB,OAAO,CAACQ,uBAAuB,GAC7B,SAAS,IAAII,OAAO,CAACc,SAAS,GAC1B,SAAS,GACT,uBAAuB,IAAId,OAAO,CAACc,SAAS,GAC1C,uBAAuB,GACvB,oBAAoB,IAAId,OAAO,CAACc,SAAS,GACvC,oBAAoB,GACpB,kBAAkB,IAAId,OAAO,CAACc,SAAS,GACrC,kBAAkB,GAClB,mBACE;EAEd1B,OAAO,CAACS,WAAW,GAAGT,OAAO,CAACG,oBAAoB,GAC9CU,mBAAU,CAACO,YAAY,KAAKT,MAAM,CAACgB,cAAc,GAC/C;IACEC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,eAAe;IACrBC,IAAI,EAAE,WAAW;IACjBC,GAAG,EAAE,UAAU;IACfC,IAAI,EAAE,eAAe;IACrBC,MAAM,EAAE;EACV,CAAC,GACD;IACEL,EAAE,EAAE,WAAW;IACfC,IAAI,EAAE,aAAa;IACnBC,IAAI,EAAE,aAAa;IACnBC,GAAG,EAAE,YAAY;IACjBC,IAAI,EAAE,aAAa;IACnBC,MAAM,EAAE;EACV,CAAC,GACH,IAAI;;EAER;EACAjC,OAAO,CAACU,UAAU,GAAGG,mBAAU,CAACK,QAAQ,IAAI,cAAc,IAAIL,mBAAU,CAACK,QAAQ,GAAG,YAAY,GAAG,OAAO;AAC5G;AAAC,IAAAgB,QAAA,GAAAC,OAAA,CAAApC,OAAA,GAEcC,OAAO" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/browser.prod.js b/packages/@interactjs/utils/browser.prod.js new file mode 100644 index 000000000..0d8cf3e88 --- /dev/null +++ b/packages/@interactjs/utils/browser.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=o(require("./domObjects")),t=o(require("./is"));function o(e){return e&&e.__esModule?e:{default:e}}const n={init(o){const r=e.default.Element,s=o.navigator||{};n.supportsTouch="ontouchstart"in o||t.default.func(o.DocumentTouch)&&e.default.document instanceof o.DocumentTouch,n.supportsPointerEvent=!1!==s.pointerEnabled&&!!e.default.PointerEvent,n.isIOS=/iP(hone|od|ad)/.test(s.platform),n.isIOS7=/iP(hone|od|ad)/.test(s.platform)&&/OS 7[^\d]/.test(s.appVersion),n.isIe9=/MSIE 9/.test(s.userAgent),n.isOperaMobile="Opera"===s.appName&&n.supportsTouch&&/Presto/.test(s.userAgent),n.prefixedMatchesSelector="matches"in r.prototype?"matches":"webkitMatchesSelector"in r.prototype?"webkitMatchesSelector":"mozMatchesSelector"in r.prototype?"mozMatchesSelector":"oMatchesSelector"in r.prototype?"oMatchesSelector":"msMatchesSelector",n.pEventTypes=n.supportsPointerEvent?e.default.PointerEvent===o.MSPointerEvent?{up:"MSPointerUp",down:"MSPointerDown",over:"mouseover",out:"mouseout",move:"MSPointerMove",cancel:"MSPointerCancel"}:{up:"pointerup",down:"pointerdown",over:"pointerover",out:"pointerout",move:"pointermove",cancel:"pointercancel"}:null,n.wheelEvent=e.default.document&&"onmousewheel"in e.default.document?"mousewheel":"wheel"},supportsTouch:null,supportsPointerEvent:null,isIOS7:null,isIOS:null,isIe9:null,isOperaMobile:null,prefixedMatchesSelector:null,pEventTypes:null,wheelEvent:null};exports.default=n; +//# sourceMappingURL=browser.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/browser.prod.js.map b/packages/@interactjs/utils/browser.prod.js.map new file mode 100644 index 000000000..d35336864 --- /dev/null +++ b/packages/@interactjs/utils/browser.prod.js.map @@ -0,0 +1,54 @@ +{ + "version": 3, + "names": [ + "_domObjects", + "_interopRequireDefault", + "require", + "_is", + "obj", + "__esModule", + "default", + "browser", + "init", + "window", + "Element", + "domObjects", + "navigator", + "supportsTouch", + "is", + "func", + "DocumentTouch", + "document", + "supportsPointerEvent", + "pointerEnabled", + "PointerEvent", + "isIOS", + "test", + "platform", + "isIOS7", + "appVersion", + "isIe9", + "userAgent", + "isOperaMobile", + "appName", + "prefixedMatchesSelector", + "prototype", + "pEventTypes", + "MSPointerEvent", + "up", + "down", + "over", + "out", + "move", + "cancel", + "wheelEvent", + "exports" + ], + "sources": [ + "browser.ts" + ], + "sourcesContent": [ + "import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as 'matches',\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init(window: any) {\n const Element = domObjects.Element\n const navigator: Partial = window.navigator || {}\n\n // Does the browser support touch input?\n browser.supportsTouch =\n 'ontouchstart' in window ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n browser.supportsPointerEvent = (navigator as any).pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile =\n navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = (\n 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n ) as 'matches'\n\n browser.pEventTypes = browser.supportsPointerEvent\n ? domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n }\n : null\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n" + ], + "mappings": "8EAAA,IAAAA,EAAAC,EAAAC,QAAA,iBACAC,EAAAF,EAAAC,QAAA,SAAqB,SAAAD,EAAAG,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAErB,MAAMG,EAAU,CACdC,KAmBYC,GACZ,MAAMC,EAAUC,UAAWD,QACrBE,EAAgCH,EAAOG,WAAa,CAAC,EAG3DL,EAAQM,cACN,iBAAkBJ,GACjBK,UAAGC,KAAKN,EAAOO,gBAAkBL,UAAWM,oBAAoBR,EAAOO,cAI1ET,EAAQW,sBAA6D,IAArCN,EAAkBO,kBAA8BR,UAAWS,aAE3Fb,EAAQc,MAAQ,iBAAiBC,KAAKV,EAAUW,UAGhDhB,EAAQiB,OAAS,iBAAiBF,KAAKV,EAAUW,WAAa,YAAYD,KAAKV,EAAUa,YAEzFlB,EAAQmB,MAAQ,SAASJ,KAAKV,EAAUe,WAGxCpB,EAAQqB,cACgB,UAAtBhB,EAAUiB,SAAuBtB,EAAQM,eAAiB,SAASS,KAAKV,EAAUe,WAGpFpB,EAAQuB,wBACN,YAAapB,EAAQqB,UACjB,UACA,0BAA2BrB,EAAQqB,UACjC,wBACA,uBAAwBrB,EAAQqB,UAC9B,qBACA,qBAAsBrB,EAAQqB,UAC5B,mBACA,oBAGZxB,EAAQyB,YAAczB,EAAQW,qBAC1BP,UAAWS,eAAiBX,EAAOwB,eACjC,CACEC,GAAI,cACJC,KAAM,gBACNC,KAAM,YACNC,IAAK,WACLC,KAAM,gBACNC,OAAQ,mBAEV,CACEL,GAAI,YACJC,KAAM,cACNC,KAAM,cACNC,IAAK,aACLC,KAAM,cACNC,OAAQ,iBAEZ,KAGJhC,EAAQiC,WAAa7B,UAAWM,UAAY,iBAAkBN,UAAWM,SAAW,aAAe,OACrG,EA7EEJ,cAAe,KACfK,qBAAsB,KACtBM,OAAQ,KACRH,MAAO,KACPK,MAAO,KACPE,cAAe,KACfE,wBAAyB,KACzBE,YAAa,KAQbQ,WAAY,MA8DbC,QAAAnC,QAEcC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/center.d.ts b/packages/@interactjs/utils/center.d.ts new file mode 100644 index 000000000..6fa05bbb6 --- /dev/null +++ b/packages/@interactjs/utils/center.d.ts @@ -0,0 +1,6 @@ +import type { Rect } from '@interactjs/core/types'; +declare const _default: (rect: Rect) => { + x: number; + y: number; +}; +export default _default; diff --git a/packages/@interactjs/utils/center.js b/packages/@interactjs/utils/center.js new file mode 100644 index 000000000..564134b59 --- /dev/null +++ b/packages/@interactjs/utils/center.js @@ -0,0 +1,12 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = rect => ({ + x: rect.left + (rect.right - rect.left) / 2, + y: rect.top + (rect.bottom - rect.top) / 2 +}); +exports.default = _default; +//# sourceMappingURL=center.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/center.js.map b/packages/@interactjs/utils/center.js.map new file mode 100644 index 000000000..f5f7dee6a --- /dev/null +++ b/packages/@interactjs/utils/center.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "rect", + "x", + "left", + "right", + "y", + "top", + "bottom", + "exports", + "default", + "_default" + ], + "sources": [ + "center.ts" + ], + "sourcesContent": [ + "import type { Rect } from '@interactjs/core/types'\n\nexport default (rect: Rect) => ({\n x: rect.left + (rect.right - rect.left) / 2,\n y: rect.top + (rect.bottom - rect.top) / 2,\n})\n" + ], + "mappings": ";;;;;;eAEgBA,IAAU,KAAM;EAC9BC,CAAC,EAAED,IAAI,CAACE,IAAI,GAAG,CAACF,IAAI,CAACG,KAAK,GAAGH,IAAI,CAACE,IAAI,IAAI,CAAC;EAC3CE,CAAC,EAAEJ,IAAI,CAACK,GAAG,GAAG,CAACL,IAAI,CAACM,MAAM,GAAGN,IAAI,CAACK,GAAG,IAAI;AAC3C,CAAC,CAAC;AAAAE,OAAA,CAAAC,OAAA,GAAAC,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/center.prod.js b/packages/@interactjs/utils/center.prod.js new file mode 100644 index 000000000..d1def5132 --- /dev/null +++ b/packages/@interactjs/utils/center.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default=e=>({x:e.left+(e.right-e.left)/2,y:e.top+(e.bottom-e.top)/2}); +//# sourceMappingURL=center.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/center.prod.js.map b/packages/@interactjs/utils/center.prod.js.map new file mode 100644 index 000000000..b3b45ddf3 --- /dev/null +++ b/packages/@interactjs/utils/center.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "exports", + "default", + "rect", + "x", + "left", + "right", + "y", + "top", + "bottom" + ], + "sources": [ + "center.ts" + ], + "sourcesContent": [ + "import type { Rect } from '@interactjs/core/types'\n\nexport default (rect: Rect) => ({\n x: rect.left + (rect.right - rect.left) / 2,\n y: rect.top + (rect.bottom - rect.top) / 2,\n})\n" + ], + "mappings": "8EAKEA,QAAAC,QAHcC,IAAU,CACxBC,EAAGD,EAAKE,MAAQF,EAAKG,MAAQH,EAAKE,MAAQ,EAC1CE,EAAGJ,EAAKK,KAAOL,EAAKM,OAASN,EAAKK,KAAO" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/clone.d.ts b/packages/@interactjs/utils/clone.d.ts new file mode 100644 index 000000000..08b411b09 --- /dev/null +++ b/packages/@interactjs/utils/clone.d.ts @@ -0,0 +1 @@ +export default function clone(source: T): Partial; diff --git a/packages/@interactjs/utils/clone.js b/packages/@interactjs/utils/clone.js new file mode 100644 index 000000000..30d8aab17 --- /dev/null +++ b/packages/@interactjs/utils/clone.js @@ -0,0 +1,27 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = clone; +var arr = _interopRequireWildcard(require("./arr")); +var _is = _interopRequireDefault(require("./is")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +// tslint:disable-next-line ban-types +function clone(source) { + const dest = {}; + for (const prop in source) { + const value = source[prop]; + if (_is.default.plainObject(value)) { + dest[prop] = clone(value); + } else if (_is.default.array(value)) { + dest[prop] = arr.from(value); + } else { + dest[prop] = value; + } + } + return dest; +} +//# sourceMappingURL=clone.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/clone.js.map b/packages/@interactjs/utils/clone.js.map new file mode 100644 index 000000000..1b017f151 --- /dev/null +++ b/packages/@interactjs/utils/clone.js.map @@ -0,0 +1,48 @@ +{ + "version": 3, + "names": [ + "arr", + "_interopRequireWildcard", + "require", + "_is", + "_interopRequireDefault", + "obj", + "__esModule", + "default", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "clone", + "source", + "dest", + "prop", + "value", + "is", + "plainObject", + "array", + "from" + ], + "sources": [ + "clone.ts" + ], + "sourcesContent": [ + "import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone(source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n } else if (is.array(value)) {\n dest[prop] = arr.from(value) as typeof value\n } else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n" + ], + "mappings": ";;;;;;AAAA,IAAAA,GAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,GAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAqB,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAR,wBAAAQ,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAH,UAAA,SAAAG,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAF,OAAA,EAAAE,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAC,GAAA,CAAAJ,CAAA,UAAAG,CAAA,CAAAE,GAAA,CAAAL,CAAA,OAAAM,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAZ,CAAA,oBAAAY,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAY,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAX,CAAA,EAAAY,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAZ,CAAA,CAAAY,CAAA,YAAAN,CAAA,CAAAR,OAAA,GAAAE,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAc,GAAA,CAAAjB,CAAA,EAAAM,CAAA,GAAAA,CAAA;AAErB;AACe,SAASY,KAAKA,CAAmBC,MAAS,EAAc;EACrE,MAAMC,IAAI,GAAG,CAAC,CAAe;EAE7B,KAAK,MAAMC,IAAI,IAAIF,MAAM,EAAE;IACzB,MAAMG,KAAK,GAAGH,MAAM,CAACE,IAAI,CAAC;IAE1B,IAAIE,WAAE,CAACC,WAAW,CAACF,KAAK,CAAC,EAAE;MACzBF,IAAI,CAACC,IAAI,CAAC,GAAGH,KAAK,CAACI,KAAK,CAAQ;IAClC,CAAC,MAAM,IAAIC,WAAE,CAACE,KAAK,CAACH,KAAK,CAAC,EAAE;MAC1BF,IAAI,CAACC,IAAI,CAAC,GAAG9B,GAAG,CAACmC,IAAI,CAACJ,KAAK,CAAiB;IAC9C,CAAC,MAAM;MACLF,IAAI,CAACC,IAAI,CAAC,GAAGC,KAAK;IACpB;EACF;EAEA,OAAOF,IAAI;AACb" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/clone.prod.js b/packages/@interactjs/utils/clone.prod.js new file mode 100644 index 000000000..cd36d072b --- /dev/null +++ b/packages/@interactjs/utils/clone.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function e(n){const o={};for(const u in n){const a=n[u];t.default.plainObject(a)?o[u]=e(a):t.default.array(a)?o[u]=r.from(a):o[u]=a}return o};var e,r=((e,r)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=n(r);if(t&&t.has(e))return t.get(e);var o={__proto__:null},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var f=u?Object.getOwnPropertyDescriptor(e,a):null;f&&(f.get||f.set)?Object.defineProperty(o,a,f):o[a]=e[a]}return o.default=e,t&&t.set(e,o),o})(require("./arr")),t=(e=require("./is"))&&e.__esModule?e:{default:e};function n(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(n=e=>e?t:r)(e)} +//# sourceMappingURL=clone.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/clone.prod.js.map b/packages/@interactjs/utils/clone.prod.js.map new file mode 100644 index 000000000..95dbc3235 --- /dev/null +++ b/packages/@interactjs/utils/clone.prod.js.map @@ -0,0 +1,47 @@ +{ + "version": 3, + "names": [ + "clone", + "source", + "dest", + "prop", + "value", + "is", + "plainObject", + "array", + "arr", + "from", + "obj", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "require", + "_is", + "WeakMap" + ], + "sources": [ + "clone.ts" + ], + "sourcesContent": [ + "import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone(source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n } else if (is.array(value)) {\n dest[prop] = arr.from(value) as typeof value\n } else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n" + ], + "mappings": "uEAIe,SAASA,EAAwBC,GAC9C,MAAMC,EAAO,CAAC,EAEd,IAAK,MAAMC,KAAQF,EAAQ,CACzB,MAAMG,EAAQH,EAAOE,GAEjBE,UAAGC,YAAYF,GACjBF,EAAKC,GAAQH,EAAMI,GACVC,UAAGE,MAAMH,GAClBF,EAAKC,GAAQK,EAAIC,KAAKL,GAEtBF,EAAKC,GAAQC,CAEjB,CAEA,OAAOF,CACT,EApBA,IACqBQ,EADrBF,EACqB,EAAAG,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,QAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,IAAA,EADrBY,CAAAC,QAAA,UACAC,GAAqBvB,EAArBsB,QAAA,UAAqBtB,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAAA,SAAAM,EAAAL,GAAA,sBAAAuB,QAAA,gBAAAtB,EAAA,IAAAsB,QAAAnB,EAAA,IAAAmB,QAAA,OAAAlB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/displace.d.ts b/packages/@interactjs/utils/displace.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/utils/displace.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/utils/displace.js b/packages/@interactjs/utils/displace.js new file mode 100644 index 000000000..d7e1d7aeb --- /dev/null +++ b/packages/@interactjs/utils/displace.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = exports.default = {}; +//# sourceMappingURL=displace.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/displace.js.map b/packages/@interactjs/utils/displace.js.map new file mode 100644 index 000000000..facb9778b --- /dev/null +++ b/packages/@interactjs/utils/displace.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "displace.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": ";;;;;;iCAAe,CAAC,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/displace.prod.js b/packages/@interactjs/utils/displace.prod.js new file mode 100644 index 000000000..d7fe84e45 --- /dev/null +++ b/packages/@interactjs/utils/displace.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default={}; +//# sourceMappingURL=displace.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/displace.prod.js.map b/packages/@interactjs/utils/displace.prod.js.map new file mode 100644 index 000000000..b2f93309e --- /dev/null +++ b/packages/@interactjs/utils/displace.prod.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "displace.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": "8FAAe,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/displace.stub.d.ts b/packages/@interactjs/utils/displace.stub.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/utils/displace.stub.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/utils/domObjects.d.ts b/packages/@interactjs/utils/domObjects.d.ts new file mode 100644 index 000000000..8207499aa --- /dev/null +++ b/packages/@interactjs/utils/domObjects.d.ts @@ -0,0 +1,14 @@ +declare const domObjects: { + init: any; + document: Document; + DocumentFragment: typeof DocumentFragment; + SVGElement: typeof SVGElement; + SVGSVGElement: typeof SVGSVGElement; + SVGElementInstance: any; + Element: typeof Element; + HTMLElement: typeof HTMLElement; + Event: typeof Event; + Touch: typeof Touch; + PointerEvent: typeof PointerEvent; +}; +export default domObjects; diff --git a/packages/@interactjs/utils/domObjects.js b/packages/@interactjs/utils/domObjects.js new file mode 100644 index 000000000..225aa6cab --- /dev/null +++ b/packages/@interactjs/utils/domObjects.js @@ -0,0 +1,35 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +const domObjects = { + init, + document: null, + DocumentFragment: null, + SVGElement: null, + SVGSVGElement: null, + SVGElementInstance: null, + Element: null, + HTMLElement: null, + Event: null, + Touch: null, + PointerEvent: null +}; +function blank() {} +var _default = exports.default = domObjects; +function init(window) { + const win = window; + domObjects.document = win.document; + domObjects.DocumentFragment = win.DocumentFragment || blank; + domObjects.SVGElement = win.SVGElement || blank; + domObjects.SVGSVGElement = win.SVGSVGElement || blank; + domObjects.SVGElementInstance = win.SVGElementInstance || blank; + domObjects.Element = win.Element || blank; + domObjects.HTMLElement = win.HTMLElement || domObjects.Element; + domObjects.Event = win.Event; + domObjects.Touch = win.Touch || blank; + domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent; +} +//# sourceMappingURL=domObjects.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/domObjects.js.map b/packages/@interactjs/utils/domObjects.js.map new file mode 100644 index 000000000..ae11ade64 --- /dev/null +++ b/packages/@interactjs/utils/domObjects.js.map @@ -0,0 +1,31 @@ +{ + "version": 3, + "names": [ + "domObjects", + "init", + "document", + "DocumentFragment", + "SVGElement", + "SVGSVGElement", + "SVGElementInstance", + "Element", + "HTMLElement", + "Event", + "Touch", + "PointerEvent", + "blank", + "_default", + "exports", + "default", + "window", + "win", + "MSPointerEvent" + ], + "sources": [ + "domObjects.ts" + ], + "sourcesContent": [ + "const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} = {\n init,\n document: null,\n DocumentFragment: null,\n SVGElement: null,\n SVGSVGElement: null,\n SVGElementInstance: null,\n Element: null,\n HTMLElement: null,\n Event: null,\n Touch: null,\n PointerEvent: null,\n}\n\nfunction blank() {}\n\nexport default domObjects\n\nfunction init(window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n" + ], + "mappings": ";;;;;;AAAA,MAAMA,UAYL,GAAG;EACFC,IAAI;EACJC,QAAQ,EAAE,IAAI;EACdC,gBAAgB,EAAE,IAAI;EACtBC,UAAU,EAAE,IAAI;EAChBC,aAAa,EAAE,IAAI;EACnBC,kBAAkB,EAAE,IAAI;EACxBC,OAAO,EAAE,IAAI;EACbC,WAAW,EAAE,IAAI;EACjBC,KAAK,EAAE,IAAI;EACXC,KAAK,EAAE,IAAI;EACXC,YAAY,EAAE;AAChB,CAAC;AAED,SAASC,KAAKA,CAAA,EAAG,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEJf,UAAU;AAEzB,SAASC,IAAIA,CAACe,MAAc,EAAE;EAC5B,MAAMC,GAAG,GAAGD,MAAa;EAEzBhB,UAAU,CAACE,QAAQ,GAAGe,GAAG,CAACf,QAAQ;EAClCF,UAAU,CAACG,gBAAgB,GAAGc,GAAG,CAACd,gBAAgB,IAAIS,KAAK;EAC3DZ,UAAU,CAACI,UAAU,GAAGa,GAAG,CAACb,UAAU,IAAIQ,KAAK;EAC/CZ,UAAU,CAACK,aAAa,GAAGY,GAAG,CAACZ,aAAa,IAAIO,KAAK;EACrDZ,UAAU,CAACM,kBAAkB,GAAGW,GAAG,CAACX,kBAAkB,IAAIM,KAAK;EAC/DZ,UAAU,CAACO,OAAO,GAAGU,GAAG,CAACV,OAAO,IAAIK,KAAK;EACzCZ,UAAU,CAACQ,WAAW,GAAGS,GAAG,CAACT,WAAW,IAAIR,UAAU,CAACO,OAAO;EAE9DP,UAAU,CAACS,KAAK,GAAGQ,GAAG,CAACR,KAAK;EAC5BT,UAAU,CAACU,KAAK,GAAGO,GAAG,CAACP,KAAK,IAAIE,KAAK;EACrCZ,UAAU,CAACW,YAAY,GAAGM,GAAG,CAACN,YAAY,IAAIM,GAAG,CAACC,cAAc;AAClE" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/domObjects.prod.js b/packages/@interactjs/utils/domObjects.prod.js new file mode 100644 index 000000000..c65454c0e --- /dev/null +++ b/packages/@interactjs/utils/domObjects.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;const e={init(t){const l=t;e.document=l.document,e.DocumentFragment=l.DocumentFragment||n,e.SVGElement=l.SVGElement||n,e.SVGSVGElement=l.SVGSVGElement||n,e.SVGElementInstance=l.SVGElementInstance||n,e.Element=l.Element||n,e.HTMLElement=l.HTMLElement||e.Element,e.Event=l.Event,e.Touch=l.Touch||n,e.PointerEvent=l.PointerEvent||l.MSPointerEvent},document:null,DocumentFragment:null,SVGElement:null,SVGSVGElement:null,SVGElementInstance:null,Element:null,HTMLElement:null,Event:null,Touch:null,PointerEvent:null};function n(){}exports.default=e; +//# sourceMappingURL=domObjects.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/domObjects.prod.js.map b/packages/@interactjs/utils/domObjects.prod.js.map new file mode 100644 index 000000000..929df489b --- /dev/null +++ b/packages/@interactjs/utils/domObjects.prod.js.map @@ -0,0 +1,30 @@ +{ + "version": 3, + "names": [ + "domObjects", + "init", + "window", + "win", + "document", + "DocumentFragment", + "blank", + "SVGElement", + "SVGSVGElement", + "SVGElementInstance", + "Element", + "HTMLElement", + "Event", + "Touch", + "PointerEvent", + "MSPointerEvent", + "exports", + "default" + ], + "sources": [ + "domObjects.ts" + ], + "sourcesContent": [ + "const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} = {\n init,\n document: null,\n DocumentFragment: null,\n SVGElement: null,\n SVGSVGElement: null,\n SVGElementInstance: null,\n Element: null,\n HTMLElement: null,\n Event: null,\n Touch: null,\n PointerEvent: null,\n}\n\nfunction blank() {}\n\nexport default domObjects\n\nfunction init(window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n" + ], + "mappings": "8EAAA,MAAMA,EAYF,CACFC,KAiBYC,GACZ,MAAMC,EAAMD,EAEZF,EAAWI,SAAWD,EAAIC,SAC1BJ,EAAWK,iBAAmBF,EAAIE,kBAAoBC,EACtDN,EAAWO,WAAaJ,EAAII,YAAcD,EAC1CN,EAAWQ,cAAgBL,EAAIK,eAAiBF,EAChDN,EAAWS,mBAAqBN,EAAIM,oBAAsBH,EAC1DN,EAAWU,QAAUP,EAAIO,SAAWJ,EACpCN,EAAWW,YAAcR,EAAIQ,aAAeX,EAAWU,QAEvDV,EAAWY,MAAQT,EAAIS,MACvBZ,EAAWa,MAAQV,EAAIU,OAASP,EAChCN,EAAWc,aAAeX,EAAIW,cAAgBX,EAAIY,cACpD,EA9BEX,SAAU,KACVC,iBAAkB,KAClBE,WAAY,KACZC,cAAe,KACfC,mBAAoB,KACpBC,QAAS,KACTC,YAAa,KACbC,MAAO,KACPC,MAAO,KACPC,aAAc,MAGhB,SAASR,IAAS,CAACU,QAAAC,QAEJjB" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/domUtils.d.ts b/packages/@interactjs/utils/domUtils.d.ts new file mode 100644 index 000000000..66760a9b0 --- /dev/null +++ b/packages/@interactjs/utils/domUtils.d.ts @@ -0,0 +1,16 @@ +import type { Rect, Target, Element } from '@interactjs/core/types'; +export declare function nodeContains(parent: Node, child: Node): boolean; +export declare function closest(element: Node, selector: string): HTMLElement | SVGElement; +export declare function parentNode(node: Node | Document): ParentNode; +export declare function matchesSelector(element: Element, selector: string): boolean; +export declare function indexOfDeepestElement(elements: Element[] | NodeListOf): number; +export declare function matchesUpTo(element: Element, selector: string, limit: Node): boolean; +export declare function getActualElement(element: Element): any; +export declare function getScrollXY(relevantWindow?: Window): { + x: number; + y: number; +}; +export declare function getElementClientRect(element: Element): Required; +export declare function getElementRect(element: Element): Required; +export declare function getPath(node: Node | Document): any[]; +export declare function trySelector(value: Target): boolean; diff --git a/packages/@interactjs/utils/domUtils.js b/packages/@interactjs/utils/domUtils.js new file mode 100644 index 000000000..599b3a7dd --- /dev/null +++ b/packages/@interactjs/utils/domUtils.js @@ -0,0 +1,219 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.closest = closest; +exports.getActualElement = getActualElement; +exports.getElementClientRect = getElementClientRect; +exports.getElementRect = getElementRect; +exports.getPath = getPath; +exports.getScrollXY = getScrollXY; +exports.indexOfDeepestElement = indexOfDeepestElement; +exports.matchesSelector = matchesSelector; +exports.matchesUpTo = matchesUpTo; +exports.nodeContains = nodeContains; +exports.parentNode = parentNode; +exports.trySelector = trySelector; +var _browser = _interopRequireDefault(require("./browser")); +var _domObjects = _interopRequireDefault(require("./domObjects")); +var _is = _interopRequireDefault(require("./is")); +var win = _interopRequireWildcard(require("./window")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function nodeContains(parent, child) { + if (parent.contains) { + return parent.contains(child); + } + while (child) { + if (child === parent) { + return true; + } + child = child.parentNode; + } + return false; +} +function closest(element, selector) { + while (_is.default.element(element)) { + if (matchesSelector(element, selector)) { + return element; + } + element = parentNode(element); + } + return null; +} +function parentNode(node) { + let parent = node.parentNode; + if (_is.default.docFrag(parent)) { + // skip past #shado-root fragments + // tslint:disable-next-line + while ((parent = parent.host) && _is.default.docFrag(parent)) { + continue; + } + return parent; + } + return parent; +} +function matchesSelector(element, selector) { + // remove /deep/ from selectors if shadowDOM polyfill is used + if (win.window !== win.realWindow) { + selector = selector.replace(/\/deep\//g, ' '); + } + return element[_browser.default.prefixedMatchesSelector](selector); +} +const getParent = el => el.parentNode || el.host; + +// Test for the element that's "above" all other qualifiers +function indexOfDeepestElement(elements) { + let deepestNodeParents = []; + let deepestNodeIndex; + for (let i = 0; i < elements.length; i++) { + const currentNode = elements[i]; + const deepestNode = elements[deepestNodeIndex]; + + // node may appear in elements array multiple times + if (!currentNode || i === deepestNodeIndex) { + continue; + } + if (!deepestNode) { + deepestNodeIndex = i; + continue; + } + const currentNodeParent = getParent(currentNode); + const deepestNodeParent = getParent(deepestNode); + + // check if the deepest or current are document.documentElement/rootElement + // - if the current node is, do nothing and continue + if (currentNodeParent === currentNode.ownerDocument) { + continue; + } + // - if deepest is, update with the current node and continue to next + else if (deepestNodeParent === currentNode.ownerDocument) { + deepestNodeIndex = i; + continue; + } + + // compare zIndex of siblings + if (currentNodeParent === deepestNodeParent) { + if (zIndexIsHigherThan(currentNode, deepestNode)) { + deepestNodeIndex = i; + } + continue; + } + + // populate the ancestry array for the latest deepest node + deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode); + let ancestryStart; + + // if the deepest node is an HTMLElement and the current node is a non root svg element + if (deepestNode instanceof _domObjects.default.HTMLElement && currentNode instanceof _domObjects.default.SVGElement && !(currentNode instanceof _domObjects.default.SVGSVGElement)) { + // TODO: is this check necessary? Was this for HTML elements embedded in SVG? + if (currentNode === deepestNodeParent) { + continue; + } + ancestryStart = currentNode.ownerSVGElement; + } else { + ancestryStart = currentNode; + } + const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument); + let commonIndex = 0; + + // get (position of closest common ancestor) + 1 + while (currentNodeParents[commonIndex] && currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]) { + commonIndex++; + } + const parents = [currentNodeParents[commonIndex - 1], currentNodeParents[commonIndex], deepestNodeParents[commonIndex]]; + if (parents[0]) { + let child = parents[0].lastChild; + while (child) { + if (child === parents[1]) { + deepestNodeIndex = i; + deepestNodeParents = currentNodeParents; + break; + } else if (child === parents[2]) { + break; + } + child = child.previousSibling; + } + } + } + return deepestNodeIndex; +} +function getNodeParents(node, limit) { + const parents = []; + let parent = node; + let parentParent; + while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) { + parents.unshift(parent); + parent = parentParent; + } + return parents; +} +function zIndexIsHigherThan(higherNode, lowerNode) { + const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0; + const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0; + return higherIndex >= lowerIndex; +} +function matchesUpTo(element, selector, limit) { + while (_is.default.element(element)) { + if (matchesSelector(element, selector)) { + return true; + } + element = parentNode(element); + if (element === limit) { + return matchesSelector(element, selector); + } + } + return false; +} +function getActualElement(element) { + return element.correspondingUseElement || element; +} +function getScrollXY(relevantWindow) { + relevantWindow = relevantWindow || win.window; + return { + x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft, + y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop + }; +} +function getElementClientRect(element) { + const clientRect = element instanceof _domObjects.default.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; + return clientRect && { + left: clientRect.left, + right: clientRect.right, + top: clientRect.top, + bottom: clientRect.bottom, + width: clientRect.width || clientRect.right - clientRect.left, + height: clientRect.height || clientRect.bottom - clientRect.top + }; +} +function getElementRect(element) { + const clientRect = getElementClientRect(element); + if (!_browser.default.isIOS7 && clientRect) { + const scroll = getScrollXY(win.getWindow(element)); + clientRect.left += scroll.x; + clientRect.right += scroll.x; + clientRect.top += scroll.y; + clientRect.bottom += scroll.y; + } + return clientRect; +} +function getPath(node) { + const path = []; + while (node) { + path.push(node); + node = parentNode(node); + } + return path; +} +function trySelector(value) { + if (!_is.default.string(value)) { + return false; + } + + // an exception will be raised if it is invalid + _domObjects.default.document.querySelector(value); + return true; +} +//# sourceMappingURL=domUtils.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/domUtils.js.map b/packages/@interactjs/utils/domUtils.js.map new file mode 100644 index 000000000..06adcbe1f --- /dev/null +++ b/packages/@interactjs/utils/domUtils.js.map @@ -0,0 +1,128 @@ +{ + "version": 3, + "names": [ + "_browser", + "_interopRequireDefault", + "require", + "_domObjects", + "_is", + "win", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "nodeContains", + "parent", + "child", + "contains", + "parentNode", + "closest", + "element", + "selector", + "is", + "matchesSelector", + "node", + "docFrag", + "host", + "window", + "realWindow", + "replace", + "browser", + "prefixedMatchesSelector", + "getParent", + "el", + "indexOfDeepestElement", + "elements", + "deepestNodeParents", + "deepestNodeIndex", + "length", + "currentNode", + "deepestNode", + "currentNodeParent", + "deepestNodeParent", + "ownerDocument", + "zIndexIsHigherThan", + "getNodeParents", + "ancestryStart", + "domObjects", + "HTMLElement", + "SVGElement", + "SVGSVGElement", + "ownerSVGElement", + "currentNodeParents", + "commonIndex", + "parents", + "lastChild", + "previousSibling", + "limit", + "parentParent", + "unshift", + "higherNode", + "lowerNode", + "higherIndex", + "parseInt", + "getWindow", + "getComputedStyle", + "zIndex", + "lowerIndex", + "matchesUpTo", + "getActualElement", + "correspondingUseElement", + "getScrollXY", + "relevantWindow", + "x", + "scrollX", + "document", + "documentElement", + "scrollLeft", + "y", + "scrollY", + "scrollTop", + "getElementClientRect", + "clientRect", + "getBoundingClientRect", + "getClientRects", + "left", + "right", + "top", + "bottom", + "width", + "height", + "getElementRect", + "isIOS7", + "scroll", + "getPath", + "path", + "push", + "trySelector", + "value", + "string", + "querySelector" + ], + "sources": [ + "domUtils.ts" + ], + "sourcesContent": [ + "import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains(parent: Node, child: Node) {\n if (parent.contains) {\n return parent.contains(child as Node)\n }\n\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest(element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return element\n }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode(node: Node | Document) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector(element: Element, selector: string) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement(elements: Element[] | NodeListOf) {\n let deepestNodeParents: Node[] = []\n let deepestNodeIndex: number\n\n for (let i = 0; i < elements.length; i++) {\n const currentNode = elements[i]\n const deepestNode: Node = elements[deepestNodeIndex]\n\n // node may appear in elements array multiple times\n if (!currentNode || i === deepestNodeIndex) {\n continue\n }\n\n if (!deepestNode) {\n deepestNodeIndex = i\n continue\n }\n\n const currentNodeParent = getParent(currentNode)\n const deepestNodeParent = getParent(deepestNode)\n\n // check if the deepest or current are document.documentElement/rootElement\n // - if the current node is, do nothing and continue\n if (currentNodeParent === currentNode.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current node and continue to next\n else if (deepestNodeParent === currentNode.ownerDocument) {\n deepestNodeIndex = i\n continue\n }\n\n // compare zIndex of siblings\n if (currentNodeParent === deepestNodeParent) {\n if (zIndexIsHigherThan(currentNode, deepestNode)) {\n deepestNodeIndex = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest node\n deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n let ancestryStart: Node\n\n // if the deepest node is an HTMLElement and the current node is a non root svg element\n if (\n deepestNode instanceof domObjects.HTMLElement &&\n currentNode instanceof domObjects.SVGElement &&\n !(currentNode instanceof domObjects.SVGSVGElement)\n ) {\n // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n if (currentNode === deepestNodeParent) {\n continue\n }\n\n ancestryStart = currentNode.ownerSVGElement\n } else {\n ancestryStart = currentNode\n }\n\n const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n let commonIndex = 0\n\n // get (position of closest common ancestor) + 1\n while (\n currentNodeParents[commonIndex] &&\n currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n ) {\n commonIndex++\n }\n\n const parents = [\n currentNodeParents[commonIndex - 1],\n currentNodeParents[commonIndex],\n deepestNodeParents[commonIndex],\n ]\n\n if (parents[0]) {\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestNodeIndex = i\n deepestNodeParents = currentNodeParents\n\n break\n } else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n }\n\n return deepestNodeIndex\n}\n\nfunction getNodeParents(node: Node, limit?: Node) {\n const parents: Node[] = []\n let parent: Node = node\n let parentParent: Node\n\n while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n parents.unshift(parent)\n parent = parentParent\n }\n\n return parents\n}\n\nfunction zIndexIsHigherThan(higherNode: Node, lowerNode: Node) {\n const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo(element: Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement(element: Element) {\n return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY(relevantWindow?: Window) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect(element: Element): Required {\n const clientRect =\n element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n return (\n clientRect && {\n left: clientRect.left,\n right: clientRect.right,\n top: clientRect.top,\n bottom: clientRect.bottom,\n width: clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n )\n}\n\nexport function getElementRect(element: Element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath(node: Node | Document) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector(value: Target) {\n if (!is.string(value)) {\n return false\n }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n" + ], + "mappings": ";;;;;;;;;;;;;;;;;AAEA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,GAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,GAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAA+B,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAf,uBAAA2B,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AAExB,SAASC,YAAYA,CAACC,MAAY,EAAEC,KAAW,EAAE;EACtD,IAAID,MAAM,CAACE,QAAQ,EAAE;IACnB,OAAOF,MAAM,CAACE,QAAQ,CAACD,KAAa,CAAC;EACvC;EAEA,OAAOA,KAAK,EAAE;IACZ,IAAIA,KAAK,KAAKD,MAAM,EAAE;MACpB,OAAO,IAAI;IACb;IAEAC,KAAK,GAAIA,KAAK,CAAUE,UAAU;EACpC;EAEA,OAAO,KAAK;AACd;AAEO,SAASC,OAAOA,CAACC,OAAa,EAAEC,QAAgB,EAAE;EACvD,OAAOC,WAAE,CAACF,OAAO,CAACA,OAAO,CAAC,EAAE;IAC1B,IAAIG,eAAe,CAACH,OAAO,EAAEC,QAAQ,CAAC,EAAE;MACtC,OAAOD,OAAO;IAChB;IAEAA,OAAO,GAAGF,UAAU,CAACE,OAAO,CAAC;EAC/B;EAEA,OAAO,IAAI;AACb;AAEO,SAASF,UAAUA,CAACM,IAAqB,EAAE;EAChD,IAAIT,MAAM,GAAGS,IAAI,CAACN,UAAU;EAE5B,IAAII,WAAE,CAACG,OAAO,CAACV,MAAM,CAAC,EAAE;IACtB;IACA;IACA,OAAO,CAACA,MAAM,GAAIA,MAAM,CAASW,IAAI,KAAKJ,WAAE,CAACG,OAAO,CAACV,MAAM,CAAC,EAAE;MAC5D;IACF;IAEA,OAAOA,MAAM;EACf;EAEA,OAAOA,MAAM;AACf;AAEO,SAASQ,eAAeA,CAACH,OAAgB,EAAEC,QAAgB,EAAE;EAClE;EACA,IAAI/B,GAAG,CAACqC,MAAM,KAAKrC,GAAG,CAACsC,UAAU,EAAE;IACjCP,QAAQ,GAAGA,QAAQ,CAACQ,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;EAC/C;EAEA,OAAOT,OAAO,CAACU,gBAAO,CAACC,uBAAuB,CAAC,CAACV,QAAQ,CAAC;AAC3D;AAEA,MAAMW,SAAS,GAAIC,EAAgC,IAAKA,EAAE,CAACf,UAAU,IAAKe,EAAE,CAAgBP,IAAI;;AAEhG;AACO,SAASQ,qBAAqBA,CAACC,QAAoD,EAAE;EAC1F,IAAIC,kBAA0B,GAAG,EAAE;EACnC,IAAIC,gBAAwB;EAE5B,KAAK,IAAI1B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwB,QAAQ,CAACG,MAAM,EAAE3B,CAAC,EAAE,EAAE;IACxC,MAAM4B,WAAW,GAAGJ,QAAQ,CAACxB,CAAC,CAAC;IAC/B,MAAM6B,WAAiB,GAAGL,QAAQ,CAACE,gBAAgB,CAAC;;IAEpD;IACA,IAAI,CAACE,WAAW,IAAI5B,CAAC,KAAK0B,gBAAgB,EAAE;MAC1C;IACF;IAEA,IAAI,CAACG,WAAW,EAAE;MAChBH,gBAAgB,GAAG1B,CAAC;MACpB;IACF;IAEA,MAAM8B,iBAAiB,GAAGT,SAAS,CAACO,WAAW,CAAC;IAChD,MAAMG,iBAAiB,GAAGV,SAAS,CAACQ,WAAW,CAAC;;IAEhD;IACA;IACA,IAAIC,iBAAiB,KAAKF,WAAW,CAACI,aAAa,EAAE;MACnD;IACF;IACA;IAAA,KACK,IAAID,iBAAiB,KAAKH,WAAW,CAACI,aAAa,EAAE;MACxDN,gBAAgB,GAAG1B,CAAC;MACpB;IACF;;IAEA;IACA,IAAI8B,iBAAiB,KAAKC,iBAAiB,EAAE;MAC3C,IAAIE,kBAAkB,CAACL,WAAW,EAAEC,WAAW,CAAC,EAAE;QAChDH,gBAAgB,GAAG1B,CAAC;MACtB;MAEA;IACF;;IAEA;IACAyB,kBAAkB,GAAGA,kBAAkB,CAACE,MAAM,GAAGF,kBAAkB,GAAGS,cAAc,CAACL,WAAW,CAAC;IAEjG,IAAIM,aAAmB;;IAEvB;IACA,IACEN,WAAW,YAAYO,mBAAU,CAACC,WAAW,IAC7CT,WAAW,YAAYQ,mBAAU,CAACE,UAAU,IAC5C,EAAEV,WAAW,YAAYQ,mBAAU,CAACG,aAAa,CAAC,EAClD;MACA;MACA,IAAIX,WAAW,KAAKG,iBAAiB,EAAE;QACrC;MACF;MAEAI,aAAa,GAAGP,WAAW,CAACY,eAAe;IAC7C,CAAC,MAAM;MACLL,aAAa,GAAGP,WAAW;IAC7B;IAEA,MAAMa,kBAAkB,GAAGP,cAAc,CAACC,aAAa,EAAEN,WAAW,CAACG,aAAa,CAAC;IACnF,IAAIU,WAAW,GAAG,CAAC;;IAEnB;IACA,OACED,kBAAkB,CAACC,WAAW,CAAC,IAC/BD,kBAAkB,CAACC,WAAW,CAAC,KAAKjB,kBAAkB,CAACiB,WAAW,CAAC,EACnE;MACAA,WAAW,EAAE;IACf;IAEA,MAAMC,OAAO,GAAG,CACdF,kBAAkB,CAACC,WAAW,GAAG,CAAC,CAAC,EACnCD,kBAAkB,CAACC,WAAW,CAAC,EAC/BjB,kBAAkB,CAACiB,WAAW,CAAC,CAChC;IAED,IAAIC,OAAO,CAAC,CAAC,CAAC,EAAE;MACd,IAAItC,KAAK,GAAGsC,OAAO,CAAC,CAAC,CAAC,CAACC,SAAS;MAEhC,OAAOvC,KAAK,EAAE;QACZ,IAAIA,KAAK,KAAKsC,OAAO,CAAC,CAAC,CAAC,EAAE;UACxBjB,gBAAgB,GAAG1B,CAAC;UACpByB,kBAAkB,GAAGgB,kBAAkB;UAEvC;QACF,CAAC,MAAM,IAAIpC,KAAK,KAAKsC,OAAO,CAAC,CAAC,CAAC,EAAE;UAC/B;QACF;QAEAtC,KAAK,GAAGA,KAAK,CAACwC,eAAe;MAC/B;IACF;EACF;EAEA,OAAOnB,gBAAgB;AACzB;AAEA,SAASQ,cAAcA,CAACrB,IAAU,EAAEiC,KAAY,EAAE;EAChD,MAAMH,OAAe,GAAG,EAAE;EAC1B,IAAIvC,MAAY,GAAGS,IAAI;EACvB,IAAIkC,YAAkB;EAEtB,OAAO,CAACA,YAAY,GAAG1B,SAAS,CAACjB,MAAM,CAAC,KAAKA,MAAM,KAAK0C,KAAK,IAAIC,YAAY,KAAK3C,MAAM,CAAC4B,aAAa,EAAE;IACtGW,OAAO,CAACK,OAAO,CAAC5C,MAAM,CAAC;IACvBA,MAAM,GAAG2C,YAAY;EACvB;EAEA,OAAOJ,OAAO;AAChB;AAEA,SAASV,kBAAkBA,CAACgB,UAAgB,EAAEC,SAAe,EAAE;EAC7D,MAAMC,WAAW,GAAGC,QAAQ,CAACzE,GAAG,CAAC0E,SAAS,CAACJ,UAAU,CAAC,CAACK,gBAAgB,CAACL,UAAU,CAAC,CAACM,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;EACpG,MAAMC,UAAU,GAAGJ,QAAQ,CAACzE,GAAG,CAAC0E,SAAS,CAACH,SAAS,CAAC,CAACI,gBAAgB,CAACJ,SAAS,CAAC,CAACK,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;EAEjG,OAAOJ,WAAW,IAAIK,UAAU;AAClC;AAEO,SAASC,WAAWA,CAAChD,OAAgB,EAAEC,QAAgB,EAAEoC,KAAW,EAAE;EAC3E,OAAOnC,WAAE,CAACF,OAAO,CAACA,OAAO,CAAC,EAAE;IAC1B,IAAIG,eAAe,CAACH,OAAO,EAAEC,QAAQ,CAAC,EAAE;MACtC,OAAO,IAAI;IACb;IAEAD,OAAO,GAAGF,UAAU,CAACE,OAAO,CAAY;IAExC,IAAIA,OAAO,KAAKqC,KAAK,EAAE;MACrB,OAAOlC,eAAe,CAACH,OAAO,EAAEC,QAAQ,CAAC;IAC3C;EACF;EAEA,OAAO,KAAK;AACd;AAEO,SAASgD,gBAAgBA,CAACjD,OAAgB,EAAE;EACjD,OAAQA,OAAO,CAASkD,uBAAuB,IAAIlD,OAAO;AAC5D;AAEO,SAASmD,WAAWA,CAACC,cAAuB,EAAE;EACnDA,cAAc,GAAGA,cAAc,IAAIlF,GAAG,CAACqC,MAAM;EAC7C,OAAO;IACL8C,CAAC,EAAED,cAAc,CAACE,OAAO,IAAIF,cAAc,CAACG,QAAQ,CAACC,eAAe,CAACC,UAAU;IAC/EC,CAAC,EAAEN,cAAc,CAACO,OAAO,IAAIP,cAAc,CAACG,QAAQ,CAACC,eAAe,CAACI;EACvE,CAAC;AACH;AAEO,SAASC,oBAAoBA,CAAC7D,OAAgB,EAAkB;EACrE,MAAM8D,UAAU,GACd9D,OAAO,YAAY2B,mBAAU,CAACE,UAAU,GAAG7B,OAAO,CAAC+D,qBAAqB,CAAC,CAAC,GAAG/D,OAAO,CAACgE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;EAE1G,OACEF,UAAU,IAAI;IACZG,IAAI,EAAEH,UAAU,CAACG,IAAI;IACrBC,KAAK,EAAEJ,UAAU,CAACI,KAAK;IACvBC,GAAG,EAAEL,UAAU,CAACK,GAAG;IACnBC,MAAM,EAAEN,UAAU,CAACM,MAAM;IACzBC,KAAK,EAAEP,UAAU,CAACO,KAAK,IAAIP,UAAU,CAACI,KAAK,GAAGJ,UAAU,CAACG,IAAI;IAC7DK,MAAM,EAAER,UAAU,CAACQ,MAAM,IAAIR,UAAU,CAACM,MAAM,GAAGN,UAAU,CAACK;EAC9D,CAAC;AAEL;AAEO,SAASI,cAAcA,CAACvE,OAAgB,EAAE;EAC/C,MAAM8D,UAAU,GAAGD,oBAAoB,CAAC7D,OAAO,CAAC;EAEhD,IAAI,CAACU,gBAAO,CAAC8D,MAAM,IAAIV,UAAU,EAAE;IACjC,MAAMW,MAAM,GAAGtB,WAAW,CAACjF,GAAG,CAAC0E,SAAS,CAAC5C,OAAO,CAAC,CAAC;IAElD8D,UAAU,CAACG,IAAI,IAAIQ,MAAM,CAACpB,CAAC;IAC3BS,UAAU,CAACI,KAAK,IAAIO,MAAM,CAACpB,CAAC;IAC5BS,UAAU,CAACK,GAAG,IAAIM,MAAM,CAACf,CAAC;IAC1BI,UAAU,CAACM,MAAM,IAAIK,MAAM,CAACf,CAAC;EAC/B;EAEA,OAAOI,UAAU;AACnB;AAEO,SAASY,OAAOA,CAACtE,IAAqB,EAAE;EAC7C,MAAMuE,IAAI,GAAG,EAAE;EAEf,OAAOvE,IAAI,EAAE;IACXuE,IAAI,CAACC,IAAI,CAACxE,IAAI,CAAC;IACfA,IAAI,GAAGN,UAAU,CAACM,IAAI,CAAC;EACzB;EAEA,OAAOuE,IAAI;AACb;AAEO,SAASE,WAAWA,CAACC,KAAa,EAAE;EACzC,IAAI,CAAC5E,WAAE,CAAC6E,MAAM,CAACD,KAAK,CAAC,EAAE;IACrB,OAAO,KAAK;EACd;;EAEA;EACAnD,mBAAU,CAAC4B,QAAQ,CAACyB,aAAa,CAACF,KAAK,CAAC;EACxC,OAAO,IAAI;AACb" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/domUtils.prod.js b/packages/@interactjs/utils/domUtils.prod.js new file mode 100644 index 000000000..d71171913 --- /dev/null +++ b/packages/@interactjs/utils/domUtils.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.closest=(e,t)=>{for(;n.default.element(e);){if(i(e,t))return e;e=u(e)}return null},exports.getActualElement=e=>e.correspondingUseElement||e,exports.getElementClientRect=a,exports.getElementRect=t=>{const n=a(t);if(!e.default.isIOS7&&n){const e=s(r.getWindow(t));n.left+=e.x,n.right+=e.x,n.top+=e.y,n.bottom+=e.y}return n},exports.getPath=e=>{const t=[];for(;e;)t.push(e),e=u(e);return t},exports.getScrollXY=s,exports.indexOfDeepestElement=e=>{let n,o=[];for(let i=0;i=(parseInt(r.getWindow(u).getComputedStyle(u).zIndex,10)||0)&&(n=i);continue}let m;if(o=o.length?o:c(a),a instanceof t.default.HTMLElement&&s instanceof t.default.SVGElement&&!(s instanceof t.default.SVGSVGElement)){if(s===p)continue;m=s.ownerSVGElement}else m=s;const g=c(m,a.ownerDocument);let h=0;for(;g[h]&&g[h]===o[h];)h++;const w=[g[h-1],g[h],o[h]];if(w[0]){let e=w[0].lastChild;for(;e;){if(e===w[1]){n=i,o=g;break}if(e===w[2])break;e=e.previousSibling}}}var l,u;return n},exports.matchesSelector=i,exports.matchesUpTo=(e,t,r)=>{for(;n.default.element(e);){if(i(e,t))return!0;if((e=u(e))===r)return i(e,t)}return!1},exports.nodeContains=(e,t)=>{if(e.contains)return e.contains(t);for(;t;){if(t===e)return!0;t=t.parentNode}return!1},exports.parentNode=u,exports.trySelector=e=>!!n.default.string(e)&&(t.default.document.querySelector(e),!0);var e=l(require("./browser")),t=l(require("./domObjects")),n=l(require("./is")),r=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=o(t);if(n&&n.has(e))return n.get(e);var r={__proto__:null},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var i=l?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(r,u,i):r[u]=e[u]}return r.default=e,n&&n.set(e,r),r})(require("./window"));function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(o=e=>e?n:t)(e)}function l(e){return e&&e.__esModule?e:{default:e}}function u(e){let t=e.parentNode;if(n.default.docFrag(t)){for(;(t=t.host)&&n.default.docFrag(t););return t}return t}function i(t,n){return r.window!==r.realWindow&&(n=n.replace(/\/deep\//g," ")),t[e.default.prefixedMatchesSelector](n)}const f=e=>e.parentNode||e.host;function c(e,t){const n=[];let r,o=e;for(;(r=f(o))&&o!==t&&r!==o.ownerDocument;)n.unshift(o),o=r;return n}function s(e){return{x:(e=e||r.window).scrollX||e.document.documentElement.scrollLeft,y:e.scrollY||e.document.documentElement.scrollTop}}function a(e){const n=e instanceof t.default.SVGElement?e.getBoundingClientRect():e.getClientRects()[0];return n&&{left:n.left,right:n.right,top:n.top,bottom:n.bottom,width:n.width||n.right-n.left,height:n.height||n.bottom-n.top}} +//# sourceMappingURL=domUtils.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/domUtils.prod.js.map b/packages/@interactjs/utils/domUtils.prod.js.map new file mode 100644 index 000000000..00dda3ad7 --- /dev/null +++ b/packages/@interactjs/utils/domUtils.prod.js.map @@ -0,0 +1,117 @@ +{ + "version": 3, + "names": [ + "element", + "selector", + "is", + "matchesSelector", + "parentNode", + "correspondingUseElement", + "clientRect", + "getElementClientRect", + "browser", + "isIOS7", + "scroll", + "getScrollXY", + "win", + "getWindow", + "left", + "x", + "right", + "top", + "y", + "bottom", + "node", + "path", + "push", + "elements", + "deepestNodeIndex", + "deepestNodeParents", + "i", + "length", + "currentNode", + "deepestNode", + "currentNodeParent", + "getParent", + "deepestNodeParent", + "ownerDocument", + "higherNode", + "lowerNode", + "parseInt", + "getComputedStyle", + "zIndex", + "ancestryStart", + "getNodeParents", + "domObjects", + "HTMLElement", + "SVGElement", + "SVGSVGElement", + "ownerSVGElement", + "currentNodeParents", + "commonIndex", + "parents", + "child", + "lastChild", + "previousSibling", + "limit", + "parent", + "contains", + "value", + "string", + "document", + "querySelector", + "_browser", + "_interopRequireDefault", + "require", + "_domObjects", + "_is", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "set", + "_interopRequireWildcard", + "WeakMap", + "obj", + "docFrag", + "host", + "window", + "realWindow", + "replace", + "prefixedMatchesSelector", + "el", + "parentParent", + "unshift", + "relevantWindow", + "scrollX", + "documentElement", + "scrollLeft", + "scrollY", + "scrollTop", + "getBoundingClientRect", + "getClientRects", + "width", + "height" + ], + "sources": [ + "domUtils.ts" + ], + "sourcesContent": [ + "import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains(parent: Node, child: Node) {\n if (parent.contains) {\n return parent.contains(child as Node)\n }\n\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest(element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return element\n }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode(node: Node | Document) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector(element: Element, selector: string) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement(elements: Element[] | NodeListOf) {\n let deepestNodeParents: Node[] = []\n let deepestNodeIndex: number\n\n for (let i = 0; i < elements.length; i++) {\n const currentNode = elements[i]\n const deepestNode: Node = elements[deepestNodeIndex]\n\n // node may appear in elements array multiple times\n if (!currentNode || i === deepestNodeIndex) {\n continue\n }\n\n if (!deepestNode) {\n deepestNodeIndex = i\n continue\n }\n\n const currentNodeParent = getParent(currentNode)\n const deepestNodeParent = getParent(deepestNode)\n\n // check if the deepest or current are document.documentElement/rootElement\n // - if the current node is, do nothing and continue\n if (currentNodeParent === currentNode.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current node and continue to next\n else if (deepestNodeParent === currentNode.ownerDocument) {\n deepestNodeIndex = i\n continue\n }\n\n // compare zIndex of siblings\n if (currentNodeParent === deepestNodeParent) {\n if (zIndexIsHigherThan(currentNode, deepestNode)) {\n deepestNodeIndex = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest node\n deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n let ancestryStart: Node\n\n // if the deepest node is an HTMLElement and the current node is a non root svg element\n if (\n deepestNode instanceof domObjects.HTMLElement &&\n currentNode instanceof domObjects.SVGElement &&\n !(currentNode instanceof domObjects.SVGSVGElement)\n ) {\n // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n if (currentNode === deepestNodeParent) {\n continue\n }\n\n ancestryStart = currentNode.ownerSVGElement\n } else {\n ancestryStart = currentNode\n }\n\n const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n let commonIndex = 0\n\n // get (position of closest common ancestor) + 1\n while (\n currentNodeParents[commonIndex] &&\n currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n ) {\n commonIndex++\n }\n\n const parents = [\n currentNodeParents[commonIndex - 1],\n currentNodeParents[commonIndex],\n deepestNodeParents[commonIndex],\n ]\n\n if (parents[0]) {\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestNodeIndex = i\n deepestNodeParents = currentNodeParents\n\n break\n } else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n }\n\n return deepestNodeIndex\n}\n\nfunction getNodeParents(node: Node, limit?: Node) {\n const parents: Node[] = []\n let parent: Node = node\n let parentParent: Node\n\n while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n parents.unshift(parent)\n parent = parentParent\n }\n\n return parents\n}\n\nfunction zIndexIsHigherThan(higherNode: Node, lowerNode: Node) {\n const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo(element: Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement(element: Element) {\n return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY(relevantWindow?: Window) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect(element: Element): Required {\n const clientRect =\n element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n return (\n clientRect && {\n left: clientRect.left,\n right: clientRect.right,\n top: clientRect.top,\n bottom: clientRect.bottom,\n width: clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n )\n}\n\nexport function getElementRect(element: Element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath(node: Node | Document) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector(value: Target) {\n if (!is.string(value)) {\n return false\n }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/exchange.d.ts b/packages/@interactjs/utils/exchange.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/utils/exchange.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/utils/exchange.js b/packages/@interactjs/utils/exchange.js new file mode 100644 index 000000000..50284318d --- /dev/null +++ b/packages/@interactjs/utils/exchange.js @@ -0,0 +1,8 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = exports.default = {}; +//# sourceMappingURL=exchange.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/exchange.js.map b/packages/@interactjs/utils/exchange.js.map new file mode 100644 index 000000000..2336f3617 --- /dev/null +++ b/packages/@interactjs/utils/exchange.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "exchange.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": ";;;;;;iCAAe,CAAC,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/exchange.prod.js b/packages/@interactjs/utils/exchange.prod.js new file mode 100644 index 000000000..6fcea6d75 --- /dev/null +++ b/packages/@interactjs/utils/exchange.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default={}; +//# sourceMappingURL=exchange.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/exchange.prod.js.map b/packages/@interactjs/utils/exchange.prod.js.map new file mode 100644 index 000000000..91fc0c48d --- /dev/null +++ b/packages/@interactjs/utils/exchange.prod.js.map @@ -0,0 +1,11 @@ +{ + "version": 3, + "names": [], + "sources": [ + "exchange.ts" + ], + "sourcesContent": [ + "export default {}\n" + ], + "mappings": "8FAAe,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/exchange.stub.d.ts b/packages/@interactjs/utils/exchange.stub.d.ts new file mode 100644 index 000000000..d87c48512 --- /dev/null +++ b/packages/@interactjs/utils/exchange.stub.d.ts @@ -0,0 +1,2 @@ +declare const _default: {}; +export default _default; diff --git a/packages/@interactjs/utils/extend.d.ts b/packages/@interactjs/utils/extend.d.ts new file mode 100644 index 000000000..3179be382 --- /dev/null +++ b/packages/@interactjs/utils/extend.d.ts @@ -0,0 +1 @@ +export default function extend(dest: U & Partial, source: T): T & U; diff --git a/packages/@interactjs/utils/extend.js b/packages/@interactjs/utils/extend.js new file mode 100644 index 000000000..20004dfb9 --- /dev/null +++ b/packages/@interactjs/utils/extend.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = extend; +function extend(dest, source) { + for (const prop in source) { + ; + dest[prop] = source[prop]; + } + const ret = dest; + return ret; +} +//# sourceMappingURL=extend.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/extend.js.map b/packages/@interactjs/utils/extend.js.map new file mode 100644 index 000000000..91e355fa9 --- /dev/null +++ b/packages/@interactjs/utils/extend.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "extend", + "dest", + "source", + "prop", + "ret" + ], + "sources": [ + "extend.ts" + ], + "sourcesContent": [ + "export default function extend(dest: U & Partial, source: T): T & U {\n for (const prop in source) {\n ;(dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n" + ], + "mappings": ";;;;;;AAAe,SAASA,MAAMA,CAAsBC,IAAoB,EAAEC,MAAS,EAAS;EAC1F,KAAK,MAAMC,IAAI,IAAID,MAAM,EAAE;IACzB;IAAED,IAAI,CAAkBE,IAAI,CAAC,GAAGD,MAAM,CAACC,IAAI,CAAC;EAC9C;EAEA,MAAMC,GAAG,GAAGH,IAAa;EAEzB,OAAOG,GAAG;AACZ" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/extend.prod.js b/packages/@interactjs/utils/extend.prod.js new file mode 100644 index 000000000..548461822 --- /dev/null +++ b/packages/@interactjs/utils/extend.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=(e,r)=>{for(const t in r)e[t]=r[t];return e}; +//# sourceMappingURL=extend.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/extend.prod.js.map b/packages/@interactjs/utils/extend.prod.js.map new file mode 100644 index 000000000..b89089b55 --- /dev/null +++ b/packages/@interactjs/utils/extend.prod.js.map @@ -0,0 +1,15 @@ +{ + "version": 3, + "names": [ + "dest", + "source", + "prop" + ], + "sources": [ + "extend.ts" + ], + "sourcesContent": [ + "export default function extend(dest: U & Partial, source: T): T & U {\n for (const prop in source) {\n ;(dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n" + ], + "mappings": "uEAAe,CAAqCA,EAAsBC,KACxE,IAAK,MAAMC,KAAQD,EACfD,EAAsBE,GAAQD,EAAOC,GAKzC,OAFYF,CAGd" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/getOriginXY.d.ts b/packages/@interactjs/utils/getOriginXY.d.ts new file mode 100644 index 000000000..04dca245a --- /dev/null +++ b/packages/@interactjs/utils/getOriginXY.d.ts @@ -0,0 +1,8 @@ +import type { PerActionDefaults } from '@interactjs/core/options'; +import type { ActionName, HasGetRect } from '@interactjs/core/types'; +export default function getOriginXY(target: HasGetRect & { + options: PerActionDefaults; +}, element: Node, actionName?: ActionName): { + x: number; + y: number; +}; diff --git a/packages/@interactjs/utils/getOriginXY.js b/packages/@interactjs/utils/getOriginXY.js new file mode 100644 index 000000000..0f8710c0a --- /dev/null +++ b/packages/@interactjs/utils/getOriginXY.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getOriginXY; +var _rect = require("./rect"); +function getOriginXY(target, element, actionName) { + const actionOptions = actionName && target.options[actionName]; + const actionOrigin = actionOptions && actionOptions.origin; + const origin = actionOrigin || target.options.origin; + const originRect = (0, _rect.resolveRectLike)(origin, target, element, [target && element]); + return (0, _rect.rectToXY)(originRect) || { + x: 0, + y: 0 + }; +} +//# sourceMappingURL=getOriginXY.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/getOriginXY.js.map b/packages/@interactjs/utils/getOriginXY.js.map new file mode 100644 index 000000000..145b29040 --- /dev/null +++ b/packages/@interactjs/utils/getOriginXY.js.map @@ -0,0 +1,27 @@ +{ + "version": 3, + "names": [ + "_rect", + "require", + "getOriginXY", + "target", + "element", + "actionName", + "actionOptions", + "options", + "actionOrigin", + "origin", + "originRect", + "resolveRectLike", + "rectToXY", + "x", + "y" + ], + "sources": [ + "getOriginXY.ts" + ], + "sourcesContent": [ + "import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function getOriginXY(\n target: HasGetRect & { options: PerActionDefaults },\n element: Node,\n actionName?: ActionName,\n) {\n const actionOptions = actionName && (target.options as any)[actionName]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n" + ], + "mappings": ";;;;;;AAGA,IAAAA,KAAA,GAAAC,OAAA;AAEe,SAASC,WAAWA,CACjCC,MAAmD,EACnDC,OAAa,EACbC,UAAuB,EACvB;EACA,MAAMC,aAAa,GAAGD,UAAU,IAAKF,MAAM,CAACI,OAAO,CAASF,UAAU,CAAC;EACvE,MAAMG,YAAY,GAAGF,aAAa,IAAIA,aAAa,CAACG,MAAM;EAC1D,MAAMA,MAAM,GAAGD,YAAY,IAAIL,MAAM,CAACI,OAAO,CAACE,MAAM;EAEpD,MAAMC,UAAU,GAAG,IAAAC,qBAAe,EAACF,MAAM,EAAEN,MAAM,EAAEC,OAAO,EAAE,CAACD,MAAM,IAAIC,OAAO,CAAC,CAAC;EAEhF,OAAO,IAAAQ,cAAQ,EAACF,UAAU,CAAC,IAAI;IAAEG,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC;AAC/C" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/getOriginXY.prod.js b/packages/@interactjs/utils/getOriginXY.prod.js new file mode 100644 index 000000000..ddfd97743 --- /dev/null +++ b/packages/@interactjs/utils/getOriginXY.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=(r,o,t)=>{const i=t&&r.options[t],n=i&&i.origin||r.options.origin,s=(0,e.resolveRectLike)(n,r,o,[r&&o]);return(0,e.rectToXY)(s)||{x:0,y:0}};var e=require("./rect"); +//# sourceMappingURL=getOriginXY.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/getOriginXY.prod.js.map b/packages/@interactjs/utils/getOriginXY.prod.js.map new file mode 100644 index 000000000..d8eea20bd --- /dev/null +++ b/packages/@interactjs/utils/getOriginXY.prod.js.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "names": [ + "target", + "element", + "actionName", + "actionOptions", + "options", + "origin", + "originRect", + "resolveRectLike", + "rectToXY", + "x", + "y", + "_rect", + "require" + ], + "sources": [ + "getOriginXY.ts" + ], + "sourcesContent": [ + "import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function getOriginXY(\n target: HasGetRect & { options: PerActionDefaults },\n element: Node,\n actionName?: ActionName,\n) {\n const actionOptions = actionName && (target.options as any)[actionName]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n" + ], + "mappings": "uEAKe,CACbA,EACAC,EACAC,KAEA,MAAMC,EAAgBD,GAAeF,EAAOI,QAAgBF,GAEtDG,EADeF,GAAiBA,EAAcE,QACrBL,EAAOI,QAAQC,OAExCC,GAAa,EAAAC,mBAAgBF,EAAQL,EAAQC,EAAS,CAACD,GAAUC,IAEvE,OAAO,EAAAO,YAASF,IAAe,CAAEG,EAAG,EAAGC,EAAG,EAC5C,EAdA,IAAAC,EAAAC,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/hypot.d.ts b/packages/@interactjs/utils/hypot.d.ts new file mode 100644 index 000000000..a9ae05c6f --- /dev/null +++ b/packages/@interactjs/utils/hypot.d.ts @@ -0,0 +1,2 @@ +declare const _default: (x: number, y: number) => number; +export default _default; diff --git a/packages/@interactjs/utils/hypot.js b/packages/@interactjs/utils/hypot.js new file mode 100644 index 000000000..00eacdf95 --- /dev/null +++ b/packages/@interactjs/utils/hypot.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = (x, y) => Math.sqrt(x * x + y * y); +exports.default = _default; +//# sourceMappingURL=hypot.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/hypot.js.map b/packages/@interactjs/utils/hypot.js.map new file mode 100644 index 000000000..7b4a280dd --- /dev/null +++ b/packages/@interactjs/utils/hypot.js.map @@ -0,0 +1,19 @@ +{ + "version": 3, + "names": [ + "_default", + "x", + "y", + "Math", + "sqrt", + "exports", + "default" + ], + "sources": [ + "hypot.ts" + ], + "sourcesContent": [ + "export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n" + ], + "mappings": ";;;;;;eAAeA,CAACC,CAAS,EAAEC,CAAS,KAAKC,IAAI,CAACC,IAAI,CAACH,CAAC,GAAGA,CAAC,GAAGC,CAAC,GAAGA,CAAC,CAAC;AAAAG,OAAA,CAAAC,OAAA,GAAAN,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/hypot.prod.js b/packages/@interactjs/utils/hypot.prod.js new file mode 100644 index 000000000..8d450112f --- /dev/null +++ b/packages/@interactjs/utils/hypot.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default=(e,t)=>Math.sqrt(e*e+t*t); +//# sourceMappingURL=hypot.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/hypot.prod.js.map b/packages/@interactjs/utils/hypot.prod.js.map new file mode 100644 index 000000000..52b259a69 --- /dev/null +++ b/packages/@interactjs/utils/hypot.prod.js.map @@ -0,0 +1,19 @@ +{ + "version": 3, + "names": [ + "exports", + "default", + "_default", + "x", + "y", + "Math", + "sqrt" + ], + "sources": [ + "hypot.ts" + ], + "sourcesContent": [ + "export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n" + ], + "mappings": "8EAAiEA,QAAAC,QAAlDC,CAACC,EAAWC,IAAcC,KAAKC,KAAKH,EAAIA,EAAIC,EAAIA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/is.d.ts b/packages/@interactjs/utils/is.d.ts new file mode 100644 index 000000000..cabe69373 --- /dev/null +++ b/packages/@interactjs/utils/is.d.ts @@ -0,0 +1,17 @@ +declare const _default: { + window: (thing: any) => thing is Window; + docFrag: (thing: any) => thing is DocumentFragment; + object: (thing: any) => thing is { + [index: string]: any; + }; + func: (thing: any) => thing is (...args: any[]) => any; + number: (thing: any) => thing is number; + bool: (thing: any) => thing is boolean; + string: (thing: any) => thing is string; + element: (thing: any) => thing is HTMLElement | SVGElement; + plainObject: (thing: any) => thing is { + [index: string]: any; + }; + array: (thing: any) => thing is T[]; +}; +export default _default; diff --git a/packages/@interactjs/utils/is.js b/packages/@interactjs/utils/is.js new file mode 100644 index 000000000..842516118 --- /dev/null +++ b/packages/@interactjs/utils/is.js @@ -0,0 +1,40 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _isWindow = _interopRequireDefault(require("./isWindow")); +var win = _interopRequireWildcard(require("./window")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const window = thing => thing === win.window || (0, _isWindow.default)(thing); +const docFrag = thing => object(thing) && thing.nodeType === 11; +const object = thing => !!thing && typeof thing === 'object'; +const func = thing => typeof thing === 'function'; +const number = thing => typeof thing === 'number'; +const bool = thing => typeof thing === 'boolean'; +const string = thing => typeof thing === 'string'; +const element = thing => { + if (!thing || typeof thing !== 'object') { + return false; + } + const _window = win.getWindow(thing) || win.window; + return /object|function/.test(typeof Element) ? thing instanceof Element || thing instanceof _window.Element : thing.nodeType === 1 && typeof thing.nodeName === 'string'; +}; +const plainObject = thing => object(thing) && !!thing.constructor && /function Object\b/.test(thing.constructor.toString()); +const array = thing => object(thing) && typeof thing.length !== 'undefined' && func(thing.splice); +var _default = exports.default = { + window, + docFrag, + object, + func, + number, + bool, + string, + element, + plainObject, + array +}; +//# sourceMappingURL=is.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/is.js.map b/packages/@interactjs/utils/is.js.map new file mode 100644 index 000000000..282e37ded --- /dev/null +++ b/packages/@interactjs/utils/is.js.map @@ -0,0 +1,63 @@ +{ + "version": 3, + "names": [ + "_isWindow", + "_interopRequireDefault", + "require", + "win", + "_interopRequireWildcard", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "window", + "thing", + "isWindow", + "docFrag", + "object", + "nodeType", + "func", + "number", + "bool", + "string", + "element", + "_window", + "getWindow", + "test", + "Element", + "nodeName", + "plainObject", + "constructor", + "toString", + "array", + "length", + "splice", + "_default", + "exports" + ], + "sources": [ + "is.ts" + ], + "sourcesContent": [ + "import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n if (!thing || typeof thing !== 'object') {\n return false\n }\n\n const _window = win.getWindow(thing) || win.window\n\n return /object|function/.test(typeof Element)\n ? thing instanceof Element || thing instanceof _window.Element\n : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = (thing: any): thing is T[] =>\n object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n window,\n docFrag,\n object,\n func,\n number,\n bool,\n string,\n element,\n plainObject,\n array,\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/is.prod.js b/packages/@interactjs/utils/is.prod.js new file mode 100644 index 000000000..616facc27 --- /dev/null +++ b/packages/@interactjs/utils/is.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e,t=(e=require("./isWindow"))&&e.__esModule?e:{default:e},o=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=n(t);if(o&&o.has(e))return o.get(e);var r={__proto__:null},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var u=f?Object.getOwnPropertyDescriptor(e,i):null;u&&(u.get||u.set)?Object.defineProperty(r,i,u):r[i]=e[i]}return r.default=e,o&&o.set(e,r),r})(require("./window"));function n(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(n=e=>e?o:t)(e)}const r=e=>!!e&&"object"==typeof e,f=e=>"function"==typeof e;exports.default={window:e=>e===o.window||(0,t.default)(e),docFrag:e=>r(e)&&11===e.nodeType,object:r,func:f,number:e=>"number"==typeof e,bool:e=>"boolean"==typeof e,string:e=>"string"==typeof e,element(e){if(!e||"object"!=typeof e)return!1;const t=o.getWindow(e)||o.window;return/object|function/.test(typeof Element)?e instanceof Element||e instanceof t.Element:1===e.nodeType&&"string"==typeof e.nodeName},plainObject:e=>r(e)&&!!e.constructor&&/function Object\b/.test(e.constructor.toString()),array:e=>r(e)&&void 0!==e.length&&f(e.splice)}; +//# sourceMappingURL=is.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/is.prod.js.map b/packages/@interactjs/utils/is.prod.js.map new file mode 100644 index 000000000..75be902cf --- /dev/null +++ b/packages/@interactjs/utils/is.prod.js.map @@ -0,0 +1,61 @@ +{ + "version": 3, + "names": [ + "obj", + "_isWindow", + "require", + "__esModule", + "default", + "win", + "e", + "r", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "WeakMap", + "object", + "thing", + "func", + "exports", + "window", + "isWindow", + "docFrag", + "nodeType", + "number", + "bool", + "string", + "element", + "_window", + "getWindow", + "test", + "Element", + "nodeName", + "plainObject", + "constructor", + "toString", + "array", + "length", + "splice" + ], + "sources": [ + "is.ts" + ], + "sourcesContent": [ + "import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n if (!thing || typeof thing !== 'object') {\n return false\n }\n\n const _window = win.getWindow(thing) || win.window\n\n return /object|function/.test(typeof Element)\n ? thing instanceof Element || thing instanceof _window.Element\n : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = (thing: any): thing is T[] =>\n object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n window,\n docFrag,\n object,\n func,\n number,\n bool,\n string,\n element,\n plainObject,\n array,\n}\n" + ], + "mappings": "8EAAA,IAC+BA,EAD/BC,GAC+BD,EAD/BE,QAAA,gBAC+BF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAA/BK,EAA+B,EAAAC,EAAAC,KAAA,GAAAD,KAAAH,WAAA,OAAAG,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAF,QAAAE,GAAA,IAAAE,EAAAC,EAAAF,GAAA,GAAAC,KAAAE,IAAAJ,GAAA,OAAAE,EAAAG,IAAAL,GAAA,IAAAM,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAZ,EAAA,eAAAY,GAAAH,OAAAI,UAAAC,eAAAC,KAAAf,EAAAY,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAX,EAAAY,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAZ,EAAAY,EAAA,QAAAN,EAAAR,QAAAE,EAAAE,KAAAe,IAAAjB,EAAAM,IAAA,EAA/BY,CAAAtB,QAAA,aAA+B,SAAAO,EAAAH,GAAA,sBAAAmB,QAAA,gBAAAlB,EAAA,IAAAkB,QAAAjB,EAAA,IAAAiB,QAAA,OAAAhB,EAAAH,KAAAE,EAAAD,GAAAD,EAAA,CAE/B,MAIMoB,EAAUC,KAAoDA,GAA0B,iBAAVA,EAE9EC,EAAQD,GAAkE,mBAAVA,EAwBME,QAAAzB,QAE7D,CACb0B,OAjCcH,GAAgCA,IAAUtB,EAAIyB,SAAU,EAAAC,WAASJ,GAkC/EK,QAhCeL,GAA0CD,EAAOC,IAA6B,KAAnBA,EAAMM,SAiChFP,SACAE,OACAM,OA7BcP,GAAiD,iBAAVA,EA8BrDQ,KA5BYR,GAAkD,kBAAVA,EA6BpDS,OA3BcT,GAAiD,iBAAVA,EA4BrDU,QA1BeV,GACf,IAAKA,GAA0B,iBAAVA,EACnB,OAAO,EAGT,MAAMW,EAAUjC,EAAIkC,UAAUZ,IAAUtB,EAAIyB,OAE5C,MAAO,kBAAkBU,YAAYC,SACjCd,aAAiBc,SAAWd,aAAiBW,EAAQG,QAClC,IAAnBd,EAAMM,UAA4C,iBAAnBN,EAAMe,QAAqB,EAkB9DC,YAfkChB,GAClCD,EAAOC,MAAYA,EAAMiB,aAAe,oBAAoBJ,KAAKb,EAAMiB,YAAYC,YAenFC,MAbgCnB,GAChCD,EAAOC,SAAkC,IAAjBA,EAAMoB,QAA0BnB,EAAKD,EAAMqB" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/isNonNativeEvent.d.ts b/packages/@interactjs/utils/isNonNativeEvent.d.ts new file mode 100644 index 000000000..0cebcf5e6 --- /dev/null +++ b/packages/@interactjs/utils/isNonNativeEvent.d.ts @@ -0,0 +1,2 @@ +import type { Actions } from '@interactjs/core/types'; +export default function isNonNativeEvent(type: string, actions: Actions): boolean; diff --git a/packages/@interactjs/utils/isNonNativeEvent.js b/packages/@interactjs/utils/isNonNativeEvent.js new file mode 100644 index 000000000..91bfdb5cc --- /dev/null +++ b/packages/@interactjs/utils/isNonNativeEvent.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isNonNativeEvent; +function isNonNativeEvent(type, actions) { + if (actions.phaselessTypes[type]) { + return true; + } + for (const name in actions.map) { + if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) { + return true; + } + } + return false; +} +//# sourceMappingURL=isNonNativeEvent.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/isNonNativeEvent.js.map b/packages/@interactjs/utils/isNonNativeEvent.js.map new file mode 100644 index 000000000..2bed12cfb --- /dev/null +++ b/packages/@interactjs/utils/isNonNativeEvent.js.map @@ -0,0 +1,22 @@ +{ + "version": 3, + "names": [ + "isNonNativeEvent", + "type", + "actions", + "phaselessTypes", + "name", + "map", + "indexOf", + "substr", + "length", + "phases" + ], + "sources": [ + "isNonNativeEvent.ts" + ], + "sourcesContent": [ + "import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent(type: string, actions: Actions) {\n if (actions.phaselessTypes[type]) {\n return true\n }\n\n for (const name in actions.map) {\n if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n return true\n }\n }\n\n return false\n}\n" + ], + "mappings": ";;;;;;AAEe,SAASA,gBAAgBA,CAACC,IAAY,EAAEC,OAAgB,EAAE;EACvE,IAAIA,OAAO,CAACC,cAAc,CAACF,IAAI,CAAC,EAAE;IAChC,OAAO,IAAI;EACb;EAEA,KAAK,MAAMG,IAAI,IAAIF,OAAO,CAACG,GAAG,EAAE;IAC9B,IAAIJ,IAAI,CAACK,OAAO,CAACF,IAAI,CAAC,KAAK,CAAC,IAAIH,IAAI,CAACM,MAAM,CAACH,IAAI,CAACI,MAAM,CAAC,IAAIN,OAAO,CAACO,MAAM,EAAE;MAC1E,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/isNonNativeEvent.prod.js b/packages/@interactjs/utils/isNonNativeEvent.prod.js new file mode 100644 index 000000000..5c74a9289 --- /dev/null +++ b/packages/@interactjs/utils/isNonNativeEvent.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=(e,r)=>{if(r.phaselessTypes[e])return!0;for(const s in r.map)if(0===e.indexOf(s)&&e.substr(s.length)in r.phases)return!0;return!1}; +//# sourceMappingURL=isNonNativeEvent.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/isNonNativeEvent.prod.js.map b/packages/@interactjs/utils/isNonNativeEvent.prod.js.map new file mode 100644 index 000000000..901b184f3 --- /dev/null +++ b/packages/@interactjs/utils/isNonNativeEvent.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "type", + "actions", + "phaselessTypes", + "name", + "map", + "indexOf", + "substr", + "length", + "phases" + ], + "sources": [ + "isNonNativeEvent.ts" + ], + "sourcesContent": [ + "import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent(type: string, actions: Actions) {\n if (actions.phaselessTypes[type]) {\n return true\n }\n\n for (const name in actions.map) {\n if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n return true\n }\n }\n\n return false\n}\n" + ], + "mappings": "uEAEe,CAA0BA,EAAcC,KACrD,GAAIA,EAAQC,eAAeF,GACzB,OAAO,EAGT,IAAK,MAAMG,KAAQF,EAAQG,IACzB,GAA2B,IAAvBJ,EAAKK,QAAQF,IAAeH,EAAKM,OAAOH,EAAKI,UAAWN,EAAQO,OAClE,OAAO,EAIX,OAAO,CACT" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/isWindow.d.ts b/packages/@interactjs/utils/isWindow.d.ts new file mode 100644 index 000000000..eb3719fa8 --- /dev/null +++ b/packages/@interactjs/utils/isWindow.d.ts @@ -0,0 +1,2 @@ +declare const _default: (thing: any) => boolean; +export default _default; diff --git a/packages/@interactjs/utils/isWindow.js b/packages/@interactjs/utils/isWindow.js new file mode 100644 index 000000000..7968ea96d --- /dev/null +++ b/packages/@interactjs/utils/isWindow.js @@ -0,0 +1,9 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _default = thing => !!(thing && thing.Window) && thing instanceof thing.Window; +exports.default = _default; +//# sourceMappingURL=isWindow.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/isWindow.js.map b/packages/@interactjs/utils/isWindow.js.map new file mode 100644 index 000000000..0fbf3770f --- /dev/null +++ b/packages/@interactjs/utils/isWindow.js.map @@ -0,0 +1,17 @@ +{ + "version": 3, + "names": [ + "thing", + "Window", + "exports", + "default", + "_default" + ], + "sources": [ + "isWindow.ts" + ], + "sourcesContent": [ + "export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n" + ], + "mappings": ";;;;;;eAAgBA,KAAU,IAAK,CAAC,EAAEA,KAAK,IAAIA,KAAK,CAACC,MAAM,CAAC,IAAID,KAAK,YAAYA,KAAK,CAACC,MAAM;AAAAC,OAAA,CAAAC,OAAA,GAAAC,QAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/isWindow.prod.js b/packages/@interactjs/utils/isWindow.prod.js new file mode 100644 index 000000000..92b688250 --- /dev/null +++ b/packages/@interactjs/utils/isWindow.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0,exports.default=e=>!(!e||!e.Window)&&e instanceof e.Window; +//# sourceMappingURL=isWindow.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/isWindow.prod.js.map b/packages/@interactjs/utils/isWindow.prod.js.map new file mode 100644 index 000000000..0707859a6 --- /dev/null +++ b/packages/@interactjs/utils/isWindow.prod.js.map @@ -0,0 +1,16 @@ +{ + "version": 3, + "names": [ + "exports", + "default", + "thing", + "Window" + ], + "sources": [ + "isWindow.ts" + ], + "sourcesContent": [ + "export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n" + ], + "mappings": "8EAAyFA,QAAAC,QAAzEC,MAAkBA,IAASA,EAAMC,SAAWD,aAAiBA,EAAMC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/misc.d.ts b/packages/@interactjs/utils/misc.d.ts new file mode 100644 index 000000000..5e825407f --- /dev/null +++ b/packages/@interactjs/utils/misc.d.ts @@ -0,0 +1,4 @@ +import type { ActionName, ActionProps } from '@interactjs/core/types'; +export declare function warnOnce(this: T, method: (...args: any[]) => any, message: string): (this: T) => any; +export declare function copyAction(dest: ActionProps, src: ActionProps): ActionProps; +export declare const sign: (n: number) => 1 | -1; diff --git a/packages/@interactjs/utils/misc.js b/packages/@interactjs/utils/misc.js new file mode 100644 index 000000000..005fd2c92 --- /dev/null +++ b/packages/@interactjs/utils/misc.js @@ -0,0 +1,29 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.copyAction = copyAction; +exports.sign = void 0; +exports.warnOnce = warnOnce; +var _window = require("./window"); +function warnOnce(method, message) { + let warned = false; + return function () { + if (!warned) { + ; + _window.window.console.warn(message); + warned = true; + } + return method.apply(this, arguments); + }; +} +function copyAction(dest, src) { + dest.name = src.name; + dest.axis = src.axis; + dest.edges = src.edges; + return dest; +} +const sign = n => n >= 0 ? 1 : -1; +exports.sign = sign; +//# sourceMappingURL=misc.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/misc.js.map b/packages/@interactjs/utils/misc.js.map new file mode 100644 index 000000000..9c7ed1713 --- /dev/null +++ b/packages/@interactjs/utils/misc.js.map @@ -0,0 +1,32 @@ +{ + "version": 3, + "names": [ + "_window", + "require", + "warnOnce", + "method", + "message", + "warned", + "window", + "console", + "warn", + "apply", + "arguments", + "copyAction", + "dest", + "src", + "name", + "axis", + "edges", + "sign", + "n", + "exports" + ], + "sources": [ + "misc.ts" + ], + "sourcesContent": [ + "import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce(this: T, method: (...args: any[]) => any, message: string) {\n let warned = false\n\n return function (this: T) {\n if (!warned) {\n ;(window as any).console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\nexport function copyAction(dest: ActionProps, src: ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n" + ], + "mappings": ";;;;;;;;AAEA,IAAAA,OAAA,GAAAC,OAAA;AAEO,SAASC,QAAQA,CAAaC,MAA+B,EAAEC,OAAe,EAAE;EACrF,IAAIC,MAAM,GAAG,KAAK;EAElB,OAAO,YAAmB;IACxB,IAAI,CAACA,MAAM,EAAE;MACX;MAAEC,cAAM,CAASC,OAAO,CAACC,IAAI,CAACJ,OAAO,CAAC;MACtCC,MAAM,GAAG,IAAI;IACf;IAEA,OAAOF,MAAM,CAACM,KAAK,CAAC,IAAI,EAAEC,SAAS,CAAC;EACtC,CAAC;AACH;AAEO,SAASC,UAAUA,CAAuBC,IAAsB,EAAEC,GAAmB,EAAE;EAC5FD,IAAI,CAACE,IAAI,GAAGD,GAAG,CAACC,IAAI;EACpBF,IAAI,CAACG,IAAI,GAAGF,GAAG,CAACE,IAAI;EACpBH,IAAI,CAACI,KAAK,GAAGH,GAAG,CAACG,KAAK;EAEtB,OAAOJ,IAAI;AACb;AAEO,MAAMK,IAAI,GAAIC,CAAS,IAAMA,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE;AAAAC,OAAA,CAAAF,IAAA,GAAAA,IAAA" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/misc.prod.js b/packages/@interactjs/utils/misc.prod.js new file mode 100644 index 000000000..2b6d268d6 --- /dev/null +++ b/packages/@interactjs/utils/misc.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.copyAction=(e,n)=>(e.name=n.name,e.axis=n.axis,e.edges=n.edges,e),exports.sign=void 0,exports.warnOnce=function(n,o){let r=!1;return function(){return r||(e.window.console.warn(o),r=!0),n.apply(this,arguments)}};var e=require("./window");exports.sign=e=>e>=0?1:-1; +//# sourceMappingURL=misc.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/misc.prod.js.map b/packages/@interactjs/utils/misc.prod.js.map new file mode 100644 index 000000000..cdd29caa9 --- /dev/null +++ b/packages/@interactjs/utils/misc.prod.js.map @@ -0,0 +1,31 @@ +{ + "version": 3, + "names": [ + "dest", + "src", + "name", + "axis", + "edges", + "method", + "message", + "warned", + "window", + "console", + "warn", + "apply", + "this", + "arguments", + "_window", + "require", + "exports", + "sign", + "n" + ], + "sources": [ + "misc.ts" + ], + "sourcesContent": [ + "import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce(this: T, method: (...args: any[]) => any, message: string) {\n let warned = false\n\n return function (this: T) {\n if (!warned) {\n ;(window as any).console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\nexport function copyAction(dest: ActionProps, src: ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n" + ], + "mappings": "0EAiBO,CAA0CA,EAAwBC,KACvED,EAAKE,KAAOD,EAAIC,KAChBF,EAAKG,KAAOF,EAAIE,KAChBH,EAAKI,MAAQH,EAAIG,MAEVJ,G,qCAlBF,SAA8BK,EAAiCC,GACpE,IAAIC,GAAS,EAEb,OAAO,WAML,OALKA,IACDC,SAAeC,QAAQC,KAAKJ,GAC9BC,GAAS,GAGJF,EAAOM,MAAMC,KAAMC,UAC5B,CACF,EAbA,IAAAC,EAAAC,QAAA,YAuBoDC,QAAAC,KAA/BC,GAAeA,GAAK,EAAI,GAAK" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/normalizeListeners.d.ts b/packages/@interactjs/utils/normalizeListeners.d.ts new file mode 100644 index 000000000..b10442a75 --- /dev/null +++ b/packages/@interactjs/utils/normalizeListeners.d.ts @@ -0,0 +1,5 @@ +import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'; +export interface NormalizedListeners { + [type: string]: Listener[]; +} +export default function normalize(type: EventTypes, listeners?: ListenersArg | ListenersArg[] | null, filter?: (_typeOrPrefix: string) => boolean, result?: NormalizedListeners): NormalizedListeners; diff --git a/packages/@interactjs/utils/normalizeListeners.js b/packages/@interactjs/utils/normalizeListeners.js new file mode 100644 index 000000000..d6fa5179b --- /dev/null +++ b/packages/@interactjs/utils/normalizeListeners.js @@ -0,0 +1,43 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = normalize; +var _is = _interopRequireDefault(require("./is")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function normalize(type, listeners, filter = _typeOrPrefix => true, result) { + result = result || {}; + if (_is.default.string(type) && type.search(' ') !== -1) { + type = split(type); + } + if (_is.default.array(type)) { + type.forEach(t => normalize(t, listeners, filter, result)); + return result; + } + + // before: type = [{ drag: () => {} }], listeners = undefined + // after: type = '' , listeners = [{ drag: () => {} }] + if (_is.default.object(type)) { + listeners = type; + type = ''; + } + if (_is.default.func(listeners) && filter(type)) { + result[type] = result[type] || []; + result[type].push(listeners); + } else if (_is.default.array(listeners)) { + for (const l of listeners) { + normalize(type, l, filter, result); + } + } else if (_is.default.object(listeners)) { + for (const prefix in listeners) { + const combinedTypes = split(prefix).map(p => `${type}${p}`); + normalize(combinedTypes, listeners[prefix], filter, result); + } + } + return result; +} +function split(type) { + return type.trim().split(/ +/); +} +//# sourceMappingURL=normalizeListeners.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/normalizeListeners.js.map b/packages/@interactjs/utils/normalizeListeners.js.map new file mode 100644 index 000000000..383e87f47 --- /dev/null +++ b/packages/@interactjs/utils/normalizeListeners.js.map @@ -0,0 +1,40 @@ +{ + "version": 3, + "names": [ + "_is", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "normalize", + "type", + "listeners", + "filter", + "_typeOrPrefix", + "result", + "is", + "string", + "search", + "split", + "array", + "forEach", + "t", + "object", + "func", + "push", + "l", + "prefix", + "combinedTypes", + "map", + "p", + "trim" + ], + "sources": [ + "normalizeListeners.ts" + ], + "sourcesContent": [ + "import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Listener[]\n}\n\nexport default function normalize(\n type: EventTypes,\n listeners?: ListenersArg | ListenersArg[] | null,\n filter = (_typeOrPrefix: string) => true,\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n type.forEach((t) => normalize(t, listeners, filter, result))\n return result\n }\n\n // before: type = [{ drag: () => {} }], listeners = undefined\n // after: type = '' , listeners = [{ drag: () => {} }]\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners) && filter(type)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n } else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, filter, result)\n }\n } else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], filter, result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split(type: string) {\n return type.trim().split(/ +/)\n}\n" + ], + "mappings": ";;;;;;AAEA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAqB,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAMN,SAASG,SAASA,CAC/BC,IAAgB,EAChBC,SAAgD,EAChDC,MAAM,GAAIC,aAAqB,IAAK,IAAI,EACxCC,MAA4B,EACP;EACrBA,MAAM,GAAGA,MAAM,IAAI,CAAC,CAAC;EAErB,IAAIC,WAAE,CAACC,MAAM,CAACN,IAAI,CAAC,IAAIA,IAAI,CAACO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAC9CP,IAAI,GAAGQ,KAAK,CAACR,IAAI,CAAC;EACpB;EAEA,IAAIK,WAAE,CAACI,KAAK,CAACT,IAAI,CAAC,EAAE;IAClBA,IAAI,CAACU,OAAO,CAAEC,CAAC,IAAKZ,SAAS,CAACY,CAAC,EAAEV,SAAS,EAAEC,MAAM,EAAEE,MAAM,CAAC,CAAC;IAC5D,OAAOA,MAAM;EACf;;EAEA;EACA;EACA,IAAIC,WAAE,CAACO,MAAM,CAACZ,IAAI,CAAC,EAAE;IACnBC,SAAS,GAAGD,IAAI;IAChBA,IAAI,GAAG,EAAE;EACX;EAEA,IAAIK,WAAE,CAACQ,IAAI,CAACZ,SAAS,CAAC,IAAIC,MAAM,CAACF,IAAI,CAAC,EAAE;IACtCI,MAAM,CAACJ,IAAI,CAAC,GAAGI,MAAM,CAACJ,IAAI,CAAC,IAAI,EAAE;IACjCI,MAAM,CAACJ,IAAI,CAAC,CAACc,IAAI,CAACb,SAAS,CAAC;EAC9B,CAAC,MAAM,IAAII,WAAE,CAACI,KAAK,CAACR,SAAS,CAAC,EAAE;IAC9B,KAAK,MAAMc,CAAC,IAAId,SAAS,EAAE;MACzBF,SAAS,CAACC,IAAI,EAAEe,CAAC,EAAEb,MAAM,EAAEE,MAAM,CAAC;IACpC;EACF,CAAC,MAAM,IAAIC,WAAE,CAACO,MAAM,CAACX,SAAS,CAAC,EAAE;IAC/B,KAAK,MAAMe,MAAM,IAAIf,SAAS,EAAE;MAC9B,MAAMgB,aAAa,GAAGT,KAAK,CAACQ,MAAM,CAAC,CAACE,GAAG,CAAEC,CAAC,IAAM,GAAEnB,IAAK,GAAEmB,CAAE,EAAC,CAAC;MAE7DpB,SAAS,CAACkB,aAAa,EAAEhB,SAAS,CAACe,MAAM,CAAC,EAAEd,MAAM,EAAEE,MAAM,CAAC;IAC7D;EACF;EAEA,OAAOA,MAAM;AACf;AAEA,SAASI,KAAKA,CAACR,IAAY,EAAE;EAC3B,OAAOA,IAAI,CAACoB,IAAI,CAAC,CAAC,CAACZ,KAAK,CAAC,IAAI,CAAC;AAChC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/normalizeListeners.prod.js b/packages/@interactjs/utils/normalizeListeners.prod.js new file mode 100644 index 000000000..dafac1d2a --- /dev/null +++ b/packages/@interactjs/utils/normalizeListeners.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=function e(f,u,a=(e=>!0),o){if(o=o||{},t.default.string(f)&&-1!==f.search(" ")&&(f=r(f)),t.default.array(f))return f.forEach((t=>e(t,u,a,o))),o;if(t.default.object(f)&&(u=f,f=""),t.default.func(u)&&a(f))o[f]=o[f]||[],o[f].push(u);else if(t.default.array(u))for(const t of u)e(f,t,a,o);else if(t.default.object(u))for(const t in u){const l=r(t).map((e=>`${f}${e}`));e(l,u[t],a,o)}return o};var e,t=(e=require("./is"))&&e.__esModule?e:{default:e};function r(e){return e.trim().split(/ +/)} +//# sourceMappingURL=normalizeListeners.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/normalizeListeners.prod.js.map b/packages/@interactjs/utils/normalizeListeners.prod.js.map new file mode 100644 index 000000000..6d259e37f --- /dev/null +++ b/packages/@interactjs/utils/normalizeListeners.prod.js.map @@ -0,0 +1,39 @@ +{ + "version": 3, + "names": [ + "normalize", + "type", + "listeners", + "filter", + "_typeOrPrefix", + "result", + "is", + "string", + "search", + "split", + "array", + "forEach", + "t", + "object", + "func", + "push", + "l", + "prefix", + "combinedTypes", + "map", + "p", + "obj", + "_is", + "require", + "__esModule", + "default", + "trim" + ], + "sources": [ + "normalizeListeners.ts" + ], + "sourcesContent": [ + "import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Listener[]\n}\n\nexport default function normalize(\n type: EventTypes,\n listeners?: ListenersArg | ListenersArg[] | null,\n filter = (_typeOrPrefix: string) => true,\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n type.forEach((t) => normalize(t, listeners, filter, result))\n return result\n }\n\n // before: type = [{ drag: () => {} }], listeners = undefined\n // after: type = '' , listeners = [{ drag: () => {} }]\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners) && filter(type)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n } else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, filter, result)\n }\n } else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], filter, result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split(type: string) {\n return type.trim().split(/ +/)\n}\n" + ], + "mappings": "uEAQe,SAASA,EACtBC,EACAC,EACAC,EAAUC,KAA0B,GACpCC,GAQA,GANAA,EAASA,GAAU,CAAC,EAEhBC,UAAGC,OAAON,KAA+B,IAAtBA,EAAKO,OAAO,OACjCP,EAAOQ,EAAMR,IAGXK,UAAGI,MAAMT,GAEX,OADAA,EAAKU,SAASC,GAAMZ,EAAUY,EAAGV,EAAWC,EAAQE,KAC7CA,EAUT,GALIC,UAAGO,OAAOZ,KACZC,EAAYD,EACZA,EAAO,IAGLK,UAAGQ,KAAKZ,IAAcC,EAAOF,GAC/BI,EAAOJ,GAAQI,EAAOJ,IAAS,GAC/BI,EAAOJ,GAAMc,KAAKb,QACb,GAAII,UAAGI,MAAMR,GAClB,IAAK,MAAMc,KAAKd,EACdF,EAAUC,EAAMe,EAAGb,EAAQE,QAExB,GAAIC,UAAGO,OAAOX,GACnB,IAAK,MAAMe,KAAUf,EAAW,CAC9B,MAAMgB,EAAgBT,EAAMQ,GAAQE,KAAKC,GAAO,GAAEnB,IAAOmB,MAEzDpB,EAAUkB,EAAehB,EAAUe,GAASd,EAAQE,EACtD,CAGF,OAAOA,CACT,EA9CA,IAAqBgB,EAArBC,GAAqBD,EAArBE,QAAA,UAAqBF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAgDrB,SAASZ,EAAMR,GACb,OAAOA,EAAKyB,OAAOjB,MAAM,KAC3B" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/package.json b/packages/@interactjs/utils/package.json index a7491fda4..411ab1d48 100644 --- a/packages/@interactjs/utils/package.json +++ b/packages/@interactjs/utils/package.json @@ -7,10 +7,7 @@ "url": "https://github.com/taye/interact.js.git", "directory": "packages/@interactjs/utils" }, - "peerDependencies": { - "@interactjs/feedback": "1.10.25", - "@interactjs/symbol-tree": "1.10.25" - }, + "peerDependencies": {}, "publishConfig": { "access": "public" }, diff --git a/packages/@interactjs/utils/pointerExtend.d.ts b/packages/@interactjs/utils/pointerExtend.d.ts new file mode 100644 index 000000000..e68db270b --- /dev/null +++ b/packages/@interactjs/utils/pointerExtend.d.ts @@ -0,0 +1,5 @@ +export default function pointerExtend(dest: Partial; +}>, source: T): Partial; +}>; diff --git a/packages/@interactjs/utils/pointerExtend.js b/packages/@interactjs/utils/pointerExtend.js new file mode 100644 index 000000000..797d0645f --- /dev/null +++ b/packages/@interactjs/utils/pointerExtend.js @@ -0,0 +1,28 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = pointerExtend; +const VENDOR_PREFIXES = ['webkit', 'moz']; +function pointerExtend(dest, source) { + dest.__set || (dest.__set = {}); + for (const prop in source) { + // skip deprecated prefixed properties + if (VENDOR_PREFIXES.some(prefix => prop.indexOf(prefix) === 0)) continue; + if (typeof dest[prop] !== 'function' && prop !== '__set') { + Object.defineProperty(dest, prop, { + get() { + if (prop in dest.__set) return dest.__set[prop]; + return dest.__set[prop] = source[prop]; + }, + set(value) { + dest.__set[prop] = value; + }, + configurable: true + }); + } + } + return dest; +} +//# sourceMappingURL=pointerExtend.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerExtend.js.map b/packages/@interactjs/utils/pointerExtend.js.map new file mode 100644 index 000000000..d210f34cf --- /dev/null +++ b/packages/@interactjs/utils/pointerExtend.js.map @@ -0,0 +1,27 @@ +{ + "version": 3, + "names": [ + "VENDOR_PREFIXES", + "pointerExtend", + "dest", + "source", + "__set", + "prop", + "some", + "prefix", + "indexOf", + "Object", + "defineProperty", + "get", + "set", + "value", + "configurable" + ], + "sources": [ + "pointerExtend.ts" + ], + "sourcesContent": [ + "const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend(dest: Partial }>, source: T) {\n dest.__set ||= {} as any\n\n for (const prop in source) {\n // skip deprecated prefixed properties\n if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n if (typeof dest[prop] !== 'function' && prop !== '__set') {\n Object.defineProperty(dest, prop, {\n get() {\n if (prop in dest.__set) return dest.__set[prop]\n\n return (dest.__set[prop] = source[prop] as any)\n },\n set(value: any) {\n dest.__set[prop] = value\n },\n configurable: true,\n })\n }\n }\n return dest\n}\n" + ], + "mappings": ";;;;;;AAAA,MAAMA,eAAe,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;AAE1B,SAASC,aAAaA,CAAIC,IAAyC,EAAEC,MAAS,EAAE;EAC7FD,IAAI,CAACE,KAAK,KAAVF,IAAI,CAACE,KAAK,GAAK,CAAC,CAAC;EAEjB,KAAK,MAAMC,IAAI,IAAIF,MAAM,EAAE;IACzB;IACA,IAAIH,eAAe,CAACM,IAAI,CAAEC,MAAM,IAAKF,IAAI,CAACG,OAAO,CAACD,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;IAElE,IAAI,OAAOL,IAAI,CAACG,IAAI,CAAC,KAAK,UAAU,IAAIA,IAAI,KAAK,OAAO,EAAE;MACxDI,MAAM,CAACC,cAAc,CAACR,IAAI,EAAEG,IAAI,EAAE;QAChCM,GAAGA,CAAA,EAAG;UACJ,IAAIN,IAAI,IAAIH,IAAI,CAACE,KAAK,EAAE,OAAOF,IAAI,CAACE,KAAK,CAACC,IAAI,CAAC;UAE/C,OAAQH,IAAI,CAACE,KAAK,CAACC,IAAI,CAAC,GAAGF,MAAM,CAACE,IAAI,CAAQ;QAChD,CAAC;QACDO,GAAGA,CAACC,KAAU,EAAE;UACdX,IAAI,CAACE,KAAK,CAACC,IAAI,CAAC,GAAGQ,KAAK;QAC1B,CAAC;QACDC,YAAY,EAAE;MAChB,CAAC,CAAC;IACJ;EACF;EACA,OAAOZ,IAAI;AACb" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerExtend.prod.js b/packages/@interactjs/utils/pointerExtend.prod.js new file mode 100644 index 000000000..4d93bfb52 --- /dev/null +++ b/packages/@interactjs/utils/pointerExtend.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=(t,_)=>{t.__set||(t.__set={});for(const s in _)e.some((e=>0===s.indexOf(e)))||"function"!=typeof t[s]&&"__set"!==s&&Object.defineProperty(t,s,{get(){return s in t.__set?t.__set[s]:t.__set[s]=_[s]},set(e){t.__set[s]=e},configurable:!0});return t};const e=["webkit","moz"]; +//# sourceMappingURL=pointerExtend.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerExtend.prod.js.map b/packages/@interactjs/utils/pointerExtend.prod.js.map new file mode 100644 index 000000000..7ce7813b0 --- /dev/null +++ b/packages/@interactjs/utils/pointerExtend.prod.js.map @@ -0,0 +1,26 @@ +{ + "version": 3, + "names": [ + "dest", + "source", + "__set", + "prop", + "VENDOR_PREFIXES", + "some", + "prefix", + "indexOf", + "Object", + "defineProperty", + "get", + "set", + "value", + "configurable" + ], + "sources": [ + "pointerExtend.ts" + ], + "sourcesContent": [ + "const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend(dest: Partial }>, source: T) {\n dest.__set ||= {} as any\n\n for (const prop in source) {\n // skip deprecated prefixed properties\n if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n if (typeof dest[prop] !== 'function' && prop !== '__set') {\n Object.defineProperty(dest, prop, {\n get() {\n if (prop in dest.__set) return dest.__set[prop]\n\n return (dest.__set[prop] = source[prop] as any)\n },\n set(value: any) {\n dest.__set[prop] = value\n },\n configurable: true,\n })\n }\n }\n return dest\n}\n" + ], + "mappings": "uEAEe,CAA0BA,EAA2CC,KAClFD,EAAKE,QAALF,EAAKE,MAAU,CAAC,GAEhB,IAAK,MAAMC,KAAQF,EAEbG,EAAgBC,MAAMC,GAAoC,IAAzBH,EAAKI,QAAQD,MAExB,mBAAfN,EAAKG,IAAiC,UAATA,GACtCK,OAAOC,eAAeT,EAAMG,EAAM,CAChCO,GAIA,GAHE,OAAIP,KAAQH,EAAKE,MAAcF,EAAKE,MAAMC,GAElCH,EAAKE,MAAMC,GAAQF,EAAOE,EACpC,EACAQ,IAAIC,GACFZ,EAAKE,MAAMC,GAAQS,CACrB,EACAC,cAAc,IAIpB,OAAOb,CACT,EAxBA,MAAMI,EAAkB,CAAC,SAAU" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerUtils.d.ts b/packages/@interactjs/utils/pointerUtils.d.ts new file mode 100644 index 000000000..cc2f04fa1 --- /dev/null +++ b/packages/@interactjs/utils/pointerUtils.d.ts @@ -0,0 +1,72 @@ +import type { InteractEvent } from '@interactjs/core/InteractEvent'; +import type { CoordsSetMember, PointerType, Point, PointerEventType } from '@interactjs/core/types'; +import pointerExtend from './pointerExtend'; +export declare function copyCoords(dest: CoordsSetMember, src: CoordsSetMember): void; +export declare function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember): void; +export declare function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember): void; +export declare function setZeroCoords(targetObj: CoordsSetMember): void; +export declare function isNativePointer(pointer: any): boolean; +export declare function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point): Point; +export declare function getPageXY(pointer: PointerType | InteractEvent, page?: Point): Point; +export declare function getClientXY(pointer: PointerType, client: Point): Point; +export declare function getPointerId(pointer: { + pointerId?: number; + identifier?: number; + type?: string; +}): number; +export declare function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number): void; +export declare function getTouchPair(event: TouchEvent | PointerType[]): PointerType[]; +export declare function pointerAverage(pointers: PointerType[]): { + pageX: number; + pageY: number; + clientX: number; + clientY: number; + screenX: number; + screenY: number; +}; +export declare function touchBBox(event: PointerType[]): { + x: number; + y: number; + left: number; + top: number; + right: number; + bottom: number; + width: number; + height: number; +}; +export declare function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string): number; +export declare function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string): number; +export declare function getPointerType(pointer: { + pointerType?: string; + identifier?: number; + type?: string; +}): string; +export declare function getEventTargets(event: Event): any[]; +export declare function newCoords(): CoordsSetMember; +export declare function coordsToEvent(coords: MockCoords): { + coords: MockCoords; + readonly page: any; + readonly client: any; + readonly timeStamp: any; + readonly pageX: any; + readonly pageY: any; + readonly clientX: any; + readonly clientY: any; + readonly pointerId: any; + readonly target: any; + readonly type: any; + readonly pointerType: any; + readonly buttons: any; + preventDefault(): void; +} & PointerType & PointerEventType; +export interface MockCoords { + page: Point; + client: Point; + timeStamp?: number; + pointerId?: any; + target?: any; + type?: string; + pointerType?: string; + buttons?: number; +} +export { pointerExtend }; diff --git a/packages/@interactjs/utils/pointerUtils.js b/packages/@interactjs/utils/pointerUtils.js new file mode 100644 index 000000000..06f61de94 --- /dev/null +++ b/packages/@interactjs/utils/pointerUtils.js @@ -0,0 +1,266 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.coordsToEvent = coordsToEvent; +exports.copyCoords = copyCoords; +exports.getClientXY = getClientXY; +exports.getEventTargets = getEventTargets; +exports.getPageXY = getPageXY; +exports.getPointerId = getPointerId; +exports.getPointerType = getPointerType; +exports.getTouchPair = getTouchPair; +exports.getXY = getXY; +exports.isNativePointer = isNativePointer; +exports.newCoords = newCoords; +exports.pointerAverage = pointerAverage; +Object.defineProperty(exports, "pointerExtend", { + enumerable: true, + get: function () { + return _pointerExtend.default; + } +}); +exports.setCoordDeltas = setCoordDeltas; +exports.setCoordVelocity = setCoordVelocity; +exports.setCoords = setCoords; +exports.setZeroCoords = setZeroCoords; +exports.touchAngle = touchAngle; +exports.touchBBox = touchBBox; +exports.touchDistance = touchDistance; +var _browser = _interopRequireDefault(require("./browser")); +var _domObjects = _interopRequireDefault(require("./domObjects")); +var domUtils = _interopRequireWildcard(require("./domUtils")); +var _hypot = _interopRequireDefault(require("./hypot")); +var _is = _interopRequireDefault(require("./is")); +var _pointerExtend = _interopRequireDefault(require("./pointerExtend")); +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function copyCoords(dest, src) { + dest.page = dest.page || {}; + dest.page.x = src.page.x; + dest.page.y = src.page.y; + dest.client = dest.client || {}; + dest.client.x = src.client.x; + dest.client.y = src.client.y; + dest.timeStamp = src.timeStamp; +} +function setCoordDeltas(targetObj, prev, cur) { + targetObj.page.x = cur.page.x - prev.page.x; + targetObj.page.y = cur.page.y - prev.page.y; + targetObj.client.x = cur.client.x - prev.client.x; + targetObj.client.y = cur.client.y - prev.client.y; + targetObj.timeStamp = cur.timeStamp - prev.timeStamp; +} +function setCoordVelocity(targetObj, delta) { + const dt = Math.max(delta.timeStamp / 1000, 0.001); + targetObj.page.x = delta.page.x / dt; + targetObj.page.y = delta.page.y / dt; + targetObj.client.x = delta.client.x / dt; + targetObj.client.y = delta.client.y / dt; + targetObj.timeStamp = dt; +} +function setZeroCoords(targetObj) { + targetObj.page.x = 0; + targetObj.page.y = 0; + targetObj.client.x = 0; + targetObj.client.y = 0; +} +function isNativePointer(pointer) { + return pointer instanceof _domObjects.default.Event || pointer instanceof _domObjects.default.Touch; +} + +// Get specified X/Y coords for mouse or event.touches[0] +function getXY(type, pointer, xy) { + xy = xy || {}; + type = type || 'page'; + xy.x = pointer[type + 'X']; + xy.y = pointer[type + 'Y']; + return xy; +} +function getPageXY(pointer, page) { + page = page || { + x: 0, + y: 0 + }; + + // Opera Mobile handles the viewport and scrolling oddly + if (_browser.default.isOperaMobile && isNativePointer(pointer)) { + getXY('screen', pointer, page); + page.x += window.scrollX; + page.y += window.scrollY; + } else { + getXY('page', pointer, page); + } + return page; +} +function getClientXY(pointer, client) { + client = client || {}; + if (_browser.default.isOperaMobile && isNativePointer(pointer)) { + // Opera Mobile handles the viewport and scrolling oddly + getXY('screen', pointer, client); + } else { + getXY('client', pointer, client); + } + return client; +} +function getPointerId(pointer) { + return _is.default.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; +} +function setCoords(dest, pointers, timeStamp) { + const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]; + getPageXY(pointer, dest.page); + getClientXY(pointer, dest.client); + dest.timeStamp = timeStamp; +} +function getTouchPair(event) { + const touches = []; + + // array of touches is supplied + if (_is.default.array(event)) { + touches[0] = event[0]; + touches[1] = event[1]; + } + // an event + else { + if (event.type === 'touchend') { + if (event.touches.length === 1) { + touches[0] = event.touches[0]; + touches[1] = event.changedTouches[0]; + } else if (event.touches.length === 0) { + touches[0] = event.changedTouches[0]; + touches[1] = event.changedTouches[1]; + } + } else { + touches[0] = event.touches[0]; + touches[1] = event.touches[1]; + } + } + return touches; +} +function pointerAverage(pointers) { + const average = { + pageX: 0, + pageY: 0, + clientX: 0, + clientY: 0, + screenX: 0, + screenY: 0 + }; + for (const pointer of pointers) { + for (const prop in average) { + average[prop] += pointer[prop]; + } + } + for (const prop in average) { + average[prop] /= pointers.length; + } + return average; +} +function touchBBox(event) { + if (!event.length) { + return null; + } + const touches = getTouchPair(event); + const minX = Math.min(touches[0].pageX, touches[1].pageX); + const minY = Math.min(touches[0].pageY, touches[1].pageY); + const maxX = Math.max(touches[0].pageX, touches[1].pageX); + const maxY = Math.max(touches[0].pageY, touches[1].pageY); + return { + x: minX, + y: minY, + left: minX, + top: minY, + right: maxX, + bottom: maxY, + width: maxX - minX, + height: maxY - minY + }; +} +function touchDistance(event, deltaSource) { + const sourceX = deltaSource + 'X'; + const sourceY = deltaSource + 'Y'; + const touches = getTouchPair(event); + const dx = touches[0][sourceX] - touches[1][sourceX]; + const dy = touches[0][sourceY] - touches[1][sourceY]; + return (0, _hypot.default)(dx, dy); +} +function touchAngle(event, deltaSource) { + const sourceX = deltaSource + 'X'; + const sourceY = deltaSource + 'Y'; + const touches = getTouchPair(event); + const dx = touches[1][sourceX] - touches[0][sourceX]; + const dy = touches[1][sourceY] - touches[0][sourceY]; + const angle = 180 * Math.atan2(dy, dx) / Math.PI; + return angle; +} +function getPointerType(pointer) { + return _is.default.string(pointer.pointerType) ? pointer.pointerType : _is.default.number(pointer.pointerType) ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType] : + // if the PointerEvent API isn't available, then the "pointer" must + // be either a MouseEvent, TouchEvent, or Touch object + /touch/.test(pointer.type || '') || pointer instanceof _domObjects.default.Touch ? 'touch' : 'mouse'; +} + +// [ event.target, event.currentTarget ] +function getEventTargets(event) { + const path = _is.default.func(event.composedPath) ? event.composedPath() : event.path; + return [domUtils.getActualElement(path ? path[0] : event.target), domUtils.getActualElement(event.currentTarget)]; +} +function newCoords() { + return { + page: { + x: 0, + y: 0 + }, + client: { + x: 0, + y: 0 + }, + timeStamp: 0 + }; +} +function coordsToEvent(coords) { + const event = { + coords, + get page() { + return this.coords.page; + }, + get client() { + return this.coords.client; + }, + get timeStamp() { + return this.coords.timeStamp; + }, + get pageX() { + return this.coords.page.x; + }, + get pageY() { + return this.coords.page.y; + }, + get clientX() { + return this.coords.client.x; + }, + get clientY() { + return this.coords.client.y; + }, + get pointerId() { + return this.coords.pointerId; + }, + get target() { + return this.coords.target; + }, + get type() { + return this.coords.type; + }, + get pointerType() { + return this.coords.pointerType; + }, + get buttons() { + return this.coords.buttons; + }, + preventDefault() {} + }; + return event; +} +//# sourceMappingURL=pointerUtils.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerUtils.js.map b/packages/@interactjs/utils/pointerUtils.js.map new file mode 100644 index 000000000..b09b1484c --- /dev/null +++ b/packages/@interactjs/utils/pointerUtils.js.map @@ -0,0 +1,138 @@ +{ + "version": 3, + "names": [ + "_browser", + "_interopRequireDefault", + "require", + "_domObjects", + "domUtils", + "_interopRequireWildcard", + "_hypot", + "_is", + "_pointerExtend", + "_getRequireWildcardCache", + "e", + "WeakMap", + "r", + "t", + "__esModule", + "default", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "obj", + "copyCoords", + "dest", + "src", + "page", + "x", + "y", + "client", + "timeStamp", + "setCoordDeltas", + "targetObj", + "prev", + "cur", + "setCoordVelocity", + "delta", + "dt", + "Math", + "max", + "setZeroCoords", + "isNativePointer", + "pointer", + "dom", + "Event", + "Touch", + "getXY", + "type", + "xy", + "getPageXY", + "browser", + "isOperaMobile", + "window", + "scrollX", + "scrollY", + "getClientXY", + "getPointerId", + "is", + "number", + "pointerId", + "identifier", + "setCoords", + "pointers", + "length", + "pointerAverage", + "getTouchPair", + "event", + "touches", + "array", + "changedTouches", + "average", + "pageX", + "pageY", + "clientX", + "clientY", + "screenX", + "screenY", + "prop", + "touchBBox", + "minX", + "min", + "minY", + "maxX", + "maxY", + "left", + "top", + "right", + "bottom", + "width", + "height", + "touchDistance", + "deltaSource", + "sourceX", + "sourceY", + "dx", + "dy", + "hypot", + "touchAngle", + "angle", + "atan2", + "PI", + "getPointerType", + "string", + "pointerType", + "undefined", + "test", + "getEventTargets", + "path", + "func", + "composedPath", + "getActualElement", + "target", + "currentTarget", + "newCoords", + "coordsToEvent", + "coords", + "buttons", + "preventDefault" + ], + "sources": [ + "pointerUtils.ts" + ], + "sourcesContent": [ + "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords(dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || ({} as any)\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || ({} as any)\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords(targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer(pointer: any) {\n return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || ({} as Point)\n type = type || 'page'\n\n xy.x = pointer[(type + 'X') as 'pageX']\n xy.y = pointer[(type + 'Y') as 'pageY']\n\n return xy\n}\n\nexport function getPageXY(pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n } else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY(pointer: PointerType, client: Point) {\n client = client || ({} as any)\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n } else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId(pointer: { pointerId?: number; identifier?: number; type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair(event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n } else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n } else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage(pointers: PointerType[]) {\n const average = {\n pageX: 0,\n pageY: 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox(event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\nexport function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n}\n\nexport function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n return angle\n}\n\nexport function getPointerType(pointer: { pointerType?: string; identifier?: number; type?: string }) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n : // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets(event: Event) {\n const path = is.func(event.composedPath)\n ? (event.composedPath() as Element[])\n : (event as unknown as { path: Element[] }).path\n\n return [\n domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords(): CoordsSetMember {\n return {\n page: { x: 0, y: 0 },\n client: { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent(coords: MockCoords) {\n const event = {\n coords,\n get page() {\n return this.coords.page\n },\n get client() {\n return this.coords.client\n },\n get timeStamp() {\n return this.coords.timeStamp\n },\n get pageX() {\n return this.coords.page.x\n },\n get pageY() {\n return this.coords.page.y\n },\n get clientX() {\n return this.coords.client.x\n },\n get clientY() {\n return this.coords.client.y\n },\n get pointerId() {\n return this.coords.pointerId\n },\n get target() {\n return this.coords.target\n },\n get type() {\n return this.coords.type\n },\n get pointerType() {\n return this.coords.pointerType\n },\n get buttons() {\n return this.coords.buttons\n },\n preventDefault() {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerUtils.prod.js b/packages/@interactjs/utils/pointerUtils.prod.js new file mode 100644 index 000000000..0bb880521 --- /dev/null +++ b/packages/@interactjs/utils/pointerUtils.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.coordsToEvent=function(e){return{coords:e,get page(){return this.coords.page},get client(){return this.coords.client},get timeStamp(){return this.coords.timeStamp},get pageX(){return this.coords.page.x},get pageY(){return this.coords.page.y},get clientX(){return this.coords.client.x},get clientY(){return this.coords.client.y},get pointerId(){return this.coords.pointerId},get target(){return this.coords.target},get type(){return this.coords.type},get pointerType(){return this.coords.pointerType},get buttons(){return this.coords.buttons},preventDefault(){}}},exports.copyCoords=(e,t)=>{e.page=e.page||{},e.page.x=t.page.x,e.page.y=t.page.y,e.client=e.client||{},e.client.x=t.client.x,e.client.y=t.client.y,e.timeStamp=t.timeStamp},exports.getClientXY=l,exports.getEventTargets=e=>{const t=n.default.func(e.composedPath)?e.composedPath():e.path;return[r.getActualElement(t?t[0]:e.target),r.getActualElement(e.currentTarget)]},exports.getPageXY=u,exports.getPointerId=e=>n.default.number(e.pointerId)?e.pointerId:e.identifier,exports.getPointerType=e=>n.default.string(e.pointerType)?e.pointerType:n.default.number(e.pointerType)?[void 0,void 0,"touch","pen","mouse"][e.pointerType]:/touch/.test(e.type||"")||e instanceof t.default.Touch?"touch":"mouse",exports.getTouchPair=g,exports.getXY=s,exports.isNativePointer=c,exports.newCoords=()=>({page:{x:0,y:0},client:{x:0,y:0},timeStamp:0}),exports.pointerAverage=d,Object.defineProperty(exports,"pointerExtend",{enumerable:!0,get:()=>i.default}),exports.setCoordDeltas=(e,t,r)=>{e.page.x=r.page.x-t.page.x,e.page.y=r.page.y-t.page.y,e.client.x=r.client.x-t.client.x,e.client.y=r.client.y-t.client.y,e.timeStamp=r.timeStamp-t.timeStamp},exports.setCoordVelocity=(e,t)=>{const r=Math.max(t.timeStamp/1e3,.001);e.page.x=t.page.x/r,e.page.y=t.page.y/r,e.client.x=t.client.x/r,e.client.y=t.client.y/r,e.timeStamp=r},exports.setCoords=(e,t,r)=>{const o=t.length>1?d(t):t[0];u(o,e.page),l(o,e.client),e.timeStamp=r},exports.setZeroCoords=e=>{e.page.x=0,e.page.y=0,e.client.x=0,e.client.y=0},exports.touchAngle=(e,t)=>{const r=t+"X",o=t+"Y",n=g(e),i=n[1][r]-n[0][r],p=n[1][o]-n[0][o];return 180*Math.atan2(p,i)/Math.PI},exports.touchBBox=e=>{if(!e.length)return null;const t=g(e),r=Math.min(t[0].pageX,t[1].pageX),o=Math.min(t[0].pageY,t[1].pageY),n=Math.max(t[0].pageX,t[1].pageX),i=Math.max(t[0].pageY,t[1].pageY);return{x:r,y:o,left:r,top:o,right:n,bottom:i,width:n-r,height:i-o}},exports.touchDistance=(e,t)=>{const r=t+"X",n=t+"Y",i=g(e),p=i[0][r]-i[1][r],a=i[0][n]-i[1][n];return(0,o.default)(p,a)};var e=a(require("./browser")),t=a(require("./domObjects")),r=((e,t)=>{if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=p(t);if(r&&r.has(e))return r.get(e);var o={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var a=n?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(o,i,a):o[i]=e[i]}return o.default=e,r&&r.set(e,o),o})(require("./domUtils")),o=a(require("./hypot")),n=a(require("./is")),i=a(require("./pointerExtend"));function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(p=e=>e?r:t)(e)}function a(e){return e&&e.__esModule?e:{default:e}}function c(e){return e instanceof t.default.Event||e instanceof t.default.Touch}function s(e,t,r){return e=e||"page",(r=r||{}).x=t[e+"X"],r.y=t[e+"Y"],r}function u(t,r){return r=r||{x:0,y:0},e.default.isOperaMobile&&c(t)?(s("screen",t,r),r.x+=window.scrollX,r.y+=window.scrollY):s("page",t,r),r}function l(t,r){return r=r||{},e.default.isOperaMobile&&c(t)?s("screen",t,r):s("client",t,r),r}function g(e){const t=[];return n.default.array(e)?(t[0]=e[0],t[1]=e[1]):"touchend"===e.type?1===e.touches.length?(t[0]=e.touches[0],t[1]=e.changedTouches[0]):0===e.touches.length&&(t[0]=e.changedTouches[0],t[1]=e.changedTouches[1]):(t[0]=e.touches[0],t[1]=e.touches[1]),t}function d(e){const t={pageX:0,pageY:0,clientX:0,clientY:0,screenX:0,screenY:0};for(const r of e)for(const e in t)t[e]+=r[e];for(const r in t)t[r]/=e.length;return t} +//# sourceMappingURL=pointerUtils.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/pointerUtils.prod.js.map b/packages/@interactjs/utils/pointerUtils.prod.js.map new file mode 100644 index 000000000..b06f8c7b1 --- /dev/null +++ b/packages/@interactjs/utils/pointerUtils.prod.js.map @@ -0,0 +1,125 @@ +{ + "version": 3, + "names": [ + "coords", + "page", + "this", + "client", + "timeStamp", + "pageX", + "x", + "pageY", + "y", + "clientX", + "clientY", + "pointerId", + "target", + "type", + "pointerType", + "buttons", + "preventDefault", + "dest", + "src", + "event", + "path", + "is", + "func", + "composedPath", + "domUtils", + "getActualElement", + "currentTarget", + "pointer", + "number", + "identifier", + "string", + "undefined", + "test", + "dom", + "Touch", + "targetObj", + "prev", + "cur", + "delta", + "dt", + "Math", + "max", + "pointers", + "length", + "pointerAverage", + "getPageXY", + "getClientXY", + "deltaSource", + "sourceX", + "sourceY", + "touches", + "getTouchPair", + "dx", + "dy", + "atan2", + "PI", + "minX", + "min", + "minY", + "maxX", + "maxY", + "left", + "top", + "right", + "bottom", + "width", + "height", + "hypot", + "_browser", + "_interopRequireDefault", + "require", + "_domObjects", + "e", + "r", + "__esModule", + "default", + "t", + "_getRequireWildcardCache", + "has", + "get", + "n", + "__proto__", + "a", + "Object", + "defineProperty", + "getOwnPropertyDescriptor", + "u", + "prototype", + "hasOwnProperty", + "call", + "i", + "set", + "_interopRequireWildcard", + "_hypot", + "_is", + "_pointerExtend", + "WeakMap", + "obj", + "isNativePointer", + "Event", + "getXY", + "xy", + "browser", + "isOperaMobile", + "window", + "scrollX", + "scrollY", + "array", + "changedTouches", + "average", + "screenX", + "screenY", + "prop" + ], + "sources": [ + "pointerUtils.ts" + ], + "sourcesContent": [ + "import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords(dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || ({} as any)\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || ({} as any)\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords(targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer(pointer: any) {\n return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || ({} as Point)\n type = type || 'page'\n\n xy.x = pointer[(type + 'X') as 'pageX']\n xy.y = pointer[(type + 'Y') as 'pageY']\n\n return xy\n}\n\nexport function getPageXY(pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n } else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY(pointer: PointerType, client: Point) {\n client = client || ({} as any)\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n } else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId(pointer: { pointerId?: number; identifier?: number; type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair(event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n } else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n } else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage(pointers: PointerType[]) {\n const average = {\n pageX: 0,\n pageY: 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox(event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\nexport function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n}\n\nexport function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n return angle\n}\n\nexport function getPointerType(pointer: { pointerType?: string; identifier?: number; type?: string }) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n : // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets(event: Event) {\n const path = is.func(event.composedPath)\n ? (event.composedPath() as Element[])\n : (event as unknown as { path: Element[] }).path\n\n return [\n domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords(): CoordsSetMember {\n return {\n page: { x: 0, y: 0 },\n client: { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent(coords: MockCoords) {\n const event = {\n coords,\n get page() {\n return this.coords.page\n },\n get client() {\n return this.coords.client\n },\n get timeStamp() {\n return this.coords.timeStamp\n },\n get pageX() {\n return this.coords.page.x\n },\n get pageY() {\n return this.coords.page.y\n },\n get clientX() {\n return this.coords.client.x\n },\n get clientY() {\n return this.coords.client.y\n },\n get pointerId() {\n return this.coords.pointerId\n },\n get target() {\n return this.coords.target\n },\n get type() {\n return this.coords.type\n },\n get pointerType() {\n return this.coords.pointerType\n },\n get buttons() {\n return this.coords.buttons\n },\n preventDefault() {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n" + ], + "mappings": "6EAwOO,SAAuBA,GA0C5B,MAzCc,CACZA,SACA,QAAIC,GACF,OAAOC,KAAKF,OAAOC,IACrB,EACA,UAAIE,GACF,OAAOD,KAAKF,OAAOG,MACrB,EACA,aAAIC,GACF,OAAOF,KAAKF,OAAOI,SACrB,EACA,SAAIC,GACF,OAAOH,KAAKF,OAAOC,KAAKK,CAC1B,EACA,SAAIC,GACF,OAAOL,KAAKF,OAAOC,KAAKO,CAC1B,EACA,WAAIC,GACF,OAAOP,KAAKF,OAAOG,OAAOG,CAC5B,EACA,WAAII,GACF,OAAOR,KAAKF,OAAOG,OAAOK,CAC5B,EACA,aAAIG,GACF,OAAOT,KAAKF,OAAOW,SACrB,EACA,UAAIC,GACF,OAAOV,KAAKF,OAAOY,MACrB,EACA,QAAIC,GACF,OAAOX,KAAKF,OAAOa,IACrB,EACA,eAAIC,GACF,OAAOZ,KAAKF,OAAOc,WACrB,EACA,WAAIC,GACF,OAAOb,KAAKF,OAAOe,OACrB,EACAC,iBAAkB,EAItB,E,mBAzQO,CAAoBC,EAAuBC,KAChDD,EAAKhB,KAAOgB,EAAKhB,MAAS,CAAC,EAC3BgB,EAAKhB,KAAKK,EAAIY,EAAIjB,KAAKK,EACvBW,EAAKhB,KAAKO,EAAIU,EAAIjB,KAAKO,EAEvBS,EAAKd,OAASc,EAAKd,QAAW,CAAC,EAC/Bc,EAAKd,OAAOG,EAAIY,EAAIf,OAAOG,EAC3BW,EAAKd,OAAOK,EAAIU,EAAIf,OAAOK,EAE3BS,EAAKb,UAAYc,EAAId,SACvB,E,8CAiMgCe,IAC9B,MAAMC,EAAOC,UAAGC,KAAKH,EAAMI,cACtBJ,EAAMI,eACNJ,EAAyCC,KAE9C,MAAO,CACLI,EAASC,iBAAiBL,EAAOA,EAAK,GAAMD,EAAMP,QAClDY,EAASC,iBAAiBN,EAAMO,eAEpC,E,yCAnI6BC,GACpBN,UAAGO,OAAOD,EAAQhB,WAAagB,EAAQhB,UAAagB,EAAQE,W,uBA4GtCF,GACtBN,UAAGS,OAAOH,EAAQb,aACrBa,EAAQb,YACRO,UAAGO,OAAOD,EAAQb,aAChB,MAACiB,OAAWA,EAAW,QAAS,MAAO,SAASJ,EAAQb,aAGxD,QAAQkB,KAAKL,EAAQd,MAAQ,KAAOc,aAAmBM,UAAIC,MACzD,QACA,Q,mFAeH,KACE,CACLjC,KAAM,CAAEK,EAAG,EAAGE,EAAG,GACjBL,OAAQ,CAAEG,EAAG,EAAGE,EAAG,GACnBJ,UAAW,I,iIA9MR,CAAwB+B,EAA4BC,EAAuBC,KAChFF,EAAUlC,KAAKK,EAAI+B,EAAIpC,KAAKK,EAAI8B,EAAKnC,KAAKK,EAC1C6B,EAAUlC,KAAKO,EAAI6B,EAAIpC,KAAKO,EAAI4B,EAAKnC,KAAKO,EAC1C2B,EAAUhC,OAAOG,EAAI+B,EAAIlC,OAAOG,EAAI8B,EAAKjC,OAAOG,EAChD6B,EAAUhC,OAAOK,EAAI6B,EAAIlC,OAAOK,EAAI4B,EAAKjC,OAAOK,EAChD2B,EAAU/B,UAAYiC,EAAIjC,UAAYgC,EAAKhC,SAC7C,E,yBAEO,CAA0B+B,EAA4BG,KAC3D,MAAMC,EAAKC,KAAKC,IAAIH,EAAMlC,UAAY,IAAM,MAE5C+B,EAAUlC,KAAKK,EAAIgC,EAAMrC,KAAKK,EAAIiC,EAClCJ,EAAUlC,KAAKO,EAAI8B,EAAMrC,KAAKO,EAAI+B,EAClCJ,EAAUhC,OAAOG,EAAIgC,EAAMnC,OAAOG,EAAIiC,EACtCJ,EAAUhC,OAAOK,EAAI8B,EAAMnC,OAAOK,EAAI+B,EACtCJ,EAAU/B,UAAYmC,CACxB,E,kBAyDO,CAAmBtB,EAAuByB,EAAiBtC,KAChE,MAAMuB,EAAUe,EAASC,OAAS,EAAIC,EAAeF,GAAYA,EAAS,GAE1EG,EAAUlB,EAASV,EAAKhB,MACxB6C,EAAYnB,EAASV,EAAKd,QAE1Bc,EAAKb,UAAYA,CACnB,E,sBA9D8B+B,IAC5BA,EAAUlC,KAAKK,EAAI,EACnB6B,EAAUlC,KAAKO,EAAI,EACnB2B,EAAUhC,OAAOG,EAAI,EACrB6B,EAAUhC,OAAOK,EAAI,CACvB,E,mBAgJO,CAAoBW,EAAmC4B,KAC5D,MAAMC,EAAWD,EAAc,IACzBE,EAAWF,EAAc,IACzBG,EAAUC,EAAahC,GACvBiC,EAAKF,EAAQ,GAAGF,GAAWE,EAAQ,GAAGF,GACtCK,EAAKH,EAAQ,GAAGD,GAAWC,EAAQ,GAAGD,GAG5C,OAFe,IAAMT,KAAKc,MAAMD,EAAID,GAAOZ,KAAKe,EAGlD,E,kBA3C0BpC,IACxB,IAAKA,EAAMwB,OACT,OAAO,KAGT,MAAMO,EAAUC,EAAahC,GACvBqC,EAAOhB,KAAKiB,IAAIP,EAAQ,GAAG7C,MAAO6C,EAAQ,GAAG7C,OAC7CqD,EAAOlB,KAAKiB,IAAIP,EAAQ,GAAG3C,MAAO2C,EAAQ,GAAG3C,OAC7CoD,EAAOnB,KAAKC,IAAIS,EAAQ,GAAG7C,MAAO6C,EAAQ,GAAG7C,OAC7CuD,EAAOpB,KAAKC,IAAIS,EAAQ,GAAG3C,MAAO2C,EAAQ,GAAG3C,OAEnD,MAAO,CACLD,EAAGkD,EACHhD,EAAGkD,EACHG,KAAML,EACNM,IAAKJ,EACLK,MAAOJ,EACPK,OAAQJ,EACRK,MAAON,EAAOH,EACdU,OAAQN,EAAOF,EAEnB,E,sBAEO,CAAuBvC,EAAmC4B,KAC/D,MAAMC,EAAWD,EAAc,IACzBE,EAAWF,EAAc,IACzBG,EAAUC,EAAahC,GAEvBiC,EAAKF,EAAQ,GAAGF,GAAWE,EAAQ,GAAGF,GACtCK,EAAKH,EAAQ,GAAGD,GAAWC,EAAQ,GAAGD,GAE5C,OAAO,EAAAkB,WAAMf,EAAIC,EACnB,EAxLA,IAAAe,EAAAC,EAAAC,QAAA,cACAC,EAAAF,EAAAC,QAAA,iBACA9C,EAG2C,EAAAgD,EAAAC,KAAA,GAAAD,KAAAE,WAAA,OAAAF,EAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAAG,QAAAH,GAAA,IAAAI,EAAAC,EAAAJ,GAAA,GAAAG,KAAAE,IAAAN,GAAA,OAAAI,EAAAG,IAAAP,GAAA,IAAAQ,EAAA,CAAAC,UAAA,MAAAC,EAAAC,OAAAC,gBAAAD,OAAAE,yBAAA,QAAAC,KAAAd,EAAA,eAAAc,GAAAH,OAAAI,UAAAC,eAAAC,KAAAjB,EAAAc,GAAA,KAAAI,EAAAR,EAAAC,OAAAE,yBAAAb,EAAAc,GAAA,KAAAI,MAAAX,KAAAW,EAAAC,KAAAR,OAAAC,eAAAJ,EAAAM,EAAAI,GAAAV,EAAAM,GAAAd,EAAAc,EAAA,QAAAN,EAAAL,QAAAH,EAAAI,KAAAe,IAAAnB,EAAAQ,IAAA,EAH3CY,CAAAtB,QAAA,eACAuB,EAAAxB,EAAAC,QAAA,YACAwB,EAAAzB,EAAAC,QAAA,SACAyB,EAAA1B,EAAAC,QAAA,oBAA2C,SAAAO,EAAAL,GAAA,sBAAAwB,QAAA,gBAAAvB,EAAA,IAAAuB,QAAApB,EAAA,IAAAoB,QAAA,OAAAnB,EAAAL,KAAAI,EAAAH,GAAAD,EAAA,UAAAH,EAAA4B,GAAA,OAAAA,KAAAvB,WAAAuB,EAAA,CAAAtB,QAAAsB,EAAA,CAuCpC,SAASC,EAAgBvE,GAC9B,OAAOA,aAAmBM,UAAIkE,OAASxE,aAAmBM,UAAIC,KAChE,CAGO,SAASkE,EAAMvF,EAAcc,EAAsC0E,GAOxE,OALAxF,EAAOA,GAAQ,QADfwF,EAAKA,GAAO,CAAC,GAGV/F,EAAIqB,EAASd,EAAO,KACvBwF,EAAG7F,EAAImB,EAASd,EAAO,KAEhBwF,CACT,CAEO,SAASxD,EAAUlB,EAAsC1B,GAa9D,OAZAA,EAAOA,GAAQ,CAAEK,EAAG,EAAGE,EAAG,GAGtB8F,UAAQC,eAAiBL,EAAgBvE,IAC3CyE,EAAM,SAAUzE,EAAS1B,GAEzBA,EAAKK,GAAKkG,OAAOC,QACjBxG,EAAKO,GAAKgG,OAAOE,SAEjBN,EAAM,OAAQzE,EAAS1B,GAGlBA,CACT,CAEO,SAAS6C,EAAYnB,EAAsBxB,GAUhD,OATAA,EAASA,GAAW,CAAC,EAEjBmG,UAAQC,eAAiBL,EAAgBvE,GAE3CyE,EAAM,SAAUzE,EAASxB,GAEzBiG,EAAM,SAAUzE,EAASxB,GAGpBA,CACT,CAeO,SAASgD,EAAahC,GAC3B,MAAM+B,EAAyB,GAuB/B,OApBI7B,UAAGsF,MAAMxF,IACX+B,EAAQ,GAAK/B,EAAM,GACnB+B,EAAQ,GAAK/B,EAAM,IAIA,aAAfA,EAAMN,KACqB,IAAzBM,EAAM+B,QAAQP,QAChBO,EAAQ,GAAK/B,EAAM+B,QAAQ,GAC3BA,EAAQ,GAAK/B,EAAMyF,eAAe,IACA,IAAzBzF,EAAM+B,QAAQP,SACvBO,EAAQ,GAAK/B,EAAMyF,eAAe,GAClC1D,EAAQ,GAAK/B,EAAMyF,eAAe,KAGpC1D,EAAQ,GAAK/B,EAAM+B,QAAQ,GAC3BA,EAAQ,GAAK/B,EAAM+B,QAAQ,IAIxBA,CACT,CAEO,SAASN,EAAeF,GAC7B,MAAMmE,EAAU,CACdxG,MAAO,EACPE,MAAO,EACPE,QAAS,EACTC,QAAS,EACToG,QAAS,EACTC,QAAS,GAKX,IAAK,MAAMpF,KAAWe,EACpB,IAAK,MAAMsE,KAAQH,EACjBA,EAAQG,IAAsBrF,EAAQqF,GAG1C,IAAK,MAAMA,KAAQH,EACjBA,EAAQG,IAAsBtE,EAASC,OAGzC,OAAOkE,CACT" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/raf.d.ts b/packages/@interactjs/utils/raf.d.ts new file mode 100644 index 000000000..b20dda4ce --- /dev/null +++ b/packages/@interactjs/utils/raf.d.ts @@ -0,0 +1,7 @@ +declare function init(global: Window | typeof globalThis): void; +declare const _default: { + request: (callback: FrameRequestCallback) => number; + cancel: (token: number) => void; + init: typeof init; +}; +export default _default; diff --git a/packages/@interactjs/utils/raf.js b/packages/@interactjs/utils/raf.js new file mode 100644 index 000000000..339f75fc4 --- /dev/null +++ b/packages/@interactjs/utils/raf.js @@ -0,0 +1,41 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +let lastTime = 0; +let request; +let cancel; +function init(global) { + request = global.requestAnimationFrame; + cancel = global.cancelAnimationFrame; + if (!request) { + const vendors = ['ms', 'moz', 'webkit', 'o']; + for (const vendor of vendors) { + request = global[`${vendor}RequestAnimationFrame`]; + cancel = global[`${vendor}CancelAnimationFrame`] || global[`${vendor}CancelRequestAnimationFrame`]; + } + } + request = request && request.bind(global); + cancel = cancel && cancel.bind(global); + if (!request) { + request = callback => { + const currTime = Date.now(); + const timeToCall = Math.max(0, 16 - (currTime - lastTime)); + const token = global.setTimeout(() => { + // eslint-disable-next-line n/no-callback-literal + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return token; + }; + cancel = token => clearTimeout(token); + } +} +var _default = exports.default = { + request: callback => request(callback), + cancel: token => cancel(token), + init +}; +//# sourceMappingURL=raf.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/raf.js.map b/packages/@interactjs/utils/raf.js.map new file mode 100644 index 000000000..78711b7f5 --- /dev/null +++ b/packages/@interactjs/utils/raf.js.map @@ -0,0 +1,35 @@ +{ + "version": 3, + "names": [ + "lastTime", + "request", + "cancel", + "init", + "global", + "requestAnimationFrame", + "cancelAnimationFrame", + "vendors", + "vendor", + "bind", + "callback", + "currTime", + "Date", + "now", + "timeToCall", + "Math", + "max", + "token", + "setTimeout", + "clearTimeout", + "_default", + "exports", + "default" + ], + "sources": [ + "raf.ts" + ], + "sourcesContent": [ + "let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init(global: Window | typeof globalThis) {\n request = global.requestAnimationFrame\n cancel = global.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n cancel =\n global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n }\n }\n\n request = request && request.bind(global)\n cancel = cancel && cancel.bind(global)\n\n if (!request) {\n request = (callback) => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n const token = global.setTimeout(() => {\n // eslint-disable-next-line n/no-callback-literal\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return token as any\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback: FrameRequestCallback) => request(callback),\n cancel: (token: number) => cancel(token),\n init,\n}\n" + ], + "mappings": ";;;;;;AAAA,IAAIA,QAAQ,GAAG,CAAC;AAChB,IAAIC,OAAqC;AACzC,IAAIC,MAAmC;AAEvC,SAASC,IAAIA,CAACC,MAAkC,EAAE;EAChDH,OAAO,GAAGG,MAAM,CAACC,qBAAqB;EACtCH,MAAM,GAAGE,MAAM,CAACE,oBAAoB;EAEpC,IAAI,CAACL,OAAO,EAAE;IACZ,MAAMM,OAAO,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;IAE5C,KAAK,MAAMC,MAAM,IAAID,OAAO,EAAE;MAC5BN,OAAO,GAAGG,MAAM,CAAE,GAAEI,MAAO,uBAAsB,CAA4B;MAC7EN,MAAM,GACJE,MAAM,CAAE,GAAEI,MAAO,sBAAqB,CAA2B,IACjEJ,MAAM,CAAE,GAAEI,MAAO,6BAA4B,CAA2B;IAC5E;EACF;EAEAP,OAAO,GAAGA,OAAO,IAAIA,OAAO,CAACQ,IAAI,CAACL,MAAM,CAAC;EACzCF,MAAM,GAAGA,MAAM,IAAIA,MAAM,CAACO,IAAI,CAACL,MAAM,CAAC;EAEtC,IAAI,CAACH,OAAO,EAAE;IACZA,OAAO,GAAIS,QAAQ,IAAK;MACtB,MAAMC,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;MAC3B,MAAMC,UAAU,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAIL,QAAQ,GAAGX,QAAQ,CAAC,CAAC;MAC1D,MAAMiB,KAAK,GAAGb,MAAM,CAACc,UAAU,CAAC,MAAM;QACpC;QACAR,QAAQ,CAACC,QAAQ,GAAGG,UAAU,CAAC;MACjC,CAAC,EAAEA,UAAU,CAAC;MAEdd,QAAQ,GAAGW,QAAQ,GAAGG,UAAU;MAChC,OAAOG,KAAK;IACd,CAAC;IAEDf,MAAM,GAAIe,KAAK,IAAKE,YAAY,CAACF,KAAK,CAAC;EACzC;AACF;AAAC,IAAAG,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEc;EACbrB,OAAO,EAAGS,QAA8B,IAAKT,OAAO,CAACS,QAAQ,CAAC;EAC9DR,MAAM,EAAGe,KAAa,IAAKf,MAAM,CAACe,KAAK,CAAC;EACxCd;AACF,CAAC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/raf.prod.js b/packages/@interactjs/utils/raf.prod.js new file mode 100644 index 000000000..1104d47c8 --- /dev/null +++ b/packages/@interactjs/utils/raf.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;let e,t,n=0;exports.default={request:t=>e(t),cancel:e=>t(e),init(a){if(e=a.requestAnimationFrame,t=a.cancelAnimationFrame,!e){const n=["ms","moz","webkit","o"];for(const o of n)e=a[o+"RequestAnimationFrame"],t=a[o+"CancelAnimationFrame"]||a[o+"CancelRequestAnimationFrame"]}e=e&&e.bind(a),t=t&&t.bind(a),e||(e=e=>{const t=Date.now(),o=Math.max(0,16-(t-n)),i=a.setTimeout((()=>{e(t+o)}),o);return n=t+o,i},t=e=>clearTimeout(e))}}; +//# sourceMappingURL=raf.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/raf.prod.js.map b/packages/@interactjs/utils/raf.prod.js.map new file mode 100644 index 000000000..2fe5cea7e --- /dev/null +++ b/packages/@interactjs/utils/raf.prod.js.map @@ -0,0 +1,34 @@ +{ + "version": 3, + "names": [ + "request", + "cancel", + "lastTime", + "exports", + "default", + "callback", + "token", + "init", + "global", + "requestAnimationFrame", + "cancelAnimationFrame", + "vendors", + "vendor", + "bind", + "currTime", + "Date", + "now", + "timeToCall", + "Math", + "max", + "setTimeout", + "clearTimeout" + ], + "sources": [ + "raf.ts" + ], + "sourcesContent": [ + "let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init(global: Window | typeof globalThis) {\n request = global.requestAnimationFrame\n cancel = global.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n cancel =\n global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n }\n }\n\n request = request && request.bind(global)\n cancel = cancel && cancel.bind(global)\n\n if (!request) {\n request = (callback) => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n const token = global.setTimeout(() => {\n // eslint-disable-next-line n/no-callback-literal\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return token as any\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback: FrameRequestCallback) => request(callback),\n cancel: (token: number) => cancel(token),\n init,\n}\n" + ], + "mappings": "8EAAA,IACIA,EACAC,EAFAC,EAAW,EAqCdC,QAAAC,QAEc,CACbJ,QAAUK,GAAmCL,EAAQK,GACrDJ,OAASK,GAAkBL,EAAOK,GAClCC,KAtCYC,GAIZ,GAHAR,EAAUQ,EAAOC,sBACjBR,EAASO,EAAOE,sBAEXV,EAAS,CACZ,MAAMW,EAAU,CAAC,KAAM,MAAO,SAAU,KAExC,IAAK,MAAMC,KAAUD,EACnBX,EAAUQ,EAAUI,EAAF,yBAClBX,EACEO,EAAUI,EAAF,yBACRJ,EAAUI,EAAF,8BAEd,CAEAZ,EAAUA,GAAWA,EAAQa,KAAKL,GAClCP,EAASA,GAAUA,EAAOY,KAAKL,GAE1BR,IACHA,EAAWK,IACT,MAAMS,EAAWC,KAAKC,MAChBC,EAAaC,KAAKC,IAAI,EAAG,IAAML,EAAWZ,IAC1CI,EAAQE,EAAOY,YAAW,KAE9Bf,EAASS,EAAWG,EAAW,GAC9BA,GAGH,OADAf,EAAWY,EAAWG,EACfX,CAAK,EAGdL,EAAUK,GAAUe,aAAaf,GAErC" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/rect.d.ts b/packages/@interactjs/utils/rect.d.ts new file mode 100644 index 000000000..94cceb7c8 --- /dev/null +++ b/packages/@interactjs/utils/rect.d.ts @@ -0,0 +1,11 @@ +import type { HasGetRect, RectResolvable, Rect, Point, FullRect, EdgeOptions } from '@interactjs/core/types'; +export declare function getStringOptionResult(value: any, target: HasGetRect, element: Node): ParentNode | Rect; +export declare function resolveRectLike(value: RectResolvable, target?: HasGetRect, element?: Node, functionArgs?: T): Rect; +export declare function toFullRect(rect: Rect): FullRect; +export declare function rectToXY(rect: Rect | Point): { + x: number; + y: number; +}; +export declare function xywhToTlbr>(rect: T): Rect & T; +export declare function tlbrToXywh(rect: Rect & Partial): Required & Point; +export declare function addEdges(edges: EdgeOptions, rect: Rect, delta: Point): void; diff --git a/packages/@interactjs/utils/rect.js b/packages/@interactjs/utils/rect.js new file mode 100644 index 000000000..b724b2bd1 --- /dev/null +++ b/packages/@interactjs/utils/rect.js @@ -0,0 +1,99 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.addEdges = addEdges; +exports.getStringOptionResult = getStringOptionResult; +exports.rectToXY = rectToXY; +exports.resolveRectLike = resolveRectLike; +exports.tlbrToXywh = tlbrToXywh; +exports.toFullRect = toFullRect; +exports.xywhToTlbr = xywhToTlbr; +var _domUtils = require("./domUtils"); +var _extend = _interopRequireDefault(require("./extend")); +var _is = _interopRequireDefault(require("./is")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function getStringOptionResult(value, target, element) { + if (value === 'parent') { + return (0, _domUtils.parentNode)(element); + } + if (value === 'self') { + return target.getRect(element); + } + return (0, _domUtils.closest)(element, value); +} +function resolveRectLike(value, target, element, functionArgs) { + let returnValue = value; + if (_is.default.string(returnValue)) { + returnValue = getStringOptionResult(returnValue, target, element); + } else if (_is.default.func(returnValue)) { + returnValue = returnValue(...functionArgs); + } + if (_is.default.element(returnValue)) { + returnValue = (0, _domUtils.getElementRect)(returnValue); + } + return returnValue; +} +function toFullRect(rect) { + var _rect$width, _rect$height; + const { + top, + left, + bottom, + right + } = rect; + const width = (_rect$width = rect.width) != null ? _rect$width : rect.right - rect.left; + const height = (_rect$height = rect.height) != null ? _rect$height : rect.bottom - rect.top; + return { + top, + left, + bottom, + right, + width, + height + }; +} +function rectToXY(rect) { + return rect && { + x: 'x' in rect ? rect.x : rect.left, + y: 'y' in rect ? rect.y : rect.top + }; +} +function xywhToTlbr(rect) { + if (rect && !('left' in rect && 'top' in rect)) { + rect = (0, _extend.default)({}, rect); + rect.left = rect.x || 0; + rect.top = rect.y || 0; + rect.right = rect.right || rect.left + rect.width; + rect.bottom = rect.bottom || rect.top + rect.height; + } + return rect; +} +function tlbrToXywh(rect) { + if (rect && !('x' in rect && 'y' in rect)) { + rect = (0, _extend.default)({}, rect); + rect.x = rect.left || 0; + rect.y = rect.top || 0; + rect.width = rect.width || (rect.right || 0) - rect.x; + rect.height = rect.height || (rect.bottom || 0) - rect.y; + } + return rect; +} +function addEdges(edges, rect, delta) { + if (edges.left) { + rect.left += delta.x; + } + if (edges.right) { + rect.right += delta.x; + } + if (edges.top) { + rect.top += delta.y; + } + if (edges.bottom) { + rect.bottom += delta.y; + } + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; +} +//# sourceMappingURL=rect.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/rect.js.map b/packages/@interactjs/utils/rect.js.map new file mode 100644 index 000000000..568ab4989 --- /dev/null +++ b/packages/@interactjs/utils/rect.js.map @@ -0,0 +1,53 @@ +{ + "version": 3, + "names": [ + "_domUtils", + "require", + "_extend", + "_interopRequireDefault", + "_is", + "obj", + "__esModule", + "default", + "getStringOptionResult", + "value", + "target", + "element", + "parentNode", + "getRect", + "closest", + "resolveRectLike", + "functionArgs", + "returnValue", + "is", + "string", + "func", + "getElementRect", + "toFullRect", + "rect", + "_rect$width", + "_rect$height", + "top", + "left", + "bottom", + "right", + "width", + "height", + "rectToXY", + "x", + "y", + "xywhToTlbr", + "extend", + "tlbrToXywh", + "addEdges", + "edges", + "delta" + ], + "sources": [ + "rect.ts" + ], + "sourcesContent": [ + "import type {\n HasGetRect,\n RectResolvable,\n Rect,\n Element,\n Point,\n FullRect,\n EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult(value: any, target: HasGetRect, element: Node) {\n if (value === 'parent') {\n return parentNode(element)\n }\n\n if (value === 'self') {\n return target.getRect(element as Element)\n }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike(\n value: RectResolvable,\n target?: HasGetRect,\n element?: Node,\n functionArgs?: T,\n) {\n let returnValue: any = value\n if (is.string(returnValue)) {\n returnValue = getStringOptionResult(returnValue, target, element)\n } else if (is.func(returnValue)) {\n returnValue = returnValue(...functionArgs)\n }\n\n if (is.element(returnValue)) {\n returnValue = getElementRect(returnValue)\n }\n\n return returnValue as Rect\n}\n\nexport function toFullRect(rect: Rect): FullRect {\n const { top, left, bottom, right } = rect\n const width = rect.width ?? rect.right - rect.left\n const height = rect.height ?? rect.bottom - rect.top\n\n return { top, left, bottom, right, width, height }\n}\n\nexport function rectToXY(rect: Rect | Point) {\n return (\n rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n )\n}\n\nexport function xywhToTlbr>(rect: T) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || rect.left + rect.width\n rect.bottom = rect.bottom || rect.top + rect.height\n }\n\n return rect as Rect & T\n}\n\nexport function tlbrToXywh(rect: Rect & Partial) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right || 0) - rect.x\n rect.height = rect.height || (rect.bottom || 0) - rect.y\n }\n\n return rect as FullRect & Point\n}\n\nexport function addEdges(edges: EdgeOptions, rect: Rect, delta: Point) {\n if (edges.left) {\n rect.left += delta.x\n }\n if (edges.right) {\n rect.right += delta.x\n }\n if (edges.top) {\n rect.top += delta.y\n }\n if (edges.bottom) {\n rect.bottom += delta.y\n }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n" + ], + "mappings": "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" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/rect.prod.js b/packages/@interactjs/utils/rect.prod.js new file mode 100644 index 000000000..52d203ac6 --- /dev/null +++ b/packages/@interactjs/utils/rect.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.addEdges=(t,e,o)=>{t.left&&(e.left+=o.x),t.right&&(e.right+=o.x),t.top&&(e.top+=o.y),t.bottom&&(e.bottom+=o.y),e.width=e.right-e.left,e.height=e.bottom-e.top},exports.getStringOptionResult=i,exports.rectToXY=t=>t&&{x:"x"in t?t.x:t.left,y:"y"in t?t.y:t.top},exports.resolveRectLike=(e,r,l,h)=>{let n=e;return o.default.string(n)?n=i(n,r,l):o.default.func(n)&&(n=n(...h)),o.default.element(n)&&(n=(0,t.getElementRect)(n)),n},exports.tlbrToXywh=t=>(!t||"x"in t&&"y"in t||((t=(0,e.default)({},t)).x=t.left||0,t.y=t.top||0,t.width=t.width||(t.right||0)-t.x,t.height=t.height||(t.bottom||0)-t.y),t),exports.toFullRect=t=>{var e,o;const{top:r,left:i,bottom:l,right:h}=t;return{top:r,left:i,bottom:l,right:h,width:null!=(e=t.width)?e:t.right-t.left,height:null!=(o=t.height)?o:t.bottom-t.top}},exports.xywhToTlbr=t=>(!t||"left"in t&&"top"in t||((t=(0,e.default)({},t)).left=t.x||0,t.top=t.y||0,t.right=t.right||t.left+t.width,t.bottom=t.bottom||t.top+t.height),t);var t=require("./domUtils"),e=r(require("./extend")),o=r(require("./is"));function r(t){return t&&t.__esModule?t:{default:t}}function i(e,o,r){return"parent"===e?(0,t.parentNode)(r):"self"===e?o.getRect(r):(0,t.closest)(r,e)} +//# sourceMappingURL=rect.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/rect.prod.js.map b/packages/@interactjs/utils/rect.prod.js.map new file mode 100644 index 000000000..a162f8cf3 --- /dev/null +++ b/packages/@interactjs/utils/rect.prod.js.map @@ -0,0 +1,47 @@ +{ + "version": 3, + "names": [ + "edges", + "rect", + "delta", + "left", + "x", + "right", + "top", + "y", + "bottom", + "width", + "height", + "value", + "target", + "element", + "functionArgs", + "returnValue", + "is", + "string", + "getStringOptionResult", + "func", + "getElementRect", + "extend", + "_rect$width", + "_rect$height", + "_domUtils", + "require", + "_extend", + "_interopRequireDefault", + "_is", + "obj", + "__esModule", + "default", + "parentNode", + "getRect", + "closest" + ], + "sources": [ + "rect.ts" + ], + "sourcesContent": [ + "import type {\n HasGetRect,\n RectResolvable,\n Rect,\n Element,\n Point,\n FullRect,\n EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult(value: any, target: HasGetRect, element: Node) {\n if (value === 'parent') {\n return parentNode(element)\n }\n\n if (value === 'self') {\n return target.getRect(element as Element)\n }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike(\n value: RectResolvable,\n target?: HasGetRect,\n element?: Node,\n functionArgs?: T,\n) {\n let returnValue: any = value\n if (is.string(returnValue)) {\n returnValue = getStringOptionResult(returnValue, target, element)\n } else if (is.func(returnValue)) {\n returnValue = returnValue(...functionArgs)\n }\n\n if (is.element(returnValue)) {\n returnValue = getElementRect(returnValue)\n }\n\n return returnValue as Rect\n}\n\nexport function toFullRect(rect: Rect): FullRect {\n const { top, left, bottom, right } = rect\n const width = rect.width ?? rect.right - rect.left\n const height = rect.height ?? rect.bottom - rect.top\n\n return { top, left, bottom, right, width, height }\n}\n\nexport function rectToXY(rect: Rect | Point) {\n return (\n rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n )\n}\n\nexport function xywhToTlbr>(rect: T) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || rect.left + rect.width\n rect.bottom = rect.bottom || rect.top + rect.height\n }\n\n return rect as Rect & T\n}\n\nexport function tlbrToXywh(rect: Rect & Partial) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right || 0) - rect.x\n rect.height = rect.height || (rect.bottom || 0) - rect.y\n }\n\n return rect as FullRect & Point\n}\n\nexport function addEdges(edges: EdgeOptions, rect: Rect, delta: Point) {\n if (edges.left) {\n rect.left += delta.x\n }\n if (edges.right) {\n rect.right += delta.x\n }\n if (edges.top) {\n rect.top += delta.y\n }\n if (edges.bottom) {\n rect.bottom += delta.y\n }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n" + ], + "mappings": "wEAyFO,CAAkBA,EAAoBC,EAAYC,KACnDF,EAAMG,OACRF,EAAKE,MAAQD,EAAME,GAEjBJ,EAAMK,QACRJ,EAAKI,OAASH,EAAME,GAElBJ,EAAMM,MACRL,EAAKK,KAAOJ,EAAMK,GAEhBP,EAAMQ,SACRP,EAAKO,QAAUN,EAAMK,GAGvBN,EAAKQ,MAAQR,EAAKI,MAAQJ,EAAKE,KAC/BF,EAAKS,OAAST,EAAKO,OAASP,EAAKK,GACnC,E,iDAnDyBL,GAErBA,GAAQ,CACNG,EAAG,MAAOH,EAAOA,EAAKG,EAAIH,EAAKE,KAC/BI,EAAG,MAAON,EAAOA,EAAKM,EAAIN,EAAKK,K,wBAhC9B,CACLK,EACAC,EACAC,EACAC,KAEA,IAAIC,EAAmBJ,EAWvB,OAVIK,UAAGC,OAAOF,GACZA,EAAcG,EAAsBH,EAAaH,EAAQC,GAChDG,UAAGG,KAAKJ,KACjBA,EAAcA,KAAeD,IAG3BE,UAAGH,QAAQE,KACbA,GAAc,EAAAK,kBAAeL,IAGxBA,CACT,E,mBAgC2Bd,KACrBA,GAAU,MAAOA,GAAQ,MAAOA,KAClCA,GAAO,EAAAoB,WAAO,CAAC,EAAGpB,IAEbG,EAAIH,EAAKE,MAAQ,EACtBF,EAAKM,EAAIN,EAAKK,KAAO,EACrBL,EAAKQ,MAAQR,EAAKQ,QAAUR,EAAKI,OAAS,GAAKJ,EAAKG,EACpDH,EAAKS,OAAST,EAAKS,SAAWT,EAAKO,QAAU,GAAKP,EAAKM,GAGlDN,G,mBAxCkBA,IAAsB,IAAAqB,EAAAC,EAC/C,MAAMjB,IAAEA,EAAGH,KAAEA,EAAIK,OAAEA,EAAMH,MAAEA,GAAUJ,EAIrC,MAAO,CAAEK,MAAKH,OAAMK,SAAQH,QAAOI,MAHX,OAAba,EAAGrB,EAAKQ,OAAKa,EAAIrB,EAAKI,MAAQJ,EAAKE,KAGJO,OAFhB,OAAda,EAAGtB,EAAKS,QAAMa,EAAItB,EAAKO,OAASP,EAAKK,IAGnD,E,mBAW4DL,KACtDA,GAAU,SAAUA,GAAQ,QAASA,KACvCA,GAAO,EAAAoB,WAAO,CAAC,EAAGpB,IAEbE,KAAOF,EAAKG,GAAK,EACtBH,EAAKK,IAAML,EAAKM,GAAK,EACrBN,EAAKI,MAAQJ,EAAKI,OAASJ,EAAKE,KAAOF,EAAKQ,MAC5CR,EAAKO,OAASP,EAAKO,QAAUP,EAAKK,IAAML,EAAKS,QAGxCT,GA/DT,IAAAuB,EAAAC,QAAA,cACAC,EAAAC,EAAAF,QAAA,aACAG,EAAAD,EAAAF,QAAA,SAAqB,SAAAE,EAAAE,GAAA,OAAAA,KAAAC,WAAAD,EAAA,CAAAE,QAAAF,EAAA,CAEd,SAASX,EAAsBP,EAAYC,EAAoBC,GACpE,MAAc,WAAVF,GACK,EAAAqB,cAAWnB,GAGN,SAAVF,EACKC,EAAOqB,QAAQpB,IAGjB,EAAAqB,WAAQrB,EAASF,EAC1B" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/shallowEqual.d.ts b/packages/@interactjs/utils/shallowEqual.d.ts new file mode 100644 index 000000000..303db68e9 --- /dev/null +++ b/packages/@interactjs/utils/shallowEqual.d.ts @@ -0,0 +1 @@ +export default function shallowEqual(left: any, right: any): boolean; diff --git a/packages/@interactjs/utils/shallowEqual.js b/packages/@interactjs/utils/shallowEqual.js new file mode 100644 index 000000000..7a4fc7ce1 --- /dev/null +++ b/packages/@interactjs/utils/shallowEqual.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = shallowEqual; +function shallowEqual(left, right) { + if (left === right) { + return true; + } + if (!left || !right) { + return false; + } + const leftKeys = Object.keys(left); + if (leftKeys.length !== Object.keys(right).length) { + return false; + } + for (const key of leftKeys) { + if (left[key] !== right[key]) { + return false; + } + } + return true; +} +//# sourceMappingURL=shallowEqual.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/shallowEqual.js.map b/packages/@interactjs/utils/shallowEqual.js.map new file mode 100644 index 000000000..7639ce12b --- /dev/null +++ b/packages/@interactjs/utils/shallowEqual.js.map @@ -0,0 +1,20 @@ +{ + "version": 3, + "names": [ + "shallowEqual", + "left", + "right", + "leftKeys", + "Object", + "keys", + "length", + "key" + ], + "sources": [ + "shallowEqual.ts" + ], + "sourcesContent": [ + "export default function shallowEqual(left: any, right: any) {\n if (left === right) {\n return true\n }\n\n if (!left || !right) {\n return false\n }\n\n const leftKeys = Object.keys(left)\n\n if (leftKeys.length !== Object.keys(right).length) {\n return false\n }\n\n for (const key of leftKeys) {\n if (left[key] !== right[key]) {\n return false\n }\n }\n\n return true\n}\n" + ], + "mappings": ";;;;;;AAAe,SAASA,YAAYA,CAACC,IAAS,EAAEC,KAAU,EAAE;EAC1D,IAAID,IAAI,KAAKC,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;EAEA,IAAI,CAACD,IAAI,IAAI,CAACC,KAAK,EAAE;IACnB,OAAO,KAAK;EACd;EAEA,MAAMC,QAAQ,GAAGC,MAAM,CAACC,IAAI,CAACJ,IAAI,CAAC;EAElC,IAAIE,QAAQ,CAACG,MAAM,KAAKF,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAACI,MAAM,EAAE;IACjD,OAAO,KAAK;EACd;EAEA,KAAK,MAAMC,GAAG,IAAIJ,QAAQ,EAAE;IAC1B,IAAIF,IAAI,CAACM,GAAG,CAAC,KAAKL,KAAK,CAACK,GAAG,CAAC,EAAE;MAC5B,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/shallowEqual.prod.js b/packages/@interactjs/utils/shallowEqual.prod.js new file mode 100644 index 000000000..8e1494b97 --- /dev/null +++ b/packages/@interactjs/utils/shallowEqual.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=(e,t)=>{if(e===t)return!0;if(!e||!t)return!1;const r=Object.keys(e);if(r.length!==Object.keys(t).length)return!1;for(const n of r)if(e[n]!==t[n])return!1;return!0}; +//# sourceMappingURL=shallowEqual.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/shallowEqual.prod.js.map b/packages/@interactjs/utils/shallowEqual.prod.js.map new file mode 100644 index 000000000..40c6877bf --- /dev/null +++ b/packages/@interactjs/utils/shallowEqual.prod.js.map @@ -0,0 +1,19 @@ +{ + "version": 3, + "names": [ + "left", + "right", + "leftKeys", + "Object", + "keys", + "length", + "key" + ], + "sources": [ + "shallowEqual.ts" + ], + "sourcesContent": [ + "export default function shallowEqual(left: any, right: any) {\n if (left === right) {\n return true\n }\n\n if (!left || !right) {\n return false\n }\n\n const leftKeys = Object.keys(left)\n\n if (leftKeys.length !== Object.keys(right).length) {\n return false\n }\n\n for (const key of leftKeys) {\n if (left[key] !== right[key]) {\n return false\n }\n }\n\n return true\n}\n" + ], + "mappings": "uEAAe,CAAsBA,EAAWC,KAC9C,GAAID,IAASC,EACX,OAAO,EAGT,IAAKD,IAASC,EACZ,OAAO,EAGT,MAAMC,EAAWC,OAAOC,KAAKJ,GAE7B,GAAIE,EAASG,SAAWF,OAAOC,KAAKH,GAAOI,OACzC,OAAO,EAGT,IAAK,MAAMC,KAAOJ,EAChB,GAAIF,EAAKM,KAASL,EAAMK,GACtB,OAAO,EAIX,OAAO,CACT" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/window.d.ts b/packages/@interactjs/utils/window.d.ts new file mode 100644 index 000000000..7e9946992 --- /dev/null +++ b/packages/@interactjs/utils/window.d.ts @@ -0,0 +1,7 @@ +export declare let realWindow: Window; +declare let win: Window; +export { win as window }; +export declare function init(window: Window & { + wrap?: (...args: any[]) => any; +}): void; +export declare function getWindow(node: any): any; diff --git a/packages/@interactjs/utils/window.js b/packages/@interactjs/utils/window.js new file mode 100644 index 000000000..4b152ae8e --- /dev/null +++ b/packages/@interactjs/utils/window.js @@ -0,0 +1,38 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.getWindow = getWindow; +exports.init = init; +exports.window = exports.realWindow = void 0; +var _isWindow = _interopRequireDefault(require("./isWindow")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +let realWindow = exports.realWindow = undefined; +let win = exports.window = undefined; +function init(window) { + // get wrapped window if using Shadow DOM polyfill + + exports.realWindow = realWindow = window; + + // create a TextNode + const el = window.document.createTextNode(''); + + // check if it's wrapped by a polyfill + if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) { + // use wrapped window + window = window.wrap(window); + } + exports.window = win = window; +} +if (typeof window !== 'undefined' && !!window) { + init(window); +} +function getWindow(node) { + if ((0, _isWindow.default)(node)) { + return node; + } + const rootNode = node.ownerDocument || node; + return rootNode.defaultView || win.window; +} +//# sourceMappingURL=window.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/window.js.map b/packages/@interactjs/utils/window.js.map new file mode 100644 index 000000000..3994a1a30 --- /dev/null +++ b/packages/@interactjs/utils/window.js.map @@ -0,0 +1,34 @@ +{ + "version": 3, + "names": [ + "_isWindow", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "realWindow", + "exports", + "undefined", + "win", + "window", + "init", + "el", + "document", + "createTextNode", + "ownerDocument", + "wrap", + "getWindow", + "node", + "isWindow", + "rootNode", + "defaultView" + ], + "sources": [ + "window.ts" + ], + "sourcesContent": [ + "import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init(window: Window & { wrap?: (...args: any[]) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n init(window)\n}\n\nexport function getWindow(node: any) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = node.ownerDocument || node\n\n return rootNode.defaultView || win.window\n}\n" + ], + "mappings": ";;;;;;;;AAAA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiC,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE1B,IAAIG,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAGE,SAAmB;AAE3C,IAAIC,GAAG,GAAAF,OAAA,CAAAG,MAAA,GAAGF,SAAmB;AAGtB,SAASG,IAAIA,CAACD,MAAmD,EAAE;EACxE;;EAEAH,OAAA,CAAAD,UAAA,GAAAA,UAAU,GAAGI,MAAM;;EAEnB;EACA,MAAME,EAAE,GAAGF,MAAM,CAACG,QAAQ,CAACC,cAAc,CAAC,EAAE,CAAC;;EAE7C;EACA,IAAIF,EAAE,CAACG,aAAa,KAAKL,MAAM,CAACG,QAAQ,IAAI,OAAOH,MAAM,CAACM,IAAI,KAAK,UAAU,IAAIN,MAAM,CAACM,IAAI,CAACJ,EAAE,CAAC,KAAKA,EAAE,EAAE;IACvG;IACAF,MAAM,GAAGA,MAAM,CAACM,IAAI,CAACN,MAAM,CAAC;EAC9B;EAEAH,OAAA,CAAAG,MAAA,GAAAD,GAAG,GAAGC,MAAM;AACd;AAEA,IAAI,OAAOA,MAAM,KAAK,WAAW,IAAI,CAAC,CAACA,MAAM,EAAE;EAC7CC,IAAI,CAACD,MAAM,CAAC;AACd;AAEO,SAASO,SAASA,CAACC,IAAS,EAAE;EACnC,IAAI,IAAAC,iBAAQ,EAACD,IAAI,CAAC,EAAE;IAClB,OAAOA,IAAI;EACb;EAEA,MAAME,QAAQ,GAAGF,IAAI,CAACH,aAAa,IAAIG,IAAI;EAE3C,OAAOE,QAAQ,CAACC,WAAW,IAAIZ,GAAG,CAACC,MAAM;AAC3C" +} \ No newline at end of file diff --git a/packages/@interactjs/utils/window.prod.js b/packages/@interactjs/utils/window.prod.js new file mode 100644 index 000000000..03e5fdb75 --- /dev/null +++ b/packages/@interactjs/utils/window.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.getWindow=e=>(0,o.default)(e)?e:(e.ownerDocument||e).defaultView||n.window,exports.init=d,exports.window=exports.realWindow=void 0;var e,o=(e=require("./isWindow"))&&e.__esModule?e:{default:e};let t=exports.realWindow=void 0,n=exports.window=void 0;function d(e){exports.realWindow=t=e;const o=e.document.createTextNode("");o.ownerDocument!==e.document&&"function"==typeof e.wrap&&e.wrap(o)===o&&(e=e.wrap(e)),exports.window=n=e}"undefined"!=typeof window&&window&&d(window); +//# sourceMappingURL=window.prod.js.map \ No newline at end of file diff --git a/packages/@interactjs/utils/window.prod.js.map b/packages/@interactjs/utils/window.prod.js.map new file mode 100644 index 000000000..de6180dc7 --- /dev/null +++ b/packages/@interactjs/utils/window.prod.js.map @@ -0,0 +1,31 @@ +{ + "version": 3, + "names": [ + "node", + "isWindow", + "ownerDocument", + "defaultView", + "win", + "window", + "obj", + "_isWindow", + "require", + "__esModule", + "default", + "realWindow", + "exports", + "undefined", + "init", + "el", + "document", + "createTextNode", + "wrap" + ], + "sources": [ + "window.ts" + ], + "sourcesContent": [ + "import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init(window: Window & { wrap?: (...args: any[]) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n init(window)\n}\n\nexport function getWindow(node: any) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = node.ownerDocument || node\n\n return rootNode.defaultView || win.window\n}\n" + ], + "mappings": "yEA4B0BA,IACpB,EAAAC,WAASD,GACJA,GAGQA,EAAKE,eAAiBF,GAEvBG,aAAeC,EAAIC,O,wDAnCrC,IAAiCC,EAAjCC,GAAiCD,EAAjCE,QAAA,gBAAiCF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAE1B,IAAIK,EAAUC,QAAAD,gBAAGE,EAEpBT,EAAGQ,QAAAP,YAAGQ,EAGH,SAASC,EAAKT,GAGnBO,QAAAD,aAAaN,EAGb,MAAMU,EAAKV,EAAOW,SAASC,eAAe,IAGtCF,EAAGb,gBAAkBG,EAAOW,UAAmC,mBAAhBX,EAAOa,MAAuBb,EAAOa,KAAKH,KAAQA,IAEnGV,EAASA,EAAOa,KAAKb,IAGvBO,QAAAP,OAAAD,EAAMC,CACR,CAEsB,oBAAXA,QAA4BA,QACrCS,EAAKT" +} \ No newline at end of file diff --git a/packages/interactjs/.npmignore b/packages/interactjs/.npmignore index ee83689f9..d5cdeb8b3 100644 --- a/packages/interactjs/.npmignore +++ b/packages/interactjs/.npmignore @@ -1,5 +1,6 @@ *.ts !*.d.ts +*.map.* *.spec.ts *.spec.js dist/docs diff --git a/packages/interactjs/README.md b/packages/interactjs/README.md index 8b9b17063..1824b547d 100644 --- a/packages/interactjs/README.md +++ b/packages/interactjs/README.md @@ -7,32 +7,31 @@

Gitter jsDelivr -Build Status +Build Status

Features include: - - **inertia** and **snapping** - - **multi-touch**, simultaneous interactions - - cross browser and device, supporting the **desktop and mobile** versions of - Chrome, Firefox and Opera as well as **Internet Explorer 9+** - - interaction with [**SVG**](http://interactjs.io/#use_in_svg_files) elements - - being **standalone and customizable** - - **not modifying the DOM** except to change the cursor (but you can disable - that) - -Installation ------------- - -* [npm](https://www.npmjs.org/): `npm install interactjs` -* [jsDelivr CDN](https://cdn.jsdelivr.net/npm/interactjs/): `` -* [unpkg CDN](https://unpkg.com/interactjs/): `` -* [Rails 5.1+](https://rubyonrails.org/): +- **inertia** and **snapping** +- **multi-touch**, simultaneous interactions +- cross browser and device, supporting the **desktop and mobile** versions of + Chrome, Firefox and Opera as well as **Internet Explorer 9+** +- interaction with [**SVG**](http://interactjs.io/#use_in_svg_files) elements +- being **standalone and customizable** +- **not modifying the DOM** except to change the cursor (but you can disable + that) + +## Installation + +- [npm](https://www.npmjs.org/): `npm install interactjs` +- [jsDelivr CDN](https://cdn.jsdelivr.net/npm/interactjs/): `` +- [unpkg CDN](https://unpkg.com/interactjs/): `` +- [Rails 5.1+](https://rubyonrails.org/): 1. `yarn add interactjs` 2. `//= require interactjs/interact` -* [Webjars SBT/Play 2](https://www.webjars.org/): `libraryDependencies ++= Seq("org.webjars.npm" % "interactjs" % version)` +- [Webjars SBT/Play 2](https://www.webjars.org/): `libraryDependencies ++= Seq("org.webjars.npm" % "interactjs" % version)` ### Typescript definitions @@ -43,13 +42,11 @@ definitions, but if you need the typings alone, you can install them with: npm install --save-dev @interactjs/types ``` -Documentation -------------- +## Documentation http://interactjs.io/docs -Example -------- +## Example ```javascript var pixelSize = 16; @@ -103,8 +100,7 @@ interact('.rainbow-pixel-canvas') See the above code in action at https://codepen.io/taye/pen/tCKAm -License -------- +## License interact.js is released under the [MIT License](http://taye.mit-license.org). diff --git a/packages/interactjs/dist/interact.js b/packages/interactjs/dist/interact.js new file mode 100644 index 000000000..2e9c8f075 --- /dev/null +++ b/packages/interactjs/dist/interact.js @@ -0,0 +1,7613 @@ +/** + * interact.js 1.10.25 + * + * Copyright (c) 2012-present Taye Adeyemi + * Released under the MIT License. + * https://raw.github.com/taye/interact.js/main/LICENSE + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.interact = factory()); +})(this, (function () { 'use strict'; + + function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); + } + return t; + } + function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); + } + return e; + } + function _typeof(o) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; + } + function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + Object.defineProperty(subClass, "prototype", { + writable: false + }); + if (superClass) _setPrototypeOf(subClass, superClass); + } + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + return _setPrototypeOf(o, p); + } + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + try { + Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); + return true; + } catch (e) { + return false; + } + } + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + return self; + } + function _possibleConstructorReturn(self, call) { + if (call && (typeof call === "object" || typeof call === "function")) { + return call; + } else if (call !== void 0) { + throw new TypeError("Derived constructors may only return object or undefined"); + } + return _assertThisInitialized(self); + } + function _createSuper(Derived) { + var hasNativeReflectConstruct = _isNativeReflectConstruct(); + return function _createSuperInternal() { + var Super = _getPrototypeOf(Derived), + result; + if (hasNativeReflectConstruct) { + var NewTarget = _getPrototypeOf(this).constructor; + result = Reflect.construct(Super, arguments, NewTarget); + } else { + result = Super.apply(this, arguments); + } + return _possibleConstructorReturn(this, result); + }; + } + function _superPropBase(object, property) { + while (!Object.prototype.hasOwnProperty.call(object, property)) { + object = _getPrototypeOf(object); + if (object === null) break; + } + return object; + } + function _get() { + if (typeof Reflect !== "undefined" && Reflect.get) { + _get = Reflect.get.bind(); + } else { + _get = function _get(target, property, receiver) { + var base = _superPropBase(target, property); + if (!base) return; + var desc = Object.getOwnPropertyDescriptor(base, property); + if (desc.get) { + return desc.get.call(arguments.length < 3 ? target : receiver); + } + return desc.value; + }; + } + return _get.apply(this, arguments); + } + function _toPrimitive(input, hint) { + if (typeof input !== "object" || input === null) return input; + var prim = input[Symbol.toPrimitive]; + if (prim !== undefined) { + var res = prim.call(input, hint || "default"); + if (typeof res !== "object") return res; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return (hint === "string" ? String : Number)(input); + } + function _toPropertyKey(arg) { + var key = _toPrimitive(arg, "string"); + return typeof key === "symbol" ? key : String(key); + } + + var isWindow = (function (thing) { + return !!(thing && thing.Window) && thing instanceof thing.Window; + }); + + var realWindow = undefined; + var win = undefined; + function init$3(window) { + // get wrapped window if using Shadow DOM polyfill + + realWindow = window; + + // create a TextNode + var el = window.document.createTextNode(''); + + // check if it's wrapped by a polyfill + if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) { + // use wrapped window + window = window.wrap(window); + } + win = window; + } + if (typeof window !== 'undefined' && !!window) { + init$3(window); + } + function getWindow(node) { + if (isWindow(node)) { + return node; + } + var rootNode = node.ownerDocument || node; + return rootNode.defaultView || win.window; + } + + var window$1 = function window(thing) { + return thing === win || isWindow(thing); + }; + var docFrag = function docFrag(thing) { + return object(thing) && thing.nodeType === 11; + }; + var object = function object(thing) { + return !!thing && _typeof(thing) === 'object'; + }; + var func = function func(thing) { + return typeof thing === 'function'; + }; + var number = function number(thing) { + return typeof thing === 'number'; + }; + var bool = function bool(thing) { + return typeof thing === 'boolean'; + }; + var string = function string(thing) { + return typeof thing === 'string'; + }; + var element = function element(thing) { + if (!thing || _typeof(thing) !== 'object') { + return false; + } + var _window = getWindow(thing) || win; + return /object|function/.test(typeof Element === "undefined" ? "undefined" : _typeof(Element)) ? thing instanceof Element || thing instanceof _window.Element : thing.nodeType === 1 && typeof thing.nodeName === 'string'; + }; + var plainObject = function plainObject(thing) { + return object(thing) && !!thing.constructor && /function Object\b/.test(thing.constructor.toString()); + }; + var array = function array(thing) { + return object(thing) && typeof thing.length !== 'undefined' && func(thing.splice); + }; + var is = { + window: window$1, + docFrag: docFrag, + object: object, + func: func, + number: number, + bool: bool, + string: string, + element: element, + plainObject: plainObject, + array: array + }; + + function install$g(scope) { + var actions = scope.actions, + Interactable = scope.Interactable, + defaults = scope.defaults; + Interactable.prototype.draggable = drag.draggable; + actions.map.drag = drag; + actions.methodDict.drag = 'draggable'; + defaults.actions.drag = drag.defaults; + } + function beforeMove(_ref) { + var interaction = _ref.interaction; + if (interaction.prepared.name !== 'drag') return; + var axis = interaction.prepared.axis; + if (axis === 'x') { + interaction.coords.cur.page.y = interaction.coords.start.page.y; + interaction.coords.cur.client.y = interaction.coords.start.client.y; + interaction.coords.velocity.client.y = 0; + interaction.coords.velocity.page.y = 0; + } else if (axis === 'y') { + interaction.coords.cur.page.x = interaction.coords.start.page.x; + interaction.coords.cur.client.x = interaction.coords.start.client.x; + interaction.coords.velocity.client.x = 0; + interaction.coords.velocity.page.x = 0; + } + } + function move$1(_ref2) { + var iEvent = _ref2.iEvent, + interaction = _ref2.interaction; + if (interaction.prepared.name !== 'drag') return; + var axis = interaction.prepared.axis; + if (axis === 'x' || axis === 'y') { + var opposite = axis === 'x' ? 'y' : 'x'; + iEvent.page[opposite] = interaction.coords.start.page[opposite]; + iEvent.client[opposite] = interaction.coords.start.client[opposite]; + iEvent.delta[opposite] = 0; + } + } + var draggable = function draggable(options) { + if (is.object(options)) { + this.options.drag.enabled = options.enabled !== false; + this.setPerAction('drag', options); + this.setOnEvents('drag', options); + if (/^(xy|x|y|start)$/.test(options.lockAxis)) { + this.options.drag.lockAxis = options.lockAxis; + } + if (/^(xy|x|y)$/.test(options.startAxis)) { + this.options.drag.startAxis = options.startAxis; + } + return this; + } + if (is.bool(options)) { + this.options.drag.enabled = options; + return this; + } + return this.options.drag; + }; + var drag = { + id: 'actions/drag', + install: install$g, + listeners: { + 'interactions:before-action-move': beforeMove, + 'interactions:action-resume': beforeMove, + // dragmove + 'interactions:action-move': move$1, + 'auto-start:check': function autoStartCheck(arg) { + var interaction = arg.interaction, + interactable = arg.interactable, + buttons = arg.buttons; + var dragOptions = interactable.options.drag; + if (!(dragOptions && dragOptions.enabled) || + // check mouseButton setting if the pointer is down + interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & interactable.options.drag.mouseButtons) === 0) { + return undefined; + } + arg.action = { + name: 'drag', + axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis + }; + return false; + } + }, + draggable: draggable, + beforeMove: beforeMove, + move: move$1, + defaults: { + startAxis: 'xy', + lockAxis: 'xy' + }, + getCursor: function getCursor() { + return 'move'; + }, + filterEventType: function filterEventType(type) { + return type.search('drag') === 0; + } + }; + var drag$1 = drag; + + var domObjects = { + init: init$2, + document: null, + DocumentFragment: null, + SVGElement: null, + SVGSVGElement: null, + SVGElementInstance: null, + Element: null, + HTMLElement: null, + Event: null, + Touch: null, + PointerEvent: null + }; + function blank() {} + var domObjects$1 = domObjects; + function init$2(window) { + var win = window; + domObjects.document = win.document; + domObjects.DocumentFragment = win.DocumentFragment || blank; + domObjects.SVGElement = win.SVGElement || blank; + domObjects.SVGSVGElement = win.SVGSVGElement || blank; + domObjects.SVGElementInstance = win.SVGElementInstance || blank; + domObjects.Element = win.Element || blank; + domObjects.HTMLElement = win.HTMLElement || domObjects.Element; + domObjects.Event = win.Event; + domObjects.Touch = win.Touch || blank; + domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent; + } + + var browser = { + init: init$1, + supportsTouch: null, + supportsPointerEvent: null, + isIOS7: null, + isIOS: null, + isIe9: null, + isOperaMobile: null, + prefixedMatchesSelector: null, + pEventTypes: null, + wheelEvent: null + }; + function init$1(window) { + var Element = domObjects$1.Element; + var navigator = window.navigator || {}; + + // Does the browser support touch input? + browser.supportsTouch = 'ontouchstart' in window || is.func(window.DocumentTouch) && domObjects$1.document instanceof window.DocumentTouch; + + // Does the browser support PointerEvents + // https://github.com/taye/interact.js/issues/703#issuecomment-471570492 + browser.supportsPointerEvent = navigator.pointerEnabled !== false && !!domObjects$1.PointerEvent; + browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform); + + // scrolling doesn't change the result of getClientRects on iOS 7 + browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\d]/.test(navigator.appVersion); + browser.isIe9 = /MSIE 9/.test(navigator.userAgent); + + // Opera Mobile must be handled differently + browser.isOperaMobile = navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent); + + // prefix matchesSelector + browser.prefixedMatchesSelector = 'matches' in Element.prototype ? 'matches' : 'webkitMatchesSelector' in Element.prototype ? 'webkitMatchesSelector' : 'mozMatchesSelector' in Element.prototype ? 'mozMatchesSelector' : 'oMatchesSelector' in Element.prototype ? 'oMatchesSelector' : 'msMatchesSelector'; + browser.pEventTypes = browser.supportsPointerEvent ? domObjects$1.PointerEvent === window.MSPointerEvent ? { + up: 'MSPointerUp', + down: 'MSPointerDown', + over: 'mouseover', + out: 'mouseout', + move: 'MSPointerMove', + cancel: 'MSPointerCancel' + } : { + up: 'pointerup', + down: 'pointerdown', + over: 'pointerover', + out: 'pointerout', + move: 'pointermove', + cancel: 'pointercancel' + } : null; + + // because Webkit and Opera still use 'mousewheel' event type + browser.wheelEvent = domObjects$1.document && 'onmousewheel' in domObjects$1.document ? 'mousewheel' : 'wheel'; + } + var browser$1 = browser; + + function nodeContains(parent, child) { + if (parent.contains) { + return parent.contains(child); + } + while (child) { + if (child === parent) { + return true; + } + child = child.parentNode; + } + return false; + } + function closest(element, selector) { + while (is.element(element)) { + if (matchesSelector(element, selector)) { + return element; + } + element = parentNode(element); + } + return null; + } + function parentNode(node) { + var parent = node.parentNode; + if (is.docFrag(parent)) { + // skip past #shado-root fragments + // tslint:disable-next-line + while ((parent = parent.host) && is.docFrag(parent)) { + continue; + } + return parent; + } + return parent; + } + function matchesSelector(element, selector) { + // remove /deep/ from selectors if shadowDOM polyfill is used + if (win !== realWindow) { + selector = selector.replace(/\/deep\//g, ' '); + } + return element[browser$1.prefixedMatchesSelector](selector); + } + var getParent = function getParent(el) { + return el.parentNode || el.host; + }; + + // Test for the element that's "above" all other qualifiers + function indexOfDeepestElement(elements) { + var deepestNodeParents = []; + var deepestNodeIndex; + for (var i = 0; i < elements.length; i++) { + var currentNode = elements[i]; + var deepestNode = elements[deepestNodeIndex]; + + // node may appear in elements array multiple times + if (!currentNode || i === deepestNodeIndex) { + continue; + } + if (!deepestNode) { + deepestNodeIndex = i; + continue; + } + var currentNodeParent = getParent(currentNode); + var deepestNodeParent = getParent(deepestNode); + + // check if the deepest or current are document.documentElement/rootElement + // - if the current node is, do nothing and continue + if (currentNodeParent === currentNode.ownerDocument) { + continue; + } + // - if deepest is, update with the current node and continue to next + else if (deepestNodeParent === currentNode.ownerDocument) { + deepestNodeIndex = i; + continue; + } + + // compare zIndex of siblings + if (currentNodeParent === deepestNodeParent) { + if (zIndexIsHigherThan(currentNode, deepestNode)) { + deepestNodeIndex = i; + } + continue; + } + + // populate the ancestry array for the latest deepest node + deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode); + var ancestryStart = void 0; + + // if the deepest node is an HTMLElement and the current node is a non root svg element + if (deepestNode instanceof domObjects$1.HTMLElement && currentNode instanceof domObjects$1.SVGElement && !(currentNode instanceof domObjects$1.SVGSVGElement)) { + // TODO: is this check necessary? Was this for HTML elements embedded in SVG? + if (currentNode === deepestNodeParent) { + continue; + } + ancestryStart = currentNode.ownerSVGElement; + } else { + ancestryStart = currentNode; + } + var currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument); + var commonIndex = 0; + + // get (position of closest common ancestor) + 1 + while (currentNodeParents[commonIndex] && currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]) { + commonIndex++; + } + var parents = [currentNodeParents[commonIndex - 1], currentNodeParents[commonIndex], deepestNodeParents[commonIndex]]; + if (parents[0]) { + var child = parents[0].lastChild; + while (child) { + if (child === parents[1]) { + deepestNodeIndex = i; + deepestNodeParents = currentNodeParents; + break; + } else if (child === parents[2]) { + break; + } + child = child.previousSibling; + } + } + } + return deepestNodeIndex; + } + function getNodeParents(node, limit) { + var parents = []; + var parent = node; + var parentParent; + while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) { + parents.unshift(parent); + parent = parentParent; + } + return parents; + } + function zIndexIsHigherThan(higherNode, lowerNode) { + var higherIndex = parseInt(getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0; + var lowerIndex = parseInt(getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0; + return higherIndex >= lowerIndex; + } + function matchesUpTo(element, selector, limit) { + while (is.element(element)) { + if (matchesSelector(element, selector)) { + return true; + } + element = parentNode(element); + if (element === limit) { + return matchesSelector(element, selector); + } + } + return false; + } + function getActualElement(element) { + return element.correspondingUseElement || element; + } + function getScrollXY(relevantWindow) { + relevantWindow = relevantWindow || win; + return { + x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft, + y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop + }; + } + function getElementClientRect(element) { + var clientRect = element instanceof domObjects$1.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]; + return clientRect && { + left: clientRect.left, + right: clientRect.right, + top: clientRect.top, + bottom: clientRect.bottom, + width: clientRect.width || clientRect.right - clientRect.left, + height: clientRect.height || clientRect.bottom - clientRect.top + }; + } + function getElementRect(element) { + var clientRect = getElementClientRect(element); + if (!browser$1.isIOS7 && clientRect) { + var scroll = getScrollXY(getWindow(element)); + clientRect.left += scroll.x; + clientRect.right += scroll.x; + clientRect.top += scroll.y; + clientRect.bottom += scroll.y; + } + return clientRect; + } + function getPath(node) { + var path = []; + while (node) { + path.push(node); + node = parentNode(node); + } + return path; + } + function trySelector(value) { + if (!is.string(value)) { + return false; + } + + // an exception will be raised if it is invalid + domObjects$1.document.querySelector(value); + return true; + } + + function extend(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + var ret = dest; + return ret; + } + + function getStringOptionResult(value, target, element) { + if (value === 'parent') { + return parentNode(element); + } + if (value === 'self') { + return target.getRect(element); + } + return closest(element, value); + } + function resolveRectLike(value, target, element, functionArgs) { + var returnValue = value; + if (is.string(returnValue)) { + returnValue = getStringOptionResult(returnValue, target, element); + } else if (is.func(returnValue)) { + returnValue = returnValue.apply(void 0, functionArgs); + } + if (is.element(returnValue)) { + returnValue = getElementRect(returnValue); + } + return returnValue; + } + function rectToXY(rect) { + return rect && { + x: 'x' in rect ? rect.x : rect.left, + y: 'y' in rect ? rect.y : rect.top + }; + } + function xywhToTlbr(rect) { + if (rect && !('left' in rect && 'top' in rect)) { + rect = extend({}, rect); + rect.left = rect.x || 0; + rect.top = rect.y || 0; + rect.right = rect.right || rect.left + rect.width; + rect.bottom = rect.bottom || rect.top + rect.height; + } + return rect; + } + function tlbrToXywh(rect) { + if (rect && !('x' in rect && 'y' in rect)) { + rect = extend({}, rect); + rect.x = rect.left || 0; + rect.y = rect.top || 0; + rect.width = rect.width || (rect.right || 0) - rect.x; + rect.height = rect.height || (rect.bottom || 0) - rect.y; + } + return rect; + } + function addEdges(edges, rect, delta) { + if (edges.left) { + rect.left += delta.x; + } + if (edges.right) { + rect.right += delta.x; + } + if (edges.top) { + rect.top += delta.y; + } + if (edges.bottom) { + rect.bottom += delta.y; + } + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + + function getOriginXY(target, element, actionName) { + var actionOptions = actionName && target.options[actionName]; + var actionOrigin = actionOptions && actionOptions.origin; + var origin = actionOrigin || target.options.origin; + var originRect = resolveRectLike(origin, target, element, [target && element]); + return rectToXY(originRect) || { + x: 0, + y: 0 + }; + } + + function normalize(type, listeners) { + var filter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (_typeOrPrefix) { + return true; + }; + var result = arguments.length > 3 ? arguments[3] : undefined; + result = result || {}; + if (is.string(type) && type.search(' ') !== -1) { + type = split(type); + } + if (is.array(type)) { + type.forEach(function (t) { + return normalize(t, listeners, filter, result); + }); + return result; + } + + // before: type = [{ drag: () => {} }], listeners = undefined + // after: type = '' , listeners = [{ drag: () => {} }] + if (is.object(type)) { + listeners = type; + type = ''; + } + if (is.func(listeners) && filter(type)) { + result[type] = result[type] || []; + result[type].push(listeners); + } else if (is.array(listeners)) { + for (var _i2 = 0, _listeners2 = listeners; _i2 < _listeners2.length; _i2++) { + var l = _listeners2[_i2]; + normalize(type, l, filter, result); + } + } else if (is.object(listeners)) { + for (var prefix in listeners) { + var combinedTypes = split(prefix).map(function (p) { + return "".concat(type).concat(p); + }); + normalize(combinedTypes, listeners[prefix], filter, result); + } + } + return result; + } + function split(type) { + return type.trim().split(/ +/); + } + + var hypot = (function (x, y) { + return Math.sqrt(x * x + y * y); + }); + + var VENDOR_PREFIXES = ['webkit', 'moz']; + function pointerExtend(dest, source) { + dest.__set || (dest.__set = {}); + var _loop = function _loop(prop) { + // skip deprecated prefixed properties + if (VENDOR_PREFIXES.some(function (prefix) { + return prop.indexOf(prefix) === 0; + })) return 1; // continue + if (typeof dest[prop] !== 'function' && prop !== '__set') { + Object.defineProperty(dest, prop, { + get: function get() { + if (prop in dest.__set) return dest.__set[prop]; + return dest.__set[prop] = source[prop]; + }, + set: function set(value) { + dest.__set[prop] = value; + }, + configurable: true + }); + } + }; + for (var prop in source) { + if (_loop(prop)) continue; + } + return dest; + } + + function copyCoords(dest, src) { + dest.page = dest.page || {}; + dest.page.x = src.page.x; + dest.page.y = src.page.y; + dest.client = dest.client || {}; + dest.client.x = src.client.x; + dest.client.y = src.client.y; + dest.timeStamp = src.timeStamp; + } + function setCoordDeltas(targetObj, prev, cur) { + targetObj.page.x = cur.page.x - prev.page.x; + targetObj.page.y = cur.page.y - prev.page.y; + targetObj.client.x = cur.client.x - prev.client.x; + targetObj.client.y = cur.client.y - prev.client.y; + targetObj.timeStamp = cur.timeStamp - prev.timeStamp; + } + function setCoordVelocity(targetObj, delta) { + var dt = Math.max(delta.timeStamp / 1000, 0.001); + targetObj.page.x = delta.page.x / dt; + targetObj.page.y = delta.page.y / dt; + targetObj.client.x = delta.client.x / dt; + targetObj.client.y = delta.client.y / dt; + targetObj.timeStamp = dt; + } + function setZeroCoords(targetObj) { + targetObj.page.x = 0; + targetObj.page.y = 0; + targetObj.client.x = 0; + targetObj.client.y = 0; + } + function isNativePointer(pointer) { + return pointer instanceof domObjects$1.Event || pointer instanceof domObjects$1.Touch; + } + + // Get specified X/Y coords for mouse or event.touches[0] + function getXY(type, pointer, xy) { + xy = xy || {}; + type = type || 'page'; + xy.x = pointer[type + 'X']; + xy.y = pointer[type + 'Y']; + return xy; + } + function getPageXY(pointer, page) { + page = page || { + x: 0, + y: 0 + }; + + // Opera Mobile handles the viewport and scrolling oddly + if (browser$1.isOperaMobile && isNativePointer(pointer)) { + getXY('screen', pointer, page); + page.x += window.scrollX; + page.y += window.scrollY; + } else { + getXY('page', pointer, page); + } + return page; + } + function getClientXY(pointer, client) { + client = client || {}; + if (browser$1.isOperaMobile && isNativePointer(pointer)) { + // Opera Mobile handles the viewport and scrolling oddly + getXY('screen', pointer, client); + } else { + getXY('client', pointer, client); + } + return client; + } + function getPointerId(pointer) { + return is.number(pointer.pointerId) ? pointer.pointerId : pointer.identifier; + } + function setCoords(dest, pointers, timeStamp) { + var pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]; + getPageXY(pointer, dest.page); + getClientXY(pointer, dest.client); + dest.timeStamp = timeStamp; + } + function getTouchPair(event) { + var touches = []; + + // array of touches is supplied + if (is.array(event)) { + touches[0] = event[0]; + touches[1] = event[1]; + } + // an event + else { + if (event.type === 'touchend') { + if (event.touches.length === 1) { + touches[0] = event.touches[0]; + touches[1] = event.changedTouches[0]; + } else if (event.touches.length === 0) { + touches[0] = event.changedTouches[0]; + touches[1] = event.changedTouches[1]; + } + } else { + touches[0] = event.touches[0]; + touches[1] = event.touches[1]; + } + } + return touches; + } + function pointerAverage(pointers) { + var average = { + pageX: 0, + pageY: 0, + clientX: 0, + clientY: 0, + screenX: 0, + screenY: 0 + }; + for (var _i2 = 0; _i2 < pointers.length; _i2++) { + var pointer = pointers[_i2]; + for (var prop in average) { + average[prop] += pointer[prop]; + } + } + for (var _prop in average) { + average[_prop] /= pointers.length; + } + return average; + } + function touchBBox(event) { + if (!event.length) { + return null; + } + var touches = getTouchPair(event); + var minX = Math.min(touches[0].pageX, touches[1].pageX); + var minY = Math.min(touches[0].pageY, touches[1].pageY); + var maxX = Math.max(touches[0].pageX, touches[1].pageX); + var maxY = Math.max(touches[0].pageY, touches[1].pageY); + return { + x: minX, + y: minY, + left: minX, + top: minY, + right: maxX, + bottom: maxY, + width: maxX - minX, + height: maxY - minY + }; + } + function touchDistance(event, deltaSource) { + var sourceX = deltaSource + 'X'; + var sourceY = deltaSource + 'Y'; + var touches = getTouchPair(event); + var dx = touches[0][sourceX] - touches[1][sourceX]; + var dy = touches[0][sourceY] - touches[1][sourceY]; + return hypot(dx, dy); + } + function touchAngle(event, deltaSource) { + var sourceX = deltaSource + 'X'; + var sourceY = deltaSource + 'Y'; + var touches = getTouchPair(event); + var dx = touches[1][sourceX] - touches[0][sourceX]; + var dy = touches[1][sourceY] - touches[0][sourceY]; + var angle = 180 * Math.atan2(dy, dx) / Math.PI; + return angle; + } + function getPointerType(pointer) { + return is.string(pointer.pointerType) ? pointer.pointerType : is.number(pointer.pointerType) ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType] : + // if the PointerEvent API isn't available, then the "pointer" must + // be either a MouseEvent, TouchEvent, or Touch object + /touch/.test(pointer.type || '') || pointer instanceof domObjects$1.Touch ? 'touch' : 'mouse'; + } + + // [ event.target, event.currentTarget ] + function getEventTargets(event) { + var path = is.func(event.composedPath) ? event.composedPath() : event.path; + return [getActualElement(path ? path[0] : event.target), getActualElement(event.currentTarget)]; + } + function newCoords() { + return { + page: { + x: 0, + y: 0 + }, + client: { + x: 0, + y: 0 + }, + timeStamp: 0 + }; + } + function coordsToEvent(coords) { + var event = { + coords: coords, + get page() { + return this.coords.page; + }, + get client() { + return this.coords.client; + }, + get timeStamp() { + return this.coords.timeStamp; + }, + get pageX() { + return this.coords.page.x; + }, + get pageY() { + return this.coords.page.y; + }, + get clientX() { + return this.coords.client.x; + }, + get clientY() { + return this.coords.client.y; + }, + get pointerId() { + return this.coords.pointerId; + }, + get target() { + return this.coords.target; + }, + get type() { + return this.coords.type; + }, + get pointerType() { + return this.coords.pointerType; + }, + get buttons() { + return this.coords.buttons; + }, + preventDefault: function preventDefault() {} + }; + return event; + } + + var BaseEvent = /*#__PURE__*/function () { + function BaseEvent(interaction) { + _classCallCheck(this, BaseEvent); + /** @internal */ + _defineProperty(this, "immediatePropagationStopped", false); + _defineProperty(this, "propagationStopped", false); + this._interaction = interaction; + } + _createClass(BaseEvent, [{ + key: "preventDefault", + value: function preventDefault() {} + + /** + * Don't call any other listeners (even on the current target) + */ + }, { + key: "stopPropagation", + value: function stopPropagation() { + this.propagationStopped = true; + } + + /** + * Don't call listeners on the remaining targets + */ + }, { + key: "stopImmediatePropagation", + value: function stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + }]); + return BaseEvent; + }(); + + // defined outside of class definition to avoid assignment of undefined during + // construction + + // getters and setters defined here to support typescript 3.6 and below which + // don't support getter and setters in .d.ts files + Object.defineProperty(BaseEvent.prototype, 'interaction', { + get: function get() { + return this._interaction._proxy; + }, + set: function set() {} + }); + + var remove = function remove(array, target) { + return array.splice(array.indexOf(target), 1); + }; + var merge = function merge(target, source) { + for (var _i2 = 0; _i2 < source.length; _i2++) { + var item = source[_i2]; + target.push(item); + } + return target; + }; + var from = function from(source) { + return merge([], source); + }; + var findIndex = function findIndex(array, func) { + for (var i = 0; i < array.length; i++) { + if (func(array[i], i, array)) { + return i; + } + } + return -1; + }; + var find = function find(array, func) { + return array[findIndex(array, func)]; + }; + + var DropEvent = /*#__PURE__*/function (_BaseEvent) { + _inherits(DropEvent, _BaseEvent); + var _super = _createSuper(DropEvent); + /** + * Class of events fired on dropzones during drags with acceptable targets. + */ + function DropEvent(dropState, dragEvent, type) { + var _this; + _classCallCheck(this, DropEvent); + _this = _super.call(this, dragEvent._interaction); + _defineProperty(_assertThisInitialized(_this), "dropzone", void 0); + _defineProperty(_assertThisInitialized(_this), "dragEvent", void 0); + _defineProperty(_assertThisInitialized(_this), "relatedTarget", void 0); + _defineProperty(_assertThisInitialized(_this), "draggable", void 0); + _defineProperty(_assertThisInitialized(_this), "propagationStopped", false); + _defineProperty(_assertThisInitialized(_this), "immediatePropagationStopped", false); + var _ref = type === 'dragleave' ? dropState.prev : dropState.cur, + element = _ref.element, + dropzone = _ref.dropzone; + _this.type = type; + _this.target = element; + _this.currentTarget = element; + _this.dropzone = dropzone; + _this.dragEvent = dragEvent; + _this.relatedTarget = dragEvent.target; + _this.draggable = dragEvent.interactable; + _this.timeStamp = dragEvent.timeStamp; + return _this; + } + + /** + * If this is a `dropactivate` event, the dropzone element will be + * deactivated. + * + * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the + * dropzone element and more. + */ + _createClass(DropEvent, [{ + key: "reject", + value: function reject() { + var _this2 = this; + var dropState = this._interaction.dropState; + if (this.type !== 'dropactivate' && (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)) { + return; + } + dropState.prev.dropzone = this.dropzone; + dropState.prev.element = this.target; + dropState.rejected = true; + dropState.events.enter = null; + this.stopImmediatePropagation(); + if (this.type === 'dropactivate') { + var activeDrops = dropState.activeDrops; + var index = findIndex(activeDrops, function (_ref2) { + var dropzone = _ref2.dropzone, + element = _ref2.element; + return dropzone === _this2.dropzone && element === _this2.target; + }); + dropState.activeDrops.splice(index, 1); + var deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate'); + deactivateEvent.dropzone = this.dropzone; + deactivateEvent.target = this.target; + this.dropzone.fire(deactivateEvent); + } else { + this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave')); + } + } + }, { + key: "preventDefault", + value: function preventDefault() {} + }, { + key: "stopPropagation", + value: function stopPropagation() { + this.propagationStopped = true; + } + }, { + key: "stopImmediatePropagation", + value: function stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + }]); + return DropEvent; + }(BaseEvent); + + function install$f(scope) { + var actions = scope.actions, + interact = scope.interactStatic, + Interactable = scope.Interactable, + defaults = scope.defaults; + scope.usePlugin(drag$1); + Interactable.prototype.dropzone = function (options) { + return dropzoneMethod(this, options); + }; + Interactable.prototype.dropCheck = function (dragEvent, event, draggable, draggableElement, dropElement, rect) { + return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect); + }; + interact.dynamicDrop = function (newValue) { + if (is.bool(newValue)) { + // if (dragging && scope.dynamicDrop !== newValue && !newValue) { + // calcRects(dropzones) + // } + + scope.dynamicDrop = newValue; + return interact; + } + return scope.dynamicDrop; + }; + extend(actions.phaselessTypes, { + dragenter: true, + dragleave: true, + dropactivate: true, + dropdeactivate: true, + dropmove: true, + drop: true + }); + actions.methodDict.drop = 'dropzone'; + scope.dynamicDrop = false; + defaults.actions.drop = drop.defaults; + } + function collectDropzones(_ref, draggableElement) { + var interactables = _ref.interactables; + var drops = []; + + // collect all dropzones and their elements which qualify for a drop + for (var _i2 = 0, _interactables$list2 = interactables.list; _i2 < _interactables$list2.length; _i2++) { + var _dropzone = _interactables$list2[_i2]; + if (!_dropzone.options.drop.enabled) { + continue; + } + var accept = _dropzone.options.drop.accept; + + // test the draggable draggableElement against the dropzone's accept setting + if (is.element(accept) && accept !== draggableElement || is.string(accept) && !matchesSelector(draggableElement, accept) || is.func(accept) && !accept({ + dropzone: _dropzone, + draggableElement: draggableElement + })) { + continue; + } + for (var _i4 = 0, _dropzone$getAllEleme2 = _dropzone.getAllElements(); _i4 < _dropzone$getAllEleme2.length; _i4++) { + var dropzoneElement = _dropzone$getAllEleme2[_i4]; + if (dropzoneElement !== draggableElement) { + drops.push({ + dropzone: _dropzone, + element: dropzoneElement, + rect: _dropzone.getRect(dropzoneElement) + }); + } + } + } + return drops; + } + function fireActivationEvents(activeDrops, event) { + // loop through all active dropzones and trigger event + for (var _i6 = 0, _activeDrops$slice2 = activeDrops.slice(); _i6 < _activeDrops$slice2.length; _i6++) { + var _activeDrops$slice2$_ = _activeDrops$slice2[_i6], + _dropzone2 = _activeDrops$slice2$_.dropzone, + element = _activeDrops$slice2$_.element; + event.dropzone = _dropzone2; + + // set current element as event target + event.target = element; + _dropzone2.fire(event); + event.propagationStopped = event.immediatePropagationStopped = false; + } + } + + // return a new array of possible drops. getActiveDrops should always be + // called when a drag has just started or a drag event happens while + // dynamicDrop is true + function getActiveDrops(scope, dragElement) { + // get dropzones and their elements that could receive the draggable + var activeDrops = collectDropzones(scope, dragElement); + for (var _i8 = 0; _i8 < activeDrops.length; _i8++) { + var activeDrop = activeDrops[_i8]; + activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element); + } + return activeDrops; + } + function getDrop(_ref2, dragEvent, pointerEvent) { + var dropState = _ref2.dropState, + draggable = _ref2.interactable, + dragElement = _ref2.element; + var validDrops = []; + + // collect all dropzones and their elements which qualify for a drop + for (var _i10 = 0, _dropState$activeDrop2 = dropState.activeDrops; _i10 < _dropState$activeDrop2.length; _i10++) { + var _dropState$activeDrop3 = _dropState$activeDrop2[_i10], + _dropzone3 = _dropState$activeDrop3.dropzone, + dropzoneElement = _dropState$activeDrop3.element, + _rect = _dropState$activeDrop3.rect; + var isValid = _dropzone3.dropCheck(dragEvent, pointerEvent, draggable, dragElement, dropzoneElement, _rect); + validDrops.push(isValid ? dropzoneElement : null); + } // get the most appropriate dropzone based on DOM depth and order + var dropIndex = indexOfDeepestElement(validDrops); + return dropState.activeDrops[dropIndex] || null; + } + function getDropEvents(interaction, _pointerEvent, dragEvent) { + var dropState = interaction.dropState; + var dropEvents = { + enter: null, + leave: null, + activate: null, + deactivate: null, + move: null, + drop: null + }; + if (dragEvent.type === 'dragstart') { + dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate'); + dropEvents.activate.target = null; + dropEvents.activate.dropzone = null; + } + if (dragEvent.type === 'dragend') { + dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate'); + dropEvents.deactivate.target = null; + dropEvents.deactivate.dropzone = null; + } + if (dropState.rejected) { + return dropEvents; + } + if (dropState.cur.element !== dropState.prev.element) { + // if there was a previous dropzone, create a dragleave event + if (dropState.prev.dropzone) { + dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave'); + dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element; + dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone; + } + // if dropzone is not null, create a dragenter event + if (dropState.cur.dropzone) { + dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter'); + dragEvent.dragEnter = dropState.cur.element; + dragEvent.dropzone = dropState.cur.dropzone; + } + } + if (dragEvent.type === 'dragend' && dropState.cur.dropzone) { + dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop'); + dragEvent.dropzone = dropState.cur.dropzone; + dragEvent.relatedTarget = dropState.cur.element; + } + if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) { + dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove'); + dragEvent.dropzone = dropState.cur.dropzone; + } + return dropEvents; + } + function fireDropEvents(interaction, events) { + var dropState = interaction.dropState; + var activeDrops = dropState.activeDrops, + cur = dropState.cur, + prev = dropState.prev; + if (events.leave) { + prev.dropzone.fire(events.leave); + } + if (events.enter) { + cur.dropzone.fire(events.enter); + } + if (events.move) { + cur.dropzone.fire(events.move); + } + if (events.drop) { + cur.dropzone.fire(events.drop); + } + if (events.deactivate) { + fireActivationEvents(activeDrops, events.deactivate); + } + dropState.prev.dropzone = cur.dropzone; + dropState.prev.element = cur.element; + } + function onEventCreated(_ref3, scope) { + var interaction = _ref3.interaction, + iEvent = _ref3.iEvent, + event = _ref3.event; + if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') { + return; + } + var dropState = interaction.dropState; + if (scope.dynamicDrop) { + dropState.activeDrops = getActiveDrops(scope, interaction.element); + } + var dragEvent = iEvent; + var dropResult = getDrop(interaction, dragEvent, event); + + // update rejected status + dropState.rejected = dropState.rejected && !!dropResult && dropResult.dropzone === dropState.cur.dropzone && dropResult.element === dropState.cur.element; + dropState.cur.dropzone = dropResult && dropResult.dropzone; + dropState.cur.element = dropResult && dropResult.element; + dropState.events = getDropEvents(interaction, event, dragEvent); + } + function dropzoneMethod(interactable, options) { + if (is.object(options)) { + interactable.options.drop.enabled = options.enabled !== false; + if (options.listeners) { + var normalized = normalize(options.listeners); + // rename 'drop' to '' as it will be prefixed with 'drop' + var corrected = Object.keys(normalized).reduce(function (acc, type) { + var correctedType = /^(enter|leave)/.test(type) ? "drag".concat(type) : /^(activate|deactivate|move)/.test(type) ? "drop".concat(type) : type; + acc[correctedType] = normalized[type]; + return acc; + }, {}); + var prevListeners = interactable.options.drop.listeners; + prevListeners && interactable.off(prevListeners); + interactable.on(corrected); + interactable.options.drop.listeners = corrected; + } + if (is.func(options.ondrop)) { + interactable.on('drop', options.ondrop); + } + if (is.func(options.ondropactivate)) { + interactable.on('dropactivate', options.ondropactivate); + } + if (is.func(options.ondropdeactivate)) { + interactable.on('dropdeactivate', options.ondropdeactivate); + } + if (is.func(options.ondragenter)) { + interactable.on('dragenter', options.ondragenter); + } + if (is.func(options.ondragleave)) { + interactable.on('dragleave', options.ondragleave); + } + if (is.func(options.ondropmove)) { + interactable.on('dropmove', options.ondropmove); + } + if (/^(pointer|center)$/.test(options.overlap)) { + interactable.options.drop.overlap = options.overlap; + } else if (is.number(options.overlap)) { + interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0); + } + if ('accept' in options) { + interactable.options.drop.accept = options.accept; + } + if ('checker' in options) { + interactable.options.drop.checker = options.checker; + } + return interactable; + } + if (is.bool(options)) { + interactable.options.drop.enabled = options; + return interactable; + } + return interactable.options.drop; + } + function dropCheckMethod(interactable, dragEvent, event, draggable, draggableElement, dropElement, rect) { + var dropped = false; + + // if the dropzone has no rect (eg. display: none) + // call the custom dropChecker or just return false + if (!(rect = rect || interactable.getRect(dropElement))) { + return interactable.options.drop.checker ? interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement) : false; + } + var dropOverlap = interactable.options.drop.overlap; + if (dropOverlap === 'pointer') { + var origin = getOriginXY(draggable, draggableElement, 'drag'); + var page = getPageXY(dragEvent); + page.x += origin.x; + page.y += origin.y; + var horizontal = page.x > rect.left && page.x < rect.right; + var vertical = page.y > rect.top && page.y < rect.bottom; + dropped = horizontal && vertical; + } + var dragRect = draggable.getRect(draggableElement); + if (dragRect && dropOverlap === 'center') { + var cx = dragRect.left + dragRect.width / 2; + var cy = dragRect.top + dragRect.height / 2; + dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom; + } + if (dragRect && is.number(dropOverlap)) { + var overlapArea = Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top)); + var overlapRatio = overlapArea / (dragRect.width * dragRect.height); + dropped = overlapRatio >= dropOverlap; + } + if (interactable.options.drop.checker) { + dropped = interactable.options.drop.checker(dragEvent, event, dropped, interactable, dropElement, draggable, draggableElement); + } + return dropped; + } + var drop = { + id: 'actions/drop', + install: install$f, + listeners: { + 'interactions:before-action-start': function interactionsBeforeActionStart(_ref4) { + var interaction = _ref4.interaction; + if (interaction.prepared.name !== 'drag') { + return; + } + interaction.dropState = { + cur: { + dropzone: null, + element: null + }, + prev: { + dropzone: null, + element: null + }, + rejected: null, + events: null, + activeDrops: [] + }; + }, + 'interactions:after-action-start': function interactionsAfterActionStart(_ref5, scope) { + var interaction = _ref5.interaction, + event = _ref5.event, + dragEvent = _ref5.iEvent; + if (interaction.prepared.name !== 'drag') { + return; + } + var dropState = interaction.dropState; + + // reset active dropzones + dropState.activeDrops = []; + dropState.events = {}; + dropState.activeDrops = getActiveDrops(scope, interaction.element); + dropState.events = getDropEvents(interaction, event, dragEvent); + if (dropState.events.activate) { + fireActivationEvents(dropState.activeDrops, dropState.events.activate); + scope.fire('actions/drop:start', { + interaction: interaction, + dragEvent: dragEvent + }); + } + }, + 'interactions:action-move': onEventCreated, + 'interactions:after-action-move': function interactionsAfterActionMove(_ref6, scope) { + var interaction = _ref6.interaction, + dragEvent = _ref6.iEvent; + if (interaction.prepared.name !== 'drag') { + return; + } + var dropState = interaction.dropState; + fireDropEvents(interaction, dropState.events); + scope.fire('actions/drop:move', { + interaction: interaction, + dragEvent: dragEvent + }); + dropState.events = {}; + }, + 'interactions:action-end': function interactionsActionEnd(arg, scope) { + if (arg.interaction.prepared.name !== 'drag') { + return; + } + var interaction = arg.interaction, + dragEvent = arg.iEvent; + onEventCreated(arg, scope); + fireDropEvents(interaction, interaction.dropState.events); + scope.fire('actions/drop:end', { + interaction: interaction, + dragEvent: dragEvent + }); + }, + 'interactions:stop': function interactionsStop(_ref7) { + var interaction = _ref7.interaction; + if (interaction.prepared.name !== 'drag') { + return; + } + var dropState = interaction.dropState; + if (dropState) { + dropState.activeDrops = null; + dropState.events = null; + dropState.cur.dropzone = null; + dropState.cur.element = null; + dropState.prev.dropzone = null; + dropState.prev.element = null; + dropState.rejected = false; + } + } + }, + getActiveDrops: getActiveDrops, + getDrop: getDrop, + getDropEvents: getDropEvents, + fireDropEvents: fireDropEvents, + filterEventType: function filterEventType(type) { + return type.search('drag') === 0 || type.search('drop') === 0; + }, + defaults: { + enabled: false, + accept: null, + overlap: 'pointer' + } + }; + var drop$1 = drop; + + function install$e(scope) { + var actions = scope.actions, + Interactable = scope.Interactable, + defaults = scope.defaults; + Interactable.prototype.gesturable = function (options) { + if (is.object(options)) { + this.options.gesture.enabled = options.enabled !== false; + this.setPerAction('gesture', options); + this.setOnEvents('gesture', options); + return this; + } + if (is.bool(options)) { + this.options.gesture.enabled = options; + return this; + } + return this.options.gesture; + }; + actions.map.gesture = gesture; + actions.methodDict.gesture = 'gesturable'; + defaults.actions.gesture = gesture.defaults; + } + function updateGestureProps(_ref) { + var interaction = _ref.interaction, + iEvent = _ref.iEvent, + phase = _ref.phase; + if (interaction.prepared.name !== 'gesture') return; + var pointers = interaction.pointers.map(function (p) { + return p.pointer; + }); + var starting = phase === 'start'; + var ending = phase === 'end'; + var deltaSource = interaction.interactable.options.deltaSource; + iEvent.touches = [pointers[0], pointers[1]]; + if (starting) { + iEvent.distance = touchDistance(pointers, deltaSource); + iEvent.box = touchBBox(pointers); + iEvent.scale = 1; + iEvent.ds = 0; + iEvent.angle = touchAngle(pointers, deltaSource); + iEvent.da = 0; + interaction.gesture.startDistance = iEvent.distance; + interaction.gesture.startAngle = iEvent.angle; + } else if (ending || interaction.pointers.length < 2) { + var prevEvent = interaction.prevEvent; + iEvent.distance = prevEvent.distance; + iEvent.box = prevEvent.box; + iEvent.scale = prevEvent.scale; + iEvent.ds = 0; + iEvent.angle = prevEvent.angle; + iEvent.da = 0; + } else { + iEvent.distance = touchDistance(pointers, deltaSource); + iEvent.box = touchBBox(pointers); + iEvent.scale = iEvent.distance / interaction.gesture.startDistance; + iEvent.angle = touchAngle(pointers, deltaSource); + iEvent.ds = iEvent.scale - interaction.gesture.scale; + iEvent.da = iEvent.angle - interaction.gesture.angle; + } + interaction.gesture.distance = iEvent.distance; + interaction.gesture.angle = iEvent.angle; + if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) { + interaction.gesture.scale = iEvent.scale; + } + } + var gesture = { + id: 'actions/gesture', + before: ['actions/drag', 'actions/resize'], + install: install$e, + listeners: { + 'interactions:action-start': updateGestureProps, + 'interactions:action-move': updateGestureProps, + 'interactions:action-end': updateGestureProps, + 'interactions:new': function interactionsNew(_ref2) { + var interaction = _ref2.interaction; + interaction.gesture = { + angle: 0, + distance: 0, + scale: 1, + startAngle: 0, + startDistance: 0 + }; + }, + 'auto-start:check': function autoStartCheck(arg) { + if (arg.interaction.pointers.length < 2) { + return undefined; + } + var gestureOptions = arg.interactable.options.gesture; + if (!(gestureOptions && gestureOptions.enabled)) { + return undefined; + } + arg.action = { + name: 'gesture' + }; + return false; + } + }, + defaults: {}, + getCursor: function getCursor() { + return ''; + }, + filterEventType: function filterEventType(type) { + return type.search('gesture') === 0; + } + }; + var gesture$1 = gesture; + + function install$d(scope) { + var actions = scope.actions, + browser = scope.browser, + Interactable = scope.Interactable, + defaults = scope.defaults; + + // Less Precision with touch input + + resize.cursors = initCursors(browser); + resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10; + Interactable.prototype.resizable = function (options) { + return resizable(this, options, scope); + }; + actions.map.resize = resize; + actions.methodDict.resize = 'resizable'; + defaults.actions.resize = resize.defaults; + } + function resizeChecker(arg) { + var interaction = arg.interaction, + interactable = arg.interactable, + element = arg.element, + rect = arg.rect, + buttons = arg.buttons; + if (!rect) { + return undefined; + } + var page = extend({}, interaction.coords.cur.page); + var resizeOptions = interactable.options.resize; + if (!(resizeOptions && resizeOptions.enabled) || + // check mouseButton setting if the pointer is down + interaction.pointerIsDown && /mouse|pointer/.test(interaction.pointerType) && (buttons & resizeOptions.mouseButtons) === 0) { + return undefined; + } + + // if using resize.edges + if (is.object(resizeOptions.edges)) { + var resizeEdges = { + left: false, + right: false, + top: false, + bottom: false + }; + for (var edge in resizeEdges) { + resizeEdges[edge] = checkResizeEdge(edge, resizeOptions.edges[edge], page, interaction._latestPointer.eventTarget, element, rect, resizeOptions.margin || resize.defaultMargin); + } + resizeEdges.left = resizeEdges.left && !resizeEdges.right; + resizeEdges.top = resizeEdges.top && !resizeEdges.bottom; + if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) { + arg.action = { + name: 'resize', + edges: resizeEdges + }; + } + } else { + var right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin; + var bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin; + if (right || bottom) { + arg.action = { + name: 'resize', + axes: (right ? 'x' : '') + (bottom ? 'y' : '') + }; + } + } + return arg.action ? false : undefined; + } + function resizable(interactable, options, scope) { + if (is.object(options)) { + interactable.options.resize.enabled = options.enabled !== false; + interactable.setPerAction('resize', options); + interactable.setOnEvents('resize', options); + if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) { + interactable.options.resize.axis = options.axis; + } else if (options.axis === null) { + interactable.options.resize.axis = scope.defaults.actions.resize.axis; + } + if (is.bool(options.preserveAspectRatio)) { + interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio; + } else if (is.bool(options.square)) { + interactable.options.resize.square = options.square; + } + return interactable; + } + if (is.bool(options)) { + interactable.options.resize.enabled = options; + return interactable; + } + return interactable.options.resize; + } + function checkResizeEdge(name, value, page, element, interactableElement, rect, margin) { + // false, '', undefined, null + if (!value) { + return false; + } + + // true value, use pointer coords and element rect + if (value === true) { + // if dimensions are negative, "switch" edges + var width = is.number(rect.width) ? rect.width : rect.right - rect.left; + var height = is.number(rect.height) ? rect.height : rect.bottom - rect.top; + + // don't use margin greater than half the relevent dimension + margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2)); + if (width < 0) { + if (name === 'left') { + name = 'right'; + } else if (name === 'right') { + name = 'left'; + } + } + if (height < 0) { + if (name === 'top') { + name = 'bottom'; + } else if (name === 'bottom') { + name = 'top'; + } + } + if (name === 'left') { + var edge = width >= 0 ? rect.left : rect.right; + return page.x < edge + margin; + } + if (name === 'top') { + var _edge = height >= 0 ? rect.top : rect.bottom; + return page.y < _edge + margin; + } + if (name === 'right') { + return page.x > (width >= 0 ? rect.right : rect.left) - margin; + } + if (name === 'bottom') { + return page.y > (height >= 0 ? rect.bottom : rect.top) - margin; + } + } + + // the remaining checks require an element + if (!is.element(element)) { + return false; + } + return is.element(value) ? + // the value is an element to use as a resize handle + value === element : + // otherwise check if element matches value as selector + matchesUpTo(element, value, interactableElement); + } + + /* eslint-disable multiline-ternary */ + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + function initCursors(browser) { + return browser.isIe9 ? { + x: 'e-resize', + y: 's-resize', + xy: 'se-resize', + top: 'n-resize', + left: 'w-resize', + bottom: 's-resize', + right: 'e-resize', + topleft: 'se-resize', + bottomright: 'se-resize', + topright: 'ne-resize', + bottomleft: 'ne-resize' + } : { + x: 'ew-resize', + y: 'ns-resize', + xy: 'nwse-resize', + top: 'ns-resize', + left: 'ew-resize', + bottom: 'ns-resize', + right: 'ew-resize', + topleft: 'nwse-resize', + bottomright: 'nwse-resize', + topright: 'nesw-resize', + bottomleft: 'nesw-resize' + }; + } + /* eslint-enable multiline-ternary */ + + function start$7(_ref) { + var iEvent = _ref.iEvent, + interaction = _ref.interaction; + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) { + return; + } + var resizeEvent = iEvent; + var rect = interaction.rect; + interaction._rects = { + start: extend({}, rect), + corrected: extend({}, rect), + previous: extend({}, rect), + delta: { + left: 0, + right: 0, + width: 0, + top: 0, + bottom: 0, + height: 0 + } + }; + resizeEvent.edges = interaction.prepared.edges; + resizeEvent.rect = interaction._rects.corrected; + resizeEvent.deltaRect = interaction._rects.delta; + } + function move(_ref2) { + var iEvent = _ref2.iEvent, + interaction = _ref2.interaction; + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return; + var resizeEvent = iEvent; + var resizeOptions = interaction.interactable.options.resize; + var invert = resizeOptions.invert; + var invertible = invert === 'reposition' || invert === 'negate'; + var current = interaction.rect; + var _interaction$_rects = interaction._rects, + startRect = _interaction$_rects.start, + corrected = _interaction$_rects.corrected, + deltaRect = _interaction$_rects.delta, + previous = _interaction$_rects.previous; + extend(previous, corrected); + if (invertible) { + // if invertible, copy the current rect + extend(corrected, current); + if (invert === 'reposition') { + // swap edge values if necessary to keep width/height positive + if (corrected.top > corrected.bottom) { + var swap = corrected.top; + corrected.top = corrected.bottom; + corrected.bottom = swap; + } + if (corrected.left > corrected.right) { + var _swap = corrected.left; + corrected.left = corrected.right; + corrected.right = _swap; + } + } + } else { + // if not invertible, restrict to minimum of 0x0 rect + corrected.top = Math.min(current.top, startRect.bottom); + corrected.bottom = Math.max(current.bottom, startRect.top); + corrected.left = Math.min(current.left, startRect.right); + corrected.right = Math.max(current.right, startRect.left); + } + corrected.width = corrected.right - corrected.left; + corrected.height = corrected.bottom - corrected.top; + for (var edge in corrected) { + deltaRect[edge] = corrected[edge] - previous[edge]; + } + resizeEvent.edges = interaction.prepared.edges; + resizeEvent.rect = corrected; + resizeEvent.deltaRect = deltaRect; + } + function end$1(_ref3) { + var iEvent = _ref3.iEvent, + interaction = _ref3.interaction; + if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return; + var resizeEvent = iEvent; + resizeEvent.edges = interaction.prepared.edges; + resizeEvent.rect = interaction._rects.corrected; + resizeEvent.deltaRect = interaction._rects.delta; + } + function updateEventAxes(_ref4) { + var iEvent = _ref4.iEvent, + interaction = _ref4.interaction; + if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return; + var options = interaction.interactable.options; + var resizeEvent = iEvent; + if (options.resize.square) { + if (interaction.resizeAxes === 'y') { + resizeEvent.delta.x = resizeEvent.delta.y; + } else { + resizeEvent.delta.y = resizeEvent.delta.x; + } + resizeEvent.axes = 'xy'; + } else { + resizeEvent.axes = interaction.resizeAxes; + if (interaction.resizeAxes === 'x') { + resizeEvent.delta.y = 0; + } else if (interaction.resizeAxes === 'y') { + resizeEvent.delta.x = 0; + } + } + } + var resize = { + id: 'actions/resize', + before: ['actions/drag'], + install: install$d, + listeners: { + 'interactions:new': function interactionsNew(_ref5) { + var interaction = _ref5.interaction; + interaction.resizeAxes = 'xy'; + }, + 'interactions:action-start': function interactionsActionStart(arg) { + start$7(arg); + updateEventAxes(arg); + }, + 'interactions:action-move': function interactionsActionMove(arg) { + move(arg); + updateEventAxes(arg); + }, + 'interactions:action-end': end$1, + 'auto-start:check': resizeChecker + }, + defaults: { + square: false, + preserveAspectRatio: false, + axis: 'xy', + // use default margin + margin: NaN, + // object with props left, right, top, bottom which are + // true/false values to resize when the pointer is over that edge, + // CSS selectors to match the handles for each direction + // or the Elements for each handle + edges: null, + // a value of 'none' will limit the resize rect to a minimum of 0x0 + // 'negate' will alow the rect to have negative width/height + // 'reposition' will keep the width/height positive by swapping + // the top and bottom edges and/or swapping the left and right edges + invert: 'none' + }, + cursors: null, + getCursor: function getCursor(_ref6) { + var edges = _ref6.edges, + axis = _ref6.axis, + name = _ref6.name; + var cursors = resize.cursors; + var result = null; + if (axis) { + result = cursors[name + axis]; + } else if (edges) { + var cursorKey = ''; + for (var _i2 = 0, _ref8 = ['top', 'bottom', 'left', 'right']; _i2 < _ref8.length; _i2++) { + var edge = _ref8[_i2]; + if (edges[edge]) { + cursorKey += edge; + } + } + result = cursors[cursorKey]; + } + return result; + }, + filterEventType: function filterEventType(type) { + return type.search('resize') === 0; + }, + defaultMargin: null + }; + var resize$1 = resize; + + /* eslint-disable import/no-duplicates -- for typescript module augmentations */ + /* eslint-enable import/no-duplicates */ + + var actions = { + id: 'actions', + install: function install(scope) { + scope.usePlugin(gesture$1); + scope.usePlugin(resize$1); + scope.usePlugin(drag$1); + scope.usePlugin(drop$1); + } + }; + + var lastTime = 0; + var _request; + var _cancel; + function init(global) { + _request = global.requestAnimationFrame; + _cancel = global.cancelAnimationFrame; + if (!_request) { + var vendors = ['ms', 'moz', 'webkit', 'o']; + for (var _i2 = 0; _i2 < vendors.length; _i2++) { + var vendor = vendors[_i2]; + _request = global["".concat(vendor, "RequestAnimationFrame")]; + _cancel = global["".concat(vendor, "CancelAnimationFrame")] || global["".concat(vendor, "CancelRequestAnimationFrame")]; + } + } + _request = _request && _request.bind(global); + _cancel = _cancel && _cancel.bind(global); + if (!_request) { + _request = function request(callback) { + var currTime = Date.now(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var token = global.setTimeout(function () { + // eslint-disable-next-line n/no-callback-literal + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return token; + }; + _cancel = function cancel(token) { + return clearTimeout(token); + }; + } + } + var raf = { + request: function request(callback) { + return _request(callback); + }, + cancel: function cancel(token) { + return _cancel(token); + }, + init: init + }; + + function install$c(scope) { + var defaults = scope.defaults, + actions = scope.actions; + scope.autoScroll = autoScroll; + autoScroll.now = function () { + return scope.now(); + }; + actions.phaselessTypes.autoscroll = true; + defaults.perAction.autoScroll = autoScroll.defaults; + } + var autoScroll = { + defaults: { + enabled: false, + margin: 60, + // the item that is scrolled (Window or HTMLElement) + container: null, + // the scroll speed in pixels per second + speed: 300 + }, + now: Date.now, + interaction: null, + i: 0, + // the handle returned by window.setInterval + + // Direction each pulse is to scroll in + x: 0, + y: 0, + isScrolling: false, + prevTime: 0, + margin: 0, + speed: 0, + start: function start(interaction) { + autoScroll.isScrolling = true; + raf.cancel(autoScroll.i); + interaction.autoScroll = autoScroll; + autoScroll.interaction = interaction; + autoScroll.prevTime = autoScroll.now(); + autoScroll.i = raf.request(autoScroll.scroll); + }, + stop: function stop() { + autoScroll.isScrolling = false; + if (autoScroll.interaction) { + autoScroll.interaction.autoScroll = null; + } + raf.cancel(autoScroll.i); + }, + // scroll the window by the values in scroll.x/y + scroll: function scroll() { + var interaction = autoScroll.interaction; + var interactable = interaction.interactable, + element = interaction.element; + var actionName = interaction.prepared.name; + var options = interactable.options[actionName].autoScroll; + var container = getContainer(options.container, interactable, element); + var now = autoScroll.now(); + // change in time in seconds + var dt = (now - autoScroll.prevTime) / 1000; + // displacement + var s = options.speed * dt; + if (s >= 1) { + var scrollBy = { + x: autoScroll.x * s, + y: autoScroll.y * s + }; + if (scrollBy.x || scrollBy.y) { + var prevScroll = getScroll(container); + if (is.window(container)) { + container.scrollBy(scrollBy.x, scrollBy.y); + } else if (container) { + container.scrollLeft += scrollBy.x; + container.scrollTop += scrollBy.y; + } + var curScroll = getScroll(container); + var delta = { + x: curScroll.x - prevScroll.x, + y: curScroll.y - prevScroll.y + }; + if (delta.x || delta.y) { + interactable.fire({ + type: 'autoscroll', + target: element, + interactable: interactable, + delta: delta, + interaction: interaction, + container: container + }); + } + } + autoScroll.prevTime = now; + } + if (autoScroll.isScrolling) { + raf.cancel(autoScroll.i); + autoScroll.i = raf.request(autoScroll.scroll); + } + }, + check: function check(interactable, actionName) { + var _options$actionName$a; + var options = interactable.options; + return (_options$actionName$a = options[actionName].autoScroll) == null ? void 0 : _options$actionName$a.enabled; + }, + onInteractionMove: function onInteractionMove(_ref) { + var interaction = _ref.interaction, + pointer = _ref.pointer; + if (!(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))) { + return; + } + if (interaction.simulation) { + autoScroll.x = autoScroll.y = 0; + return; + } + var top; + var right; + var bottom; + var left; + var interactable = interaction.interactable, + element = interaction.element; + var actionName = interaction.prepared.name; + var options = interactable.options[actionName].autoScroll; + var container = getContainer(options.container, interactable, element); + if (is.window(container)) { + left = pointer.clientX < autoScroll.margin; + top = pointer.clientY < autoScroll.margin; + right = pointer.clientX > container.innerWidth - autoScroll.margin; + bottom = pointer.clientY > container.innerHeight - autoScroll.margin; + } else { + var rect = getElementClientRect(container); + left = pointer.clientX < rect.left + autoScroll.margin; + top = pointer.clientY < rect.top + autoScroll.margin; + right = pointer.clientX > rect.right - autoScroll.margin; + bottom = pointer.clientY > rect.bottom - autoScroll.margin; + } + autoScroll.x = right ? 1 : left ? -1 : 0; + autoScroll.y = bottom ? 1 : top ? -1 : 0; + if (!autoScroll.isScrolling) { + // set the autoScroll properties to those of the target + autoScroll.margin = options.margin; + autoScroll.speed = options.speed; + autoScroll.start(interaction); + } + } + }; + function getContainer(value, interactable, element) { + return (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element); + } + function getScroll(container) { + if (is.window(container)) { + container = window.document.body; + } + return { + x: container.scrollLeft, + y: container.scrollTop + }; + } + var autoScrollPlugin = { + id: 'auto-scroll', + install: install$c, + listeners: { + 'interactions:new': function interactionsNew(_ref3) { + var interaction = _ref3.interaction; + interaction.autoScroll = null; + }, + 'interactions:destroy': function interactionsDestroy(_ref4) { + var interaction = _ref4.interaction; + interaction.autoScroll = null; + autoScroll.stop(); + if (autoScroll.interaction) { + autoScroll.interaction = null; + } + }, + 'interactions:stop': autoScroll.stop, + 'interactions:action-move': function interactionsActionMove(arg) { + return autoScroll.onInteractionMove(arg); + } + } + }; + var autoScroll$1 = autoScrollPlugin; + + function warnOnce(method, message) { + var warned = false; + return function () { + if (!warned) { + win.console.warn(message); + warned = true; + } + return method.apply(this, arguments); + }; + } + function copyAction(dest, src) { + dest.name = src.name; + dest.axis = src.axis; + dest.edges = src.edges; + return dest; + } + + function install$b(scope) { + var Interactable = scope.Interactable; + Interactable.prototype.getAction = function getAction(pointer, event, interaction, element) { + var action = defaultActionChecker(this, event, interaction, element, scope); + if (this.options.actionChecker) { + return this.options.actionChecker(pointer, event, action, this, element, interaction); + } + return action; + }; + Interactable.prototype.ignoreFrom = warnOnce(function (newValue) { + return this._backCompatOption('ignoreFrom', newValue); + }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).'); + Interactable.prototype.allowFrom = warnOnce(function (newValue) { + return this._backCompatOption('allowFrom', newValue); + }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).'); + Interactable.prototype.actionChecker = actionChecker; + Interactable.prototype.styleCursor = styleCursor; + } + function defaultActionChecker(interactable, event, interaction, element, scope) { + var rect = interactable.getRect(element); + var buttons = event.buttons || { + 0: 1, + 1: 4, + 3: 8, + 4: 16 + }[event.button]; + var arg = { + action: null, + interactable: interactable, + interaction: interaction, + element: element, + rect: rect, + buttons: buttons + }; + scope.fire('auto-start:check', arg); + return arg.action; + } + function styleCursor(newValue) { + if (is.bool(newValue)) { + this.options.styleCursor = newValue; + return this; + } + if (newValue === null) { + delete this.options.styleCursor; + return this; + } + return this.options.styleCursor; + } + function actionChecker(checker) { + if (is.func(checker)) { + this.options.actionChecker = checker; + return this; + } + if (checker === null) { + delete this.options.actionChecker; + return this; + } + return this.options.actionChecker; + } + var InteractableMethods = { + id: 'auto-start/interactableMethods', + install: install$b + }; + + /* eslint-enable import/no-duplicates */ + + function install$a(scope) { + var interact = scope.interactStatic, + defaults = scope.defaults; + scope.usePlugin(InteractableMethods); + defaults.base.actionChecker = null; + defaults.base.styleCursor = true; + extend(defaults.perAction, { + manualStart: false, + max: Infinity, + maxPerElement: 1, + allowFrom: null, + ignoreFrom: null, + // only allow left button by default + // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#Return_value + mouseButtons: 1 + }); + interact.maxInteractions = function (newValue) { + return maxInteractions(newValue, scope); + }; + scope.autoStart = { + // Allow this many interactions to happen simultaneously + maxInteractions: Infinity, + withinInteractionLimit: withinInteractionLimit, + cursorElement: null + }; + } + function prepareOnDown(_ref, scope) { + var interaction = _ref.interaction, + pointer = _ref.pointer, + event = _ref.event, + eventTarget = _ref.eventTarget; + if (interaction.interacting()) return; + var actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); + } + function prepareOnMove(_ref2, scope) { + var interaction = _ref2.interaction, + pointer = _ref2.pointer, + event = _ref2.event, + eventTarget = _ref2.eventTarget; + if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || interaction.interacting()) return; + var actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope); + prepare(interaction, actionInfo, scope); + } + function startOnMove(arg, scope) { + var interaction = arg.interaction; + if (!interaction.pointerIsDown || interaction.interacting() || !interaction.pointerWasMoved || !interaction.prepared.name) { + return; + } + scope.fire('autoStart:before-start', arg); + var interactable = interaction.interactable; + var actionName = interaction.prepared.name; + if (actionName && interactable) { + // check manualStart and interaction limit + if (interactable.options[actionName].manualStart || !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)) { + interaction.stop(); + } else { + interaction.start(interaction.prepared, interactable, interaction.element); + setInteractionCursor(interaction, scope); + } + } + } + function clearCursorOnStop(_ref3, scope) { + var interaction = _ref3.interaction; + var interactable = interaction.interactable; + if (interactable && interactable.options.styleCursor) { + setCursor(interaction.element, '', scope); + } + } + + // Check if the current interactable supports the action. + // If so, return the validated action. Otherwise, return null + function validateAction(action, interactable, element, eventTarget, scope) { + if (interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) && interactable.options[action.name].enabled && withinInteractionLimit(interactable, element, action, scope)) { + return action; + } + return null; + } + function validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope) { + for (var i = 0, len = matches.length; i < len; i++) { + var match = matches[i]; + var matchElement = matchElements[i]; + var matchAction = match.getAction(pointer, event, interaction, matchElement); + if (!matchAction) { + continue; + } + var action = validateAction(matchAction, match, matchElement, eventTarget, scope); + if (action) { + return { + action: action, + interactable: match, + element: matchElement + }; + } + } + return { + action: null, + interactable: null, + element: null + }; + } + function getActionInfo(interaction, pointer, event, eventTarget, scope) { + var matches = []; + var matchElements = []; + var element = eventTarget; + function pushMatches(interactable) { + matches.push(interactable); + matchElements.push(element); + } + while (is.element(element)) { + matches = []; + matchElements = []; + scope.interactables.forEachMatch(element, pushMatches); + var actionInfo = validateMatches(interaction, pointer, event, matches, matchElements, eventTarget, scope); + if (actionInfo.action && !actionInfo.interactable.options[actionInfo.action.name].manualStart) { + return actionInfo; + } + element = parentNode(element); + } + return { + action: null, + interactable: null, + element: null + }; + } + function prepare(interaction, _ref4, scope) { + var action = _ref4.action, + interactable = _ref4.interactable, + element = _ref4.element; + action = action || { + name: null + }; + interaction.interactable = interactable; + interaction.element = element; + copyAction(interaction.prepared, action); + interaction.rect = interactable && action.name ? interactable.getRect(element) : null; + setInteractionCursor(interaction, scope); + scope.fire('autoStart:prepared', { + interaction: interaction + }); + } + function withinInteractionLimit(interactable, element, action, scope) { + var options = interactable.options; + var maxActions = options[action.name].max; + var maxPerElement = options[action.name].maxPerElement; + var autoStartMax = scope.autoStart.maxInteractions; + var activeInteractions = 0; + var interactableCount = 0; + var elementCount = 0; + + // no actions if any of these values == 0 + if (!(maxActions && maxPerElement && autoStartMax)) { + return false; + } + for (var _i2 = 0, _scope$interactions$l2 = scope.interactions.list; _i2 < _scope$interactions$l2.length; _i2++) { + var interaction = _scope$interactions$l2[_i2]; + var otherAction = interaction.prepared.name; + if (!interaction.interacting()) { + continue; + } + activeInteractions++; + if (activeInteractions >= autoStartMax) { + return false; + } + if (interaction.interactable !== interactable) { + continue; + } + interactableCount += otherAction === action.name ? 1 : 0; + if (interactableCount >= maxActions) { + return false; + } + if (interaction.element === element) { + elementCount++; + if (otherAction === action.name && elementCount >= maxPerElement) { + return false; + } + } + } + return autoStartMax > 0; + } + function maxInteractions(newValue, scope) { + if (is.number(newValue)) { + scope.autoStart.maxInteractions = newValue; + return this; + } + return scope.autoStart.maxInteractions; + } + function setCursor(element, cursor, scope) { + var prevCursorElement = scope.autoStart.cursorElement; + if (prevCursorElement && prevCursorElement !== element) { + prevCursorElement.style.cursor = ''; + } + element.ownerDocument.documentElement.style.cursor = cursor; + element.style.cursor = cursor; + scope.autoStart.cursorElement = cursor ? element : null; + } + function setInteractionCursor(interaction, scope) { + var interactable = interaction.interactable, + element = interaction.element, + prepared = interaction.prepared; + if (!(interaction.pointerType === 'mouse' && interactable && interactable.options.styleCursor)) { + // clear previous target element cursor + if (scope.autoStart.cursorElement) { + setCursor(scope.autoStart.cursorElement, '', scope); + } + return; + } + var cursor = ''; + if (prepared.name) { + var cursorChecker = interactable.options[prepared.name].cursorChecker; + if (is.func(cursorChecker)) { + cursor = cursorChecker(prepared, interactable, element, interaction._interacting); + } else { + cursor = scope.actions.map[prepared.name].getCursor(prepared); + } + } + setCursor(interaction.element, cursor || '', scope); + } + var autoStart$1 = { + id: 'auto-start/base', + before: ['actions'], + install: install$a, + listeners: { + 'interactions:down': prepareOnDown, + 'interactions:move': function interactionsMove(arg, scope) { + prepareOnMove(arg, scope); + startOnMove(arg, scope); + }, + 'interactions:stop': clearCursorOnStop + }, + maxInteractions: maxInteractions, + withinInteractionLimit: withinInteractionLimit, + validateAction: validateAction + }; + var autoStart$2 = autoStart$1; + + function beforeStart(_ref, scope) { + var interaction = _ref.interaction, + eventTarget = _ref.eventTarget, + dx = _ref.dx, + dy = _ref.dy; + if (interaction.prepared.name !== 'drag') return; + + // check if a drag is in the correct axis + var absX = Math.abs(dx); + var absY = Math.abs(dy); + var targetOptions = interaction.interactable.options.drag; + var startAxis = targetOptions.startAxis; + var currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'; + interaction.prepared.axis = targetOptions.lockAxis === 'start' ? currentAxis[0] // always lock to one axis even if currentAxis === 'xy' + : targetOptions.lockAxis; + + // if the movement isn't in the startAxis of the interactable + if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) { + interaction.prepared.name = null; + + // then try to get a drag from another ineractable + var element = eventTarget; + var getDraggable = function getDraggable(interactable) { + if (interactable === interaction.interactable) return; + var options = interaction.interactable.options.drag; + if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) { + var action = interactable.getAction(interaction.downPointer, interaction.downEvent, interaction, element); + if (action && action.name === 'drag' && checkStartAxis(currentAxis, interactable) && autoStart$2.validateAction(action, interactable, element, eventTarget, scope)) { + return interactable; + } + } + }; + + // check all interactables + while (is.element(element)) { + var interactable = scope.interactables.forEachMatch(element, getDraggable); + if (interactable) { + interaction.prepared.name = 'drag'; + interaction.interactable = interactable; + interaction.element = element; + break; + } + element = parentNode(element); + } + } + } + function checkStartAxis(startAxis, interactable) { + if (!interactable) { + return false; + } + var thisAxis = interactable.options.drag.startAxis; + return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis; + } + var dragAxis = { + id: 'auto-start/dragAxis', + listeners: { + 'autoStart:before-start': beforeStart + } + }; + + /* eslint-disable import/no-duplicates -- for typescript module augmentations */ + /* eslint-enable */ + + function install$9(scope) { + var defaults = scope.defaults; + scope.usePlugin(autoStart$2); + defaults.perAction.hold = 0; + defaults.perAction.delay = 0; + } + function getHoldDuration(interaction) { + var actionName = interaction.prepared && interaction.prepared.name; + if (!actionName) { + return null; + } + var options = interaction.interactable.options; + return options[actionName].hold || options[actionName].delay; + } + var hold = { + id: 'auto-start/hold', + install: install$9, + listeners: { + 'interactions:new': function interactionsNew(_ref) { + var interaction = _ref.interaction; + interaction.autoStartHoldTimer = null; + }, + 'autoStart:prepared': function autoStartPrepared(_ref2) { + var interaction = _ref2.interaction; + var hold = getHoldDuration(interaction); + if (hold > 0) { + interaction.autoStartHoldTimer = setTimeout(function () { + interaction.start(interaction.prepared, interaction.interactable, interaction.element); + }, hold); + } + }, + 'interactions:move': function interactionsMove(_ref3) { + var interaction = _ref3.interaction, + duplicate = _ref3.duplicate; + if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) { + clearTimeout(interaction.autoStartHoldTimer); + interaction.autoStartHoldTimer = null; + } + }, + // prevent regular down->move autoStart + 'autoStart:before-start': function autoStartBeforeStart(_ref4) { + var interaction = _ref4.interaction; + var holdDuration = getHoldDuration(interaction); + if (holdDuration > 0) { + interaction.prepared.name = null; + } + } + }, + getHoldDuration: getHoldDuration + }; + var hold$1 = hold; + + /* eslint-disable import/no-duplicates -- for typescript module augmentations */ + /* eslint-enable import/no-duplicates */ + + var autoStart = { + id: 'auto-start', + install: function install(scope) { + scope.usePlugin(autoStart$2); + scope.usePlugin(hold$1); + scope.usePlugin(dragAxis); + } + }; + + var preventDefault = function preventDefault(newValue) { + if (/^(always|never|auto)$/.test(newValue)) { + this.options.preventDefault = newValue; + return this; + } + if (is.bool(newValue)) { + this.options.preventDefault = newValue ? 'always' : 'never'; + return this; + } + return this.options.preventDefault; + }; + function checkAndPreventDefault(interactable, scope, event) { + var setting = interactable.options.preventDefault; + if (setting === 'never') return; + if (setting === 'always') { + event.preventDefault(); + return; + } + + // setting === 'auto' + + // if the browser supports passive event listeners and isn't running on iOS, + // don't preventDefault of touch{start,move} events. CSS touch-action and + // user-select should be used instead of calling event.preventDefault(). + if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) { + var doc = getWindow(event.target).document; + var docOptions = scope.getDocOptions(doc); + if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) { + return; + } + } + + // don't preventDefault of pointerdown events + if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) { + return; + } + + // don't preventDefault on editable elements + if (is.element(event.target) && matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')) { + return; + } + event.preventDefault(); + } + function onInteractionEvent(_ref) { + var interaction = _ref.interaction, + event = _ref.event; + if (interaction.interactable) { + interaction.interactable.checkAndPreventDefault(event); + } + } + function install$8(scope) { + var Interactable = scope.Interactable; + Interactable.prototype.preventDefault = preventDefault; + Interactable.prototype.checkAndPreventDefault = function (event) { + return checkAndPreventDefault(this, scope, event); + }; + + // prevent native HTML5 drag on interact.js target elements + scope.interactions.docEvents.push({ + type: 'dragstart', + listener: function listener(event) { + for (var _i2 = 0, _scope$interactions$l2 = scope.interactions.list; _i2 < _scope$interactions$l2.length; _i2++) { + var interaction = _scope$interactions$l2[_i2]; + if (interaction.element && (interaction.element === event.target || nodeContains(interaction.element, event.target))) { + interaction.interactable.checkAndPreventDefault(event); + return; + } + } + } + }); + } + var interactablePreventDefault = { + id: 'core/interactablePreventDefault', + install: install$8, + listeners: ['down', 'move', 'up', 'cancel'].reduce(function (acc, eventType) { + acc["interactions:".concat(eventType)] = onInteractionEvent; + return acc; + }, {}) + }; + + function isNonNativeEvent(type, actions) { + if (actions.phaselessTypes[type]) { + return true; + } + for (var name in actions.map) { + if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) { + return true; + } + } + return false; + } + + var visualizer = {}; + + /* eslint-enable import/no-duplicates */ + var CheckName = /*#__PURE__*/function (CheckName) { + CheckName["touchAction"] = "touchAction"; + CheckName["boxSizing"] = "boxSizing"; + CheckName["noListeners"] = "noListeners"; + return CheckName; + }(CheckName || {}); + var prefix = '[interact.js] '; + var links = { + touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action', + boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing' + }; + + // eslint-disable-next-line no-undef + var isProduction = "development" === 'production'; + function install$7(scope) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + logger = _ref.logger; + var Interactable = scope.Interactable, + defaults = scope.defaults; + scope.logger = logger || console; + defaults.base.devTools = { + ignore: {} + }; + Interactable.prototype.devTools = function (options) { + if (options) { + extend(this.options.devTools, options); + return this; + } + return this.options.devTools; + }; + + // can't set native events on non string targets without `addEventListener` prop + var _onOff = Interactable.prototype._onOff; + Interactable.prototype._onOff = function (method, typeArg, listenerArg, options, filter) { + if (is.string(this.target) || this.target.addEventListener) { + return _onOff.call(this, method, typeArg, listenerArg, options, filter); + } + if (is.object(typeArg) && !is.array(typeArg)) { + options = listenerArg; + listenerArg = null; + } + var normalizedListeners = normalize(typeArg, listenerArg, filter); + for (var type in normalizedListeners) { + if (isNonNativeEvent(type, scope.actions)) continue; + scope.logger.warn(prefix + "Can't add native \"".concat(type, "\" event listener to target without `addEventListener(type, listener, options)` prop.")); + } + return _onOff.call(this, method, normalizedListeners, options); + }; + scope.usePlugin(visualizer); + } + var checks = [{ + name: CheckName.touchAction, + perform: function perform(_ref2) { + var element = _ref2.element; + return !!element && !parentHasStyle(element, 'touchAction', /pan-|pinch|none/); + }, + getInfo: function getInfo(_ref3) { + var element = _ref3.element; + return [element, links.touchAction]; + }, + text: 'Consider adding CSS "touch-action: none" to this element\n' + }, { + name: CheckName.boxSizing, + perform: function perform(interaction) { + var element = interaction.element; + return interaction.prepared.name === 'resize' && element instanceof domObjects$1.HTMLElement && !hasStyle(element, 'boxSizing', /border-box/); + }, + text: 'Consider adding CSS "box-sizing: border-box" to this resizable element', + getInfo: function getInfo(_ref4) { + var element = _ref4.element; + return [element, links.boxSizing]; + } + }, { + name: CheckName.noListeners, + perform: function perform(interaction) { + var _interaction$interact; + var actionName = interaction.prepared.name; + var moveListeners = ((_interaction$interact = interaction.interactable) == null ? void 0 : _interaction$interact.events.types["".concat(actionName, "move")]) || []; + return !moveListeners.length; + }, + getInfo: function getInfo(interaction) { + return [interaction.prepared.name, interaction.interactable]; + }, + text: 'There are no listeners set for this action' + }]; + function hasStyle(element, prop, styleRe) { + var value = element.style[prop] || win.getComputedStyle(element)[prop]; + return styleRe.test((value || '').toString()); + } + function parentHasStyle(element, prop, styleRe) { + var parent = element; + while (is.element(parent)) { + if (hasStyle(parent, prop, styleRe)) { + return true; + } + parent = parentNode(parent); + } + return false; + } + var id = 'dev-tools'; + var defaultExport = isProduction ? { + id: id, + install: function install() {} + } : { + id: id, + install: install$7, + listeners: { + 'interactions:action-start': function interactionsActionStart(_ref5, scope) { + var interaction = _ref5.interaction; + for (var _i2 = 0; _i2 < checks.length; _i2++) { + var check = checks[_i2]; + var options = interaction.interactable && interaction.interactable.options; + if (!(options && options.devTools && options.devTools.ignore[check.name]) && check.perform(interaction)) { + var _scope$logger; + (_scope$logger = scope.logger).warn.apply(_scope$logger, [prefix + check.text].concat(check.getInfo(interaction))); + } + } + } + }, + checks: checks, + CheckName: CheckName, + links: links, + prefix: prefix + }; + var devTools = defaultExport; + + // tslint:disable-next-line ban-types + function clone(source) { + var dest = {}; + for (var prop in source) { + var value = source[prop]; + if (is.plainObject(value)) { + dest[prop] = clone(value); + } else if (is.array(value)) { + dest[prop] = from(value); + } else { + dest[prop] = value; + } + } + return dest; + } + + var Modification = /*#__PURE__*/function () { + function Modification(interaction) { + _classCallCheck(this, Modification); + _defineProperty(this, "states", []); + _defineProperty(this, "startOffset", { + left: 0, + right: 0, + top: 0, + bottom: 0 + }); + _defineProperty(this, "startDelta", void 0); + _defineProperty(this, "result", void 0); + _defineProperty(this, "endResult", void 0); + _defineProperty(this, "startEdges", void 0); + _defineProperty(this, "edges", void 0); + _defineProperty(this, "interaction", void 0); + this.interaction = interaction; + this.result = createResult(); + this.edges = { + left: false, + right: false, + top: false, + bottom: false + }; + } + _createClass(Modification, [{ + key: "start", + value: function start(_ref, pageCoords) { + var phase = _ref.phase; + var interaction = this.interaction; + var modifierList = getModifierList(interaction); + this.prepareStates(modifierList); + this.startEdges = extend({}, interaction.edges); + this.edges = extend({}, this.startEdges); + this.startOffset = getRectOffset(interaction.rect, pageCoords); + this.startDelta = { + x: 0, + y: 0 + }; + var arg = this.fillArg({ + phase: phase, + pageCoords: pageCoords, + preEnd: false + }); + this.result = createResult(); + this.startAll(arg); + var result = this.result = this.setAll(arg); + return result; + } + }, { + key: "fillArg", + value: function fillArg(arg) { + var interaction = this.interaction; + arg.interaction = interaction; + arg.interactable = interaction.interactable; + arg.element = interaction.element; + arg.rect || (arg.rect = interaction.rect); + arg.edges || (arg.edges = this.startEdges); + arg.startOffset = this.startOffset; + return arg; + } + }, { + key: "startAll", + value: function startAll(arg) { + for (var _i2 = 0, _this$states2 = this.states; _i2 < _this$states2.length; _i2++) { + var state = _this$states2[_i2]; + if (state.methods.start) { + arg.state = state; + state.methods.start(arg); + } + } + } + }, { + key: "setAll", + value: function setAll(arg) { + var phase = arg.phase, + preEnd = arg.preEnd, + skipModifiers = arg.skipModifiers, + unmodifiedRect = arg.rect, + unmodifiedEdges = arg.edges; + arg.coords = extend({}, arg.pageCoords); + arg.rect = extend({}, unmodifiedRect); + arg.edges = extend({}, unmodifiedEdges); + var states = skipModifiers ? this.states.slice(skipModifiers) : this.states; + var newResult = createResult(arg.coords, arg.rect); + for (var _i4 = 0; _i4 < states.length; _i4++) { + var _state$methods; + var state = states[_i4]; + var options = state.options; + var lastModifierCoords = extend({}, arg.coords); + var returnValue = null; + if ((_state$methods = state.methods) != null && _state$methods.set && this.shouldDo(options, preEnd, phase)) { + arg.state = state; + returnValue = state.methods.set(arg); + addEdges(arg.edges, arg.rect, { + x: arg.coords.x - lastModifierCoords.x, + y: arg.coords.y - lastModifierCoords.y + }); + } + newResult.eventProps.push(returnValue); + } + extend(this.edges, arg.edges); + newResult.delta.x = arg.coords.x - arg.pageCoords.x; + newResult.delta.y = arg.coords.y - arg.pageCoords.y; + newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left; + newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right; + newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top; + newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom; + var prevCoords = this.result.coords; + var prevRect = this.result.rect; + if (prevCoords && prevRect) { + var rectChanged = newResult.rect.left !== prevRect.left || newResult.rect.right !== prevRect.right || newResult.rect.top !== prevRect.top || newResult.rect.bottom !== prevRect.bottom; + newResult.changed = rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y; + } + return newResult; + } + }, { + key: "applyToInteraction", + value: function applyToInteraction(arg) { + var interaction = this.interaction; + var phase = arg.phase; + var curCoords = interaction.coords.cur; + var startCoords = interaction.coords.start; + var result = this.result, + startDelta = this.startDelta; + var curDelta = result.delta; + if (phase === 'start') { + extend(this.startDelta, result.delta); + } + for (var _i6 = 0, _ref3 = [[startCoords, startDelta], [curCoords, curDelta]]; _i6 < _ref3.length; _i6++) { + var _ref3$_i = _ref3[_i6], + coordsSet = _ref3$_i[0], + delta = _ref3$_i[1]; + coordsSet.page.x += delta.x; + coordsSet.page.y += delta.y; + coordsSet.client.x += delta.x; + coordsSet.client.y += delta.y; + } + var rectDelta = this.result.rectDelta; + var rect = arg.rect || interaction.rect; + rect.left += rectDelta.left; + rect.right += rectDelta.right; + rect.top += rectDelta.top; + rect.bottom += rectDelta.bottom; + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + }, { + key: "setAndApply", + value: function setAndApply(arg) { + var interaction = this.interaction; + var phase = arg.phase, + preEnd = arg.preEnd, + skipModifiers = arg.skipModifiers; + var result = this.setAll(this.fillArg({ + preEnd: preEnd, + phase: phase, + pageCoords: arg.modifiedCoords || interaction.coords.cur.page + })); + this.result = result; + + // don't fire an action move if a modifier would keep the event in the same + // cordinates as before + if (!result.changed && (!skipModifiers || skipModifiers < this.states.length) && interaction.interacting()) { + return false; + } + if (arg.modifiedCoords) { + var page = interaction.coords.cur.page; + var adjustment = { + x: arg.modifiedCoords.x - page.x, + y: arg.modifiedCoords.y - page.y + }; + result.coords.x += adjustment.x; + result.coords.y += adjustment.y; + result.delta.x += adjustment.x; + result.delta.y += adjustment.y; + } + this.applyToInteraction(arg); + } + }, { + key: "beforeEnd", + value: function beforeEnd(arg) { + var interaction = arg.interaction, + event = arg.event; + var states = this.states; + if (!states || !states.length) { + return; + } + var doPreend = false; + for (var _i8 = 0; _i8 < states.length; _i8++) { + var state = states[_i8]; + arg.state = state; + var options = state.options, + methods = state.methods; + var endPosition = methods.beforeEnd && methods.beforeEnd(arg); + if (endPosition) { + this.endResult = endPosition; + return false; + } + doPreend = doPreend || !doPreend && this.shouldDo(options, true, arg.phase, true); + } + if (doPreend) { + // trigger a final modified move before ending + interaction.move({ + event: event, + preEnd: true + }); + } + } + }, { + key: "stop", + value: function stop(arg) { + var interaction = arg.interaction; + if (!this.states || !this.states.length) { + return; + } + var modifierArg = extend({ + states: this.states, + interactable: interaction.interactable, + element: interaction.element, + rect: null + }, arg); + this.fillArg(modifierArg); + for (var _i10 = 0, _this$states4 = this.states; _i10 < _this$states4.length; _i10++) { + var state = _this$states4[_i10]; + modifierArg.state = state; + if (state.methods.stop) { + state.methods.stop(modifierArg); + } + } + this.states = null; + this.endResult = null; + } + }, { + key: "prepareStates", + value: function prepareStates(modifierList) { + this.states = []; + for (var index = 0; index < modifierList.length; index++) { + var _modifierList$index = modifierList[index], + options = _modifierList$index.options, + methods = _modifierList$index.methods, + name = _modifierList$index.name; + this.states.push({ + options: options, + methods: methods, + index: index, + name: name + }); + } + return this.states; + } + }, { + key: "restoreInteractionCoords", + value: function restoreInteractionCoords(_ref4) { + var _ref4$interaction = _ref4.interaction, + coords = _ref4$interaction.coords, + rect = _ref4$interaction.rect, + modification = _ref4$interaction.modification; + if (!modification.result) return; + var startDelta = modification.startDelta; + var _modification$result = modification.result, + curDelta = _modification$result.delta, + rectDelta = _modification$result.rectDelta; + var coordsAndDeltas = [[coords.start, startDelta], [coords.cur, curDelta]]; + for (var _i12 = 0, _ref6 = coordsAndDeltas; _i12 < _ref6.length; _i12++) { + var _ref6$_i = _ref6[_i12], + coordsSet = _ref6$_i[0], + delta = _ref6$_i[1]; + coordsSet.page.x -= delta.x; + coordsSet.page.y -= delta.y; + coordsSet.client.x -= delta.x; + coordsSet.client.y -= delta.y; + } + rect.left -= rectDelta.left; + rect.right -= rectDelta.right; + rect.top -= rectDelta.top; + rect.bottom -= rectDelta.bottom; + } + }, { + key: "shouldDo", + value: function shouldDo(options, preEnd, phase, requireEndOnly) { + if ( + // ignore disabled modifiers + !options || options.enabled === false || + // check if we require endOnly option to fire move before end + requireEndOnly && !options.endOnly || + // don't apply endOnly modifiers when not ending + options.endOnly && !preEnd || + // check if modifier should run be applied on start + phase === 'start' && !options.setStart) { + return false; + } + return true; + } + }, { + key: "copyFrom", + value: function copyFrom(other) { + this.startOffset = other.startOffset; + this.startDelta = other.startDelta; + this.startEdges = other.startEdges; + this.edges = other.edges; + this.states = other.states.map(function (s) { + return clone(s); + }); + this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect)); + } + }, { + key: "destroy", + value: function destroy() { + for (var prop in this) { + this[prop] = null; + } + } + }]); + return Modification; + }(); + function createResult(coords, rect) { + return { + rect: rect, + coords: coords, + delta: { + x: 0, + y: 0 + }, + rectDelta: { + left: 0, + right: 0, + top: 0, + bottom: 0 + }, + eventProps: [], + changed: true + }; + } + function getModifierList(interaction) { + var actionOptions = interaction.interactable.options[interaction.prepared.name]; + var actionModifiers = actionOptions.modifiers; + if (actionModifiers && actionModifiers.length) { + return actionModifiers; + } + return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize'].map(function (type) { + var options = actionOptions[type]; + return options && options.enabled && { + options: options, + methods: options._methods + }; + }).filter(function (m) { + return !!m; + }); + } + function getRectOffset(rect, coords) { + return rect ? { + left: coords.x - rect.left, + top: coords.y - rect.top, + right: rect.right - coords.x, + bottom: rect.bottom - coords.y + } : { + left: 0, + top: 0, + right: 0, + bottom: 0 + }; + } + + function makeModifier(module, name) { + var defaults = module.defaults; + var methods = { + start: module.start, + set: module.set, + beforeEnd: module.beforeEnd, + stop: module.stop + }; + var modifier = function modifier(_options) { + var options = _options || {}; + options.enabled = options.enabled !== false; + + // add missing defaults to options + for (var prop in defaults) { + if (!(prop in options)) { + options[prop] = defaults[prop]; + } + } + var m = { + options: options, + methods: methods, + name: name, + enable: function enable() { + options.enabled = true; + return m; + }, + disable: function disable() { + options.enabled = false; + return m; + } + }; + return m; + }; + if (name && typeof name === 'string') { + // for backwrads compatibility + modifier._defaults = defaults; + modifier._methods = methods; + } + return modifier; + } + function addEventModifiers(_ref) { + var iEvent = _ref.iEvent, + interaction = _ref.interaction; + var result = interaction.modification.result; + if (result) { + iEvent.modifiers = result.eventProps; + } + } + var modifiersBase = { + id: 'modifiers/base', + before: ['actions'], + install: function install(scope) { + scope.defaults.perAction.modifiers = []; + }, + listeners: { + 'interactions:new': function interactionsNew(_ref2) { + var interaction = _ref2.interaction; + interaction.modification = new Modification(interaction); + }, + 'interactions:before-action-start': function interactionsBeforeActionStart(arg) { + var interaction = arg.interaction; + var modification = arg.interaction.modification; + modification.start(arg, interaction.coords.start.page); + interaction.edges = modification.edges; + modification.applyToInteraction(arg); + }, + 'interactions:before-action-move': function interactionsBeforeActionMove(arg) { + var interaction = arg.interaction; + var modification = interaction.modification; + var ret = modification.setAndApply(arg); + interaction.edges = modification.edges; + return ret; + }, + 'interactions:before-action-end': function interactionsBeforeActionEnd(arg) { + var interaction = arg.interaction; + var modification = interaction.modification; + var ret = modification.beforeEnd(arg); + interaction.edges = modification.startEdges; + return ret; + }, + 'interactions:action-start': addEventModifiers, + 'interactions:action-move': addEventModifiers, + 'interactions:action-end': addEventModifiers, + 'interactions:after-action-start': function interactionsAfterActionStart(arg) { + return arg.interaction.modification.restoreInteractionCoords(arg); + }, + 'interactions:after-action-move': function interactionsAfterActionMove(arg) { + return arg.interaction.modification.restoreInteractionCoords(arg); + }, + 'interactions:stop': function interactionsStop(arg) { + return arg.interaction.modification.stop(arg); + } + } + }; + var base = modifiersBase; + + // eslint-disable-next-line @typescript-eslint/no-empty-interface + + var defaults$7 = { + base: { + preventDefault: 'auto', + deltaSource: 'page' + }, + perAction: { + enabled: false, + origin: { + x: 0, + y: 0 + } + }, + actions: {} + }; + + // defined outside of class definition to avoid assignment of undefined during + // construction + + var InteractEvent = /*#__PURE__*/function (_BaseEvent) { + _inherits(InteractEvent, _BaseEvent); + var _super = _createSuper(InteractEvent); + function InteractEvent(interaction, event, actionName, phase, element, preEnd, type) { + var _this; + _classCallCheck(this, InteractEvent); + _this = _super.call(this, interaction); + _defineProperty(_assertThisInitialized(_this), "relatedTarget", null); + _defineProperty(_assertThisInitialized(_this), "screenX", void 0); + _defineProperty(_assertThisInitialized(_this), "screenY", void 0); + _defineProperty(_assertThisInitialized(_this), "button", void 0); + _defineProperty(_assertThisInitialized(_this), "buttons", void 0); + _defineProperty(_assertThisInitialized(_this), "ctrlKey", void 0); + _defineProperty(_assertThisInitialized(_this), "shiftKey", void 0); + _defineProperty(_assertThisInitialized(_this), "altKey", void 0); + _defineProperty(_assertThisInitialized(_this), "metaKey", void 0); + _defineProperty(_assertThisInitialized(_this), "page", void 0); + _defineProperty(_assertThisInitialized(_this), "client", void 0); + _defineProperty(_assertThisInitialized(_this), "delta", void 0); + _defineProperty(_assertThisInitialized(_this), "rect", void 0); + _defineProperty(_assertThisInitialized(_this), "x0", void 0); + _defineProperty(_assertThisInitialized(_this), "y0", void 0); + _defineProperty(_assertThisInitialized(_this), "t0", void 0); + _defineProperty(_assertThisInitialized(_this), "dt", void 0); + _defineProperty(_assertThisInitialized(_this), "duration", void 0); + _defineProperty(_assertThisInitialized(_this), "clientX0", void 0); + _defineProperty(_assertThisInitialized(_this), "clientY0", void 0); + _defineProperty(_assertThisInitialized(_this), "velocity", void 0); + _defineProperty(_assertThisInitialized(_this), "speed", void 0); + _defineProperty(_assertThisInitialized(_this), "swipe", void 0); + // resize + _defineProperty(_assertThisInitialized(_this), "axes", void 0); + /** @internal */ + _defineProperty(_assertThisInitialized(_this), "preEnd", void 0); + element = element || interaction.element; + var target = interaction.interactable; + var deltaSource = (target && target.options || defaults$7).deltaSource; + var origin = getOriginXY(target, element, actionName); + var starting = phase === 'start'; + var ending = phase === 'end'; + var prevEvent = starting ? _assertThisInitialized(_this) : interaction.prevEvent; + var coords = starting ? interaction.coords.start : ending ? { + page: prevEvent.page, + client: prevEvent.client, + timeStamp: interaction.coords.cur.timeStamp + } : interaction.coords.cur; + _this.page = extend({}, coords.page); + _this.client = extend({}, coords.client); + _this.rect = extend({}, interaction.rect); + _this.timeStamp = coords.timeStamp; + if (!ending) { + _this.page.x -= origin.x; + _this.page.y -= origin.y; + _this.client.x -= origin.x; + _this.client.y -= origin.y; + } + _this.ctrlKey = event.ctrlKey; + _this.altKey = event.altKey; + _this.shiftKey = event.shiftKey; + _this.metaKey = event.metaKey; + _this.button = event.button; + _this.buttons = event.buttons; + _this.target = element; + _this.currentTarget = element; + _this.preEnd = preEnd; + _this.type = type || actionName + (phase || ''); + _this.interactable = target; + _this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0; + _this.x0 = interaction.coords.start.page.x - origin.x; + _this.y0 = interaction.coords.start.page.y - origin.y; + _this.clientX0 = interaction.coords.start.client.x - origin.x; + _this.clientY0 = interaction.coords.start.client.y - origin.y; + if (starting || ending) { + _this.delta = { + x: 0, + y: 0 + }; + } else { + _this.delta = { + x: _this[deltaSource].x - prevEvent[deltaSource].x, + y: _this[deltaSource].y - prevEvent[deltaSource].y + }; + } + _this.dt = interaction.coords.delta.timeStamp; + _this.duration = _this.timeStamp - _this.t0; + + // velocity and speed in pixels per second + _this.velocity = extend({}, interaction.coords.velocity[deltaSource]); + _this.speed = hypot(_this.velocity.x, _this.velocity.y); + _this.swipe = ending || phase === 'inertiastart' ? _this.getSwipe() : null; + return _this; + } + _createClass(InteractEvent, [{ + key: "getSwipe", + value: function getSwipe() { + var interaction = this._interaction; + if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) { + return null; + } + var angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI; + var overlap = 22.5; + if (angle < 0) { + angle += 360; + } + var left = 135 - overlap <= angle && angle < 225 + overlap; + var up = 225 - overlap <= angle && angle < 315 + overlap; + var right = !left && (315 - overlap <= angle || angle < 45 + overlap); + var down = !up && 45 - overlap <= angle && angle < 135 + overlap; + return { + up: up, + down: down, + left: left, + right: right, + angle: angle, + speed: interaction.prevEvent.speed, + velocity: { + x: interaction.prevEvent.velocityX, + y: interaction.prevEvent.velocityY + } + }; + } + }, { + key: "preventDefault", + value: function preventDefault() {} + + /** + * Don't call listeners on the remaining targets + */ + }, { + key: "stopImmediatePropagation", + value: function stopImmediatePropagation() { + this.immediatePropagationStopped = this.propagationStopped = true; + } + + /** + * Don't call any other listeners (even on the current target) + */ + }, { + key: "stopPropagation", + value: function stopPropagation() { + this.propagationStopped = true; + } + }]); + return InteractEvent; + }(BaseEvent); + + // getters and setters defined here to support typescript 3.6 and below which + // don't support getter and setters in .d.ts files + Object.defineProperties(InteractEvent.prototype, { + pageX: { + get: function get() { + return this.page.x; + }, + set: function set(value) { + this.page.x = value; + } + }, + pageY: { + get: function get() { + return this.page.y; + }, + set: function set(value) { + this.page.y = value; + } + }, + clientX: { + get: function get() { + return this.client.x; + }, + set: function set(value) { + this.client.x = value; + } + }, + clientY: { + get: function get() { + return this.client.y; + }, + set: function set(value) { + this.client.y = value; + } + }, + dx: { + get: function get() { + return this.delta.x; + }, + set: function set(value) { + this.delta.x = value; + } + }, + dy: { + get: function get() { + return this.delta.y; + }, + set: function set(value) { + this.delta.y = value; + } + }, + velocityX: { + get: function get() { + return this.velocity.x; + }, + set: function set(value) { + this.velocity.x = value; + } + }, + velocityY: { + get: function get() { + return this.velocity.y; + }, + set: function set(value) { + this.velocity.y = value; + } + } + }); + + var PointerInfo = /*#__PURE__*/_createClass(function PointerInfo(id, pointer, event, downTime, downTarget) { + _classCallCheck(this, PointerInfo); + _defineProperty(this, "id", void 0); + _defineProperty(this, "pointer", void 0); + _defineProperty(this, "event", void 0); + _defineProperty(this, "downTime", void 0); + _defineProperty(this, "downTarget", void 0); + this.id = id; + this.pointer = pointer; + this.event = event; + this.downTime = downTime; + this.downTarget = downTarget; + }); + + var _ProxyValues = /*#__PURE__*/function (_ProxyValues) { + _ProxyValues["interactable"] = ""; + _ProxyValues["element"] = ""; + _ProxyValues["prepared"] = ""; + _ProxyValues["pointerIsDown"] = ""; + _ProxyValues["pointerWasMoved"] = ""; + _ProxyValues["_proxy"] = ""; + return _ProxyValues; + }({}); + var _ProxyMethods = /*#__PURE__*/function (_ProxyMethods) { + _ProxyMethods["start"] = ""; + _ProxyMethods["move"] = ""; + _ProxyMethods["end"] = ""; + _ProxyMethods["stop"] = ""; + _ProxyMethods["interacting"] = ""; + return _ProxyMethods; + }({}); + var idCounter = 0; + var Interaction = /*#__PURE__*/function () { + function Interaction(_ref) { + var _this = this; + var pointerType = _ref.pointerType, + scopeFire = _ref.scopeFire; + _classCallCheck(this, Interaction); + /** current interactable being interacted with */ + _defineProperty(this, "interactable", null); + /** the target element of the interactable */ + _defineProperty(this, "element", null); + _defineProperty(this, "rect", null); + /** @internal */ + _defineProperty(this, "_rects", void 0); + /** @internal */ + _defineProperty(this, "edges", null); + /** @internal */ + _defineProperty(this, "_scopeFire", void 0); + // action that's ready to be fired on next move event + _defineProperty(this, "prepared", { + name: null, + axis: null, + edges: null + }); + _defineProperty(this, "pointerType", void 0); + /** @internal keep track of added pointers */ + _defineProperty(this, "pointers", []); + /** @internal pointerdown/mousedown/touchstart event */ + _defineProperty(this, "downEvent", null); + /** @internal */ + _defineProperty(this, "downPointer", {}); + /** @internal */ + _defineProperty(this, "_latestPointer", { + pointer: null, + event: null, + eventTarget: null + }); + /** @internal */ + _defineProperty(this, "prevEvent", null); + _defineProperty(this, "pointerIsDown", false); + _defineProperty(this, "pointerWasMoved", false); + /** @internal */ + _defineProperty(this, "_interacting", false); + /** @internal */ + _defineProperty(this, "_ending", false); + /** @internal */ + _defineProperty(this, "_stopped", true); + /** @internal */ + _defineProperty(this, "_proxy", void 0); + /** @internal */ + _defineProperty(this, "simulation", null); + _defineProperty(this, "doMove", warnOnce(function (signalArg) { + this.move(signalArg); + }, 'The interaction.doMove() method has been renamed to interaction.move()')); + _defineProperty(this, "coords", { + // Starting InteractEvent pointer coordinates + start: newCoords(), + // Previous native pointer move event coordinates + prev: newCoords(), + // current native pointer move event coordinates + cur: newCoords(), + // Change in coordinates and time of the pointer + delta: newCoords(), + // pointer velocity + velocity: newCoords() + }); + /** @internal */ + _defineProperty(this, "_id", idCounter++); + this._scopeFire = scopeFire; + this.pointerType = pointerType; + var that = this; + this._proxy = {}; + var _loop = function _loop(key) { + Object.defineProperty(_this._proxy, key, { + get: function get() { + return that[key]; + } + }); + }; + for (var key in _ProxyValues) { + _loop(key); + } + var _loop2 = function _loop2(_key) { + Object.defineProperty(_this._proxy, _key, { + value: function value() { + return that[_key].apply(that, arguments); + } + }); + }; + for (var _key in _ProxyMethods) { + _loop2(_key); + } + this._scopeFire('interactions:new', { + interaction: this + }); + } + _createClass(Interaction, [{ + key: "pointerMoveTolerance", + get: /** @internal */function get() { + return 1; + } + }, { + key: "pointerDown", + value: function pointerDown(pointer, event, eventTarget) { + var pointerIndex = this.updatePointer(pointer, event, eventTarget, true); + var pointerInfo = this.pointers[pointerIndex]; + this._scopeFire('interactions:down', { + pointer: pointer, + event: event, + eventTarget: eventTarget, + pointerIndex: pointerIndex, + pointerInfo: pointerInfo, + type: 'down', + interaction: this + }); + } + + /** + * ```js + * interact(target) + * .draggable({ + * // disable the default drag start by down->move + * manualStart: true + * }) + * // start dragging after the user holds the pointer down + * .on('hold', function (event) { + * var interaction = event.interaction + * + * if (!interaction.interacting()) { + * interaction.start({ name: 'drag' }, + * event.interactable, + * event.currentTarget) + * } + * }) + * ``` + * + * Start an action with the given Interactable and Element as tartgets. The + * action must be enabled for the target Interactable and an appropriate + * number of pointers must be held down - 1 for drag/resize, 2 for gesture. + * + * Use it with `interactable.able({ manualStart: false })` to always + * [start actions manually](https://github.com/taye/interact.js/issues/114) + * + * @param action - The action to be performed - drag, resize, etc. + * @param target - The Interactable to target + * @param element - The DOM Element to target + * @returns Whether the interaction was successfully started + */ + }, { + key: "start", + value: function start(action, interactable, element) { + if (this.interacting() || !this.pointerIsDown || this.pointers.length < (action.name === 'gesture' ? 2 : 1) || !interactable.options[action.name].enabled) { + return false; + } + copyAction(this.prepared, action); + this.interactable = interactable; + this.element = element; + this.rect = interactable.getRect(element); + this.edges = this.prepared.edges ? extend({}, this.prepared.edges) : { + left: true, + right: true, + top: true, + bottom: true + }; + this._stopped = false; + this._interacting = this._doPhase({ + interaction: this, + event: this.downEvent, + phase: 'start' + }) && !this._stopped; + return this._interacting; + } + }, { + key: "pointerMove", + value: function pointerMove(pointer, event, eventTarget) { + if (!this.simulation && !(this.modification && this.modification.endResult)) { + this.updatePointer(pointer, event, eventTarget, false); + } + var duplicateMove = this.coords.cur.page.x === this.coords.prev.page.x && this.coords.cur.page.y === this.coords.prev.page.y && this.coords.cur.client.x === this.coords.prev.client.x && this.coords.cur.client.y === this.coords.prev.client.y; + var dx; + var dy; + + // register movement greater than pointerMoveTolerance + if (this.pointerIsDown && !this.pointerWasMoved) { + dx = this.coords.cur.client.x - this.coords.start.client.x; + dy = this.coords.cur.client.y - this.coords.start.client.y; + this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance; + } + var pointerIndex = this.getPointerIndex(pointer); + var signalArg = { + pointer: pointer, + pointerIndex: pointerIndex, + pointerInfo: this.pointers[pointerIndex], + event: event, + type: 'move', + eventTarget: eventTarget, + dx: dx, + dy: dy, + duplicate: duplicateMove, + interaction: this + }; + if (!duplicateMove) { + // set pointer coordinate, time changes and velocity + setCoordVelocity(this.coords.velocity, this.coords.delta); + } + this._scopeFire('interactions:move', signalArg); + if (!duplicateMove && !this.simulation) { + // if interacting, fire an 'action-move' signal etc + if (this.interacting()) { + signalArg.type = null; + this.move(signalArg); + } + if (this.pointerWasMoved) { + copyCoords(this.coords.prev, this.coords.cur); + } + } + } + + /** + * ```js + * interact(target) + * .draggable(true) + * .on('dragmove', function (event) { + * if (someCondition) { + * // change the snap settings + * event.interactable.draggable({ snap: { targets: [] }}) + * // fire another move event with re-calculated snap + * event.interaction.move() + * } + * }) + * ``` + * + * Force a move of the current action at the same coordinates. Useful if + * snap/restrict has been changed and you want a movement with the new + * settings. + */ + }, { + key: "move", + value: function move(signalArg) { + if (!signalArg || !signalArg.event) { + setZeroCoords(this.coords.delta); + } + signalArg = extend({ + pointer: this._latestPointer.pointer, + event: this._latestPointer.event, + eventTarget: this._latestPointer.eventTarget, + interaction: this + }, signalArg || {}); + signalArg.phase = 'move'; + this._doPhase(signalArg); + } + + /** + * @internal + * End interact move events and stop auto-scroll unless simulation is running + */ + }, { + key: "pointerUp", + value: function pointerUp(pointer, event, eventTarget, curEventTarget) { + var pointerIndex = this.getPointerIndex(pointer); + if (pointerIndex === -1) { + pointerIndex = this.updatePointer(pointer, event, eventTarget, false); + } + var type = /cancel$/i.test(event.type) ? 'cancel' : 'up'; + this._scopeFire("interactions:".concat(type), { + pointer: pointer, + pointerIndex: pointerIndex, + pointerInfo: this.pointers[pointerIndex], + event: event, + eventTarget: eventTarget, + type: type, + curEventTarget: curEventTarget, + interaction: this + }); + if (!this.simulation) { + this.end(event); + } + this.removePointer(pointer, event); + } + + /** @internal */ + }, { + key: "documentBlur", + value: function documentBlur(event) { + this.end(event); + this._scopeFire('interactions:blur', { + event: event, + type: 'blur', + interaction: this + }); + } + + /** + * ```js + * interact(target) + * .draggable(true) + * .on('move', function (event) { + * if (event.pageX > 1000) { + * // end the current action + * event.interaction.end() + * // stop all further listeners from being called + * event.stopImmediatePropagation() + * } + * }) + * ``` + */ + }, { + key: "end", + value: function end(event) { + this._ending = true; + event = event || this._latestPointer.event; + var endPhaseResult; + if (this.interacting()) { + endPhaseResult = this._doPhase({ + event: event, + interaction: this, + phase: 'end' + }); + } + this._ending = false; + if (endPhaseResult === true) { + this.stop(); + } + } + }, { + key: "currentAction", + value: function currentAction() { + return this._interacting ? this.prepared.name : null; + } + }, { + key: "interacting", + value: function interacting() { + return this._interacting; + } + }, { + key: "stop", + value: function stop() { + this._scopeFire('interactions:stop', { + interaction: this + }); + this.interactable = this.element = null; + this._interacting = false; + this._stopped = true; + this.prepared.name = this.prevEvent = null; + } + + /** @internal */ + }, { + key: "getPointerIndex", + value: function getPointerIndex(pointer) { + var pointerId = getPointerId(pointer); + + // mouse and pen interactions may have only one pointer + return this.pointerType === 'mouse' || this.pointerType === 'pen' ? this.pointers.length - 1 : findIndex(this.pointers, function (curPointer) { + return curPointer.id === pointerId; + }); + } + + /** @internal */ + }, { + key: "getPointerInfo", + value: function getPointerInfo(pointer) { + return this.pointers[this.getPointerIndex(pointer)]; + } + + /** @internal */ + }, { + key: "updatePointer", + value: function updatePointer(pointer, event, eventTarget, down) { + var id = getPointerId(pointer); + var pointerIndex = this.getPointerIndex(pointer); + var pointerInfo = this.pointers[pointerIndex]; + down = down === false ? false : down || /(down|start)$/i.test(event.type); + if (!pointerInfo) { + pointerInfo = new PointerInfo(id, pointer, event, null, null); + pointerIndex = this.pointers.length; + this.pointers.push(pointerInfo); + } else { + pointerInfo.pointer = pointer; + } + setCoords(this.coords.cur, this.pointers.map(function (p) { + return p.pointer; + }), this._now()); + setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur); + if (down) { + this.pointerIsDown = true; + pointerInfo.downTime = this.coords.cur.timeStamp; + pointerInfo.downTarget = eventTarget; + pointerExtend(this.downPointer, pointer); + if (!this.interacting()) { + copyCoords(this.coords.start, this.coords.cur); + copyCoords(this.coords.prev, this.coords.cur); + this.downEvent = event; + this.pointerWasMoved = false; + } + } + this._updateLatestPointer(pointer, event, eventTarget); + this._scopeFire('interactions:update-pointer', { + pointer: pointer, + event: event, + eventTarget: eventTarget, + down: down, + pointerInfo: pointerInfo, + pointerIndex: pointerIndex, + interaction: this + }); + return pointerIndex; + } + + /** @internal */ + }, { + key: "removePointer", + value: function removePointer(pointer, event) { + var pointerIndex = this.getPointerIndex(pointer); + if (pointerIndex === -1) return; + var pointerInfo = this.pointers[pointerIndex]; + this._scopeFire('interactions:remove-pointer', { + pointer: pointer, + event: event, + eventTarget: null, + pointerIndex: pointerIndex, + pointerInfo: pointerInfo, + interaction: this + }); + this.pointers.splice(pointerIndex, 1); + this.pointerIsDown = false; + } + + /** @internal */ + }, { + key: "_updateLatestPointer", + value: function _updateLatestPointer(pointer, event, eventTarget) { + this._latestPointer.pointer = pointer; + this._latestPointer.event = event; + this._latestPointer.eventTarget = eventTarget; + } + }, { + key: "destroy", + value: function destroy() { + this._latestPointer.pointer = null; + this._latestPointer.event = null; + this._latestPointer.eventTarget = null; + } + + /** @internal */ + }, { + key: "_createPreparedEvent", + value: function _createPreparedEvent(event, phase, preEnd, type) { + return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type); + } + + /** @internal */ + }, { + key: "_fireEvent", + value: function _fireEvent(iEvent) { + var _this$interactable; + (_this$interactable = this.interactable) == null ? void 0 : _this$interactable.fire(iEvent); + if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) { + this.prevEvent = iEvent; + } + } + + /** @internal */ + }, { + key: "_doPhase", + value: function _doPhase(signalArg) { + var event = signalArg.event, + phase = signalArg.phase, + preEnd = signalArg.preEnd, + type = signalArg.type; + var rect = this.rect; + if (rect && phase === 'move') { + // update the rect changes due to pointer move + addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource]); + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + var beforeResult = this._scopeFire("interactions:before-action-".concat(phase), signalArg); + if (beforeResult === false) { + return false; + } + var iEvent = signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type); + this._scopeFire("interactions:action-".concat(phase), signalArg); + if (phase === 'start') { + this.prevEvent = iEvent; + } + this._fireEvent(iEvent); + this._scopeFire("interactions:after-action-".concat(phase), signalArg); + return true; + } + + /** @internal */ + }, { + key: "_now", + value: function _now() { + return Date.now(); + } + }]); + return Interaction; + }(); + + _ProxyMethods.offsetBy = ''; + function addTotal(interaction) { + if (!interaction.pointerIsDown) { + return; + } + addToCoords(interaction.coords.cur, interaction.offset.total); + interaction.offset.pending.x = 0; + interaction.offset.pending.y = 0; + } + function beforeAction(_ref) { + var interaction = _ref.interaction; + applyPending(interaction); + } + function beforeEnd(_ref2) { + var interaction = _ref2.interaction; + var hadPending = applyPending(interaction); + if (!hadPending) return; + interaction.move({ + offset: true + }); + interaction.end(); + return false; + } + function end(_ref3) { + var interaction = _ref3.interaction; + interaction.offset.total.x = 0; + interaction.offset.total.y = 0; + interaction.offset.pending.x = 0; + interaction.offset.pending.y = 0; + } + function applyPending(interaction) { + if (!hasPending(interaction)) { + return false; + } + var pending = interaction.offset.pending; + addToCoords(interaction.coords.cur, pending); + addToCoords(interaction.coords.delta, pending); + addEdges(interaction.edges, interaction.rect, pending); + pending.x = 0; + pending.y = 0; + return true; + } + function offsetBy(_ref4) { + var x = _ref4.x, + y = _ref4.y; + this.offset.pending.x += x; + this.offset.pending.y += y; + this.offset.total.x += x; + this.offset.total.y += y; + } + function addToCoords(_ref5, _ref6) { + var page = _ref5.page, + client = _ref5.client; + var x = _ref6.x, + y = _ref6.y; + page.x += x; + page.y += y; + client.x += x; + client.y += y; + } + function hasPending(interaction) { + return !!(interaction.offset.pending.x || interaction.offset.pending.y); + } + var offset = { + id: 'offset', + before: ['modifiers', 'pointer-events', 'actions', 'inertia'], + install: function install(scope) { + scope.Interaction.prototype.offsetBy = offsetBy; + }, + listeners: { + 'interactions:new': function interactionsNew(_ref7) { + var interaction = _ref7.interaction; + interaction.offset = { + total: { + x: 0, + y: 0 + }, + pending: { + x: 0, + y: 0 + } + }; + }, + 'interactions:update-pointer': function interactionsUpdatePointer(_ref8) { + var interaction = _ref8.interaction; + return addTotal(interaction); + }, + 'interactions:before-action-start': beforeAction, + 'interactions:before-action-move': beforeAction, + 'interactions:before-action-end': beforeEnd, + 'interactions:stop': end + } + }; + var offset$1 = offset; + + function install$6(scope) { + var defaults = scope.defaults; + scope.usePlugin(offset$1); + scope.usePlugin(base); + scope.actions.phases.inertiastart = true; + scope.actions.phases.resume = true; + defaults.perAction.inertia = { + enabled: false, + resistance: 10, + // the lambda in exponential decay + minSpeed: 100, + // target speed must be above this for inertia to start + endSpeed: 10, + // the speed at which inertia is slow enough to stop + allowResume: true, + // allow resuming an action in inertia phase + smoothEndDuration: 300 // animate to snap/restrict endOnly if there's no inertia + }; + } + var InertiaState = /*#__PURE__*/function () { + function InertiaState(interaction) { + _classCallCheck(this, InertiaState); + _defineProperty(this, "active", false); + _defineProperty(this, "isModified", false); + _defineProperty(this, "smoothEnd", false); + _defineProperty(this, "allowResume", false); + _defineProperty(this, "modification", void 0); + _defineProperty(this, "modifierCount", 0); + _defineProperty(this, "modifierArg", void 0); + _defineProperty(this, "startCoords", void 0); + _defineProperty(this, "t0", 0); + _defineProperty(this, "v0", 0); + _defineProperty(this, "te", 0); + _defineProperty(this, "targetOffset", void 0); + _defineProperty(this, "modifiedOffset", void 0); + _defineProperty(this, "currentOffset", void 0); + _defineProperty(this, "lambda_v0", 0); + // eslint-disable-line camelcase + _defineProperty(this, "one_ve_v0", 0); + // eslint-disable-line camelcase + _defineProperty(this, "timeout", void 0); + _defineProperty(this, "interaction", void 0); + this.interaction = interaction; + } + _createClass(InertiaState, [{ + key: "start", + value: function start(event) { + var interaction = this.interaction; + var options = getOptions$1(interaction); + if (!options || !options.enabled) { + return false; + } + var velocityClient = interaction.coords.velocity.client; + var pointerSpeed = hypot(velocityClient.x, velocityClient.y); + var modification = this.modification || (this.modification = new Modification(interaction)); + modification.copyFrom(interaction.modification); + this.t0 = interaction._now(); + this.allowResume = options.allowResume; + this.v0 = pointerSpeed; + this.currentOffset = { + x: 0, + y: 0 + }; + this.startCoords = interaction.coords.cur.page; + this.modifierArg = modification.fillArg({ + pageCoords: this.startCoords, + preEnd: true, + phase: 'inertiastart' + }); + var thrown = this.t0 - interaction.coords.cur.timeStamp < 50 && pointerSpeed > options.minSpeed && pointerSpeed > options.endSpeed; + if (thrown) { + this.startInertia(); + } else { + modification.result = modification.setAll(this.modifierArg); + if (!modification.result.changed) { + return false; + } + this.startSmoothEnd(); + } + + // force modification change + interaction.modification.result.rect = null; + + // bring inertiastart event to the target coords + interaction.offsetBy(this.targetOffset); + interaction._doPhase({ + interaction: interaction, + event: event, + phase: 'inertiastart' + }); + interaction.offsetBy({ + x: -this.targetOffset.x, + y: -this.targetOffset.y + }); + // force modification change + interaction.modification.result.rect = null; + this.active = true; + interaction.simulation = this; + return true; + } + }, { + key: "startInertia", + value: function startInertia() { + var _this = this; + var startVelocity = this.interaction.coords.velocity.client; + var options = getOptions$1(this.interaction); + var lambda = options.resistance; + var inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda; + this.targetOffset = { + x: (startVelocity.x - inertiaDur) / lambda, + y: (startVelocity.y - inertiaDur) / lambda + }; + this.te = inertiaDur; + this.lambda_v0 = lambda / this.v0; + this.one_ve_v0 = 1 - options.endSpeed / this.v0; + var modification = this.modification, + modifierArg = this.modifierArg; + modifierArg.pageCoords = { + x: this.startCoords.x + this.targetOffset.x, + y: this.startCoords.y + this.targetOffset.y + }; + modification.result = modification.setAll(modifierArg); + if (modification.result.changed) { + this.isModified = true; + this.modifiedOffset = { + x: this.targetOffset.x + modification.result.delta.x, + y: this.targetOffset.y + modification.result.delta.y + }; + } + this.onNextFrame(function () { + return _this.inertiaTick(); + }); + } + }, { + key: "startSmoothEnd", + value: function startSmoothEnd() { + var _this2 = this; + this.smoothEnd = true; + this.isModified = true; + this.targetOffset = { + x: this.modification.result.delta.x, + y: this.modification.result.delta.y + }; + this.onNextFrame(function () { + return _this2.smoothEndTick(); + }); + } + }, { + key: "onNextFrame", + value: function onNextFrame(tickFn) { + var _this3 = this; + this.timeout = raf.request(function () { + if (_this3.active) { + tickFn(); + } + }); + } + }, { + key: "inertiaTick", + value: function inertiaTick() { + var _this4 = this; + var interaction = this.interaction; + var options = getOptions$1(interaction); + var lambda = options.resistance; + var t = (interaction._now() - this.t0) / 1000; + if (t < this.te) { + var progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0; + var newOffset; + if (this.isModified) { + newOffset = getQuadraticCurvePoint(0, 0, this.targetOffset.x, this.targetOffset.y, this.modifiedOffset.x, this.modifiedOffset.y, progress); + } else { + newOffset = { + x: this.targetOffset.x * progress, + y: this.targetOffset.y * progress + }; + } + var delta = { + x: newOffset.x - this.currentOffset.x, + y: newOffset.y - this.currentOffset.y + }; + this.currentOffset.x += delta.x; + this.currentOffset.y += delta.y; + interaction.offsetBy(delta); + interaction.move(); + this.onNextFrame(function () { + return _this4.inertiaTick(); + }); + } else { + interaction.offsetBy({ + x: this.modifiedOffset.x - this.currentOffset.x, + y: this.modifiedOffset.y - this.currentOffset.y + }); + this.end(); + } + } + }, { + key: "smoothEndTick", + value: function smoothEndTick() { + var _this5 = this; + var interaction = this.interaction; + var t = interaction._now() - this.t0; + var _getOptions = getOptions$1(interaction), + duration = _getOptions.smoothEndDuration; + if (t < duration) { + var newOffset = { + x: easeOutQuad(t, 0, this.targetOffset.x, duration), + y: easeOutQuad(t, 0, this.targetOffset.y, duration) + }; + var delta = { + x: newOffset.x - this.currentOffset.x, + y: newOffset.y - this.currentOffset.y + }; + this.currentOffset.x += delta.x; + this.currentOffset.y += delta.y; + interaction.offsetBy(delta); + interaction.move({ + skipModifiers: this.modifierCount + }); + this.onNextFrame(function () { + return _this5.smoothEndTick(); + }); + } else { + interaction.offsetBy({ + x: this.targetOffset.x - this.currentOffset.x, + y: this.targetOffset.y - this.currentOffset.y + }); + this.end(); + } + } + }, { + key: "resume", + value: function resume(_ref) { + var pointer = _ref.pointer, + event = _ref.event, + eventTarget = _ref.eventTarget; + var interaction = this.interaction; + + // undo inertia changes to interaction coords + interaction.offsetBy({ + x: -this.currentOffset.x, + y: -this.currentOffset.y + }); + + // update pointer at pointer down position + interaction.updatePointer(pointer, event, eventTarget, true); + + // fire resume signals and event + interaction._doPhase({ + interaction: interaction, + event: event, + phase: 'resume' + }); + copyCoords(interaction.coords.prev, interaction.coords.cur); + this.stop(); + } + }, { + key: "end", + value: function end() { + this.interaction.move(); + this.interaction.end(); + this.stop(); + } + }, { + key: "stop", + value: function stop() { + this.active = this.smoothEnd = false; + this.interaction.simulation = null; + raf.cancel(this.timeout); + } + }]); + return InertiaState; + }(); + function start$6(_ref2) { + var interaction = _ref2.interaction, + event = _ref2.event; + if (!interaction._interacting || interaction.simulation) { + return null; + } + var started = interaction.inertia.start(event); + + // prevent action end if inertia or smoothEnd + return started ? false : null; + } + + // Check if the down event hits the current inertia target + // control should be return to the user + function resume(arg) { + var interaction = arg.interaction, + eventTarget = arg.eventTarget; + var state = interaction.inertia; + if (!state.active) return; + var element = eventTarget; + + // climb up the DOM tree from the event target + while (is.element(element)) { + // if interaction element is the current inertia target element + if (element === interaction.element) { + state.resume(arg); + break; + } + element = parentNode(element); + } + } + function stop(_ref3) { + var interaction = _ref3.interaction; + var state = interaction.inertia; + if (state.active) { + state.stop(); + } + } + function getOptions$1(_ref4) { + var interactable = _ref4.interactable, + prepared = _ref4.prepared; + return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia; + } + var inertia = { + id: 'inertia', + before: ['modifiers', 'actions'], + install: install$6, + listeners: { + 'interactions:new': function interactionsNew(_ref5) { + var interaction = _ref5.interaction; + interaction.inertia = new InertiaState(interaction); + }, + 'interactions:before-action-end': start$6, + 'interactions:down': resume, + 'interactions:stop': stop, + 'interactions:before-action-resume': function interactionsBeforeActionResume(arg) { + var modification = arg.interaction.modification; + modification.stop(arg); + modification.start(arg, arg.interaction.coords.cur.page); + modification.applyToInteraction(arg); + }, + 'interactions:before-action-inertiastart': function interactionsBeforeActionInertiastart(arg) { + return arg.interaction.modification.setAndApply(arg); + }, + 'interactions:action-resume': addEventModifiers, + 'interactions:action-inertiastart': addEventModifiers, + 'interactions:after-action-inertiastart': function interactionsAfterActionInertiastart(arg) { + return arg.interaction.modification.restoreInteractionCoords(arg); + }, + 'interactions:after-action-resume': function interactionsAfterActionResume(arg) { + return arg.interaction.modification.restoreInteractionCoords(arg); + } + } + }; + + // http://stackoverflow.com/a/5634528/2280888 + function _getQBezierValue(t, p1, p2, p3) { + var iT = 1 - t; + return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3; + } + function getQuadraticCurvePoint(startX, startY, cpX, cpY, endX, endY, position) { + return { + x: _getQBezierValue(position, startX, cpX, endX), + y: _getQBezierValue(position, startY, cpY, endY) + }; + } + + // http://gizma.com/easing/ + function easeOutQuad(t, b, c, d) { + t /= d; + return -c * t * (t - 2) + b; + } + var inertia$1 = inertia; + + function fireUntilImmediateStopped(event, listeners) { + for (var _i2 = 0; _i2 < listeners.length; _i2++) { + var listener = listeners[_i2]; + if (event.immediatePropagationStopped) { + break; + } + listener(event); + } + } + var Eventable = /*#__PURE__*/function () { + function Eventable(options) { + _classCallCheck(this, Eventable); + _defineProperty(this, "options", void 0); + _defineProperty(this, "types", {}); + _defineProperty(this, "propagationStopped", false); + _defineProperty(this, "immediatePropagationStopped", false); + _defineProperty(this, "global", void 0); + this.options = extend({}, options || {}); + } + _createClass(Eventable, [{ + key: "fire", + value: function fire(event) { + var listeners; + var global = this.global; + + // Interactable#on() listeners + // tslint:disable no-conditional-assignment + if (listeners = this.types[event.type]) { + fireUntilImmediateStopped(event, listeners); + } + + // interact.on() listeners + if (!event.propagationStopped && global && (listeners = global[event.type])) { + fireUntilImmediateStopped(event, listeners); + } + } + }, { + key: "on", + value: function on(type, listener) { + var listeners = normalize(type, listener); + for (type in listeners) { + this.types[type] = merge(this.types[type] || [], listeners[type]); + } + } + }, { + key: "off", + value: function off(type, listener) { + var listeners = normalize(type, listener); + for (type in listeners) { + var eventList = this.types[type]; + if (!eventList || !eventList.length) { + continue; + } + for (var _i4 = 0, _listeners$type2 = listeners[type]; _i4 < _listeners$type2.length; _i4++) { + var subListener = _listeners$type2[_i4]; + var _index = eventList.indexOf(subListener); + if (_index !== -1) { + eventList.splice(_index, 1); + } + } + } + } + }, { + key: "getRect", + value: function getRect(_element) { + return null; + } + }]); + return Eventable; + }(); + + function install$5(scope) { + var _scope$document; + var targets = []; + var delegatedEvents = {}; + var documents = []; + var eventsMethods = { + add: add, + remove: remove, + addDelegate: addDelegate, + removeDelegate: removeDelegate, + delegateListener: delegateListener, + delegateUseCapture: delegateUseCapture, + delegatedEvents: delegatedEvents, + documents: documents, + targets: targets, + supportsOptions: false, + supportsPassive: false + }; + + // check if browser supports passive events and options arg + (_scope$document = scope.document) == null ? void 0 : _scope$document.createElement('div').addEventListener('test', null, { + get capture() { + return eventsMethods.supportsOptions = true; + }, + get passive() { + return eventsMethods.supportsPassive = true; + } + }); + scope.events = eventsMethods; + function add(eventTarget, type, listener, optionalArg) { + if (!eventTarget.addEventListener) return; + var options = getOptions(optionalArg); + var target = find(targets, function (t) { + return t.eventTarget === eventTarget; + }); + if (!target) { + target = { + eventTarget: eventTarget, + events: {} + }; + targets.push(target); + } + if (!target.events[type]) { + target.events[type] = []; + } + if (!find(target.events[type], function (l) { + return l.func === listener && optionsMatch(l.options, options); + })) { + eventTarget.addEventListener(type, listener, eventsMethods.supportsOptions ? options : options.capture); + target.events[type].push({ + func: listener, + options: options + }); + } + } + function remove(eventTarget, type, listener, optionalArg) { + if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return; + var targetIndex = findIndex(targets, function (t) { + return t.eventTarget === eventTarget; + }); + var target = targets[targetIndex]; + if (!target || !target.events) { + return; + } + if (type === 'all') { + for (type in target.events) { + if (target.events.hasOwnProperty(type)) { + remove(eventTarget, type, 'all'); + } + } + return; + } + var typeIsEmpty = false; + var typeListeners = target.events[type]; + if (typeListeners) { + if (listener === 'all') { + for (var i = typeListeners.length - 1; i >= 0; i--) { + var entry = typeListeners[i]; + remove(eventTarget, type, entry.func, entry.options); + } + return; + } else { + var options = getOptions(optionalArg); + for (var _i = 0; _i < typeListeners.length; _i++) { + var _entry = typeListeners[_i]; + if (_entry.func === listener && optionsMatch(_entry.options, options)) { + eventTarget.removeEventListener(type, listener, eventsMethods.supportsOptions ? options : options.capture); + typeListeners.splice(_i, 1); + if (typeListeners.length === 0) { + delete target.events[type]; + typeIsEmpty = true; + } + break; + } + } + } + } + if (typeIsEmpty && !Object.keys(target.events).length) { + targets.splice(targetIndex, 1); + } + } + function addDelegate(selector, context, type, listener, optionalArg) { + var options = getOptions(optionalArg); + if (!delegatedEvents[type]) { + delegatedEvents[type] = []; + + // add delegate listener functions + for (var _i3 = 0; _i3 < documents.length; _i3++) { + var doc = documents[_i3]; + add(doc, type, delegateListener); + add(doc, type, delegateUseCapture, true); + } + } + var delegates = delegatedEvents[type]; + var delegate = find(delegates, function (d) { + return d.selector === selector && d.context === context; + }); + if (!delegate) { + delegate = { + selector: selector, + context: context, + listeners: [] + }; + delegates.push(delegate); + } + delegate.listeners.push({ + func: listener, + options: options + }); + } + function removeDelegate(selector, context, type, listener, optionalArg) { + var options = getOptions(optionalArg); + var delegates = delegatedEvents[type]; + var matchFound = false; + var index; + if (!delegates) return; + + // count from last index of delegated to 0 + for (index = delegates.length - 1; index >= 0; index--) { + var cur = delegates[index]; + // look for matching selector and context Node + if (cur.selector === selector && cur.context === context) { + var listeners = cur.listeners; + + // each item of the listeners array is an array: [function, capture, passive] + for (var i = listeners.length - 1; i >= 0; i--) { + var entry = listeners[i]; + + // check if the listener functions and capture and passive flags match + if (entry.func === listener && optionsMatch(entry.options, options)) { + // remove the listener from the array of listeners + listeners.splice(i, 1); + + // if all listeners for this target have been removed + // remove the target from the delegates array + if (!listeners.length) { + delegates.splice(index, 1); + + // remove delegate function from context + remove(context, type, delegateListener); + remove(context, type, delegateUseCapture, true); + } + + // only remove one listener + matchFound = true; + break; + } + } + if (matchFound) { + break; + } + } + } + } + + // bound to the interactable context when a DOM event + // listener is added to a selector interactable + function delegateListener(event, optionalArg) { + var options = getOptions(optionalArg); + var fakeEvent = new FakeEvent(event); + var delegates = delegatedEvents[event.type]; + var _pointerUtils$getEven = getEventTargets(event), + eventTarget = _pointerUtils$getEven[0]; + var element = eventTarget; + + // climb up document tree looking for selector matches + while (is.element(element)) { + for (var i = 0; i < delegates.length; i++) { + var cur = delegates[i]; + var selector = cur.selector, + context = cur.context; + if (matchesSelector(element, selector) && nodeContains(context, eventTarget) && nodeContains(context, element)) { + var listeners = cur.listeners; + fakeEvent.currentTarget = element; + for (var _i5 = 0; _i5 < listeners.length; _i5++) { + var entry = listeners[_i5]; + if (optionsMatch(entry.options, options)) { + entry.func(fakeEvent); + } + } + } + } + element = parentNode(element); + } + } + function delegateUseCapture(event) { + return delegateListener.call(this, event, true); + } + + // for type inferrence + return eventsMethods; + } + var FakeEvent = /*#__PURE__*/function () { + function FakeEvent(originalEvent) { + _classCallCheck(this, FakeEvent); + _defineProperty(this, "currentTarget", void 0); + _defineProperty(this, "originalEvent", void 0); + _defineProperty(this, "type", void 0); + this.originalEvent = originalEvent; + // duplicate the event so that currentTarget can be changed + pointerExtend(this, originalEvent); + } + _createClass(FakeEvent, [{ + key: "preventOriginalDefault", + value: function preventOriginalDefault() { + this.originalEvent.preventDefault(); + } + }, { + key: "stopPropagation", + value: function stopPropagation() { + this.originalEvent.stopPropagation(); + } + }, { + key: "stopImmediatePropagation", + value: function stopImmediatePropagation() { + this.originalEvent.stopImmediatePropagation(); + } + }]); + return FakeEvent; + }(); + function getOptions(param) { + if (!is.object(param)) { + return { + capture: !!param, + passive: false + }; + } + return { + capture: !!param.capture, + passive: !!param.passive + }; + } + function optionsMatch(a, b) { + if (a === b) return true; + if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false; + return !!a.capture === !!b.capture && !!a.passive === !!b.passive; + } + var events = { + id: 'events', + install: install$5 + }; + + var finder = { + methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'], + search: function search(details) { + for (var _i2 = 0, _finder$methodOrder2 = finder.methodOrder; _i2 < _finder$methodOrder2.length; _i2++) { + var method = _finder$methodOrder2[_i2]; + var interaction = finder[method](details); + if (interaction) { + return interaction; + } + } + return null; + }, + // try to resume simulation with a new pointer + simulationResume: function simulationResume(_ref) { + var pointerType = _ref.pointerType, + eventType = _ref.eventType, + eventTarget = _ref.eventTarget, + scope = _ref.scope; + if (!/down|start/i.test(eventType)) { + return null; + } + for (var _i4 = 0, _scope$interactions$l2 = scope.interactions.list; _i4 < _scope$interactions$l2.length; _i4++) { + var interaction = _scope$interactions$l2[_i4]; + var element = eventTarget; + if (interaction.simulation && interaction.simulation.allowResume && interaction.pointerType === pointerType) { + while (element) { + // if the element is the interaction element + if (element === interaction.element) { + return interaction; + } + element = parentNode(element); + } + } + } + return null; + }, + // if it's a mouse or pen interaction + mouseOrPen: function mouseOrPen(_ref2) { + var pointerId = _ref2.pointerId, + pointerType = _ref2.pointerType, + eventType = _ref2.eventType, + scope = _ref2.scope; + if (pointerType !== 'mouse' && pointerType !== 'pen') { + return null; + } + var firstNonActive; + for (var _i6 = 0, _scope$interactions$l4 = scope.interactions.list; _i6 < _scope$interactions$l4.length; _i6++) { + var interaction = _scope$interactions$l4[_i6]; + if (interaction.pointerType === pointerType) { + // if it's a down event, skip interactions with running simulations + if (interaction.simulation && !hasPointerId(interaction, pointerId)) { + continue; + } + + // if the interaction is active, return it immediately + if (interaction.interacting()) { + return interaction; + } + // otherwise save it and look for another active interaction + else if (!firstNonActive) { + firstNonActive = interaction; + } + } + } // if no active mouse interaction was found use the first inactive mouse + // interaction + if (firstNonActive) { + return firstNonActive; + } + + // find any mouse or pen interaction. + // ignore the interaction if the eventType is a *down, and a simulation + // is active + for (var _i8 = 0, _scope$interactions$l6 = scope.interactions.list; _i8 < _scope$interactions$l6.length; _i8++) { + var _interaction = _scope$interactions$l6[_i8]; + if (_interaction.pointerType === pointerType && !(/down/i.test(eventType) && _interaction.simulation)) { + return _interaction; + } + } + return null; + }, + // get interaction that has this pointer + hasPointer: function hasPointer(_ref3) { + var pointerId = _ref3.pointerId, + scope = _ref3.scope; + for (var _i10 = 0, _scope$interactions$l8 = scope.interactions.list; _i10 < _scope$interactions$l8.length; _i10++) { + var interaction = _scope$interactions$l8[_i10]; + if (hasPointerId(interaction, pointerId)) { + return interaction; + } + } + return null; + }, + // get first idle interaction with a matching pointerType + idle: function idle(_ref4) { + var pointerType = _ref4.pointerType, + scope = _ref4.scope; + for (var _i12 = 0, _scope$interactions$l10 = scope.interactions.list; _i12 < _scope$interactions$l10.length; _i12++) { + var interaction = _scope$interactions$l10[_i12]; + // if there's already a pointer held down + if (interaction.pointers.length === 1) { + var target = interaction.interactable; + // don't add this pointer if there is a target interactable and it + // isn't gesturable + if (target && !(target.options.gesture && target.options.gesture.enabled)) { + continue; + } + } + // maximum of 2 pointers per interaction + else if (interaction.pointers.length >= 2) { + continue; + } + if (!interaction.interacting() && pointerType === interaction.pointerType) { + return interaction; + } + } + return null; + } + }; + function hasPointerId(interaction, pointerId) { + return interaction.pointers.some(function (_ref5) { + var id = _ref5.id; + return id === pointerId; + }); + } + var finder$1 = finder; + + var methodNames = ['pointerDown', 'pointerMove', 'pointerUp', 'updatePointer', 'removePointer', 'windowBlur']; + function install$4(scope) { + var listeners = {}; + for (var _i2 = 0; _i2 < methodNames.length; _i2++) { + var method = methodNames[_i2]; + listeners[method] = doOnInteractions(method, scope); + } + var pEventTypes = browser$1.pEventTypes; + var docEvents; + if (domObjects$1.PointerEvent) { + docEvents = [{ + type: pEventTypes.down, + listener: releasePointersOnRemovedEls + }, { + type: pEventTypes.down, + listener: listeners.pointerDown + }, { + type: pEventTypes.move, + listener: listeners.pointerMove + }, { + type: pEventTypes.up, + listener: listeners.pointerUp + }, { + type: pEventTypes.cancel, + listener: listeners.pointerUp + }]; + } else { + docEvents = [{ + type: 'mousedown', + listener: listeners.pointerDown + }, { + type: 'mousemove', + listener: listeners.pointerMove + }, { + type: 'mouseup', + listener: listeners.pointerUp + }, { + type: 'touchstart', + listener: releasePointersOnRemovedEls + }, { + type: 'touchstart', + listener: listeners.pointerDown + }, { + type: 'touchmove', + listener: listeners.pointerMove + }, { + type: 'touchend', + listener: listeners.pointerUp + }, { + type: 'touchcancel', + listener: listeners.pointerUp + }]; + } + docEvents.push({ + type: 'blur', + listener: function listener(event) { + for (var _i4 = 0, _scope$interactions$l2 = scope.interactions.list; _i4 < _scope$interactions$l2.length; _i4++) { + var interaction = _scope$interactions$l2[_i4]; + interaction.documentBlur(event); + } + } + }); + + // for ignoring browser's simulated mouse events + scope.prevTouchTime = 0; + scope.Interaction = /*#__PURE__*/function (_InteractionBase) { + _inherits(_class, _InteractionBase); + var _super = _createSuper(_class); + function _class() { + _classCallCheck(this, _class); + return _super.apply(this, arguments); + } + _createClass(_class, [{ + key: "pointerMoveTolerance", + get: function get() { + return scope.interactions.pointerMoveTolerance; + }, + set: function set(value) { + scope.interactions.pointerMoveTolerance = value; + } + }, { + key: "_now", + value: function _now() { + return scope.now(); + } + }]); + return _class; + }(Interaction); + scope.interactions = { + // all active and idle interactions + list: [], + new: function _new(options) { + options.scopeFire = function (name, arg) { + return scope.fire(name, arg); + }; + var interaction = new scope.Interaction(options); + scope.interactions.list.push(interaction); + return interaction; + }, + listeners: listeners, + docEvents: docEvents, + pointerMoveTolerance: 1 + }; + function releasePointersOnRemovedEls() { + // for all inactive touch interactions with pointers down + for (var _i6 = 0, _scope$interactions$l4 = scope.interactions.list; _i6 < _scope$interactions$l4.length; _i6++) { + var interaction = _scope$interactions$l4[_i6]; + if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) { + continue; + } + + // if a pointer is down on an element that is no longer in the DOM tree + var _loop = function _loop() { + var pointer = _interaction$pointers2[_i8]; + if (!scope.documents.some(function (_ref) { + var doc = _ref.doc; + return nodeContains(doc, pointer.downTarget); + })) { + // remove the pointer from the interaction + interaction.removePointer(pointer.pointer, pointer.event); + } + }; + for (var _i8 = 0, _interaction$pointers2 = interaction.pointers; _i8 < _interaction$pointers2.length; _i8++) { + _loop(); + } + } + } + scope.usePlugin(interactablePreventDefault); + } + function doOnInteractions(method, scope) { + return function (event) { + var interactions = scope.interactions.list; + var pointerType = getPointerType(event); + var _pointerUtils$getEven = getEventTargets(event), + eventTarget = _pointerUtils$getEven[0], + curEventTarget = _pointerUtils$getEven[1]; + var matches = []; // [ [pointer, interaction], ...] + + if (/^touch/.test(event.type)) { + scope.prevTouchTime = scope.now(); + + // @ts-expect-error + for (var _i10 = 0, _event$changedTouches2 = event.changedTouches; _i10 < _event$changedTouches2.length; _i10++) { + var changedTouch = _event$changedTouches2[_i10]; + var pointer = changedTouch; + var pointerId = getPointerId(pointer); + var searchDetails = { + pointer: pointer, + pointerId: pointerId, + pointerType: pointerType, + eventType: event.type, + eventTarget: eventTarget, + curEventTarget: curEventTarget, + scope: scope + }; + var interaction = getInteraction(searchDetails); + matches.push([searchDetails.pointer, searchDetails.eventTarget, searchDetails.curEventTarget, interaction]); + } + } else { + var invalidPointer = false; + if (!browser$1.supportsPointerEvent && /mouse/.test(event.type)) { + // ignore mouse events while touch interactions are active + for (var i = 0; i < interactions.length && !invalidPointer; i++) { + invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown; + } + + // try to ignore mouse events that are simulated by the browser + // after a touch event + invalidPointer = invalidPointer || scope.now() - scope.prevTouchTime < 500 || + // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated + event.timeStamp === 0; + } + if (!invalidPointer) { + var _searchDetails = { + pointer: event, + pointerId: getPointerId(event), + pointerType: pointerType, + eventType: event.type, + curEventTarget: curEventTarget, + eventTarget: eventTarget, + scope: scope + }; + var _interaction = getInteraction(_searchDetails); + matches.push([_searchDetails.pointer, _searchDetails.eventTarget, _searchDetails.curEventTarget, _interaction]); + } + } + + // eslint-disable-next-line no-shadow + for (var _i12 = 0; _i12 < matches.length; _i12++) { + var _matches$_i = matches[_i12], + _pointer = _matches$_i[0], + _eventTarget = _matches$_i[1], + _curEventTarget = _matches$_i[2], + _interaction2 = _matches$_i[3]; + _interaction2[method](_pointer, event, _eventTarget, _curEventTarget); + } + }; + } + function getInteraction(searchDetails) { + var pointerType = searchDetails.pointerType, + scope = searchDetails.scope; + var foundInteraction = finder$1.search(searchDetails); + var signalArg = { + interaction: foundInteraction, + searchDetails: searchDetails + }; + scope.fire('interactions:find', signalArg); + return signalArg.interaction || scope.interactions.new({ + pointerType: pointerType + }); + } + function onDocSignal(_ref2, eventMethodName) { + var doc = _ref2.doc, + scope = _ref2.scope, + options = _ref2.options; + var docEvents = scope.interactions.docEvents, + events = scope.events; + var eventMethod = events[eventMethodName]; + if (scope.browser.isIOS && !options.events) { + options.events = { + passive: false + }; + } + + // delegate event listener + for (var eventType in events.delegatedEvents) { + eventMethod(doc, eventType, events.delegateListener); + eventMethod(doc, eventType, events.delegateUseCapture, true); + } + var eventOptions = options && options.events; + for (var _i14 = 0; _i14 < docEvents.length; _i14++) { + var _docEvents$_i = docEvents[_i14], + _type = _docEvents$_i.type, + listener = _docEvents$_i.listener; + eventMethod(doc, _type, listener, eventOptions); + } + } + var interactions = { + id: 'core/interactions', + install: install$4, + listeners: { + 'scope:add-document': function scopeAddDocument(arg) { + return onDocSignal(arg, 'add'); + }, + 'scope:remove-document': function scopeRemoveDocument(arg) { + return onDocSignal(arg, 'remove'); + }, + 'interactable:unset': function interactableUnset(_ref3, scope) { + var interactable = _ref3.interactable; + // Stop and destroy related interactions when an Interactable is unset + for (var i = scope.interactions.list.length - 1; i >= 0; i--) { + var interaction = scope.interactions.list[i]; + if (interaction.interactable !== interactable) { + continue; + } + interaction.stop(); + scope.fire('interactions:destroy', { + interaction: interaction + }); + interaction.destroy(); + if (scope.interactions.list.length > 2) { + scope.interactions.list.splice(i, 1); + } + } + } + }, + onDocSignal: onDocSignal, + doOnInteractions: doOnInteractions, + methodNames: methodNames + }; + var interactions$1 = interactions; + + var OnOffMethod = /*#__PURE__*/function (OnOffMethod) { + OnOffMethod[OnOffMethod["On"] = 0] = "On"; + OnOffMethod[OnOffMethod["Off"] = 1] = "Off"; + return OnOffMethod; + }(OnOffMethod || {}); + /** + * ```ts + * const interactable = interact('.cards') + * .draggable({ + * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) } + * }) + * .resizable({ + * listeners: { move: event => console.log(event.rect) }, + * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })] + * }) + * ``` + */ + var Interactable = /*#__PURE__*/function () { + function Interactable(target, options, defaultContext, scopeEvents) { + _classCallCheck(this, Interactable); + _defineProperty(this, "target", void 0); + /** @internal */ + _defineProperty(this, "options", void 0); + /** @internal */ + _defineProperty(this, "_actions", void 0); + /** @internal */ + _defineProperty(this, "events", new Eventable()); + /** @internal */ + _defineProperty(this, "_context", void 0); + /** @internal */ + _defineProperty(this, "_win", void 0); + /** @internal */ + _defineProperty(this, "_doc", void 0); + /** @internal */ + _defineProperty(this, "_scopeEvents", void 0); + this._actions = options.actions; + this.target = target; + this._context = options.context || defaultContext; + this._win = getWindow(trySelector(target) ? this._context : target); + this._doc = this._win.document; + this._scopeEvents = scopeEvents; + this.set(options); + } + _createClass(Interactable, [{ + key: "_defaults", + get: /** @internal */function get() { + return { + base: {}, + perAction: {}, + actions: {} + }; + } + }, { + key: "setOnEvents", + value: function setOnEvents(actionName, phases) { + if (is.func(phases.onstart)) { + this.on("".concat(actionName, "start"), phases.onstart); + } + if (is.func(phases.onmove)) { + this.on("".concat(actionName, "move"), phases.onmove); + } + if (is.func(phases.onend)) { + this.on("".concat(actionName, "end"), phases.onend); + } + if (is.func(phases.oninertiastart)) { + this.on("".concat(actionName, "inertiastart"), phases.oninertiastart); + } + return this; + } + }, { + key: "updatePerActionListeners", + value: function updatePerActionListeners(actionName, prev, cur) { + var _this$_actions$map$ac, + _this = this; + var actionFilter = (_this$_actions$map$ac = this._actions.map[actionName]) == null ? void 0 : _this$_actions$map$ac.filterEventType; + var filter = function filter(type) { + return (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, _this._actions); + }; + if (is.array(prev) || is.object(prev)) { + this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter); + } + if (is.array(cur) || is.object(cur)) { + this._onOff(OnOffMethod.On, actionName, cur, undefined, filter); + } + } + }, { + key: "setPerAction", + value: function setPerAction(actionName, options) { + var defaults = this._defaults; + + // for all the default per-action options + for (var optionName_ in options) { + var optionName = optionName_; + var actionOptions = this.options[actionName]; + var optionValue = options[optionName]; + + // remove old event listeners and add new ones + if (optionName === 'listeners') { + this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue); + } + + // if the option value is an array + if (is.array(optionValue)) { + actionOptions[optionName] = from(optionValue); + } + // if the option value is an object + else if (is.plainObject(optionValue)) { + actionOptions[optionName] = extend(actionOptions[optionName] || {}, clone(optionValue)); + + // set anabled field to true if it exists in the defaults + if (is.object(defaults.perAction[optionName]) && 'enabled' in defaults.perAction[optionName]) { + actionOptions[optionName].enabled = optionValue.enabled !== false; + } + } + // if the option value is a boolean and the default is an object + else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) { + actionOptions[optionName].enabled = optionValue; + } + // if it's anything else, do a plain assignment + else { + actionOptions[optionName] = optionValue; + } + } + } + + /** + * The default function to get an Interactables bounding rect. Can be + * overridden using {@link Interactable.rectChecker}. + * + * @param {Element} [element] The element to measure. + * @return {Rect} The object's bounding rectangle. + */ + }, { + key: "getRect", + value: function getRect(element) { + element = element || (is.element(this.target) ? this.target : null); + if (is.string(this.target)) { + element = element || this._context.querySelector(this.target); + } + return getElementRect(element); + } + + /** + * Returns or sets the function used to calculate the interactable's + * element's rectangle + * + * @param {function} [checker] A function which returns this Interactable's + * bounding rectangle. See {@link Interactable.getRect} + * @return {function | object} The checker function or this Interactable + */ + }, { + key: "rectChecker", + value: function rectChecker(checker) { + var _this2 = this; + if (is.func(checker)) { + this.getRect = function (element) { + var rect = extend({}, checker.apply(_this2, element)); + if (!('width' in rect)) { + rect.width = rect.right - rect.left; + rect.height = rect.bottom - rect.top; + } + return rect; + }; + return this; + } + if (checker === null) { + delete this.getRect; + return this; + } + return this.getRect; + } + + /** @internal */ + }, { + key: "_backCompatOption", + value: function _backCompatOption(optionName, newValue) { + if (trySelector(newValue) || is.object(newValue)) { + this.options[optionName] = newValue; + for (var action in this._actions.map) { + this.options[action][optionName] = newValue; + } + return this; + } + return this.options[optionName]; + } + + /** + * Gets or sets the origin of the Interactable's element. The x and y + * of the origin will be subtracted from action event coordinates. + * + * @param {Element | object | string} [origin] An HTML or SVG Element whose + * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self' + * or any CSS selector + * + * @return {object} The current origin or this Interactable + */ + }, { + key: "origin", + value: function origin(newValue) { + return this._backCompatOption('origin', newValue); + } + + /** + * Returns or sets the mouse coordinate types used to calculate the + * movement of the pointer. + * + * @param {string} [newValue] Use 'client' if you will be scrolling while + * interacting; Use 'page' if you want autoScroll to work + * @return {string | object} The current deltaSource or this Interactable + */ + }, { + key: "deltaSource", + value: function deltaSource(newValue) { + if (newValue === 'page' || newValue === 'client') { + this.options.deltaSource = newValue; + return this; + } + return this.options.deltaSource; + } + + /** @internal */ + }, { + key: "getAllElements", + value: function getAllElements() { + var target = this.target; + if (is.string(target)) { + return Array.from(this._context.querySelectorAll(target)); + } + if (is.func(target) && target.getAllElements) { + return target.getAllElements(); + } + return is.element(target) ? [target] : []; + } + + /** + * Gets the selector context Node of the Interactable. The default is + * `window.document`. + * + * @return {Node} The context Node of this Interactable + */ + }, { + key: "context", + value: function context() { + return this._context; + } + }, { + key: "inContext", + value: function inContext(element) { + return this._context === element.ownerDocument || nodeContains(this._context, element); + } + + /** @internal */ + }, { + key: "testIgnoreAllow", + value: function testIgnoreAllow(options, targetNode, eventTarget) { + return !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) && this.testAllow(options.allowFrom, targetNode, eventTarget); + } + + /** @internal */ + }, { + key: "testAllow", + value: function testAllow(allowFrom, targetNode, element) { + if (!allowFrom) { + return true; + } + if (!is.element(element)) { + return false; + } + if (is.string(allowFrom)) { + return matchesUpTo(element, allowFrom, targetNode); + } else if (is.element(allowFrom)) { + return nodeContains(allowFrom, element); + } + return false; + } + + /** @internal */ + }, { + key: "testIgnore", + value: function testIgnore(ignoreFrom, targetNode, element) { + if (!ignoreFrom || !is.element(element)) { + return false; + } + if (is.string(ignoreFrom)) { + return matchesUpTo(element, ignoreFrom, targetNode); + } else if (is.element(ignoreFrom)) { + return nodeContains(ignoreFrom, element); + } + return false; + } + + /** + * Calls listeners for the given InteractEvent type bound globally + * and directly to this Interactable + * + * @param {InteractEvent} iEvent The InteractEvent object to be fired on this + * Interactable + * @return {Interactable} this Interactable + */ + }, { + key: "fire", + value: function fire(iEvent) { + this.events.fire(iEvent); + return this; + } + + /** @internal */ + }, { + key: "_onOff", + value: function _onOff(method, typeArg, listenerArg, options, filter) { + if (is.object(typeArg) && !is.array(typeArg)) { + options = listenerArg; + listenerArg = null; + } + var listeners = normalize(typeArg, listenerArg, filter); + for (var _type in listeners) { + if (_type === 'wheel') { + _type = browser$1.wheelEvent; + } + for (var _i2 = 0, _listeners$_type2 = listeners[_type]; _i2 < _listeners$_type2.length; _i2++) { + var listener = _listeners$_type2[_i2]; + // if it is an action event type + if (isNonNativeEvent(_type, this._actions)) { + this.events[method === OnOffMethod.On ? 'on' : 'off'](_type, listener); + } + // delegated event + else if (is.string(this.target)) { + this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](this.target, this._context, _type, listener, options); + } + // remove listener from this Interactable's element + else { + this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](this.target, _type, listener, options); + } + } + } + return this; + } + + /** + * Binds a listener for an InteractEvent, pointerEvent or DOM event. + * + * @param {string | array | object} types The types of events to listen + * for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * addEventListener + * @return {Interactable} This Interactable + */ + }, { + key: "on", + value: function on(types, listener, options) { + return this._onOff(OnOffMethod.On, types, listener, options); + } + + /** + * Removes an InteractEvent, pointerEvent or DOM event listener. + * + * @param {string | array | object} types The types of events that were + * listened for + * @param {function | array | object} [listener] The event listener function(s) + * @param {object | boolean} [options] options object or useCapture flag for + * removeEventListener + * @return {Interactable} This Interactable + */ + }, { + key: "off", + value: function off(types, listener, options) { + return this._onOff(OnOffMethod.Off, types, listener, options); + } + + /** + * Reset the options of this Interactable + * + * @param {object} options The new settings to apply + * @return {object} This Interactable + */ + }, { + key: "set", + value: function set(options) { + var defaults = this._defaults; + if (!is.object(options)) { + options = {}; + } + this.options = clone(defaults.base); + for (var actionName_ in this._actions.methodDict) { + var actionName = actionName_; + var methodName = this._actions.methodDict[actionName]; + this.options[actionName] = {}; + this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName])); + this[methodName](options[actionName]); + } + for (var setting in options) { + if (setting === 'getRect') { + this.rectChecker(options.getRect); + continue; + } + if (is.func(this[setting])) { + this[setting](options[setting]); + } + } + return this; + } + + /** + * Remove this interactable from the list of interactables and remove it's + * action capabilities and event listeners + */ + }, { + key: "unset", + value: function unset() { + if (is.string(this.target)) { + // remove delegated events + for (var _type2 in this._scopeEvents.delegatedEvents) { + var delegated = this._scopeEvents.delegatedEvents[_type2]; + for (var i = delegated.length - 1; i >= 0; i--) { + var _delegated$i = delegated[i], + selector = _delegated$i.selector, + context = _delegated$i.context, + listeners = _delegated$i.listeners; + if (selector === this.target && context === this._context) { + delegated.splice(i, 1); + } + for (var l = listeners.length - 1; l >= 0; l--) { + this._scopeEvents.removeDelegate(this.target, this._context, _type2, listeners[l][0], listeners[l][1]); + } + } + } + } else { + this._scopeEvents.remove(this.target, 'all'); + } + } + }]); + return Interactable; + }(); + + var InteractableSet = /*#__PURE__*/function () { + function InteractableSet(scope) { + var _this = this; + _classCallCheck(this, InteractableSet); + // all set interactables + _defineProperty(this, "list", []); + _defineProperty(this, "selectorMap", {}); + _defineProperty(this, "scope", void 0); + this.scope = scope; + scope.addListeners({ + 'interactable:unset': function interactableUnset(_ref) { + var interactable = _ref.interactable; + var target = interactable.target; + var interactablesOnTarget = is.string(target) ? _this.selectorMap[target] : target[_this.scope.id]; + var targetIndex = findIndex(interactablesOnTarget, function (i) { + return i === interactable; + }); + interactablesOnTarget.splice(targetIndex, 1); + } + }); + } + _createClass(InteractableSet, [{ + key: "new", + value: function _new(target, options) { + options = extend(options || {}, { + actions: this.scope.actions + }); + var interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events); + this.scope.addDocument(interactable._doc); + this.list.push(interactable); + if (is.string(target)) { + if (!this.selectorMap[target]) { + this.selectorMap[target] = []; + } + this.selectorMap[target].push(interactable); + } else { + if (!interactable.target[this.scope.id]) { + Object.defineProperty(target, this.scope.id, { + value: [], + configurable: true + }); + } + target[this.scope.id].push(interactable); + } + this.scope.fire('interactable:new', { + target: target, + options: options, + interactable: interactable, + win: this.scope._win + }); + return interactable; + } + }, { + key: "getExisting", + value: function getExisting(target, options) { + var context = options && options.context || this.scope.document; + var isSelector = is.string(target); + var interactablesOnTarget = isSelector ? this.selectorMap[target] : target[this.scope.id]; + if (!interactablesOnTarget) return undefined; + return find(interactablesOnTarget, function (interactable) { + return interactable._context === context && (isSelector || interactable.inContext(target)); + }); + } + }, { + key: "forEachMatch", + value: function forEachMatch(node, callback) { + for (var _i2 = 0, _this$list2 = this.list; _i2 < _this$list2.length; _i2++) { + var _interactable = _this$list2[_i2]; + var ret = void 0; + if ((is.string(_interactable.target) ? + // target is a selector and the element matches + is.element(node) && matchesSelector(node, _interactable.target) : + // target is the element + node === _interactable.target) && + // the element is in context + _interactable.inContext(node)) { + ret = callback(_interactable); + } + if (ret !== undefined) { + return ret; + } + } + } + }]); + return InteractableSet; + }(); + + /** + * ```js + * interact('#draggable').draggable(true) + * + * var rectables = interact('rect') + * rectables + * .gesturable(true) + * .on('gesturemove', function (event) { + * // ... + * }) + * ``` + * + * The methods of this variable can be used to set elements as interactables + * and also to change various default settings. + * + * Calling it as a function and passing an element or a valid CSS selector + * string returns an Interactable object which has various methods to configure + * it. + * + * @param {Element | string} target The HTML or SVG Element to interact with + * or CSS selector + * @return {Interactable} + */ + + function createInteractStatic(scope) { + var interact = function interact(target, options) { + var interactable = scope.interactables.getExisting(target, options); + if (!interactable) { + interactable = scope.interactables.new(target, options); + interactable.events.global = interact.globalEvents; + } + return interactable; + }; + + // expose the functions used to calculate multi-touch properties + interact.getPointerAverage = pointerAverage; + interact.getTouchBBox = touchBBox; + interact.getTouchDistance = touchDistance; + interact.getTouchAngle = touchAngle; + interact.getElementRect = getElementRect; + interact.getElementClientRect = getElementClientRect; + interact.matchesSelector = matchesSelector; + interact.closest = closest; + interact.globalEvents = {}; + + // eslint-disable-next-line no-undef + interact.version = "1.10.25"; + interact.scope = scope; + interact.use = function (plugin, options) { + this.scope.usePlugin(plugin, options); + return this; + }; + interact.isSet = function (target, options) { + return !!this.scope.interactables.get(target, options && options.context); + }; + interact.on = warnOnce(function on(type, listener, options) { + if (is.string(type) && type.search(' ') !== -1) { + type = type.trim().split(/ +/); + } + if (is.array(type)) { + for (var _i2 = 0, _ref2 = type; _i2 < _ref2.length; _i2++) { + var eventType = _ref2[_i2]; + this.on(eventType, listener, options); + } + return this; + } + if (is.object(type)) { + for (var prop in type) { + this.on(prop, type[prop], listener); + } + return this; + } + + // if it is an InteractEvent type, add listener to globalEvents + if (isNonNativeEvent(type, this.scope.actions)) { + // if this type of event was never bound + if (!this.globalEvents[type]) { + this.globalEvents[type] = [listener]; + } else { + this.globalEvents[type].push(listener); + } + } + // If non InteractEvent type, addEventListener to document + else { + this.scope.events.add(this.scope.document, type, listener, { + options: options + }); + } + return this; + }, 'The interact.on() method is being deprecated'); + interact.off = warnOnce(function off(type, listener, options) { + if (is.string(type) && type.search(' ') !== -1) { + type = type.trim().split(/ +/); + } + if (is.array(type)) { + for (var _i4 = 0, _type2 = type; _i4 < _type2.length; _i4++) { + var eventType = _type2[_i4]; + this.off(eventType, listener, options); + } + return this; + } + if (is.object(type)) { + for (var prop in type) { + this.off(prop, type[prop], listener); + } + return this; + } + if (isNonNativeEvent(type, this.scope.actions)) { + var index; + if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) { + this.globalEvents[type].splice(index, 1); + } + } else { + this.scope.events.remove(this.scope.document, type, listener, options); + } + return this; + }, 'The interact.off() method is being deprecated'); + interact.debug = function () { + return this.scope; + }; + interact.supportsTouch = function () { + return browser$1.supportsTouch; + }; + interact.supportsPointerEvent = function () { + return browser$1.supportsPointerEvent; + }; + interact.stop = function () { + for (var _i6 = 0, _this$scope$interacti2 = this.scope.interactions.list; _i6 < _this$scope$interacti2.length; _i6++) { + var interaction = _this$scope$interacti2[_i6]; + interaction.stop(); + } + return this; + }; + interact.pointerMoveTolerance = function (newValue) { + if (is.number(newValue)) { + this.scope.interactions.pointerMoveTolerance = newValue; + return this; + } + return this.scope.interactions.pointerMoveTolerance; + }; + interact.addDocument = function (doc, options) { + this.scope.addDocument(doc, options); + }; + interact.removeDocument = function (doc) { + this.scope.removeDocument(doc); + }; + return interact; + } + + /** @internal */ + + /** @internal */ + var Scope = /*#__PURE__*/function () { + function Scope() { + var _this = this; + _classCallCheck(this, Scope); + _defineProperty(this, "id", "__interact_scope_".concat(Math.floor(Math.random() * 100))); + _defineProperty(this, "isInitialized", false); + _defineProperty(this, "listenerMaps", []); + _defineProperty(this, "browser", browser$1); + _defineProperty(this, "defaults", clone(defaults$7)); + _defineProperty(this, "Eventable", Eventable); + _defineProperty(this, "actions", { + map: {}, + phases: { + start: true, + move: true, + end: true + }, + methodDict: {}, + phaselessTypes: {} + }); + _defineProperty(this, "interactStatic", createInteractStatic(this)); + _defineProperty(this, "InteractEvent", InteractEvent); + _defineProperty(this, "Interactable", void 0); + _defineProperty(this, "interactables", new InteractableSet(this)); + // main window + _defineProperty(this, "_win", void 0); + // main document + _defineProperty(this, "document", void 0); + // main window + _defineProperty(this, "window", void 0); + // all documents being listened to + _defineProperty(this, "documents", []); + _defineProperty(this, "_plugins", { + list: [], + map: {} + }); + _defineProperty(this, "onWindowUnload", function (event) { + return _this.removeDocument(event.target); + }); + var scope = this; + this.Interactable = /*#__PURE__*/function (_InteractableBase) { + _inherits(_class2, _InteractableBase); + var _super = _createSuper(_class2); + function _class2() { + _classCallCheck(this, _class2); + return _super.apply(this, arguments); + } + _createClass(_class2, [{ + key: "_defaults", + get: function get() { + return scope.defaults; + } + }, { + key: "set", + value: function set(options) { + _get(_getPrototypeOf(_class2.prototype), "set", this).call(this, options); + scope.fire('interactable:set', { + options: options, + interactable: this + }); + return this; + } + }, { + key: "unset", + value: function unset() { + _get(_getPrototypeOf(_class2.prototype), "unset", this).call(this); + var index = scope.interactables.list.indexOf(this); + if (index < 0) return; + scope.interactables.list.splice(index, 1); + scope.fire('interactable:unset', { + interactable: this + }); + } + }]); + return _class2; + }(Interactable); + } + _createClass(Scope, [{ + key: "addListeners", + value: function addListeners(map, id) { + this.listenerMaps.push({ + id: id, + map: map + }); + } + }, { + key: "fire", + value: function fire(name, arg) { + for (var _i2 = 0, _this$listenerMaps2 = this.listenerMaps; _i2 < _this$listenerMaps2.length; _i2++) { + var listener = _this$listenerMaps2[_i2].map[name]; + if (!!listener && listener(arg, this, name) === false) { + return false; + } + } + } + }, { + key: "init", + value: function init(window) { + return this.isInitialized ? this : initScope(this, window); + } + }, { + key: "pluginIsInstalled", + value: function pluginIsInstalled(plugin) { + var id = plugin.id; + return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1; + } + }, { + key: "usePlugin", + value: function usePlugin(plugin, options) { + if (!this.isInitialized) { + return this; + } + if (this.pluginIsInstalled(plugin)) { + return this; + } + if (plugin.id) { + this._plugins.map[plugin.id] = plugin; + } + this._plugins.list.push(plugin); + if (plugin.install) { + plugin.install(this, options); + } + if (plugin.listeners && plugin.before) { + var index = 0; + var len = this.listenerMaps.length; + var before = plugin.before.reduce(function (acc, id) { + acc[id] = true; + acc[pluginIdRoot(id)] = true; + return acc; + }, {}); + for (; index < len; index++) { + var otherId = this.listenerMaps[index].id; + if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) { + break; + } + } + this.listenerMaps.splice(index, 0, { + id: plugin.id, + map: plugin.listeners + }); + } else if (plugin.listeners) { + this.listenerMaps.push({ + id: plugin.id, + map: plugin.listeners + }); + } + return this; + } + }, { + key: "addDocument", + value: function addDocument(doc, options) { + // do nothing if document is already known + if (this.getDocIndex(doc) !== -1) { + return false; + } + var window = getWindow(doc); + options = options ? extend({}, options) : {}; + this.documents.push({ + doc: doc, + options: options + }); + this.events.documents.push(doc); + + // don't add an unload event for the main document + // so that the page may be cached in browser history + if (doc !== this.document) { + this.events.add(window, 'unload', this.onWindowUnload); + } + this.fire('scope:add-document', { + doc: doc, + window: window, + scope: this, + options: options + }); + } + }, { + key: "removeDocument", + value: function removeDocument(doc) { + var index = this.getDocIndex(doc); + var window = getWindow(doc); + var options = this.documents[index].options; + this.events.remove(window, 'unload', this.onWindowUnload); + this.documents.splice(index, 1); + this.events.documents.splice(index, 1); + this.fire('scope:remove-document', { + doc: doc, + window: window, + scope: this, + options: options + }); + } + }, { + key: "getDocIndex", + value: function getDocIndex(doc) { + for (var i = 0; i < this.documents.length; i++) { + if (this.documents[i].doc === doc) { + return i; + } + } + return -1; + } + }, { + key: "getDocOptions", + value: function getDocOptions(doc) { + var docIndex = this.getDocIndex(doc); + return docIndex === -1 ? null : this.documents[docIndex].options; + } + }, { + key: "now", + value: function now() { + return (this.window.Date || Date).now(); + } + }]); + return Scope; + }(); + + /** @internal */ + function initScope(scope, window) { + scope.isInitialized = true; + if (is.window(window)) { + init$3(window); + } + domObjects$1.init(window); + browser$1.init(window); + raf.init(window); + + // @ts-expect-error + scope.window = window; + scope.document = window.document; + scope.usePlugin(interactions$1); + scope.usePlugin(events); + return scope; + } + function pluginIdRoot(id) { + return id && id.replace(/\/.*$/, ''); + } + + var scope = new Scope(); + var interact = scope.interactStatic; + var interact$1 = interact; + var _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : window; + scope.init(_global); + + var edgeTarget = (function () {}); + + var elements = (function () {}); + + var grid = (function (grid) { + var coordFields = [['x', 'y'], ['left', 'top'], ['right', 'bottom'], ['width', 'height']].filter(function (_ref) { + var xField = _ref[0], + yField = _ref[1]; + return xField in grid || yField in grid; + }); + var gridFunc = function gridFunc(x, y) { + var range = grid.range, + _grid$limits = grid.limits, + limits = _grid$limits === void 0 ? { + left: -Infinity, + right: Infinity, + top: -Infinity, + bottom: Infinity + } : _grid$limits, + _grid$offset = grid.offset, + offset = _grid$offset === void 0 ? { + x: 0, + y: 0 + } : _grid$offset; + var result = { + range: range, + grid: grid, + x: null, + y: null + }; + for (var _i2 = 0; _i2 < coordFields.length; _i2++) { + var _coordFields$_i = coordFields[_i2], + xField = _coordFields$_i[0], + yField = _coordFields$_i[1]; + var gridx = Math.round((x - offset.x) / grid[xField]); + var gridy = Math.round((y - offset.y) / grid[yField]); + result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * grid[xField] + offset.x)); + result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * grid[yField] + offset.y)); + } + return result; + }; + gridFunc.grid = grid; + gridFunc.coordFields = coordFields; + return gridFunc; + }); + + /* eslint-disable import/no-named-as-default, import/no-unresolved */ + + var allSnappers = /*#__PURE__*/Object.freeze({ + __proto__: null, + edgeTarget: edgeTarget, + elements: elements, + grid: grid + }); + + var snappersPlugin = { + id: 'snappers', + install: function install(scope) { + var interact = scope.interactStatic; + interact.snappers = extend(interact.snappers || {}, allSnappers); + interact.createSnapGrid = interact.snappers.grid; + } + }; + var snappers = snappersPlugin; + + var aspectRatio = { + start: function start(arg) { + var state = arg.state, + rect = arg.rect, + edges = arg.edges, + coords = arg.pageCoords; + var _state$options = state.options, + ratio = _state$options.ratio, + enabled = _state$options.enabled; + var _state$options2 = state.options, + equalDelta = _state$options2.equalDelta, + modifiers = _state$options2.modifiers; + if (ratio === 'preserve') { + ratio = rect.width / rect.height; + } + state.startCoords = extend({}, coords); + state.startRect = extend({}, rect); + state.ratio = ratio; + state.equalDelta = equalDelta; + var linkedEdges = state.linkedEdges = { + top: edges.top || edges.left && !edges.bottom, + left: edges.left || edges.top && !edges.right, + bottom: edges.bottom || edges.right && !edges.top, + right: edges.right || edges.bottom && !edges.left + }; + state.xIsPrimaryAxis = !!(edges.left || edges.right); + if (state.equalDelta) { + var sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1); + state.edgeSign = { + x: sign, + y: sign + }; + } else { + state.edgeSign = { + x: linkedEdges.left ? -1 : 1, + y: linkedEdges.top ? -1 : 1 + }; + } + if (enabled !== false) { + extend(edges, linkedEdges); + } + if (!(modifiers != null && modifiers.length)) return; + var subModification = new Modification(arg.interaction); + subModification.copyFrom(arg.interaction.modification); + subModification.prepareStates(modifiers); + state.subModification = subModification; + subModification.startAll(_objectSpread2({}, arg)); + }, + set: function set(arg) { + var state = arg.state, + rect = arg.rect, + coords = arg.coords; + var linkedEdges = state.linkedEdges; + var initialCoords = extend({}, coords); + var aspectMethod = state.equalDelta ? setEqualDelta : setRatio; + extend(arg.edges, linkedEdges); + aspectMethod(state, state.xIsPrimaryAxis, coords, rect); + if (!state.subModification) { + return null; + } + var correctedRect = extend({}, rect); + addEdges(linkedEdges, correctedRect, { + x: coords.x - initialCoords.x, + y: coords.y - initialCoords.y + }); + var result = state.subModification.setAll(_objectSpread2(_objectSpread2({}, arg), {}, { + rect: correctedRect, + edges: linkedEdges, + pageCoords: coords, + prevCoords: coords, + prevRect: correctedRect + })); + var delta = result.delta; + if (result.changed) { + var xIsCriticalAxis = Math.abs(delta.x) > Math.abs(delta.y); + + // do aspect modification again with critical edge axis as primary + aspectMethod(state, xIsCriticalAxis, result.coords, result.rect); + extend(coords, result.coords); + } + return result.eventProps; + }, + defaults: { + ratio: 'preserve', + equalDelta: false, + modifiers: [], + enabled: false + } + }; + function setEqualDelta(_ref, xIsPrimaryAxis, coords) { + var startCoords = _ref.startCoords, + edgeSign = _ref.edgeSign; + if (xIsPrimaryAxis) { + coords.y = startCoords.y + (coords.x - startCoords.x) * edgeSign.y; + } else { + coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x; + } + } + function setRatio(_ref2, xIsPrimaryAxis, coords, rect) { + var startRect = _ref2.startRect, + startCoords = _ref2.startCoords, + ratio = _ref2.ratio, + edgeSign = _ref2.edgeSign; + if (xIsPrimaryAxis) { + var newHeight = rect.width / ratio; + coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y; + } else { + var newWidth = rect.height * ratio; + coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x; + } + } + var aspectRatio$1 = makeModifier(aspectRatio, 'aspectRatio'); + + var noop = function noop() {}; + noop._defaults = {}; + var rubberband = noop; + + function start$5(_ref) { + var rect = _ref.rect, + startOffset = _ref.startOffset, + state = _ref.state, + interaction = _ref.interaction, + pageCoords = _ref.pageCoords; + var options = state.options; + var elementRect = options.elementRect; + var offset = extend({ + left: 0, + top: 0, + right: 0, + bottom: 0 + }, options.offset || {}); + if (rect && elementRect) { + var restriction = getRestrictionRect(options.restriction, interaction, pageCoords); + if (restriction) { + var widthDiff = restriction.right - restriction.left - rect.width; + var heightDiff = restriction.bottom - restriction.top - rect.height; + if (widthDiff < 0) { + offset.left += widthDiff; + offset.right += widthDiff; + } + if (heightDiff < 0) { + offset.top += heightDiff; + offset.bottom += heightDiff; + } + } + offset.left += startOffset.left - rect.width * elementRect.left; + offset.top += startOffset.top - rect.height * elementRect.top; + offset.right += startOffset.right - rect.width * (1 - elementRect.right); + offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom); + } + state.offset = offset; + } + function set$4(_ref2) { + var coords = _ref2.coords, + interaction = _ref2.interaction, + state = _ref2.state; + var options = state.options, + offset = state.offset; + var restriction = getRestrictionRect(options.restriction, interaction, coords); + if (!restriction) return; + var rect = xywhToTlbr(restriction); + coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left); + coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top); + } + function getRestrictionRect(value, interaction, coords) { + if (is.func(value)) { + return resolveRectLike(value, interaction.interactable, interaction.element, [coords.x, coords.y, interaction]); + } else { + return resolveRectLike(value, interaction.interactable, interaction.element); + } + } + var defaults$6 = { + restriction: null, + elementRect: null, + offset: null, + endOnly: false, + enabled: false + }; + var restrict = { + start: start$5, + set: set$4, + defaults: defaults$6 + }; + var restrict$1 = makeModifier(restrict, 'restrict'); + + // This modifier adds the options.resize.restrictEdges setting which sets min and + // max for the top, left, bottom and right edges of the target being resized. + // + // interact(target).resize({ + // edges: { top: true, left: true }, + // restrictEdges: { + // inner: { top: 200, left: 200, right: 400, bottom: 400 }, + // outer: { top: 0, left: 0, right: 600, bottom: 600 }, + // }, + // }) + + var noInner = { + top: +Infinity, + left: +Infinity, + bottom: -Infinity, + right: -Infinity + }; + var noOuter = { + top: -Infinity, + left: -Infinity, + bottom: +Infinity, + right: +Infinity + }; + function start$4(_ref) { + var interaction = _ref.interaction, + startOffset = _ref.startOffset, + state = _ref.state; + var options = state.options; + var offset; + if (options) { + var offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page); + offset = rectToXY(offsetRect); + } + offset = offset || { + x: 0, + y: 0 + }; + state.offset = { + top: offset.y + startOffset.top, + left: offset.x + startOffset.left, + bottom: offset.y - startOffset.bottom, + right: offset.x - startOffset.right + }; + } + function set$3(_ref2) { + var coords = _ref2.coords, + edges = _ref2.edges, + interaction = _ref2.interaction, + state = _ref2.state; + var offset = state.offset, + options = state.options; + if (!edges) { + return; + } + var page = extend({}, coords); + var inner = getRestrictionRect(options.inner, interaction, page) || {}; + var outer = getRestrictionRect(options.outer, interaction, page) || {}; + fixRect(inner, noInner); + fixRect(outer, noOuter); + if (edges.top) { + coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top); + } else if (edges.bottom) { + coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom); + } + if (edges.left) { + coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left); + } else if (edges.right) { + coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right); + } + } + function fixRect(rect, defaults) { + for (var _i2 = 0, _ref4 = ['top', 'left', 'bottom', 'right']; _i2 < _ref4.length; _i2++) { + var edge = _ref4[_i2]; + if (!(edge in rect)) { + rect[edge] = defaults[edge]; + } + } + return rect; + } + var defaults$5 = { + inner: null, + outer: null, + offset: null, + endOnly: false, + enabled: false + }; + var restrictEdges = { + noInner: noInner, + noOuter: noOuter, + start: start$4, + set: set$3, + defaults: defaults$5 + }; + var restrictEdges$1 = makeModifier(restrictEdges, 'restrictEdges'); + + var defaults$4 = extend({ + get elementRect() { + return { + top: 0, + left: 0, + bottom: 1, + right: 1 + }; + }, + set elementRect(_) {} + }, restrict.defaults); + var restrictRect = { + start: restrict.start, + set: restrict.set, + defaults: defaults$4 + }; + var restrictRect$1 = makeModifier(restrictRect, 'restrictRect'); + + var noMin = { + width: -Infinity, + height: -Infinity + }; + var noMax = { + width: +Infinity, + height: +Infinity + }; + function start$3(arg) { + return restrictEdges.start(arg); + } + function set$2(arg) { + var interaction = arg.interaction, + state = arg.state, + rect = arg.rect, + edges = arg.edges; + var options = state.options; + if (!edges) { + return; + } + var minSize = tlbrToXywh(getRestrictionRect(options.min, interaction, arg.coords)) || noMin; + var maxSize = tlbrToXywh(getRestrictionRect(options.max, interaction, arg.coords)) || noMax; + state.options = { + endOnly: options.endOnly, + inner: extend({}, restrictEdges.noInner), + outer: extend({}, restrictEdges.noOuter) + }; + if (edges.top) { + state.options.inner.top = rect.bottom - minSize.height; + state.options.outer.top = rect.bottom - maxSize.height; + } else if (edges.bottom) { + state.options.inner.bottom = rect.top + minSize.height; + state.options.outer.bottom = rect.top + maxSize.height; + } + if (edges.left) { + state.options.inner.left = rect.right - minSize.width; + state.options.outer.left = rect.right - maxSize.width; + } else if (edges.right) { + state.options.inner.right = rect.left + minSize.width; + state.options.outer.right = rect.left + maxSize.width; + } + restrictEdges.set(arg); + state.options = options; + } + var defaults$3 = { + min: null, + max: null, + endOnly: false, + enabled: false + }; + var restrictSize = { + start: start$3, + set: set$2, + defaults: defaults$3 + }; + var restrictSize$1 = makeModifier(restrictSize, 'restrictSize'); + + function start$2(arg) { + var interaction = arg.interaction, + interactable = arg.interactable, + element = arg.element, + rect = arg.rect, + state = arg.state, + startOffset = arg.startOffset; + var options = state.options; + var origin = options.offsetWithOrigin ? getOrigin(arg) : { + x: 0, + y: 0 + }; + var snapOffset; + if (options.offset === 'startCoords') { + snapOffset = { + x: interaction.coords.start.page.x, + y: interaction.coords.start.page.y + }; + } else { + var offsetRect = resolveRectLike(options.offset, interactable, element, [interaction]); + snapOffset = rectToXY(offsetRect) || { + x: 0, + y: 0 + }; + snapOffset.x += origin.x; + snapOffset.y += origin.y; + } + var relativePoints = options.relativePoints; + state.offsets = rect && relativePoints && relativePoints.length ? relativePoints.map(function (relativePoint, index) { + return { + index: index, + relativePoint: relativePoint, + x: startOffset.left - rect.width * relativePoint.x + snapOffset.x, + y: startOffset.top - rect.height * relativePoint.y + snapOffset.y + }; + }) : [{ + index: 0, + relativePoint: null, + x: snapOffset.x, + y: snapOffset.y + }]; + } + function set$1(arg) { + var interaction = arg.interaction, + coords = arg.coords, + state = arg.state; + var options = state.options, + offsets = state.offsets; + var origin = getOriginXY(interaction.interactable, interaction.element, interaction.prepared.name); + var page = extend({}, coords); + var targets = []; + if (!options.offsetWithOrigin) { + page.x -= origin.x; + page.y -= origin.y; + } + for (var _i2 = 0, _ref2 = offsets; _i2 < _ref2.length; _i2++) { + var _offset = _ref2[_i2]; + var relativeX = page.x - _offset.x; + var relativeY = page.y - _offset.y; + for (var _index = 0, len = options.targets.length; _index < len; _index++) { + var snapTarget = options.targets[_index]; + var target = void 0; + if (is.func(snapTarget)) { + target = snapTarget(relativeX, relativeY, interaction._proxy, _offset, _index); + } else { + target = snapTarget; + } + if (!target) { + continue; + } + targets.push({ + x: (is.number(target.x) ? target.x : relativeX) + _offset.x, + y: (is.number(target.y) ? target.y : relativeY) + _offset.y, + range: is.number(target.range) ? target.range : options.range, + source: snapTarget, + index: _index, + offset: _offset + }); + } + } + var closest = { + target: null, + inRange: false, + distance: 0, + range: 0, + delta: { + x: 0, + y: 0 + } + }; + for (var _i4 = 0; _i4 < targets.length; _i4++) { + var _target = targets[_i4]; + var range = _target.range; + var dx = _target.x - page.x; + var dy = _target.y - page.y; + var distance = hypot(dx, dy); + var inRange = distance <= range; + + // Infinite targets count as being out of range + // compared to non infinite ones that are in range + if (range === Infinity && closest.inRange && closest.range !== Infinity) { + inRange = false; + } + if (!closest.target || (inRange ? + // is the closest target in range? + closest.inRange && range !== Infinity ? + // the pointer is relatively deeper in this target + distance / range < closest.distance / closest.range : + // this target has Infinite range and the closest doesn't + range === Infinity && closest.range !== Infinity || + // OR this target is closer that the previous closest + distance < closest.distance : + // The other is not in range and the pointer is closer to this target + !closest.inRange && distance < closest.distance)) { + closest.target = _target; + closest.distance = distance; + closest.range = range; + closest.inRange = inRange; + closest.delta.x = dx; + closest.delta.y = dy; + } + } + if (closest.inRange) { + coords.x = closest.target.x; + coords.y = closest.target.y; + } + state.closest = closest; + return closest; + } + function getOrigin(arg) { + var element = arg.interaction.element; + var optionsOrigin = rectToXY(resolveRectLike(arg.state.options.origin, null, null, [element])); + var origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name); + return origin; + } + var defaults$2 = { + range: Infinity, + targets: null, + offset: null, + offsetWithOrigin: true, + origin: null, + relativePoints: null, + endOnly: false, + enabled: false + }; + var snap = { + start: start$2, + set: set$1, + defaults: defaults$2 + }; + var snap$1 = makeModifier(snap, 'snap'); + + // This modifier allows snapping of the size of targets during resize + // interactions. + + function start$1(arg) { + var state = arg.state, + edges = arg.edges; + var options = state.options; + if (!edges) { + return null; + } + arg.state = { + options: { + targets: null, + relativePoints: [{ + x: edges.left ? 0 : 1, + y: edges.top ? 0 : 1 + }], + offset: options.offset || 'self', + origin: { + x: 0, + y: 0 + }, + range: options.range + } + }; + state.targetFields = state.targetFields || [['width', 'height'], ['x', 'y']]; + snap.start(arg); + state.offsets = arg.state.offsets; + arg.state = state; + } + function set(arg) { + var interaction = arg.interaction, + state = arg.state, + coords = arg.coords; + var options = state.options, + offsets = state.offsets; + var relative = { + x: coords.x - offsets[0].x, + y: coords.y - offsets[0].y + }; + state.options = extend({}, options); + state.options.targets = []; + for (var _i2 = 0, _ref2 = options.targets || []; _i2 < _ref2.length; _i2++) { + var snapTarget = _ref2[_i2]; + var target = void 0; + if (is.func(snapTarget)) { + target = snapTarget(relative.x, relative.y, interaction); + } else { + target = snapTarget; + } + if (!target) { + continue; + } + for (var _i4 = 0, _state$targetFields2 = state.targetFields; _i4 < _state$targetFields2.length; _i4++) { + var _state$targetFields2$ = _state$targetFields2[_i4], + xField = _state$targetFields2$[0], + yField = _state$targetFields2$[1]; + if (xField in target || yField in target) { + target.x = target[xField]; + target.y = target[yField]; + break; + } + } + state.options.targets.push(target); + } + var returnValue = snap.set(arg); + state.options = options; + return returnValue; + } + var defaults$1 = { + range: Infinity, + targets: null, + offset: null, + endOnly: false, + enabled: false + }; + var snapSize = { + start: start$1, + set: set, + defaults: defaults$1 + }; + var snapSize$1 = makeModifier(snapSize, 'snapSize'); + + /** + * @module modifiers/snapEdges + * + * @description + * This modifier allows snapping of the edges of targets during resize + * interactions. + * + * ```js + * interact(target).resizable({ + * snapEdges: { + * targets: [interact.snappers.grid({ x: 100, y: 50 })], + * }, + * }) + * + * interact(target).resizable({ + * snapEdges: { + * targets: [ + * interact.snappers.grid({ + * top: 50, + * left: 50, + * bottom: 100, + * right: 100, + * }), + * ], + * }, + * }) + * ``` + */ + + function start(arg) { + var edges = arg.edges; + if (!edges) { + return null; + } + arg.state.targetFields = arg.state.targetFields || [[edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom']]; + return snapSize.start(arg); + } + var snapEdges = { + start: start, + set: snapSize.set, + defaults: extend(clone(snapSize.defaults), { + targets: undefined, + range: undefined, + offset: { + x: 0, + y: 0 + } + }) + }; + var snapEdges$1 = makeModifier(snapEdges, 'snapEdges'); + + /* eslint-disable n/no-extraneous-import, import/no-unresolved */ + var all = { + aspectRatio: aspectRatio$1, + restrictEdges: restrictEdges$1, + restrict: restrict$1, + restrictRect: restrictRect$1, + restrictSize: restrictSize$1, + snapEdges: snapEdges$1, + snap: snap$1, + snapSize: snapSize$1, + spring: rubberband, + avoid: rubberband, + transform: rubberband, + rubberband: rubberband + }; + + /* eslint-enable import/no-duplicates */ + + var modifiers = { + id: 'modifiers', + install: function install(scope) { + var interact = scope.interactStatic; + scope.usePlugin(base); + scope.usePlugin(snappers); + interact.modifiers = all; + + // for backwrads compatibility + for (var type in all) { + var _all = all[type], + _defaults = _all._defaults, + _methods = _all._methods; + _defaults._methods = _methods; + scope.defaults.perAction[type] = _defaults; + } + } + }; + var modifiers$1 = modifiers; + + var PointerEvent = /*#__PURE__*/function (_BaseEvent) { + _inherits(PointerEvent, _BaseEvent); + var _super = _createSuper(PointerEvent); + function PointerEvent(type, pointer, event, eventTarget, interaction, timeStamp) { + var _this; + _classCallCheck(this, PointerEvent); + _this = _super.call(this, interaction); + pointerExtend(_assertThisInitialized(_this), event); + if (event !== pointer) { + pointerExtend(_assertThisInitialized(_this), pointer); + } + _this.timeStamp = timeStamp; + _this.originalEvent = event; + _this.type = type; + _this.pointerId = getPointerId(pointer); + _this.pointerType = getPointerType(pointer); + _this.target = eventTarget; + _this.currentTarget = null; + if (type === 'tap') { + var pointerIndex = interaction.getPointerIndex(pointer); + _this.dt = _this.timeStamp - interaction.pointers[pointerIndex].downTime; + var interval = _this.timeStamp - interaction.tapTime; + _this.double = !!interaction.prevTap && interaction.prevTap.type !== 'doubletap' && interaction.prevTap.target === _this.target && interval < 500; + } else if (type === 'doubletap') { + _this.dt = pointer.timeStamp - interaction.tapTime; + _this.double = true; + } + return _this; + } + _createClass(PointerEvent, [{ + key: "_subtractOrigin", + value: function _subtractOrigin(_ref) { + var originX = _ref.x, + originY = _ref.y; + this.pageX -= originX; + this.pageY -= originY; + this.clientX -= originX; + this.clientY -= originY; + return this; + } + }, { + key: "_addOrigin", + value: function _addOrigin(_ref2) { + var originX = _ref2.x, + originY = _ref2.y; + this.pageX += originX; + this.pageY += originY; + this.clientX += originX; + this.clientY += originY; + return this; + } + + /** + * Prevent the default behaviour of the original Event + */ + }, { + key: "preventDefault", + value: function preventDefault() { + this.originalEvent.preventDefault(); + } + }]); + return PointerEvent; + }(BaseEvent); + + var defaults = { + holdDuration: 600, + ignoreFrom: null, + allowFrom: null, + origin: { + x: 0, + y: 0 + } + }; + var pointerEvents$1 = { + id: 'pointer-events/base', + before: ['inertia', 'modifiers', 'auto-start', 'actions'], + install: install$3, + listeners: { + 'interactions:new': addInteractionProps, + 'interactions:update-pointer': addHoldInfo, + 'interactions:move': moveAndClearHold, + 'interactions:down': function interactionsDown(arg, scope) { + downAndStartHold(arg, scope); + fire(arg, scope); + }, + 'interactions:up': function interactionsUp(arg, scope) { + clearHold(arg); + fire(arg, scope); + tapAfterUp(arg, scope); + }, + 'interactions:cancel': function interactionsCancel(arg, scope) { + clearHold(arg); + fire(arg, scope); + } + }, + PointerEvent: PointerEvent, + fire: fire, + collectEventTargets: collectEventTargets, + defaults: defaults, + types: { + down: true, + move: true, + up: true, + cancel: true, + tap: true, + doubletap: true, + hold: true + } + }; + function fire(arg, scope) { + var interaction = arg.interaction, + pointer = arg.pointer, + event = arg.event, + eventTarget = arg.eventTarget, + type = arg.type, + _arg$targets = arg.targets, + targets = _arg$targets === void 0 ? collectEventTargets(arg, scope) : _arg$targets; + var pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now()); + scope.fire('pointerEvents:new', { + pointerEvent: pointerEvent + }); + var signalArg = { + interaction: interaction, + pointer: pointer, + event: event, + eventTarget: eventTarget, + targets: targets, + type: type, + pointerEvent: pointerEvent + }; + for (var i = 0; i < targets.length; i++) { + var target = targets[i]; + for (var prop in target.props || {}) { + pointerEvent[prop] = target.props[prop]; + } + var origin = getOriginXY(target.eventable, target.node); + pointerEvent._subtractOrigin(origin); + pointerEvent.eventable = target.eventable; + pointerEvent.currentTarget = target.node; + target.eventable.fire(pointerEvent); + pointerEvent._addOrigin(origin); + if (pointerEvent.immediatePropagationStopped || pointerEvent.propagationStopped && i + 1 < targets.length && targets[i + 1].node !== pointerEvent.currentTarget) { + break; + } + } + scope.fire('pointerEvents:fired', signalArg); + if (type === 'tap') { + // if pointerEvent should make a double tap, create and fire a doubletap + // PointerEvent and use that as the prevTap + var prevTap = pointerEvent.double ? fire({ + interaction: interaction, + pointer: pointer, + event: event, + eventTarget: eventTarget, + type: 'doubletap' + }, scope) : pointerEvent; + interaction.prevTap = prevTap; + interaction.tapTime = prevTap.timeStamp; + } + return pointerEvent; + } + function collectEventTargets(_ref, scope) { + var interaction = _ref.interaction, + pointer = _ref.pointer, + event = _ref.event, + eventTarget = _ref.eventTarget, + type = _ref.type; + var pointerIndex = interaction.getPointerIndex(pointer); + var pointerInfo = interaction.pointers[pointerIndex]; + + // do not fire a tap event if the pointer was moved before being lifted + if (type === 'tap' && (interaction.pointerWasMoved || + // or if the pointerup target is different to the pointerdown target + !(pointerInfo && pointerInfo.downTarget === eventTarget))) { + return []; + } + var path = getPath(eventTarget); + var signalArg = { + interaction: interaction, + pointer: pointer, + event: event, + eventTarget: eventTarget, + type: type, + path: path, + targets: [], + node: null + }; + for (var _i2 = 0; _i2 < path.length; _i2++) { + var node = path[_i2]; + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } + if (type === 'hold') { + signalArg.targets = signalArg.targets.filter(function (target) { + var _interaction$pointers, _interaction$pointers2; + return target.eventable.options.holdDuration === ((_interaction$pointers = interaction.pointers[pointerIndex]) == null ? void 0 : (_interaction$pointers2 = _interaction$pointers.hold) == null ? void 0 : _interaction$pointers2.duration); + }); + } + return signalArg.targets; + } + function addInteractionProps(_ref2) { + var interaction = _ref2.interaction; + interaction.prevTap = null; // the most recent tap event on this interaction + interaction.tapTime = 0; // time of the most recent tap event + } + function addHoldInfo(_ref3) { + var down = _ref3.down, + pointerInfo = _ref3.pointerInfo; + if (!down && pointerInfo.hold) { + return; + } + pointerInfo.hold = { + duration: Infinity, + timeout: null + }; + } + function clearHold(_ref4) { + var interaction = _ref4.interaction, + pointerIndex = _ref4.pointerIndex; + var hold = interaction.pointers[pointerIndex].hold; + if (hold && hold.timeout) { + clearTimeout(hold.timeout); + hold.timeout = null; + } + } + function moveAndClearHold(arg, scope) { + var interaction = arg.interaction, + pointer = arg.pointer, + event = arg.event, + eventTarget = arg.eventTarget, + duplicate = arg.duplicate; + if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) { + if (interaction.pointerIsDown) { + clearHold(arg); + } + fire({ + interaction: interaction, + pointer: pointer, + event: event, + eventTarget: eventTarget, + type: 'move' + }, scope); + } + } + function downAndStartHold(_ref5, scope) { + var interaction = _ref5.interaction, + pointer = _ref5.pointer, + event = _ref5.event, + eventTarget = _ref5.eventTarget, + pointerIndex = _ref5.pointerIndex; + var timer = interaction.pointers[pointerIndex].hold; + var path = getPath(eventTarget); + var signalArg = { + interaction: interaction, + pointer: pointer, + event: event, + eventTarget: eventTarget, + type: 'hold', + targets: [], + path: path, + node: null + }; + for (var _i4 = 0; _i4 < path.length; _i4++) { + var node = path[_i4]; + signalArg.node = node; + scope.fire('pointerEvents:collect-targets', signalArg); + } + if (!signalArg.targets.length) return; + var minDuration = Infinity; + for (var _i6 = 0, _signalArg$targets2 = signalArg.targets; _i6 < _signalArg$targets2.length; _i6++) { + var target = _signalArg$targets2[_i6]; + var holdDuration = target.eventable.options.holdDuration; + if (holdDuration < minDuration) { + minDuration = holdDuration; + } + } + timer.duration = minDuration; + timer.timeout = setTimeout(function () { + fire({ + interaction: interaction, + eventTarget: eventTarget, + pointer: pointer, + event: event, + type: 'hold' + }, scope); + }, minDuration); + } + function tapAfterUp(_ref6, scope) { + var interaction = _ref6.interaction, + pointer = _ref6.pointer, + event = _ref6.event, + eventTarget = _ref6.eventTarget; + if (!interaction.pointerWasMoved) { + fire({ + interaction: interaction, + eventTarget: eventTarget, + pointer: pointer, + event: event, + type: 'tap' + }, scope); + } + } + function install$3(scope) { + scope.pointerEvents = pointerEvents$1; + scope.defaults.actions.pointerEvents = pointerEvents$1.defaults; + extend(scope.actions.phaselessTypes, pointerEvents$1.types); + } + + var pointerEvents$2 = /*#__PURE__*/Object.freeze({ + __proto__: null, + default: pointerEvents$1 + }); + + /* eslint-disable import/no-duplicates -- for typescript module augmentations */ + function install$2(scope) { + scope.usePlugin(pointerEvents$1); + var pointerEvents = scope.pointerEvents; + + // don't repeat by default + pointerEvents.defaults.holdRepeatInterval = 0; + pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true; + } + function onNew(_ref) { + var pointerEvent = _ref.pointerEvent; + if (pointerEvent.type !== 'hold') return; + pointerEvent.count = (pointerEvent.count || 0) + 1; + } + function onFired(_ref2, scope) { + var interaction = _ref2.interaction, + pointerEvent = _ref2.pointerEvent, + eventTarget = _ref2.eventTarget, + targets = _ref2.targets; + if (pointerEvent.type !== 'hold' || !targets.length) return; + + // get the repeat interval from the first eventable + var interval = targets[0].eventable.options.holdRepeatInterval; + + // don't repeat if the interval is 0 or less + if (interval <= 0) return; + + // set a timeout to fire the holdrepeat event + interaction.holdIntervalHandle = setTimeout(function () { + scope.pointerEvents.fire({ + interaction: interaction, + eventTarget: eventTarget, + type: 'hold', + pointer: pointerEvent, + event: pointerEvent + }, scope); + }, interval); + } + function endHoldRepeat(_ref3) { + var interaction = _ref3.interaction; + // set the interaction's holdStopTime property + // to stop further holdRepeat events + if (interaction.holdIntervalHandle) { + clearInterval(interaction.holdIntervalHandle); + interaction.holdIntervalHandle = null; + } + } + var holdRepeat = { + id: 'pointer-events/holdRepeat', + install: install$2, + listeners: ['move', 'up', 'cancel', 'endall'].reduce(function (acc, enderTypes) { + acc["pointerEvents:".concat(enderTypes)] = endHoldRepeat; + return acc; + }, { + 'pointerEvents:new': onNew, + 'pointerEvents:fired': onFired + }) + }; + var holdRepeat$1 = holdRepeat; + + function install$1(scope) { + var Interactable = scope.Interactable; + Interactable.prototype.pointerEvents = function (options) { + extend(this.events.options, options); + return this; + }; + var __backCompatOption = Interactable.prototype._backCompatOption; + Interactable.prototype._backCompatOption = function (optionName, newValue) { + var ret = __backCompatOption.call(this, optionName, newValue); + if (ret === this) { + this.events.options[optionName] = newValue; + } + return ret; + }; + } + var plugin$1 = { + id: 'pointer-events/interactableTargets', + install: install$1, + listeners: { + 'pointerEvents:collect-targets': function pointerEventsCollectTargets(_ref, scope) { + var targets = _ref.targets, + node = _ref.node, + type = _ref.type, + eventTarget = _ref.eventTarget; + scope.interactables.forEachMatch(node, function (interactable) { + var eventable = interactable.events; + var options = eventable.options; + if (eventable.types[type] && eventable.types[type].length && interactable.testIgnoreAllow(options, node, eventTarget)) { + targets.push({ + node: node, + eventable: eventable, + props: { + interactable: interactable + } + }); + } + }); + }, + 'interactable:new': function interactableNew(_ref2) { + var interactable = _ref2.interactable; + interactable.events.getRect = function (element) { + return interactable.getRect(element); + }; + }, + 'interactable:set': function interactableSet(_ref3, scope) { + var interactable = _ref3.interactable, + options = _ref3.options; + extend(interactable.events.options, scope.pointerEvents.defaults); + extend(interactable.events.options, options.pointerEvents || {}); + } + } + }; + var interactableTargets = plugin$1; + + /* eslint-disable import/no-duplicates -- for typescript module augmentations */ + /* eslint-enable import/no-duplicates */ + + var plugin = { + id: 'pointer-events', + install: function install(scope) { + scope.usePlugin(pointerEvents$2); + scope.usePlugin(holdRepeat$1); + scope.usePlugin(interactableTargets); + } + }; + var pointerEvents = plugin; + + function install(scope) { + var Interactable = scope.Interactable; + scope.actions.phases.reflow = true; + Interactable.prototype.reflow = function (action) { + return doReflow(this, action, scope); + }; + } + function doReflow(interactable, action, scope) { + var elements = interactable.getAllElements(); + + // tslint:disable-next-line variable-name + var Promise = scope.window.Promise; + var promises = Promise ? [] : null; + var _loop = function _loop() { + var element = elements[_i2]; + var rect = interactable.getRect(element); + if (!rect) { + return 1; // break + } + var runningInteraction = find(scope.interactions.list, function (interaction) { + return interaction.interacting() && interaction.interactable === interactable && interaction.element === element && interaction.prepared.name === action.name; + }); + var reflowPromise; + if (runningInteraction) { + runningInteraction.move(); + if (promises) { + reflowPromise = runningInteraction._reflowPromise || new Promise(function (resolve) { + runningInteraction._reflowResolve = resolve; + }); + } + } else { + var xywh = tlbrToXywh(rect); + var coords = { + page: { + x: xywh.x, + y: xywh.y + }, + client: { + x: xywh.x, + y: xywh.y + }, + timeStamp: scope.now() + }; + var event = coordsToEvent(coords); + reflowPromise = startReflow(scope, interactable, element, action, event); + } + if (promises) { + promises.push(reflowPromise); + } + }; + for (var _i2 = 0; _i2 < elements.length; _i2++) { + if (_loop()) break; + } + return promises && Promise.all(promises).then(function () { + return interactable; + }); + } + function startReflow(scope, interactable, element, action, event) { + var interaction = scope.interactions.new({ + pointerType: 'reflow' + }); + var signalArg = { + interaction: interaction, + event: event, + pointer: event, + eventTarget: element, + phase: 'reflow' + }; + interaction.interactable = interactable; + interaction.element = element; + interaction.prevEvent = event; + interaction.updatePointer(event, event, element, true); + setZeroCoords(interaction.coords.delta); + copyAction(interaction.prepared, action); + interaction._doPhase(signalArg); + var _ref = scope.window, + Promise = _ref.Promise; + var reflowPromise = Promise ? new Promise(function (resolve) { + interaction._reflowResolve = resolve; + }) : undefined; + interaction._reflowPromise = reflowPromise; + interaction.start(action, interactable, element); + if (interaction._interacting) { + interaction.move(signalArg); + interaction.end(event); + } else { + interaction.stop(); + interaction._reflowResolve(); + } + interaction.removePointer(event, event); + return reflowPromise; + } + var reflow = { + id: 'reflow', + install: install, + listeners: { + // remove completed reflow interactions + 'interactions:stop': function interactionsStop(_ref2, scope) { + var interaction = _ref2.interaction; + if (interaction.pointerType === 'reflow') { + if (interaction._reflowResolve) { + interaction._reflowResolve(); + } + remove(scope.interactions.list, interaction); + } + } + } + }; + var reflow$1 = reflow; + + /* eslint-disable import/no-duplicates -- for typescript module augmentations */ + /* eslint-enable import/no-duplicates */ + + interact$1.use(interactablePreventDefault); + interact$1.use(offset$1); + + // pointerEvents + interact$1.use(pointerEvents); + + // inertia + interact$1.use(inertia$1); + + // snap, resize, etc. + interact$1.use(modifiers$1); + + // autoStart, hold + interact$1.use(autoStart); + + // drag and drop, resize, gesture + interact$1.use(actions); + + // autoScroll + interact$1.use(autoScroll$1); + + // reflow + interact$1.use(reflow$1); + + // eslint-disable-next-line no-undef + { + interact$1.use(devTools); + } + interact$1.default = interact$1; + + if ((typeof module === "undefined" ? "undefined" : _typeof(module)) === 'object' && !!module) { + try { + module.exports = interact$1; + } catch (_unused) {} + } + interact$1.default = interact$1; + + return interact$1; + +})); +//# sourceMappingURL=interact.js.map diff --git a/packages/interactjs/dist/interact.js.map b/packages/interactjs/dist/interact.js.map new file mode 100644 index 000000000..61a87917c --- /dev/null +++ b/packages/interactjs/dist/interact.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interact.js","sources":["../../@interactjs/utils/isWindow.ts","../../@interactjs/utils/window.ts","../../@interactjs/utils/is.ts","../../@interactjs/actions/drag/plugin.ts","../../@interactjs/utils/domObjects.ts","../../@interactjs/utils/browser.ts","../../@interactjs/utils/domUtils.ts","../../@interactjs/utils/extend.ts","../../@interactjs/utils/rect.ts","../../@interactjs/utils/getOriginXY.ts","../../@interactjs/utils/normalizeListeners.ts","../../@interactjs/utils/hypot.ts","../../@interactjs/utils/pointerExtend.ts","../../@interactjs/utils/pointerUtils.ts","../../@interactjs/core/BaseEvent.ts","../../@interactjs/utils/arr.ts","../../@interactjs/actions/drop/DropEvent.ts","../../@interactjs/actions/drop/plugin.ts","../../@interactjs/actions/gesture/plugin.ts","../../@interactjs/actions/resize/plugin.ts","../../@interactjs/actions/plugin.ts","../../@interactjs/utils/raf.ts","../../@interactjs/auto-scroll/plugin.ts","../../@interactjs/utils/misc.ts","../../@interactjs/auto-start/InteractableMethods.ts","../../@interactjs/auto-start/base.ts","../../@interactjs/auto-start/dragAxis.ts","../../@interactjs/auto-start/hold.ts","../../@interactjs/auto-start/plugin.ts","../../@interactjs/core/interactablePreventDefault.ts","../../@interactjs/utils/isNonNativeEvent.ts","../../@interactjs/dev-tools/visualizer/plugin.ts","../../@interactjs/dev-tools/plugin.ts","../../@interactjs/utils/clone.ts","../../@interactjs/modifiers/Modification.ts","../../@interactjs/modifiers/base.ts","../../@interactjs/core/options.ts","../../@interactjs/core/InteractEvent.ts","../../@interactjs/core/PointerInfo.ts","../../@interactjs/core/Interaction.ts","../../@interactjs/offset/plugin.ts","../../@interactjs/inertia/plugin.ts","../../@interactjs/core/Eventable.ts","../../@interactjs/core/events.ts","../../@interactjs/core/interactionFinder.ts","../../@interactjs/core/interactions.ts","../../@interactjs/core/Interactable.ts","../../@interactjs/core/InteractableSet.ts","../../@interactjs/core/InteractStatic.ts","../../@interactjs/core/scope.ts","../../@interactjs/interact/index.ts","../../@interactjs/snappers/edgeTarget.ts","../../@interactjs/snappers/elements.ts","../../@interactjs/snappers/grid.ts","../../@interactjs/snappers/all.ts","../../@interactjs/snappers/plugin.ts","../../@interactjs/modifiers/aspectRatio.ts","../../@interactjs/modifiers/noop.ts","../../@interactjs/modifiers/restrict/pointer.ts","../../@interactjs/modifiers/restrict/edges.ts","../../@interactjs/modifiers/restrict/rect.ts","../../@interactjs/modifiers/restrict/size.ts","../../@interactjs/modifiers/snap/pointer.ts","../../@interactjs/modifiers/snap/size.ts","../../@interactjs/modifiers/snap/edges.ts","../../@interactjs/modifiers/all.ts","../../@interactjs/modifiers/plugin.ts","../../@interactjs/pointer-events/PointerEvent.ts","../../@interactjs/pointer-events/base.ts","../../@interactjs/pointer-events/holdRepeat.ts","../../@interactjs/pointer-events/interactableTargets.ts","../../@interactjs/pointer-events/plugin.ts","../../@interactjs/reflow/plugin.ts","../../@interactjs/interactjs/index.ts","../index.ts"],"sourcesContent":["export default (thing: any) => !!(thing && thing.Window) && thing instanceof thing.Window\n","import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init(window: Window & { wrap?: (...args: any[]) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n init(window)\n}\n\nexport function getWindow(node: any) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = node.ownerDocument || node\n\n return rootNode.defaultView || win.window\n}\n","import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n if (!thing || typeof thing !== 'object') {\n return false\n }\n\n const _window = win.getWindow(thing) || win.window\n\n return /object|function/.test(typeof Element)\n ? thing instanceof Element || thing instanceof _window.Element\n : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = (thing: any): thing is T[] =>\n object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n window,\n docFrag,\n object,\n func,\n number,\n bool,\n string,\n element,\n plainObject,\n array,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable(options: Partial> | boolean): this\n draggable(): DraggableOptions\n /**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n */\n draggable(options?: Partial> | boolean): this | DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drag: DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drag?: typeof drag\n }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport interface DraggableOptions extends PerActionDefaults {\n startAxis?: 'x' | 'y' | 'xy'\n lockAxis?: 'x' | 'y' | 'xy' | 'start'\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.map.drag = drag\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove({ interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n } else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\nconst draggable: Interactable['draggable'] = function draggable(\n this: Interactable,\n options?: DraggableOptions | boolean,\n): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag as DraggableOptions\n}\n\nconst drag: Plugin = {\n id: 'actions/drag',\n install,\n listeners: {\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n 'auto-start:check': (arg) => {\n const { interaction, interactable, buttons } = arg\n const dragOptions = interactable.options.drag\n\n if (\n !(dragOptions && dragOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options.drag.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n arg.action = {\n name: 'drag',\n axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n }\n\n return false\n },\n },\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis: 'xy',\n lockAxis: 'xy',\n } as DraggableOptions,\n\n getCursor() {\n return 'move'\n },\n\n filterEventType: (type: string) => type.search('drag') === 0,\n}\n\nexport default drag\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} = {\n init,\n document: null,\n DocumentFragment: null,\n SVGElement: null,\n SVGSVGElement: null,\n SVGElementInstance: null,\n Element: null,\n HTMLElement: null,\n Event: null,\n Touch: null,\n PointerEvent: null,\n}\n\nfunction blank() {}\n\nexport default domObjects\n\nfunction init(window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n","import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as 'matches',\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init(window: any) {\n const Element = domObjects.Element\n const navigator: Partial = window.navigator || {}\n\n // Does the browser support touch input?\n browser.supportsTouch =\n 'ontouchstart' in window ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n browser.supportsPointerEvent = (navigator as any).pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile =\n navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = (\n 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n ) as 'matches'\n\n browser.pEventTypes = browser.supportsPointerEvent\n ? domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n }\n : null\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains(parent: Node, child: Node) {\n if (parent.contains) {\n return parent.contains(child as Node)\n }\n\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest(element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return element\n }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode(node: Node | Document) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector(element: Element, selector: string) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement(elements: Element[] | NodeListOf) {\n let deepestNodeParents: Node[] = []\n let deepestNodeIndex: number\n\n for (let i = 0; i < elements.length; i++) {\n const currentNode = elements[i]\n const deepestNode: Node = elements[deepestNodeIndex]\n\n // node may appear in elements array multiple times\n if (!currentNode || i === deepestNodeIndex) {\n continue\n }\n\n if (!deepestNode) {\n deepestNodeIndex = i\n continue\n }\n\n const currentNodeParent = getParent(currentNode)\n const deepestNodeParent = getParent(deepestNode)\n\n // check if the deepest or current are document.documentElement/rootElement\n // - if the current node is, do nothing and continue\n if (currentNodeParent === currentNode.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current node and continue to next\n else if (deepestNodeParent === currentNode.ownerDocument) {\n deepestNodeIndex = i\n continue\n }\n\n // compare zIndex of siblings\n if (currentNodeParent === deepestNodeParent) {\n if (zIndexIsHigherThan(currentNode, deepestNode)) {\n deepestNodeIndex = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest node\n deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n let ancestryStart: Node\n\n // if the deepest node is an HTMLElement and the current node is a non root svg element\n if (\n deepestNode instanceof domObjects.HTMLElement &&\n currentNode instanceof domObjects.SVGElement &&\n !(currentNode instanceof domObjects.SVGSVGElement)\n ) {\n // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n if (currentNode === deepestNodeParent) {\n continue\n }\n\n ancestryStart = currentNode.ownerSVGElement\n } else {\n ancestryStart = currentNode\n }\n\n const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n let commonIndex = 0\n\n // get (position of closest common ancestor) + 1\n while (\n currentNodeParents[commonIndex] &&\n currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n ) {\n commonIndex++\n }\n\n const parents = [\n currentNodeParents[commonIndex - 1],\n currentNodeParents[commonIndex],\n deepestNodeParents[commonIndex],\n ]\n\n if (parents[0]) {\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestNodeIndex = i\n deepestNodeParents = currentNodeParents\n\n break\n } else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n }\n\n return deepestNodeIndex\n}\n\nfunction getNodeParents(node: Node, limit?: Node) {\n const parents: Node[] = []\n let parent: Node = node\n let parentParent: Node\n\n while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n parents.unshift(parent)\n parent = parentParent\n }\n\n return parents\n}\n\nfunction zIndexIsHigherThan(higherNode: Node, lowerNode: Node) {\n const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo(element: Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement(element: Element) {\n return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY(relevantWindow?: Window) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect(element: Element): Required {\n const clientRect =\n element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n return (\n clientRect && {\n left: clientRect.left,\n right: clientRect.right,\n top: clientRect.top,\n bottom: clientRect.bottom,\n width: clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n )\n}\n\nexport function getElementRect(element: Element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath(node: Node | Document) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector(value: Target) {\n if (!is.string(value)) {\n return false\n }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","export default function extend(dest: U & Partial, source: T): T & U {\n for (const prop in source) {\n ;(dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n","import type {\n HasGetRect,\n RectResolvable,\n Rect,\n Element,\n Point,\n FullRect,\n EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult(value: any, target: HasGetRect, element: Node) {\n if (value === 'parent') {\n return parentNode(element)\n }\n\n if (value === 'self') {\n return target.getRect(element as Element)\n }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike(\n value: RectResolvable,\n target?: HasGetRect,\n element?: Node,\n functionArgs?: T,\n) {\n let returnValue: any = value\n if (is.string(returnValue)) {\n returnValue = getStringOptionResult(returnValue, target, element)\n } else if (is.func(returnValue)) {\n returnValue = returnValue(...functionArgs)\n }\n\n if (is.element(returnValue)) {\n returnValue = getElementRect(returnValue)\n }\n\n return returnValue as Rect\n}\n\nexport function toFullRect(rect: Rect): FullRect {\n const { top, left, bottom, right } = rect\n const width = rect.width ?? rect.right - rect.left\n const height = rect.height ?? rect.bottom - rect.top\n\n return { top, left, bottom, right, width, height }\n}\n\nexport function rectToXY(rect: Rect | Point) {\n return (\n rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n )\n}\n\nexport function xywhToTlbr>(rect: T) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || rect.left + rect.width\n rect.bottom = rect.bottom || rect.top + rect.height\n }\n\n return rect as Rect & T\n}\n\nexport function tlbrToXywh(rect: Rect & Partial) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right || 0) - rect.x\n rect.height = rect.height || (rect.bottom || 0) - rect.y\n }\n\n return rect as FullRect & Point\n}\n\nexport function addEdges(edges: EdgeOptions, rect: Rect, delta: Point) {\n if (edges.left) {\n rect.left += delta.x\n }\n if (edges.right) {\n rect.right += delta.x\n }\n if (edges.top) {\n rect.top += delta.y\n }\n if (edges.bottom) {\n rect.bottom += delta.y\n }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n","import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function getOriginXY(\n target: HasGetRect & { options: PerActionDefaults },\n element: Node,\n actionName?: ActionName,\n) {\n const actionOptions = actionName && (target.options as any)[actionName]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Listener[]\n}\n\nexport default function normalize(\n type: EventTypes,\n listeners?: ListenersArg | ListenersArg[] | null,\n filter = (_typeOrPrefix: string) => true,\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n type.forEach((t) => normalize(t, listeners, filter, result))\n return result\n }\n\n // before: type = [{ drag: () => {} }], listeners = undefined\n // after: type = '' , listeners = [{ drag: () => {} }]\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners) && filter(type)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n } else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, filter, result)\n }\n } else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], filter, result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split(type: string) {\n return type.trim().split(/ +/)\n}\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend(dest: Partial }>, source: T) {\n dest.__set ||= {} as any\n\n for (const prop in source) {\n // skip deprecated prefixed properties\n if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n if (typeof dest[prop] !== 'function' && prop !== '__set') {\n Object.defineProperty(dest, prop, {\n get() {\n if (prop in dest.__set) return dest.__set[prop]\n\n return (dest.__set[prop] = source[prop] as any)\n },\n set(value: any) {\n dest.__set[prop] = value\n },\n configurable: true,\n })\n }\n }\n return dest\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords(dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || ({} as any)\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || ({} as any)\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords(targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer(pointer: any) {\n return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || ({} as Point)\n type = type || 'page'\n\n xy.x = pointer[(type + 'X') as 'pageX']\n xy.y = pointer[(type + 'Y') as 'pageY']\n\n return xy\n}\n\nexport function getPageXY(pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n } else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY(pointer: PointerType, client: Point) {\n client = client || ({} as any)\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n } else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId(pointer: { pointerId?: number; identifier?: number; type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair(event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n } else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n } else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage(pointers: PointerType[]) {\n const average = {\n pageX: 0,\n pageY: 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox(event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\nexport function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n}\n\nexport function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n return angle\n}\n\nexport function getPointerType(pointer: { pointerType?: string; identifier?: number; type?: string }) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n : // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets(event: Event) {\n const path = is.func(event.composedPath)\n ? (event.composedPath() as Element[])\n : (event as unknown as { path: Element[] }).path\n\n return [\n domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords(): CoordsSetMember {\n return {\n page: { x: 0, y: 0 },\n client: { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent(coords: MockCoords) {\n const event = {\n coords,\n get page() {\n return this.coords.page\n },\n get client() {\n return this.coords.client\n },\n get timeStamp() {\n return this.coords.timeStamp\n },\n get pageX() {\n return this.coords.page.x\n },\n get pageY() {\n return this.coords.page.y\n },\n get clientX() {\n return this.coords.client.x\n },\n get clientY() {\n return this.coords.client.y\n },\n get pointerId() {\n return this.coords.pointerId\n },\n get target() {\n return this.coords.target\n },\n get type() {\n return this.coords.type\n },\n get pointerType() {\n return this.coords.pointerType\n },\n get buttons() {\n return this.coords.buttons\n },\n preventDefault() {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent {\n declare type: string\n declare target: EventTarget\n declare currentTarget: Node\n declare interactable: Interactable\n /** @internal */\n declare _interaction: Interaction\n declare timeStamp: number\n immediatePropagationStopped = false\n propagationStopped = false\n\n constructor(interaction: Interaction) {\n this._interaction = interaction\n }\n\n preventDefault() {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent {\n interaction: InteractionProxy\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n get(this: BaseEvent) {\n return this._interaction._proxy\n },\n set(this: BaseEvent) {},\n})\n","type Filter = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = (array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = (array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = (target: Array, source: U[]) => {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport const from = (source: ArrayLike) => merge([] as T[], source as T[])\n\nexport const findIndex = (array: T[], func: Filter) => {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport const find = (array: T[], func: Filter): T | undefined => array[findIndex(array, func)]\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n declare target: Element\n dropzone: Interactable\n dragEvent: InteractEvent<'drag'>\n relatedTarget: Element\n draggable: Interactable\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject() {\n const { dropState } = this._interaction\n\n if (\n this.type !== 'dropactivate' &&\n (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n ) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(\n activeDrops,\n ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n )\n\n dropState.activeDrops.splice(index, 1)\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n } else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault() {}\n\n stopPropagation() {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '../drag/plugin'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n/* eslint-enable import/no-duplicates */\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n dragEvent: any, // related drag operation\n event: any, // touch or mouse EventEmitter\n dropped: boolean, // default checker result\n dropzone: Interactable, // dropzone interactable\n dropElement: Element, // drop zone element\n draggable: Interactable, // draggable's Interactable\n draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n accept?:\n | string\n | Element\n | (({ dropzone, draggableElement }: { dropzone: Interactable; draggableElement: Element }) => boolean)\n // How the overlap is checked on the drop zone\n overlap?: 'pointer' | 'center' | number\n checker?: DropFunctionChecker\n\n ondropactivate?: ListenersArg\n ondropdeactivate?: ListenersArg\n ondragenter?: ListenersArg\n ondragleave?: ListenersArg\n ondropmove?: ListenersArg\n ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n (this: Interactable, options: DropzoneOptions | boolean): Interactable\n (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param options - The new options to be set\n */\n dropzone(options: DropzoneOptions | boolean): Interactable\n /** @returns The current setting */\n dropzone(): DropzoneOptions\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n dropCheck(\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any,\n ): boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: DropState\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n /** @internal */\n prevDropzone?: Interactable\n dropzone?: Interactable\n dragEnter?: Element\n dragLeave?: Element\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drop: DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n\n interface SignalArgs {\n 'actions/drop:start': DropSignalArg\n 'actions/drop:move': DropSignalArg\n 'actions/drop:end': DropSignalArg\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drop?: typeof drop\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n interface InteractStatic {\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n dynamicDrop: (newValue?: boolean) => boolean | this\n }\n}\n\ninterface DropSignalArg {\n interaction: Interaction<'drag'>\n dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n dropzone: Interactable\n element: Element\n rect: Rect\n}\n\nexport interface DropState {\n cur: {\n // the dropzone a drag target might be dropped into\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n prev: {\n // the dropzone that was recently dragged away from\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n // wheather the potential drop was rejected from a listener\n rejected: boolean\n // the drop events related to the current drag event\n events: FiredDropEvents\n activeDrops: ActiveDrop[]\n}\n\nfunction install(scope: Scope) {\n const { actions, interactStatic: interact, Interactable, defaults } = scope\n\n scope.usePlugin(drag)\n\n Interactable.prototype.dropzone = function (this: Interactable, options) {\n return dropzoneMethod(this, options)\n } as Interactable['dropzone']\n\n Interactable.prototype.dropCheck = function (\n this: Interactable,\n dragEvent,\n event,\n draggable,\n draggableElement,\n dropElement,\n rect,\n ) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n interact.dynamicDrop = function (newValue?: boolean) {\n if (is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop!\n }\n\n extend(actions.phaselessTypes, {\n dragenter: true,\n dragleave: true,\n dropactivate: true,\n dropdeactivate: true,\n dropmove: true,\n drop: true,\n })\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDropzones({ interactables }: Scope, draggableElement: Element) {\n const drops: ActiveDrop[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) {\n continue\n }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if (\n (is.element(accept) && accept !== draggableElement) ||\n (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n (is.func(accept) && !accept({ dropzone, draggableElement }))\n ) {\n continue\n }\n\n for (const dropzoneElement of dropzone.getAllElements()) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n rect: dropzone.getRect(dropzoneElement),\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents(activeDrops: ActiveDrop[], event: DropEvent) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops.slice()) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops(scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDropzones(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop(\n { dropState, interactable: draggable, element: dragElement }: Interaction,\n dragEvent,\n pointerEvent,\n) {\n const validDrops: Element[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n const isValid = dropzone.dropCheck(\n dragEvent,\n pointerEvent,\n draggable!,\n dragElement!,\n dropzoneElement,\n rect,\n )\n validDrops.push(isValid ? dropzoneElement : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n return dropState!.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents(interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n const dropState = interaction.dropState!\n const dropEvents: Record = {\n enter: null,\n leave: null,\n activate: null,\n deactivate: null,\n move: null,\n drop: null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null as never\n dropEvents.activate.dropzone = null as never\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null as never\n dropEvents.deactivate.dropzone = null as never\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\ntype FiredDropEvents = Partial<\n Record<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents(interaction: Interaction, events: FiredDropEvents) {\n const dropState = interaction.dropState!\n const { activeDrops, cur, prev } = dropState\n\n if (events.leave) {\n prev.dropzone.fire(events.leave)\n }\n if (events.enter) {\n cur.dropzone.fire(events.enter)\n }\n if (events.move) {\n cur.dropzone.fire(events.move)\n }\n if (events.drop) {\n cur.dropzone.fire(events.drop)\n }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n return\n }\n\n const dropState = interaction.dropState!\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected =\n dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod(interactable: Interactable, options?: DropzoneOptions | boolean) {\n if (is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n const prevListeners = interactable.options.drop.listeners\n prevListeners && interactable.off(prevListeners)\n\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (is.func(options.ondrop)) {\n interactable.on('drop', options.ondrop)\n }\n if (is.func(options.ondropactivate)) {\n interactable.on('dropactivate', options.ondropactivate)\n }\n if (is.func(options.ondropdeactivate)) {\n interactable.on('dropdeactivate', options.ondropdeactivate)\n }\n if (is.func(options.ondragenter)) {\n interactable.on('dragenter', options.ondragenter)\n }\n if (is.func(options.ondragleave)) {\n interactable.on('dragleave', options.ondragleave)\n }\n if (is.func(options.ondropmove)) {\n interactable.on('dropmove', options.ondropmove)\n }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n } else if (is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod(\n interactable: Interactable,\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return interactable.options.drop.checker\n ? interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n : false\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = getOriginXY(draggable, draggableElement, 'drag')\n const page = pointerUtils.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = page.x > rect.left && page.x < rect.right\n const vertical = page.y > rect.top && page.y < rect.bottom\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && is.number(dropOverlap)) {\n const overlapArea =\n Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n }\n\n return dropped\n}\n\nconst drop: Plugin = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: [],\n }\n },\n\n 'interactions:after-action-start': (\n { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n\n // reset active dropzones\n dropState.activeDrops = []\n dropState.events = {}\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n scope.fire('actions/drop:start', { interaction, dragEvent })\n }\n },\n\n 'interactions:action-move': onEventCreated,\n\n 'interactions:after-action-move': (\n { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n fireDropEvents(interaction, dropState.events)\n\n scope.fire('actions/drop:move', { interaction, dragEvent })\n dropState.events = {}\n },\n\n 'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n if (arg.interaction.prepared.name !== 'drag') {\n return\n }\n\n const { interaction, iEvent: dragEvent } = arg\n\n onEventCreated(arg, scope)\n fireDropEvents(interaction, interaction.dropState!.events)\n scope.fire('actions/drop:end', { interaction, dragEvent })\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null as never\n dropState.events = null as never\n dropState.cur.dropzone = null as never\n dropState.cur.element = null as never\n dropState.prev.dropzone = null as never\n dropState.prev.element = null as never\n dropState.rejected = false\n }\n },\n },\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n\n filterEventType: (type: string) => type.search('drag') === 0 || type.search('drop') === 0,\n\n defaults: {\n enabled: false,\n accept: null as never,\n overlap: 'pointer',\n } as DropzoneOptions,\n}\n\nexport default drop\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable(options: Partial> | boolean): this\n gesturable(): GesturableOptions\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n * @returns A boolean indicating if this can be the target of gesture events, or this Interactable\n */\n gesturable(options?: Partial> | boolean): this | GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n gesture: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.gesturable = function (\n this: InstanceType,\n options: GesturableOptions | boolean,\n ) {\n if (is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as GesturableOptions\n } as Interactable['gesturable']\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps({ interaction, iEvent, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') return\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n } else if (ending || interaction.pointers.length < 2) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n } else {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n\n 'auto-start:check': (arg) => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {},\n\n getCursor() {\n return ''\n },\n\n filterEventType: (type: string) => type.search('gesture') === 0,\n}\n\nexport default gesture\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n ActionName,\n ActionProps,\n EdgeOptions,\n FullRect,\n ListenersArg,\n OrBoolean,\n Point,\n Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable(): ResizableOptions\n resizable(options: Partial> | boolean): this\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @returns A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n resizable(options?: Partial> | boolean): this | ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n resizeStartAspectRatio: number\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n resize: ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n resize?: typeof resize\n }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n square?: boolean\n preserveAspectRatio?: boolean\n edges?: EdgeOptions | null\n axis?: 'x' | 'y' | 'xy' // deprecated\n invert?: 'none' | 'negate' | 'reposition'\n margin?: number\n squareResize?: boolean\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface ResizeEvent

extends InteractEvent<'resize', P> {\n deltaRect?: FullRect\n edges?: ActionProps['edges']\n}\n\nfunction install(scope: Scope) {\n const {\n actions,\n browser,\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as Interactable['resizable']\n\n actions.map.resize = resize\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker(arg) {\n const { interaction, interactable, element, rect, buttons } = arg\n\n if (!rect) {\n return undefined\n }\n\n const page = extend({}, interaction.coords.cur.page)\n const resizeOptions = interactable.options.resize\n\n if (\n !(resizeOptions && resizeOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & resizeOptions.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n const resizeEdges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(\n edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || resize.defaultMargin,\n )\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n arg.action = {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n } else {\n const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n if (right || bottom) {\n arg.action = {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n\n return arg.action ? false : undefined\n}\n\nfunction resizable(interactable: Interactable, options: OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n } else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n } else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge(\n name: string,\n value: any,\n page: Point,\n element: Node,\n interactableElement: Element,\n rect: Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) {\n return false\n }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n if (width < 0) {\n if (name === 'left') {\n name = 'right'\n } else if (name === 'right') {\n name = 'left'\n }\n }\n if (height < 0) {\n if (name === 'top') {\n name = 'bottom'\n } else if (name === 'bottom') {\n name = 'top'\n }\n }\n\n if (name === 'left') {\n const edge = width >= 0 ? rect.left : rect.right\n return page.x < edge + margin\n }\n if (name === 'top') {\n const edge = height >= 0 ? rect.top : rect.bottom\n return page.y < edge + margin\n }\n\n if (name === 'right') {\n return page.x > (width >= 0 ? rect.right : rect.left) - margin\n }\n if (name === 'bottom') {\n return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) {\n return false\n }\n\n return is.element(value)\n ? // the value is an element to use as a resize handle\n value === element\n : // otherwise check if element matches value as selector\n dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors(browser: typeof import('@interactjs/utils/browser').default) {\n return browser.isIe9\n ? {\n x: 'e-resize',\n y: 's-resize',\n xy: 'se-resize',\n\n top: 'n-resize',\n left: 'w-resize',\n bottom: 's-resize',\n right: 'e-resize',\n topleft: 'se-resize',\n bottomright: 'se-resize',\n topright: 'ne-resize',\n bottomleft: 'ne-resize',\n }\n : {\n x: 'ew-resize',\n y: 'ns-resize',\n xy: 'nwse-resize',\n\n top: 'ns-resize',\n left: 'ew-resize',\n bottom: 'ns-resize',\n right: 'ew-resize',\n topleft: 'nwse-resize',\n bottomright: 'nwse-resize',\n topright: 'nesw-resize',\n bottomleft: 'nesw-resize',\n }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const resizeEvent = iEvent as ResizeEvent\n const rect = interaction.rect\n\n interaction._rects = {\n start: extend({}, rect),\n corrected: extend({}, rect),\n previous: extend({}, rect),\n delta: {\n left: 0,\n right: 0,\n width: 0,\n top: 0,\n bottom: 0,\n height: 0,\n },\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n const current = interaction.rect\n const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n extend(previous, corrected)\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(corrected, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n if (corrected.top > corrected.bottom) {\n const swap = corrected.top\n\n corrected.top = corrected.bottom\n corrected.bottom = swap\n }\n if (corrected.left > corrected.right) {\n const swap = corrected.left\n\n corrected.left = corrected.right\n corrected.right = swap\n }\n }\n } else {\n // if not invertible, restrict to minimum of 0x0 rect\n corrected.top = Math.min(current.top, startRect.bottom)\n corrected.bottom = Math.max(current.bottom, startRect.top)\n corrected.left = Math.min(current.left, startRect.right)\n corrected.right = Math.max(current.right, startRect.left)\n }\n\n corrected.width = corrected.right - corrected.left\n corrected.height = corrected.bottom - corrected.top\n\n for (const edge in corrected) {\n deltaRect[edge] = corrected[edge] - previous[edge]\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = corrected\n resizeEvent.deltaRect = deltaRect\n}\n\nfunction end({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n const options = interaction.interactable.options\n const resizeEvent = iEvent as ResizeEvent\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = resizeEvent.delta.y\n } else {\n resizeEvent.delta.y = resizeEvent.delta.x\n }\n resizeEvent.axes = 'xy'\n } else {\n resizeEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n resizeEvent.delta.y = 0\n } else if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = 0\n }\n }\n}\n\nconst resize: Plugin = {\n id: 'actions/resize',\n before: ['actions/drag'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': (arg) => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': (arg) => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n 'auto-start:check': resizeChecker,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as ResizableOptions,\n\n cursors: null as ReturnType,\n\n getCursor({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n } else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n filterEventType: (type: string) => type.search('resize') === 0,\n\n defaultMargin: null as number,\n}\n\nexport default resize\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'actions',\n install(scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n },\n}\n","let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init(global: Window | typeof globalThis) {\n request = global.requestAnimationFrame\n cancel = global.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n cancel =\n global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n }\n }\n\n request = request && request.bind(global)\n cancel = cancel && cancel.bind(global)\n\n if (!request) {\n request = (callback) => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n const token = global.setTimeout(() => {\n // eslint-disable-next-line n/no-callback-literal\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return token as any\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback: FrameRequestCallback) => request(callback),\n cancel: (token: number) => cancel(token),\n init,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement | string\n margin?: number\n distance?: number\n interval?: number\n speed?: number\n enabled?: boolean\n}\n\nfunction install(scope: Scope) {\n const { defaults, actions } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.phaselessTypes.autoscroll = true\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled: false,\n margin: 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed: 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null as Interaction | null,\n i: 0, // the handle returned by window.setInterval\n\n // Direction each pulse is to scroll in\n x: 0,\n y: 0,\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start(interaction: Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop() {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll() {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n } else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check(interactable: Interactable, actionName: ActionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll?.enabled\n },\n onInteractionMove({\n interaction,\n pointer,\n }: {\n interaction: Interaction\n pointer: PointerType\n }) {\n if (\n !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n ) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top: boolean\n let right: boolean\n let bottom: boolean\n let left: boolean\n\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n } else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = right ? 1 : left ? -1 : 0\n autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer(value: any, interactable: Interactable, element: Element) {\n return (\n (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n )\n}\n\nexport function getScroll(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta(\n {\n interaction,\n element,\n }: {\n interaction: Partial>\n element: Element\n },\n func: any,\n) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nconst autoScrollPlugin: Plugin = {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n\nexport default autoScrollPlugin\n","import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce(this: T, method: (...args: any[]) => any, message: string) {\n let warned = false\n\n return function (this: T) {\n if (!warned) {\n ;(window as any).console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\nexport function copyAction(dest: ActionProps, src: ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ) => ActionProps | null\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n styleCursor(newValue?: boolean): boolean | this\n actionChecker(checker: Function): Interactable\n actionChecker(): Function\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param checker - A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @returns The checker function or this Interactable\n */\n actionChecker(checker?: Function): Interactable | Function\n /** @returns This interactable */\n ignoreFrom(newValue: string | Element | null): Interactable\n /** @returns The current ignoreFrom value */\n ignoreFrom(): string | Element | null\n /**\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * @deprecated\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n * ```\n * Interactable\n */\n ignoreFrom(\n /** a CSS selector string, an Element or `null` to not ignore any elements */\n newValue?: string | Element | null,\n ): Interactable | string | Element | null\n allowFrom(): boolean\n /**\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * @deprecated\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n * ```\n *\n * @param {string | Element | null} [newValue]\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n allowFrom(\n /** A CSS selector string, an Element or `null` to allow from any element */\n newValue: string | Element | null,\n ): Interactable\n }\n}\n\nfunction install(scope: Scope) {\n const {\n Interactable, // tslint:disable-line no-shadowed-variable\n } = scope\n\n Interactable.prototype.getAction = function getAction(\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ): ActionProps {\n const action = defaultActionChecker(this, event, interaction, element, scope)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n }\n\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.actionChecker = actionChecker\n\n Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker(\n interactable: Interactable,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n scope: Scope,\n) {\n const rect = interactable.getRect(element)\n const buttons =\n (event as MouseEvent).buttons ||\n {\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n const arg = {\n action: null,\n interactable,\n interaction,\n element,\n rect,\n buttons,\n }\n\n scope.fire('auto-start:check', arg)\n\n return arg.action\n}\n\nfunction styleCursor(this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker(this: Interactable, checker?: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n CursorChecker,\n PointerType,\n PointerEventType,\n Element,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\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\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './InteractableMethods'\nimport InteractableMethods from './InteractableMethods'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\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 * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\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': Omit & {\n interaction: Interaction\n }\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/options' {\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 { interactStatic: interact, defaults } = 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 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(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n if (interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || 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 (\n !interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name\n ) {\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 (\n interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n ) {\n interaction.stop()\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 (\n interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)\n ) {\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) {\n continue\n }\n\n const action = validateAction(matchAction, match, matchElement, eventTarget, 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(\n interaction,\n pointer,\n event,\n matches,\n matchElements,\n eventTarget,\n scope,\n )\n\n if (actionInfo.action && !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 {\n action,\n interactable,\n element,\n }: {\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 ? interactable.getRect(element) : 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)) {\n return false\n }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) {\n continue\n }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) {\n continue\n }\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 } 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","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.prepared.name !== 'drag') return\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n interaction.prepared.axis =\n targetOptions.lockAxis === 'start'\n ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n ;(interaction as Interaction).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) return\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer,\n interaction.downEvent,\n interaction,\n element,\n )\n\n if (\n action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)\n ) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n ;(interaction as Interaction).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis(startAxis: string, interactable: Interactable) {\n if (!interactable) {\n return false\n }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable */\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration(interaction: Interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) {\n return null\n }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n interaction.autoStartHoldTimer = null\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const holdDuration = getHoldDuration(interaction)\n\n if (holdDuration > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\nexport default hold\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './dragAxis'\nimport './hold'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'auto-start',\n install(scope: Scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n },\n}\n","import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault(newValue: PreventDefaultValue): this\n preventDefault(): PreventDefaultValue\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param newValue - `'always'`, `'never'` or `'auto'`\n * @returns The current setting or this Interactable\n */\n preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this\n checkAndPreventDefault(event: Event): void\n }\n}\n\nconst preventDefault = function preventDefault(this: Interactable, newValue?: PreventDefaultValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n} as Interactable['preventDefault']\n\nfunction checkAndPreventDefault(interactable: Interactable, scope: Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') return\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (\n is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n ) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent({ interaction, event }: { interaction: Interaction; event: PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n if (\n interaction.element &&\n (interaction.element === event.target || nodeContains(interaction.element, event.target))\n ) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {} as any),\n}\n","import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent(type: string, actions: Actions) {\n if (actions.phaselessTypes[type]) {\n return true\n }\n\n for (const name in actions.map) {\n if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n return true\n }\n }\n\n return false\n}\n","export default {}\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, OptionMethod } from '@interactjs/core/types'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as win from '@interactjs/utils/window'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './visualizer/plugin'\nimport visualizer from './visualizer/plugin'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n visializer: typeof visualizer\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools: OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: CheckName\n text: string\n perform: (interaction: Interaction) => boolean\n getInfo: (interaction: Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = 'touchAction',\n boxSizing = 'boxSizing',\n noListeners = 'noListeners',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\n// eslint-disable-next-line no-undef\nconst isProduction = process.env.NODE_ENV === 'production'\n\nfunction install(scope: Scope, { logger }: { logger?: Logger } = {}) {\n const { Interactable, defaults } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?: object) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n\n // can't set native events on non string targets without `addEventListener` prop\n const { _onOff } = Interactable.prototype\n Interactable.prototype._onOff = function (method, typeArg, listenerArg, options, filter) {\n if (is.string(this.target) || this.target.addEventListener) {\n return _onOff.call(this, method, typeArg, listenerArg, options, filter)\n }\n\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const normalizedListeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (const type in normalizedListeners) {\n if (isNonNativeEvent(type, scope.actions)) continue\n scope.logger.warn(\n prefix +\n `Can't add native \"${type}\" event listener to target without \\`addEventListener(type, listener, options)\\` prop.`,\n )\n }\n\n return _onOff.call(this, method, normalizedListeners, options)\n }\n scope.usePlugin(visualizer)\n}\n\nconst checks: Check[] = [\n {\n name: CheckName.touchAction,\n perform({ element }) {\n return !!element && !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo({ element }) {\n return [element, links.touchAction]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: CheckName.boxSizing,\n perform(interaction) {\n const { element } = interaction\n\n return (\n interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n )\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo({ element }) {\n return [element, links.boxSizing]\n },\n },\n\n {\n name: CheckName.noListeners,\n perform(interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable?.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo(interaction) {\n return [interaction.prepared.name, interaction.interactable]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle(element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n const value = element.style[prop] || win.window.getComputedStyle(element)[prop]\n return styleRe.test((value || '').toString())\n}\n\nfunction parentHasStyle(element: Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent) as HTMLElement\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport: Plugin = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n","import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone(source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n } else if (is.array(value)) {\n dest[prop] = arr.from(value) as typeof value\n } else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n delta: Point\n rectDelta: Rect\n coords: Point\n rect: FullRect\n eventProps: any[]\n changed: boolean\n}\n\ninterface MethodArg {\n phase: EventPhase\n pageCoords: Point\n rect: FullRect\n coords: Point\n preEnd?: boolean\n skipModifiers?: number\n}\n\nexport class Modification {\n states: ModifierState[] = []\n startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n startDelta!: Point\n result!: ModificationResult\n endResult!: Point\n startEdges!: EdgeOptions\n edges: EdgeOptions\n readonly interaction: Readonly\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n this.result = createResult()\n this.edges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n }\n\n start({ phase }: { phase: EventPhase }, pageCoords: Point) {\n const { interaction } = this\n const modifierList = getModifierList(interaction)\n this.prepareStates(modifierList)\n\n this.startEdges = extend({}, interaction.edges)\n this.edges = extend({}, this.startEdges)\n this.startOffset = getRectOffset(interaction.rect, pageCoords)\n this.startDelta = { x: 0, y: 0 }\n\n const arg = this.fillArg({\n phase,\n pageCoords,\n preEnd: false,\n })\n\n this.result = createResult()\n this.startAll(arg)\n\n const result = (this.result = this.setAll(arg))\n\n return result\n }\n\n fillArg(arg: Partial) {\n const { interaction } = this\n\n arg.interaction = interaction\n arg.interactable = interaction.interactable\n arg.element = interaction.element\n arg.rect ||= interaction.rect\n arg.edges ||= this.startEdges\n arg.startOffset = this.startOffset\n\n return arg as ModifierArg\n }\n\n startAll(arg: MethodArg & Partial) {\n for (const state of this.states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg as ModifierArg)\n }\n }\n }\n\n setAll(arg: MethodArg & Partial): ModificationResult {\n const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, unmodifiedRect)\n arg.edges = extend({}, unmodifiedEdges)\n\n const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n const newResult = createResult(arg.coords, arg.rect)\n\n for (const state of states) {\n const { options } = state\n const lastModifierCoords = extend({}, arg.coords)\n let returnValue = null\n\n if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n arg.state = state\n returnValue = state.methods.set(arg as ModifierArg)\n\n rectUtils.addEdges(arg.edges, arg.rect, {\n x: arg.coords.x - lastModifierCoords.x,\n y: arg.coords.y - lastModifierCoords.y,\n })\n }\n\n newResult.eventProps.push(returnValue)\n }\n\n extend(this.edges, arg.edges)\n\n newResult.delta.x = arg.coords.x - arg.pageCoords.x\n newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n const prevCoords = this.result.coords\n const prevRect = this.result.rect\n\n if (prevCoords && prevRect) {\n const rectChanged =\n newResult.rect.left !== prevRect.left ||\n newResult.rect.right !== prevRect.right ||\n newResult.rect.top !== prevRect.top ||\n newResult.rect.bottom !== prevRect.bottom\n\n newResult.changed =\n rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n }\n\n return newResult\n }\n\n applyToInteraction(arg: { phase: EventPhase; rect?: Rect }) {\n const { interaction } = this\n const { phase } = arg\n const curCoords = interaction.coords.cur\n const startCoords = interaction.coords.start\n const { result, startDelta } = this\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(this.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [\n [startCoords, startDelta],\n [curCoords, curDelta],\n ] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = this.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n setAndApply(\n arg: Partial & {\n phase: EventPhase\n preEnd?: boolean\n skipModifiers?: number\n modifiedCoords?: Point\n },\n ): void | false {\n const { interaction } = this\n const { phase, preEnd, skipModifiers } = arg\n\n const result = this.setAll(\n this.fillArg({\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n }),\n )\n\n this.result = result\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (\n !result.changed &&\n (!skipModifiers || skipModifiers < this.states.length) &&\n interaction.interacting()\n ) {\n return false\n }\n\n if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n result.coords.x += adjustment.x\n result.coords.y += adjustment.y\n result.delta.x += adjustment.x\n result.delta.y += adjustment.y\n }\n\n this.applyToInteraction(arg)\n }\n\n beforeEnd(arg: Omit & { state?: ModifierState }): void | false {\n const { interaction, event } = arg\n const states = this.states\n\n if (!states || !states.length) {\n return\n }\n\n let doPreend = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endPosition) {\n this.endResult = endPosition\n return false\n }\n\n doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n }\n\n if (doPreend) {\n // trigger a final modified move before ending\n interaction.move({ event, preEnd: true })\n }\n }\n\n stop(arg: { interaction: Interaction }) {\n const { interaction } = arg\n\n if (!this.states || !this.states.length) {\n return\n }\n\n const modifierArg: Partial = extend(\n {\n states: this.states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n },\n arg,\n )\n\n this.fillArg(modifierArg)\n\n for (const state of this.states) {\n modifierArg.state = state\n\n if (state.methods.stop) {\n state.methods.stop(modifierArg as ModifierArg)\n }\n }\n\n this.states = null\n this.endResult = null\n }\n\n prepareStates(modifierList: Modifier[]) {\n this.states = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n this.states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return this.states\n }\n\n restoreInteractionCoords({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n if (!modification.result) return\n\n const { startDelta } = modification\n const { delta: curDelta, rectDelta } = modification.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n }\n\n shouldDo(options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n if (\n // ignore disabled modifiers\n !options ||\n options.enabled === false ||\n // check if we require endOnly option to fire move before end\n (requireEndOnly && !options.endOnly) ||\n // don't apply endOnly modifiers when not ending\n (options.endOnly && !preEnd) ||\n // check if modifier should run be applied on start\n (phase === 'start' && !options.setStart)\n ) {\n return false\n }\n\n return true\n }\n\n copyFrom(other: Modification) {\n this.startOffset = other.startOffset\n this.startDelta = other.startDelta\n this.startEdges = other.startEdges\n this.edges = other.edges\n this.states = other.states.map((s) => clone(s) as ModifierState)\n this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n }\n\n destroy() {\n for (const prop in this) {\n this[prop] = null\n }\n }\n}\n\nfunction createResult(coords?: Point, rect?: FullRect): ModificationResult {\n return {\n rect,\n coords,\n delta: { x: 0, y: 0 },\n rectDelta: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n eventProps: [],\n changed: true,\n }\n}\n\nfunction getModifierList(interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map((type) => {\n const options = actionOptions[type]\n\n return (\n options &&\n options.enabled && {\n options,\n methods: options._methods,\n }\n )\n })\n .filter((m) => !!m)\n}\n\nexport function getRectOffset(rect, coords) {\n return rect\n ? {\n left: coords.x - rect.left,\n top: coords.y - rect.top,\n right: rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modification?: Modification\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n modifiers?: Array<{\n name: string\n [key: string]: any\n }>\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n Result,\n>(module: ModifierModule, name?: Name) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n ;(options as any)[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = {\n options,\n methods,\n name,\n enable: () => {\n options.enabled = true\n return m\n },\n disable: () => {\n options.enabled = false\n return m\n },\n }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport function addEventModifiers({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n const result = interaction.modification!.result\n\n if (result) {\n iEvent.modifiers = result.eventProps\n }\n}\n\nconst modifiersBase: Plugin = {\n id: 'modifiers/base',\n before: ['actions'],\n install: (scope) => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modification = new Modification(interaction)\n },\n\n 'interactions:before-action-start': (arg) => {\n const { interaction } = arg\n const modification = arg.interaction.modification!\n\n modification.start(arg, interaction.coords.start.page)\n interaction.edges = modification.edges\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-move': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.setAndApply(arg)\n interaction.edges = modification.edges\n\n return ret\n },\n\n 'interactions:before-action-end': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.beforeEnd(arg)\n interaction.edges = modification.startEdges\n\n return ret\n },\n\n 'interactions:action-start': addEventModifiers,\n 'interactions:action-move': addEventModifiers,\n 'interactions:action-end': addEventModifiers,\n\n 'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n 'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n },\n}\n\nexport default modifiersBase\n","import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n preventDefault?: 'always' | 'never' | 'auto'\n deltaSource?: 'page' | 'client'\n context?: Node\n getRect?: (element: Element) => Rect\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Point | string | Element\n listeners?: Listeners\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n}\n\nexport type Options = Partial &\n Partial & {\n [P in keyof ActionDefaults]?: Partial\n }\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean> {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n start: true\n move: true\n end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n pageX: number\n pageY: number\n\n clientX: number\n clientY: number\n\n dx: number\n dy: number\n\n velocityX: number\n velocityY: number\n}\n\nexport class InteractEvent<\n T extends ActionName = never,\n P extends EventPhase = EventPhase,\n> extends BaseEvent {\n declare target: Element\n declare currentTarget: Element\n relatedTarget: Element | null = null\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Point\n client: Point\n delta: Point\n rect: FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Point\n speed: number\n swipe: ReturnType['getSwipe']>\n // resize\n axes?: 'x' | 'y' | 'xy'\n /** @internal */\n preEnd?: boolean\n\n constructor(\n interaction: Interaction,\n event: PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.preEnd = preEnd\n this.type = type || actionName + (phase || '')\n this.interactable = target\n\n this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n } else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n }\n\n getSwipe() {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault() {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n pageX: {\n get() {\n return this.page.x\n },\n set(value) {\n this.page.x = value\n },\n },\n pageY: {\n get() {\n return this.page.y\n },\n set(value) {\n this.page.y = value\n },\n },\n\n clientX: {\n get() {\n return this.client.x\n },\n set(value) {\n this.client.x = value\n },\n },\n clientY: {\n get() {\n return this.client.y\n },\n set(value) {\n this.client.y = value\n },\n },\n\n dx: {\n get() {\n return this.delta.x\n },\n set(value) {\n this.delta.x = value\n },\n },\n dy: {\n get() {\n return this.delta.y\n },\n set(value) {\n this.delta.y = value\n },\n },\n\n velocityX: {\n get() {\n return this.velocity.x\n },\n set(value) {\n this.velocity.x = value\n },\n },\n velocityY: {\n get() {\n return this.velocity.y\n },\n set(value) {\n this.velocity.y = value\n },\n },\n})\n","import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n id: number\n pointer: PointerType\n event: PointerEventType\n downTime: number\n downTarget: Node\n\n constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n this.id = id\n this.pointer = pointer\n this.event = event\n this.downTime = downTime\n this.downTarget = downTarget\n }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type {\n Element,\n EdgeOptions,\n PointerEventType,\n PointerType,\n FullRect,\n CoordsSet,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { ActionDefaults } from './options'\nimport { PointerInfo } from './PointerInfo'\nimport type { Scope } from './scope'\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = '',\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = '',\n}\n\nexport type PointerArgProps = {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n pointerIndex: number\n pointerInfo: PointerInfo\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps\n 'interactions:blur': { interaction: Interaction; event: Event; type: 'blur' }\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoAnyPhaseArg\n 'interactions:after-action-start': DoAnyPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoAnyPhaseArg\n 'interactions:after-action-move': DoAnyPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoAnyPhaseArg\n 'interactions:after-action-end': DoAnyPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type InteractionProxy = Pick<\n Interaction,\n keyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nlet idCounter = 0\n\nexport class Interaction {\n /** current interactable being interacted with */\n interactable: Interactable | null = null\n\n /** the target element of the interactable */\n element: Element | null = null\n rect: FullRect | null = null\n /** @internal */\n _rects?: {\n start: FullRect\n corrected: FullRect\n previous: FullRect\n delta: FullRect\n }\n /** @internal */\n edges: EdgeOptions | null = null\n\n /** @internal */\n _scopeFire: Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name: null,\n axis: null,\n edges: null,\n }\n\n pointerType: string\n\n /** @internal keep track of added pointers */\n pointers: PointerInfo[] = []\n\n /** @internal pointerdown/mousedown/touchstart event */\n downEvent: PointerEventType | null = null\n\n /** @internal */ downPointer: PointerType = {} as PointerType\n\n /** @internal */\n _latestPointer: {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n /** @internal */ prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n /** @internal */ _interacting = false\n /** @internal */ _ending = false\n /** @internal */ _stopped = true\n /** @internal */ _proxy: InteractionProxy\n\n /** @internal */ simulation = null\n\n /** @internal */ get pointerMoveTolerance() {\n return 1\n }\n\n doMove = warnOnce(function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords: CoordsSet = {\n // Starting InteractEvent pointer coordinates\n start: pointerUtils.newCoords(),\n // Previous native pointer move event coordinates\n prev: pointerUtils.newCoords(),\n // current native pointer move event coordinates\n cur: pointerUtils.newCoords(),\n // Change in coordinates and time of the pointer\n delta: pointerUtils.newCoords(),\n // pointer velocity\n velocity: pointerUtils.newCoords(),\n }\n\n /** @internal */ readonly _id: number = idCounter++\n\n constructor({ pointerType, scopeFire }: { pointerType?: string; scopeFire: Scope['fire'] }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get() {\n return that[key]\n },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args: any[]) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n pointerInfo,\n type: 'down',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param action - The action to be performed - drag, resize, etc.\n * @param target - The Interactable to target\n * @param element - The DOM Element to target\n * @returns Whether the interaction was successfully started\n */\n start(action: ActionProps, interactable: Interactable, element: Element): boolean {\n if (\n this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n !interactable.options[action.name as keyof ActionDefaults].enabled\n ) {\n return false\n }\n\n copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n ? extend({}, this.prepared.edges)\n : { left: true, right: true, top: true, bottom: true }\n this._stopped = false\n this._interacting =\n this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modification && this.modification.endResult)) {\n this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const duplicateMove =\n this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y\n\n let dx: number\n let dy: number\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const pointerIndex = this.getPointerIndex(pointer)\n const signalArg = {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n type: 'move' as const,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this as unknown as Interaction,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove && !this.simulation) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move(signalArg?: any) {\n if (!signalArg || !signalArg.event) {\n pointerUtils.setZeroCoords(this.coords.delta)\n }\n\n signalArg = extend(\n {\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n },\n signalArg || {},\n )\n\n signalArg.phase = 'move'\n\n this._doPhase(signalArg)\n }\n\n /**\n * @internal\n * End interact move events and stop auto-scroll unless simulation is running\n */\n pointerUp(pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n eventTarget,\n type: type as any,\n curEventTarget,\n interaction: this as unknown as Interaction,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.removePointer(pointer, event)\n }\n\n /** @internal */\n documentBlur(event: Event) {\n this.end(event as any)\n this._scopeFire('interactions:blur', {\n event,\n type: 'blur',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n */\n end(event?: PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult: boolean\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction() {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting() {\n return this._interacting\n }\n\n stop() {\n this._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n /** @internal */\n getPointerIndex(pointer: any) {\n const pointerId = pointerUtils.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return this.pointerType === 'mouse' || this.pointerType === 'pen'\n ? this.pointers.length - 1\n : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n /** @internal */\n getPointerInfo(pointer: any) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n /** @internal */\n updatePointer(pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n const id = pointerUtils.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n } else {\n pointerInfo.pointer = pointer\n }\n\n pointerUtils.setCoords(\n this.coords.cur,\n this.pointers.map((p) => p.pointer),\n this._now(),\n )\n pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n if (down) {\n this.pointerIsDown = true\n\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n pointerUtils.pointerExtend(this.downPointer, pointer)\n\n if (!this.interacting()) {\n pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n this.downEvent = event\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this as unknown as Interaction,\n })\n\n return pointerIndex\n }\n\n /** @internal */\n removePointer(pointer: PointerType, event: PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) return\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this as unknown as Interaction,\n })\n\n this.pointers.splice(pointerIndex, 1)\n this.pointerIsDown = false\n }\n\n /** @internal */\n _updateLatestPointer(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy() {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n /** @internal */\n _createPreparedEvent

(\n event: PointerEventType,\n phase: P,\n preEnd?: boolean,\n type?: string,\n ) {\n return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type)\n }\n\n /** @internal */\n _fireEvent

(iEvent: InteractEvent) {\n this.interactable?.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n /** @internal */\n _doPhase

(\n signalArg: Omit, 'iEvent'> & { iEvent?: InteractEvent },\n ) {\n const { event, phase, preEnd, type } = signalArg\n const { rect } = this\n\n if (rect && phase === 'move') {\n // update the rect changes due to pointer move\n rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n if (phase === 'start') {\n this.prevEvent = iEvent\n }\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n /** @internal */\n _now() {\n return Date.now()\n }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n offsetBy?: typeof offsetBy\n offset: {\n total: Point\n pending: Point\n }\n }\n\n enum _ProxyMethods {\n offsetBy = '',\n }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal(interaction: Interaction) {\n if (!interaction.pointerIsDown) {\n return\n }\n\n addToCoords(interaction.coords.cur, interaction.offset.total)\n\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nfunction beforeAction({ interaction }: { interaction: Interaction }) {\n applyPending(interaction)\n}\n\nfunction beforeEnd({ interaction }: { interaction: Interaction }): boolean | void {\n const hadPending = applyPending(interaction)\n\n if (!hadPending) return\n\n interaction.move({ offset: true })\n interaction.end()\n\n return false\n}\n\nfunction end({ interaction }: { interaction: Interaction }) {\n interaction.offset.total.x = 0\n interaction.offset.total.y = 0\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nexport function applyPending(interaction: Interaction) {\n if (!hasPending(interaction)) {\n return false\n }\n\n const { pending } = interaction.offset\n\n addToCoords(interaction.coords.cur, pending)\n addToCoords(interaction.coords.delta, pending)\n rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n pending.x = 0\n pending.y = 0\n\n return true\n}\n\nfunction offsetBy(this: Interaction, { x, y }: Point) {\n this.offset.pending.x += x\n this.offset.pending.y += y\n\n this.offset.total.x += x\n this.offset.total.y += y\n}\n\nfunction addToCoords({ page, client }, { x, y }: Point) {\n page.x += x\n page.y += y\n client.x += x\n client.y += y\n}\n\nfunction hasPending(interaction: Interaction) {\n return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n id: 'offset',\n before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n install(scope) {\n scope.Interaction.prototype.offsetBy = offsetBy\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.offset = {\n total: { x: 0, y: 0 },\n pending: { x: 0, y: 0 },\n }\n },\n 'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n 'interactions:before-action-start': beforeAction,\n 'interactions:before-action-move': beforeAction,\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': end,\n },\n}\n\nexport default offset\n","import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/modifiers/base'\nimport '@interactjs/offset/plugin'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport { Modification } from '@interactjs/modifiers/Modification'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\n/* eslint-enable import/no-duplicates */\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n resume?: true\n inertiastart?: true\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: InertiaState\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-inertiastart': Omit, 'iEvent'>\n 'interactions:action-inertiastart': DoPhaseArg\n 'interactions:after-action-inertiastart': DoPhaseArg\n 'interactions:before-action-resume': Omit, 'iEvent'>\n 'interactions:action-resume': DoPhaseArg\n 'interactions:after-action-resume': DoPhaseArg\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(offset)\n scope.usePlugin(modifiers.default)\n scope.actions.phases.inertiastart = true\n scope.actions.phases.resume = true\n\n defaults.perAction.inertia = {\n enabled: false,\n resistance: 10, // the lambda in exponential decay\n minSpeed: 100, // target speed must be above this for inertia to start\n endSpeed: 10, // the speed at which inertia is slow enough to stop\n allowResume: true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nexport class InertiaState {\n active = false\n isModified = false\n smoothEnd = false\n allowResume = false\n\n modification!: Modification\n modifierCount = 0\n modifierArg!: ModifierArg\n\n startCoords!: Point\n t0 = 0\n v0 = 0\n\n te = 0\n targetOffset!: Point\n modifiedOffset!: Point\n currentOffset!: Point\n\n lambda_v0? = 0 // eslint-disable-line camelcase\n one_ve_v0? = 0 // eslint-disable-line camelcase\n timeout!: number\n readonly interaction: Interaction\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n }\n\n start(event: PointerEventType) {\n const { interaction } = this\n const options = getOptions(interaction)\n\n if (!options || !options.enabled) {\n return false\n }\n\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n const modification = this.modification || (this.modification = new Modification(interaction))\n\n modification.copyFrom(interaction.modification)\n\n this.t0 = interaction._now()\n this.allowResume = options.allowResume\n this.v0 = pointerSpeed\n this.currentOffset = { x: 0, y: 0 }\n this.startCoords = interaction.coords.cur.page\n\n this.modifierArg = modification.fillArg({\n pageCoords: this.startCoords,\n preEnd: true,\n phase: 'inertiastart',\n })\n\n const thrown =\n this.t0 - interaction.coords.cur.timeStamp < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed\n\n if (thrown) {\n this.startInertia()\n } else {\n modification.result = modification.setAll(this.modifierArg)\n\n if (!modification.result.changed) {\n return false\n }\n\n this.startSmoothEnd()\n }\n\n // force modification change\n interaction.modification.result.rect = null\n\n // bring inertiastart event to the target coords\n interaction.offsetBy(this.targetOffset)\n interaction._doPhase({\n interaction,\n event,\n phase: 'inertiastart',\n })\n interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n // force modification change\n interaction.modification.result.rect = null\n\n this.active = true\n interaction.simulation = this\n\n return true\n }\n\n startInertia() {\n const startVelocity = this.interaction.coords.velocity.client\n const options = getOptions(this.interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n this.targetOffset = {\n x: (startVelocity.x - inertiaDur) / lambda,\n y: (startVelocity.y - inertiaDur) / lambda,\n }\n\n this.te = inertiaDur\n this.lambda_v0 = lambda / this.v0\n this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n const { modification, modifierArg } = this\n\n modifierArg.pageCoords = {\n x: this.startCoords.x + this.targetOffset.x,\n y: this.startCoords.y + this.targetOffset.y,\n }\n\n modification.result = modification.setAll(modifierArg)\n\n if (modification.result.changed) {\n this.isModified = true\n this.modifiedOffset = {\n x: this.targetOffset.x + modification.result.delta.x,\n y: this.targetOffset.y + modification.result.delta.y,\n }\n }\n\n this.onNextFrame(() => this.inertiaTick())\n }\n\n startSmoothEnd() {\n this.smoothEnd = true\n this.isModified = true\n this.targetOffset = {\n x: this.modification.result.delta.x,\n y: this.modification.result.delta.y,\n }\n\n this.onNextFrame(() => this.smoothEndTick())\n }\n\n onNextFrame(tickFn: () => void) {\n this.timeout = raf.request(() => {\n if (this.active) {\n tickFn()\n }\n })\n }\n\n inertiaTick() {\n const { interaction } = this\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = (interaction._now() - this.t0) / 1000\n\n if (t < this.te) {\n const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n let newOffset: Point\n\n if (this.isModified) {\n newOffset = getQuadraticCurvePoint(\n 0,\n 0,\n this.targetOffset.x,\n this.targetOffset.y,\n this.modifiedOffset.x,\n this.modifiedOffset.y,\n progress,\n )\n } else {\n newOffset = {\n x: this.targetOffset.x * progress,\n y: this.targetOffset.y * progress,\n }\n }\n\n const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move()\n\n this.onNextFrame(() => this.inertiaTick())\n } else {\n interaction.offsetBy({\n x: this.modifiedOffset.x - this.currentOffset.x,\n y: this.modifiedOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n smoothEndTick() {\n const { interaction } = this\n const t = interaction._now() - this.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n const newOffset = {\n x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n }\n const delta = {\n x: newOffset.x - this.currentOffset.x,\n y: newOffset.y - this.currentOffset.y,\n }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move({ skipModifiers: this.modifierCount })\n\n this.onNextFrame(() => this.smoothEndTick())\n } else {\n interaction.offsetBy({\n x: this.targetOffset.x - this.currentOffset.x,\n y: this.targetOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n const { interaction } = this\n\n // undo inertia changes to interaction coords\n interaction.offsetBy({\n x: -this.currentOffset.x,\n y: -this.currentOffset.y,\n })\n\n // update pointer at pointer down position\n interaction.updatePointer(pointer, event, eventTarget, true)\n\n // fire resume signals and event\n interaction._doPhase({\n interaction,\n event,\n phase: 'resume',\n })\n copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n this.stop()\n }\n\n end() {\n this.interaction.move()\n this.interaction.end()\n this.stop()\n }\n\n stop() {\n this.active = this.smoothEnd = false\n this.interaction.simulation = null\n raf.cancel(this.timeout)\n }\n}\n\nfunction start({ interaction, event }: DoPhaseArg) {\n if (!interaction._interacting || interaction.simulation) {\n return null\n }\n\n const started = interaction.inertia.start(event)\n\n // prevent action end if inertia or smoothEnd\n return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume(arg: SignalArgs['interactions:down']) {\n const { interaction, eventTarget } = arg\n const state = interaction.inertia\n\n if (!state.active) return\n\n let element = eventTarget as Node\n\n // climb up the DOM tree from the event target\n while (is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n state.resume(arg)\n break\n }\n\n element = dom.parentNode(element)\n }\n}\n\nfunction stop({ interaction }: { interaction: Interaction }) {\n const state = interaction.inertia\n\n if (state.active) {\n state.stop()\n }\n}\n\nfunction getOptions({ interactable, prepared }: Interaction) {\n return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n id: 'inertia',\n before: ['modifiers', 'actions'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = new InertiaState(interaction)\n },\n\n 'interactions:before-action-end': start,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n\n 'interactions:before-action-resume': (arg) => {\n const { modification } = arg.interaction\n\n modification.stop(arg)\n modification.start(arg, arg.interaction.coords.cur.page)\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n 'interactions:action-resume': modifiers.addEventModifiers,\n 'interactions:action-inertiastart': modifiers.addEventModifiers,\n 'interactions:after-action-inertiastart': (arg) =>\n arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue(t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint(\n startX: number,\n startY: number,\n cpX: number,\n cpY: number,\n endX: number,\n endY: number,\n position: number,\n) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad(t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport default inertia\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nimport type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\n\nfunction fireUntilImmediateStopped(event: any, listeners: Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) {\n break\n }\n\n listener(event)\n }\n}\n\nexport class Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor(options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire(event: T) {\n let listeners: Listener[]\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) {\n continue\n }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect(_element: Element): Rect {\n return null\n }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\n\nimport type { NativeEventTarget } from './NativeTypes'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n events: ReturnType\n }\n}\n\ninterface EventOptions {\n capture: boolean\n passive: boolean\n}\n\ntype PartialEventTarget = Partial\n\ntype ListenerEntry = { func: (event: Event | FakeEvent) => any; options: EventOptions }\n\nfunction install(scope: Scope) {\n const targets: Array<{\n eventTarget: PartialEventTarget\n events: { [type: string]: ListenerEntry[] }\n }> = []\n\n const delegatedEvents: {\n [type: string]: Array<{\n selector: string\n context: Node\n listeners: ListenerEntry[]\n }>\n } = {}\n const documents: Document[] = []\n\n const eventsMethods = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n targets,\n\n supportsOptions: false,\n supportsPassive: false,\n }\n\n // check if browser supports passive events and options arg\n scope.document?.createElement('div').addEventListener('test', null, {\n get capture() {\n return (eventsMethods.supportsOptions = true)\n },\n get passive() {\n return (eventsMethods.supportsPassive = true)\n },\n })\n\n scope.events = eventsMethods\n\n function add(\n eventTarget: PartialEventTarget,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener) return\n\n const options = getOptions(optionalArg)\n let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n if (!target) {\n target = {\n eventTarget,\n events: {},\n }\n\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n }\n\n if (!arr.find(target.events[type], (l) => l.func === listener && optionsMatch(l.options, options))) {\n eventTarget.addEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n target.events[type].push({ func: listener, options })\n }\n }\n\n function remove(\n eventTarget: PartialEventTarget,\n type: string,\n listener?: 'all' | ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return\n\n const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n const target = targets[targetIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(eventTarget, type, 'all')\n }\n }\n return\n }\n\n let typeIsEmpty = false\n const typeListeners = target.events[type]\n\n if (typeListeners) {\n if (listener === 'all') {\n for (let i = typeListeners.length - 1; i >= 0; i--) {\n const entry = typeListeners[i]\n remove(eventTarget, type, entry.func, entry.options)\n }\n return\n } else {\n const options = getOptions(optionalArg)\n\n for (let i = 0; i < typeListeners.length; i++) {\n const entry = typeListeners[i]\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n eventTarget.removeEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n typeListeners.splice(i, 1)\n\n if (typeListeners.length === 0) {\n delete target.events[type]\n typeIsEmpty = true\n }\n\n break\n }\n }\n }\n }\n\n if (typeIsEmpty && !Object.keys(target.events).length) {\n targets.splice(targetIndex, 1)\n }\n }\n\n function addDelegate(\n selector: string,\n context: Node,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = []\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegates = delegatedEvents[type]\n let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n if (!delegate) {\n delegate = { selector, context, listeners: [] }\n delegates.push(delegate)\n }\n\n delegate.listeners.push({ func: listener, options })\n }\n\n function removeDelegate(\n selector: string,\n context: Document | Element,\n type: string,\n listener?: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n const delegates = delegatedEvents[type]\n let matchFound = false\n let index: number\n\n if (!delegates) return\n\n // count from last index of delegated to 0\n for (index = delegates.length - 1; index >= 0; index--) {\n const cur = delegates[index]\n // look for matching selector and context Node\n if (cur.selector === selector && cur.context === context) {\n const { listeners } = cur\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const entry = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this target have been removed\n // remove the target from the delegates array\n if (!listeners.length) {\n delegates.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) {\n break\n }\n }\n }\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener(event: Event | FakeEvent, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event as Event)\n const delegates = delegatedEvents[event.type]\n const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n let element: Node = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegates.length; i++) {\n const cur = delegates[i]\n const { selector, context } = cur\n\n if (\n domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)\n ) {\n const { listeners } = cur\n\n fakeEvent.currentTarget = element\n\n for (const entry of listeners) {\n if (optionsMatch(entry.options, options)) {\n entry.func(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n }\n\n function delegateUseCapture(this: Element, event: Event | FakeEvent) {\n return delegateListener.call(this, event, true)\n }\n\n // for type inferrence\n return eventsMethods\n}\n\nclass FakeEvent implements Partial {\n currentTarget: Node\n originalEvent: Event\n type: string\n\n constructor(originalEvent: Event) {\n this.originalEvent = originalEvent\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault() {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation() {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation() {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nfunction getOptions(param: { [index: string]: any } | boolean): { capture: boolean; passive: boolean } {\n if (!is.object(param)) {\n return { capture: !!param, passive: false }\n }\n\n return {\n capture: !!param.capture,\n passive: !!param.passive,\n }\n}\n\nfunction optionsMatch(a: Partial | boolean, b: Partial) {\n if (a === b) return true\n\n if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false\n\n return !!a.capture === !!b.capture && !!a.passive === !!b.passive\n}\n\nexport default {\n id: 'events',\n install,\n}\n","import * as dom from '@interactjs/utils/domUtils'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\n\nexport interface SearchDetails {\n pointer: PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: EventTarget\n curEventTarget: EventTarget\n scope: Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n search(details: SearchDetails) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n\n return null\n },\n\n // try to resume simulation with a new pointer\n simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget as Node\n\n if (\n interaction.simulation &&\n interaction.simulation.allowResume &&\n interaction.pointerType === pointerType\n ) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n continue\n }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && pointerType === interaction.pointerType) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId(interaction: Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './interactablePreventDefault'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport InteractionBase from './Interaction'\n/* eslint-enable import/no-duplicates */\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: Array>\n listeners: { [type: string]: Listener }\n docEvents: Array<{ type: string; listener: Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown',\n 'pointerMove',\n 'pointerUp',\n 'updatePointer',\n 'removePointer',\n 'windowBlur',\n]\n\nfunction install(scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n } else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class extends InteractionBase {\n get pointerMoveTolerance() {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance(value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now() {\n return scope.now()\n }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new(options: { pointerType?: string; scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls() {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n\n scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions(method: string, scope: Scope) {\n return function (event: Event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches: any[] = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n // @ts-expect-error\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n } else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer =\n invalidPointer ||\n scope.now() - scope.prevTouchTime < 500 ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event as PointerEvent,\n pointerId: pointerUtils.getPointerId(event as PointerEvent),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction(searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal(\n { doc, scope, options }: SignalArgs[T],\n eventMethodName: 'add' | 'remove',\n) {\n const {\n interactions: { docEvents },\n events,\n } = scope\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nconst interactions: Plugin = {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n 'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n 'interactable:unset': ({ interactable }, scope) => {\n // Stop and destroy related interactions when an Interactable is unset\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable !== interactable) {\n continue\n }\n\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n },\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n\nexport default interactions\n","/* eslint-disable no-dupe-class-members */\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n ActionMap,\n ActionMethod,\n ActionName,\n Actions,\n Context,\n Element,\n EventTypes,\n Listeners,\n ListenersArg,\n OrBoolean,\n Target,\n} from '@interactjs/core/types'\n\nimport { Eventable } from './Eventable'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\nconst enum OnOffMethod {\n On,\n Off,\n}\n\n/**\n * ```ts\n * const interactable = interact('.cards')\n * .draggable({\n * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) }\n * })\n * .resizable({\n * listeners: { move: event => console.log(event.rect) },\n * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })]\n * })\n * ```\n */\nexport class Interactable implements Partial {\n /** @internal */ get _defaults(): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly target: Target\n /** @internal */ readonly options!: Required\n /** @internal */ readonly _actions: Actions\n /** @internal */ readonly events = new Eventable()\n /** @internal */ readonly _context: Context\n /** @internal */ readonly _win: Window\n /** @internal */ readonly _doc: Document\n /** @internal */ readonly _scopeEvents: Scope['events']\n\n constructor(\n target: Target,\n options: any,\n defaultContext: Document | Element,\n scopeEvents: Scope['events'],\n ) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n this._scopeEvents = scopeEvents\n\n this.set(options)\n }\n\n setOnEvents(actionName: ActionName, phases: NonNullable) {\n if (is.func(phases.onstart)) {\n this.on(`${actionName}start`, phases.onstart)\n }\n if (is.func(phases.onmove)) {\n this.on(`${actionName}move`, phases.onmove)\n }\n if (is.func(phases.onend)) {\n this.on(`${actionName}end`, phases.onend)\n }\n if (is.func(phases.oninertiastart)) {\n this.on(`${actionName}inertiastart`, phases.oninertiastart)\n }\n\n return this\n }\n\n updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined) {\n const actionFilter = (this._actions.map[actionName] as { filterEventType?: (type: string) => boolean })\n ?.filterEventType\n const filter = (type: string) =>\n (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, this._actions)\n\n if (is.array(prev) || is.object(prev)) {\n this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this._onOff(OnOffMethod.On, actionName, cur, undefined, filter)\n }\n }\n\n setPerAction(actionName: ActionName, options: OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName_ in options) {\n const optionName = optionName_ as keyof PerActionDefaults\n const actionOptions = this.options[actionName]\n const optionValue: any = options[optionName]\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n }\n\n // if the option value is an array\n if (is.array(optionValue)) {\n ;(actionOptions[optionName] as any) = arr.from(optionValue)\n }\n // if the option value is an object\n else if (is.plainObject(optionValue)) {\n // copy the object\n ;(actionOptions[optionName] as any) = extend(\n actionOptions[optionName] || ({} as any),\n clone(optionValue),\n )\n\n // set anabled field to true if it exists in the defaults\n if (\n is.object(defaults.perAction[optionName]) &&\n 'enabled' in (defaults.perAction[optionName] as any)\n ) {\n ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n ;(actionOptions[optionName] as any).enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n ;(actionOptions[optionName] as any) = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {Rect} The object's bounding rectangle.\n */\n getRect(element: Element) {\n element = element || (is.element(this.target) ? this.target : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker(): (element: Element) => any | null\n rectChecker(checker: (element: Element) => any): this\n rectChecker(checker?: (element: Element) => any) {\n if (is.func(checker)) {\n this.getRect = (element) => {\n const rect = extend({}, checker.apply(this, element))\n\n if (!(('width' in rect) as unknown)) {\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n return rect\n }\n\n return this\n }\n\n if (checker === null) {\n delete (this as Partial).getRect\n\n return this\n }\n\n return this.getRect\n }\n\n /** @internal */\n _backCompatOption(optionName: keyof Options, newValue: any) {\n if (trySelector(newValue) || is.object(newValue)) {\n ;(this.options[optionName] as any) = newValue\n\n for (const action in this._actions.map) {\n ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin(newValue: any) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource(): DeltaSource\n deltaSource(newValue: DeltaSource): this\n deltaSource(newValue?: DeltaSource) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /** @internal */\n getAllElements(): Element[] {\n const { target } = this\n\n if (is.string(target)) {\n return Array.from(this._context.querySelectorAll(target))\n }\n\n if (is.func(target) && (target as any).getAllElements) {\n return (target as any).getAllElements()\n }\n\n return is.element(target) ? [target] : []\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context() {\n return this._context\n }\n\n inContext(element: Document | Node) {\n return this._context === element.ownerDocument || nodeContains(this._context, element)\n }\n\n /** @internal */\n testIgnoreAllow(\n this: Interactable,\n options: { ignoreFrom?: IgnoreValue; allowFrom?: IgnoreValue },\n targetNode: Node,\n eventTarget: Node,\n ) {\n return (\n !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget)\n )\n }\n\n /** @internal */\n testAllow(this: Interactable, allowFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!allowFrom) {\n return true\n }\n\n if (!is.element(element)) {\n return false\n }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n } else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n /** @internal */\n testIgnore(this: Interactable, ignoreFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!ignoreFrom || !is.element(element)) {\n return false\n }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n } else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire(iEvent: E) {\n this.events.fire(iEvent)\n\n return this\n }\n\n /** @internal */\n _onOff(\n method: OnOffMethod,\n typeArg: EventTypes,\n listenerArg?: ListenersArg | null,\n options?: any,\n filter?: (type: string) => boolean,\n ) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const listeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (let type in listeners) {\n if (type === 'wheel') {\n type = browser.wheelEvent\n }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (isNonNativeEvent(type, this._actions)) {\n this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](\n this.target,\n this._context,\n type,\n listener,\n options,\n )\n }\n // remove listener from this Interactable's element\n else {\n this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](\n this.target,\n type,\n listener,\n options,\n )\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on(types: EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.On, types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.Off, types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set(options: OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n ;(this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName_ in this._actions.methodDict) {\n const actionName = actionName_ as ActionName\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n ;(this[methodName] as ActionMethod)(options[actionName])\n }\n\n for (const setting in options) {\n if (setting === 'getRect') {\n this.rectChecker(options.getRect)\n continue\n }\n\n if (is.func((this as any)[setting])) {\n ;(this as any)[setting](options[setting as keyof typeof options])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n */\n unset() {\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in this._scopeEvents.delegatedEvents) {\n const delegated = this._scopeEvents.delegatedEvents[type]\n\n for (let i = delegated.length - 1; i >= 0; i--) {\n const { selector, context, listeners } = delegated[i]\n\n if (selector === this.target && context === this._context) {\n delegated.splice(i, 1)\n }\n\n for (let l = listeners.length - 1; l >= 0; l--) {\n this._scopeEvents.removeDelegate(\n this.target,\n this._context,\n type,\n listeners[l][0],\n listeners[l][1],\n )\n }\n }\n }\n } else {\n this._scopeEvents.remove(this.target, 'all')\n }\n }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target } from '@interactjs/core/types'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interactable\n target: Target\n options: OptionsArg\n win: Window\n }\n }\n}\n\nexport class InteractableSet {\n // all set interactables\n list: Interactable[] = []\n\n selectorMap: {\n [selector: string]: Interactable[]\n } = {}\n\n scope: Scope\n\n constructor(scope: Scope) {\n this.scope = scope\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target } = interactable\n const interactablesOnTarget: Interactable[] = is.string(target)\n ? this.selectorMap[target]\n : (target as any)[this.scope.id]\n\n const targetIndex = arr.findIndex(interactablesOnTarget, (i) => i === interactable)\n interactablesOnTarget.splice(targetIndex, 1)\n },\n })\n }\n\n new(target: Target, options?: any): Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) {\n this.selectorMap[target] = []\n }\n this.selectorMap[target].push(interactable)\n } else {\n if (!(interactable.target as any)[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n ;(target as any)[this.scope.id].push(interactable)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n getExisting(target: Target, options?: Options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const interactablesOnTarget: Interactable[] = isSelector\n ? this.selectorMap[target as string]\n : (target as any)[this.scope.id]\n\n if (!interactablesOnTarget) return undefined\n\n return arr.find(\n interactablesOnTarget,\n (interactable) =>\n interactable._context === context && (isSelector || interactable.inContext(target as any)),\n )\n }\n\n forEachMatch(node: Node, callback: (interactable: Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret: T\n\n if (\n (is.string(interactable.target)\n ? // target is a selector and the element matches\n is.element(node) && domUtils.matchesSelector(node, interactable.target)\n : // target is the element\n node === interactable.target) &&\n // the element is in context\n interactable.inContext(node)\n ) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { Options } from './options'\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport interface InteractStatic {\n (target: Target, options?: Options): Interactable\n getPointerAverage: typeof pointerUtils.pointerAverage\n getTouchBBox: typeof pointerUtils.touchBBox\n getTouchDistance: typeof pointerUtils.touchDistance\n getTouchAngle: typeof pointerUtils.touchAngle\n getElementRect: typeof domUtils.getElementRect\n getElementClientRect: typeof domUtils.getElementClientRect\n matchesSelector: typeof domUtils.matchesSelector\n closest: typeof domUtils.closest\n /** @internal */ globalEvents: any\n version: string\n /** @internal */ scope: Scope\n /**\n * Use a plugin\n */\n use(\n plugin: Plugin,\n options?: {\n [key: string]: any\n },\n ): any\n /**\n * Check if an element or selector has been set with the `interact(target)`\n * function\n *\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\n isSet(\n /* The Element or string being searched for */\n target: Target,\n options?: any,\n ): boolean\n on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n off(type: EventTypes, listener: any, options?: object): any\n debug(): any\n /**\n * Whether or not the browser supports touch input\n */\n supportsTouch(): boolean\n /**\n * Whether or not the browser supports PointerEvents\n */\n supportsPointerEvent(): boolean\n /**\n * Cancels all interactions (end events are not fired)\n */\n stop(): InteractStatic\n /**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n */\n pointerMoveTolerance(\n /** The movement from the start position must be greater than this value */\n newValue?: number,\n ): InteractStatic | number\n addDocument(doc: Document, options?: object): void\n removeDocument(doc: Document): void\n}\n\nexport function createInteractStatic(scope: Scope): InteractStatic {\n const interact = ((target: Target, options: Options) => {\n let interactable = scope.interactables.getExisting(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = interact.globalEvents\n }\n\n return interactable\n }) as InteractStatic\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerUtils.pointerAverage\n interact.getTouchBBox = pointerUtils.touchBBox\n interact.getTouchDistance = pointerUtils.touchDistance\n interact.getTouchAngle = pointerUtils.touchAngle\n\n interact.getElementRect = domUtils.getElementRect\n interact.getElementClientRect = domUtils.getElementClientRect\n interact.matchesSelector = domUtils.matchesSelector\n interact.closest = domUtils.closest\n\n interact.globalEvents = {} as any\n\n // eslint-disable-next-line no-undef\n interact.version = process.env.npm_package_version\n interact.scope = scope\n interact.use = function (plugin, options) {\n this.scope.usePlugin(plugin, options)\n\n return this\n }\n\n interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n return !!this.scope.interactables.get(target, options && options.context)\n }\n\n interact.on = warnOnce(function on(type: string | EventTypes, listener: ListenersArg, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type as any[]) {\n this.on(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.on(prop, (type as any)[prop], listener)\n }\n\n return this\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (isNonNativeEvent(type, this.scope.actions)) {\n // if this type of event was never bound\n if (!this.globalEvents[type]) {\n this.globalEvents[type] = [listener]\n } else {\n this.globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n }\n\n return this\n }, 'The interact.on() method is being deprecated')\n\n interact.off = warnOnce(function off(type: EventTypes, listener: any, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type) {\n this.off(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.off(prop, type[prop], listener)\n }\n\n return this\n }\n\n if (isNonNativeEvent(type, this.scope.actions)) {\n let index: number\n\n if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n this.globalEvents[type].splice(index, 1)\n }\n } else {\n this.scope.events.remove(this.scope.document, type, listener, options)\n }\n\n return this\n }, 'The interact.off() method is being deprecated')\n\n interact.debug = function () {\n return this.scope\n }\n\n interact.supportsTouch = function () {\n return browser.supportsTouch\n }\n\n interact.supportsPointerEvent = function () {\n return browser.supportsPointerEvent\n }\n\n interact.stop = function () {\n for (const interaction of this.scope.interactions.list) {\n interaction.stop()\n }\n\n return this\n }\n\n interact.pointerMoveTolerance = function (newValue?: number) {\n if (is.number(newValue)) {\n this.scope.interactions.pointerMoveTolerance = newValue\n\n return this\n }\n\n return this.scope.interactions.pointerMoveTolerance\n }\n\n interact.addDocument = function (doc: Document, options?: object) {\n this.scope.addDocument(doc, options)\n }\n\n interact.removeDocument = function (doc: Document) {\n this.scope.removeDocument(doc)\n }\n\n return interact\n}\n","import browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport type Interaction from '@interactjs/core/Interaction'\n\nimport { Eventable } from './Eventable'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './events'\nimport './interactions'\nimport events from './events'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport { InteractEvent } from './InteractEvent'\nimport interactions from './interactions'\n/* eslint-enable import/no-duplicates */\nimport { createInteractStatic } from './InteractStatic'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\nimport type { Actions } from './types'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase; options: OptionsArg }\n 'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options: Record\n}\n\n/** @internal */\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string[]\n install?(scope: Scope, options?: any): void\n}\n\n/** @internal */\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n isInitialized = false\n listenerMaps: Array<{\n map: ListenerMap\n id?: string\n }> = []\n\n browser = browser\n defaults = clone(defaults) as typeof defaults\n Eventable = Eventable\n actions: Actions = {\n map: {},\n phases: {\n start: true,\n move: true,\n end: true,\n },\n methodDict: {} as any,\n phaselessTypes: {},\n }\n\n interactStatic = createInteractStatic(this)\n InteractEvent = InteractEvent\n Interactable: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document; options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\n\n constructor() {\n const scope = this\n\n this.Interactable = class extends InteractableBase {\n get _defaults() {\n return scope.defaults\n }\n\n set(this: T, options: OptionsArg) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset(this: InteractableBase) {\n super.unset()\n\n const index = scope.interactables.list.indexOf(this)\n if (index < 0) return\n\n scope.interactables.list.splice(index, 1)\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners(map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire(name: T, arg: SignalArgs[T]): void | false {\n for (const {\n map: { [name]: listener },\n } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init(window: Window | typeof globalThis) {\n return this.isInitialized ? this : initScope(this, window)\n }\n\n pluginIsInstalled(plugin: Plugin) {\n const { id } = plugin\n return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin(plugin: Plugin, options?: { [key: string]: any }) {\n if (!this.isInitialized) {\n return this\n }\n\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) {\n this._plugins.map[plugin.id] = plugin\n }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n const len = this.listenerMaps.length\n const before = plugin.before.reduce((acc, id) => {\n acc[id] = true\n acc[pluginIdRoot(id)] = true\n return acc\n }, {})\n\n for (; index < len; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) {\n break\n }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n } else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument(doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) {\n return false\n }\n\n const window = win.getWindow(doc)\n\n options = options ? extend({}, options) : {}\n\n this.documents.push({ doc, options })\n this.events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n this.events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument(doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n this.events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n this.events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex(doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions(doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now() {\n return (((this.window as any).Date as typeof Date) || Date).now()\n }\n}\n\n/** @internal */\nexport function initScope(scope: Scope, window: Window | typeof globalThis) {\n scope.isInitialized = true\n\n if (is.window(window)) {\n win.init(window)\n }\n\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n\n // @ts-expect-error\n scope.window = window\n scope.document = window.document\n\n scope.usePlugin(interactions)\n scope.usePlugin(events)\n\n return scope\n}\n\nfunction pluginIdRoot(id: string) {\n return id && id.replace(/\\/.*$/, '')\n}\n","import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n","export default () => {}\n","export default () => {}\n","import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport interface GridOptionsBase {\n range?: number\n limits?: Rect\n offset?: Point\n}\nexport interface GridOptionsXY extends GridOptionsBase {\n x: number\n y: number\n}\nexport interface GridOptionsTopLeft extends GridOptionsBase {\n top?: number\n left?: number\n}\nexport interface GridOptionsBottomRight extends GridOptionsBase {\n bottom?: number\n right?: number\n}\nexport interface GridOptionsWidthHeight extends GridOptionsBase {\n width?: number\n height?: number\n}\n\nexport type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight\n\nexport default (grid: GridOptions) => {\n const coordFields = (\n [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ] as const\n ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc: SnapFunction & {\n grid: typeof grid\n coordFields: typeof coordFields\n } = (x, y) => {\n const {\n range,\n limits = {\n left: -Infinity,\n right: Infinity,\n top: -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result: SnapTarget & {\n grid: typeof grid\n } = { range, grid, x: null as number, y: null as number }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n }\n\n return result\n }\n\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n","/* eslint-disable import/no-named-as-default, import/no-unresolved */\nexport { default as edgeTarget } from './edgeTarget'\nexport { default as elements } from './elements'\nexport { default as grid } from './grid'\n","import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n snappers: typeof allSnappers\n createSnapGrid: typeof allSnappers.grid\n }\n}\n\nconst snappersPlugin: Plugin = {\n id: 'snappers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n interact.snappers = extend(interact.snappers || {}, allSnappers)\n interact.createSnapGrid = interact.snappers.grid\n },\n}\n\nexport default snappersPlugin\n","/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This modifier 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 type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport { makeModifier } from './base'\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\n AspectRatioOptions,\n {\n startCoords: Point\n startRect: Rect\n linkedEdges: EdgeOptions\n ratio: number\n equalDelta: boolean\n xIsPrimaryAxis: boolean\n edgeSign: {\n x: number\n y: number\n }\n subModification: Modification\n }\n>\n\nconst aspectRatio: ModifierModule = {\n start(arg) {\n const { state, rect, edges, pageCoords: coords } = arg\n let { ratio, enabled } = 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: edges.top || (edges.left && !edges.bottom),\n left: edges.left || (edges.top && !edges.right),\n bottom: edges.bottom || (edges.right && !edges.top),\n right: edges.right || (edges.bottom && !edges.left),\n })\n\n state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n if (state.equalDelta) {\n const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n state.edgeSign = {\n x: sign,\n y: sign,\n }\n } else {\n state.edgeSign = {\n x: linkedEdges.left ? -1 : 1,\n y: linkedEdges.top ? -1 : 1,\n }\n }\n\n if (enabled !== false) {\n extend(edges, linkedEdges)\n }\n\n if (!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 { linkedEdges } = state\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n extend(arg.edges, linkedEdges)\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) {\n return null\n }\n\n const correctedRect = extend({}, rect)\n\n addEdges(linkedEdges, correctedRect, {\n x: coords.x - initialCoords.x,\n y: coords.y - initialCoords.y,\n })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: 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.y\n } else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n }\n}\n\nfunction setRatio(\n { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n xIsPrimaryAxis: boolean,\n coords: Point,\n rect: Rect,\n) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n } else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n","import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction\n\nnoop._defaults = {}\n\nexport default noop\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: RectResolvable<[number, number, Interaction]>\n // what part of self is allowed to drag over\n elementRect: Rect\n offset: Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\n RestrictOptions,\n {\n offset: Rect\n }\n>\n\nfunction start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Rect = extend(\n {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n options.offset || {},\n )\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = restriction.right - restriction.left - rect.width\n const heightDiff = restriction.bottom - restriction.top - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - rect.width * elementRect.left\n offset.top += startOffset.top - rect.height * elementRect.top\n\n offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n }\n\n state.offset = offset\n}\n\nfunction set({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) return\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect(\n value: RectResolvable<[number, number, Interaction]>,\n interaction: Interaction,\n coords?: Point,\n) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n coords.x,\n coords.y,\n interaction,\n ])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n","// This modifier adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\n RestrictEdgesOptions,\n {\n inner: Rect\n outer: Rect\n offset: RestrictEdgesOptions['offset']\n }\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start({ interaction, startOffset, state }: ModifierArg) {\n const { options } = state\n let offset: Point\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set({ coords, edges, interaction, state }: ModifierArg) {\n const { offset, options } = state\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n } else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n } else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect(rect: Rect, defaults: Rect) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n","import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n {\n get elementRect() {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect(_) {},\n },\n restrict.defaults,\n)\n\nconst restrictRect = {\n start: restrict.start,\n set: restrict.set,\n defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n","import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Size | Point | RestrictOptions['restriction']\n max?: Size | Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start(arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\n ModifierState<\n RestrictSizeOptions & { inner: Rect; outer: Rect },\n {\n min: Rect\n max: Rect\n }\n >\n\nfunction set(arg: ModifierArg) {\n const { interaction, state, rect, edges } = arg\n const { options } = state\n\n if (!edges) {\n return\n }\n\n const minSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n const maxSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n } else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n } else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n","import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'\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 } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nexport interface Offset {\n x: number\n y: number\n index: number\n relativePoint?: Point | null\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 SnapOptions,\n {\n offsets?: Offset[]\n closest?: any\n targetFields?: string[][]\n }\n>\n\nfunction start(arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin ? getOrigin(arg) : { 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 } 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 =\n 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 : [\n {\n index: 0,\n relativePoint: null,\n x: snapOffset.x,\n y: snapOffset.y,\n },\n ]\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: SnapPosition[] = []\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 } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\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 (\n !closest.target ||\n (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 ) {\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(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\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","// This modifier allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { state, edges } = arg\n const { options } = state\n\n if (!edges) {\n return null\n }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [\n {\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n },\n ],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set(arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of options.targets || []) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n const returnValue = snap.set(arg)\n\n state.options = options\n\n return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This modifier allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { edges } = arg\n\n if (!edges) {\n return null\n }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule> = {\n start,\n set: snapSize.set,\n defaults: extend(clone(snapSize.defaults), {\n targets: undefined,\n range: undefined,\n offset: { x: 0, y: 0 },\n } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n","/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n aspectRatio,\n restrictEdges,\n restrict,\n restrictRect,\n restrictSize,\n snapEdges,\n snap,\n snapSize,\n\n spring,\n avoid,\n transform,\n rubberband,\n}\n","import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './all'\nimport './base'\n\nimport all from './all'\nimport base from './base'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n modifiers: typeof all\n }\n}\n\nconst modifiers: Plugin = {\n id: 'modifiers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n scope.usePlugin(base)\n scope.usePlugin(snappers)\n\n interact.modifiers = all\n\n // for backwrads compatibility\n for (const type in all) {\n const { _defaults, _methods } = all[type as keyof typeof all]\n\n ;(_defaults as any)._methods = _methods\n ;(scope.defaults.perAction as any)[type] = _defaults\n }\n },\n}\n\nexport default modifiers\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport class PointerEvent extends BaseEvent {\n declare type: T\n declare originalEvent: PointerEventType\n declare pointerId: number\n declare pointerType: string\n declare double: boolean\n declare pageX: number\n declare pageY: number\n declare clientX: number\n declare clientY: number\n declare dt: number\n declare eventable: any;\n [key: string]: any\n\n constructor(\n type: T,\n pointer: PointerType | PointerEvent,\n event: PointerEventType,\n eventTarget: Node,\n interaction: Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double =\n !!interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500\n } else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n this.double = true\n }\n }\n\n _subtractOrigin({ x: originX, y: originY }: Point) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin({ x: originX, y: originY }: Point) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault() {\n this.originalEvent.preventDefault()\n }\n}\n","import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n pointerEvents: Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom: null,\n allowFrom: null,\n origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: {\n down: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire(\n arg: {\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n ;(pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (\n pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n i + 1 < targets.length &&\n targets[i + 1].node !== pointerEvent.currentTarget)\n ) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n },\n scope,\n )\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n }: {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n type: T\n },\n scope: Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (\n type === 'tap' &&\n (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))\n ) {\n return []\n }\n\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(\n (target) =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold?.duration,\n )\n }\n\n return signalArg.targets\n}\n\nfunction addInteractionProps({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold({ interaction, pointerIndex }) {\n const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold(arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire(\n {\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n },\n scope,\n )\n }\n}\n\nfunction downAndStartHold(\n { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n const timer = interaction.pointers[pointerIndex].hold!\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) return\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire(\n {\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n },\n scope,\n )\n }, minDuration)\n}\n\nfunction tapAfterUp(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n scope: Scope,\n) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install(scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable import/no-duplicates */\nimport { type PointerEvent } from './PointerEvent'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n interface PointerEvent {\n count?: number\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install(scope: Scope) {\n scope.usePlugin(basePlugin)\n\n const { pointerEvents } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew({ pointerEvent }: { pointerEvent: PointerEvent }) {\n if (pointerEvent.type !== 'hold') return\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired(\n { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n scope: Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) return\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) return\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire(\n {\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n },\n scope,\n )\n }, interval)\n}\n\nfunction endHoldRepeat({ interaction }: { interaction: Interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nconst holdRepeat: Plugin = {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n } as ListenerMap,\n ),\n}\n\nexport default holdRepeat\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\n\nimport type { PointerEventOptions } from '@interactjs/pointer-events/base'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents(options: Partial): this\n /** @internal */\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.pointerEvents = function (\n this: Interactable,\n options: Partial,\n ) {\n extend(this.events.options, options)\n\n return this\n }\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nconst plugin: Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)\n ) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n","import type { Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './holdRepeat'\nimport './interactableTargets'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n/* eslint-enable import/no-duplicates */\n\nconst plugin: Plugin = {\n id: 'pointer-events',\n install(scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n },\n}\n\nexport default plugin\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-reflow': Omit\n 'interactions:action-reflow': DoAnyPhaseArg\n 'interactions:after-action-reflow': DoAnyPhaseArg\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n reflow(action: ActionProps): ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: (...args: unknown[]) => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n reflow?: true\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n scope.actions.phases.reflow = true\n\n Interactable.prototype.reflow = function (action: ActionProps) {\n return doReflow(this, action, scope)\n }\n}\n\nfunction doReflow(\n interactable: Interactable,\n action: ActionProps,\n scope: Scope,\n): Promise {\n const elements = interactable.getAllElements()\n\n // tslint:disable-next-line variable-name\n const Promise = (scope.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n if (!rect) {\n break\n }\n\n const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n return (\n interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n )\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise =\n runningInteraction._reflowPromise ||\n new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n } else {\n const xywh = tlbrToXywh(rect)\n const coords = {\n page: { x: xywh.x, y: xywh.y },\n client: { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow(\n scope: Scope,\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n event: any,\n) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n } as const\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n pointerUtils.setZeroCoords(interaction.coords.delta)\n\n copyAction(interaction.prepared, action)\n interaction._doPhase(signalArg)\n\n const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n const reflowPromise = Promise\n ? new Promise((resolve) => {\n interaction._reflowResolve = resolve\n })\n : undefined\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n } else {\n interaction.stop()\n interaction._reflowResolve()\n }\n\n interaction.removePointer(event, event)\n\n return reflowPromise\n}\n\nconst reflow: Plugin = {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === 'reflow') {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n}\n\nexport default reflow\n","/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/actions/plugin'\nimport '@interactjs/auto-scroll/plugin'\nimport '@interactjs/auto-start/plugin'\nimport '@interactjs/core/interactablePreventDefault'\nimport '@interactjs/dev-tools/plugin'\nimport '@interactjs/inertia/plugin'\nimport '@interactjs/interact'\nimport '@interactjs/modifiers/plugin'\nimport '@interactjs/offset/plugin'\nimport '@interactjs/pointer-events/plugin'\nimport '@interactjs/reflow/plugin'\n\nimport actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n/* eslint-enable import/no-duplicates */\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n"],"names":["thing","Window","realWindow","undefined","win","init","window","el","document","createTextNode","ownerDocument","wrap","getWindow","node","isWindow","rootNode","defaultView","docFrag","object","nodeType","_typeof","func","number","bool","string","element","_window","test","Element","nodeName","plainObject","constructor","toString","array","length","splice","install","scope","actions","Interactable","defaults","prototype","draggable","drag","map","methodDict","beforeMove","_ref","interaction","prepared","name","axis","coords","cur","page","y","start","client","velocity","x","move","_ref2","iEvent","opposite","delta","options","is","enabled","setPerAction","setOnEvents","lockAxis","startAxis","id","listeners","autoStartCheck","arg","interactable","buttons","dragOptions","pointerIsDown","pointerType","mouseButtons","action","getCursor","filterEventType","type","search","domObjects","DocumentFragment","SVGElement","SVGSVGElement","SVGElementInstance","HTMLElement","Event","Touch","PointerEvent","blank","MSPointerEvent","browser","supportsTouch","supportsPointerEvent","isIOS7","isIOS","isIe9","isOperaMobile","prefixedMatchesSelector","pEventTypes","wheelEvent","navigator","DocumentTouch","pointerEnabled","platform","appVersion","userAgent","appName","up","down","over","out","cancel","nodeContains","parent","child","contains","parentNode","closest","selector","matchesSelector","host","replace","getParent","indexOfDeepestElement","elements","deepestNodeParents","deepestNodeIndex","i","currentNode","deepestNode","currentNodeParent","deepestNodeParent","zIndexIsHigherThan","getNodeParents","ancestryStart","ownerSVGElement","currentNodeParents","commonIndex","parents","lastChild","previousSibling","limit","parentParent","unshift","higherNode","lowerNode","higherIndex","parseInt","getComputedStyle","zIndex","lowerIndex","matchesUpTo","getActualElement","correspondingUseElement","getScrollXY","relevantWindow","scrollX","documentElement","scrollLeft","scrollY","scrollTop","getElementClientRect","clientRect","getBoundingClientRect","getClientRects","left","right","top","bottom","width","height","getElementRect","scroll","getPath","path","push","trySelector","value","querySelector","extend","dest","source","prop","ret","getStringOptionResult","target","getRect","resolveRectLike","functionArgs","returnValue","apply","rectToXY","rect","xywhToTlbr","tlbrToXywh","addEdges","edges","getOriginXY","actionName","actionOptions","actionOrigin","origin","originRect","normalize","filter","arguments","_typeOrPrefix","result","split","forEach","t","_i2","_listeners2","l","prefix","combinedTypes","p","concat","trim","Math","sqrt","VENDOR_PREFIXES","pointerExtend","__set","_loop","some","indexOf","Object","defineProperty","get","set","configurable","copyCoords","src","timeStamp","setCoordDeltas","targetObj","prev","setCoordVelocity","dt","max","setZeroCoords","isNativePointer","pointer","dom","getXY","xy","getPageXY","getClientXY","getPointerId","pointerId","identifier","setCoords","pointers","pointerAverage","getTouchPair","event","touches","changedTouches","average","pageX","pageY","clientX","clientY","screenX","screenY","touchBBox","minX","min","minY","maxX","maxY","touchDistance","deltaSource","sourceX","sourceY","dx","dy","hypot","touchAngle","angle","atan2","PI","getPointerType","getEventTargets","composedPath","domUtils","currentTarget","newCoords","coordsToEvent","preventDefault","BaseEvent","_classCallCheck","_defineProperty","_interaction","_createClass","key","stopPropagation","propagationStopped","stopImmediatePropagation","immediatePropagationStopped","_proxy","remove","merge","item","from","findIndex","find","DropEvent","_BaseEvent","_inherits","_super","_createSuper","dropState","dragEvent","_this","call","_assertThisInitialized","dropzone","relatedTarget","reject","_this2","rejected","events","enter","activeDrops","index","arr","deactivateEvent","fire","interact","interactStatic","usePlugin","dropzoneMethod","dropCheck","draggableElement","dropElement","dropCheckMethod","dynamicDrop","newValue","phaselessTypes","dragenter","dragleave","dropactivate","dropdeactivate","dropmove","drop","collectDropzones","interactables","drops","_interactables$list2","list","accept","_i4","_dropzone$getAllEleme2","getAllElements","dropzoneElement","fireActivationEvents","_i6","_activeDrops$slice2","slice","_activeDrops$slice2$_","getActiveDrops","dragElement","_i8","activeDrop","getDrop","pointerEvent","validDrops","_i10","_dropState$activeDrop2","_dropState$activeDrop3","isValid","dropIndex","getDropEvents","_pointerEvent","dropEvents","leave","activate","deactivate","dragLeave","prevDropzone","dragEnter","fireDropEvents","onEventCreated","_ref3","dropResult","normalized","normalizeListeners","corrected","keys","reduce","acc","correctedType","prevListeners","off","on","ondrop","ondropactivate","ondropdeactivate","ondragenter","ondragleave","ondropmove","overlap","checker","dropped","dropOverlap","pointerUtils","horizontal","vertical","dragRect","cx","cy","overlapArea","overlapRatio","interactionsBeforeActionStart","_ref4","interactionsAfterActionStart","_ref5","interactionsAfterActionMove","_ref6","interactionsActionEnd","interactionsStop","_ref7","gesturable","gesture","updateGestureProps","phase","starting","ending","distance","box","scale","ds","da","startDistance","startAngle","prevEvent","Infinity","isNaN","before","interactionsNew","gestureOptions","resize","cursors","initCursors","defaultMargin","resizable","resizeChecker","resizeOptions","resizeEdges","edge","checkResizeEdge","_latestPointer","eventTarget","margin","axes","preserveAspectRatio","square","interactableElement","abs","topleft","bottomright","topright","bottomleft","resizeEvent","_rects","previous","deltaRect","invert","invertible","current","_interaction$_rects","startRect","swap","end","updateEventAxes","resizeAxes","interactionsActionStart","interactionsActionMove","NaN","cursorKey","_ref8","lastTime","request","global","requestAnimationFrame","cancelAnimationFrame","vendors","vendor","bind","callback","currTime","Date","now","timeToCall","token","setTimeout","clearTimeout","autoScroll","autoscroll","perAction","container","speed","isScrolling","prevTime","raf","stop","getContainer","s","scrollBy","prevScroll","getScroll","curScroll","check","_options$actionName$a","onInteractionMove","interacting","simulation","innerWidth","innerHeight","body","autoScrollPlugin","interactionsDestroy","warnOnce","method","message","warned","console","warn","copyAction","getAction","defaultActionChecker","actionChecker","ignoreFrom","_backCompatOption","allowFrom","styleCursor","button","InteractableMethods","base","manualStart","maxPerElement","maxInteractions","autoStart","withinInteractionLimit","cursorElement","prepareOnDown","actionInfo","getActionInfo","prepare","prepareOnMove","startOnMove","pointerWasMoved","setInteractionCursor","clearCursorOnStop","setCursor","validateAction","testIgnoreAllow","validateMatches","matches","matchElements","len","match","matchElement","matchAction","pushMatches","forEachMatch","maxActions","autoStartMax","activeInteractions","interactableCount","elementCount","_scope$interactions$l2","interactions","otherAction","cursor","prevCursorElement","style","cursorChecker","_interacting","interactionsMove","beforeStart","absX","absY","targetOptions","currentAxis","getDraggable","downPointer","downEvent","checkStartAxis","thisAxis","basePlugin","hold","delay","getHoldDuration","autoStartHoldTimer","autoStartPrepared","duplicate","autoStartBeforeStart","holdDuration","dragAxis","checkAndPreventDefault","setting","supportsPassive","doc","docOptions","getDocOptions","passive","onInteractionEvent","docEvents","listener","eventType","isNonNativeEvent","substr","phases","CheckName","links","touchAction","boxSizing","isProduction","process","logger","devTools","ignore","_onOff","typeArg","listenerArg","addEventListener","normalizedListeners","visualizer","checks","perform","parentHasStyle","getInfo","text","hasStyle","noListeners","_interaction$interact","moveListeners","types","styleRe","defaultExport","_scope$logger","clone","Modification","createResult","pageCoords","modifierList","getModifierList","prepareStates","startEdges","startOffset","getRectOffset","startDelta","fillArg","preEnd","startAll","setAll","_this$states2","states","state","methods","skipModifiers","unmodifiedRect","unmodifiedEdges","newResult","_state$methods","lastModifierCoords","shouldDo","rectUtils","eventProps","rectDelta","prevCoords","prevRect","rectChanged","changed","applyToInteraction","curCoords","startCoords","curDelta","_ref3$_i","coordsSet","setAndApply","modifiedCoords","adjustment","beforeEnd","doPreend","endPosition","endResult","modifierArg","_this$states4","_modifierList$index","restoreInteractionCoords","_ref4$interaction","modification","_modification$result","coordsAndDeltas","_i12","_ref6$_i","requireEndOnly","endOnly","setStart","copyFrom","other","destroy","actionModifiers","modifiers","_methods","m","makeModifier","module","modifier","_options","enable","disable","_defaults","addEventModifiers","modifiersBase","interactionsBeforeActionMove","interactionsBeforeActionEnd","InteractEvent","ctrlKey","altKey","shiftKey","metaKey","t0","downTime","x0","y0","clientX0","clientY0","duration","swipe","getSwipe","velocityY","velocityX","defineProperties","PointerInfo","downTarget","_ProxyValues","_ProxyMethods","idCounter","Interaction","scopeFire","signalArg","_scopeFire","that","_loop2","_key","pointerDown","pointerIndex","updatePointer","pointerInfo","_stopped","_doPhase","pointerMove","duplicateMove","pointerMoveTolerance","getPointerIndex","pointerUp","curEventTarget","removePointer","documentBlur","_ending","endPhaseResult","currentAction","curPointer","getPointerInfo","_now","_updateLatestPointer","_createPreparedEvent","_fireEvent","_this$interactable","beforeResult","offsetBy","addTotal","addToCoords","offset","total","pending","beforeAction","applyPending","hadPending","hasPending","interactionsUpdatePointer","inertiastart","resume","inertia","resistance","minSpeed","endSpeed","allowResume","smoothEndDuration","InertiaState","getOptions","velocityClient","pointerSpeed","v0","currentOffset","thrown","startInertia","startSmoothEnd","targetOffset","active","startVelocity","lambda","inertiaDur","log","te","lambda_v0","one_ve_v0","isModified","modifiedOffset","onNextFrame","inertiaTick","smoothEnd","smoothEndTick","tickFn","_this3","timeout","_this4","progress","exp","newOffset","getQuadraticCurvePoint","_this5","_getOptions","easeOutQuad","modifierCount","started","interactionsBeforeActionResume","interactionsBeforeActionInertiastart","interactionsAfterActionInertiastart","interactionsAfterActionResume","_getQBezierValue","p1","p2","p3","iT","startX","startY","cpX","cpY","endX","endY","position","b","c","d","fireUntilImmediateStopped","Eventable","eventList","_listeners$type2","subListener","_element","_scope$document","targets","delegatedEvents","documents","eventsMethods","add","addDelegate","removeDelegate","delegateListener","delegateUseCapture","supportsOptions","createElement","capture","optionalArg","optionsMatch","removeEventListener","targetIndex","hasOwnProperty","typeIsEmpty","typeListeners","entry","context","_i3","delegates","delegate","matchFound","fakeEvent","FakeEvent","_pointerUtils$getEven","_i5","originalEvent","pExtend","preventOriginalDefault","param","a","finder","methodOrder","details","_finder$methodOrder2","simulationResume","mouseOrPen","firstNonActive","_scope$interactions$l4","hasPointerId","_scope$interactions$l6","hasPointer","_scope$interactions$l8","idle","_scope$interactions$l10","methodNames","doOnInteractions","releasePointersOnRemovedEls","prevTouchTime","_InteractionBase","_class","InteractionBase","new","_new","_interaction$pointers2","interactablePreventDefault","_event$changedTouches2","changedTouch","searchDetails","getInteraction","invalidPointer","_matches$_i","foundInteraction","onDocSignal","eventMethodName","eventMethod","eventOptions","_i14","_docEvents$_i","scopeAddDocument","scopeRemoveDocument","interactableUnset","OnOffMethod","defaultContext","scopeEvents","_actions","_context","_win","_doc","_scopeEvents","onstart","onmove","onend","oninertiastart","updatePerActionListeners","_this$_actions$map$ac","actionFilter","Off","On","optionName_","optionName","optionValue","rectChecker","Array","querySelectorAll","inContext","targetNode","testIgnore","testAllow","_listeners$_type2","actionName_","methodName","unset","delegated","_delegated$i","InteractableSet","addListeners","interactablesOnTarget","selectorMap","addDocument","getExisting","isSelector","_this$list2","createInteractStatic","globalEvents","getPointerAverage","getTouchBBox","getTouchDistance","getTouchAngle","version","use","plugin","isSet","_type2","debug","_this$scope$interacti2","removeDocument","Scope","floor","random","_InteractableBase","_class2","_get","_getPrototypeOf","InteractableBase","listenerMaps","_this$listenerMaps2","isInitialized","initScope","pluginIsInstalled","_plugins","pluginIdRoot","otherId","getDocIndex","onWindowUnload","docIndex","_global","globalThis","this","grid","coordFields","xField","yField","gridFunc","range","_grid$limits","limits","_grid$offset","_coordFields$_i","gridx","round","gridy","snappersPlugin","snappers","allSnappers","createSnapGrid","aspectRatio","_state$options","ratio","_state$options2","equalDelta","linkedEdges","xIsPrimaryAxis","sign","edgeSign","subModification","_objectSpread","initialCoords","aspectMethod","setEqualDelta","setRatio","correctedRect","xIsCriticalAxis","newHeight","newWidth","noop","elementRect","restriction","getRestrictionRect","widthDiff","heightDiff","restrict","noInner","noOuter","offsetRect","inner","outer","fixRect","restrictEdges","_","restrictRect","noMin","noMax","minSize","maxSize","restrictSize","offsetWithOrigin","getOrigin","snapOffset","relativePoints","offsets","relativePoint","relativeX","relativeY","snapTarget","inRange","optionsOrigin","snap","targetFields","relative","_state$targetFields2","_state$targetFields2$","snapSize","snapEdges","spring","avoid","transform","rubberband","all","_all","interval","tapTime","double","prevTap","_subtractOrigin","originX","originY","_addOrigin","pointerEvents","addInteractionProps","addHoldInfo","moveAndClearHold","interactionsDown","downAndStartHold","interactionsUp","clearHold","tapAfterUp","interactionsCancel","collectEventTargets","tap","doubletap","_arg$targets","props","eventable","_interaction$pointers","timer","minDuration","_signalArg$targets2","holdRepeatInterval","holdrepeat","onNew","count","onFired","holdIntervalHandle","endHoldRepeat","clearInterval","holdRepeat","enderTypes","__backCompatOption","pointerEventsCollectTargets","interactableNew","interactableSet","interactableTargets","reflow","doReflow","Promise","promises","runningInteraction","reflowPromise","_reflowPromise","resolve","_reflowResolve","xywh","startReflow","then","default","exports","_unused"],"mappings":"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"} \ No newline at end of file diff --git a/packages/interactjs/dist/interact.min.js b/packages/interactjs/dist/interact.min.js new file mode 100644 index 000000000..4e7fb4fe9 --- /dev/null +++ b/packages/interactjs/dist/interact.min.js @@ -0,0 +1,4 @@ +/* interact.js 1.10.25 | https://raw.github.com/taye/interact.js/main/LICENSE */ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).interact=e()}(this,(function(){"use strict";function t(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function e(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:function(t){return!0},r=arguments.length>3?arguments[3]:void 0;if(r=r||{},w.string(t)&&-1!==t.search(" ")&&(t=J(t)),w.array(t))return t.forEach((function(t){return $(t,e,n,r)})),r;if(w.object(t)&&(e=t,t=""),w.func(e)&&n(t))r[t]=r[t]||[],r[t].push(e);else if(w.array(e))for(var i=0,o=e;i1?lt(e):e[0];ot(r,t.page),function(t,e){e=e||{},I.isOperaMobile&&rt(t)?it("screen",t,e):it("client",t,e)}(r,t.client),t.timeStamp=n}function ct(t){var e=[];return w.array(t)?(e[0]=t[0],e[1]=t[1]):"touchend"===t.type?1===t.touches.length?(e[0]=t.touches[0],e[1]=t.changedTouches[0]):0===t.touches.length&&(e[0]=t.changedTouches[0],e[1]=t.changedTouches[1]):(e[0]=t.touches[0],e[1]=t.touches[1]),e}function lt(t){for(var e={pageX:0,pageY:0,clientX:0,clientY:0,screenX:0,screenY:0},n=0;n=(parseInt(y(r).getComputedStyle(r).zIndex,10)||0)&&(e=o);else e=o}else e=o}return e}(a);return r.activeDrops[h]||null}function St(t,e,n){var r=t.dropState,i={enter:null,leave:null,activate:null,deactivate:null,move:null,drop:null};return"dragstart"===n.type&&(i.activate=new xt(r,n,"dropactivate"),i.activate.target=null,i.activate.dropzone=null),"dragend"===n.type&&(i.deactivate=new xt(r,n,"dropdeactivate"),i.deactivate.target=null,i.deactivate.dropzone=null),r.rejected||(r.cur.element!==r.prev.element&&(r.prev.dropzone&&(i.leave=new xt(r,n,"dragleave"),n.dragLeave=i.leave.target=r.prev.element,n.prevDropzone=i.leave.dropzone=r.prev.dropzone),r.cur.dropzone&&(i.enter=new xt(r,n,"dragenter"),n.dragEnter=r.cur.element,n.dropzone=r.cur.dropzone)),"dragend"===n.type&&r.cur.dropzone&&(i.drop=new xt(r,n,"drop"),n.dropzone=r.cur.dropzone,n.relatedTarget=r.cur.element),"dragmove"===n.type&&r.cur.dropzone&&(i.move=new xt(r,n,"dropmove"),n.dropzone=r.cur.dropzone)),i}function _t(t,e){var n=t.dropState,r=n.activeDrops,i=n.cur,o=n.prev;e.leave&&o.dropzone.fire(e.leave),e.enter&&i.dropzone.fire(e.enter),e.move&&i.dropzone.fire(e.move),e.drop&&i.dropzone.fire(e.drop),e.deactivate&&wt(r,e.deactivate),n.prev.dropzone=i.dropzone,n.prev.element=i.element}function Pt(t,e){var n=t.interaction,r=t.iEvent,i=t.event;if("dragmove"===r.type||"dragend"===r.type){var o=n.dropState;e.dynamicDrop&&(o.activeDrops=Et(e,n.element));var a=r,s=Tt(n,a,i);o.rejected=o.rejected&&!!s&&s.dropzone===o.cur.dropzone&&s.element===o.cur.element,o.cur.dropzone=s&&s.dropzone,o.cur.element=s&&s.element,o.events=St(n,0,a)}}var Ot={id:"actions/drop",install:function(t){var e=t.actions,n=t.interactStatic,r=t.Interactable,i=t.defaults;t.usePlugin(_),r.prototype.dropzone=function(t){return function(t,e){if(w.object(e)){if(t.options.drop.enabled=!1!==e.enabled,e.listeners){var n=$(e.listeners),r=Object.keys(n).reduce((function(t,e){return t[/^(enter|leave)/.test(e)?"drag".concat(e):/^(activate|deactivate|move)/.test(e)?"drop".concat(e):e]=n[e],t}),{}),i=t.options.drop.listeners;i&&t.off(i),t.on(r),t.options.drop.listeners=r}return w.func(e.ondrop)&&t.on("drop",e.ondrop),w.func(e.ondropactivate)&&t.on("dropactivate",e.ondropactivate),w.func(e.ondropdeactivate)&&t.on("dropdeactivate",e.ondropdeactivate),w.func(e.ondragenter)&&t.on("dragenter",e.ondragenter),w.func(e.ondragleave)&&t.on("dragleave",e.ondragleave),w.func(e.ondropmove)&&t.on("dropmove",e.ondropmove),/^(pointer|center)$/.test(e.overlap)?t.options.drop.overlap=e.overlap:w.number(e.overlap)&&(t.options.drop.overlap=Math.max(Math.min(1,e.overlap),0)),"accept"in e&&(t.options.drop.accept=e.accept),"checker"in e&&(t.options.drop.checker=e.checker),t}if(w.bool(e))return t.options.drop.enabled=e,t;return t.options.drop}(this,t)},r.prototype.dropCheck=function(t,e,n,r,i,o){return function(t,e,n,r,i,o,a){var s=!1;if(!(a=a||t.getRect(o)))return!!t.options.drop.checker&&t.options.drop.checker(e,n,s,t,o,r,i);var c=t.options.drop.overlap;if("pointer"===c){var l=K(r,i,"drag"),u=ot(e);u.x+=l.x,u.y+=l.y;var p=u.x>a.left&&u.xa.top&&u.y=a.left&&h<=a.right&&v>=a.top&&v<=a.bottom}if(d&&w.number(c)){s=Math.max(0,Math.min(a.right,d.right)-Math.max(a.left,d.left))*Math.max(0,Math.min(a.bottom,d.bottom)-Math.max(a.top,d.top))/(d.width*d.height)>=c}t.options.drop.checker&&(s=t.options.drop.checker(e,n,s,t,o,r,i));return s}(this,t,e,n,r,i,o)},n.dynamicDrop=function(e){return w.bool(e)?(t.dynamicDrop=e,n):t.dynamicDrop},V(e.phaselessTypes,{dragenter:!0,dragleave:!0,dropactivate:!0,dropdeactivate:!0,dropmove:!0,drop:!0}),e.methodDict.drop="dropzone",t.dynamicDrop=!1,i.actions.drop=Ot.defaults},listeners:{"interactions:before-action-start":function(t){var e=t.interaction;"drag"===e.prepared.name&&(e.dropState={cur:{dropzone:null,element:null},prev:{dropzone:null,element:null},rejected:null,events:null,activeDrops:[]})},"interactions:after-action-start":function(t,e){var n=t.interaction,r=(t.event,t.iEvent);if("drag"===n.prepared.name){var i=n.dropState;i.activeDrops=[],i.events={},i.activeDrops=Et(e,n.element),i.events=St(n,0,r),i.events.activate&&(wt(i.activeDrops,i.events.activate),e.fire("actions/drop:start",{interaction:n,dragEvent:r}))}},"interactions:action-move":Pt,"interactions:after-action-move":function(t,e){var n=t.interaction,r=t.iEvent;if("drag"===n.prepared.name){var i=n.dropState;_t(n,i.events),e.fire("actions/drop:move",{interaction:n,dragEvent:r}),i.events={}}},"interactions:action-end":function(t,e){if("drag"===t.interaction.prepared.name){var n=t.interaction,r=t.iEvent;Pt(t,e),_t(n,n.dropState.events),e.fire("actions/drop:end",{interaction:n,dragEvent:r})}},"interactions:stop":function(t){var e=t.interaction;if("drag"===e.prepared.name){var n=e.dropState;n&&(n.activeDrops=null,n.events=null,n.cur.dropzone=null,n.cur.element=null,n.prev.dropzone=null,n.prev.element=null,n.rejected=!1)}}},getActiveDrops:Et,getDrop:Tt,getDropEvents:St,fireDropEvents:_t,filterEventType:function(t){return 0===t.search("drag")||0===t.search("drop")},defaults:{enabled:!1,accept:null,overlap:"pointer"}},kt=Ot;function Dt(t){var e=t.interaction,n=t.iEvent,r=t.phase;if("gesture"===e.prepared.name){var i=e.pointers.map((function(t){return t.pointer})),o="start"===r,a="end"===r,s=e.interactable.options.deltaSource;if(n.touches=[i[0],i[1]],o)n.distance=pt(i,s),n.box=ut(i),n.scale=1,n.ds=0,n.angle=ft(i,s),n.da=0,e.gesture.startDistance=n.distance,e.gesture.startAngle=n.angle;else if(a||e.pointers.length<2){var c=e.prevEvent;n.distance=c.distance,n.box=c.box,n.scale=c.scale,n.ds=0,n.angle=c.angle,n.da=0}else n.distance=pt(i,s),n.box=ut(i),n.scale=n.distance/e.gesture.startDistance,n.angle=ft(i,s),n.ds=n.scale-e.gesture.scale,n.da=n.angle-e.gesture.angle;e.gesture.distance=n.distance,e.gesture.angle=n.angle,w.number(n.scale)&&n.scale!==1/0&&!isNaN(n.scale)&&(e.gesture.scale=n.scale)}}var It={id:"actions/gesture",before:["actions/drag","actions/resize"],install:function(t){var e=t.actions,n=t.Interactable,r=t.defaults;n.prototype.gesturable=function(t){return w.object(t)?(this.options.gesture.enabled=!1!==t.enabled,this.setPerAction("gesture",t),this.setOnEvents("gesture",t),this):w.bool(t)?(this.options.gesture.enabled=t,this):this.options.gesture},e.map.gesture=It,e.methodDict.gesture="gesturable",r.actions.gesture=It.defaults},listeners:{"interactions:action-start":Dt,"interactions:action-move":Dt,"interactions:action-end":Dt,"interactions:new":function(t){t.interaction.gesture={angle:0,distance:0,scale:1,startAngle:0,startDistance:0}},"auto-start:check":function(t){if(!(t.interaction.pointers.length<2)){var e=t.interactable.options.gesture;if(e&&e.enabled)return t.action={name:"gesture"},!1}}},defaults:{},getCursor:function(){return""},filterEventType:function(t){return 0===t.search("gesture")}},Mt=It;function zt(t,e,n,r,i,o,a){if(!e)return!1;if(!0===e){var s=w.number(o.width)?o.width:o.right-o.left,c=w.number(o.height)?o.height:o.bottom-o.top;if(a=Math.min(a,Math.abs(("left"===t||"right"===t?s:c)/2)),s<0&&("left"===t?t="right":"right"===t&&(t="left")),c<0&&("top"===t?t="bottom":"bottom"===t&&(t="top")),"left"===t){var l=s>=0?o.left:o.right;return n.x=0?o.top:o.bottom;return n.y(s>=0?o.right:o.left)-a;if("bottom"===t)return n.y>(c>=0?o.bottom:o.top)-a}return!!w.element(r)&&(w.element(e)?e===r:F(r,e,i))}function At(t){var e=t.iEvent,n=t.interaction;if("resize"===n.prepared.name&&n.resizeAxes){var r=e;n.interactable.options.resize.square?("y"===n.resizeAxes?r.delta.x=r.delta.y:r.delta.y=r.delta.x,r.axes="xy"):(r.axes=n.resizeAxes,"x"===n.resizeAxes?r.delta.y=0:"y"===n.resizeAxes&&(r.delta.x=0))}}var Rt,Ct,jt={id:"actions/resize",before:["actions/drag"],install:function(t){var e=t.actions,n=t.browser,r=t.Interactable,i=t.defaults;jt.cursors=function(t){return t.isIe9?{x:"e-resize",y:"s-resize",xy:"se-resize",top:"n-resize",left:"w-resize",bottom:"s-resize",right:"e-resize",topleft:"se-resize",bottomright:"se-resize",topright:"ne-resize",bottomleft:"ne-resize"}:{x:"ew-resize",y:"ns-resize",xy:"nwse-resize",top:"ns-resize",left:"ew-resize",bottom:"ns-resize",right:"ew-resize",topleft:"nwse-resize",bottomright:"nwse-resize",topright:"nesw-resize",bottomleft:"nesw-resize"}}(n),jt.defaultMargin=n.supportsTouch||n.supportsPointerEvent?20:10,r.prototype.resizable=function(e){return function(t,e,n){if(w.object(e))return t.options.resize.enabled=!1!==e.enabled,t.setPerAction("resize",e),t.setOnEvents("resize",e),w.string(e.axis)&&/^x$|^y$|^xy$/.test(e.axis)?t.options.resize.axis=e.axis:null===e.axis&&(t.options.resize.axis=n.defaults.actions.resize.axis),w.bool(e.preserveAspectRatio)?t.options.resize.preserveAspectRatio=e.preserveAspectRatio:w.bool(e.square)&&(t.options.resize.square=e.square),t;if(w.bool(e))return t.options.resize.enabled=e,t;return t.options.resize}(this,e,t)},e.map.resize=jt,e.methodDict.resize="resizable",i.actions.resize=jt.defaults},listeners:{"interactions:new":function(t){t.interaction.resizeAxes="xy"},"interactions:action-start":function(t){!function(t){var e=t.iEvent,n=t.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=e,i=n.rect;n._rects={start:V({},i),corrected:V({},i),previous:V({},i),delta:{left:0,right:0,width:0,top:0,bottom:0,height:0}},r.edges=n.prepared.edges,r.rect=n._rects.corrected,r.deltaRect=n._rects.delta}}(t),At(t)},"interactions:action-move":function(t){!function(t){var e=t.iEvent,n=t.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=e,i=n.interactable.options.resize.invert,o="reposition"===i||"negate"===i,a=n.rect,s=n._rects,c=s.start,l=s.corrected,u=s.delta,p=s.previous;if(V(p,l),o){if(V(l,a),"reposition"===i){if(l.top>l.bottom){var f=l.top;l.top=l.bottom,l.bottom=f}if(l.left>l.right){var d=l.left;l.left=l.right,l.right=d}}}else l.top=Math.min(a.top,c.bottom),l.bottom=Math.max(a.bottom,c.top),l.left=Math.min(a.left,c.right),l.right=Math.max(a.right,c.left);for(var h in l.width=l.right-l.left,l.height=l.bottom-l.top,l)u[h]=l[h]-p[h];r.edges=n.prepared.edges,r.rect=l,r.deltaRect=u}}(t),At(t)},"interactions:action-end":function(t){var e=t.iEvent,n=t.interaction;if("resize"===n.prepared.name&&n.prepared.edges){var r=e;r.edges=n.prepared.edges,r.rect=n._rects.corrected,r.deltaRect=n._rects.delta}},"auto-start:check":function(t){var e=t.interaction,n=t.interactable,r=t.element,i=t.rect,o=t.buttons;if(i){var a=V({},e.coords.cur.page),s=n.options.resize;if(s&&s.enabled&&(!e.pointerIsDown||!/mouse|pointer/.test(e.pointerType)||0!=(o&s.mouseButtons))){if(w.object(s.edges)){var c={left:!1,right:!1,top:!1,bottom:!1};for(var l in c)c[l]=zt(l,s.edges[l],a,e._latestPointer.eventTarget,r,i,s.margin||jt.defaultMargin);c.left=c.left&&!c.right,c.top=c.top&&!c.bottom,(c.left||c.right||c.top||c.bottom)&&(t.action={name:"resize",edges:c})}else{var u="y"!==s.axis&&a.x>i.right-jt.defaultMargin,p="x"!==s.axis&&a.y>i.bottom-jt.defaultMargin;(u||p)&&(t.action={name:"resize",axes:(u?"x":"")+(p?"y":"")})}return!t.action&&void 0}}}},defaults:{square:!1,preserveAspectRatio:!1,axis:"xy",margin:NaN,edges:null,invert:"none"},cursors:null,getCursor:function(t){var e=t.edges,n=t.axis,r=t.name,i=jt.cursors,o=null;if(n)o=i[r+n];else if(e){for(var a="",s=0,c=["top","bottom","left","right"];s=1){var l={x:qt.x*c,y:qt.y*c};if(l.x||l.y){var u=Vt(o);w.window(o)?o.scrollBy(l.x,l.y):o&&(o.scrollLeft+=l.x,o.scrollTop+=l.y);var p=Vt(o),f={x:p.x-u.x,y:p.y-u.y};(f.x||f.y)&&e.fire({type:"autoscroll",target:n,interactable:e,delta:f,interaction:t,container:o})}qt.prevTime=a}qt.isScrolling&&(Lt.cancel(qt.i),qt.i=Lt.request(qt.scroll))},check:function(t,e){var n;return null==(n=t.options[e].autoScroll)?void 0:n.enabled},onInteractionMove:function(t){var e=t.interaction,n=t.pointer;if(e.interacting()&&qt.check(e.interactable,e.prepared.name))if(e.simulation)qt.x=qt.y=0;else{var r,i,o,a,s=e.interactable,c=e.element,l=e.prepared.name,u=s.options[l].autoScroll,p=Bt(u.container,s,c);if(w.window(p))a=n.clientXp.innerWidth-qt.margin,o=n.clientY>p.innerHeight-qt.margin;else{var f=Y(p);a=n.clientXf.right-qt.margin,o=n.clientY>f.bottom-qt.margin}qt.x=i?1:a?-1:0,qt.y=o?1:r?-1:0,qt.isScrolling||(qt.margin=u.margin,qt.speed=u.speed,qt.start(e))}}};function Bt(t,e,n){return(w.string(t)?W(t,e,n):t)||y(n)}function Vt(t){return w.window(t)&&(t=window.document.body),{x:t.scrollLeft,y:t.scrollTop}}var Wt={id:"auto-scroll",install:function(t){var e=t.defaults,n=t.actions;t.autoScroll=qt,qt.now=function(){return t.now()},n.phaselessTypes.autoscroll=!0,e.perAction.autoScroll=qt.defaults},listeners:{"interactions:new":function(t){t.interaction.autoScroll=null},"interactions:destroy":function(t){t.interaction.autoScroll=null,qt.stop(),qt.interaction&&(qt.interaction=null)},"interactions:stop":qt.stop,"interactions:action-move":function(t){return qt.onInteractionMove(t)}}},Gt=Wt;function Nt(t,e){var n=!1;return function(){return n||(g.console.warn(e),n=!0),t.apply(this,arguments)}}function Ut(t,e){return t.name=e.name,t.axis=e.axis,t.edges=e.edges,t}function Ht(t){return w.bool(t)?(this.options.styleCursor=t,this):null===t?(delete this.options.styleCursor,this):this.options.styleCursor}function Kt(t){return w.func(t)?(this.options.actionChecker=t,this):null===t?(delete this.options.actionChecker,this):this.options.actionChecker}var $t={id:"auto-start/interactableMethods",install:function(t){var e=t.Interactable;e.prototype.getAction=function(e,n,r,i){var o=function(t,e,n,r,i){var o=t.getRect(r),a=e.buttons||{0:1,1:4,3:8,4:16}[e.button],s={action:null,interactable:t,interaction:n,element:r,rect:o,buttons:a};return i.fire("auto-start:check",s),s.action}(this,n,r,i,t);return this.options.actionChecker?this.options.actionChecker(e,n,o,this,i,r):o},e.prototype.ignoreFrom=Nt((function(t){return this._backCompatOption("ignoreFrom",t)}),"Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue})."),e.prototype.allowFrom=Nt((function(t){return this._backCompatOption("allowFrom",t)}),"Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue})."),e.prototype.actionChecker=Kt,e.prototype.styleCursor=Ht}};function Jt(t,e,n,r,i){return e.testIgnoreAllow(e.options[t.name],n,r)&&e.options[t.name].enabled&&ee(e,n,t,i)?t:null}function Qt(t,e,n,r,i,o,a){for(var s=0,c=r.length;s=s)return!1;if(d.interactable===t){if((l+=h===n.name?1:0)>=o)return!1;if(d.element===e&&(u++,h===n.name&&u>=a))return!1}}}return s>0}function ne(t,e){return w.number(t)?(e.autoStart.maxInteractions=t,this):e.autoStart.maxInteractions}function re(t,e,n){var r=n.autoStart.cursorElement;r&&r!==t&&(r.style.cursor=""),t.ownerDocument.documentElement.style.cursor=e,t.style.cursor=e,n.autoStart.cursorElement=e?t:null}function ie(t,e){var n=t.interactable,r=t.element,i=t.prepared;if("mouse"===t.pointerType&&n&&n.options.styleCursor){var o="";if(i.name){var a=n.options[i.name].cursorChecker;o=w.func(a)?a(i,n,r,t._interacting):e.actions.map[i.name].getCursor(i)}re(t.element,o||"",e)}else e.autoStart.cursorElement&&re(e.autoStart.cursorElement,"",e)}var oe={id:"auto-start/base",before:["actions"],install:function(t){var e=t.interactStatic,n=t.defaults;t.usePlugin($t),n.base.actionChecker=null,n.base.styleCursor=!0,V(n.perAction,{manualStart:!1,max:1/0,maxPerElement:1,allowFrom:null,ignoreFrom:null,mouseButtons:1}),e.maxInteractions=function(e){return ne(e,t)},t.autoStart={maxInteractions:1/0,withinInteractionLimit:ee,cursorElement:null}},listeners:{"interactions:down":function(t,e){var n=t.interaction,r=t.pointer,i=t.event,o=t.eventTarget;n.interacting()||te(n,Zt(n,r,i,o,e),e)},"interactions:move":function(t,e){!function(t,e){var n=t.interaction,r=t.pointer,i=t.event,o=t.eventTarget;"mouse"!==n.pointerType||n.pointerIsDown||n.interacting()||te(n,Zt(n,r,i,o,e),e)}(t,e),function(t,e){var n=t.interaction;if(n.pointerIsDown&&!n.interacting()&&n.pointerWasMoved&&n.prepared.name){e.fire("autoStart:before-start",t);var r=n.interactable,i=n.prepared.name;i&&r&&(r.options[i].manualStart||!ee(r,n.element,n.prepared,e)?n.stop():(n.start(n.prepared,r,n.element),ie(n,e)))}}(t,e)},"interactions:stop":function(t,e){var n=t.interaction,r=n.interactable;r&&r.options.styleCursor&&re(n.element,"",e)}},maxInteractions:ne,withinInteractionLimit:ee,validateAction:Jt},ae=oe;var se={id:"auto-start/dragAxis",listeners:{"autoStart:before-start":function(t,e){var n=t.interaction,r=t.eventTarget,i=t.dx,o=t.dy;if("drag"===n.prepared.name){var a=Math.abs(i),s=Math.abs(o),c=n.interactable.options.drag,l=c.startAxis,u=a>s?"x":a0&&(e.autoStartHoldTimer=setTimeout((function(){e.start(e.prepared,e.interactable,e.element)}),n))},"interactions:move":function(t){var e=t.interaction,n=t.duplicate;e.autoStartHoldTimer&&e.pointerWasMoved&&!n&&(clearTimeout(e.autoStartHoldTimer),e.autoStartHoldTimer=null)},"autoStart:before-start":function(t){var e=t.interaction;ce(e)>0&&(e.prepared.name=null)}},getHoldDuration:ce},ue=le,pe={id:"auto-start",install:function(t){t.usePlugin(ae),t.usePlugin(ue),t.usePlugin(se)}},fe=function(t){return/^(always|never|auto)$/.test(t)?(this.options.preventDefault=t,this):w.bool(t)?(this.options.preventDefault=t?"always":"never",this):this.options.preventDefault};function de(t){var e=t.interaction,n=t.event;e.interactable&&e.interactable.checkAndPreventDefault(n)}var he={id:"core/interactablePreventDefault",install:function(t){var e=t.Interactable;e.prototype.preventDefault=fe,e.prototype.checkAndPreventDefault=function(e){return function(t,e,n){var r=t.options.preventDefault;if("never"!==r)if("always"!==r){if(e.events.supportsPassive&&/^touch(start|move)$/.test(n.type)){var i=y(n.target).document,o=e.getDocOptions(i);if(!o||!o.events||!1!==o.events.passive)return}/^(mouse|pointer|touch)*(down|start)/i.test(n.type)||w.element(n.target)&&R(n.target,"input,select,textarea,[contenteditable=true],[contenteditable=true] *")||n.preventDefault()}else n.preventDefault()}(this,t,e)},t.interactions.docEvents.push({type:"dragstart",listener:function(e){for(var n=0,r=t.interactions.list;n150)return null;var e=180*Math.atan2(t.prevEvent.velocityY,t.prevEvent.velocityX)/Math.PI;e<0&&(e+=360);var n=112.5<=e&&e<247.5,r=202.5<=e&&e<337.5;return{up:r,down:!r&&22.5<=e&&e<157.5,left:n,right:!n&&(292.5<=e||e<67.5),angle:e,speed:t.prevEvent.speed,velocity:{x:t.prevEvent.velocityX,y:t.prevEvent.velocityY}}}},{key:"preventDefault",value:function(){}},{key:"stopImmediatePropagation",value:function(){this.immediatePropagationStopped=this.propagationStopped=!0}},{key:"stopPropagation",value:function(){this.propagationStopped=!0}}]),n}(vt);Object.defineProperties(Se.prototype,{pageX:{get:function(){return this.page.x},set:function(t){this.page.x=t}},pageY:{get:function(){return this.page.y},set:function(t){this.page.y=t}},clientX:{get:function(){return this.client.x},set:function(t){this.client.x=t}},clientY:{get:function(){return this.client.y},set:function(t){this.client.y=t}},dx:{get:function(){return this.delta.x},set:function(t){this.delta.x=t}},dy:{get:function(){return this.delta.y},set:function(t){this.delta.y=t}},velocityX:{get:function(){return this.velocity.x},set:function(t){this.velocity.x=t}},velocityY:{get:function(){return this.velocity.y},set:function(t){this.velocity.y=t}}});var _e=o((function t(e,n,i,o,s){r(this,t),a(this,"id",void 0),a(this,"pointer",void 0),a(this,"event",void 0),a(this,"downTime",void 0),a(this,"downTarget",void 0),this.id=e,this.pointer=n,this.event=i,this.downTime=o,this.downTarget=s})),Pe=function(t){return t.interactable="",t.element="",t.prepared="",t.pointerIsDown="",t.pointerWasMoved="",t._proxy="",t}({}),Oe=function(t){return t.start="",t.move="",t.end="",t.stop="",t.interacting="",t}({}),ke=0,De=function(){function t(e){var n=this,i=e.pointerType,o=e.scopeFire;r(this,t),a(this,"interactable",null),a(this,"element",null),a(this,"rect",null),a(this,"_rects",void 0),a(this,"edges",null),a(this,"_scopeFire",void 0),a(this,"prepared",{name:null,axis:null,edges:null}),a(this,"pointerType",void 0),a(this,"pointers",[]),a(this,"downEvent",null),a(this,"downPointer",{}),a(this,"_latestPointer",{pointer:null,event:null,eventTarget:null}),a(this,"prevEvent",null),a(this,"pointerIsDown",!1),a(this,"pointerWasMoved",!1),a(this,"_interacting",!1),a(this,"_ending",!1),a(this,"_stopped",!0),a(this,"_proxy",void 0),a(this,"simulation",null),a(this,"doMove",Nt((function(t){this.move(t)}),"The interaction.doMove() method has been renamed to interaction.move()")),a(this,"coords",{start:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},prev:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},cur:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},delta:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0},velocity:{page:{x:0,y:0},client:{x:0,y:0},timeStamp:0}}),a(this,"_id",ke++),this._scopeFire=o,this.pointerType=i;var s=this;this._proxy={};var c=function(t){Object.defineProperty(n._proxy,t,{get:function(){return s[t]}})};for(var l in Pe)c(l);var u=function(t){Object.defineProperty(n._proxy,t,{value:function(){return s[t].apply(s,arguments)}})};for(var p in Oe)u(p);this._scopeFire("interactions:new",{interaction:this})}return o(t,[{key:"pointerMoveTolerance",get:function(){return 1}},{key:"pointerDown",value:function(t,e,n){var r=this.updatePointer(t,e,n,!0),i=this.pointers[r];this._scopeFire("interactions:down",{pointer:t,event:e,eventTarget:n,pointerIndex:r,pointerInfo:i,type:"down",interaction:this})}},{key:"start",value:function(t,e,n){return!(this.interacting()||!this.pointerIsDown||this.pointers.length<("gesture"===t.name?2:1)||!e.options[t.name].enabled)&&(Ut(this.prepared,t),this.interactable=e,this.element=n,this.rect=e.getRect(n),this.edges=this.prepared.edges?V({},this.prepared.edges):{left:!0,right:!0,top:!0,bottom:!0},this._stopped=!1,this._interacting=this._doPhase({interaction:this,event:this.downEvent,phase:"start"})&&!this._stopped,this._interacting)}},{key:"pointerMove",value:function(t,e,n){this.simulation||this.modification&&this.modification.endResult||this.updatePointer(t,e,n,!1);var r,i,o=this.coords.cur.page.x===this.coords.prev.page.x&&this.coords.cur.page.y===this.coords.prev.page.y&&this.coords.cur.client.x===this.coords.prev.client.x&&this.coords.cur.client.y===this.coords.prev.client.y;this.pointerIsDown&&!this.pointerWasMoved&&(r=this.coords.cur.client.x-this.coords.start.client.x,i=this.coords.cur.client.y-this.coords.start.client.y,this.pointerWasMoved=Q(r,i)>this.pointerMoveTolerance);var a,s,c,l=this.getPointerIndex(t),u={pointer:t,pointerIndex:l,pointerInfo:this.pointers[l],event:e,type:"move",eventTarget:n,dx:r,dy:i,duplicate:o,interaction:this};o||(a=this.coords.velocity,s=this.coords.delta,c=Math.max(s.timeStamp/1e3,.001),a.page.x=s.page.x/c,a.page.y=s.page.y/c,a.client.x=s.client.x/c,a.client.y=s.client.y/c,a.timeStamp=c),this._scopeFire("interactions:move",u),o||this.simulation||(this.interacting()&&(u.type=null,this.move(u)),this.pointerWasMoved&&et(this.coords.prev,this.coords.cur))}},{key:"move",value:function(t){t&&t.event||nt(this.coords.delta),(t=V({pointer:this._latestPointer.pointer,event:this._latestPointer.event,eventTarget:this._latestPointer.eventTarget,interaction:this},t||{})).phase="move",this._doPhase(t)}},{key:"pointerUp",value:function(t,e,n,r){var i=this.getPointerIndex(t);-1===i&&(i=this.updatePointer(t,e,n,!1));var o=/cancel$/i.test(e.type)?"cancel":"up";this._scopeFire("interactions:".concat(o),{pointer:t,pointerIndex:i,pointerInfo:this.pointers[i],event:e,eventTarget:n,type:o,curEventTarget:r,interaction:this}),this.simulation||this.end(e),this.removePointer(t,e)}},{key:"documentBlur",value:function(t){this.end(t),this._scopeFire("interactions:blur",{event:t,type:"blur",interaction:this})}},{key:"end",value:function(t){var e;this._ending=!0,t=t||this._latestPointer.event,this.interacting()&&(e=this._doPhase({event:t,interaction:this,phase:"end"})),this._ending=!1,!0===e&&this.stop()}},{key:"currentAction",value:function(){return this._interacting?this.prepared.name:null}},{key:"interacting",value:function(){return this._interacting}},{key:"stop",value:function(){this._scopeFire("interactions:stop",{interaction:this}),this.interactable=this.element=null,this._interacting=!1,this._stopped=!0,this.prepared.name=this.prevEvent=null}},{key:"getPointerIndex",value:function(t){var e=at(t);return"mouse"===this.pointerType||"pen"===this.pointerType?this.pointers.length-1:yt(this.pointers,(function(t){return t.id===e}))}},{key:"getPointerInfo",value:function(t){return this.pointers[this.getPointerIndex(t)]}},{key:"updatePointer",value:function(t,e,n,r){var i,o,a,s=at(t),c=this.getPointerIndex(t),l=this.pointers[c];return r=!1!==r&&(r||/(down|start)$/i.test(e.type)),l?l.pointer=t:(l=new _e(s,t,e,null,null),c=this.pointers.length,this.pointers.push(l)),st(this.coords.cur,this.pointers.map((function(t){return t.pointer})),this._now()),i=this.coords.delta,o=this.coords.prev,a=this.coords.cur,i.page.x=a.page.x-o.page.x,i.page.y=a.page.y-o.page.y,i.client.x=a.client.x-o.client.x,i.client.y=a.client.y-o.client.y,i.timeStamp=a.timeStamp-o.timeStamp,r&&(this.pointerIsDown=!0,l.downTime=this.coords.cur.timeStamp,l.downTarget=n,tt(this.downPointer,t),this.interacting()||(et(this.coords.start,this.coords.cur),et(this.coords.prev,this.coords.cur),this.downEvent=e,this.pointerWasMoved=!1)),this._updateLatestPointer(t,e,n),this._scopeFire("interactions:update-pointer",{pointer:t,event:e,eventTarget:n,down:r,pointerInfo:l,pointerIndex:c,interaction:this}),c}},{key:"removePointer",value:function(t,e){var n=this.getPointerIndex(t);if(-1!==n){var r=this.pointers[n];this._scopeFire("interactions:remove-pointer",{pointer:t,event:e,eventTarget:null,pointerIndex:n,pointerInfo:r,interaction:this}),this.pointers.splice(n,1),this.pointerIsDown=!1}}},{key:"_updateLatestPointer",value:function(t,e,n){this._latestPointer.pointer=t,this._latestPointer.event=e,this._latestPointer.eventTarget=n}},{key:"destroy",value:function(){this._latestPointer.pointer=null,this._latestPointer.event=null,this._latestPointer.eventTarget=null}},{key:"_createPreparedEvent",value:function(t,e,n,r){return new Se(this,t,this.prepared.name,e,this.element,n,r)}},{key:"_fireEvent",value:function(t){var e;null==(e=this.interactable)||e.fire(t),(!this.prevEvent||t.timeStamp>=this.prevEvent.timeStamp)&&(this.prevEvent=t)}},{key:"_doPhase",value:function(t){var e=t.event,n=t.phase,r=t.preEnd,i=t.type,o=this.rect;if(o&&"move"===n&&(H(this.edges,o,this.coords.delta[this.interactable.options.deltaSource]),o.width=o.right-o.left,o.height=o.bottom-o.top),!1===this._scopeFire("interactions:before-action-".concat(n),t))return!1;var a=t.iEvent=this._createPreparedEvent(e,n,r,i);return this._scopeFire("interactions:action-".concat(n),t),"start"===n&&(this.prevEvent=a),this._fireEvent(a),this._scopeFire("interactions:after-action-".concat(n),t),!0}},{key:"_now",value:function(){return Date.now()}}]),t}();function Ie(t){Me(t.interaction)}function Me(t){if(!function(t){return!(!t.offset.pending.x&&!t.offset.pending.y)}(t))return!1;var e=t.offset.pending;return Ae(t.coords.cur,e),Ae(t.coords.delta,e),H(t.edges,t.rect,e),e.x=0,e.y=0,!0}function ze(t){var e=t.x,n=t.y;this.offset.pending.x+=e,this.offset.pending.y+=n,this.offset.total.x+=e,this.offset.total.y+=n}function Ae(t,e){var n=t.page,r=t.client,i=e.x,o=e.y;n.x+=i,n.y+=o,r.x+=i,r.y+=o}Oe.offsetBy="";var Re={id:"offset",before:["modifiers","pointer-events","actions","inertia"],install:function(t){t.Interaction.prototype.offsetBy=ze},listeners:{"interactions:new":function(t){t.interaction.offset={total:{x:0,y:0},pending:{x:0,y:0}}},"interactions:update-pointer":function(t){return function(t){t.pointerIsDown&&(Ae(t.coords.cur,t.offset.total),t.offset.pending.x=0,t.offset.pending.y=0)}(t.interaction)},"interactions:before-action-start":Ie,"interactions:before-action-move":Ie,"interactions:before-action-end":function(t){var e=t.interaction;if(Me(e))return e.move({offset:!0}),e.end(),!1},"interactions:stop":function(t){var e=t.interaction;e.offset.total.x=0,e.offset.total.y=0,e.offset.pending.x=0,e.offset.pending.y=0}}},Ce=Re;var je=function(){function t(e){r(this,t),a(this,"active",!1),a(this,"isModified",!1),a(this,"smoothEnd",!1),a(this,"allowResume",!1),a(this,"modification",void 0),a(this,"modifierCount",0),a(this,"modifierArg",void 0),a(this,"startCoords",void 0),a(this,"t0",0),a(this,"v0",0),a(this,"te",0),a(this,"targetOffset",void 0),a(this,"modifiedOffset",void 0),a(this,"currentOffset",void 0),a(this,"lambda_v0",0),a(this,"one_ve_v0",0),a(this,"timeout",void 0),a(this,"interaction",void 0),this.interaction=e}return o(t,[{key:"start",value:function(t){var e=this.interaction,n=Fe(e);if(!n||!n.enabled)return!1;var r=e.coords.velocity.client,i=Q(r.x,r.y),o=this.modification||(this.modification=new me(e));if(o.copyFrom(e.modification),this.t0=e._now(),this.allowResume=n.allowResume,this.v0=i,this.currentOffset={x:0,y:0},this.startCoords=e.coords.cur.page,this.modifierArg=o.fillArg({pageCoords:this.startCoords,preEnd:!0,phase:"inertiastart"}),this.t0-e.coords.cur.timeStamp<50&&i>n.minSpeed&&i>n.endSpeed)this.startInertia();else{if(o.result=o.setAll(this.modifierArg),!o.result.changed)return!1;this.startSmoothEnd()}return e.modification.result.rect=null,e.offsetBy(this.targetOffset),e._doPhase({interaction:e,event:t,phase:"inertiastart"}),e.offsetBy({x:-this.targetOffset.x,y:-this.targetOffset.y}),e.modification.result.rect=null,this.active=!0,e.simulation=this,!0}},{key:"startInertia",value:function(){var t=this,e=this.interaction.coords.velocity.client,n=Fe(this.interaction),r=n.resistance,i=-Math.log(n.endSpeed/this.v0)/r;this.targetOffset={x:(e.x-i)/r,y:(e.y-i)/r},this.te=i,this.lambda_v0=r/this.v0,this.one_ve_v0=1-n.endSpeed/this.v0;var o=this.modification,a=this.modifierArg;a.pageCoords={x:this.startCoords.x+this.targetOffset.x,y:this.startCoords.y+this.targetOffset.y},o.result=o.setAll(a),o.result.changed&&(this.isModified=!0,this.modifiedOffset={x:this.targetOffset.x+o.result.delta.x,y:this.targetOffset.y+o.result.delta.y}),this.onNextFrame((function(){return t.inertiaTick()}))}},{key:"startSmoothEnd",value:function(){var t=this;this.smoothEnd=!0,this.isModified=!0,this.targetOffset={x:this.modification.result.delta.x,y:this.modification.result.delta.y},this.onNextFrame((function(){return t.smoothEndTick()}))}},{key:"onNextFrame",value:function(t){var e=this;this.timeout=Lt.request((function(){e.active&&t()}))}},{key:"inertiaTick",value:function(){var t,e,n,r,i,o,a,s=this,c=this.interaction,l=Fe(c).resistance,u=(c._now()-this.t0)/1e3;if(u=0;a--){var d=p[a];if(d.selector===t&&d.context===e){for(var h=d.listeners,v=h.length-1;v>=0;v--){var g=h[v];if(g.func===i&&Ne(g.options,u)){h.splice(v,1),h.length||(p.splice(a,1),s(e,n,c),s(e,n,l,!0)),f=!0;break}}if(f)break}}},delegateListener:c,delegateUseCapture:l,delegatedEvents:r,documents:i,targets:n,supportsOptions:!1,supportsPassive:!1};function a(t,e,r,i){if(t.addEventListener){var a=Ge(i),s=bt(n,(function(e){return e.eventTarget===t}));s||(s={eventTarget:t,events:{}},n.push(s)),s.events[e]||(s.events[e]=[]),bt(s.events[e],(function(t){return t.func===r&&Ne(t.options,a)}))||(t.addEventListener(e,r,o.supportsOptions?a:a.capture),s.events[e].push({func:r,options:a}))}}function s(t,e,r,i){if(t.addEventListener&&t.removeEventListener){var a=yt(n,(function(e){return e.eventTarget===t})),c=n[a];if(c&&c.events)if("all"!==e){var l=!1,u=c.events[e];if(u){if("all"===r){for(var p=u.length-1;p>=0;p--){var f=u[p];s(t,e,f.func,f.options)}return}for(var d=Ge(i),h=0;h=2)continue;if(!i.interacting()&&e===i.pointerType)return i}return null}};function Ke(t,e){return t.pointers.some((function(t){return t.id===e}))}var $e=He,Je=["pointerDown","pointerMove","pointerUp","updatePointer","removePointer","windowBlur"];function Qe(t,e){return function(n){var r=e.interactions.list,i=dt(n),o=ht(n),a=o[0],s=o[1],c=[];if(/^touch/.test(n.type)){e.prevTouchTime=e.now();for(var l=0,u=n.changedTouches;l=0;r--){var i=e.interactions.list[r];i.interactable===n&&(i.stop(),e.fire("interactions:destroy",{interaction:i}),i.destroy(),e.interactions.list.length>2&&e.interactions.list.splice(r,1))}}},onDocSignal:tn,doOnInteractions:Qe,methodNames:Je},nn=en,rn=function(t){return t[t.On=0]="On",t[t.Off=1]="Off",t}(rn||{}),on=function(){function t(e,n,i,o){r(this,t),a(this,"target",void 0),a(this,"options",void 0),a(this,"_actions",void 0),a(this,"events",new Ve),a(this,"_context",void 0),a(this,"_win",void 0),a(this,"_doc",void 0),a(this,"_scopeEvents",void 0),this._actions=n.actions,this.target=e,this._context=n.context||i,this._win=y(B(e)?this._context:e),this._doc=this._win.document,this._scopeEvents=o,this.set(n)}return o(t,[{key:"_defaults",get:function(){return{base:{},perAction:{},actions:{}}}},{key:"setOnEvents",value:function(t,e){return w.func(e.onstart)&&this.on("".concat(t,"start"),e.onstart),w.func(e.onmove)&&this.on("".concat(t,"move"),e.onmove),w.func(e.onend)&&this.on("".concat(t,"end"),e.onend),w.func(e.oninertiastart)&&this.on("".concat(t,"inertiastart"),e.oninertiastart),this}},{key:"updatePerActionListeners",value:function(t,e,n){var r,i=this,o=null==(r=this._actions.map[t])?void 0:r.filterEventType,a=function(t){return(null==o||o(t))&&ve(t,i._actions)};(w.array(e)||w.object(e))&&this._onOff(rn.Off,t,e,void 0,a),(w.array(n)||w.object(n))&&this._onOff(rn.On,t,n,void 0,a)}},{key:"setPerAction",value:function(t,e){var n=this._defaults;for(var r in e){var i=r,o=this.options[t],a=e[i];"listeners"===i&&this.updatePerActionListeners(t,o.listeners,a),w.array(a)?o[i]=mt(a):w.plainObject(a)?(o[i]=V(o[i]||{},ge(a)),w.object(n.perAction[i])&&"enabled"in n.perAction[i]&&(o[i].enabled=!1!==a.enabled)):w.bool(a)&&w.object(n.perAction[i])?o[i].enabled=a:o[i]=a}}},{key:"getRect",value:function(t){return t=t||(w.element(this.target)?this.target:null),w.string(this.target)&&(t=t||this._context.querySelector(this.target)),L(t)}},{key:"rectChecker",value:function(t){var e=this;return w.func(t)?(this.getRect=function(n){var r=V({},t.apply(e,n));return"width"in r||(r.width=r.right-r.left,r.height=r.bottom-r.top),r},this):null===t?(delete this.getRect,this):this.getRect}},{key:"_backCompatOption",value:function(t,e){if(B(e)||w.object(e)){for(var n in this.options[t]=e,this._actions.map)this.options[n][t]=e;return this}return this.options[t]}},{key:"origin",value:function(t){return this._backCompatOption("origin",t)}},{key:"deltaSource",value:function(t){return"page"===t||"client"===t?(this.options.deltaSource=t,this):this.options.deltaSource}},{key:"getAllElements",value:function(){var t=this.target;return w.string(t)?Array.from(this._context.querySelectorAll(t)):w.func(t)&&t.getAllElements?t.getAllElements():w.element(t)?[t]:[]}},{key:"context",value:function(){return this._context}},{key:"inContext",value:function(t){return this._context===t.ownerDocument||M(this._context,t)}},{key:"testIgnoreAllow",value:function(t,e,n){return!this.testIgnore(t.ignoreFrom,e,n)&&this.testAllow(t.allowFrom,e,n)}},{key:"testAllow",value:function(t,e,n){return!t||!!w.element(n)&&(w.string(t)?F(n,t,e):!!w.element(t)&&M(t,n))}},{key:"testIgnore",value:function(t,e,n){return!(!t||!w.element(n))&&(w.string(t)?F(n,t,e):!!w.element(t)&&M(t,n))}},{key:"fire",value:function(t){return this.events.fire(t),this}},{key:"_onOff",value:function(t,e,n,r,i){w.object(e)&&!w.array(e)&&(r=n,n=null);var o=$(e,n,i);for(var a in o){"wheel"===a&&(a=I.wheelEvent);for(var s=0,c=o[a];s=0;n--){var r=e[n],i=r.selector,o=r.context,a=r.listeners;i===this.target&&o===this._context&&e.splice(n,1);for(var s=a.length-1;s>=0;s--)this._scopeEvents.removeDelegate(this.target,this._context,t,a[s][0],a[s][1])}else this._scopeEvents.remove(this.target,"all")}}]),t}(),an=function(){function t(e){var n=this;r(this,t),a(this,"list",[]),a(this,"selectorMap",{}),a(this,"scope",void 0),this.scope=e,e.addListeners({"interactable:unset":function(t){var e=t.interactable,r=e.target,i=w.string(r)?n.selectorMap[r]:r[n.scope.id],o=yt(i,(function(t){return t===e}));i.splice(o,1)}})}return o(t,[{key:"new",value:function(t,e){e=V(e||{},{actions:this.scope.actions});var n=new this.scope.Interactable(t,e,this.scope.document,this.scope.events);return this.scope.addDocument(n._doc),this.list.push(n),w.string(t)?(this.selectorMap[t]||(this.selectorMap[t]=[]),this.selectorMap[t].push(n)):(n.target[this.scope.id]||Object.defineProperty(t,this.scope.id,{value:[],configurable:!0}),t[this.scope.id].push(n)),this.scope.fire("interactable:new",{target:t,options:e,interactable:n,win:this.scope._win}),n}},{key:"getExisting",value:function(t,e){var n=e&&e.context||this.scope.document,r=w.string(t),i=r?this.selectorMap[t]:t[this.scope.id];if(i)return bt(i,(function(e){return e._context===n&&(r||e.inContext(t))}))}},{key:"forEachMatch",value:function(t,e){for(var n=0,r=this.list;nMath.abs(u.y),l.coords,l.rect),V(i,l.coords));return l.eventProps},defaults:{ratio:"preserve",equalDelta:!1,modifiers:[],enabled:!1}};function gn(t,e,n){var r=t.startCoords,i=t.edgeSign;e?n.y=r.y+(n.x-r.x)*i.y:n.x=r.x+(n.y-r.y)*i.x}function mn(t,e,n,r){var i=t.startRect,o=t.startCoords,a=t.ratio,s=t.edgeSign;if(e){var c=r.width/a;n.y=o.y+(c-i.height)*s.y}else{var l=r.height*a;n.x=o.x+(l-i.width)*s.x}}var yn=be(vn,"aspectRatio"),bn=function(){};bn._defaults={};var xn=bn;function wn(t,e,n){return w.func(t)?G(t,e.interactable,e.element,[n.x,n.y,e]):G(t,e.interactable,e.element)}var En={start:function(t){var e=t.rect,n=t.startOffset,r=t.state,i=t.interaction,o=t.pageCoords,a=r.options,s=a.elementRect,c=V({left:0,top:0,right:0,bottom:0},a.offset||{});if(e&&s){var l=wn(a.restriction,i,o);if(l){var u=l.right-l.left-e.width,p=l.bottom-l.top-e.height;u<0&&(c.left+=u,c.right+=u),p<0&&(c.top+=p,c.bottom+=p)}c.left+=n.left-e.width*s.left,c.top+=n.top-e.height*s.top,c.right+=n.right-e.width*(1-s.right),c.bottom+=n.bottom-e.height*(1-s.bottom)}r.offset=c},set:function(t){var e=t.coords,n=t.interaction,r=t.state,i=r.options,o=r.offset,a=wn(i.restriction,n,e);if(a){var s=function(t){return!t||"left"in t&&"top"in t||((t=V({},t)).left=t.x||0,t.top=t.y||0,t.right=t.right||t.left+t.width,t.bottom=t.bottom||t.top+t.height),t}(a);e.x=Math.max(Math.min(s.right-o.right,e.x),s.left+o.left),e.y=Math.max(Math.min(s.bottom-o.bottom,e.y),s.top+o.top)}},defaults:{restriction:null,elementRect:null,offset:null,endOnly:!1,enabled:!1}},Tn=be(En,"restrict"),Sn={top:1/0,left:1/0,bottom:-1/0,right:-1/0},_n={top:-1/0,left:-1/0,bottom:1/0,right:1/0};function Pn(t,e){for(var n=0,r=["top","left","bottom","right"];n !!(thing && thing.Window) && thing instanceof thing.Window\n","import isWindow from './isWindow'\n\nexport let realWindow = undefined as Window\n\nlet win = undefined as Window\nexport { win as window }\n\nexport function init(window: Window & { wrap?: (...args: any[]) => any }) {\n // get wrapped window if using Shadow DOM polyfill\n\n realWindow = window\n\n // create a TextNode\n const el = window.document.createTextNode('')\n\n // check if it's wrapped by a polyfill\n if (el.ownerDocument !== window.document && typeof window.wrap === 'function' && window.wrap(el) === el) {\n // use wrapped window\n window = window.wrap(window)\n }\n\n win = window\n}\n\nif (typeof window !== 'undefined' && !!window) {\n init(window)\n}\n\nexport function getWindow(node: any) {\n if (isWindow(node)) {\n return node\n }\n\n const rootNode = node.ownerDocument || node\n\n return rootNode.defaultView || win.window\n}\n","import isWindow from './isWindow'\nimport * as win from './window'\n\nconst window = (thing: any): thing is Window => thing === win.window || isWindow(thing)\n\nconst docFrag = (thing: any): thing is DocumentFragment => object(thing) && thing.nodeType === 11\n\nconst object = (thing: any): thing is { [index: string]: any } => !!thing && typeof thing === 'object'\n\nconst func = (thing: any): thing is (...args: any[]) => any => typeof thing === 'function'\n\nconst number = (thing: any): thing is number => typeof thing === 'number'\n\nconst bool = (thing: any): thing is boolean => typeof thing === 'boolean'\n\nconst string = (thing: any): thing is string => typeof thing === 'string'\n\nconst element = (thing: any): thing is HTMLElement | SVGElement => {\n if (!thing || typeof thing !== 'object') {\n return false\n }\n\n const _window = win.getWindow(thing) || win.window\n\n return /object|function/.test(typeof Element)\n ? thing instanceof Element || thing instanceof _window.Element\n : thing.nodeType === 1 && typeof thing.nodeName === 'string'\n}\n\nconst plainObject: typeof object = (thing: any): thing is { [index: string]: any } =>\n object(thing) && !!thing.constructor && /function Object\\b/.test(thing.constructor.toString())\n\nconst array = (thing: any): thing is T[] =>\n object(thing) && typeof thing.length !== 'undefined' && func(thing.splice)\n\nexport default {\n window,\n docFrag,\n object,\n func,\n number,\n bool,\n string,\n element,\n plainObject,\n array,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n draggable(options: Partial> | boolean): this\n draggable(): DraggableOptions\n /**\n * ```js\n * interact(element).draggable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // the axis in which the first movement must be\n * // for the drag sequence to start\n * // 'xy' by default - any direction\n * startAxis: 'x' || 'y' || 'xy',\n *\n * // 'xy' by default - don't restrict to one axis (move in any direction)\n * // 'x' or 'y' to restrict movement to either axis\n * // 'start' to restrict movement to the axis the drag started in\n * lockAxis: 'x' || 'y' || 'xy' || 'start',\n *\n * // max number of drags that can happen concurrently\n * // with elements of this Interactable. Infinity by default\n * max: Infinity,\n *\n * // max number of drags that can target the same element+Interactable\n * // 1 by default\n * maxPerElement: 2\n * })\n *\n * var isDraggable = interact('element').draggable(); // true\n * ```\n *\n * Get or set whether drag actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on drag events (object makes the Interactable\n * draggable)\n */\n draggable(options?: Partial> | boolean): this | DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drag: DraggableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drag?: typeof drag\n }\n}\n\nexport type DragEvent = InteractEvent<'drag'>\n\nexport interface DraggableOptions extends PerActionDefaults {\n startAxis?: 'x' | 'y' | 'xy'\n lockAxis?: 'x' | 'y' | 'xy' | 'start'\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.draggable = drag.draggable\n\n actions.map.drag = drag\n actions.methodDict.drag = 'draggable'\n\n defaults.actions.drag = drag.defaults\n}\n\nfunction beforeMove({ interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x') {\n interaction.coords.cur.page.y = interaction.coords.start.page.y\n interaction.coords.cur.client.y = interaction.coords.start.client.y\n\n interaction.coords.velocity.client.y = 0\n interaction.coords.velocity.page.y = 0\n } else if (axis === 'y') {\n interaction.coords.cur.page.x = interaction.coords.start.page.x\n interaction.coords.cur.client.x = interaction.coords.start.client.x\n\n interaction.coords.velocity.client.x = 0\n interaction.coords.velocity.page.x = 0\n }\n}\n\nfunction move({ iEvent, interaction }) {\n if (interaction.prepared.name !== 'drag') return\n\n const axis = interaction.prepared.axis\n\n if (axis === 'x' || axis === 'y') {\n const opposite = axis === 'x' ? 'y' : 'x'\n\n iEvent.page[opposite] = interaction.coords.start.page[opposite]\n iEvent.client[opposite] = interaction.coords.start.client[opposite]\n iEvent.delta[opposite] = 0\n }\n}\n\nconst draggable: Interactable['draggable'] = function draggable(\n this: Interactable,\n options?: DraggableOptions | boolean,\n): any {\n if (is.object(options)) {\n this.options.drag.enabled = options.enabled !== false\n this.setPerAction('drag', options)\n this.setOnEvents('drag', options)\n\n if (/^(xy|x|y|start)$/.test(options.lockAxis)) {\n this.options.drag.lockAxis = options.lockAxis\n }\n if (/^(xy|x|y)$/.test(options.startAxis)) {\n this.options.drag.startAxis = options.startAxis\n }\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.drag.enabled = options\n\n return this\n }\n\n return this.options.drag as DraggableOptions\n}\n\nconst drag: Plugin = {\n id: 'actions/drag',\n install,\n listeners: {\n 'interactions:before-action-move': beforeMove,\n 'interactions:action-resume': beforeMove,\n\n // dragmove\n 'interactions:action-move': move,\n 'auto-start:check': (arg) => {\n const { interaction, interactable, buttons } = arg\n const dragOptions = interactable.options.drag\n\n if (\n !(dragOptions && dragOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & interactable.options.drag.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n arg.action = {\n name: 'drag',\n axis: dragOptions.lockAxis === 'start' ? dragOptions.startAxis : dragOptions.lockAxis,\n }\n\n return false\n },\n },\n draggable,\n beforeMove,\n move,\n defaults: {\n startAxis: 'xy',\n lockAxis: 'xy',\n } as DraggableOptions,\n\n getCursor() {\n return 'move'\n },\n\n filterEventType: (type: string) => type.search('drag') === 0,\n}\n\nexport default drag\n","const domObjects: {\n init: any\n document: Document\n DocumentFragment: typeof DocumentFragment\n SVGElement: typeof SVGElement\n SVGSVGElement: typeof SVGSVGElement\n SVGElementInstance: any\n Element: typeof Element\n HTMLElement: typeof HTMLElement\n Event: typeof Event\n Touch: typeof Touch\n PointerEvent: typeof PointerEvent\n} = {\n init,\n document: null,\n DocumentFragment: null,\n SVGElement: null,\n SVGSVGElement: null,\n SVGElementInstance: null,\n Element: null,\n HTMLElement: null,\n Event: null,\n Touch: null,\n PointerEvent: null,\n}\n\nfunction blank() {}\n\nexport default domObjects\n\nfunction init(window: Window) {\n const win = window as any\n\n domObjects.document = win.document\n domObjects.DocumentFragment = win.DocumentFragment || blank\n domObjects.SVGElement = win.SVGElement || blank\n domObjects.SVGSVGElement = win.SVGSVGElement || blank\n domObjects.SVGElementInstance = win.SVGElementInstance || blank\n domObjects.Element = win.Element || blank\n domObjects.HTMLElement = win.HTMLElement || domObjects.Element\n\n domObjects.Event = win.Event\n domObjects.Touch = win.Touch || blank\n domObjects.PointerEvent = win.PointerEvent || win.MSPointerEvent\n}\n","import domObjects from './domObjects'\nimport is from './is'\n\nconst browser = {\n init,\n supportsTouch: null as boolean,\n supportsPointerEvent: null as boolean,\n isIOS7: null as boolean,\n isIOS: null as boolean,\n isIe9: null as boolean,\n isOperaMobile: null as boolean,\n prefixedMatchesSelector: null as 'matches',\n pEventTypes: null as {\n up: string\n down: string\n over: string\n out: string\n move: string\n cancel: string\n },\n wheelEvent: null as string,\n}\n\nfunction init(window: any) {\n const Element = domObjects.Element\n const navigator: Partial = window.navigator || {}\n\n // Does the browser support touch input?\n browser.supportsTouch =\n 'ontouchstart' in window ||\n (is.func(window.DocumentTouch) && domObjects.document instanceof window.DocumentTouch)\n\n // Does the browser support PointerEvents\n // https://github.com/taye/interact.js/issues/703#issuecomment-471570492\n browser.supportsPointerEvent = (navigator as any).pointerEnabled !== false && !!domObjects.PointerEvent\n\n browser.isIOS = /iP(hone|od|ad)/.test(navigator.platform)\n\n // scrolling doesn't change the result of getClientRects on iOS 7\n browser.isIOS7 = /iP(hone|od|ad)/.test(navigator.platform) && /OS 7[^\\d]/.test(navigator.appVersion)\n\n browser.isIe9 = /MSIE 9/.test(navigator.userAgent)\n\n // Opera Mobile must be handled differently\n browser.isOperaMobile =\n navigator.appName === 'Opera' && browser.supportsTouch && /Presto/.test(navigator.userAgent)\n\n // prefix matchesSelector\n browser.prefixedMatchesSelector = (\n 'matches' in Element.prototype\n ? 'matches'\n : 'webkitMatchesSelector' in Element.prototype\n ? 'webkitMatchesSelector'\n : 'mozMatchesSelector' in Element.prototype\n ? 'mozMatchesSelector'\n : 'oMatchesSelector' in Element.prototype\n ? 'oMatchesSelector'\n : 'msMatchesSelector'\n ) as 'matches'\n\n browser.pEventTypes = browser.supportsPointerEvent\n ? domObjects.PointerEvent === window.MSPointerEvent\n ? {\n up: 'MSPointerUp',\n down: 'MSPointerDown',\n over: 'mouseover',\n out: 'mouseout',\n move: 'MSPointerMove',\n cancel: 'MSPointerCancel',\n }\n : {\n up: 'pointerup',\n down: 'pointerdown',\n over: 'pointerover',\n out: 'pointerout',\n move: 'pointermove',\n cancel: 'pointercancel',\n }\n : null\n\n // because Webkit and Opera still use 'mousewheel' event type\n browser.wheelEvent = domObjects.document && 'onmousewheel' in domObjects.document ? 'mousewheel' : 'wheel'\n}\n\nexport default browser\n","import type { Rect, Target, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport domObjects from './domObjects'\nimport is from './is'\nimport * as win from './window'\n\nexport function nodeContains(parent: Node, child: Node) {\n if (parent.contains) {\n return parent.contains(child as Node)\n }\n\n while (child) {\n if (child === parent) {\n return true\n }\n\n child = (child as Node).parentNode\n }\n\n return false\n}\n\nexport function closest(element: Node, selector: string) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return element\n }\n\n element = parentNode(element)\n }\n\n return null\n}\n\nexport function parentNode(node: Node | Document) {\n let parent = node.parentNode\n\n if (is.docFrag(parent)) {\n // skip past #shado-root fragments\n // tslint:disable-next-line\n while ((parent = (parent as any).host) && is.docFrag(parent)) {\n continue\n }\n\n return parent\n }\n\n return parent\n}\n\nexport function matchesSelector(element: Element, selector: string) {\n // remove /deep/ from selectors if shadowDOM polyfill is used\n if (win.window !== win.realWindow) {\n selector = selector.replace(/\\/deep\\//g, ' ')\n }\n\n return element[browser.prefixedMatchesSelector](selector)\n}\n\nconst getParent = (el: Node | Document | ShadowRoot) => el.parentNode || (el as ShadowRoot).host\n\n// Test for the element that's \"above\" all other qualifiers\nexport function indexOfDeepestElement(elements: Element[] | NodeListOf) {\n let deepestNodeParents: Node[] = []\n let deepestNodeIndex: number\n\n for (let i = 0; i < elements.length; i++) {\n const currentNode = elements[i]\n const deepestNode: Node = elements[deepestNodeIndex]\n\n // node may appear in elements array multiple times\n if (!currentNode || i === deepestNodeIndex) {\n continue\n }\n\n if (!deepestNode) {\n deepestNodeIndex = i\n continue\n }\n\n const currentNodeParent = getParent(currentNode)\n const deepestNodeParent = getParent(deepestNode)\n\n // check if the deepest or current are document.documentElement/rootElement\n // - if the current node is, do nothing and continue\n if (currentNodeParent === currentNode.ownerDocument) {\n continue\n }\n // - if deepest is, update with the current node and continue to next\n else if (deepestNodeParent === currentNode.ownerDocument) {\n deepestNodeIndex = i\n continue\n }\n\n // compare zIndex of siblings\n if (currentNodeParent === deepestNodeParent) {\n if (zIndexIsHigherThan(currentNode, deepestNode)) {\n deepestNodeIndex = i\n }\n\n continue\n }\n\n // populate the ancestry array for the latest deepest node\n deepestNodeParents = deepestNodeParents.length ? deepestNodeParents : getNodeParents(deepestNode)\n\n let ancestryStart: Node\n\n // if the deepest node is an HTMLElement and the current node is a non root svg element\n if (\n deepestNode instanceof domObjects.HTMLElement &&\n currentNode instanceof domObjects.SVGElement &&\n !(currentNode instanceof domObjects.SVGSVGElement)\n ) {\n // TODO: is this check necessary? Was this for HTML elements embedded in SVG?\n if (currentNode === deepestNodeParent) {\n continue\n }\n\n ancestryStart = currentNode.ownerSVGElement\n } else {\n ancestryStart = currentNode\n }\n\n const currentNodeParents = getNodeParents(ancestryStart, deepestNode.ownerDocument)\n let commonIndex = 0\n\n // get (position of closest common ancestor) + 1\n while (\n currentNodeParents[commonIndex] &&\n currentNodeParents[commonIndex] === deepestNodeParents[commonIndex]\n ) {\n commonIndex++\n }\n\n const parents = [\n currentNodeParents[commonIndex - 1],\n currentNodeParents[commonIndex],\n deepestNodeParents[commonIndex],\n ]\n\n if (parents[0]) {\n let child = parents[0].lastChild\n\n while (child) {\n if (child === parents[1]) {\n deepestNodeIndex = i\n deepestNodeParents = currentNodeParents\n\n break\n } else if (child === parents[2]) {\n break\n }\n\n child = child.previousSibling\n }\n }\n }\n\n return deepestNodeIndex\n}\n\nfunction getNodeParents(node: Node, limit?: Node) {\n const parents: Node[] = []\n let parent: Node = node\n let parentParent: Node\n\n while ((parentParent = getParent(parent)) && parent !== limit && parentParent !== parent.ownerDocument) {\n parents.unshift(parent)\n parent = parentParent\n }\n\n return parents\n}\n\nfunction zIndexIsHigherThan(higherNode: Node, lowerNode: Node) {\n const higherIndex = parseInt(win.getWindow(higherNode).getComputedStyle(higherNode).zIndex, 10) || 0\n const lowerIndex = parseInt(win.getWindow(lowerNode).getComputedStyle(lowerNode).zIndex, 10) || 0\n\n return higherIndex >= lowerIndex\n}\n\nexport function matchesUpTo(element: Element, selector: string, limit: Node) {\n while (is.element(element)) {\n if (matchesSelector(element, selector)) {\n return true\n }\n\n element = parentNode(element) as Element\n\n if (element === limit) {\n return matchesSelector(element, selector)\n }\n }\n\n return false\n}\n\nexport function getActualElement(element: Element) {\n return (element as any).correspondingUseElement || element\n}\n\nexport function getScrollXY(relevantWindow?: Window) {\n relevantWindow = relevantWindow || win.window\n return {\n x: relevantWindow.scrollX || relevantWindow.document.documentElement.scrollLeft,\n y: relevantWindow.scrollY || relevantWindow.document.documentElement.scrollTop,\n }\n}\n\nexport function getElementClientRect(element: Element): Required {\n const clientRect =\n element instanceof domObjects.SVGElement ? element.getBoundingClientRect() : element.getClientRects()[0]\n\n return (\n clientRect && {\n left: clientRect.left,\n right: clientRect.right,\n top: clientRect.top,\n bottom: clientRect.bottom,\n width: clientRect.width || clientRect.right - clientRect.left,\n height: clientRect.height || clientRect.bottom - clientRect.top,\n }\n )\n}\n\nexport function getElementRect(element: Element) {\n const clientRect = getElementClientRect(element)\n\n if (!browser.isIOS7 && clientRect) {\n const scroll = getScrollXY(win.getWindow(element))\n\n clientRect.left += scroll.x\n clientRect.right += scroll.x\n clientRect.top += scroll.y\n clientRect.bottom += scroll.y\n }\n\n return clientRect\n}\n\nexport function getPath(node: Node | Document) {\n const path = []\n\n while (node) {\n path.push(node)\n node = parentNode(node)\n }\n\n return path\n}\n\nexport function trySelector(value: Target) {\n if (!is.string(value)) {\n return false\n }\n\n // an exception will be raised if it is invalid\n domObjects.document.querySelector(value)\n return true\n}\n","export default function extend(dest: U & Partial, source: T): T & U {\n for (const prop in source) {\n ;(dest as unknown as T)[prop] = source[prop]\n }\n\n const ret = dest as T & U\n\n return ret\n}\n","import type {\n HasGetRect,\n RectResolvable,\n Rect,\n Element,\n Point,\n FullRect,\n EdgeOptions,\n} from '@interactjs/core/types'\n\nimport { closest, getElementRect, parentNode } from './domUtils'\nimport extend from './extend'\nimport is from './is'\n\nexport function getStringOptionResult(value: any, target: HasGetRect, element: Node) {\n if (value === 'parent') {\n return parentNode(element)\n }\n\n if (value === 'self') {\n return target.getRect(element as Element)\n }\n\n return closest(element, value)\n}\n\nexport function resolveRectLike(\n value: RectResolvable,\n target?: HasGetRect,\n element?: Node,\n functionArgs?: T,\n) {\n let returnValue: any = value\n if (is.string(returnValue)) {\n returnValue = getStringOptionResult(returnValue, target, element)\n } else if (is.func(returnValue)) {\n returnValue = returnValue(...functionArgs)\n }\n\n if (is.element(returnValue)) {\n returnValue = getElementRect(returnValue)\n }\n\n return returnValue as Rect\n}\n\nexport function toFullRect(rect: Rect): FullRect {\n const { top, left, bottom, right } = rect\n const width = rect.width ?? rect.right - rect.left\n const height = rect.height ?? rect.bottom - rect.top\n\n return { top, left, bottom, right, width, height }\n}\n\nexport function rectToXY(rect: Rect | Point) {\n return (\n rect && {\n x: 'x' in rect ? rect.x : rect.left,\n y: 'y' in rect ? rect.y : rect.top,\n }\n )\n}\n\nexport function xywhToTlbr>(rect: T) {\n if (rect && !('left' in rect && 'top' in rect)) {\n rect = extend({}, rect)\n\n rect.left = rect.x || 0\n rect.top = rect.y || 0\n rect.right = rect.right || rect.left + rect.width\n rect.bottom = rect.bottom || rect.top + rect.height\n }\n\n return rect as Rect & T\n}\n\nexport function tlbrToXywh(rect: Rect & Partial) {\n if (rect && !('x' in rect && 'y' in rect)) {\n rect = extend({}, rect)\n\n rect.x = rect.left || 0\n rect.y = rect.top || 0\n rect.width = rect.width || (rect.right || 0) - rect.x\n rect.height = rect.height || (rect.bottom || 0) - rect.y\n }\n\n return rect as FullRect & Point\n}\n\nexport function addEdges(edges: EdgeOptions, rect: Rect, delta: Point) {\n if (edges.left) {\n rect.left += delta.x\n }\n if (edges.right) {\n rect.right += delta.x\n }\n if (edges.top) {\n rect.top += delta.y\n }\n if (edges.bottom) {\n rect.bottom += delta.y\n }\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n}\n","import type { PerActionDefaults } from '@interactjs/core/options'\nimport type { ActionName, HasGetRect } from '@interactjs/core/types'\n\nimport { rectToXY, resolveRectLike } from './rect'\n\nexport default function getOriginXY(\n target: HasGetRect & { options: PerActionDefaults },\n element: Node,\n actionName?: ActionName,\n) {\n const actionOptions = actionName && (target.options as any)[actionName]\n const actionOrigin = actionOptions && actionOptions.origin\n const origin = actionOrigin || target.options.origin\n\n const originRect = resolveRectLike(origin, target, element, [target && element])\n\n return rectToXY(originRect) || { x: 0, y: 0 }\n}\n","import type { EventTypes, Listener, ListenersArg } from '@interactjs/core/types'\n\nimport is from './is'\n\nexport interface NormalizedListeners {\n [type: string]: Listener[]\n}\n\nexport default function normalize(\n type: EventTypes,\n listeners?: ListenersArg | ListenersArg[] | null,\n filter = (_typeOrPrefix: string) => true,\n result?: NormalizedListeners,\n): NormalizedListeners {\n result = result || {}\n\n if (is.string(type) && type.search(' ') !== -1) {\n type = split(type)\n }\n\n if (is.array(type)) {\n type.forEach((t) => normalize(t, listeners, filter, result))\n return result\n }\n\n // before: type = [{ drag: () => {} }], listeners = undefined\n // after: type = '' , listeners = [{ drag: () => {} }]\n if (is.object(type)) {\n listeners = type\n type = ''\n }\n\n if (is.func(listeners) && filter(type)) {\n result[type] = result[type] || []\n result[type].push(listeners)\n } else if (is.array(listeners)) {\n for (const l of listeners) {\n normalize(type, l, filter, result)\n }\n } else if (is.object(listeners)) {\n for (const prefix in listeners) {\n const combinedTypes = split(prefix).map((p) => `${type}${p}`)\n\n normalize(combinedTypes, listeners[prefix], filter, result)\n }\n }\n\n return result as NormalizedListeners\n}\n\nfunction split(type: string) {\n return type.trim().split(/ +/)\n}\n","export default (x: number, y: number) => Math.sqrt(x * x + y * y)\n","const VENDOR_PREFIXES = ['webkit', 'moz']\n\nexport default function pointerExtend(dest: Partial }>, source: T) {\n dest.__set ||= {} as any\n\n for (const prop in source) {\n // skip deprecated prefixed properties\n if (VENDOR_PREFIXES.some((prefix) => prop.indexOf(prefix) === 0)) continue\n\n if (typeof dest[prop] !== 'function' && prop !== '__set') {\n Object.defineProperty(dest, prop, {\n get() {\n if (prop in dest.__set) return dest.__set[prop]\n\n return (dest.__set[prop] = source[prop] as any)\n },\n set(value: any) {\n dest.__set[prop] = value\n },\n configurable: true,\n })\n }\n }\n return dest\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { CoordsSetMember, PointerType, Point, PointerEventType, Element } from '@interactjs/core/types'\n\nimport browser from './browser'\nimport dom from './domObjects'\nimport * as domUtils from './domUtils'\nimport hypot from './hypot'\nimport is from './is'\nimport pointerExtend from './pointerExtend'\n\nexport function copyCoords(dest: CoordsSetMember, src: CoordsSetMember) {\n dest.page = dest.page || ({} as any)\n dest.page.x = src.page.x\n dest.page.y = src.page.y\n\n dest.client = dest.client || ({} as any)\n dest.client.x = src.client.x\n dest.client.y = src.client.y\n\n dest.timeStamp = src.timeStamp\n}\n\nexport function setCoordDeltas(targetObj: CoordsSetMember, prev: CoordsSetMember, cur: CoordsSetMember) {\n targetObj.page.x = cur.page.x - prev.page.x\n targetObj.page.y = cur.page.y - prev.page.y\n targetObj.client.x = cur.client.x - prev.client.x\n targetObj.client.y = cur.client.y - prev.client.y\n targetObj.timeStamp = cur.timeStamp - prev.timeStamp\n}\n\nexport function setCoordVelocity(targetObj: CoordsSetMember, delta: CoordsSetMember) {\n const dt = Math.max(delta.timeStamp / 1000, 0.001)\n\n targetObj.page.x = delta.page.x / dt\n targetObj.page.y = delta.page.y / dt\n targetObj.client.x = delta.client.x / dt\n targetObj.client.y = delta.client.y / dt\n targetObj.timeStamp = dt\n}\n\nexport function setZeroCoords(targetObj: CoordsSetMember) {\n targetObj.page.x = 0\n targetObj.page.y = 0\n targetObj.client.x = 0\n targetObj.client.y = 0\n}\n\nexport function isNativePointer(pointer: any) {\n return pointer instanceof dom.Event || pointer instanceof dom.Touch\n}\n\n// Get specified X/Y coords for mouse or event.touches[0]\nexport function getXY(type: string, pointer: PointerType | InteractEvent, xy: Point) {\n xy = xy || ({} as Point)\n type = type || 'page'\n\n xy.x = pointer[(type + 'X') as 'pageX']\n xy.y = pointer[(type + 'Y') as 'pageY']\n\n return xy\n}\n\nexport function getPageXY(pointer: PointerType | InteractEvent, page?: Point) {\n page = page || { x: 0, y: 0 }\n\n // Opera Mobile handles the viewport and scrolling oddly\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n getXY('screen', pointer, page)\n\n page.x += window.scrollX\n page.y += window.scrollY\n } else {\n getXY('page', pointer, page)\n }\n\n return page\n}\n\nexport function getClientXY(pointer: PointerType, client: Point) {\n client = client || ({} as any)\n\n if (browser.isOperaMobile && isNativePointer(pointer)) {\n // Opera Mobile handles the viewport and scrolling oddly\n getXY('screen', pointer, client)\n } else {\n getXY('client', pointer, client)\n }\n\n return client\n}\n\nexport function getPointerId(pointer: { pointerId?: number; identifier?: number; type?: string }) {\n return is.number(pointer.pointerId) ? pointer.pointerId! : pointer.identifier!\n}\n\nexport function setCoords(dest: CoordsSetMember, pointers: any[], timeStamp: number) {\n const pointer = pointers.length > 1 ? pointerAverage(pointers) : pointers[0]\n\n getPageXY(pointer, dest.page)\n getClientXY(pointer, dest.client)\n\n dest.timeStamp = timeStamp\n}\n\nexport function getTouchPair(event: TouchEvent | PointerType[]) {\n const touches: PointerType[] = []\n\n // array of touches is supplied\n if (is.array(event)) {\n touches[0] = event[0]\n touches[1] = event[1]\n }\n // an event\n else {\n if (event.type === 'touchend') {\n if (event.touches.length === 1) {\n touches[0] = event.touches[0]\n touches[1] = event.changedTouches[0]\n } else if (event.touches.length === 0) {\n touches[0] = event.changedTouches[0]\n touches[1] = event.changedTouches[1]\n }\n } else {\n touches[0] = event.touches[0]\n touches[1] = event.touches[1]\n }\n }\n\n return touches\n}\n\nexport function pointerAverage(pointers: PointerType[]) {\n const average = {\n pageX: 0,\n pageY: 0,\n clientX: 0,\n clientY: 0,\n screenX: 0,\n screenY: 0,\n }\n\n type CoordKeys = keyof typeof average\n\n for (const pointer of pointers) {\n for (const prop in average) {\n average[prop as CoordKeys] += pointer[prop as CoordKeys]\n }\n }\n for (const prop in average) {\n average[prop as CoordKeys] /= pointers.length\n }\n\n return average\n}\n\nexport function touchBBox(event: PointerType[]) {\n if (!event.length) {\n return null\n }\n\n const touches = getTouchPair(event)\n const minX = Math.min(touches[0].pageX, touches[1].pageX)\n const minY = Math.min(touches[0].pageY, touches[1].pageY)\n const maxX = Math.max(touches[0].pageX, touches[1].pageX)\n const maxY = Math.max(touches[0].pageY, touches[1].pageY)\n\n return {\n x: minX,\n y: minY,\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n }\n}\n\nexport function touchDistance(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n\n const dx = touches[0][sourceX] - touches[1][sourceX]\n const dy = touches[0][sourceY] - touches[1][sourceY]\n\n return hypot(dx, dy)\n}\n\nexport function touchAngle(event: PointerType[] | TouchEvent, deltaSource: string) {\n const sourceX = (deltaSource + 'X') as 'pageX'\n const sourceY = (deltaSource + 'Y') as 'pageY'\n const touches = getTouchPair(event)\n const dx = touches[1][sourceX] - touches[0][sourceX]\n const dy = touches[1][sourceY] - touches[0][sourceY]\n const angle = (180 * Math.atan2(dy, dx)) / Math.PI\n\n return angle\n}\n\nexport function getPointerType(pointer: { pointerType?: string; identifier?: number; type?: string }) {\n return is.string(pointer.pointerType)\n ? pointer.pointerType\n : is.number(pointer.pointerType)\n ? [undefined, undefined, 'touch', 'pen', 'mouse'][pointer.pointerType]!\n : // if the PointerEvent API isn't available, then the \"pointer\" must\n // be either a MouseEvent, TouchEvent, or Touch object\n /touch/.test(pointer.type || '') || pointer instanceof dom.Touch\n ? 'touch'\n : 'mouse'\n}\n\n// [ event.target, event.currentTarget ]\nexport function getEventTargets(event: Event) {\n const path = is.func(event.composedPath)\n ? (event.composedPath() as Element[])\n : (event as unknown as { path: Element[] }).path\n\n return [\n domUtils.getActualElement(path ? path[0] : (event.target as Element)),\n domUtils.getActualElement(event.currentTarget as Element),\n ]\n}\n\nexport function newCoords(): CoordsSetMember {\n return {\n page: { x: 0, y: 0 },\n client: { x: 0, y: 0 },\n timeStamp: 0,\n }\n}\n\nexport function coordsToEvent(coords: MockCoords) {\n const event = {\n coords,\n get page() {\n return this.coords.page\n },\n get client() {\n return this.coords.client\n },\n get timeStamp() {\n return this.coords.timeStamp\n },\n get pageX() {\n return this.coords.page.x\n },\n get pageY() {\n return this.coords.page.y\n },\n get clientX() {\n return this.coords.client.x\n },\n get clientY() {\n return this.coords.client.y\n },\n get pointerId() {\n return this.coords.pointerId\n },\n get target() {\n return this.coords.target\n },\n get type() {\n return this.coords.type\n },\n get pointerType() {\n return this.coords.pointerType\n },\n get buttons() {\n return this.coords.buttons\n },\n preventDefault() {},\n }\n\n return event as typeof event & PointerType & PointerEventType\n}\n\nexport interface MockCoords {\n page: Point\n client: Point\n timeStamp?: number\n pointerId?: any\n target?: any\n type?: string\n pointerType?: string\n buttons?: number\n}\n\nexport { pointerExtend }\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName } from '@interactjs/core/types'\n\nexport class BaseEvent {\n declare type: string\n declare target: EventTarget\n declare currentTarget: Node\n declare interactable: Interactable\n /** @internal */\n declare _interaction: Interaction\n declare timeStamp: number\n immediatePropagationStopped = false\n propagationStopped = false\n\n constructor(interaction: Interaction) {\n this._interaction = interaction\n }\n\n preventDefault() {}\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface BaseEvent {\n interaction: InteractionProxy\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperty(BaseEvent.prototype, 'interaction', {\n get(this: BaseEvent) {\n return this._interaction._proxy\n },\n set(this: BaseEvent) {},\n})\n","type Filter = (element: T, index: number, array: T[]) => boolean\n\nexport const contains = (array: T[], target: T) => array.indexOf(target) !== -1\n\nexport const remove = (array: T[], target: T) => array.splice(array.indexOf(target), 1)\n\nexport const merge = (target: Array, source: U[]) => {\n for (const item of source) {\n target.push(item)\n }\n\n return target\n}\n\nexport const from = (source: ArrayLike) => merge([] as T[], source as T[])\n\nexport const findIndex = (array: T[], func: Filter) => {\n for (let i = 0; i < array.length; i++) {\n if (func(array[i], i, array)) {\n return i\n }\n }\n\n return -1\n}\n\nexport const find = (array: T[], func: Filter): T | undefined => array[findIndex(array, func)]\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\n\nimport type { DropState } from './plugin'\n\nexport class DropEvent extends BaseEvent<'drag'> {\n declare target: Element\n dropzone: Interactable\n dragEvent: InteractEvent<'drag'>\n relatedTarget: Element\n draggable: Interactable\n propagationStopped = false\n immediatePropagationStopped = false\n\n /**\n * Class of events fired on dropzones during drags with acceptable targets.\n */\n constructor(dropState: DropState, dragEvent: InteractEvent<'drag'>, type: string) {\n super(dragEvent._interaction)\n\n const { element, dropzone } = type === 'dragleave' ? dropState.prev : dropState.cur\n\n this.type = type\n this.target = element\n this.currentTarget = element\n this.dropzone = dropzone\n this.dragEvent = dragEvent\n this.relatedTarget = dragEvent.target\n this.draggable = dragEvent.interactable\n this.timeStamp = dragEvent.timeStamp\n }\n\n /**\n * If this is a `dropactivate` event, the dropzone element will be\n * deactivated.\n *\n * If this is a `dragmove` or `dragenter`, a `dragleave` will be fired on the\n * dropzone element and more.\n */\n reject() {\n const { dropState } = this._interaction\n\n if (\n this.type !== 'dropactivate' &&\n (!this.dropzone || dropState.cur.dropzone !== this.dropzone || dropState.cur.element !== this.target)\n ) {\n return\n }\n\n dropState.prev.dropzone = this.dropzone\n dropState.prev.element = this.target\n\n dropState.rejected = true\n dropState.events.enter = null\n\n this.stopImmediatePropagation()\n\n if (this.type === 'dropactivate') {\n const activeDrops = dropState.activeDrops\n const index = arr.findIndex(\n activeDrops,\n ({ dropzone, element }) => dropzone === this.dropzone && element === this.target,\n )\n\n dropState.activeDrops.splice(index, 1)\n\n const deactivateEvent = new DropEvent(dropState, this.dragEvent, 'dropdeactivate')\n\n deactivateEvent.dropzone = this.dropzone\n deactivateEvent.target = this.target\n\n this.dropzone.fire(deactivateEvent)\n } else {\n this.dropzone.fire(new DropEvent(dropState, this.dragEvent, 'dragleave'))\n }\n }\n\n preventDefault() {}\n\n stopPropagation() {\n this.propagationStopped = true\n }\n\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element, PointerEventType, Rect, ListenersArg } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport is from '@interactjs/utils/is'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '../drag/plugin'\n\nimport type { DragEvent } from '../drag/plugin'\nimport drag from '../drag/plugin'\n/* eslint-enable import/no-duplicates */\n\nimport { DropEvent } from './DropEvent'\n\nexport type DropFunctionChecker = (\n dragEvent: any, // related drag operation\n event: any, // touch or mouse EventEmitter\n dropped: boolean, // default checker result\n dropzone: Interactable, // dropzone interactable\n dropElement: Element, // drop zone element\n draggable: Interactable, // draggable's Interactable\n draggableElement: Element, // dragged element\n) => boolean\n\nexport interface DropzoneOptions extends PerActionDefaults {\n accept?:\n | string\n | Element\n | (({ dropzone, draggableElement }: { dropzone: Interactable; draggableElement: Element }) => boolean)\n // How the overlap is checked on the drop zone\n overlap?: 'pointer' | 'center' | number\n checker?: DropFunctionChecker\n\n ondropactivate?: ListenersArg\n ondropdeactivate?: ListenersArg\n ondragenter?: ListenersArg\n ondragleave?: ListenersArg\n ondropmove?: ListenersArg\n ondrop?: ListenersArg\n}\n\nexport interface DropzoneMethod {\n (this: Interactable, options: DropzoneOptions | boolean): Interactable\n (): DropzoneOptions\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n *\n * ```js\n * interact('.drop').dropzone({\n * accept: '.can-drop' || document.getElementById('single-drop'),\n * overlap: 'pointer' || 'center' || zeroToOne\n * }\n * ```\n *\n * Returns or sets whether draggables can be dropped onto this target to\n * trigger drop events\n *\n * Dropzones can receive the following events:\n * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends\n * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone\n * - `dragmove` when a draggable that has entered the dropzone is moved\n * - `drop` when a draggable is dropped into this dropzone\n *\n * Use the `accept` option to allow only elements that match the given CSS\n * selector or element. The value can be:\n *\n * - **an Element** - only that element can be dropped into this dropzone.\n * - **a string**, - the element being dragged must match it as a CSS selector.\n * - **`null`** - accept options is cleared - it accepts any element.\n *\n * Use the `overlap` option to set how drops are checked for. The allowed\n * values are:\n *\n * - `'pointer'`, the pointer must be over the dropzone (default)\n * - `'center'`, the draggable element's center must be over the dropzone\n * - a number from 0-1 which is the `(intersection area) / (draggable area)`.\n * e.g. `0.5` for drop to happen when half of the area of the draggable is\n * over the dropzone\n *\n * Use the `checker` option to specify a function to check if a dragged element\n * is over this Interactable.\n *\n * @param options - The new options to be set\n */\n dropzone(options: DropzoneOptions | boolean): Interactable\n /** @returns The current setting */\n dropzone(): DropzoneOptions\n\n /**\n * ```js\n * interact(target)\n * .dropChecker(function(dragEvent, // related dragmove or dragend event\n * event, // TouchEvent/PointerEvent/MouseEvent\n * dropped, // bool result of the default checker\n * dropzone, // dropzone Interactable\n * dropElement, // dropzone elemnt\n * draggable, // draggable Interactable\n * draggableElement) {// draggable element\n *\n * return dropped && event.target.hasAttribute('allow-drop')\n * }\n * ```\n */\n dropCheck(\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElemen: Element,\n rect: any,\n ): boolean\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n dropState?: DropState\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n /** @internal */\n prevDropzone?: Interactable\n dropzone?: Interactable\n dragEnter?: Element\n dragLeave?: Element\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n drop: DropzoneOptions\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n dynamicDrop?: boolean\n }\n\n interface SignalArgs {\n 'actions/drop:start': DropSignalArg\n 'actions/drop:move': DropSignalArg\n 'actions/drop:end': DropSignalArg\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n drop?: typeof drop\n }\n}\n\ndeclare module '@interactjs/core/InteractStatic' {\n interface InteractStatic {\n /**\n * Returns or sets whether the dimensions of dropzone elements are calculated\n * on every dragmove or only on dragstart for the default dropChecker\n *\n * @param {boolean} [newValue] True to check on each move. False to check only\n * before start\n * @return {boolean | interact} The current setting or interact\n */\n dynamicDrop: (newValue?: boolean) => boolean | this\n }\n}\n\ninterface DropSignalArg {\n interaction: Interaction<'drag'>\n dragEvent: DragEvent\n}\n\nexport interface ActiveDrop {\n dropzone: Interactable\n element: Element\n rect: Rect\n}\n\nexport interface DropState {\n cur: {\n // the dropzone a drag target might be dropped into\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n prev: {\n // the dropzone that was recently dragged away from\n dropzone: Interactable\n // the element at the time of checking\n element: Element\n }\n // wheather the potential drop was rejected from a listener\n rejected: boolean\n // the drop events related to the current drag event\n events: FiredDropEvents\n activeDrops: ActiveDrop[]\n}\n\nfunction install(scope: Scope) {\n const { actions, interactStatic: interact, Interactable, defaults } = scope\n\n scope.usePlugin(drag)\n\n Interactable.prototype.dropzone = function (this: Interactable, options) {\n return dropzoneMethod(this, options)\n } as Interactable['dropzone']\n\n Interactable.prototype.dropCheck = function (\n this: Interactable,\n dragEvent,\n event,\n draggable,\n draggableElement,\n dropElement,\n rect,\n ) {\n return dropCheckMethod(this, dragEvent, event, draggable, draggableElement, dropElement, rect)\n }\n\n interact.dynamicDrop = function (newValue?: boolean) {\n if (is.bool(newValue)) {\n // if (dragging && scope.dynamicDrop !== newValue && !newValue) {\n // calcRects(dropzones)\n // }\n\n scope.dynamicDrop = newValue\n\n return interact\n }\n return scope.dynamicDrop!\n }\n\n extend(actions.phaselessTypes, {\n dragenter: true,\n dragleave: true,\n dropactivate: true,\n dropdeactivate: true,\n dropmove: true,\n drop: true,\n })\n actions.methodDict.drop = 'dropzone'\n\n scope.dynamicDrop = false\n\n defaults.actions.drop = drop.defaults\n}\n\nfunction collectDropzones({ interactables }: Scope, draggableElement: Element) {\n const drops: ActiveDrop[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const dropzone of interactables.list) {\n if (!dropzone.options.drop.enabled) {\n continue\n }\n\n const accept = dropzone.options.drop.accept\n\n // test the draggable draggableElement against the dropzone's accept setting\n if (\n (is.element(accept) && accept !== draggableElement) ||\n (is.string(accept) && !domUtils.matchesSelector(draggableElement, accept)) ||\n (is.func(accept) && !accept({ dropzone, draggableElement }))\n ) {\n continue\n }\n\n for (const dropzoneElement of dropzone.getAllElements()) {\n if (dropzoneElement !== draggableElement) {\n drops.push({\n dropzone,\n element: dropzoneElement,\n rect: dropzone.getRect(dropzoneElement),\n })\n }\n }\n }\n\n return drops\n}\n\nfunction fireActivationEvents(activeDrops: ActiveDrop[], event: DropEvent) {\n // loop through all active dropzones and trigger event\n for (const { dropzone, element } of activeDrops.slice()) {\n event.dropzone = dropzone\n\n // set current element as event target\n event.target = element\n dropzone.fire(event)\n event.propagationStopped = event.immediatePropagationStopped = false\n }\n}\n\n// return a new array of possible drops. getActiveDrops should always be\n// called when a drag has just started or a drag event happens while\n// dynamicDrop is true\nfunction getActiveDrops(scope: Scope, dragElement: Element) {\n // get dropzones and their elements that could receive the draggable\n const activeDrops = collectDropzones(scope, dragElement)\n\n for (const activeDrop of activeDrops) {\n activeDrop.rect = activeDrop.dropzone.getRect(activeDrop.element)\n }\n\n return activeDrops\n}\n\nfunction getDrop(\n { dropState, interactable: draggable, element: dragElement }: Interaction,\n dragEvent,\n pointerEvent,\n) {\n const validDrops: Element[] = []\n\n // collect all dropzones and their elements which qualify for a drop\n for (const { dropzone, element: dropzoneElement, rect } of dropState.activeDrops) {\n const isValid = dropzone.dropCheck(\n dragEvent,\n pointerEvent,\n draggable!,\n dragElement!,\n dropzoneElement,\n rect,\n )\n validDrops.push(isValid ? dropzoneElement : null)\n }\n\n // get the most appropriate dropzone based on DOM depth and order\n const dropIndex = domUtils.indexOfDeepestElement(validDrops)\n\n return dropState!.activeDrops[dropIndex] || null\n}\n\nfunction getDropEvents(interaction: Interaction, _pointerEvent, dragEvent: DragEvent) {\n const dropState = interaction.dropState!\n const dropEvents: Record = {\n enter: null,\n leave: null,\n activate: null,\n deactivate: null,\n move: null,\n drop: null,\n }\n\n if (dragEvent.type === 'dragstart') {\n dropEvents.activate = new DropEvent(dropState, dragEvent, 'dropactivate')\n\n dropEvents.activate.target = null as never\n dropEvents.activate.dropzone = null as never\n }\n if (dragEvent.type === 'dragend') {\n dropEvents.deactivate = new DropEvent(dropState, dragEvent, 'dropdeactivate')\n\n dropEvents.deactivate.target = null as never\n dropEvents.deactivate.dropzone = null as never\n }\n\n if (dropState.rejected) {\n return dropEvents\n }\n\n if (dropState.cur.element !== dropState.prev.element) {\n // if there was a previous dropzone, create a dragleave event\n if (dropState.prev.dropzone) {\n dropEvents.leave = new DropEvent(dropState, dragEvent, 'dragleave')\n\n dragEvent.dragLeave = dropEvents.leave.target = dropState.prev.element\n dragEvent.prevDropzone = dropEvents.leave.dropzone = dropState.prev.dropzone\n }\n // if dropzone is not null, create a dragenter event\n if (dropState.cur.dropzone) {\n dropEvents.enter = new DropEvent(dropState, dragEvent, 'dragenter')\n\n dragEvent.dragEnter = dropState.cur.element\n dragEvent.dropzone = dropState.cur.dropzone\n }\n }\n\n if (dragEvent.type === 'dragend' && dropState.cur.dropzone) {\n dropEvents.drop = new DropEvent(dropState, dragEvent, 'drop')\n\n dragEvent.dropzone = dropState.cur.dropzone\n dragEvent.relatedTarget = dropState.cur.element\n }\n if (dragEvent.type === 'dragmove' && dropState.cur.dropzone) {\n dropEvents.move = new DropEvent(dropState, dragEvent, 'dropmove')\n\n dragEvent.dropzone = dropState.cur.dropzone\n }\n\n return dropEvents\n}\n\ntype FiredDropEvents = Partial<\n Record<'leave' | 'enter' | 'move' | 'drop' | 'activate' | 'deactivate', DropEvent>\n>\n\nfunction fireDropEvents(interaction: Interaction, events: FiredDropEvents) {\n const dropState = interaction.dropState!\n const { activeDrops, cur, prev } = dropState\n\n if (events.leave) {\n prev.dropzone.fire(events.leave)\n }\n if (events.enter) {\n cur.dropzone.fire(events.enter)\n }\n if (events.move) {\n cur.dropzone.fire(events.move)\n }\n if (events.drop) {\n cur.dropzone.fire(events.drop)\n }\n\n if (events.deactivate) {\n fireActivationEvents(activeDrops, events.deactivate)\n }\n\n dropState.prev.dropzone = cur.dropzone\n dropState.prev.element = cur.element\n}\n\nfunction onEventCreated({ interaction, iEvent, event }: DoPhaseArg<'drag', EventPhase>, scope: Scope) {\n if (iEvent.type !== 'dragmove' && iEvent.type !== 'dragend') {\n return\n }\n\n const dropState = interaction.dropState!\n\n if (scope.dynamicDrop) {\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n }\n\n const dragEvent = iEvent\n const dropResult = getDrop(interaction, dragEvent, event)\n\n // update rejected status\n dropState.rejected =\n dropState.rejected &&\n !!dropResult &&\n dropResult.dropzone === dropState.cur.dropzone &&\n dropResult.element === dropState.cur.element\n\n dropState.cur.dropzone = dropResult && dropResult.dropzone\n dropState.cur.element = dropResult && dropResult.element\n\n dropState.events = getDropEvents(interaction, event, dragEvent)\n}\n\nfunction dropzoneMethod(interactable: Interactable): DropzoneOptions\nfunction dropzoneMethod(interactable: Interactable, options: DropzoneOptions | boolean): Interactable\nfunction dropzoneMethod(interactable: Interactable, options?: DropzoneOptions | boolean) {\n if (is.object(options)) {\n interactable.options.drop.enabled = options.enabled !== false\n\n if (options.listeners) {\n const normalized = normalizeListeners(options.listeners)\n // rename 'drop' to '' as it will be prefixed with 'drop'\n const corrected = Object.keys(normalized).reduce((acc, type) => {\n const correctedType = /^(enter|leave)/.test(type)\n ? `drag${type}`\n : /^(activate|deactivate|move)/.test(type)\n ? `drop${type}`\n : type\n\n acc[correctedType] = normalized[type]\n\n return acc\n }, {})\n\n const prevListeners = interactable.options.drop.listeners\n prevListeners && interactable.off(prevListeners)\n\n interactable.on(corrected)\n interactable.options.drop.listeners = corrected\n }\n\n if (is.func(options.ondrop)) {\n interactable.on('drop', options.ondrop)\n }\n if (is.func(options.ondropactivate)) {\n interactable.on('dropactivate', options.ondropactivate)\n }\n if (is.func(options.ondropdeactivate)) {\n interactable.on('dropdeactivate', options.ondropdeactivate)\n }\n if (is.func(options.ondragenter)) {\n interactable.on('dragenter', options.ondragenter)\n }\n if (is.func(options.ondragleave)) {\n interactable.on('dragleave', options.ondragleave)\n }\n if (is.func(options.ondropmove)) {\n interactable.on('dropmove', options.ondropmove)\n }\n\n if (/^(pointer|center)$/.test(options.overlap as string)) {\n interactable.options.drop.overlap = options.overlap\n } else if (is.number(options.overlap)) {\n interactable.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0)\n }\n if ('accept' in options) {\n interactable.options.drop.accept = options.accept\n }\n if ('checker' in options) {\n interactable.options.drop.checker = options.checker\n }\n\n return interactable\n }\n\n if (is.bool(options)) {\n interactable.options.drop.enabled = options\n\n return interactable\n }\n\n return interactable.options.drop\n}\n\nfunction dropCheckMethod(\n interactable: Interactable,\n dragEvent: InteractEvent,\n event: PointerEventType,\n draggable: Interactable,\n draggableElement: Element,\n dropElement: Element,\n rect: any,\n) {\n let dropped = false\n\n // if the dropzone has no rect (eg. display: none)\n // call the custom dropChecker or just return false\n if (!(rect = rect || interactable.getRect(dropElement))) {\n return interactable.options.drop.checker\n ? interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n : false\n }\n\n const dropOverlap = interactable.options.drop.overlap\n\n if (dropOverlap === 'pointer') {\n const origin = getOriginXY(draggable, draggableElement, 'drag')\n const page = pointerUtils.getPageXY(dragEvent)\n\n page.x += origin.x\n page.y += origin.y\n\n const horizontal = page.x > rect.left && page.x < rect.right\n const vertical = page.y > rect.top && page.y < rect.bottom\n\n dropped = horizontal && vertical\n }\n\n const dragRect = draggable.getRect(draggableElement)\n\n if (dragRect && dropOverlap === 'center') {\n const cx = dragRect.left + dragRect.width / 2\n const cy = dragRect.top + dragRect.height / 2\n\n dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom\n }\n\n if (dragRect && is.number(dropOverlap)) {\n const overlapArea =\n Math.max(0, Math.min(rect.right, dragRect.right) - Math.max(rect.left, dragRect.left)) *\n Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top, dragRect.top))\n\n const overlapRatio = overlapArea / (dragRect.width * dragRect.height)\n\n dropped = overlapRatio >= dropOverlap\n }\n\n if (interactable.options.drop.checker) {\n dropped = interactable.options.drop.checker(\n dragEvent,\n event,\n dropped,\n interactable,\n dropElement,\n draggable,\n draggableElement,\n )\n }\n\n return dropped\n}\n\nconst drop: Plugin = {\n id: 'actions/drop',\n install,\n listeners: {\n 'interactions:before-action-start': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n interaction.dropState = {\n cur: {\n dropzone: null,\n element: null,\n },\n prev: {\n dropzone: null,\n element: null,\n },\n rejected: null,\n events: null,\n activeDrops: [],\n }\n },\n\n 'interactions:after-action-start': (\n { interaction, event, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n\n // reset active dropzones\n dropState.activeDrops = []\n dropState.events = {}\n dropState.activeDrops = getActiveDrops(scope, interaction.element!)\n dropState.events = getDropEvents(interaction, event, dragEvent)\n\n if (dropState.events.activate) {\n fireActivationEvents(dropState.activeDrops, dropState.events.activate)\n scope.fire('actions/drop:start', { interaction, dragEvent })\n }\n },\n\n 'interactions:action-move': onEventCreated,\n\n 'interactions:after-action-move': (\n { interaction, iEvent: dragEvent }: DoPhaseArg<'drag', EventPhase>,\n scope,\n ) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const dropState = interaction.dropState!\n fireDropEvents(interaction, dropState.events)\n\n scope.fire('actions/drop:move', { interaction, dragEvent })\n dropState.events = {}\n },\n\n 'interactions:action-end': (arg: DoPhaseArg<'drag', EventPhase>, scope) => {\n if (arg.interaction.prepared.name !== 'drag') {\n return\n }\n\n const { interaction, iEvent: dragEvent } = arg\n\n onEventCreated(arg, scope)\n fireDropEvents(interaction, interaction.dropState!.events)\n scope.fire('actions/drop:end', { interaction, dragEvent })\n },\n\n 'interactions:stop': ({ interaction }) => {\n if (interaction.prepared.name !== 'drag') {\n return\n }\n\n const { dropState } = interaction\n\n if (dropState) {\n dropState.activeDrops = null as never\n dropState.events = null as never\n dropState.cur.dropzone = null as never\n dropState.cur.element = null as never\n dropState.prev.dropzone = null as never\n dropState.prev.element = null as never\n dropState.rejected = false\n }\n },\n },\n getActiveDrops,\n getDrop,\n getDropEvents,\n fireDropEvents,\n\n filterEventType: (type: string) => type.search('drag') === 0 || type.search('drop') === 0,\n\n defaults: {\n enabled: false,\n accept: null as never,\n overlap: 'pointer',\n } as DropzoneOptions,\n}\n\nexport default drop\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { InteractEvent, EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Rect, PointerType, ListenersArg, OrBoolean } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n gesture?: {\n angle: number // angle from first to second touch\n distance: number\n scale: number // gesture.distance / gesture.startDistance\n startAngle: number // angle of line joining two touches\n startDistance: number // distance between two touches of touchStart\n }\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n gesturable(options: Partial> | boolean): this\n gesturable(): GesturableOptions\n /**\n * ```js\n * interact(element).gesturable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * // limit multiple gestures.\n * // See the explanation in {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isGestureable = interact(element).gesturable()\n * ```\n *\n * Gets or sets whether multitouch gestures can be performed on the target\n *\n * @param options - true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)\n * @returns A boolean indicating if this can be the target of gesture events, or this Interactable\n */\n gesturable(options?: Partial> | boolean): this | GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n gesture: GesturableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n gesture?: typeof gesture\n }\n}\n\nexport interface GesturableOptions extends PerActionDefaults {\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface GestureEvent extends InteractEvent<'gesture'> {\n distance: number\n angle: number\n da: number // angle change\n scale: number // ratio of distance start to current event\n ds: number // scale change\n box: Rect // enclosing box of all points\n touches: PointerType[]\n}\n\nexport interface GestureSignalArg extends DoPhaseArg<'gesture', EventPhase> {\n iEvent: GestureEvent\n interaction: Interaction<'gesture'>\n}\n\nfunction install(scope: Scope) {\n const { actions, Interactable, defaults } = scope\n\n Interactable.prototype.gesturable = function (\n this: InstanceType,\n options: GesturableOptions | boolean,\n ) {\n if (is.object(options)) {\n this.options.gesture.enabled = options.enabled !== false\n this.setPerAction('gesture', options)\n this.setOnEvents('gesture', options)\n\n return this\n }\n\n if (is.bool(options)) {\n this.options.gesture.enabled = options\n\n return this\n }\n\n return this.options.gesture as GesturableOptions\n } as Interactable['gesturable']\n\n actions.map.gesture = gesture\n actions.methodDict.gesture = 'gesturable'\n\n defaults.actions.gesture = gesture.defaults\n}\n\nfunction updateGestureProps({ interaction, iEvent, phase }: GestureSignalArg) {\n if (interaction.prepared.name !== 'gesture') return\n\n const pointers = interaction.pointers.map((p) => p.pointer)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const deltaSource = interaction.interactable.options.deltaSource\n\n iEvent.touches = [pointers[0], pointers[1]]\n\n if (starting) {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = 1\n iEvent.ds = 0\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n iEvent.da = 0\n\n interaction.gesture.startDistance = iEvent.distance\n interaction.gesture.startAngle = iEvent.angle\n } else if (ending || interaction.pointers.length < 2) {\n const prevEvent = interaction.prevEvent as GestureEvent\n\n iEvent.distance = prevEvent.distance\n iEvent.box = prevEvent.box\n iEvent.scale = prevEvent.scale\n iEvent.ds = 0\n iEvent.angle = prevEvent.angle\n iEvent.da = 0\n } else {\n iEvent.distance = pointerUtils.touchDistance(pointers, deltaSource)\n iEvent.box = pointerUtils.touchBBox(pointers)\n iEvent.scale = iEvent.distance / interaction.gesture.startDistance\n iEvent.angle = pointerUtils.touchAngle(pointers, deltaSource)\n\n iEvent.ds = iEvent.scale - interaction.gesture.scale\n iEvent.da = iEvent.angle - interaction.gesture.angle\n }\n\n interaction.gesture.distance = iEvent.distance\n interaction.gesture.angle = iEvent.angle\n\n if (is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {\n interaction.gesture.scale = iEvent.scale\n }\n}\n\nconst gesture: Plugin = {\n id: 'actions/gesture',\n before: ['actions/drag', 'actions/resize'],\n install,\n listeners: {\n 'interactions:action-start': updateGestureProps,\n 'interactions:action-move': updateGestureProps,\n 'interactions:action-end': updateGestureProps,\n\n 'interactions:new': ({ interaction }) => {\n interaction.gesture = {\n angle: 0,\n distance: 0,\n scale: 1,\n startAngle: 0,\n startDistance: 0,\n }\n },\n\n 'auto-start:check': (arg) => {\n if (arg.interaction.pointers.length < 2) {\n return undefined\n }\n\n const gestureOptions = arg.interactable.options.gesture\n\n if (!(gestureOptions && gestureOptions.enabled)) {\n return undefined\n }\n\n arg.action = { name: 'gesture' }\n\n return false\n },\n },\n\n defaults: {},\n\n getCursor() {\n return ''\n },\n\n filterEventType: (type: string) => type.search('gesture') === 0,\n}\n\nexport default gesture\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { EventPhase, InteractEvent } from '@interactjs/core/InteractEvent'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type {\n ActionName,\n ActionProps,\n EdgeOptions,\n FullRect,\n ListenersArg,\n OrBoolean,\n Point,\n Rect,\n} from '@interactjs/core/types'\nimport * as dom from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nexport type EdgeName = 'top' | 'left' | 'bottom' | 'right'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n resizable(): ResizableOptions\n resizable(options: Partial> | boolean): this\n /**\n * ```js\n * interact(element).resizable({\n * onstart: function (event) {},\n * onmove : function (event) {},\n * onend : function (event) {},\n *\n * edges: {\n * top : true, // Use pointer coords to check for resize.\n * left : false, // Disable resizing from left edge.\n * bottom: '.resize-s',// Resize if pointer target matches selector\n * right : handleEl // Resize if pointer target is the given Element\n * },\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height are adjusted at a 1:1 ratio.\n * square: false,\n *\n * // Width and height can be adjusted independently. When `true`, width and\n * // height maintain the aspect ratio they had when resizing started.\n * preserveAspectRatio: false,\n *\n * // a value of 'none' will limit the resize rect to a minimum of 0x0\n * // 'negate' will allow the rect to have negative width/height\n * // 'reposition' will keep the width/height positive by swapping\n * // the top and bottom edges and/or swapping the left and right edges\n * invert: 'none' || 'negate' || 'reposition'\n *\n * // limit multiple resizes.\n * // See the explanation in the {@link Interactable.draggable} example\n * max: Infinity,\n * maxPerElement: 1,\n * })\n *\n * var isResizeable = interact(element).resizable()\n * ```\n *\n * Gets or sets whether resize actions can be performed on the target\n *\n * @param options - true/false or An object with event\n * listeners to be fired on resize events (object makes the Interactable\n * resizable)\n * @returns A boolean indicating if this can be the\n * target of resize elements, or this Interactable\n */\n resizable(options?: Partial> | boolean): this | ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n resizeAxes: 'x' | 'y' | 'xy'\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n resizeStartAspectRatio: number\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n resize: ResizableOptions\n }\n}\n\ndeclare module '@interactjs/core/types' {\n interface ActionMap {\n resize?: typeof resize\n }\n}\n\nexport interface ResizableOptions extends PerActionDefaults {\n square?: boolean\n preserveAspectRatio?: boolean\n edges?: EdgeOptions | null\n axis?: 'x' | 'y' | 'xy' // deprecated\n invert?: 'none' | 'negate' | 'reposition'\n margin?: number\n squareResize?: boolean\n oninertiastart?: ListenersArg\n onstart?: ListenersArg\n onmove?: ListenersArg\n onend?: ListenersArg\n}\n\nexport interface ResizeEvent

extends InteractEvent<'resize', P> {\n deltaRect?: FullRect\n edges?: ActionProps['edges']\n}\n\nfunction install(scope: Scope) {\n const {\n actions,\n browser,\n Interactable, // tslint:disable-line no-shadowed-variable\n defaults,\n } = scope\n\n // Less Precision with touch input\n\n resize.cursors = initCursors(browser)\n resize.defaultMargin = browser.supportsTouch || browser.supportsPointerEvent ? 20 : 10\n\n Interactable.prototype.resizable = function (this: Interactable, options: ResizableOptions | boolean) {\n return resizable(this, options, scope)\n } as Interactable['resizable']\n\n actions.map.resize = resize\n actions.methodDict.resize = 'resizable'\n\n defaults.actions.resize = resize.defaults\n}\n\nfunction resizeChecker(arg) {\n const { interaction, interactable, element, rect, buttons } = arg\n\n if (!rect) {\n return undefined\n }\n\n const page = extend({}, interaction.coords.cur.page)\n const resizeOptions = interactable.options.resize\n\n if (\n !(resizeOptions && resizeOptions.enabled) ||\n // check mouseButton setting if the pointer is down\n (interaction.pointerIsDown &&\n /mouse|pointer/.test(interaction.pointerType) &&\n (buttons & resizeOptions.mouseButtons) === 0)\n ) {\n return undefined\n }\n\n // if using resize.edges\n if (is.object(resizeOptions.edges)) {\n const resizeEdges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n\n for (const edge in resizeEdges) {\n resizeEdges[edge] = checkResizeEdge(\n edge,\n resizeOptions.edges[edge],\n page,\n interaction._latestPointer.eventTarget,\n element,\n rect,\n resizeOptions.margin || resize.defaultMargin,\n )\n }\n\n resizeEdges.left = resizeEdges.left && !resizeEdges.right\n resizeEdges.top = resizeEdges.top && !resizeEdges.bottom\n\n if (resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom) {\n arg.action = {\n name: 'resize',\n edges: resizeEdges,\n }\n }\n } else {\n const right = resizeOptions.axis !== 'y' && page.x > rect.right - resize.defaultMargin\n const bottom = resizeOptions.axis !== 'x' && page.y > rect.bottom - resize.defaultMargin\n\n if (right || bottom) {\n arg.action = {\n name: 'resize',\n axes: (right ? 'x' : '') + (bottom ? 'y' : ''),\n }\n }\n }\n\n return arg.action ? false : undefined\n}\n\nfunction resizable(interactable: Interactable, options: OrBoolean | boolean, scope: Scope) {\n if (is.object(options)) {\n interactable.options.resize.enabled = options.enabled !== false\n interactable.setPerAction('resize', options)\n interactable.setOnEvents('resize', options)\n\n if (is.string(options.axis) && /^x$|^y$|^xy$/.test(options.axis)) {\n interactable.options.resize.axis = options.axis\n } else if (options.axis === null) {\n interactable.options.resize.axis = scope.defaults.actions.resize.axis\n }\n\n if (is.bool(options.preserveAspectRatio)) {\n interactable.options.resize.preserveAspectRatio = options.preserveAspectRatio\n } else if (is.bool(options.square)) {\n interactable.options.resize.square = options.square\n }\n\n return interactable\n }\n if (is.bool(options)) {\n interactable.options.resize.enabled = options\n\n return interactable\n }\n return interactable.options.resize\n}\n\nfunction checkResizeEdge(\n name: string,\n value: any,\n page: Point,\n element: Node,\n interactableElement: Element,\n rect: Rect,\n margin: number,\n) {\n // false, '', undefined, null\n if (!value) {\n return false\n }\n\n // true value, use pointer coords and element rect\n if (value === true) {\n // if dimensions are negative, \"switch\" edges\n const width = is.number(rect.width) ? rect.width : rect.right - rect.left\n const height = is.number(rect.height) ? rect.height : rect.bottom - rect.top\n\n // don't use margin greater than half the relevent dimension\n margin = Math.min(margin, Math.abs((name === 'left' || name === 'right' ? width : height) / 2))\n\n if (width < 0) {\n if (name === 'left') {\n name = 'right'\n } else if (name === 'right') {\n name = 'left'\n }\n }\n if (height < 0) {\n if (name === 'top') {\n name = 'bottom'\n } else if (name === 'bottom') {\n name = 'top'\n }\n }\n\n if (name === 'left') {\n const edge = width >= 0 ? rect.left : rect.right\n return page.x < edge + margin\n }\n if (name === 'top') {\n const edge = height >= 0 ? rect.top : rect.bottom\n return page.y < edge + margin\n }\n\n if (name === 'right') {\n return page.x > (width >= 0 ? rect.right : rect.left) - margin\n }\n if (name === 'bottom') {\n return page.y > (height >= 0 ? rect.bottom : rect.top) - margin\n }\n }\n\n // the remaining checks require an element\n if (!is.element(element)) {\n return false\n }\n\n return is.element(value)\n ? // the value is an element to use as a resize handle\n value === element\n : // otherwise check if element matches value as selector\n dom.matchesUpTo(element, value, interactableElement)\n}\n\n/* eslint-disable multiline-ternary */\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nfunction initCursors(browser: typeof import('@interactjs/utils/browser').default) {\n return browser.isIe9\n ? {\n x: 'e-resize',\n y: 's-resize',\n xy: 'se-resize',\n\n top: 'n-resize',\n left: 'w-resize',\n bottom: 's-resize',\n right: 'e-resize',\n topleft: 'se-resize',\n bottomright: 'se-resize',\n topright: 'ne-resize',\n bottomleft: 'ne-resize',\n }\n : {\n x: 'ew-resize',\n y: 'ns-resize',\n xy: 'nwse-resize',\n\n top: 'ns-resize',\n left: 'ew-resize',\n bottom: 'ns-resize',\n right: 'ew-resize',\n topleft: 'nwse-resize',\n bottomright: 'nwse-resize',\n topright: 'nesw-resize',\n bottomleft: 'nesw-resize',\n }\n}\n/* eslint-enable multiline-ternary */\n\nfunction start({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) {\n return\n }\n\n const resizeEvent = iEvent as ResizeEvent\n const rect = interaction.rect\n\n interaction._rects = {\n start: extend({}, rect),\n corrected: extend({}, rect),\n previous: extend({}, rect),\n delta: {\n left: 0,\n right: 0,\n width: 0,\n top: 0,\n bottom: 0,\n height: 0,\n },\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction move({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n const resizeOptions = interaction.interactable.options.resize\n const invert = resizeOptions.invert\n const invertible = invert === 'reposition' || invert === 'negate'\n\n const current = interaction.rect\n const { start: startRect, corrected, delta: deltaRect, previous } = interaction._rects\n\n extend(previous, corrected)\n\n if (invertible) {\n // if invertible, copy the current rect\n extend(corrected, current)\n\n if (invert === 'reposition') {\n // swap edge values if necessary to keep width/height positive\n if (corrected.top > corrected.bottom) {\n const swap = corrected.top\n\n corrected.top = corrected.bottom\n corrected.bottom = swap\n }\n if (corrected.left > corrected.right) {\n const swap = corrected.left\n\n corrected.left = corrected.right\n corrected.right = swap\n }\n }\n } else {\n // if not invertible, restrict to minimum of 0x0 rect\n corrected.top = Math.min(current.top, startRect.bottom)\n corrected.bottom = Math.max(current.bottom, startRect.top)\n corrected.left = Math.min(current.left, startRect.right)\n corrected.right = Math.max(current.right, startRect.left)\n }\n\n corrected.width = corrected.right - corrected.left\n corrected.height = corrected.bottom - corrected.top\n\n for (const edge in corrected) {\n deltaRect[edge] = corrected[edge] - previous[edge]\n }\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = corrected\n resizeEvent.deltaRect = deltaRect\n}\n\nfunction end({ iEvent, interaction }: { iEvent: InteractEvent; interaction: Interaction }) {\n if (interaction.prepared.name !== 'resize' || !interaction.prepared.edges) return\n\n const resizeEvent = iEvent as ResizeEvent\n\n resizeEvent.edges = interaction.prepared.edges\n resizeEvent.rect = interaction._rects.corrected\n resizeEvent.deltaRect = interaction._rects.delta\n}\n\nfunction updateEventAxes({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n if (interaction.prepared.name !== 'resize' || !interaction.resizeAxes) return\n\n const options = interaction.interactable.options\n const resizeEvent = iEvent as ResizeEvent\n\n if (options.resize.square) {\n if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = resizeEvent.delta.y\n } else {\n resizeEvent.delta.y = resizeEvent.delta.x\n }\n resizeEvent.axes = 'xy'\n } else {\n resizeEvent.axes = interaction.resizeAxes\n\n if (interaction.resizeAxes === 'x') {\n resizeEvent.delta.y = 0\n } else if (interaction.resizeAxes === 'y') {\n resizeEvent.delta.x = 0\n }\n }\n}\n\nconst resize: Plugin = {\n id: 'actions/resize',\n before: ['actions/drag'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.resizeAxes = 'xy'\n },\n\n 'interactions:action-start': (arg) => {\n start(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-move': (arg) => {\n move(arg)\n updateEventAxes(arg)\n },\n 'interactions:action-end': end,\n 'auto-start:check': resizeChecker,\n },\n\n defaults: {\n square: false,\n preserveAspectRatio: false,\n axis: 'xy',\n\n // use default margin\n margin: NaN,\n\n // object with props left, right, top, bottom which are\n // true/false values to resize when the pointer is over that edge,\n // CSS selectors to match the handles for each direction\n // or the Elements for each handle\n edges: null,\n\n // a value of 'none' will limit the resize rect to a minimum of 0x0\n // 'negate' will alow the rect to have negative width/height\n // 'reposition' will keep the width/height positive by swapping\n // the top and bottom edges and/or swapping the left and right edges\n invert: 'none',\n } as ResizableOptions,\n\n cursors: null as ReturnType,\n\n getCursor({ edges, axis, name }: ActionProps) {\n const cursors = resize.cursors\n let result: string = null\n\n if (axis) {\n result = cursors[name + axis]\n } else if (edges) {\n let cursorKey = ''\n\n for (const edge of ['top', 'bottom', 'left', 'right']) {\n if (edges[edge]) {\n cursorKey += edge\n }\n }\n\n result = cursors[cursorKey]\n }\n\n return result\n },\n\n filterEventType: (type: string) => type.search('resize') === 0,\n\n defaultMargin: null as number,\n}\n\nexport default resize\n","let lastTime = 0\nlet request: typeof requestAnimationFrame\nlet cancel: typeof cancelAnimationFrame\n\nfunction init(global: Window | typeof globalThis) {\n request = global.requestAnimationFrame\n cancel = global.cancelAnimationFrame\n\n if (!request) {\n const vendors = ['ms', 'moz', 'webkit', 'o']\n\n for (const vendor of vendors) {\n request = global[`${vendor}RequestAnimationFrame` as 'requestAnimationFrame']\n cancel =\n global[`${vendor}CancelAnimationFrame` as 'cancelAnimationFrame'] ||\n global[`${vendor}CancelRequestAnimationFrame` as 'cancelAnimationFrame']\n }\n }\n\n request = request && request.bind(global)\n cancel = cancel && cancel.bind(global)\n\n if (!request) {\n request = (callback) => {\n const currTime = Date.now()\n const timeToCall = Math.max(0, 16 - (currTime - lastTime))\n const token = global.setTimeout(() => {\n // eslint-disable-next-line n/no-callback-literal\n callback(currTime + timeToCall)\n }, timeToCall)\n\n lastTime = currTime + timeToCall\n return token as any\n }\n\n cancel = (token) => clearTimeout(token)\n }\n}\n\nexport default {\n request: (callback: FrameRequestCallback) => request(callback),\n cancel: (token: number) => cancel(token),\n init,\n}\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './drag/plugin'\nimport './drop/plugin'\nimport './gesture/plugin'\nimport './resize/plugin'\n\nimport drag from './drag/plugin'\nimport drop from './drop/plugin'\nimport gesture from './gesture/plugin'\nimport resize from './resize/plugin'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'actions',\n install(scope: Scope) {\n scope.usePlugin(gesture)\n scope.usePlugin(resize)\n scope.usePlugin(drag)\n scope.usePlugin(drop)\n },\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, PointerType } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport { getStringOptionResult } from '@interactjs/utils/rect'\nimport { getWindow } from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n autoScroll: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoScroll?: typeof autoScroll\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n autoScroll?: AutoScrollOptions\n }\n}\n\nexport interface AutoScrollOptions {\n container?: Window | HTMLElement | string\n margin?: number\n distance?: number\n interval?: number\n speed?: number\n enabled?: boolean\n}\n\nfunction install(scope: Scope) {\n const { defaults, actions } = scope\n\n scope.autoScroll = autoScroll\n autoScroll.now = () => scope.now()\n\n actions.phaselessTypes.autoscroll = true\n defaults.perAction.autoScroll = autoScroll.defaults\n}\n\nconst autoScroll = {\n defaults: {\n enabled: false,\n margin: 60,\n\n // the item that is scrolled (Window or HTMLElement)\n container: null as AutoScrollOptions['container'],\n\n // the scroll speed in pixels per second\n speed: 300,\n } as AutoScrollOptions,\n\n now: Date.now,\n\n interaction: null as Interaction | null,\n i: 0, // the handle returned by window.setInterval\n\n // Direction each pulse is to scroll in\n x: 0,\n y: 0,\n\n isScrolling: false,\n prevTime: 0,\n margin: 0,\n speed: 0,\n\n start(interaction: Interaction) {\n autoScroll.isScrolling = true\n raf.cancel(autoScroll.i)\n\n interaction.autoScroll = autoScroll\n autoScroll.interaction = interaction\n autoScroll.prevTime = autoScroll.now()\n autoScroll.i = raf.request(autoScroll.scroll)\n },\n\n stop() {\n autoScroll.isScrolling = false\n if (autoScroll.interaction) {\n autoScroll.interaction.autoScroll = null\n }\n raf.cancel(autoScroll.i)\n },\n\n // scroll the window by the values in scroll.x/y\n scroll() {\n const { interaction } = autoScroll\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n const now = autoScroll.now()\n // change in time in seconds\n const dt = (now - autoScroll.prevTime) / 1000\n // displacement\n const s = options.speed * dt\n\n if (s >= 1) {\n const scrollBy = {\n x: autoScroll.x * s,\n y: autoScroll.y * s,\n }\n\n if (scrollBy.x || scrollBy.y) {\n const prevScroll = getScroll(container)\n\n if (is.window(container)) {\n container.scrollBy(scrollBy.x, scrollBy.y)\n } else if (container) {\n container.scrollLeft += scrollBy.x\n container.scrollTop += scrollBy.y\n }\n\n const curScroll = getScroll(container)\n const delta = {\n x: curScroll.x - prevScroll.x,\n y: curScroll.y - prevScroll.y,\n }\n\n if (delta.x || delta.y) {\n interactable.fire({\n type: 'autoscroll',\n target: element,\n interactable,\n delta,\n interaction,\n container,\n })\n }\n }\n\n autoScroll.prevTime = now\n }\n\n if (autoScroll.isScrolling) {\n raf.cancel(autoScroll.i)\n autoScroll.i = raf.request(autoScroll.scroll)\n }\n },\n check(interactable: Interactable, actionName: ActionName) {\n const options = interactable.options\n\n return options[actionName].autoScroll?.enabled\n },\n onInteractionMove({\n interaction,\n pointer,\n }: {\n interaction: Interaction\n pointer: PointerType\n }) {\n if (\n !(interaction.interacting() && autoScroll.check(interaction.interactable, interaction.prepared.name))\n ) {\n return\n }\n\n if (interaction.simulation) {\n autoScroll.x = autoScroll.y = 0\n return\n }\n\n let top: boolean\n let right: boolean\n let bottom: boolean\n let left: boolean\n\n const { interactable, element } = interaction\n const actionName = interaction.prepared.name\n const options = interactable.options[actionName].autoScroll\n const container = getContainer(options.container, interactable, element)\n\n if (is.window(container)) {\n left = pointer.clientX < autoScroll.margin\n top = pointer.clientY < autoScroll.margin\n right = pointer.clientX > container.innerWidth - autoScroll.margin\n bottom = pointer.clientY > container.innerHeight - autoScroll.margin\n } else {\n const rect = domUtils.getElementClientRect(container)\n\n left = pointer.clientX < rect.left + autoScroll.margin\n top = pointer.clientY < rect.top + autoScroll.margin\n right = pointer.clientX > rect.right - autoScroll.margin\n bottom = pointer.clientY > rect.bottom - autoScroll.margin\n }\n\n autoScroll.x = right ? 1 : left ? -1 : 0\n autoScroll.y = bottom ? 1 : top ? -1 : 0\n\n if (!autoScroll.isScrolling) {\n // set the autoScroll properties to those of the target\n autoScroll.margin = options.margin\n autoScroll.speed = options.speed\n\n autoScroll.start(interaction)\n }\n },\n}\n\nexport function getContainer(value: any, interactable: Interactable, element: Element) {\n return (\n (is.string(value) ? getStringOptionResult(value, interactable, element) : value) || getWindow(element)\n )\n}\n\nexport function getScroll(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollLeft, y: container.scrollTop }\n}\n\nexport function getScrollSize(container: any) {\n if (is.window(container)) {\n container = window.document.body\n }\n\n return { x: container.scrollWidth, y: container.scrollHeight }\n}\n\nexport function getScrollSizeDelta(\n {\n interaction,\n element,\n }: {\n interaction: Partial>\n element: Element\n },\n func: any,\n) {\n const scrollOptions = interaction && interaction.interactable.options[interaction.prepared.name].autoScroll\n\n if (!scrollOptions || !scrollOptions.enabled) {\n func()\n return { x: 0, y: 0 }\n }\n\n const scrollContainer = getContainer(scrollOptions.container, interaction.interactable, element)\n\n const prevSize = getScroll(scrollContainer)\n func()\n const curSize = getScroll(scrollContainer)\n\n return {\n x: curSize.x - prevSize.x,\n y: curSize.y - prevSize.y,\n }\n}\n\nconst autoScrollPlugin: Plugin = {\n id: 'auto-scroll',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoScroll = null\n },\n\n 'interactions:destroy': ({ interaction }) => {\n interaction.autoScroll = null\n autoScroll.stop()\n if (autoScroll.interaction) {\n autoScroll.interaction = null\n }\n },\n\n 'interactions:stop': autoScroll.stop,\n\n 'interactions:action-move': (arg: any) => autoScroll.onInteractionMove(arg),\n },\n}\n\nexport default autoScrollPlugin\n","import type { ActionName, ActionProps } from '@interactjs/core/types'\n\nimport { window } from './window'\n\nexport function warnOnce(this: T, method: (...args: any[]) => any, message: string) {\n let warned = false\n\n return function (this: T) {\n if (!warned) {\n ;(window as any).console.warn(message)\n warned = true\n }\n\n return method.apply(this, arguments)\n }\n}\n\nexport function copyAction(dest: ActionProps, src: ActionProps) {\n dest.name = src.name\n dest.axis = src.axis\n dest.edges = src.edges\n\n return dest\n}\n\nexport const sign = (n: number) => (n >= 0 ? 1 : -1)\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { ActionProps, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport is from '@interactjs/utils/is'\nimport { warnOnce } from '@interactjs/utils/misc'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n getAction: (\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ) => ActionProps | null\n styleCursor(newValue: boolean): this\n styleCursor(): boolean\n /**\n * Returns or sets whether the the cursor should be changed depending on the\n * action that would be performed if the mouse were pressed and dragged.\n *\n * @param {boolean} [newValue]\n * @return {boolean | Interactable} The current setting or this Interactable\n */\n styleCursor(newValue?: boolean): boolean | this\n actionChecker(checker: Function): Interactable\n actionChecker(): Function\n /**\n * ```js\n * interact('.resize-drag')\n * .resizable(true)\n * .draggable(true)\n * .actionChecker(function (pointer, event, action, interactable, element, interaction) {\n *\n * if (interact.matchesSelector(event.target, '.drag-handle')) {\n * // force drag with handle target\n * action.name = drag\n * }\n * else {\n * // resize from the top and right edges\n * action.name = 'resize'\n * action.edges = { top: true, right: true }\n * }\n *\n * return action\n * })\n * ```\n *\n * Returns or sets the function used to check action to be performed on\n * pointerDown\n *\n * @param checker - A function which takes a pointer event,\n * defaultAction string, interactable, element and interaction as parameters\n * and returns an object with name property 'drag' 'resize' or 'gesture' and\n * optionally an `edges` object with boolean 'top', 'left', 'bottom' and right\n * props.\n * @returns The checker function or this Interactable\n */\n actionChecker(checker?: Function): Interactable | Function\n /** @returns This interactable */\n ignoreFrom(newValue: string | Element | null): Interactable\n /** @returns The current ignoreFrom value */\n ignoreFrom(): string | Element | null\n /**\n * If the target of the `mousedown`, `pointerdown` or `touchstart` event or any\n * of it's parents match the given CSS selector or Element, no\n * drag/resize/gesture is started.\n *\n * @deprecated\n * Don't use this method. Instead set the `ignoreFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .draggable({\n * ignoreFrom: 'input, textarea, a[href]'',\n * })\n * .pointerEvents({\n * ignoreFrom: '[no-pointer]',\n * })\n * ```\n * Interactable\n */\n ignoreFrom(\n /** a CSS selector string, an Element or `null` to not ignore any elements */\n newValue?: string | Element | null,\n ): Interactable | string | Element | null\n allowFrom(): boolean\n /**\n *\n * A drag/resize/gesture is started only If the target of the `mousedown`,\n * `pointerdown` or `touchstart` event or any of it's parents match the given\n * CSS selector or Element.\n *\n * @deprecated\n * Don't use this method. Instead set the `allowFrom` option for each action\n * or for `pointerEvents`\n *\n * ```js\n * interact(targett)\n * .resizable({\n * allowFrom: '.resize-handle',\n * .pointerEvents({\n * allowFrom: '.handle',,\n * })\n * ```\n *\n * @param {string | Element | null} [newValue]\n * @return {string | Element | object} The current allowFrom value or this\n * Interactable\n */\n allowFrom(\n /** A CSS selector string, an Element or `null` to allow from any element */\n newValue: string | Element | null,\n ): Interactable\n }\n}\n\nfunction install(scope: Scope) {\n const {\n Interactable, // tslint:disable-line no-shadowed-variable\n } = scope\n\n Interactable.prototype.getAction = function getAction(\n this: Interactable,\n pointer: PointerType,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n ): ActionProps {\n const action = defaultActionChecker(this, event, interaction, element, scope)\n\n if (this.options.actionChecker) {\n return this.options.actionChecker(pointer, event, action, this, element, interaction)\n }\n\n return action\n }\n\n Interactable.prototype.ignoreFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('ignoreFrom', newValue)\n }, 'Interactable.ignoreFrom() has been deprecated. Use Interactble.draggable({ignoreFrom: newValue}).')\n\n Interactable.prototype.allowFrom = warnOnce(function (this: Interactable, newValue) {\n return this._backCompatOption('allowFrom', newValue)\n }, 'Interactable.allowFrom() has been deprecated. Use Interactble.draggable({allowFrom: newValue}).')\n\n Interactable.prototype.actionChecker = actionChecker\n\n Interactable.prototype.styleCursor = styleCursor\n}\n\nfunction defaultActionChecker(\n interactable: Interactable,\n event: PointerEventType,\n interaction: Interaction,\n element: Element,\n scope: Scope,\n) {\n const rect = interactable.getRect(element)\n const buttons =\n (event as MouseEvent).buttons ||\n {\n 0: 1,\n 1: 4,\n 3: 8,\n 4: 16,\n }[(event as MouseEvent).button as 0 | 1 | 3 | 4]\n const arg = {\n action: null,\n interactable,\n interaction,\n element,\n rect,\n buttons,\n }\n\n scope.fire('auto-start:check', arg)\n\n return arg.action\n}\n\nfunction styleCursor(this: Interactable, newValue?: boolean) {\n if (is.bool(newValue)) {\n this.options.styleCursor = newValue\n\n return this\n }\n\n if (newValue === null) {\n delete this.options.styleCursor\n\n return this\n }\n\n return this.options.styleCursor\n}\n\nfunction actionChecker(this: Interactable, checker?: any) {\n if (is.func(checker)) {\n this.options.actionChecker = checker\n\n return this\n }\n\n if (checker === null) {\n delete this.options.actionChecker\n\n return this\n }\n\n return this.options.actionChecker\n}\n\nexport default {\n id: 'auto-start/interactableMethods',\n install,\n}\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type {\n CursorChecker,\n PointerType,\n PointerEventType,\n Element,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\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\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './InteractableMethods'\nimport InteractableMethods from './InteractableMethods'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\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 * @param {number} [newValue] Any number. newValue <= 0 means no interactions.\n */\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': Omit & {\n interaction: Interaction\n }\n 'autoStart:prepared': { interaction: Interaction }\n 'auto-start:check': CheckSignalArg\n }\n}\n\ndeclare module '@interactjs/core/options' {\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 { interactStatic: interact, defaults } = 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 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(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n if (interaction.interacting()) return\n\n const actionInfo = getActionInfo(interaction, pointer, event, eventTarget, scope)\n prepare(interaction, actionInfo, scope)\n}\n\nfunction prepareOnMove(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:move'],\n scope: Scope,\n) {\n if (interaction.pointerType !== 'mouse' || interaction.pointerIsDown || 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 (\n !interaction.pointerIsDown ||\n interaction.interacting() ||\n !interaction.pointerWasMoved ||\n !interaction.prepared.name\n ) {\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 (\n interactable.options[actionName].manualStart ||\n !withinInteractionLimit(interactable, interaction.element, interaction.prepared, scope)\n ) {\n interaction.stop()\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 (\n interactable.testIgnoreAllow(interactable.options[action.name], element, eventTarget) &&\n interactable.options[action.name].enabled &&\n withinInteractionLimit(interactable, element, action, scope)\n ) {\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) {\n continue\n }\n\n const action = validateAction(matchAction, match, matchElement, eventTarget, 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(\n interaction,\n pointer,\n event,\n matches,\n matchElements,\n eventTarget,\n scope,\n )\n\n if (actionInfo.action && !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 {\n action,\n interactable,\n element,\n }: {\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 ? interactable.getRect(element) : 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)) {\n return false\n }\n\n for (const interaction of scope.interactions.list) {\n const otherAction = interaction.prepared.name\n\n if (!interaction.interacting()) {\n continue\n }\n\n activeInteractions++\n\n if (activeInteractions >= autoStartMax) {\n return false\n }\n\n if (interaction.interactable !== interactable) {\n continue\n }\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 } 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","import type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { SignalArgs, Scope } from '@interactjs/core/scope'\nimport type { ActionName, Element } from '@interactjs/core/types'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\n\nimport autoStart from './base'\n\nfunction beforeStart({ interaction, eventTarget, dx, dy }: SignalArgs['interactions:move'], scope: Scope) {\n if (interaction.prepared.name !== 'drag') return\n\n // check if a drag is in the correct axis\n const absX = Math.abs(dx)\n const absY = Math.abs(dy)\n const targetOptions = interaction.interactable.options.drag\n const startAxis = targetOptions.startAxis\n const currentAxis = absX > absY ? 'x' : absX < absY ? 'y' : 'xy'\n\n interaction.prepared.axis =\n targetOptions.lockAxis === 'start'\n ? (currentAxis[0] as 'x' | 'y') // always lock to one axis even if currentAxis === 'xy'\n : targetOptions.lockAxis\n\n // if the movement isn't in the startAxis of the interactable\n if (currentAxis !== 'xy' && startAxis !== 'xy' && startAxis !== currentAxis) {\n // cancel the prepared action\n ;(interaction as Interaction).prepared.name = null\n\n // then try to get a drag from another ineractable\n let element = eventTarget as Element\n\n const getDraggable = function (interactable: Interactable): Interactable | void {\n if (interactable === interaction.interactable) return\n\n const options = interaction.interactable.options.drag\n\n if (!options.manualStart && interactable.testIgnoreAllow(options, element, eventTarget)) {\n const action = interactable.getAction(\n interaction.downPointer,\n interaction.downEvent,\n interaction,\n element,\n )\n\n if (\n action &&\n action.name === 'drag' &&\n checkStartAxis(currentAxis, interactable) &&\n autoStart.validateAction(action, interactable, element, eventTarget, scope)\n ) {\n return interactable\n }\n }\n }\n\n // check all interactables\n while (is.element(element)) {\n const interactable = scope.interactables.forEachMatch(element, getDraggable)\n\n if (interactable) {\n ;(interaction as Interaction).prepared.name = 'drag'\n interaction.interactable = interactable\n interaction.element = element\n break\n }\n\n element = parentNode(element) as Element\n }\n }\n}\n\nfunction checkStartAxis(startAxis: string, interactable: Interactable) {\n if (!interactable) {\n return false\n }\n\n const thisAxis = interactable.options.drag.startAxis\n\n return startAxis === 'xy' || thisAxis === 'xy' || thisAxis === startAxis\n}\n\nexport default {\n id: 'auto-start/dragAxis',\n listeners: { 'autoStart:before-start': beforeStart },\n}\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable */\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n hold?: number\n delay?: number\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n autoStartHoldTimer?: any\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(basePlugin)\n\n defaults.perAction.hold = 0\n defaults.perAction.delay = 0\n}\n\nfunction getHoldDuration(interaction: Interaction) {\n const actionName = interaction.prepared && interaction.prepared.name\n\n if (!actionName) {\n return null\n }\n\n const options = interaction.interactable.options\n\n return options[actionName].hold || options[actionName].delay\n}\n\nconst hold: Plugin = {\n id: 'auto-start/hold',\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.autoStartHoldTimer = null\n },\n\n 'autoStart:prepared': ({ interaction }) => {\n const hold = getHoldDuration(interaction)\n\n if (hold > 0) {\n interaction.autoStartHoldTimer = setTimeout(() => {\n interaction.start(interaction.prepared, interaction.interactable, interaction.element)\n }, hold)\n }\n },\n\n 'interactions:move': ({ interaction, duplicate }) => {\n if (interaction.autoStartHoldTimer && interaction.pointerWasMoved && !duplicate) {\n clearTimeout(interaction.autoStartHoldTimer)\n interaction.autoStartHoldTimer = null\n }\n },\n\n // prevent regular down->move autoStart\n 'autoStart:before-start': ({ interaction }) => {\n const holdDuration = getHoldDuration(interaction)\n\n if (holdDuration > 0) {\n interaction.prepared.name = null\n }\n },\n },\n getHoldDuration,\n}\nexport default hold\n","import type { Scope } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './dragAxis'\nimport './hold'\n\nimport autoStart from './base'\nimport dragAxis from './dragAxis'\nimport hold from './hold'\n/* eslint-enable import/no-duplicates */\n\nexport default {\n id: 'auto-start',\n install(scope: Scope) {\n scope.usePlugin(autoStart)\n scope.usePlugin(hold)\n scope.usePlugin(dragAxis)\n },\n}\n","import { matchesSelector, nodeContains } from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerEventType } from '@interactjs/core/types'\n\ntype PreventDefaultValue = 'always' | 'never' | 'auto'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n preventDefault(newValue: PreventDefaultValue): this\n preventDefault(): PreventDefaultValue\n /**\n * Returns or sets whether to prevent the browser's default behaviour in\n * response to pointer events. Can be set to:\n * - `'always'` to always prevent\n * - `'never'` to never prevent\n * - `'auto'` to let interact.js try to determine what would be best\n *\n * @param newValue - `'always'`, `'never'` or `'auto'`\n * @returns The current setting or this Interactable\n */\n preventDefault(newValue?: PreventDefaultValue): PreventDefaultValue | this\n checkAndPreventDefault(event: Event): void\n }\n}\n\nconst preventDefault = function preventDefault(this: Interactable, newValue?: PreventDefaultValue) {\n if (/^(always|never|auto)$/.test(newValue)) {\n this.options.preventDefault = newValue\n return this\n }\n\n if (is.bool(newValue)) {\n this.options.preventDefault = newValue ? 'always' : 'never'\n return this\n }\n\n return this.options.preventDefault\n} as Interactable['preventDefault']\n\nfunction checkAndPreventDefault(interactable: Interactable, scope: Scope, event: Event) {\n const setting = interactable.options.preventDefault\n\n if (setting === 'never') return\n\n if (setting === 'always') {\n event.preventDefault()\n return\n }\n\n // setting === 'auto'\n\n // if the browser supports passive event listeners and isn't running on iOS,\n // don't preventDefault of touch{start,move} events. CSS touch-action and\n // user-select should be used instead of calling event.preventDefault().\n if (scope.events.supportsPassive && /^touch(start|move)$/.test(event.type)) {\n const doc = getWindow(event.target).document\n const docOptions = scope.getDocOptions(doc)\n\n if (!(docOptions && docOptions.events) || docOptions.events.passive !== false) {\n return\n }\n }\n\n // don't preventDefault of pointerdown events\n if (/^(mouse|pointer|touch)*(down|start)/i.test(event.type)) {\n return\n }\n\n // don't preventDefault on editable elements\n if (\n is.element(event.target) &&\n matchesSelector(event.target, 'input,select,textarea,[contenteditable=true],[contenteditable=true] *')\n ) {\n return\n }\n\n event.preventDefault()\n}\n\nfunction onInteractionEvent({ interaction, event }: { interaction: Interaction; event: PointerEventType }) {\n if (interaction.interactable) {\n interaction.interactable.checkAndPreventDefault(event as Event)\n }\n}\n\nexport function install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.preventDefault = preventDefault\n\n Interactable.prototype.checkAndPreventDefault = function (event) {\n return checkAndPreventDefault(this, scope, event)\n }\n\n // prevent native HTML5 drag on interact.js target elements\n scope.interactions.docEvents.push({\n type: 'dragstart',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n if (\n interaction.element &&\n (interaction.element === event.target || nodeContains(interaction.element, event.target))\n ) {\n interaction.interactable.checkAndPreventDefault(event)\n return\n }\n }\n },\n })\n}\n\nexport default {\n id: 'core/interactablePreventDefault',\n install,\n listeners: ['down', 'move', 'up', 'cancel'].reduce((acc, eventType) => {\n acc[`interactions:${eventType}`] = onInteractionEvent\n return acc\n }, {} as any),\n}\n","import type { Actions } from '@interactjs/core/types'\n\nexport default function isNonNativeEvent(type: string, actions: Actions) {\n if (actions.phaselessTypes[type]) {\n return true\n }\n\n for (const name in actions.map) {\n if (type.indexOf(name) === 0 && type.substr(name.length) in actions.phases) {\n return true\n }\n }\n\n return false\n}\n","import * as arr from './arr'\nimport is from './is'\n\n// tslint:disable-next-line ban-types\nexport default function clone(source: T): Partial {\n const dest = {} as Partial\n\n for (const prop in source) {\n const value = source[prop]\n\n if (is.plainObject(value)) {\n dest[prop] = clone(value) as any\n } else if (is.array(value)) {\n dest[prop] = arr.from(value) as typeof value\n } else {\n dest[prop] = value\n }\n }\n\n return dest\n}\n","import type { EventPhase } from '@interactjs/core/InteractEvent'\nimport type { Interaction, DoAnyPhaseArg } from '@interactjs/core/Interaction'\nimport type { EdgeOptions, FullRect, Point, Rect } from '@interactjs/core/types'\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type { Modifier, ModifierArg, ModifierState } from './types'\n\nexport interface ModificationResult {\n delta: Point\n rectDelta: Rect\n coords: Point\n rect: FullRect\n eventProps: any[]\n changed: boolean\n}\n\ninterface MethodArg {\n phase: EventPhase\n pageCoords: Point\n rect: FullRect\n coords: Point\n preEnd?: boolean\n skipModifiers?: number\n}\n\nexport class Modification {\n states: ModifierState[] = []\n startOffset: Rect = { left: 0, right: 0, top: 0, bottom: 0 }\n startDelta!: Point\n result!: ModificationResult\n endResult!: Point\n startEdges!: EdgeOptions\n edges: EdgeOptions\n readonly interaction: Readonly\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n this.result = createResult()\n this.edges = {\n left: false,\n right: false,\n top: false,\n bottom: false,\n }\n }\n\n start({ phase }: { phase: EventPhase }, pageCoords: Point) {\n const { interaction } = this\n const modifierList = getModifierList(interaction)\n this.prepareStates(modifierList)\n\n this.startEdges = extend({}, interaction.edges)\n this.edges = extend({}, this.startEdges)\n this.startOffset = getRectOffset(interaction.rect, pageCoords)\n this.startDelta = { x: 0, y: 0 }\n\n const arg = this.fillArg({\n phase,\n pageCoords,\n preEnd: false,\n })\n\n this.result = createResult()\n this.startAll(arg)\n\n const result = (this.result = this.setAll(arg))\n\n return result\n }\n\n fillArg(arg: Partial) {\n const { interaction } = this\n\n arg.interaction = interaction\n arg.interactable = interaction.interactable\n arg.element = interaction.element\n arg.rect ||= interaction.rect\n arg.edges ||= this.startEdges\n arg.startOffset = this.startOffset\n\n return arg as ModifierArg\n }\n\n startAll(arg: MethodArg & Partial) {\n for (const state of this.states) {\n if (state.methods.start) {\n arg.state = state\n state.methods.start(arg as ModifierArg)\n }\n }\n }\n\n setAll(arg: MethodArg & Partial): ModificationResult {\n const { phase, preEnd, skipModifiers, rect: unmodifiedRect, edges: unmodifiedEdges } = arg\n\n arg.coords = extend({}, arg.pageCoords)\n arg.rect = extend({}, unmodifiedRect)\n arg.edges = extend({}, unmodifiedEdges)\n\n const states = skipModifiers ? this.states.slice(skipModifiers) : this.states\n\n const newResult = createResult(arg.coords, arg.rect)\n\n for (const state of states) {\n const { options } = state\n const lastModifierCoords = extend({}, arg.coords)\n let returnValue = null\n\n if (state.methods?.set && this.shouldDo(options, preEnd, phase)) {\n arg.state = state\n returnValue = state.methods.set(arg as ModifierArg)\n\n rectUtils.addEdges(arg.edges, arg.rect, {\n x: arg.coords.x - lastModifierCoords.x,\n y: arg.coords.y - lastModifierCoords.y,\n })\n }\n\n newResult.eventProps.push(returnValue)\n }\n\n extend(this.edges, arg.edges)\n\n newResult.delta.x = arg.coords.x - arg.pageCoords.x\n newResult.delta.y = arg.coords.y - arg.pageCoords.y\n\n newResult.rectDelta.left = arg.rect.left - unmodifiedRect.left\n newResult.rectDelta.right = arg.rect.right - unmodifiedRect.right\n newResult.rectDelta.top = arg.rect.top - unmodifiedRect.top\n newResult.rectDelta.bottom = arg.rect.bottom - unmodifiedRect.bottom\n\n const prevCoords = this.result.coords\n const prevRect = this.result.rect\n\n if (prevCoords && prevRect) {\n const rectChanged =\n newResult.rect.left !== prevRect.left ||\n newResult.rect.right !== prevRect.right ||\n newResult.rect.top !== prevRect.top ||\n newResult.rect.bottom !== prevRect.bottom\n\n newResult.changed =\n rectChanged || prevCoords.x !== newResult.coords.x || prevCoords.y !== newResult.coords.y\n }\n\n return newResult\n }\n\n applyToInteraction(arg: { phase: EventPhase; rect?: Rect }) {\n const { interaction } = this\n const { phase } = arg\n const curCoords = interaction.coords.cur\n const startCoords = interaction.coords.start\n const { result, startDelta } = this\n const curDelta = result.delta\n\n if (phase === 'start') {\n extend(this.startDelta, result.delta)\n }\n\n for (const [coordsSet, delta] of [\n [startCoords, startDelta],\n [curCoords, curDelta],\n ] as const) {\n coordsSet.page.x += delta.x\n coordsSet.page.y += delta.y\n coordsSet.client.x += delta.x\n coordsSet.client.y += delta.y\n }\n\n const { rectDelta } = this.result\n const rect = arg.rect || interaction.rect\n\n rect.left += rectDelta.left\n rect.right += rectDelta.right\n rect.top += rectDelta.top\n rect.bottom += rectDelta.bottom\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n setAndApply(\n arg: Partial & {\n phase: EventPhase\n preEnd?: boolean\n skipModifiers?: number\n modifiedCoords?: Point\n },\n ): void | false {\n const { interaction } = this\n const { phase, preEnd, skipModifiers } = arg\n\n const result = this.setAll(\n this.fillArg({\n preEnd,\n phase,\n pageCoords: arg.modifiedCoords || interaction.coords.cur.page,\n }),\n )\n\n this.result = result\n\n // don't fire an action move if a modifier would keep the event in the same\n // cordinates as before\n if (\n !result.changed &&\n (!skipModifiers || skipModifiers < this.states.length) &&\n interaction.interacting()\n ) {\n return false\n }\n\n if (arg.modifiedCoords) {\n const { page } = interaction.coords.cur\n const adjustment = {\n x: arg.modifiedCoords.x - page.x,\n y: arg.modifiedCoords.y - page.y,\n }\n\n result.coords.x += adjustment.x\n result.coords.y += adjustment.y\n result.delta.x += adjustment.x\n result.delta.y += adjustment.y\n }\n\n this.applyToInteraction(arg)\n }\n\n beforeEnd(arg: Omit & { state?: ModifierState }): void | false {\n const { interaction, event } = arg\n const states = this.states\n\n if (!states || !states.length) {\n return\n }\n\n let doPreend = false\n\n for (const state of states) {\n arg.state = state\n const { options, methods } = state\n\n const endPosition = methods.beforeEnd && methods.beforeEnd(arg as unknown as ModifierArg)\n\n if (endPosition) {\n this.endResult = endPosition\n return false\n }\n\n doPreend = doPreend || (!doPreend && this.shouldDo(options, true, arg.phase, true))\n }\n\n if (doPreend) {\n // trigger a final modified move before ending\n interaction.move({ event, preEnd: true })\n }\n }\n\n stop(arg: { interaction: Interaction }) {\n const { interaction } = arg\n\n if (!this.states || !this.states.length) {\n return\n }\n\n const modifierArg: Partial = extend(\n {\n states: this.states,\n interactable: interaction.interactable,\n element: interaction.element,\n rect: null,\n },\n arg,\n )\n\n this.fillArg(modifierArg)\n\n for (const state of this.states) {\n modifierArg.state = state\n\n if (state.methods.stop) {\n state.methods.stop(modifierArg as ModifierArg)\n }\n }\n\n this.states = null\n this.endResult = null\n }\n\n prepareStates(modifierList: Modifier[]) {\n this.states = []\n\n for (let index = 0; index < modifierList.length; index++) {\n const { options, methods, name } = modifierList[index]\n\n this.states.push({\n options,\n methods,\n index,\n name,\n })\n }\n\n return this.states\n }\n\n restoreInteractionCoords({ interaction: { coords, rect, modification } }: { interaction: Interaction }) {\n if (!modification.result) return\n\n const { startDelta } = modification\n const { delta: curDelta, rectDelta } = modification.result\n\n const coordsAndDeltas = [\n [coords.start, startDelta],\n [coords.cur, curDelta],\n ]\n\n for (const [coordsSet, delta] of coordsAndDeltas as any) {\n coordsSet.page.x -= delta.x\n coordsSet.page.y -= delta.y\n coordsSet.client.x -= delta.x\n coordsSet.client.y -= delta.y\n }\n\n rect.left -= rectDelta.left\n rect.right -= rectDelta.right\n rect.top -= rectDelta.top\n rect.bottom -= rectDelta.bottom\n }\n\n shouldDo(options, preEnd?: boolean, phase?: string, requireEndOnly?: boolean) {\n if (\n // ignore disabled modifiers\n !options ||\n options.enabled === false ||\n // check if we require endOnly option to fire move before end\n (requireEndOnly && !options.endOnly) ||\n // don't apply endOnly modifiers when not ending\n (options.endOnly && !preEnd) ||\n // check if modifier should run be applied on start\n (phase === 'start' && !options.setStart)\n ) {\n return false\n }\n\n return true\n }\n\n copyFrom(other: Modification) {\n this.startOffset = other.startOffset\n this.startDelta = other.startDelta\n this.startEdges = other.startEdges\n this.edges = other.edges\n this.states = other.states.map((s) => clone(s) as ModifierState)\n this.result = createResult(extend({}, other.result.coords), extend({}, other.result.rect))\n }\n\n destroy() {\n for (const prop in this) {\n this[prop] = null\n }\n }\n}\n\nfunction createResult(coords?: Point, rect?: FullRect): ModificationResult {\n return {\n rect,\n coords,\n delta: { x: 0, y: 0 },\n rectDelta: {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n },\n eventProps: [],\n changed: true,\n }\n}\n\nfunction getModifierList(interaction) {\n const actionOptions = interaction.interactable.options[interaction.prepared.name]\n const actionModifiers = actionOptions.modifiers\n\n if (actionModifiers && actionModifiers.length) {\n return actionModifiers\n }\n\n return ['snap', 'snapSize', 'snapEdges', 'restrict', 'restrictEdges', 'restrictSize']\n .map((type) => {\n const options = actionOptions[type]\n\n return (\n options &&\n options.enabled && {\n options,\n methods: options._methods,\n }\n )\n })\n .filter((m) => !!m)\n}\n\nexport function getRectOffset(rect, coords) {\n return rect\n ? {\n left: coords.x - rect.left,\n top: coords.y - rect.top,\n right: rect.right - coords.x,\n bottom: rect.bottom - coords.y,\n }\n : {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n }\n}\n","import type { InteractEvent } from '@interactjs/core/InteractEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\n\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n modification?: Modification\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface InteractEvent {\n modifiers?: Array<{\n name: string\n [key: string]: any\n }>\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n modifiers?: Modifier[]\n }\n}\n\nexport function makeModifier<\n Defaults extends { enabled?: boolean },\n State extends ModifierState,\n Name extends string,\n Result,\n>(module: ModifierModule, name?: Name) {\n const { defaults } = module\n const methods = {\n start: module.start,\n set: module.set,\n beforeEnd: module.beforeEnd,\n stop: module.stop,\n }\n\n const modifier = (_options?: Partial) => {\n const options = (_options || {}) as Defaults\n\n options.enabled = options.enabled !== false\n\n // add missing defaults to options\n for (const prop in defaults) {\n if (!(prop in options)) {\n ;(options as any)[prop] = defaults[prop]\n }\n }\n\n const m: Modifier = {\n options,\n methods,\n name,\n enable: () => {\n options.enabled = true\n return m\n },\n disable: () => {\n options.enabled = false\n return m\n },\n }\n\n return m\n }\n\n if (name && typeof name === 'string') {\n // for backwrads compatibility\n modifier._defaults = defaults\n modifier._methods = methods\n }\n\n return modifier\n}\n\nexport function addEventModifiers({\n iEvent,\n interaction,\n}: {\n iEvent: InteractEvent\n interaction: Interaction\n}) {\n const result = interaction.modification!.result\n\n if (result) {\n iEvent.modifiers = result.eventProps\n }\n}\n\nconst modifiersBase: Plugin = {\n id: 'modifiers/base',\n before: ['actions'],\n install: (scope) => {\n scope.defaults.perAction.modifiers = []\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.modification = new Modification(interaction)\n },\n\n 'interactions:before-action-start': (arg) => {\n const { interaction } = arg\n const modification = arg.interaction.modification!\n\n modification.start(arg, interaction.coords.start.page)\n interaction.edges = modification.edges\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-move': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.setAndApply(arg)\n interaction.edges = modification.edges\n\n return ret\n },\n\n 'interactions:before-action-end': (arg) => {\n const { interaction } = arg\n const { modification } = interaction\n const ret = modification.beforeEnd(arg)\n interaction.edges = modification.startEdges\n\n return ret\n },\n\n 'interactions:action-start': addEventModifiers,\n 'interactions:action-move': addEventModifiers,\n 'interactions:action-end': addEventModifiers,\n\n 'interactions:after-action-start': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-move': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n\n 'interactions:stop': (arg) => arg.interaction.modification.stop(arg),\n },\n}\n\nexport default modifiersBase\n","import type { Point, Listeners, OrBoolean, Element, Rect } from '@interactjs/core/types'\n\nexport interface Defaults {\n base: BaseDefaults\n perAction: PerActionDefaults\n actions: ActionDefaults\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ActionDefaults {}\n\nexport interface BaseDefaults {\n preventDefault?: 'always' | 'never' | 'auto'\n deltaSource?: 'page' | 'client'\n context?: Node\n getRect?: (element: Element) => Rect\n}\n\nexport interface PerActionDefaults {\n enabled?: boolean\n origin?: Point | string | Element\n listeners?: Listeners\n allowFrom?: string | Element\n ignoreFrom?: string | Element\n}\n\nexport type Options = Partial &\n Partial & {\n [P in keyof ActionDefaults]?: Partial\n }\n\nexport interface OptionsArg extends BaseDefaults, OrBoolean> {}\n\nexport const defaults: Defaults = {\n base: {\n preventDefault: 'auto',\n deltaSource: 'page',\n },\n\n perAction: {\n enabled: false,\n origin: { x: 0, y: 0 },\n },\n\n actions: {} as ActionDefaults,\n}\n","import extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\nimport hypot from '@interactjs/utils/hypot'\n\nimport type { Point, FullRect, PointerEventType, Element, ActionName } from '@interactjs/core/types'\n\nimport { BaseEvent } from './BaseEvent'\nimport type { Interaction } from './Interaction'\nimport { defaults } from './options'\n\nexport type EventPhase = keyof PhaseMap\n\nexport interface PhaseMap {\n start: true\n move: true\n end: true\n}\n\n// defined outside of class definition to avoid assignment of undefined during\n// construction\nexport interface InteractEvent {\n pageX: number\n pageY: number\n\n clientX: number\n clientY: number\n\n dx: number\n dy: number\n\n velocityX: number\n velocityY: number\n}\n\nexport class InteractEvent<\n T extends ActionName = never,\n P extends EventPhase = EventPhase,\n> extends BaseEvent {\n declare target: Element\n declare currentTarget: Element\n relatedTarget: Element | null = null\n screenX?: number\n screenY?: number\n button: number\n buttons: number\n ctrlKey: boolean\n shiftKey: boolean\n altKey: boolean\n metaKey: boolean\n page: Point\n client: Point\n delta: Point\n rect: FullRect\n x0: number\n y0: number\n t0: number\n dt: number\n duration: number\n clientX0: number\n clientY0: number\n velocity: Point\n speed: number\n swipe: ReturnType['getSwipe']>\n // resize\n axes?: 'x' | 'y' | 'xy'\n /** @internal */\n preEnd?: boolean\n\n constructor(\n interaction: Interaction,\n event: PointerEventType,\n actionName: T,\n phase: P,\n element: Element,\n preEnd?: boolean,\n type?: string,\n ) {\n super(interaction)\n\n element = element || interaction.element\n\n const target = interaction.interactable\n const deltaSource = (((target && target.options) || defaults) as any).deltaSource as 'page' | 'client'\n const origin = getOriginXY(target, element, actionName)\n const starting = phase === 'start'\n const ending = phase === 'end'\n const prevEvent = starting ? this : interaction.prevEvent\n const coords = starting\n ? interaction.coords.start\n : ending\n ? { page: prevEvent.page, client: prevEvent.client, timeStamp: interaction.coords.cur.timeStamp }\n : interaction.coords.cur\n\n this.page = extend({}, coords.page)\n this.client = extend({}, coords.client)\n this.rect = extend({}, interaction.rect)\n this.timeStamp = coords.timeStamp\n\n if (!ending) {\n this.page.x -= origin.x\n this.page.y -= origin.y\n\n this.client.x -= origin.x\n this.client.y -= origin.y\n }\n\n this.ctrlKey = event.ctrlKey\n this.altKey = event.altKey\n this.shiftKey = event.shiftKey\n this.metaKey = event.metaKey\n this.button = (event as MouseEvent).button\n this.buttons = (event as MouseEvent).buttons\n this.target = element\n this.currentTarget = element\n this.preEnd = preEnd\n this.type = type || actionName + (phase || '')\n this.interactable = target\n\n this.t0 = starting ? interaction.pointers[interaction.pointers.length - 1].downTime : prevEvent.t0\n\n this.x0 = interaction.coords.start.page.x - origin.x\n this.y0 = interaction.coords.start.page.y - origin.y\n this.clientX0 = interaction.coords.start.client.x - origin.x\n this.clientY0 = interaction.coords.start.client.y - origin.y\n\n if (starting || ending) {\n this.delta = { x: 0, y: 0 }\n } else {\n this.delta = {\n x: this[deltaSource].x - prevEvent[deltaSource].x,\n y: this[deltaSource].y - prevEvent[deltaSource].y,\n }\n }\n\n this.dt = interaction.coords.delta.timeStamp\n this.duration = this.timeStamp - this.t0\n\n // velocity and speed in pixels per second\n this.velocity = extend({}, interaction.coords.velocity[deltaSource])\n this.speed = hypot(this.velocity.x, this.velocity.y)\n\n this.swipe = ending || phase === 'inertiastart' ? this.getSwipe() : null\n }\n\n getSwipe() {\n const interaction = this._interaction\n\n if (interaction.prevEvent.speed < 600 || this.timeStamp - interaction.prevEvent.timeStamp > 150) {\n return null\n }\n\n let angle = (180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX)) / Math.PI\n const overlap = 22.5\n\n if (angle < 0) {\n angle += 360\n }\n\n const left = 135 - overlap <= angle && angle < 225 + overlap\n const up = 225 - overlap <= angle && angle < 315 + overlap\n\n const right = !left && (315 - overlap <= angle || angle < 45 + overlap)\n const down = !up && 45 - overlap <= angle && angle < 135 + overlap\n\n return {\n up,\n down,\n left,\n right,\n angle,\n speed: interaction.prevEvent.speed,\n velocity: {\n x: interaction.prevEvent.velocityX,\n y: interaction.prevEvent.velocityY,\n },\n }\n }\n\n preventDefault() {}\n\n /**\n * Don't call listeners on the remaining targets\n */\n stopImmediatePropagation() {\n this.immediatePropagationStopped = this.propagationStopped = true\n }\n\n /**\n * Don't call any other listeners (even on the current target)\n */\n stopPropagation() {\n this.propagationStopped = true\n }\n}\n\n// getters and setters defined here to support typescript 3.6 and below which\n// don't support getter and setters in .d.ts files\nObject.defineProperties(InteractEvent.prototype, {\n pageX: {\n get() {\n return this.page.x\n },\n set(value) {\n this.page.x = value\n },\n },\n pageY: {\n get() {\n return this.page.y\n },\n set(value) {\n this.page.y = value\n },\n },\n\n clientX: {\n get() {\n return this.client.x\n },\n set(value) {\n this.client.x = value\n },\n },\n clientY: {\n get() {\n return this.client.y\n },\n set(value) {\n this.client.y = value\n },\n },\n\n dx: {\n get() {\n return this.delta.x\n },\n set(value) {\n this.delta.x = value\n },\n },\n dy: {\n get() {\n return this.delta.y\n },\n set(value) {\n this.delta.y = value\n },\n },\n\n velocityX: {\n get() {\n return this.velocity.x\n },\n set(value) {\n this.velocity.x = value\n },\n },\n velocityY: {\n get() {\n return this.velocity.y\n },\n set(value) {\n this.velocity.y = value\n },\n },\n})\n","import type { PointerEventType, PointerType } from '@interactjs/core/types'\n\nexport class PointerInfo {\n id: number\n pointer: PointerType\n event: PointerEventType\n downTime: number\n downTarget: Node\n\n constructor(id: number, pointer: PointerType, event: PointerEventType, downTime: number, downTarget: Node) {\n this.id = id\n this.pointer = pointer\n this.event = event\n this.downTime = downTime\n this.downTarget = downTarget\n }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport hypot from '@interactjs/utils/hypot'\nimport { warnOnce, copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport type {\n Element,\n EdgeOptions,\n PointerEventType,\n PointerType,\n FullRect,\n CoordsSet,\n ActionName,\n ActionProps,\n} from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { EventPhase } from './InteractEvent'\nimport { InteractEvent } from './InteractEvent'\nimport type { ActionDefaults } from './options'\nimport { PointerInfo } from './PointerInfo'\nimport type { Scope } from './scope'\n\nexport enum _ProxyValues {\n interactable = '',\n element = '',\n prepared = '',\n pointerIsDown = '',\n pointerWasMoved = '',\n _proxy = '',\n}\n\nexport enum _ProxyMethods {\n start = '',\n move = '',\n end = '',\n stop = '',\n interacting = '',\n}\n\nexport type PointerArgProps = {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n pointerIndex: number\n pointerInfo: PointerInfo\n interaction: Interaction\n} & T\n\nexport interface DoPhaseArg {\n event: PointerEventType\n phase: EventPhase\n interaction: Interaction\n iEvent: InteractEvent\n preEnd?: boolean\n type?: string\n}\n\nexport type DoAnyPhaseArg = DoPhaseArg\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:new': { interaction: Interaction }\n 'interactions:down': PointerArgProps<{\n type: 'down'\n }>\n 'interactions:move': PointerArgProps<{\n type: 'move'\n dx: number\n dy: number\n duplicate: boolean\n }>\n 'interactions:up': PointerArgProps<{\n type: 'up'\n curEventTarget: EventTarget\n }>\n 'interactions:cancel': SignalArgs['interactions:up'] & {\n type: 'cancel'\n curEventTarget: EventTarget\n }\n 'interactions:update-pointer': PointerArgProps<{\n down: boolean\n }>\n 'interactions:remove-pointer': PointerArgProps\n 'interactions:blur': { interaction: Interaction; event: Event; type: 'blur' }\n 'interactions:before-action-start': Omit\n 'interactions:action-start': DoAnyPhaseArg\n 'interactions:after-action-start': DoAnyPhaseArg\n 'interactions:before-action-move': Omit\n 'interactions:action-move': DoAnyPhaseArg\n 'interactions:after-action-move': DoAnyPhaseArg\n 'interactions:before-action-end': Omit\n 'interactions:action-end': DoAnyPhaseArg\n 'interactions:after-action-end': DoAnyPhaseArg\n 'interactions:stop': { interaction: Interaction }\n }\n}\n\nexport type InteractionProxy = Pick<\n Interaction,\n keyof typeof _ProxyValues | keyof typeof _ProxyMethods\n>\n\nlet idCounter = 0\n\nexport class Interaction {\n /** current interactable being interacted with */\n interactable: Interactable | null = null\n\n /** the target element of the interactable */\n element: Element | null = null\n rect: FullRect | null = null\n /** @internal */\n _rects?: {\n start: FullRect\n corrected: FullRect\n previous: FullRect\n delta: FullRect\n }\n /** @internal */\n edges: EdgeOptions | null = null\n\n /** @internal */\n _scopeFire: Scope['fire']\n\n // action that's ready to be fired on next move event\n prepared: ActionProps = {\n name: null,\n axis: null,\n edges: null,\n }\n\n pointerType: string\n\n /** @internal keep track of added pointers */\n pointers: PointerInfo[] = []\n\n /** @internal pointerdown/mousedown/touchstart event */\n downEvent: PointerEventType | null = null\n\n /** @internal */ downPointer: PointerType = {} as PointerType\n\n /** @internal */\n _latestPointer: {\n pointer: PointerType\n event: PointerEventType\n eventTarget: Node\n } = {\n pointer: null,\n event: null,\n eventTarget: null,\n }\n\n /** @internal */ prevEvent: InteractEvent = null\n\n pointerIsDown = false\n pointerWasMoved = false\n /** @internal */ _interacting = false\n /** @internal */ _ending = false\n /** @internal */ _stopped = true\n /** @internal */ _proxy: InteractionProxy\n\n /** @internal */ simulation = null\n\n /** @internal */ get pointerMoveTolerance() {\n return 1\n }\n\n doMove = warnOnce(function (this: Interaction, signalArg: any) {\n this.move(signalArg)\n }, 'The interaction.doMove() method has been renamed to interaction.move()')\n\n coords: CoordsSet = {\n // Starting InteractEvent pointer coordinates\n start: pointerUtils.newCoords(),\n // Previous native pointer move event coordinates\n prev: pointerUtils.newCoords(),\n // current native pointer move event coordinates\n cur: pointerUtils.newCoords(),\n // Change in coordinates and time of the pointer\n delta: pointerUtils.newCoords(),\n // pointer velocity\n velocity: pointerUtils.newCoords(),\n }\n\n /** @internal */ readonly _id: number = idCounter++\n\n constructor({ pointerType, scopeFire }: { pointerType?: string; scopeFire: Scope['fire'] }) {\n this._scopeFire = scopeFire\n this.pointerType = pointerType\n\n const that = this\n\n this._proxy = {} as InteractionProxy\n\n for (const key in _ProxyValues) {\n Object.defineProperty(this._proxy, key, {\n get() {\n return that[key]\n },\n })\n }\n\n for (const key in _ProxyMethods) {\n Object.defineProperty(this._proxy, key, {\n value: (...args: any[]) => that[key](...args),\n })\n }\n\n this._scopeFire('interactions:new', { interaction: this })\n }\n\n pointerDown(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n const pointerIndex = this.updatePointer(pointer, event, eventTarget, true)\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:down', {\n pointer,\n event,\n eventTarget,\n pointerIndex,\n pointerInfo,\n type: 'down',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable({\n * // disable the default drag start by down->move\n * manualStart: true\n * })\n * // start dragging after the user holds the pointer down\n * .on('hold', function (event) {\n * var interaction = event.interaction\n *\n * if (!interaction.interacting()) {\n * interaction.start({ name: 'drag' },\n * event.interactable,\n * event.currentTarget)\n * }\n * })\n * ```\n *\n * Start an action with the given Interactable and Element as tartgets. The\n * action must be enabled for the target Interactable and an appropriate\n * number of pointers must be held down - 1 for drag/resize, 2 for gesture.\n *\n * Use it with `interactable.able({ manualStart: false })` to always\n * [start actions manually](https://github.com/taye/interact.js/issues/114)\n *\n * @param action - The action to be performed - drag, resize, etc.\n * @param target - The Interactable to target\n * @param element - The DOM Element to target\n * @returns Whether the interaction was successfully started\n */\n start(action: ActionProps, interactable: Interactable, element: Element): boolean {\n if (\n this.interacting() ||\n !this.pointerIsDown ||\n this.pointers.length < (action.name === 'gesture' ? 2 : 1) ||\n !interactable.options[action.name as keyof ActionDefaults].enabled\n ) {\n return false\n }\n\n copyAction(this.prepared, action)\n\n this.interactable = interactable\n this.element = element\n this.rect = interactable.getRect(element)\n this.edges = this.prepared.edges\n ? extend({}, this.prepared.edges)\n : { left: true, right: true, top: true, bottom: true }\n this._stopped = false\n this._interacting =\n this._doPhase({\n interaction: this,\n event: this.downEvent,\n phase: 'start',\n }) && !this._stopped\n\n return this._interacting\n }\n\n pointerMove(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n if (!this.simulation && !(this.modification && this.modification.endResult)) {\n this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const duplicateMove =\n this.coords.cur.page.x === this.coords.prev.page.x &&\n this.coords.cur.page.y === this.coords.prev.page.y &&\n this.coords.cur.client.x === this.coords.prev.client.x &&\n this.coords.cur.client.y === this.coords.prev.client.y\n\n let dx: number\n let dy: number\n\n // register movement greater than pointerMoveTolerance\n if (this.pointerIsDown && !this.pointerWasMoved) {\n dx = this.coords.cur.client.x - this.coords.start.client.x\n dy = this.coords.cur.client.y - this.coords.start.client.y\n\n this.pointerWasMoved = hypot(dx, dy) > this.pointerMoveTolerance\n }\n\n const pointerIndex = this.getPointerIndex(pointer)\n const signalArg = {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n type: 'move' as const,\n eventTarget,\n dx,\n dy,\n duplicate: duplicateMove,\n interaction: this as unknown as Interaction,\n }\n\n if (!duplicateMove) {\n // set pointer coordinate, time changes and velocity\n pointerUtils.setCoordVelocity(this.coords.velocity, this.coords.delta)\n }\n\n this._scopeFire('interactions:move', signalArg)\n\n if (!duplicateMove && !this.simulation) {\n // if interacting, fire an 'action-move' signal etc\n if (this.interacting()) {\n signalArg.type = null\n this.move(signalArg)\n }\n\n if (this.pointerWasMoved) {\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n }\n }\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('dragmove', function (event) {\n * if (someCondition) {\n * // change the snap settings\n * event.interactable.draggable({ snap: { targets: [] }})\n * // fire another move event with re-calculated snap\n * event.interaction.move()\n * }\n * })\n * ```\n *\n * Force a move of the current action at the same coordinates. Useful if\n * snap/restrict has been changed and you want a movement with the new\n * settings.\n */\n move(signalArg?: any) {\n if (!signalArg || !signalArg.event) {\n pointerUtils.setZeroCoords(this.coords.delta)\n }\n\n signalArg = extend(\n {\n pointer: this._latestPointer.pointer,\n event: this._latestPointer.event,\n eventTarget: this._latestPointer.eventTarget,\n interaction: this,\n },\n signalArg || {},\n )\n\n signalArg.phase = 'move'\n\n this._doPhase(signalArg)\n }\n\n /**\n * @internal\n * End interact move events and stop auto-scroll unless simulation is running\n */\n pointerUp(pointer: PointerType, event: PointerEventType, eventTarget: Node, curEventTarget: EventTarget) {\n let pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) {\n pointerIndex = this.updatePointer(pointer, event, eventTarget, false)\n }\n\n const type = /cancel$/i.test(event.type) ? 'cancel' : 'up'\n\n this._scopeFire(`interactions:${type}` as 'interactions:up' | 'interactions:cancel', {\n pointer,\n pointerIndex,\n pointerInfo: this.pointers[pointerIndex],\n event,\n eventTarget,\n type: type as any,\n curEventTarget,\n interaction: this as unknown as Interaction,\n })\n\n if (!this.simulation) {\n this.end(event)\n }\n\n this.removePointer(pointer, event)\n }\n\n /** @internal */\n documentBlur(event: Event) {\n this.end(event as any)\n this._scopeFire('interactions:blur', {\n event,\n type: 'blur',\n interaction: this as unknown as Interaction,\n })\n }\n\n /**\n * ```js\n * interact(target)\n * .draggable(true)\n * .on('move', function (event) {\n * if (event.pageX > 1000) {\n * // end the current action\n * event.interaction.end()\n * // stop all further listeners from being called\n * event.stopImmediatePropagation()\n * }\n * })\n * ```\n */\n end(event?: PointerEventType) {\n this._ending = true\n event = event || this._latestPointer.event\n let endPhaseResult: boolean\n\n if (this.interacting()) {\n endPhaseResult = this._doPhase({\n event,\n interaction: this,\n phase: 'end',\n })\n }\n\n this._ending = false\n\n if (endPhaseResult === true) {\n this.stop()\n }\n }\n\n currentAction() {\n return this._interacting ? this.prepared.name : null\n }\n\n interacting() {\n return this._interacting\n }\n\n stop() {\n this._scopeFire('interactions:stop', { interaction: this })\n\n this.interactable = this.element = null\n\n this._interacting = false\n this._stopped = true\n this.prepared.name = this.prevEvent = null\n }\n\n /** @internal */\n getPointerIndex(pointer: any) {\n const pointerId = pointerUtils.getPointerId(pointer)\n\n // mouse and pen interactions may have only one pointer\n return this.pointerType === 'mouse' || this.pointerType === 'pen'\n ? this.pointers.length - 1\n : arr.findIndex(this.pointers, (curPointer) => curPointer.id === pointerId)\n }\n\n /** @internal */\n getPointerInfo(pointer: any) {\n return this.pointers[this.getPointerIndex(pointer)]\n }\n\n /** @internal */\n updatePointer(pointer: PointerType, event: PointerEventType, eventTarget: Node, down?: boolean) {\n const id = pointerUtils.getPointerId(pointer)\n let pointerIndex = this.getPointerIndex(pointer)\n let pointerInfo = this.pointers[pointerIndex]\n\n down = down === false ? false : down || /(down|start)$/i.test(event.type)\n\n if (!pointerInfo) {\n pointerInfo = new PointerInfo(id, pointer, event, null, null)\n\n pointerIndex = this.pointers.length\n this.pointers.push(pointerInfo)\n } else {\n pointerInfo.pointer = pointer\n }\n\n pointerUtils.setCoords(\n this.coords.cur,\n this.pointers.map((p) => p.pointer),\n this._now(),\n )\n pointerUtils.setCoordDeltas(this.coords.delta, this.coords.prev, this.coords.cur)\n\n if (down) {\n this.pointerIsDown = true\n\n pointerInfo.downTime = this.coords.cur.timeStamp\n pointerInfo.downTarget = eventTarget\n pointerUtils.pointerExtend(this.downPointer, pointer)\n\n if (!this.interacting()) {\n pointerUtils.copyCoords(this.coords.start, this.coords.cur)\n pointerUtils.copyCoords(this.coords.prev, this.coords.cur)\n\n this.downEvent = event\n this.pointerWasMoved = false\n }\n }\n\n this._updateLatestPointer(pointer, event, eventTarget)\n\n this._scopeFire('interactions:update-pointer', {\n pointer,\n event,\n eventTarget,\n down,\n pointerInfo,\n pointerIndex,\n interaction: this as unknown as Interaction,\n })\n\n return pointerIndex\n }\n\n /** @internal */\n removePointer(pointer: PointerType, event: PointerEventType) {\n const pointerIndex = this.getPointerIndex(pointer)\n\n if (pointerIndex === -1) return\n\n const pointerInfo = this.pointers[pointerIndex]\n\n this._scopeFire('interactions:remove-pointer', {\n pointer,\n event,\n eventTarget: null,\n pointerIndex,\n pointerInfo,\n interaction: this as unknown as Interaction,\n })\n\n this.pointers.splice(pointerIndex, 1)\n this.pointerIsDown = false\n }\n\n /** @internal */\n _updateLatestPointer(pointer: PointerType, event: PointerEventType, eventTarget: Node) {\n this._latestPointer.pointer = pointer\n this._latestPointer.event = event\n this._latestPointer.eventTarget = eventTarget\n }\n\n destroy() {\n this._latestPointer.pointer = null\n this._latestPointer.event = null\n this._latestPointer.eventTarget = null\n }\n\n /** @internal */\n _createPreparedEvent

(\n event: PointerEventType,\n phase: P,\n preEnd?: boolean,\n type?: string,\n ) {\n return new InteractEvent(this, event, this.prepared.name, phase, this.element, preEnd, type)\n }\n\n /** @internal */\n _fireEvent

(iEvent: InteractEvent) {\n this.interactable?.fire(iEvent)\n\n if (!this.prevEvent || iEvent.timeStamp >= this.prevEvent.timeStamp) {\n this.prevEvent = iEvent\n }\n }\n\n /** @internal */\n _doPhase

(\n signalArg: Omit, 'iEvent'> & { iEvent?: InteractEvent },\n ) {\n const { event, phase, preEnd, type } = signalArg\n const { rect } = this\n\n if (rect && phase === 'move') {\n // update the rect changes due to pointer move\n rectUtils.addEdges(this.edges, rect, this.coords.delta[this.interactable.options.deltaSource])\n\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n const beforeResult = this._scopeFire(`interactions:before-action-${phase}` as any, signalArg)\n\n if (beforeResult === false) {\n return false\n }\n\n const iEvent = (signalArg.iEvent = this._createPreparedEvent(event, phase, preEnd, type))\n\n this._scopeFire(`interactions:action-${phase}` as any, signalArg)\n\n if (phase === 'start') {\n this.prevEvent = iEvent\n }\n\n this._fireEvent(iEvent)\n\n this._scopeFire(`interactions:after-action-${phase}` as any, signalArg)\n\n return true\n }\n\n /** @internal */\n _now() {\n return Date.now()\n }\n}\n\nexport default Interaction\nexport { PointerInfo }\n","import type Interaction from '@interactjs/core/Interaction'\nimport { _ProxyMethods } from '@interactjs/core/Interaction'\nimport type { Plugin } from '@interactjs/core/scope'\nimport type { Point } from '@interactjs/core/types'\nimport * as rectUtils from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n offsetBy?: typeof offsetBy\n offset: {\n total: Point\n pending: Point\n }\n }\n\n enum _ProxyMethods {\n offsetBy = '',\n }\n}\n\n;(_ProxyMethods as any).offsetBy = ''\n\nexport function addTotal(interaction: Interaction) {\n if (!interaction.pointerIsDown) {\n return\n }\n\n addToCoords(interaction.coords.cur, interaction.offset.total)\n\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nfunction beforeAction({ interaction }: { interaction: Interaction }) {\n applyPending(interaction)\n}\n\nfunction beforeEnd({ interaction }: { interaction: Interaction }): boolean | void {\n const hadPending = applyPending(interaction)\n\n if (!hadPending) return\n\n interaction.move({ offset: true })\n interaction.end()\n\n return false\n}\n\nfunction end({ interaction }: { interaction: Interaction }) {\n interaction.offset.total.x = 0\n interaction.offset.total.y = 0\n interaction.offset.pending.x = 0\n interaction.offset.pending.y = 0\n}\n\nexport function applyPending(interaction: Interaction) {\n if (!hasPending(interaction)) {\n return false\n }\n\n const { pending } = interaction.offset\n\n addToCoords(interaction.coords.cur, pending)\n addToCoords(interaction.coords.delta, pending)\n rectUtils.addEdges(interaction.edges, interaction.rect, pending)\n\n pending.x = 0\n pending.y = 0\n\n return true\n}\n\nfunction offsetBy(this: Interaction, { x, y }: Point) {\n this.offset.pending.x += x\n this.offset.pending.y += y\n\n this.offset.total.x += x\n this.offset.total.y += y\n}\n\nfunction addToCoords({ page, client }, { x, y }: Point) {\n page.x += x\n page.y += y\n client.x += x\n client.y += y\n}\n\nfunction hasPending(interaction: Interaction) {\n return !!(interaction.offset.pending.x || interaction.offset.pending.y)\n}\n\nconst offset: Plugin = {\n id: 'offset',\n before: ['modifiers', 'pointer-events', 'actions', 'inertia'],\n install(scope) {\n scope.Interaction.prototype.offsetBy = offsetBy\n },\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.offset = {\n total: { x: 0, y: 0 },\n pending: { x: 0, y: 0 },\n }\n },\n 'interactions:update-pointer': ({ interaction }) => addTotal(interaction),\n 'interactions:before-action-start': beforeAction,\n 'interactions:before-action-move': beforeAction,\n 'interactions:before-action-end': beforeEnd,\n 'interactions:stop': end,\n },\n}\n\nexport default offset\n","import type { Interaction, DoPhaseArg } from '@interactjs/core/Interaction'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Point, PointerEventType } from '@interactjs/core/types'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/modifiers/base'\nimport '@interactjs/offset/plugin'\nimport * as modifiers from '@interactjs/modifiers/base'\nimport { Modification } from '@interactjs/modifiers/Modification'\nimport type { ModifierArg } from '@interactjs/modifiers/types'\nimport offset from '@interactjs/offset/plugin'\n/* eslint-enable import/no-duplicates */\nimport * as dom from '@interactjs/utils/domUtils'\nimport hypot from '@interactjs/utils/hypot'\nimport is from '@interactjs/utils/is'\nimport { copyCoords } from '@interactjs/utils/pointerUtils'\nimport raf from '@interactjs/utils/raf'\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n resume?: true\n inertiastart?: true\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n inertia?: InertiaState\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface PerActionDefaults {\n inertia?: {\n enabled?: boolean\n resistance?: number // the lambda in exponential decay\n minSpeed?: number // target speed must be above this for inertia to start\n endSpeed?: number // the speed at which inertia is slow enough to stop\n allowResume?: true // allow resuming an action in inertia phase\n smoothEndDuration?: number // animate to snap/restrict endOnly if there's no inertia\n }\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-inertiastart': Omit, 'iEvent'>\n 'interactions:action-inertiastart': DoPhaseArg\n 'interactions:after-action-inertiastart': DoPhaseArg\n 'interactions:before-action-resume': Omit, 'iEvent'>\n 'interactions:action-resume': DoPhaseArg\n 'interactions:after-action-resume': DoPhaseArg\n }\n}\n\nfunction install(scope: Scope) {\n const { defaults } = scope\n\n scope.usePlugin(offset)\n scope.usePlugin(modifiers.default)\n scope.actions.phases.inertiastart = true\n scope.actions.phases.resume = true\n\n defaults.perAction.inertia = {\n enabled: false,\n resistance: 10, // the lambda in exponential decay\n minSpeed: 100, // target speed must be above this for inertia to start\n endSpeed: 10, // the speed at which inertia is slow enough to stop\n allowResume: true, // allow resuming an action in inertia phase\n smoothEndDuration: 300, // animate to snap/restrict endOnly if there's no inertia\n }\n}\n\nexport class InertiaState {\n active = false\n isModified = false\n smoothEnd = false\n allowResume = false\n\n modification!: Modification\n modifierCount = 0\n modifierArg!: ModifierArg\n\n startCoords!: Point\n t0 = 0\n v0 = 0\n\n te = 0\n targetOffset!: Point\n modifiedOffset!: Point\n currentOffset!: Point\n\n lambda_v0? = 0 // eslint-disable-line camelcase\n one_ve_v0? = 0 // eslint-disable-line camelcase\n timeout!: number\n readonly interaction: Interaction\n\n constructor(interaction: Interaction) {\n this.interaction = interaction\n }\n\n start(event: PointerEventType) {\n const { interaction } = this\n const options = getOptions(interaction)\n\n if (!options || !options.enabled) {\n return false\n }\n\n const { client: velocityClient } = interaction.coords.velocity\n const pointerSpeed = hypot(velocityClient.x, velocityClient.y)\n const modification = this.modification || (this.modification = new Modification(interaction))\n\n modification.copyFrom(interaction.modification)\n\n this.t0 = interaction._now()\n this.allowResume = options.allowResume\n this.v0 = pointerSpeed\n this.currentOffset = { x: 0, y: 0 }\n this.startCoords = interaction.coords.cur.page\n\n this.modifierArg = modification.fillArg({\n pageCoords: this.startCoords,\n preEnd: true,\n phase: 'inertiastart',\n })\n\n const thrown =\n this.t0 - interaction.coords.cur.timeStamp < 50 &&\n pointerSpeed > options.minSpeed &&\n pointerSpeed > options.endSpeed\n\n if (thrown) {\n this.startInertia()\n } else {\n modification.result = modification.setAll(this.modifierArg)\n\n if (!modification.result.changed) {\n return false\n }\n\n this.startSmoothEnd()\n }\n\n // force modification change\n interaction.modification.result.rect = null\n\n // bring inertiastart event to the target coords\n interaction.offsetBy(this.targetOffset)\n interaction._doPhase({\n interaction,\n event,\n phase: 'inertiastart',\n })\n interaction.offsetBy({ x: -this.targetOffset.x, y: -this.targetOffset.y })\n // force modification change\n interaction.modification.result.rect = null\n\n this.active = true\n interaction.simulation = this\n\n return true\n }\n\n startInertia() {\n const startVelocity = this.interaction.coords.velocity.client\n const options = getOptions(this.interaction)\n const lambda = options.resistance\n const inertiaDur = -Math.log(options.endSpeed / this.v0) / lambda\n\n this.targetOffset = {\n x: (startVelocity.x - inertiaDur) / lambda,\n y: (startVelocity.y - inertiaDur) / lambda,\n }\n\n this.te = inertiaDur\n this.lambda_v0 = lambda / this.v0\n this.one_ve_v0 = 1 - options.endSpeed / this.v0\n\n const { modification, modifierArg } = this\n\n modifierArg.pageCoords = {\n x: this.startCoords.x + this.targetOffset.x,\n y: this.startCoords.y + this.targetOffset.y,\n }\n\n modification.result = modification.setAll(modifierArg)\n\n if (modification.result.changed) {\n this.isModified = true\n this.modifiedOffset = {\n x: this.targetOffset.x + modification.result.delta.x,\n y: this.targetOffset.y + modification.result.delta.y,\n }\n }\n\n this.onNextFrame(() => this.inertiaTick())\n }\n\n startSmoothEnd() {\n this.smoothEnd = true\n this.isModified = true\n this.targetOffset = {\n x: this.modification.result.delta.x,\n y: this.modification.result.delta.y,\n }\n\n this.onNextFrame(() => this.smoothEndTick())\n }\n\n onNextFrame(tickFn: () => void) {\n this.timeout = raf.request(() => {\n if (this.active) {\n tickFn()\n }\n })\n }\n\n inertiaTick() {\n const { interaction } = this\n const options = getOptions(interaction)\n const lambda = options.resistance\n const t = (interaction._now() - this.t0) / 1000\n\n if (t < this.te) {\n const progress = 1 - (Math.exp(-lambda * t) - this.lambda_v0) / this.one_ve_v0\n let newOffset: Point\n\n if (this.isModified) {\n newOffset = getQuadraticCurvePoint(\n 0,\n 0,\n this.targetOffset.x,\n this.targetOffset.y,\n this.modifiedOffset.x,\n this.modifiedOffset.y,\n progress,\n )\n } else {\n newOffset = {\n x: this.targetOffset.x * progress,\n y: this.targetOffset.y * progress,\n }\n }\n\n const delta = { x: newOffset.x - this.currentOffset.x, y: newOffset.y - this.currentOffset.y }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move()\n\n this.onNextFrame(() => this.inertiaTick())\n } else {\n interaction.offsetBy({\n x: this.modifiedOffset.x - this.currentOffset.x,\n y: this.modifiedOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n smoothEndTick() {\n const { interaction } = this\n const t = interaction._now() - this.t0\n const { smoothEndDuration: duration } = getOptions(interaction)\n\n if (t < duration) {\n const newOffset = {\n x: easeOutQuad(t, 0, this.targetOffset.x, duration),\n y: easeOutQuad(t, 0, this.targetOffset.y, duration),\n }\n const delta = {\n x: newOffset.x - this.currentOffset.x,\n y: newOffset.y - this.currentOffset.y,\n }\n\n this.currentOffset.x += delta.x\n this.currentOffset.y += delta.y\n\n interaction.offsetBy(delta)\n interaction.move({ skipModifiers: this.modifierCount })\n\n this.onNextFrame(() => this.smoothEndTick())\n } else {\n interaction.offsetBy({\n x: this.targetOffset.x - this.currentOffset.x,\n y: this.targetOffset.y - this.currentOffset.y,\n })\n\n this.end()\n }\n }\n\n resume({ pointer, event, eventTarget }: SignalArgs['interactions:down']) {\n const { interaction } = this\n\n // undo inertia changes to interaction coords\n interaction.offsetBy({\n x: -this.currentOffset.x,\n y: -this.currentOffset.y,\n })\n\n // update pointer at pointer down position\n interaction.updatePointer(pointer, event, eventTarget, true)\n\n // fire resume signals and event\n interaction._doPhase({\n interaction,\n event,\n phase: 'resume',\n })\n copyCoords(interaction.coords.prev, interaction.coords.cur)\n\n this.stop()\n }\n\n end() {\n this.interaction.move()\n this.interaction.end()\n this.stop()\n }\n\n stop() {\n this.active = this.smoothEnd = false\n this.interaction.simulation = null\n raf.cancel(this.timeout)\n }\n}\n\nfunction start({ interaction, event }: DoPhaseArg) {\n if (!interaction._interacting || interaction.simulation) {\n return null\n }\n\n const started = interaction.inertia.start(event)\n\n // prevent action end if inertia or smoothEnd\n return started ? false : null\n}\n\n// Check if the down event hits the current inertia target\n// control should be return to the user\nfunction resume(arg: SignalArgs['interactions:down']) {\n const { interaction, eventTarget } = arg\n const state = interaction.inertia\n\n if (!state.active) return\n\n let element = eventTarget as Node\n\n // climb up the DOM tree from the event target\n while (is.element(element)) {\n // if interaction element is the current inertia target element\n if (element === interaction.element) {\n state.resume(arg)\n break\n }\n\n element = dom.parentNode(element)\n }\n}\n\nfunction stop({ interaction }: { interaction: Interaction }) {\n const state = interaction.inertia\n\n if (state.active) {\n state.stop()\n }\n}\n\nfunction getOptions({ interactable, prepared }: Interaction) {\n return interactable && interactable.options && prepared.name && interactable.options[prepared.name].inertia\n}\n\nconst inertia: Plugin = {\n id: 'inertia',\n before: ['modifiers', 'actions'],\n install,\n listeners: {\n 'interactions:new': ({ interaction }) => {\n interaction.inertia = new InertiaState(interaction)\n },\n\n 'interactions:before-action-end': start,\n 'interactions:down': resume,\n 'interactions:stop': stop,\n\n 'interactions:before-action-resume': (arg) => {\n const { modification } = arg.interaction\n\n modification.stop(arg)\n modification.start(arg, arg.interaction.coords.cur.page)\n modification.applyToInteraction(arg)\n },\n\n 'interactions:before-action-inertiastart': (arg) => arg.interaction.modification.setAndApply(arg),\n 'interactions:action-resume': modifiers.addEventModifiers,\n 'interactions:action-inertiastart': modifiers.addEventModifiers,\n 'interactions:after-action-inertiastart': (arg) =>\n arg.interaction.modification.restoreInteractionCoords(arg),\n 'interactions:after-action-resume': (arg) => arg.interaction.modification.restoreInteractionCoords(arg),\n },\n}\n\n// http://stackoverflow.com/a/5634528/2280888\nfunction _getQBezierValue(t: number, p1: number, p2: number, p3: number) {\n const iT = 1 - t\n return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3\n}\n\nfunction getQuadraticCurvePoint(\n startX: number,\n startY: number,\n cpX: number,\n cpY: number,\n endX: number,\n endY: number,\n position: number,\n) {\n return {\n x: _getQBezierValue(position, startX, cpX, endX),\n y: _getQBezierValue(position, startY, cpY, endY),\n }\n}\n\n// http://gizma.com/easing/\nfunction easeOutQuad(t: number, b: number, c: number, d: number) {\n t /= d\n return -c * t * (t - 2) + b\n}\n\nexport default inertia\n","import * as arr from '@interactjs/utils/arr'\nimport extend from '@interactjs/utils/extend'\nimport type { NormalizedListeners } from '@interactjs/utils/normalizeListeners'\nimport normalize from '@interactjs/utils/normalizeListeners'\n\nimport type { Listener, ListenersArg, Rect } from '@interactjs/core/types'\n\nfunction fireUntilImmediateStopped(event: any, listeners: Listener[]) {\n for (const listener of listeners) {\n if (event.immediatePropagationStopped) {\n break\n }\n\n listener(event)\n }\n}\n\nexport class Eventable {\n options: any\n types: NormalizedListeners = {}\n propagationStopped = false\n immediatePropagationStopped = false\n global: any\n\n constructor(options?: { [index: string]: any }) {\n this.options = extend({}, options || {})\n }\n\n fire(event: T) {\n let listeners: Listener[]\n const global = this.global\n\n // Interactable#on() listeners\n // tslint:disable no-conditional-assignment\n if ((listeners = this.types[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n\n // interact.on() listeners\n if (!event.propagationStopped && global && (listeners = global[event.type])) {\n fireUntilImmediateStopped(event, listeners)\n }\n }\n\n on(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n this.types[type] = arr.merge(this.types[type] || [], listeners[type])\n }\n }\n\n off(type: string, listener: ListenersArg) {\n const listeners = normalize(type, listener)\n\n for (type in listeners) {\n const eventList = this.types[type]\n\n if (!eventList || !eventList.length) {\n continue\n }\n\n for (const subListener of listeners[type]) {\n const index = eventList.indexOf(subListener)\n\n if (index !== -1) {\n eventList.splice(index, 1)\n }\n }\n }\n }\n\n getRect(_element: Element): Rect {\n return null\n }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport pExtend from '@interactjs/utils/pointerExtend'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\n\nimport type { NativeEventTarget } from './NativeTypes'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n events: ReturnType\n }\n}\n\ninterface EventOptions {\n capture: boolean\n passive: boolean\n}\n\ntype PartialEventTarget = Partial\n\ntype ListenerEntry = { func: (event: Event | FakeEvent) => any; options: EventOptions }\n\nfunction install(scope: Scope) {\n const targets: Array<{\n eventTarget: PartialEventTarget\n events: { [type: string]: ListenerEntry[] }\n }> = []\n\n const delegatedEvents: {\n [type: string]: Array<{\n selector: string\n context: Node\n listeners: ListenerEntry[]\n }>\n } = {}\n const documents: Document[] = []\n\n const eventsMethods = {\n add,\n remove,\n\n addDelegate,\n removeDelegate,\n\n delegateListener,\n delegateUseCapture,\n delegatedEvents,\n documents,\n\n targets,\n\n supportsOptions: false,\n supportsPassive: false,\n }\n\n // check if browser supports passive events and options arg\n scope.document?.createElement('div').addEventListener('test', null, {\n get capture() {\n return (eventsMethods.supportsOptions = true)\n },\n get passive() {\n return (eventsMethods.supportsPassive = true)\n },\n })\n\n scope.events = eventsMethods\n\n function add(\n eventTarget: PartialEventTarget,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener) return\n\n const options = getOptions(optionalArg)\n let target = arr.find(targets, (t) => t.eventTarget === eventTarget)\n\n if (!target) {\n target = {\n eventTarget,\n events: {},\n }\n\n targets.push(target)\n }\n\n if (!target.events[type]) {\n target.events[type] = []\n }\n\n if (!arr.find(target.events[type], (l) => l.func === listener && optionsMatch(l.options, options))) {\n eventTarget.addEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n target.events[type].push({ func: listener, options })\n }\n }\n\n function remove(\n eventTarget: PartialEventTarget,\n type: string,\n listener?: 'all' | ListenerEntry['func'],\n optionalArg?: boolean | EventOptions,\n ) {\n if (!eventTarget.addEventListener || !eventTarget.removeEventListener) return\n\n const targetIndex = arr.findIndex(targets, (t) => t.eventTarget === eventTarget)\n const target = targets[targetIndex]\n\n if (!target || !target.events) {\n return\n }\n\n if (type === 'all') {\n for (type in target.events) {\n if (target.events.hasOwnProperty(type)) {\n remove(eventTarget, type, 'all')\n }\n }\n return\n }\n\n let typeIsEmpty = false\n const typeListeners = target.events[type]\n\n if (typeListeners) {\n if (listener === 'all') {\n for (let i = typeListeners.length - 1; i >= 0; i--) {\n const entry = typeListeners[i]\n remove(eventTarget, type, entry.func, entry.options)\n }\n return\n } else {\n const options = getOptions(optionalArg)\n\n for (let i = 0; i < typeListeners.length; i++) {\n const entry = typeListeners[i]\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n eventTarget.removeEventListener(\n type,\n listener as any,\n eventsMethods.supportsOptions ? options : options.capture,\n )\n typeListeners.splice(i, 1)\n\n if (typeListeners.length === 0) {\n delete target.events[type]\n typeIsEmpty = true\n }\n\n break\n }\n }\n }\n }\n\n if (typeIsEmpty && !Object.keys(target.events).length) {\n targets.splice(targetIndex, 1)\n }\n }\n\n function addDelegate(\n selector: string,\n context: Node,\n type: string,\n listener: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n if (!delegatedEvents[type]) {\n delegatedEvents[type] = []\n\n // add delegate listener functions\n for (const doc of documents) {\n add(doc, type, delegateListener)\n add(doc, type, delegateUseCapture, true)\n }\n }\n\n const delegates = delegatedEvents[type]\n let delegate = arr.find(delegates, (d) => d.selector === selector && d.context === context)\n\n if (!delegate) {\n delegate = { selector, context, listeners: [] }\n delegates.push(delegate)\n }\n\n delegate.listeners.push({ func: listener, options })\n }\n\n function removeDelegate(\n selector: string,\n context: Document | Element,\n type: string,\n listener?: ListenerEntry['func'],\n optionalArg?: any,\n ) {\n const options = getOptions(optionalArg)\n const delegates = delegatedEvents[type]\n let matchFound = false\n let index: number\n\n if (!delegates) return\n\n // count from last index of delegated to 0\n for (index = delegates.length - 1; index >= 0; index--) {\n const cur = delegates[index]\n // look for matching selector and context Node\n if (cur.selector === selector && cur.context === context) {\n const { listeners } = cur\n\n // each item of the listeners array is an array: [function, capture, passive]\n for (let i = listeners.length - 1; i >= 0; i--) {\n const entry = listeners[i]\n\n // check if the listener functions and capture and passive flags match\n if (entry.func === listener && optionsMatch(entry.options, options)) {\n // remove the listener from the array of listeners\n listeners.splice(i, 1)\n\n // if all listeners for this target have been removed\n // remove the target from the delegates array\n if (!listeners.length) {\n delegates.splice(index, 1)\n\n // remove delegate function from context\n remove(context, type, delegateListener)\n remove(context, type, delegateUseCapture, true)\n }\n\n // only remove one listener\n matchFound = true\n break\n }\n }\n\n if (matchFound) {\n break\n }\n }\n }\n }\n\n // bound to the interactable context when a DOM event\n // listener is added to a selector interactable\n function delegateListener(event: Event | FakeEvent, optionalArg?: any) {\n const options = getOptions(optionalArg)\n const fakeEvent = new FakeEvent(event as Event)\n const delegates = delegatedEvents[event.type]\n const [eventTarget] = pointerUtils.getEventTargets(event as Event)\n let element: Node = eventTarget\n\n // climb up document tree looking for selector matches\n while (is.element(element)) {\n for (let i = 0; i < delegates.length; i++) {\n const cur = delegates[i]\n const { selector, context } = cur\n\n if (\n domUtils.matchesSelector(element, selector) &&\n domUtils.nodeContains(context, eventTarget) &&\n domUtils.nodeContains(context, element)\n ) {\n const { listeners } = cur\n\n fakeEvent.currentTarget = element\n\n for (const entry of listeners) {\n if (optionsMatch(entry.options, options)) {\n entry.func(fakeEvent)\n }\n }\n }\n }\n\n element = domUtils.parentNode(element)\n }\n }\n\n function delegateUseCapture(this: Element, event: Event | FakeEvent) {\n return delegateListener.call(this, event, true)\n }\n\n // for type inferrence\n return eventsMethods\n}\n\nclass FakeEvent implements Partial {\n currentTarget: Node\n originalEvent: Event\n type: string\n\n constructor(originalEvent: Event) {\n this.originalEvent = originalEvent\n // duplicate the event so that currentTarget can be changed\n pExtend(this, originalEvent)\n }\n\n preventOriginalDefault() {\n this.originalEvent.preventDefault()\n }\n\n stopPropagation() {\n this.originalEvent.stopPropagation()\n }\n\n stopImmediatePropagation() {\n this.originalEvent.stopImmediatePropagation()\n }\n}\n\nfunction getOptions(param: { [index: string]: any } | boolean): { capture: boolean; passive: boolean } {\n if (!is.object(param)) {\n return { capture: !!param, passive: false }\n }\n\n return {\n capture: !!param.capture,\n passive: !!param.passive,\n }\n}\n\nfunction optionsMatch(a: Partial | boolean, b: Partial) {\n if (a === b) return true\n\n if (typeof a === 'boolean') return !!b.capture === a && !!b.passive === false\n\n return !!a.capture === !!b.capture && !!a.passive === !!b.passive\n}\n\nexport default {\n id: 'events',\n install,\n}\n","import * as dom from '@interactjs/utils/domUtils'\n\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { PointerType } from '@interactjs/core/types'\n\nexport interface SearchDetails {\n pointer: PointerType\n pointerId: number\n pointerType: string\n eventType: string\n eventTarget: EventTarget\n curEventTarget: EventTarget\n scope: Scope\n}\n\nconst finder = {\n methodOrder: ['simulationResume', 'mouseOrPen', 'hasPointer', 'idle'] as const,\n\n search(details: SearchDetails) {\n for (const method of finder.methodOrder) {\n const interaction = finder[method](details)\n\n if (interaction) {\n return interaction\n }\n }\n\n return null\n },\n\n // try to resume simulation with a new pointer\n simulationResume({ pointerType, eventType, eventTarget, scope }: SearchDetails) {\n if (!/down|start/i.test(eventType)) {\n return null\n }\n\n for (const interaction of scope.interactions.list) {\n let element = eventTarget as Node\n\n if (\n interaction.simulation &&\n interaction.simulation.allowResume &&\n interaction.pointerType === pointerType\n ) {\n while (element) {\n // if the element is the interaction element\n if (element === interaction.element) {\n return interaction\n }\n element = dom.parentNode(element)\n }\n }\n }\n\n return null\n },\n\n // if it's a mouse or pen interaction\n mouseOrPen({ pointerId, pointerType, eventType, scope }: SearchDetails) {\n if (pointerType !== 'mouse' && pointerType !== 'pen') {\n return null\n }\n\n let firstNonActive\n\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType) {\n // if it's a down event, skip interactions with running simulations\n if (interaction.simulation && !hasPointerId(interaction, pointerId)) {\n continue\n }\n\n // if the interaction is active, return it immediately\n if (interaction.interacting()) {\n return interaction\n }\n // otherwise save it and look for another active interaction\n else if (!firstNonActive) {\n firstNonActive = interaction\n }\n }\n }\n\n // if no active mouse interaction was found use the first inactive mouse\n // interaction\n if (firstNonActive) {\n return firstNonActive\n }\n\n // find any mouse or pen interaction.\n // ignore the interaction if the eventType is a *down, and a simulation\n // is active\n for (const interaction of scope.interactions.list) {\n if (interaction.pointerType === pointerType && !(/down/i.test(eventType) && interaction.simulation)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get interaction that has this pointer\n hasPointer({ pointerId, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n if (hasPointerId(interaction, pointerId)) {\n return interaction\n }\n }\n\n return null\n },\n\n // get first idle interaction with a matching pointerType\n idle({ pointerType, scope }: SearchDetails) {\n for (const interaction of scope.interactions.list) {\n // if there's already a pointer held down\n if (interaction.pointers.length === 1) {\n const target = interaction.interactable\n // don't add this pointer if there is a target interactable and it\n // isn't gesturable\n if (target && !(target.options.gesture && target.options.gesture.enabled)) {\n continue\n }\n }\n // maximum of 2 pointers per interaction\n else if (interaction.pointers.length >= 2) {\n continue\n }\n\n if (!interaction.interacting() && pointerType === interaction.pointerType) {\n return interaction\n }\n }\n\n return null\n },\n}\n\nfunction hasPointerId(interaction: Interaction, pointerId: number) {\n return interaction.pointers.some(({ id }) => id === pointerId)\n}\n\nexport default finder\n","import browser from '@interactjs/utils/browser'\nimport domObjects from '@interactjs/utils/domObjects'\nimport { nodeContains } from '@interactjs/utils/domUtils'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, Listener } from '@interactjs/core/types'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './interactablePreventDefault'\nimport interactablePreventDefault from './interactablePreventDefault'\nimport InteractionBase from './Interaction'\n/* eslint-enable import/no-duplicates */\nimport type { SearchDetails } from './interactionFinder'\nimport finder from './interactionFinder'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n Interaction: typeof InteractionBase\n interactions: {\n new: (options: any) => InteractionBase\n list: Array>\n listeners: { [type: string]: Listener }\n docEvents: Array<{ type: string; listener: Listener }>\n pointerMoveTolerance: number\n }\n prevTouchTime: number\n }\n\n interface SignalArgs {\n 'interactions:find': {\n interaction: InteractionBase\n searchDetails: SearchDetails\n }\n }\n}\n\nconst methodNames = [\n 'pointerDown',\n 'pointerMove',\n 'pointerUp',\n 'updatePointer',\n 'removePointer',\n 'windowBlur',\n]\n\nfunction install(scope: Scope) {\n const listeners = {} as any\n\n for (const method of methodNames) {\n listeners[method] = doOnInteractions(method, scope)\n }\n\n const pEventTypes = browser.pEventTypes\n let docEvents: typeof scope.interactions.docEvents\n\n if (domObjects.PointerEvent) {\n docEvents = [\n { type: pEventTypes.down, listener: releasePointersOnRemovedEls },\n { type: pEventTypes.down, listener: listeners.pointerDown },\n { type: pEventTypes.move, listener: listeners.pointerMove },\n { type: pEventTypes.up, listener: listeners.pointerUp },\n { type: pEventTypes.cancel, listener: listeners.pointerUp },\n ]\n } else {\n docEvents = [\n { type: 'mousedown', listener: listeners.pointerDown },\n { type: 'mousemove', listener: listeners.pointerMove },\n { type: 'mouseup', listener: listeners.pointerUp },\n\n { type: 'touchstart', listener: releasePointersOnRemovedEls },\n { type: 'touchstart', listener: listeners.pointerDown },\n { type: 'touchmove', listener: listeners.pointerMove },\n { type: 'touchend', listener: listeners.pointerUp },\n { type: 'touchcancel', listener: listeners.pointerUp },\n ]\n }\n\n docEvents.push({\n type: 'blur',\n listener(event) {\n for (const interaction of scope.interactions.list) {\n interaction.documentBlur(event)\n }\n },\n })\n\n // for ignoring browser's simulated mouse events\n scope.prevTouchTime = 0\n\n scope.Interaction = class extends InteractionBase {\n get pointerMoveTolerance() {\n return scope.interactions.pointerMoveTolerance\n }\n\n set pointerMoveTolerance(value) {\n scope.interactions.pointerMoveTolerance = value\n }\n\n _now() {\n return scope.now()\n }\n }\n\n scope.interactions = {\n // all active and idle interactions\n list: [],\n new(options: { pointerType?: string; scopeFire?: Scope['fire'] }) {\n options.scopeFire = (name, arg) => scope.fire(name, arg)\n\n const interaction = new scope.Interaction(options as Required)\n\n scope.interactions.list.push(interaction)\n return interaction\n },\n listeners,\n docEvents,\n pointerMoveTolerance: 1,\n }\n\n function releasePointersOnRemovedEls() {\n // for all inactive touch interactions with pointers down\n for (const interaction of scope.interactions.list) {\n if (!interaction.pointerIsDown || interaction.pointerType !== 'touch' || interaction._interacting) {\n continue\n }\n\n // if a pointer is down on an element that is no longer in the DOM tree\n for (const pointer of interaction.pointers) {\n if (!scope.documents.some(({ doc }) => nodeContains(doc, pointer.downTarget))) {\n // remove the pointer from the interaction\n interaction.removePointer(pointer.pointer, pointer.event)\n }\n }\n }\n }\n\n scope.usePlugin(interactablePreventDefault)\n}\n\nfunction doOnInteractions(method: string, scope: Scope) {\n return function (event: Event) {\n const interactions = scope.interactions.list\n\n const pointerType = pointerUtils.getPointerType(event)\n const [eventTarget, curEventTarget] = pointerUtils.getEventTargets(event)\n const matches: any[] = [] // [ [pointer, interaction], ...]\n\n if (/^touch/.test(event.type)) {\n scope.prevTouchTime = scope.now()\n\n // @ts-expect-error\n for (const changedTouch of event.changedTouches) {\n const pointer = changedTouch\n const pointerId = pointerUtils.getPointerId(pointer)\n const searchDetails: SearchDetails = {\n pointer,\n pointerId,\n pointerType,\n eventType: event.type,\n eventTarget,\n curEventTarget,\n scope,\n }\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n } else {\n let invalidPointer = false\n\n if (!browser.supportsPointerEvent && /mouse/.test(event.type)) {\n // ignore mouse events while touch interactions are active\n for (let i = 0; i < interactions.length && !invalidPointer; i++) {\n invalidPointer = interactions[i].pointerType !== 'mouse' && interactions[i].pointerIsDown\n }\n\n // try to ignore mouse events that are simulated by the browser\n // after a touch event\n invalidPointer =\n invalidPointer ||\n scope.now() - scope.prevTouchTime < 500 ||\n // on iOS and Firefox Mobile, MouseEvent.timeStamp is zero if simulated\n event.timeStamp === 0\n }\n\n if (!invalidPointer) {\n const searchDetails = {\n pointer: event as PointerEvent,\n pointerId: pointerUtils.getPointerId(event as PointerEvent),\n pointerType,\n eventType: event.type,\n curEventTarget,\n eventTarget,\n scope,\n }\n\n const interaction = getInteraction(searchDetails)\n\n matches.push([\n searchDetails.pointer,\n searchDetails.eventTarget,\n searchDetails.curEventTarget,\n interaction,\n ])\n }\n }\n\n // eslint-disable-next-line no-shadow\n for (const [pointer, eventTarget, curEventTarget, interaction] of matches) {\n interaction[method](pointer, event, eventTarget, curEventTarget)\n }\n }\n}\n\nfunction getInteraction(searchDetails: SearchDetails) {\n const { pointerType, scope } = searchDetails\n\n const foundInteraction = finder.search(searchDetails)\n const signalArg = { interaction: foundInteraction, searchDetails }\n\n scope.fire('interactions:find', signalArg)\n\n return signalArg.interaction || scope.interactions.new({ pointerType })\n}\n\nfunction onDocSignal(\n { doc, scope, options }: SignalArgs[T],\n eventMethodName: 'add' | 'remove',\n) {\n const {\n interactions: { docEvents },\n events,\n } = scope\n const eventMethod = events[eventMethodName]\n\n if (scope.browser.isIOS && !options.events) {\n options.events = { passive: false }\n }\n\n // delegate event listener\n for (const eventType in events.delegatedEvents) {\n eventMethod(doc, eventType, events.delegateListener)\n eventMethod(doc, eventType, events.delegateUseCapture, true)\n }\n\n const eventOptions = options && options.events\n\n for (const { type, listener } of docEvents) {\n eventMethod(doc, type, listener, eventOptions)\n }\n}\n\nconst interactions: Plugin = {\n id: 'core/interactions',\n install,\n listeners: {\n 'scope:add-document': (arg) => onDocSignal(arg, 'add'),\n 'scope:remove-document': (arg) => onDocSignal(arg, 'remove'),\n 'interactable:unset': ({ interactable }, scope) => {\n // Stop and destroy related interactions when an Interactable is unset\n for (let i = scope.interactions.list.length - 1; i >= 0; i--) {\n const interaction = scope.interactions.list[i]\n\n if (interaction.interactable !== interactable) {\n continue\n }\n\n interaction.stop()\n scope.fire('interactions:destroy', { interaction })\n interaction.destroy()\n\n if (scope.interactions.list.length > 2) {\n scope.interactions.list.splice(i, 1)\n }\n }\n },\n },\n onDocSignal,\n doOnInteractions,\n methodNames,\n}\n\nexport default interactions\n","/* eslint-disable no-dupe-class-members */\nimport * as arr from '@interactjs/utils/arr'\nimport browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport { getElementRect, matchesUpTo, nodeContains, trySelector } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport normalizeListeners from '@interactjs/utils/normalizeListeners'\nimport { getWindow } from '@interactjs/utils/window'\n\nimport type { Scope } from '@interactjs/core/scope'\nimport type {\n ActionMap,\n ActionMethod,\n ActionName,\n Actions,\n Context,\n Element,\n EventTypes,\n Listeners,\n ListenersArg,\n OrBoolean,\n Target,\n} from '@interactjs/core/types'\n\nimport { Eventable } from './Eventable'\nimport type { ActionDefaults, Defaults, OptionsArg, PerActionDefaults, Options } from './options'\n\ntype IgnoreValue = string | Element | boolean\ntype DeltaSource = 'page' | 'client'\n\nconst enum OnOffMethod {\n On,\n Off,\n}\n\n/**\n * ```ts\n * const interactable = interact('.cards')\n * .draggable({\n * listeners: { move: event => console.log(event.type, event.pageX, event.pageY) }\n * })\n * .resizable({\n * listeners: { move: event => console.log(event.rect) },\n * modifiers: [interact.modifiers.restrictEdges({ outer: 'parent' })]\n * })\n * ```\n */\nexport class Interactable implements Partial {\n /** @internal */ get _defaults(): Defaults {\n return {\n base: {},\n perAction: {},\n actions: {} as ActionDefaults,\n }\n }\n\n readonly target: Target\n /** @internal */ readonly options!: Required\n /** @internal */ readonly _actions: Actions\n /** @internal */ readonly events = new Eventable()\n /** @internal */ readonly _context: Context\n /** @internal */ readonly _win: Window\n /** @internal */ readonly _doc: Document\n /** @internal */ readonly _scopeEvents: Scope['events']\n\n constructor(\n target: Target,\n options: any,\n defaultContext: Document | Element,\n scopeEvents: Scope['events'],\n ) {\n this._actions = options.actions\n this.target = target\n this._context = options.context || defaultContext\n this._win = getWindow(trySelector(target) ? this._context : target)\n this._doc = this._win.document\n this._scopeEvents = scopeEvents\n\n this.set(options)\n }\n\n setOnEvents(actionName: ActionName, phases: NonNullable) {\n if (is.func(phases.onstart)) {\n this.on(`${actionName}start`, phases.onstart)\n }\n if (is.func(phases.onmove)) {\n this.on(`${actionName}move`, phases.onmove)\n }\n if (is.func(phases.onend)) {\n this.on(`${actionName}end`, phases.onend)\n }\n if (is.func(phases.oninertiastart)) {\n this.on(`${actionName}inertiastart`, phases.oninertiastart)\n }\n\n return this\n }\n\n updatePerActionListeners(actionName: ActionName, prev: Listeners | undefined, cur: Listeners | undefined) {\n const actionFilter = (this._actions.map[actionName] as { filterEventType?: (type: string) => boolean })\n ?.filterEventType\n const filter = (type: string) =>\n (actionFilter == null || actionFilter(type)) && isNonNativeEvent(type, this._actions)\n\n if (is.array(prev) || is.object(prev)) {\n this._onOff(OnOffMethod.Off, actionName, prev, undefined, filter)\n }\n\n if (is.array(cur) || is.object(cur)) {\n this._onOff(OnOffMethod.On, actionName, cur, undefined, filter)\n }\n }\n\n setPerAction(actionName: ActionName, options: OrBoolean) {\n const defaults = this._defaults\n\n // for all the default per-action options\n for (const optionName_ in options) {\n const optionName = optionName_ as keyof PerActionDefaults\n const actionOptions = this.options[actionName]\n const optionValue: any = options[optionName]\n\n // remove old event listeners and add new ones\n if (optionName === 'listeners') {\n this.updatePerActionListeners(actionName, actionOptions.listeners, optionValue as Listeners)\n }\n\n // if the option value is an array\n if (is.array(optionValue)) {\n ;(actionOptions[optionName] as any) = arr.from(optionValue)\n }\n // if the option value is an object\n else if (is.plainObject(optionValue)) {\n // copy the object\n ;(actionOptions[optionName] as any) = extend(\n actionOptions[optionName] || ({} as any),\n clone(optionValue),\n )\n\n // set anabled field to true if it exists in the defaults\n if (\n is.object(defaults.perAction[optionName]) &&\n 'enabled' in (defaults.perAction[optionName] as any)\n ) {\n ;(actionOptions[optionName] as any).enabled = optionValue.enabled !== false\n }\n }\n // if the option value is a boolean and the default is an object\n else if (is.bool(optionValue) && is.object(defaults.perAction[optionName])) {\n ;(actionOptions[optionName] as any).enabled = optionValue\n }\n // if it's anything else, do a plain assignment\n else {\n ;(actionOptions[optionName] as any) = optionValue\n }\n }\n }\n\n /**\n * The default function to get an Interactables bounding rect. Can be\n * overridden using {@link Interactable.rectChecker}.\n *\n * @param {Element} [element] The element to measure.\n * @return {Rect} The object's bounding rectangle.\n */\n getRect(element: Element) {\n element = element || (is.element(this.target) ? this.target : null)\n\n if (is.string(this.target)) {\n element = element || this._context.querySelector(this.target)\n }\n\n return getElementRect(element)\n }\n\n /**\n * Returns or sets the function used to calculate the interactable's\n * element's rectangle\n *\n * @param {function} [checker] A function which returns this Interactable's\n * bounding rectangle. See {@link Interactable.getRect}\n * @return {function | object} The checker function or this Interactable\n */\n rectChecker(): (element: Element) => any | null\n rectChecker(checker: (element: Element) => any): this\n rectChecker(checker?: (element: Element) => any) {\n if (is.func(checker)) {\n this.getRect = (element) => {\n const rect = extend({}, checker.apply(this, element))\n\n if (!(('width' in rect) as unknown)) {\n rect.width = rect.right - rect.left\n rect.height = rect.bottom - rect.top\n }\n\n return rect\n }\n\n return this\n }\n\n if (checker === null) {\n delete (this as Partial).getRect\n\n return this\n }\n\n return this.getRect\n }\n\n /** @internal */\n _backCompatOption(optionName: keyof Options, newValue: any) {\n if (trySelector(newValue) || is.object(newValue)) {\n ;(this.options[optionName] as any) = newValue\n\n for (const action in this._actions.map) {\n ;(this.options[action as keyof ActionMap] as any)[optionName] = newValue\n }\n\n return this\n }\n\n return this.options[optionName]\n }\n\n /**\n * Gets or sets the origin of the Interactable's element. The x and y\n * of the origin will be subtracted from action event coordinates.\n *\n * @param {Element | object | string} [origin] An HTML or SVG Element whose\n * rect will be used, an object eg. { x: 0, y: 0 } or string 'parent', 'self'\n * or any CSS selector\n *\n * @return {object} The current origin or this Interactable\n */\n origin(newValue: any) {\n return this._backCompatOption('origin', newValue)\n }\n\n /**\n * Returns or sets the mouse coordinate types used to calculate the\n * movement of the pointer.\n *\n * @param {string} [newValue] Use 'client' if you will be scrolling while\n * interacting; Use 'page' if you want autoScroll to work\n * @return {string | object} The current deltaSource or this Interactable\n */\n deltaSource(): DeltaSource\n deltaSource(newValue: DeltaSource): this\n deltaSource(newValue?: DeltaSource) {\n if (newValue === 'page' || newValue === 'client') {\n this.options.deltaSource = newValue\n\n return this\n }\n\n return this.options.deltaSource\n }\n\n /** @internal */\n getAllElements(): Element[] {\n const { target } = this\n\n if (is.string(target)) {\n return Array.from(this._context.querySelectorAll(target))\n }\n\n if (is.func(target) && (target as any).getAllElements) {\n return (target as any).getAllElements()\n }\n\n return is.element(target) ? [target] : []\n }\n\n /**\n * Gets the selector context Node of the Interactable. The default is\n * `window.document`.\n *\n * @return {Node} The context Node of this Interactable\n */\n context() {\n return this._context\n }\n\n inContext(element: Document | Node) {\n return this._context === element.ownerDocument || nodeContains(this._context, element)\n }\n\n /** @internal */\n testIgnoreAllow(\n this: Interactable,\n options: { ignoreFrom?: IgnoreValue; allowFrom?: IgnoreValue },\n targetNode: Node,\n eventTarget: Node,\n ) {\n return (\n !this.testIgnore(options.ignoreFrom, targetNode, eventTarget) &&\n this.testAllow(options.allowFrom, targetNode, eventTarget)\n )\n }\n\n /** @internal */\n testAllow(this: Interactable, allowFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!allowFrom) {\n return true\n }\n\n if (!is.element(element)) {\n return false\n }\n\n if (is.string(allowFrom)) {\n return matchesUpTo(element, allowFrom, targetNode)\n } else if (is.element(allowFrom)) {\n return nodeContains(allowFrom, element)\n }\n\n return false\n }\n\n /** @internal */\n testIgnore(this: Interactable, ignoreFrom: IgnoreValue | undefined, targetNode: Node, element: Node) {\n if (!ignoreFrom || !is.element(element)) {\n return false\n }\n\n if (is.string(ignoreFrom)) {\n return matchesUpTo(element, ignoreFrom, targetNode)\n } else if (is.element(ignoreFrom)) {\n return nodeContains(ignoreFrom, element)\n }\n\n return false\n }\n\n /**\n * Calls listeners for the given InteractEvent type bound globally\n * and directly to this Interactable\n *\n * @param {InteractEvent} iEvent The InteractEvent object to be fired on this\n * Interactable\n * @return {Interactable} this Interactable\n */\n fire(iEvent: E) {\n this.events.fire(iEvent)\n\n return this\n }\n\n /** @internal */\n _onOff(\n method: OnOffMethod,\n typeArg: EventTypes,\n listenerArg?: ListenersArg | null,\n options?: any,\n filter?: (type: string) => boolean,\n ) {\n if (is.object(typeArg) && !is.array(typeArg)) {\n options = listenerArg\n listenerArg = null\n }\n\n const listeners = normalizeListeners(typeArg, listenerArg, filter)\n\n for (let type in listeners) {\n if (type === 'wheel') {\n type = browser.wheelEvent\n }\n\n for (const listener of listeners[type]) {\n // if it is an action event type\n if (isNonNativeEvent(type, this._actions)) {\n this.events[method === OnOffMethod.On ? 'on' : 'off'](type, listener)\n }\n // delegated event\n else if (is.string(this.target)) {\n this._scopeEvents[method === OnOffMethod.On ? 'addDelegate' : 'removeDelegate'](\n this.target,\n this._context,\n type,\n listener,\n options,\n )\n }\n // remove listener from this Interactable's element\n else {\n this._scopeEvents[method === OnOffMethod.On ? 'add' : 'remove'](\n this.target,\n type,\n listener,\n options,\n )\n }\n }\n }\n\n return this\n }\n\n /**\n * Binds a listener for an InteractEvent, pointerEvent or DOM event.\n *\n * @param {string | array | object} types The types of events to listen\n * for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * addEventListener\n * @return {Interactable} This Interactable\n */\n on(types: EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.On, types, listener, options)\n }\n\n /**\n * Removes an InteractEvent, pointerEvent or DOM event listener.\n *\n * @param {string | array | object} types The types of events that were\n * listened for\n * @param {function | array | object} [listener] The event listener function(s)\n * @param {object | boolean} [options] options object or useCapture flag for\n * removeEventListener\n * @return {Interactable} This Interactable\n */\n off(types: string | string[] | EventTypes, listener?: ListenersArg, options?: any) {\n return this._onOff(OnOffMethod.Off, types, listener, options)\n }\n\n /**\n * Reset the options of this Interactable\n *\n * @param {object} options The new settings to apply\n * @return {object} This Interactable\n */\n set(options: OptionsArg) {\n const defaults = this._defaults\n\n if (!is.object(options)) {\n options = {}\n }\n\n ;(this.options as Required) = clone(defaults.base) as Required\n\n for (const actionName_ in this._actions.methodDict) {\n const actionName = actionName_ as ActionName\n const methodName = this._actions.methodDict[actionName]\n\n this.options[actionName] = {}\n this.setPerAction(actionName, extend(extend({}, defaults.perAction), defaults.actions[actionName]))\n ;(this[methodName] as ActionMethod)(options[actionName])\n }\n\n for (const setting in options) {\n if (setting === 'getRect') {\n this.rectChecker(options.getRect)\n continue\n }\n\n if (is.func((this as any)[setting])) {\n ;(this as any)[setting](options[setting as keyof typeof options])\n }\n }\n\n return this\n }\n\n /**\n * Remove this interactable from the list of interactables and remove it's\n * action capabilities and event listeners\n */\n unset() {\n if (is.string(this.target)) {\n // remove delegated events\n for (const type in this._scopeEvents.delegatedEvents) {\n const delegated = this._scopeEvents.delegatedEvents[type]\n\n for (let i = delegated.length - 1; i >= 0; i--) {\n const { selector, context, listeners } = delegated[i]\n\n if (selector === this.target && context === this._context) {\n delegated.splice(i, 1)\n }\n\n for (let l = listeners.length - 1; l >= 0; l--) {\n this._scopeEvents.removeDelegate(\n this.target,\n this._context,\n type,\n listeners[l][0],\n listeners[l][1],\n )\n }\n }\n }\n } else {\n this._scopeEvents.remove(this.target, 'all')\n }\n }\n}\n","import * as arr from '@interactjs/utils/arr'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport type { Interactable } from '@interactjs/core/Interactable'\nimport type { OptionsArg, Options } from '@interactjs/core/options'\nimport type { Scope } from '@interactjs/core/scope'\nimport type { Target } from '@interactjs/core/types'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactable:new': {\n interactable: Interactable\n target: Target\n options: OptionsArg\n win: Window\n }\n }\n}\n\nexport class InteractableSet {\n // all set interactables\n list: Interactable[] = []\n\n selectorMap: {\n [selector: string]: Interactable[]\n } = {}\n\n scope: Scope\n\n constructor(scope: Scope) {\n this.scope = scope\n scope.addListeners({\n 'interactable:unset': ({ interactable }) => {\n const { target } = interactable\n const interactablesOnTarget: Interactable[] = is.string(target)\n ? this.selectorMap[target]\n : (target as any)[this.scope.id]\n\n const targetIndex = arr.findIndex(interactablesOnTarget, (i) => i === interactable)\n interactablesOnTarget.splice(targetIndex, 1)\n },\n })\n }\n\n new(target: Target, options?: any): Interactable {\n options = extend(options || {}, {\n actions: this.scope.actions,\n })\n const interactable = new this.scope.Interactable(target, options, this.scope.document, this.scope.events)\n\n this.scope.addDocument(interactable._doc)\n this.list.push(interactable)\n\n if (is.string(target)) {\n if (!this.selectorMap[target]) {\n this.selectorMap[target] = []\n }\n this.selectorMap[target].push(interactable)\n } else {\n if (!(interactable.target as any)[this.scope.id]) {\n Object.defineProperty(target, this.scope.id, {\n value: [],\n configurable: true,\n })\n }\n\n ;(target as any)[this.scope.id].push(interactable)\n }\n\n this.scope.fire('interactable:new', {\n target,\n options,\n interactable,\n win: this.scope._win,\n })\n\n return interactable\n }\n\n getExisting(target: Target, options?: Options) {\n const context = (options && options.context) || this.scope.document\n const isSelector = is.string(target)\n const interactablesOnTarget: Interactable[] = isSelector\n ? this.selectorMap[target as string]\n : (target as any)[this.scope.id]\n\n if (!interactablesOnTarget) return undefined\n\n return arr.find(\n interactablesOnTarget,\n (interactable) =>\n interactable._context === context && (isSelector || interactable.inContext(target as any)),\n )\n }\n\n forEachMatch(node: Node, callback: (interactable: Interactable) => T): T | void {\n for (const interactable of this.list) {\n let ret: T\n\n if (\n (is.string(interactable.target)\n ? // target is a selector and the element matches\n is.element(node) && domUtils.matchesSelector(node, interactable.target)\n : // target is the element\n node === interactable.target) &&\n // the element is in context\n interactable.inContext(node)\n ) {\n ret = callback(interactable)\n }\n\n if (ret !== undefined) {\n return ret\n }\n }\n }\n}\n","import browser from '@interactjs/utils/browser'\nimport clone from '@interactjs/utils/clone'\nimport domObjects from '@interactjs/utils/domObjects'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport raf from '@interactjs/utils/raf'\nimport * as win from '@interactjs/utils/window'\n\nimport type Interaction from '@interactjs/core/Interaction'\n\nimport { Eventable } from './Eventable'\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './events'\nimport './interactions'\nimport events from './events'\nimport { Interactable as InteractableBase } from './Interactable'\nimport { InteractableSet } from './InteractableSet'\nimport { InteractEvent } from './InteractEvent'\nimport interactions from './interactions'\n/* eslint-enable import/no-duplicates */\nimport { createInteractStatic } from './InteractStatic'\nimport type { OptionsArg } from './options'\nimport { defaults } from './options'\nimport type { Actions } from './types'\n\nexport interface SignalArgs {\n 'scope:add-document': DocSignalArg\n 'scope:remove-document': DocSignalArg\n 'interactable:unset': { interactable: InteractableBase }\n 'interactable:set': { interactable: InteractableBase; options: OptionsArg }\n 'interactions:destroy': { interaction: Interaction }\n}\n\nexport type ListenerName = keyof SignalArgs\n\nexport type ListenerMap = {\n [P in ListenerName]?: (arg: SignalArgs[P], scope: Scope, signalName: P) => void | boolean\n}\n\ninterface DocSignalArg {\n doc: Document\n window: Window\n scope: Scope\n options: Record\n}\n\n/** @internal */\nexport interface Plugin {\n [key: string]: any\n id?: string\n listeners?: ListenerMap\n before?: string[]\n install?(scope: Scope, options?: any): void\n}\n\n/** @internal */\nexport class Scope {\n id = `__interact_scope_${Math.floor(Math.random() * 100)}`\n isInitialized = false\n listenerMaps: Array<{\n map: ListenerMap\n id?: string\n }> = []\n\n browser = browser\n defaults = clone(defaults) as typeof defaults\n Eventable = Eventable\n actions: Actions = {\n map: {},\n phases: {\n start: true,\n move: true,\n end: true,\n },\n methodDict: {} as any,\n phaselessTypes: {},\n }\n\n interactStatic = createInteractStatic(this)\n InteractEvent = InteractEvent\n Interactable: typeof InteractableBase\n interactables = new InteractableSet(this)\n\n // main window\n _win!: Window\n\n // main document\n document!: Document\n\n // main window\n window!: Window\n\n // all documents being listened to\n documents: Array<{ doc: Document; options: any }> = []\n\n _plugins: {\n list: Plugin[]\n map: { [id: string]: Plugin }\n } = {\n list: [],\n map: {},\n }\n\n constructor() {\n const scope = this\n\n this.Interactable = class extends InteractableBase {\n get _defaults() {\n return scope.defaults\n }\n\n set(this: T, options: OptionsArg) {\n super.set(options)\n\n scope.fire('interactable:set', {\n options,\n interactable: this,\n })\n\n return this\n }\n\n unset(this: InteractableBase) {\n super.unset()\n\n const index = scope.interactables.list.indexOf(this)\n if (index < 0) return\n\n scope.interactables.list.splice(index, 1)\n scope.fire('interactable:unset', { interactable: this })\n }\n }\n }\n\n addListeners(map: ListenerMap, id?: string) {\n this.listenerMaps.push({ id, map })\n }\n\n fire(name: T, arg: SignalArgs[T]): void | false {\n for (const {\n map: { [name]: listener },\n } of this.listenerMaps) {\n if (!!listener && listener(arg as any, this, name as never) === false) {\n return false\n }\n }\n }\n\n onWindowUnload = (event: BeforeUnloadEvent) => this.removeDocument(event.target as Document)\n\n init(window: Window | typeof globalThis) {\n return this.isInitialized ? this : initScope(this, window)\n }\n\n pluginIsInstalled(plugin: Plugin) {\n const { id } = plugin\n return id ? !!this._plugins.map[id] : this._plugins.list.indexOf(plugin) !== -1\n }\n\n usePlugin(plugin: Plugin, options?: { [key: string]: any }) {\n if (!this.isInitialized) {\n return this\n }\n\n if (this.pluginIsInstalled(plugin)) {\n return this\n }\n\n if (plugin.id) {\n this._plugins.map[plugin.id] = plugin\n }\n this._plugins.list.push(plugin)\n\n if (plugin.install) {\n plugin.install(this, options)\n }\n\n if (plugin.listeners && plugin.before) {\n let index = 0\n const len = this.listenerMaps.length\n const before = plugin.before.reduce((acc, id) => {\n acc[id] = true\n acc[pluginIdRoot(id)] = true\n return acc\n }, {})\n\n for (; index < len; index++) {\n const otherId = this.listenerMaps[index].id\n\n if (otherId && (before[otherId] || before[pluginIdRoot(otherId)])) {\n break\n }\n }\n\n this.listenerMaps.splice(index, 0, { id: plugin.id, map: plugin.listeners })\n } else if (plugin.listeners) {\n this.listenerMaps.push({ id: plugin.id, map: plugin.listeners })\n }\n\n return this\n }\n\n addDocument(doc: Document, options?: any): void | false {\n // do nothing if document is already known\n if (this.getDocIndex(doc) !== -1) {\n return false\n }\n\n const window = win.getWindow(doc)\n\n options = options ? extend({}, options) : {}\n\n this.documents.push({ doc, options })\n this.events.documents.push(doc)\n\n // don't add an unload event for the main document\n // so that the page may be cached in browser history\n if (doc !== this.document) {\n this.events.add(window, 'unload', this.onWindowUnload)\n }\n\n this.fire('scope:add-document', { doc, window, scope: this, options })\n }\n\n removeDocument(doc: Document) {\n const index = this.getDocIndex(doc)\n\n const window = win.getWindow(doc)\n const options = this.documents[index].options\n\n this.events.remove(window, 'unload', this.onWindowUnload)\n\n this.documents.splice(index, 1)\n this.events.documents.splice(index, 1)\n\n this.fire('scope:remove-document', { doc, window, scope: this, options })\n }\n\n getDocIndex(doc: Document) {\n for (let i = 0; i < this.documents.length; i++) {\n if (this.documents[i].doc === doc) {\n return i\n }\n }\n\n return -1\n }\n\n getDocOptions(doc: Document) {\n const docIndex = this.getDocIndex(doc)\n\n return docIndex === -1 ? null : this.documents[docIndex].options\n }\n\n now() {\n return (((this.window as any).Date as typeof Date) || Date).now()\n }\n}\n\n/** @internal */\nexport function initScope(scope: Scope, window: Window | typeof globalThis) {\n scope.isInitialized = true\n\n if (is.window(window)) {\n win.init(window)\n }\n\n domObjects.init(window)\n browser.init(window)\n raf.init(window)\n\n // @ts-expect-error\n scope.window = window\n scope.document = window.document\n\n scope.usePlugin(interactions)\n scope.usePlugin(events)\n\n return scope\n}\n\nfunction pluginIdRoot(id: string) {\n return id && id.replace(/\\/.*$/, '')\n}\n","import browser from '@interactjs/utils/browser'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport is from '@interactjs/utils/is'\nimport isNonNativeEvent from '@interactjs/utils/isNonNativeEvent'\nimport { warnOnce } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Context, EventTypes, Listener, ListenersArg, Target } from '@interactjs/core/types'\n\nimport type { Interactable } from './Interactable'\nimport type { Options } from './options'\n\n/**\n * ```js\n * interact('#draggable').draggable(true)\n *\n * var rectables = interact('rect')\n * rectables\n * .gesturable(true)\n * .on('gesturemove', function (event) {\n * // ...\n * })\n * ```\n *\n * The methods of this variable can be used to set elements as interactables\n * and also to change various default settings.\n *\n * Calling it as a function and passing an element or a valid CSS selector\n * string returns an Interactable object which has various methods to configure\n * it.\n *\n * @param {Element | string} target The HTML or SVG Element to interact with\n * or CSS selector\n * @return {Interactable}\n */\nexport interface InteractStatic {\n (target: Target, options?: Options): Interactable\n getPointerAverage: typeof pointerUtils.pointerAverage\n getTouchBBox: typeof pointerUtils.touchBBox\n getTouchDistance: typeof pointerUtils.touchDistance\n getTouchAngle: typeof pointerUtils.touchAngle\n getElementRect: typeof domUtils.getElementRect\n getElementClientRect: typeof domUtils.getElementClientRect\n matchesSelector: typeof domUtils.matchesSelector\n closest: typeof domUtils.closest\n /** @internal */ globalEvents: any\n version: string\n /** @internal */ scope: Scope\n /**\n * Use a plugin\n */\n use(\n plugin: Plugin,\n options?: {\n [key: string]: any\n },\n ): any\n /**\n * Check if an element or selector has been set with the `interact(target)`\n * function\n *\n * @return {boolean} Indicates if the element or CSS selector was previously\n * passed to interact\n */\n isSet(\n /* The Element or string being searched for */\n target: Target,\n options?: any,\n ): boolean\n on(type: string | EventTypes, listener: ListenersArg, options?: object): any\n off(type: EventTypes, listener: any, options?: object): any\n debug(): any\n /**\n * Whether or not the browser supports touch input\n */\n supportsTouch(): boolean\n /**\n * Whether or not the browser supports PointerEvents\n */\n supportsPointerEvent(): boolean\n /**\n * Cancels all interactions (end events are not fired)\n */\n stop(): InteractStatic\n /**\n * Returns or sets the distance the pointer must be moved before an action\n * sequence occurs. This also affects tolerance for tap events.\n */\n pointerMoveTolerance(\n /** The movement from the start position must be greater than this value */\n newValue?: number,\n ): InteractStatic | number\n addDocument(doc: Document, options?: object): void\n removeDocument(doc: Document): void\n}\n\nexport function createInteractStatic(scope: Scope): InteractStatic {\n const interact = ((target: Target, options: Options) => {\n let interactable = scope.interactables.getExisting(target, options)\n\n if (!interactable) {\n interactable = scope.interactables.new(target, options)\n interactable.events.global = interact.globalEvents\n }\n\n return interactable\n }) as InteractStatic\n\n // expose the functions used to calculate multi-touch properties\n interact.getPointerAverage = pointerUtils.pointerAverage\n interact.getTouchBBox = pointerUtils.touchBBox\n interact.getTouchDistance = pointerUtils.touchDistance\n interact.getTouchAngle = pointerUtils.touchAngle\n\n interact.getElementRect = domUtils.getElementRect\n interact.getElementClientRect = domUtils.getElementClientRect\n interact.matchesSelector = domUtils.matchesSelector\n interact.closest = domUtils.closest\n\n interact.globalEvents = {} as any\n\n // eslint-disable-next-line no-undef\n interact.version = process.env.npm_package_version\n interact.scope = scope\n interact.use = function (plugin, options) {\n this.scope.usePlugin(plugin, options)\n\n return this\n }\n\n interact.isSet = function (target: Target, options?: { context?: Context }): boolean {\n return !!this.scope.interactables.get(target, options && options.context)\n }\n\n interact.on = warnOnce(function on(type: string | EventTypes, listener: ListenersArg, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type as any[]) {\n this.on(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.on(prop, (type as any)[prop], listener)\n }\n\n return this\n }\n\n // if it is an InteractEvent type, add listener to globalEvents\n if (isNonNativeEvent(type, this.scope.actions)) {\n // if this type of event was never bound\n if (!this.globalEvents[type]) {\n this.globalEvents[type] = [listener]\n } else {\n this.globalEvents[type].push(listener)\n }\n }\n // If non InteractEvent type, addEventListener to document\n else {\n this.scope.events.add(this.scope.document, type, listener as Listener, { options })\n }\n\n return this\n }, 'The interact.on() method is being deprecated')\n\n interact.off = warnOnce(function off(type: EventTypes, listener: any, options?: object) {\n if (is.string(type) && type.search(' ') !== -1) {\n type = type.trim().split(/ +/)\n }\n\n if (is.array(type)) {\n for (const eventType of type) {\n this.off(eventType, listener, options)\n }\n\n return this\n }\n\n if (is.object(type)) {\n for (const prop in type) {\n this.off(prop, type[prop], listener)\n }\n\n return this\n }\n\n if (isNonNativeEvent(type, this.scope.actions)) {\n let index: number\n\n if (type in this.globalEvents && (index = this.globalEvents[type].indexOf(listener)) !== -1) {\n this.globalEvents[type].splice(index, 1)\n }\n } else {\n this.scope.events.remove(this.scope.document, type, listener, options)\n }\n\n return this\n }, 'The interact.off() method is being deprecated')\n\n interact.debug = function () {\n return this.scope\n }\n\n interact.supportsTouch = function () {\n return browser.supportsTouch\n }\n\n interact.supportsPointerEvent = function () {\n return browser.supportsPointerEvent\n }\n\n interact.stop = function () {\n for (const interaction of this.scope.interactions.list) {\n interaction.stop()\n }\n\n return this\n }\n\n interact.pointerMoveTolerance = function (newValue?: number) {\n if (is.number(newValue)) {\n this.scope.interactions.pointerMoveTolerance = newValue\n\n return this\n }\n\n return this.scope.interactions.pointerMoveTolerance\n }\n\n interact.addDocument = function (doc: Document, options?: object) {\n this.scope.addDocument(doc, options)\n }\n\n interact.removeDocument = function (doc: Document) {\n this.scope.removeDocument(doc)\n }\n\n return interact\n}\n","import { Scope } from '@interactjs/core/scope'\n\nconst scope = new Scope()\n\nconst interact = scope.interactStatic\n\nexport default interact\n\nconst _global = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this\nscope.init(_global)\n","export default () => {}\n","export default () => {}\n","import type { Rect, Point } from '@interactjs/core/types'\nimport type { SnapFunction, SnapTarget } from '@interactjs/modifiers/snap/pointer'\n\nexport interface GridOptionsBase {\n range?: number\n limits?: Rect\n offset?: Point\n}\nexport interface GridOptionsXY extends GridOptionsBase {\n x: number\n y: number\n}\nexport interface GridOptionsTopLeft extends GridOptionsBase {\n top?: number\n left?: number\n}\nexport interface GridOptionsBottomRight extends GridOptionsBase {\n bottom?: number\n right?: number\n}\nexport interface GridOptionsWidthHeight extends GridOptionsBase {\n width?: number\n height?: number\n}\n\nexport type GridOptions = GridOptionsXY | GridOptionsTopLeft | GridOptionsBottomRight | GridOptionsWidthHeight\n\nexport default (grid: GridOptions) => {\n const coordFields = (\n [\n ['x', 'y'],\n ['left', 'top'],\n ['right', 'bottom'],\n ['width', 'height'],\n ] as const\n ).filter(([xField, yField]) => xField in grid || yField in grid)\n\n const gridFunc: SnapFunction & {\n grid: typeof grid\n coordFields: typeof coordFields\n } = (x, y) => {\n const {\n range,\n limits = {\n left: -Infinity,\n right: Infinity,\n top: -Infinity,\n bottom: Infinity,\n },\n offset = { x: 0, y: 0 },\n } = grid\n\n const result: SnapTarget & {\n grid: typeof grid\n } = { range, grid, x: null as number, y: null as number }\n\n for (const [xField, yField] of coordFields) {\n const gridx = Math.round((x - offset.x) / (grid as any)[xField])\n const gridy = Math.round((y - offset.y) / (grid as any)[yField])\n\n result[xField] = Math.max(limits.left, Math.min(limits.right, gridx * (grid as any)[xField] + offset.x))\n result[yField] = Math.max(limits.top, Math.min(limits.bottom, gridy * (grid as any)[yField] + offset.y))\n }\n\n return result\n }\n\n gridFunc.grid = grid\n gridFunc.coordFields = coordFields\n\n return gridFunc\n}\n","import type { Plugin } from '@interactjs/core/scope'\nimport extend from '@interactjs/utils/extend'\n\nimport * as allSnappers from './all'\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n snappers: typeof allSnappers\n createSnapGrid: typeof allSnappers.grid\n }\n}\n\nconst snappersPlugin: Plugin = {\n id: 'snappers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n interact.snappers = extend(interact.snappers || {}, allSnappers)\n interact.createSnapGrid = interact.snappers.grid\n },\n}\n\nexport default snappersPlugin\n","/**\n * @module modifiers/aspectRatio\n *\n * @description\n * This modifier 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 type { Point, Rect, EdgeOptions } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport { addEdges } from '@interactjs/utils/rect'\n\nimport { makeModifier } from './base'\nimport { Modification } from './Modification'\nimport type { Modifier, ModifierModule, ModifierState } from './types'\n\nexport interface AspectRatioOptions {\n ratio?: number | 'preserve'\n equalDelta?: boolean\n modifiers?: Modifier[]\n enabled?: boolean\n}\n\nexport type AspectRatioState = ModifierState<\n AspectRatioOptions,\n {\n startCoords: Point\n startRect: Rect\n linkedEdges: EdgeOptions\n ratio: number\n equalDelta: boolean\n xIsPrimaryAxis: boolean\n edgeSign: {\n x: number\n y: number\n }\n subModification: Modification\n }\n>\n\nconst aspectRatio: ModifierModule = {\n start(arg) {\n const { state, rect, edges, pageCoords: coords } = arg\n let { ratio, enabled } = 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: edges.top || (edges.left && !edges.bottom),\n left: edges.left || (edges.top && !edges.right),\n bottom: edges.bottom || (edges.right && !edges.top),\n right: edges.right || (edges.bottom && !edges.left),\n })\n\n state.xIsPrimaryAxis = !!(edges.left || edges.right)\n\n if (state.equalDelta) {\n const sign = (linkedEdges.left ? 1 : -1) * (linkedEdges.top ? 1 : -1)\n state.edgeSign = {\n x: sign,\n y: sign,\n }\n } else {\n state.edgeSign = {\n x: linkedEdges.left ? -1 : 1,\n y: linkedEdges.top ? -1 : 1,\n }\n }\n\n if (enabled !== false) {\n extend(edges, linkedEdges)\n }\n\n if (!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 { linkedEdges } = state\n const initialCoords = extend({}, coords)\n const aspectMethod = state.equalDelta ? setEqualDelta : setRatio\n\n extend(arg.edges, linkedEdges)\n aspectMethod(state, state.xIsPrimaryAxis, coords, rect)\n\n if (!state.subModification) {\n return null\n }\n\n const correctedRect = extend({}, rect)\n\n addEdges(linkedEdges, correctedRect, {\n x: coords.x - initialCoords.x,\n y: coords.y - initialCoords.y,\n })\n\n const result = state.subModification.setAll({\n ...arg,\n rect: correctedRect,\n edges: 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.y\n } else {\n coords.x = startCoords.x + (coords.y - startCoords.y) * edgeSign.x\n }\n}\n\nfunction setRatio(\n { startRect, startCoords, ratio, edgeSign }: AspectRatioState,\n xIsPrimaryAxis: boolean,\n coords: Point,\n rect: Rect,\n) {\n if (xIsPrimaryAxis) {\n const newHeight = rect.width / ratio\n\n coords.y = startCoords.y + (newHeight - startRect.height) * edgeSign.y\n } else {\n const newWidth = rect.height * ratio\n\n coords.x = startCoords.x + (newWidth - startRect.width) * edgeSign.x\n }\n}\n\nexport default makeModifier(aspectRatio, 'aspectRatio')\nexport { aspectRatio }\n","import type { ModifierFunction } from './types'\n\nconst noop = (() => {}) as unknown as ModifierFunction\n\nnoop._defaults = {}\n\nexport default noop\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { RectResolvable, Rect, Point } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule, ModifierState } from '../types'\n\nexport interface RestrictOptions {\n // where to drag over\n restriction: RectResolvable<[number, number, Interaction]>\n // what part of self is allowed to drag over\n elementRect: Rect\n offset: Rect\n // restrict just before the end drag\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictState = ModifierState<\n RestrictOptions,\n {\n offset: Rect\n }\n>\n\nfunction start({ rect, startOffset, state, interaction, pageCoords }: ModifierArg) {\n const { options } = state\n const { elementRect } = options\n const offset: Rect = extend(\n {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n },\n options.offset || {},\n )\n\n if (rect && elementRect) {\n const restriction = getRestrictionRect(options.restriction, interaction, pageCoords)\n\n if (restriction) {\n const widthDiff = restriction.right - restriction.left - rect.width\n const heightDiff = restriction.bottom - restriction.top - rect.height\n\n if (widthDiff < 0) {\n offset.left += widthDiff\n offset.right += widthDiff\n }\n if (heightDiff < 0) {\n offset.top += heightDiff\n offset.bottom += heightDiff\n }\n }\n\n offset.left += startOffset.left - rect.width * elementRect.left\n offset.top += startOffset.top - rect.height * elementRect.top\n\n offset.right += startOffset.right - rect.width * (1 - elementRect.right)\n offset.bottom += startOffset.bottom - rect.height * (1 - elementRect.bottom)\n }\n\n state.offset = offset\n}\n\nfunction set({ coords, interaction, state }: ModifierArg) {\n const { options, offset } = state\n\n const restriction = getRestrictionRect(options.restriction, interaction, coords)\n\n if (!restriction) return\n\n const rect = rectUtils.xywhToTlbr(restriction)\n\n coords.x = Math.max(Math.min(rect.right - offset.right, coords.x), rect.left + offset.left)\n coords.y = Math.max(Math.min(rect.bottom - offset.bottom, coords.y), rect.top + offset.top)\n}\n\nexport function getRestrictionRect(\n value: RectResolvable<[number, number, Interaction]>,\n interaction: Interaction,\n coords?: Point,\n) {\n if (is.func(value)) {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element, [\n coords.x,\n coords.y,\n interaction,\n ])\n } else {\n return rectUtils.resolveRectLike(value, interaction.interactable, interaction.element)\n }\n}\n\nconst defaults: RestrictOptions = {\n restriction: null,\n elementRect: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrict: ModifierModule = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrict, 'restrict')\nexport { restrict }\n","// This modifier adds the options.resize.restrictEdges setting which sets min and\n// max for the top, left, bottom and right edges of the target being resized.\n//\n// interact(target).resize({\n// edges: { top: true, left: true },\n// restrictEdges: {\n// inner: { top: 200, left: 200, right: 400, bottom: 400 },\n// outer: { top: 0, left: 0, right: 600, bottom: 600 },\n// },\n// })\n\nimport type { Point, Rect } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nexport interface RestrictEdgesOptions {\n inner: RestrictOptions['restriction']\n outer: RestrictOptions['restriction']\n offset?: RestrictOptions['offset']\n endOnly: boolean\n enabled?: boolean\n}\n\nexport type RestrictEdgesState = ModifierState<\n RestrictEdgesOptions,\n {\n inner: Rect\n outer: Rect\n offset: RestrictEdgesOptions['offset']\n }\n>\n\nconst noInner = { top: +Infinity, left: +Infinity, bottom: -Infinity, right: -Infinity }\nconst noOuter = { top: -Infinity, left: -Infinity, bottom: +Infinity, right: +Infinity }\n\nfunction start({ interaction, startOffset, state }: ModifierArg) {\n const { options } = state\n let offset: Point\n\n if (options) {\n const offsetRect = getRestrictionRect(options.offset, interaction, interaction.coords.start.page)\n\n offset = rectUtils.rectToXY(offsetRect)\n }\n\n offset = offset || { x: 0, y: 0 }\n\n state.offset = {\n top: offset.y + startOffset.top,\n left: offset.x + startOffset.left,\n bottom: offset.y - startOffset.bottom,\n right: offset.x - startOffset.right,\n }\n}\n\nfunction set({ coords, edges, interaction, state }: ModifierArg) {\n const { offset, options } = state\n\n if (!edges) {\n return\n }\n\n const page = extend({}, coords)\n const inner = getRestrictionRect(options.inner, interaction, page) || ({} as Rect)\n const outer = getRestrictionRect(options.outer, interaction, page) || ({} as Rect)\n\n fixRect(inner, noInner)\n fixRect(outer, noOuter)\n\n if (edges.top) {\n coords.y = Math.min(Math.max(outer.top + offset.top, page.y), inner.top + offset.top)\n } else if (edges.bottom) {\n coords.y = Math.max(Math.min(outer.bottom + offset.bottom, page.y), inner.bottom + offset.bottom)\n }\n if (edges.left) {\n coords.x = Math.min(Math.max(outer.left + offset.left, page.x), inner.left + offset.left)\n } else if (edges.right) {\n coords.x = Math.max(Math.min(outer.right + offset.right, page.x), inner.right + offset.right)\n }\n}\n\nfunction fixRect(rect: Rect, defaults: Rect) {\n for (const edge of ['top', 'left', 'bottom', 'right']) {\n if (!(edge in rect)) {\n rect[edge] = defaults[edge]\n }\n }\n\n return rect\n}\n\nconst defaults: RestrictEdgesOptions = {\n inner: null,\n outer: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictEdges = {\n noInner,\n noOuter,\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictEdges, 'restrictEdges')\nexport { restrictEdges }\n","import extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\n\nimport { restrict } from './pointer'\n\nconst defaults = extend(\n {\n get elementRect() {\n return { top: 0, left: 0, bottom: 1, right: 1 }\n },\n set elementRect(_) {},\n },\n restrict.defaults,\n)\n\nconst restrictRect = {\n start: restrict.start,\n set: restrict.set,\n defaults,\n}\n\nexport default makeModifier(restrictRect, 'restrictRect')\nexport { restrictRect }\n","import type { Point, Rect, Size } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\nimport * as rectUtils from '@interactjs/utils/rect'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nimport type { RestrictEdgesState } from './edges'\nimport { restrictEdges } from './edges'\nimport type { RestrictOptions } from './pointer'\nimport { getRestrictionRect } from './pointer'\n\nconst noMin = { width: -Infinity, height: -Infinity }\nconst noMax = { width: +Infinity, height: +Infinity }\n\nexport interface RestrictSizeOptions {\n min?: Size | Point | RestrictOptions['restriction']\n max?: Size | Point | RestrictOptions['restriction']\n endOnly: boolean\n enabled?: boolean\n}\n\nfunction start(arg: ModifierArg) {\n return restrictEdges.start(arg)\n}\n\nexport type RestrictSizeState = RestrictEdgesState &\n ModifierState<\n RestrictSizeOptions & { inner: Rect; outer: Rect },\n {\n min: Rect\n max: Rect\n }\n >\n\nfunction set(arg: ModifierArg) {\n const { interaction, state, rect, edges } = arg\n const { options } = state\n\n if (!edges) {\n return\n }\n\n const minSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.min as any, interaction, arg.coords)) || noMin\n const maxSize =\n rectUtils.tlbrToXywh(getRestrictionRect(options.max as any, interaction, arg.coords)) || noMax\n\n state.options = {\n endOnly: options.endOnly,\n inner: extend({}, restrictEdges.noInner),\n outer: extend({}, restrictEdges.noOuter),\n }\n\n if (edges.top) {\n state.options.inner.top = rect.bottom - minSize.height\n state.options.outer.top = rect.bottom - maxSize.height\n } else if (edges.bottom) {\n state.options.inner.bottom = rect.top + minSize.height\n state.options.outer.bottom = rect.top + maxSize.height\n }\n if (edges.left) {\n state.options.inner.left = rect.right - minSize.width\n state.options.outer.left = rect.right - maxSize.width\n } else if (edges.right) {\n state.options.inner.right = rect.left + minSize.width\n state.options.outer.right = rect.left + maxSize.width\n }\n\n restrictEdges.set(arg)\n\n state.options = options\n}\n\nconst defaults: RestrictSizeOptions = {\n min: null,\n max: null,\n endOnly: false,\n enabled: false,\n}\n\nconst restrictSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(restrictSize, 'restrictSize')\nexport { restrictSize }\n","import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction'\nimport type { ActionName, Point, RectResolvable, Element } from '@interactjs/core/types'\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 } from '../base'\nimport type { ModifierArg, ModifierState } from '../types'\n\nexport interface Offset {\n x: number\n y: number\n index: number\n relativePoint?: Point | null\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 SnapOptions,\n {\n offsets?: Offset[]\n closest?: any\n targetFields?: string[][]\n }\n>\n\nfunction start(arg: ModifierArg) {\n const { interaction, interactable, element, rect, state, startOffset } = arg\n const { options } = state\n const origin = options.offsetWithOrigin ? getOrigin(arg) : { 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 } 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 =\n 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 : [\n {\n index: 0,\n relativePoint: null,\n x: snapOffset.x,\n y: snapOffset.y,\n },\n ]\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: SnapPosition[] = []\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 } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\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 (\n !closest.target ||\n (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 ) {\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(resolveRectLike(arg.state.options.origin as any, null, null, [element]))\n const origin = optionsOrigin || getOriginXY(arg.interactable, element, arg.interaction.prepared.name)\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","// This modifier allows snapping of the size of targets during resize\n// interactions.\n\nimport extend from '@interactjs/utils/extend'\nimport is from '@interactjs/utils/is'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snap } from './pointer'\n\nexport type SnapSizeOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { state, edges } = arg\n const { options } = state\n\n if (!edges) {\n return null\n }\n\n arg.state = {\n options: {\n targets: null,\n relativePoints: [\n {\n x: edges.left ? 0 : 1,\n y: edges.top ? 0 : 1,\n },\n ],\n offset: options.offset || 'self',\n origin: { x: 0, y: 0 },\n range: options.range,\n },\n }\n\n state.targetFields = state.targetFields || [\n ['width', 'height'],\n ['x', 'y'],\n ]\n\n snap.start(arg)\n state.offsets = arg.state.offsets\n\n arg.state = state\n}\n\nfunction set(arg) {\n const { interaction, state, coords } = arg\n const { options, offsets } = state\n const relative = {\n x: coords.x - offsets[0].x,\n y: coords.y - offsets[0].y,\n }\n\n state.options = extend({}, options)\n state.options.targets = []\n\n for (const snapTarget of options.targets || []) {\n let target\n\n if (is.func(snapTarget)) {\n target = snapTarget(relative.x, relative.y, interaction)\n } else {\n target = snapTarget\n }\n\n if (!target) {\n continue\n }\n\n for (const [xField, yField] of state.targetFields) {\n if (xField in target || yField in target) {\n target.x = target[xField]\n target.y = target[yField]\n\n break\n }\n }\n\n state.options.targets.push(target)\n }\n\n const returnValue = snap.set(arg)\n\n state.options = options\n\n return returnValue\n}\n\nconst defaults: SnapSizeOptions = {\n range: Infinity,\n targets: null,\n offset: null,\n endOnly: false,\n enabled: false,\n}\n\nconst snapSize = {\n start,\n set,\n defaults,\n}\n\nexport default makeModifier(snapSize, 'snapSize')\nexport { snapSize }\n","/**\n * @module modifiers/snapEdges\n *\n * @description\n * This modifier allows snapping of the edges of targets during resize\n * interactions.\n *\n * ```js\n * interact(target).resizable({\n * snapEdges: {\n * targets: [interact.snappers.grid({ x: 100, y: 50 })],\n * },\n * })\n *\n * interact(target).resizable({\n * snapEdges: {\n * targets: [\n * interact.snappers.grid({\n * top: 50,\n * left: 50,\n * bottom: 100,\n * right: 100,\n * }),\n * ],\n * },\n * })\n * ```\n */\n\nimport clone from '@interactjs/utils/clone'\nimport extend from '@interactjs/utils/extend'\n\nimport { makeModifier } from '../base'\nimport type { ModifierArg, ModifierModule } from '../types'\n\nimport type { SnapOptions, SnapState } from './pointer'\nimport { snapSize } from './size'\n\nexport type SnapEdgesOptions = Pick\n\nfunction start(arg: ModifierArg) {\n const { edges } = arg\n\n if (!edges) {\n return null\n }\n\n arg.state.targetFields = arg.state.targetFields || [\n [edges.left ? 'left' : 'right', edges.top ? 'top' : 'bottom'],\n ]\n\n return snapSize.start(arg)\n}\n\nconst snapEdges: ModifierModule> = {\n start,\n set: snapSize.set,\n defaults: extend(clone(snapSize.defaults), {\n targets: undefined,\n range: undefined,\n offset: { x: 0, y: 0 },\n } as const),\n}\n\nexport default makeModifier(snapEdges, 'snapEdges')\nexport { snapEdges }\n","/* eslint-disable n/no-extraneous-import, import/no-unresolved */\nimport aspectRatio from './aspectRatio'\nimport avoid from './avoid/avoid'\nimport restrictEdges from './restrict/edges'\nimport restrict from './restrict/pointer'\nimport restrictRect from './restrict/rect'\nimport restrictSize from './restrict/size'\nimport rubberband from './rubberband/rubberband'\nimport snapEdges from './snap/edges'\nimport snap from './snap/pointer'\nimport snapSize from './snap/size'\nimport spring from './spring/spring'\nimport transform from './transform/transform'\n\nexport default {\n aspectRatio,\n restrictEdges,\n restrict,\n restrictRect,\n restrictSize,\n snapEdges,\n snap,\n snapSize,\n\n spring,\n avoid,\n transform,\n rubberband,\n}\n","import type { Plugin } from '@interactjs/core/scope'\nimport snappers from '@interactjs/snappers/plugin'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './all'\nimport './base'\n\nimport all from './all'\nimport base from './base'\n/* eslint-enable import/no-duplicates */\n\ndeclare module '@interactjs/core/InteractStatic' {\n export interface InteractStatic {\n modifiers: typeof all\n }\n}\n\nconst modifiers: Plugin = {\n id: 'modifiers',\n install(scope) {\n const { interactStatic: interact } = scope\n\n scope.usePlugin(base)\n scope.usePlugin(snappers)\n\n interact.modifiers = all\n\n // for backwrads compatibility\n for (const type in all) {\n const { _defaults, _methods } = all[type as keyof typeof all]\n\n ;(_defaults as any)._methods = _methods\n ;(scope.defaults.perAction as any)[type] = _defaults\n }\n },\n}\n\nexport default modifiers\n","import { BaseEvent } from '@interactjs/core/BaseEvent'\nimport type Interaction from '@interactjs/core/Interaction'\nimport type { PointerEventType, PointerType, Point } from '@interactjs/core/types'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\n\nexport class PointerEvent extends BaseEvent {\n declare type: T\n declare originalEvent: PointerEventType\n declare pointerId: number\n declare pointerType: string\n declare double: boolean\n declare pageX: number\n declare pageY: number\n declare clientX: number\n declare clientY: number\n declare dt: number\n declare eventable: any;\n [key: string]: any\n\n constructor(\n type: T,\n pointer: PointerType | PointerEvent,\n event: PointerEventType,\n eventTarget: Node,\n interaction: Interaction,\n timeStamp: number,\n ) {\n super(interaction)\n pointerUtils.pointerExtend(this, event)\n\n if (event !== pointer) {\n pointerUtils.pointerExtend(this, pointer)\n }\n\n this.timeStamp = timeStamp\n this.originalEvent = event\n this.type = type\n this.pointerId = pointerUtils.getPointerId(pointer)\n this.pointerType = pointerUtils.getPointerType(pointer)\n this.target = eventTarget\n this.currentTarget = null\n\n if (type === 'tap') {\n const pointerIndex = interaction.getPointerIndex(pointer)\n this.dt = this.timeStamp - interaction.pointers[pointerIndex].downTime\n\n const interval = this.timeStamp - interaction.tapTime\n\n this.double =\n !!interaction.prevTap &&\n interaction.prevTap.type !== 'doubletap' &&\n interaction.prevTap.target === this.target &&\n interval < 500\n } else if (type === 'doubletap') {\n this.dt = (pointer as PointerEvent<'tap'>).timeStamp - interaction.tapTime\n this.double = true\n }\n }\n\n _subtractOrigin({ x: originX, y: originY }: Point) {\n this.pageX -= originX\n this.pageY -= originY\n this.clientX -= originX\n this.clientY -= originY\n\n return this\n }\n\n _addOrigin({ x: originX, y: originY }: Point) {\n this.pageX += originX\n this.pageY += originY\n this.clientX += originX\n this.clientY += originY\n\n return this\n }\n\n /**\n * Prevent the default behaviour of the original Event\n */\n preventDefault() {\n this.originalEvent.preventDefault()\n }\n}\n","import type { Eventable } from '@interactjs/core/Eventable'\nimport type { Interaction } from '@interactjs/core/Interaction'\nimport type { PerActionDefaults } from '@interactjs/core/options'\nimport type { Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\nimport type { Point, PointerType, PointerEventType, Element } from '@interactjs/core/types'\nimport * as domUtils from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport getOriginXY from '@interactjs/utils/getOriginXY'\n\nimport { PointerEvent } from './PointerEvent'\n\nexport type EventTargetList = Array<{\n node: Node\n eventable: Eventable\n props: { [key: string]: any }\n}>\n\nexport interface PointerEventOptions extends PerActionDefaults {\n enabled?: undefined // not used\n holdDuration?: number\n ignoreFrom?: any\n allowFrom?: any\n origin?: Point | string | Element\n}\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n pointerEvents: typeof pointerEvents\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n prevTap?: PointerEvent\n tapTime?: number\n }\n}\n\ndeclare module '@interactjs/core/PointerInfo' {\n interface PointerInfo {\n hold?: {\n duration: number\n timeout: any\n }\n }\n}\n\ndeclare module '@interactjs/core/options' {\n interface ActionDefaults {\n pointerEvents: Options\n }\n}\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'pointerEvents:new': { pointerEvent: PointerEvent }\n 'pointerEvents:fired': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n pointerEvent: PointerEvent\n targets?: EventTargetList\n type: string\n }\n 'pointerEvents:collect-targets': {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n targets?: EventTargetList\n type: string\n path: Node[]\n node: null\n }\n }\n}\n\nconst defaults: PointerEventOptions = {\n holdDuration: 600,\n ignoreFrom: null,\n allowFrom: null,\n origin: { x: 0, y: 0 },\n}\n\nconst pointerEvents: Plugin = {\n id: 'pointer-events/base',\n before: ['inertia', 'modifiers', 'auto-start', 'actions'],\n install,\n listeners: {\n 'interactions:new': addInteractionProps,\n 'interactions:update-pointer': addHoldInfo,\n 'interactions:move': moveAndClearHold,\n 'interactions:down': (arg, scope) => {\n downAndStartHold(arg, scope)\n fire(arg, scope)\n },\n 'interactions:up': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n tapAfterUp(arg, scope)\n },\n 'interactions:cancel': (arg, scope) => {\n clearHold(arg)\n fire(arg, scope)\n },\n },\n PointerEvent,\n fire,\n collectEventTargets,\n defaults,\n types: {\n down: true,\n move: true,\n up: true,\n cancel: true,\n tap: true,\n doubletap: true,\n hold: true,\n } as { [type: string]: true },\n}\n\nfunction fire(\n arg: {\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n interaction: Interaction\n type: T\n targets?: EventTargetList\n },\n scope: Scope,\n) {\n const { interaction, pointer, event, eventTarget, type, targets = collectEventTargets(arg, scope) } = arg\n\n const pointerEvent = new PointerEvent(type, pointer, event, eventTarget, interaction, scope.now())\n\n scope.fire('pointerEvents:new', { pointerEvent })\n\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n targets,\n type,\n pointerEvent,\n }\n\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n\n for (const prop in target.props || {}) {\n ;(pointerEvent as any)[prop] = target.props[prop]\n }\n\n const origin = getOriginXY(target.eventable, target.node)\n\n pointerEvent._subtractOrigin(origin)\n pointerEvent.eventable = target.eventable\n pointerEvent.currentTarget = target.node\n\n target.eventable.fire(pointerEvent)\n\n pointerEvent._addOrigin(origin)\n\n if (\n pointerEvent.immediatePropagationStopped ||\n (pointerEvent.propagationStopped &&\n i + 1 < targets.length &&\n targets[i + 1].node !== pointerEvent.currentTarget)\n ) {\n break\n }\n }\n\n scope.fire('pointerEvents:fired', signalArg)\n\n if (type === 'tap') {\n // if pointerEvent should make a double tap, create and fire a doubletap\n // PointerEvent and use that as the prevTap\n const prevTap = pointerEvent.double\n ? fire(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'doubletap',\n },\n scope,\n )\n : pointerEvent\n\n interaction.prevTap = prevTap\n interaction.tapTime = prevTap.timeStamp\n }\n\n return pointerEvent\n}\n\nfunction collectEventTargets(\n {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n }: {\n interaction: Interaction\n pointer: PointerType | PointerEvent\n event: PointerEventType | PointerEvent\n eventTarget: Node\n type: T\n },\n scope: Scope,\n) {\n const pointerIndex = interaction.getPointerIndex(pointer)\n const pointerInfo = interaction.pointers[pointerIndex]\n\n // do not fire a tap event if the pointer was moved before being lifted\n if (\n type === 'tap' &&\n (interaction.pointerWasMoved ||\n // or if the pointerup target is different to the pointerdown target\n !(pointerInfo && pointerInfo.downTarget === eventTarget))\n ) {\n return []\n }\n\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type,\n path,\n targets: [] as EventTargetList,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (type === 'hold') {\n signalArg.targets = signalArg.targets.filter(\n (target) =>\n target.eventable.options.holdDuration === interaction.pointers[pointerIndex]?.hold?.duration,\n )\n }\n\n return signalArg.targets\n}\n\nfunction addInteractionProps({ interaction }) {\n interaction.prevTap = null // the most recent tap event on this interaction\n interaction.tapTime = 0 // time of the most recent tap event\n}\n\nfunction addHoldInfo({ down, pointerInfo }: SignalArgs['interactions:update-pointer']) {\n if (!down && pointerInfo.hold) {\n return\n }\n\n pointerInfo.hold = { duration: Infinity, timeout: null }\n}\n\nfunction clearHold({ interaction, pointerIndex }) {\n const hold = interaction.pointers[pointerIndex].hold\n\n if (hold && hold.timeout) {\n clearTimeout(hold.timeout)\n hold.timeout = null\n }\n}\n\nfunction moveAndClearHold(arg: SignalArgs['interactions:move'], scope: Scope) {\n const { interaction, pointer, event, eventTarget, duplicate } = arg\n\n if (!duplicate && (!interaction.pointerIsDown || interaction.pointerWasMoved)) {\n if (interaction.pointerIsDown) {\n clearHold(arg)\n }\n\n fire(\n {\n interaction,\n pointer,\n event,\n eventTarget: eventTarget as Element,\n type: 'move',\n },\n scope,\n )\n }\n}\n\nfunction downAndStartHold(\n { interaction, pointer, event, eventTarget, pointerIndex }: SignalArgs['interactions:down'],\n scope: Scope,\n) {\n const timer = interaction.pointers[pointerIndex].hold!\n const path = domUtils.getPath(eventTarget as Element | Document)\n const signalArg = {\n interaction,\n pointer,\n event,\n eventTarget,\n type: 'hold',\n targets: [] as EventTargetList,\n path,\n node: null,\n }\n\n for (const node of path) {\n signalArg.node = node\n\n scope.fire('pointerEvents:collect-targets', signalArg)\n }\n\n if (!signalArg.targets.length) return\n\n let minDuration = Infinity\n\n for (const target of signalArg.targets) {\n const holdDuration = target.eventable.options.holdDuration\n\n if (holdDuration < minDuration) {\n minDuration = holdDuration\n }\n }\n\n timer.duration = minDuration\n timer.timeout = setTimeout(() => {\n fire(\n {\n interaction,\n eventTarget,\n pointer,\n event,\n type: 'hold',\n },\n scope,\n )\n }, minDuration)\n}\n\nfunction tapAfterUp(\n { interaction, pointer, event, eventTarget }: SignalArgs['interactions:up'],\n scope: Scope,\n) {\n if (!interaction.pointerWasMoved) {\n fire({ interaction, eventTarget, pointer, event, type: 'tap' }, scope)\n }\n}\n\nfunction install(scope: Scope) {\n scope.pointerEvents = pointerEvents\n scope.defaults.actions.pointerEvents = pointerEvents.defaults\n extend(scope.actions.phaselessTypes, pointerEvents.types)\n}\n\nexport default pointerEvents\n","import type Interaction from '@interactjs/core/Interaction'\nimport type { ListenerMap, Scope, SignalArgs, Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport basePlugin from './base'\n/* eslint-enable import/no-duplicates */\nimport { type PointerEvent } from './PointerEvent'\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n holdIntervalHandle?: any\n }\n}\n\ndeclare module '@interactjs/pointer-events/PointerEvent' {\n interface PointerEvent {\n count?: number\n }\n}\n\ndeclare module '@interactjs/pointer-events/base' {\n interface PointerEventOptions {\n holdRepeatInterval?: number\n }\n}\n\nfunction install(scope: Scope) {\n scope.usePlugin(basePlugin)\n\n const { pointerEvents } = scope\n\n // don't repeat by default\n pointerEvents.defaults.holdRepeatInterval = 0\n pointerEvents.types.holdrepeat = scope.actions.phaselessTypes.holdrepeat = true\n}\n\nfunction onNew({ pointerEvent }: { pointerEvent: PointerEvent }) {\n if (pointerEvent.type !== 'hold') return\n\n pointerEvent.count = (pointerEvent.count || 0) + 1\n}\n\nfunction onFired(\n { interaction, pointerEvent, eventTarget, targets }: SignalArgs['pointerEvents:fired'],\n scope: Scope,\n) {\n if (pointerEvent.type !== 'hold' || !targets.length) return\n\n // get the repeat interval from the first eventable\n const interval = targets[0].eventable.options.holdRepeatInterval\n\n // don't repeat if the interval is 0 or less\n if (interval <= 0) return\n\n // set a timeout to fire the holdrepeat event\n interaction.holdIntervalHandle = setTimeout(() => {\n scope.pointerEvents.fire(\n {\n interaction,\n eventTarget,\n type: 'hold',\n pointer: pointerEvent,\n event: pointerEvent,\n },\n scope,\n )\n }, interval)\n}\n\nfunction endHoldRepeat({ interaction }: { interaction: Interaction }) {\n // set the interaction's holdStopTime property\n // to stop further holdRepeat events\n if (interaction.holdIntervalHandle) {\n clearInterval(interaction.holdIntervalHandle)\n interaction.holdIntervalHandle = null\n }\n}\n\nconst holdRepeat: Plugin = {\n id: 'pointer-events/holdRepeat',\n install,\n listeners: ['move', 'up', 'cancel', 'endall'].reduce(\n (acc, enderTypes) => {\n ;(acc as any)[`pointerEvents:${enderTypes}`] = endHoldRepeat\n return acc\n },\n {\n 'pointerEvents:new': onNew,\n 'pointerEvents:fired': onFired,\n } as ListenerMap,\n ),\n}\n\nexport default holdRepeat\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { Element } from '@interactjs/core/types'\nimport extend from '@interactjs/utils/extend'\n\nimport type { PointerEventOptions } from '@interactjs/pointer-events/base'\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n pointerEvents(options: Partial): this\n /** @internal */\n __backCompatOption: (optionName: string, newValue: any) => any\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n Interactable.prototype.pointerEvents = function (\n this: Interactable,\n options: Partial,\n ) {\n extend(this.events.options, options)\n\n return this\n }\n\n const __backCompatOption = Interactable.prototype._backCompatOption\n\n Interactable.prototype._backCompatOption = function (optionName, newValue) {\n const ret = __backCompatOption.call(this, optionName, newValue)\n\n if (ret === this) {\n this.events.options[optionName] = newValue\n }\n\n return ret\n }\n}\n\nconst plugin: Plugin = {\n id: 'pointer-events/interactableTargets',\n install,\n listeners: {\n 'pointerEvents:collect-targets': ({ targets, node, type, eventTarget }, scope) => {\n scope.interactables.forEachMatch(node, (interactable: Interactable) => {\n const eventable = interactable.events\n const options = eventable.options\n\n if (\n eventable.types[type] &&\n eventable.types[type].length &&\n interactable.testIgnoreAllow(options, node, eventTarget)\n ) {\n targets.push({\n node,\n eventable,\n props: { interactable },\n })\n }\n })\n },\n\n 'interactable:new': ({ interactable }) => {\n interactable.events.getRect = function (element: Element) {\n return interactable.getRect(element)\n }\n },\n\n 'interactable:set': ({ interactable, options }, scope) => {\n extend(interactable.events.options, scope.pointerEvents.defaults)\n extend(interactable.events.options, options.pointerEvents || {})\n },\n },\n}\n\nexport default plugin\n","import type { Plugin } from '@interactjs/core/scope'\n\n/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport './base'\nimport './holdRepeat'\nimport './interactableTargets'\n\nimport * as pointerEvents from './base'\nimport holdRepeat from './holdRepeat'\nimport interactableTargets from './interactableTargets'\n/* eslint-enable import/no-duplicates */\n\nconst plugin: Plugin = {\n id: 'pointer-events',\n install(scope) {\n scope.usePlugin(pointerEvents)\n scope.usePlugin(holdRepeat)\n scope.usePlugin(interactableTargets)\n },\n}\n\nexport default plugin\n","import type { Interactable } from '@interactjs/core/Interactable'\nimport type { DoAnyPhaseArg, Interaction } from '@interactjs/core/Interaction'\nimport type { Scope, Plugin } from '@interactjs/core/scope'\nimport type { ActionName, ActionProps, Element } from '@interactjs/core/types'\nimport * as arr from '@interactjs/utils/arr'\nimport { copyAction } from '@interactjs/utils/misc'\nimport * as pointerUtils from '@interactjs/utils/pointerUtils'\nimport { tlbrToXywh } from '@interactjs/utils/rect'\n\ndeclare module '@interactjs/core/scope' {\n interface SignalArgs {\n 'interactions:before-action-reflow': Omit\n 'interactions:action-reflow': DoAnyPhaseArg\n 'interactions:after-action-reflow': DoAnyPhaseArg\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n /**\n * ```js\n * const interactable = interact(target)\n * const drag = { name: drag, axis: 'x' }\n * const resize = { name: resize, edges: { left: true, bottom: true }\n *\n * interactable.reflow(drag)\n * interactable.reflow(resize)\n * ```\n *\n * Start an action sequence to re-apply modifiers, check drops, etc.\n *\n * @param { Object } action The action to begin\n * @param { string } action.name The name of the action\n * @returns { Promise } A promise that resolves to the `Interactable` when actions on all targets have ended\n */\n reflow(action: ActionProps): ReturnType\n }\n}\n\ndeclare module '@interactjs/core/Interaction' {\n interface Interaction {\n _reflowPromise: Promise\n _reflowResolve: (...args: unknown[]) => void\n }\n}\n\ndeclare module '@interactjs/core/InteractEvent' {\n interface PhaseMap {\n reflow?: true\n }\n}\n\nfunction install(scope: Scope) {\n const { Interactable } = scope\n\n scope.actions.phases.reflow = true\n\n Interactable.prototype.reflow = function (action: ActionProps) {\n return doReflow(this, action, scope)\n }\n}\n\nfunction doReflow(\n interactable: Interactable,\n action: ActionProps,\n scope: Scope,\n): Promise {\n const elements = interactable.getAllElements()\n\n // tslint:disable-next-line variable-name\n const Promise = (scope.window as any).Promise\n const promises: Array> | null = Promise ? [] : null\n\n for (const element of elements) {\n const rect = interactable.getRect(element as HTMLElement | SVGElement)\n\n if (!rect) {\n break\n }\n\n const runningInteraction = arr.find(scope.interactions.list, (interaction: Interaction) => {\n return (\n interaction.interacting() &&\n interaction.interactable === interactable &&\n interaction.element === element &&\n interaction.prepared.name === action.name\n )\n })\n let reflowPromise: Promise\n\n if (runningInteraction) {\n runningInteraction.move()\n\n if (promises) {\n reflowPromise =\n runningInteraction._reflowPromise ||\n new Promise((resolve: any) => {\n runningInteraction._reflowResolve = resolve\n })\n }\n } else {\n const xywh = tlbrToXywh(rect)\n const coords = {\n page: { x: xywh.x, y: xywh.y },\n client: { x: xywh.x, y: xywh.y },\n timeStamp: scope.now(),\n }\n\n const event = pointerUtils.coordsToEvent(coords)\n reflowPromise = startReflow(scope, interactable, element, action, event)\n }\n\n if (promises) {\n promises.push(reflowPromise)\n }\n }\n\n return promises && Promise.all(promises).then(() => interactable)\n}\n\nfunction startReflow(\n scope: Scope,\n interactable: Interactable,\n element: Element,\n action: ActionProps,\n event: any,\n) {\n const interaction = scope.interactions.new({ pointerType: 'reflow' })\n const signalArg = {\n interaction,\n event,\n pointer: event,\n eventTarget: element,\n phase: 'reflow',\n } as const\n\n interaction.interactable = interactable\n interaction.element = element\n interaction.prevEvent = event\n interaction.updatePointer(event, event, element, true)\n pointerUtils.setZeroCoords(interaction.coords.delta)\n\n copyAction(interaction.prepared, action)\n interaction._doPhase(signalArg)\n\n const { Promise } = scope.window as unknown as { Promise: PromiseConstructor }\n const reflowPromise = Promise\n ? new Promise((resolve) => {\n interaction._reflowResolve = resolve\n })\n : undefined\n\n interaction._reflowPromise = reflowPromise\n interaction.start(action, interactable, element)\n\n if (interaction._interacting) {\n interaction.move(signalArg)\n interaction.end(event)\n } else {\n interaction.stop()\n interaction._reflowResolve()\n }\n\n interaction.removePointer(event, event)\n\n return reflowPromise\n}\n\nconst reflow: Plugin = {\n id: 'reflow',\n install,\n listeners: {\n // remove completed reflow interactions\n 'interactions:stop': ({ interaction }, scope) => {\n if (interaction.pointerType === 'reflow') {\n if (interaction._reflowResolve) {\n interaction._reflowResolve()\n }\n\n arr.remove(scope.interactions.list, interaction)\n }\n },\n },\n}\n\nexport default reflow\n","// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n","/* eslint-disable import/no-duplicates -- for typescript module augmentations */\nimport '@interactjs/actions/plugin'\nimport '@interactjs/auto-scroll/plugin'\nimport '@interactjs/auto-start/plugin'\nimport '@interactjs/core/interactablePreventDefault'\nimport '@interactjs/dev-tools/plugin'\nimport '@interactjs/inertia/plugin'\nimport '@interactjs/interact'\nimport '@interactjs/modifiers/plugin'\nimport '@interactjs/offset/plugin'\nimport '@interactjs/pointer-events/plugin'\nimport '@interactjs/reflow/plugin'\n\nimport actions from '@interactjs/actions/plugin'\nimport autoScroll from '@interactjs/auto-scroll/plugin'\nimport autoStart from '@interactjs/auto-start/plugin'\nimport interactablePreventDefault from '@interactjs/core/interactablePreventDefault'\nimport devTools from '@interactjs/dev-tools/plugin'\nimport inertia from '@interactjs/inertia/plugin'\nimport interact from '@interactjs/interact'\nimport modifiers from '@interactjs/modifiers/plugin'\nimport offset from '@interactjs/offset/plugin'\nimport pointerEvents from '@interactjs/pointer-events/plugin'\nimport reflow from '@interactjs/reflow/plugin'\n/* eslint-enable import/no-duplicates */\n\ninteract.use(interactablePreventDefault)\n\ninteract.use(offset)\n\n// pointerEvents\ninteract.use(pointerEvents)\n\n// inertia\ninteract.use(inertia)\n\n// snap, resize, etc.\ninteract.use(modifiers)\n\n// autoStart, hold\ninteract.use(autoStart)\n\n// drag and drop, resize, gesture\ninteract.use(actions)\n\n// autoScroll\ninteract.use(autoScroll)\n\n// reflow\ninteract.use(reflow)\n\n// eslint-disable-next-line no-undef\nif (process.env.NODE_ENV !== 'production') {\n interact.use(devTools)\n}\n\nexport default interact\n;(interact as any).default = interact\n"],"names":["isWindow","thing","Window","realWindow","undefined","win","init","window","el","document","createTextNode","ownerDocument","wrap","getWindow","node","defaultView","object","_typeof","func","is","docFrag","nodeType","number","bool","string","element","_window","test","Element","nodeName","plainObject","constructor","toString","array","length","splice","beforeMove","_ref","interaction","prepared","name","axis","coords","cur","page","y","start","client","velocity","x","move","_ref2","iEvent","opposite","delta","drag","id","install","scope","actions","Interactable","defaults","prototype","draggable","map","methodDict","listeners","arg","interactable","buttons","dragOptions","options","enabled","pointerIsDown","pointerType","mouseButtons","action","lockAxis","startAxis","this","setPerAction","setOnEvents","getCursor","filterEventType","type","search","drag$1","domObjects","DocumentFragment","blank","SVGElement","SVGSVGElement","SVGElementInstance","HTMLElement","Event","Touch","PointerEvent","MSPointerEvent","domObjects$1","browser","navigator","supportsTouch","DocumentTouch","supportsPointerEvent","pointerEnabled","isIOS","platform","isIOS7","appVersion","isIe9","userAgent","isOperaMobile","appName","prefixedMatchesSelector","pEventTypes","up","down","over","out","cancel","wheelEvent","browser$1","nodeContains","parent","child","contains","parentNode","closest","selector","matchesSelector","host","replace","getParent","getNodeParents","limit","parentParent","parents","unshift","matchesUpTo","getActualElement","correspondingUseElement","getElementClientRect","clientRect","getBoundingClientRect","getClientRects","left","right","top","bottom","width","height","getElementRect","relevantWindow","scroll","scrollX","documentElement","scrollLeft","scrollY","scrollTop","getPath","path","push","trySelector","value","querySelector","extend","dest","source","prop","getStringOptionResult","target","getRect","resolveRectLike","functionArgs","returnValue","apply","rectToXY","rect","tlbrToXywh","addEdges","edges","getOriginXY","actionName","actionOptions","origin","normalize","filter","arguments","_typeOrPrefix","result","split","forEach","t","_i2","_listeners2","l","prefix","p","concat","trim","hypot","Math","sqrt","VENDOR_PREFIXES","pointerExtend","__set","_loop","some","indexOf","Object","defineProperty","get","set","configurable","copyCoords","src","timeStamp","setZeroCoords","targetObj","isNativePointer","pointer","dom","getXY","xy","getPageXY","getPointerId","pointerId","identifier","setCoords","pointers","pointerAverage","getClientXY","getTouchPair","event","touches","changedTouches","average","pageX","pageY","clientX","clientY","screenX","screenY","touchBBox","minX","min","minY","maxX","max","maxY","touchDistance","deltaSource","sourceX","sourceY","dx","dy","touchAngle","atan2","PI","getPointerType","getEventTargets","composedPath","domUtils","currentTarget","BaseEvent","_classCallCheck","_defineProperty","_interaction","_createClass","key","propagationStopped","immediatePropagationStopped","_proxy","merge","item","from","findIndex","i","find","DropEvent","_BaseEvent","_inherits","_super","_createSuper","dropState","dragEvent","_this","_assertThisInitialized","call","prev","dropzone","relatedTarget","_this2","rejected","events","enter","stopImmediatePropagation","activeDrops","index","arr","deactivateEvent","fire","fireActivationEvents","_i6","_activeDrops$slice2","slice","_activeDrops$slice2$_","getActiveDrops","dragElement","draggableElement","drops","_interactables$list2","interactables","list","drop","accept","_i4","_dropzone$getAllEleme2","getAllElements","dropzoneElement","collectDropzones","_i8","activeDrop","getDrop","pointerEvent","validDrops","_i10","_dropState$activeDrop2","_dropState$activeDrop3","isValid","dropCheck","dropIndex","elements","deepestNodeIndex","higherNode","lowerNode","deepestNodeParents","currentNode","deepestNode","currentNodeParent","deepestNodeParent","ancestryStart","ownerSVGElement","currentNodeParents","commonIndex","lastChild","previousSibling","higherIndex","lowerIndex","parseInt","getComputedStyle","zIndex","getDropEvents","_pointerEvent","dropEvents","leave","activate","deactivate","dragLeave","prevDropzone","dragEnter","fireDropEvents","onEventCreated","_ref3","dynamicDrop","dropResult","interact","interactStatic","usePlugin","normalized","normalizeListeners","corrected","keys","reduce","acc","prevListeners","off","on","ondrop","ondropactivate","ondropdeactivate","ondragenter","ondragleave","ondropmove","overlap","checker","dropzoneMethod","dropElement","dropped","dropOverlap","pointerUtils","horizontal","vertical","dragRect","cx","cy","dropCheckMethod","newValue","phaselessTypes","dragenter","dragleave","dropactivate","dropdeactivate","dropmove","_ref4","_ref5","_ref6","_ref7","drop$1","updateGestureProps","phase","starting","ending","distance","box","scale","ds","angle","da","gesture","startDistance","startAngle","prevEvent","Infinity","isNaN","before","gesturable","gestureOptions","gesture$1","checkResizeEdge","interactableElement","margin","abs","edge","updateEventAxes","resizeAxes","resizeEvent","resize","square","axes","request","cursors","topleft","bottomright","topright","bottomleft","initCursors","defaultMargin","resizable","preserveAspectRatio","_rects","previous","deltaRect","invert","invertible","current","_interaction$_rects","startRect","swap","resizeOptions","resizeEdges","_latestPointer","eventTarget","NaN","cursorKey","_ref8","resize$1","lastTime","raf","callback","token","global","requestAnimationFrame","cancelAnimationFrame","vendors","vendor","bind","currTime","Date","now","timeToCall","setTimeout","clearTimeout","autoScroll","container","speed","isScrolling","prevTime","stop","getContainer","dt","s","scrollBy","prevScroll","getScroll","curScroll","check","_options$actionName$a","onInteractionMove","interacting","simulation","innerWidth","innerHeight","body","autoScrollPlugin","autoscroll","perAction","autoScroll$1","warnOnce","method","message","warned","console","warn","copyAction","styleCursor","actionChecker","InteractableMethods","getAction","button","defaultActionChecker","ignoreFrom","_backCompatOption","allowFrom","validateAction","testIgnoreAllow","withinInteractionLimit","validateMatches","matches","matchElements","len","match","matchElement","matchAction","getActionInfo","pushMatches","forEachMatch","actionInfo","manualStart","prepare","setInteractionCursor","maxActions","maxPerElement","autoStartMax","autoStart","maxInteractions","activeInteractions","interactableCount","elementCount","_scope$interactions$l2","interactions","otherAction","setCursor","cursor","prevCursorElement","cursorElement","style","cursorChecker","_interacting","base","prepareOnMove","pointerWasMoved","startOnMove","autoStart$2","dragAxis","absX","absY","targetOptions","currentAxis","getDraggable","downPointer","downEvent","thisAxis","checkStartAxis","getHoldDuration","hold","delay","basePlugin","autoStartHoldTimer","duplicate","hold$1","preventDefault","onInteractionEvent","checkAndPreventDefault","interactablePreventDefault","setting","supportsPassive","doc","docOptions","getDocOptions","passive","docEvents","listener","eventType","isNonNativeEvent","substr","phases","clone","Modification","createResult","pageCoords","modifierList","actionModifiers","modifiers","methods","_methods","m","getModifierList","prepareStates","startEdges","startOffset","startDelta","fillArg","preEnd","startAll","setAll","_this$states2","states","state","skipModifiers","unmodifiedRect","unmodifiedEdges","newResult","_state$methods","lastModifierCoords","shouldDo","rectUtils","eventProps","rectDelta","prevCoords","prevRect","rectChanged","changed","curCoords","startCoords","curDelta","_ref3$_i","coordsSet","modifiedCoords","adjustment","applyToInteraction","doPreend","endPosition","beforeEnd","endResult","modifierArg","_this$states4","_modifierList$index","_ref4$interaction","modification","_modification$result","_i12","_ref6$_i","requireEndOnly","endOnly","setStart","other","makeModifier","module","modifier","_options","enable","disable","_defaults","addEventModifiers","modifiersBase","ret","setAndApply","restoreInteractionCoords","InteractEvent","ctrlKey","altKey","shiftKey","metaKey","t0","downTime","x0","y0","clientX0","clientY0","duration","swipe","getSwipe","velocityY","velocityX","defineProperties","PointerInfo","downTarget","_ProxyValues","_ProxyMethods","idCounter","Interaction","scopeFire","signalArg","_scopeFire","that","_loop2","_key","pointerIndex","updatePointer","pointerInfo","_stopped","_doPhase","duplicateMove","pointerMoveTolerance","getPointerIndex","curEventTarget","end","removePointer","endPhaseResult","_ending","curPointer","_now","_updateLatestPointer","_this$interactable","_createPreparedEvent","_fireEvent","beforeAction","applyPending","offset","pending","hasPending","addToCoords","offsetBy","total","addTotal","offset$1","InertiaState","getOptions","velocityClient","pointerSpeed","copyFrom","allowResume","v0","currentOffset","minSpeed","endSpeed","startInertia","startSmoothEnd","targetOffset","active","startVelocity","lambda","resistance","inertiaDur","log","te","lambda_v0","one_ve_v0","isModified","modifiedOffset","onNextFrame","inertiaTick","smoothEnd","smoothEndTick","tickFn","_this3","timeout","startX","startY","cpX","cpY","endX","endY","position","_this4","newOffset","progress","exp","_getQBezierValue","_this5","smoothEndDuration","easeOutQuad","modifierCount","inertia","inertiastart","resume","p1","p2","p3","iT","b","c","d","inertia$1","fireUntilImmediateStopped","Eventable","types","eventList","_listeners$type2","subListener","_element","FakeEvent","originalEvent","pExtend","stopPropagation","param","capture","optionsMatch","a","_scope$document","targets","delegatedEvents","documents","eventsMethods","add","remove","addDelegate","context","optionalArg","_i3","delegateListener","delegateUseCapture","delegates","delegate","removeDelegate","matchFound","entry","supportsOptions","addEventListener","removeEventListener","targetIndex","typeIsEmpty","typeListeners","hasOwnProperty","fakeEvent","_i5","createElement","finder","methodOrder","details","_finder$methodOrder2","simulationResume","mouseOrPen","firstNonActive","_scope$interactions$l4","hasPointerId","_scope$interactions$l6","hasPointer","_scope$interactions$l8","idle","_scope$interactions$l10","finder$1","methodNames","doOnInteractions","_pointerUtils$getEven","prevTouchTime","_event$changedTouches2","changedTouch","searchDetails","getInteraction","invalidPointer","_matches$_i","new","onDocSignal","eventMethodName","eventMethod","eventOptions","_i14","_docEvents$_i","releasePointersOnRemovedEls","_interaction$pointers2","pointerDown","pointerMove","pointerUp","documentBlur","_InteractionBase","_class","InteractionBase","destroy","interactions$1","OnOffMethod","defaultContext","scopeEvents","_actions","_context","_win","_doc","_scopeEvents","onstart","onmove","onend","oninertiastart","_this$_actions$map$ac","actionFilter","_onOff","Off","On","optionName_","optionName","optionValue","updatePerActionListeners","Array","querySelectorAll","targetNode","testIgnore","testAllow","typeArg","listenerArg","_listeners$_type2","actionName_","methodName","rectChecker","delegated","_delegated$i","InteractableSet","addListeners","interactablesOnTarget","selectorMap","addDocument","isSelector","inContext","_this$list2","Scope","floor","random","createInteractStatic","getExisting","globalEvents","getPointerAverage","getTouchBBox","getTouchDistance","getTouchAngle","version","process","use","plugin","isSet","_type2","debug","_this$scope$interacti2","removeDocument","_InteractableBase","_class2","_get","_getPrototypeOf","InteractableBase","listenerMaps","_this$listenerMaps2","isInitialized","initScope","_plugins","pluginIsInstalled","pluginIdRoot","otherId","getDocIndex","onWindowUnload","docIndex","interact$1","_global","globalThis","grid","coordFields","xField","yField","gridFunc","range","_grid$limits","limits","_grid$offset","_coordFields$_i","gridx","round","gridy","snappersPlugin","snappers","allSnappers","createSnapGrid","aspectRatio","_state$options","ratio","_state$options2","equalDelta","linkedEdges","xIsPrimaryAxis","sign","edgeSign","subModification","_objectSpread","initialCoords","aspectMethod","setEqualDelta","setRatio","correctedRect","newHeight","newWidth","aspectRatio$1","noop","rubberband","getRestrictionRect","restrict","elementRect","restriction","widthDiff","heightDiff","restrict$1","noInner","noOuter","fixRect","restrictEdges","inner","outer","restrictEdges$1","_","restrictRect$1","noMin","noMax","restrictSize$1","minSize","maxSize","snap","snapOffset","offsetWithOrigin","optionsOrigin","getOrigin","offsetRect","relativePoints","offsets","relativePoint","relativeX","relativeY","snapTarget","inRange","snap$1","snapSize","targetFields","relative","_state$targetFields2","_state$targetFields2$","snapSize$1","all","restrictRect","restrictSize","snapEdges","spring","avoid","transform","_all","modifiers$1","interval","tapTime","double","prevTap","originX","originY","pointerEvents","clearHold","timer","minDuration","_signalArg$targets2","holdDuration","eventable","downAndStartHold","tapAfterUp","collectEventTargets","tap","doubletap","_arg$targets","props","_subtractOrigin","_addOrigin","_interaction$pointers","endHoldRepeat","holdIntervalHandle","clearInterval","holdRepeat","holdRepeatInterval","holdrepeat","enderTypes","count","holdRepeat$1","__backCompatOption","interactableTargets","reflow","Promise","promises","reflowPromise","runningInteraction","_reflowPromise","resolve","_reflowResolve","xywh","startReflow","then","doReflow","reflow$1","default","exports","_unused"],"mappings":"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"} \ No newline at end of file diff --git a/packages/interactjs/index.js b/packages/interactjs/index.js new file mode 100644 index 000000000..c67c24233 --- /dev/null +++ b/packages/interactjs/index.js @@ -0,0 +1,18 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _index = _interopRequireDefault(require("../@interactjs/interactjs/index.js")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +// eslint-disable-next-line import/no-extraneous-dependencies +var _default = exports.default = _index.default; +if (typeof module === 'object' && !!module) { + try { + module.exports = _index.default; + } catch (_unused) {} +} +; +_index.default.default = _index.default; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/interactjs/index.js.map b/packages/interactjs/index.js.map new file mode 100644 index 000000000..03801f5f1 --- /dev/null +++ b/packages/interactjs/index.js.map @@ -0,0 +1,23 @@ +{ + "version": 3, + "names": [ + "_index", + "_interopRequireDefault", + "require", + "obj", + "__esModule", + "default", + "_default", + "exports", + "interact", + "module", + "_unused" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n" + ], + "mappings": ";;;;;;AACA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAD7C;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAGeG,cAAQ;AAEvB,IAAI,OAAOC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAACA,MAAM,EAAE;EAC1C,IAAI;IACFA,MAAM,CAACF,OAAO,GAAGC,cAAQ;EAC3B,CAAC,CAAC,OAAAE,OAAA,EAAM,CAAC;AACX;AAEA;AAAEF,cAAQ,CAASH,OAAO,GAAGG,cAAQ" +} \ No newline at end of file diff --git a/packages/interactjs/index.prod.js b/packages/interactjs/index.prod.js new file mode 100644 index 000000000..3ad864d04 --- /dev/null +++ b/packages/interactjs/index.prod.js @@ -0,0 +1,2 @@ +Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e,t=(e=require("../@interactjs/interactjs/index.prod.js"))&&e.__esModule?e:{default:e};if(exports.default=t.default,"object"==typeof module&&module)try{module.exports=t.default}catch(e){}t.default.default=t.default; +//# sourceMappingURL=index.prod.js.map \ No newline at end of file diff --git a/packages/interactjs/index.prod.js.map b/packages/interactjs/index.prod.js.map new file mode 100644 index 000000000..0603a47dc --- /dev/null +++ b/packages/interactjs/index.prod.js.map @@ -0,0 +1,21 @@ +{ + "version": 3, + "names": [ + "obj", + "_indexProd", + "require", + "__esModule", + "default", + "exports", + "interact", + "module", + "_unused" + ], + "sources": [ + "index.ts" + ], + "sourcesContent": [ + "// eslint-disable-next-line import/no-extraneous-dependencies\nimport interact from '@interactjs/interactjs'\n\nexport default interact\n\nif (typeof module === 'object' && !!module) {\n try {\n module.exports = interact\n } catch {}\n}\n\n;(interact as any).default = interact\n" + ], + "mappings": "8EACA,IAA6CA,EAA7CC,GAA6CD,EAA7CE,QAAA,6CAA6CF,EAAAG,WAAAH,EAAA,CAAAI,QAAAJ,GAI7C,GALAK,QAAAD,QAGeE,UAEO,iBAAXC,QAAyBA,OAClC,IACEA,OAAOF,QAAUC,SACnB,CAAE,MAAAE,GAAO,CAGTF,UAAiBF,QAAUE" +} \ No newline at end of file diff --git a/packages/interactjs/package.json b/packages/interactjs/package.json index 3b846be1b..9b52aba32 100644 --- a/packages/interactjs/package.json +++ b/packages/interactjs/package.json @@ -44,5 +44,8 @@ "**/index.js", "**/index.prod.js" ], - "license": "MIT" + "license": "MIT", + "publishConfig": { + "access": "public" + } }