# @dragndrop/draggable

> Draggable component

Latest version **0.1.6** (published 2019-12-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install @dragndrop/draggable
pnpm add @dragndrop/draggable
yarn add @dragndrop/draggable
bun add @dragndrop/draggable
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.6 |
| Published | 2019-12-16 |
| First published | 2019-09-20 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 5 |
| Unpacked size | 438 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Maintainers | lrembacz |
| Keywords | dragndrop, drag and drop, draggable |

## Links

- npm: https://www.npmjs.com/package/@dragndrop/draggable
- Repository: https://github.com/lrembacz/dragndrop
- Homepage: https://github.com/lrembacz/dragndrop#readme
- Issues: https://github.com/lrembacz/dragndrop/issues
- npm.io page: https://npm.io/package/@dragndrop/draggable

## Dependencies (5)

- [tslib](https://npm.io/package/tslib.md) ^1.9.3
- [@material/dom](https://npm.io/package/@material/dom.md) ^3.1.0
- [@material/base](https://npm.io/package/@material/base.md) ^3.1.0
- [smoothscroll-polyfill](https://npm.io/package/smoothscroll-polyfill.md) ^0.4.4
- [@types/smoothscroll-polyfill](https://npm.io/package/@types/smoothscroll-polyfill.md) ^0.3.1

## Recent versions

- 0.1.6 (latest) — 2019-12-16
- 0.1.5 — 2019-12-10
- 0.1.4 — 2019-11-27
- 0.1.2 — 2019-11-07
- 0.1.0 — 2019-10-04
- 0.0.2 — 2019-09-20
- 0.0.1 — 2019-09-20

## README

# Draggable

Draggable uses the JavaScript to provide draggable functionality to HTML elements.

## Design & API Documentation

- [Demos](https://dragndrop.lukaszrembacz.pl/examples/)

## Installation

```
npm install @dragndrop/draggable
```

## Usage

Draggable element can be used for different functionalities - from moving elements around to make sortable list or draggable grid elements.

### CSS Classes (they can be changed)

CSS Class | Description
--- | ---
`draggable--dragging` | Sets this class to element when dragging
`draggable--occurring` | Sets this class to body element when dragging

## Shadow DOM

If you want to use dragndrop in Shadow DOM you need to add `draggable--retarget` attribute to your host element so events will be bubble through Shoadow DOM and recursive `elementFromPoint()` calls will work correctly. 

### `Draggable`

The `Draggable` JavaScript component allows for programmatic turn on / off the draggabillity to element.

```javascript
const draggableElement = document.querySelector('.draggable');
const draggable = new Draggable(draggableElement);
```

You can also use `attachTo()` as an alias;

```javascript
Draggable.attachTo(document.querySelector('.draggable'));
```

Events | Type | Data | Description
--- | --- | --- | ---
`onDragStart` | CustomEvent | {originalEvent, dragInfo, dropzoneElement} | Event dispatched when dragging starts
`onDrag` | CustomEvent | {originalEvent, dragInfo, dropzoneElement} | Event dispatched when dragging
`onDragEnd` | CustomEvent | {originalEvent, dragInfo, dropzoneElement} | Event dispatched when dragging ends
            
DragInfo | Type | Description
--- | --- | ---
`draggableId` | Number | Id of draggable element
`element` | Element | Draggable element 
`data` | Type Generic | Data attached to draggable with data property
`startPosition` | Point | Start position
`avatar` | Avatar | Avatar attached to draggable with avatar property
`axis` | Axis | Axis which dragging is handled 'horizontal', 'vertical' and 'both'
`position` | Point | Current position of cursor
`shift` | Point | Distance from start position to elements top-left corner

Property | Value Type | Description
--- | --- | ---
`data` | Generic Type | Data which is attached to draggable
`draggable` | Boolean | Turn on / off draggable functionality
`avatar` | Avatar | Element which is rendered when element is dragging
`axis` | Axis ('both', 'horizontal', 'vertical') | Axis the dragging is available for
`handle` | String | Selector on which dragging is available (children of element are included)
`cancel` | String | Selectors on which draggins is not available (children of element are included)
`draggingClass` | String | Class which is set on element when dragging (`draggable--dragging` default)
`draggingClassBody` | String | Class which is set on body element when dragging (`draggable--occurring` default)
`minDragStartDistance` | number | Min distance to start dragStart state (`4` default)
`touchAction` | String or null | Makes `touch-action` property set on element when drag is started (`undefined` default)
`customScroll` | ((startPosition: Point, currentPosition: Point) => void) or boolean | Allows to specify customScroll behavior with function or when set with `false` prevents from custom scroll which is set by default 

Method Signature | Description
--- | ---
`abort() => void` | Proxies to the foundation's `abort` method
`destroy() => void` | Proxies to the foundation's `destroy` method

### `DraggableFoundation`

Method Signature | Description
--- | ---
| `abort() => void` | Abort current draggable. 
| `destroy() => void` | Destroy all event listeners and clean up component.

---
_Source: https://npm.io/package/@dragndrop/draggable · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
