{
const less = `
& {
height: 300px;
overflow: hidden;
}
.item {
background-color: #29e;
color: #fff;
font-size: 1.2em;
border-radius: 4px;
padding: 2%;
margin: 5%;
-webkit-user-select: none;
user-select: none;
-ms-touch-action: none;
touch-action: none;
}
`;
const div = scoped([], less, { wrapperIdPrefix: 'create-resize' });
const divId = div.getAttribute('id');
interact(`#${divId}`).draggable({
hold: 1000,
listeners: {
move(event) {
var interaction = event.interaction;
if (interaction.pointerIsDown && !interaction.interacting()) {
const container = event.currentTarget;
const newItem = container.appendChild(
html`<div class="item">new item</div>`
);
const x = container.offsetLeft + event.offsetX - newItem.offsetLeft;
const y = container.offsetTop + event.offsetY - newItem.offsetTop;
newItem.setAttribute('data-x', x);
newItem.setAttribute('data-y', y);
newItem.style.webkitTransform = newItem.style.transform =
'translate(' + x + 'px, ' + y + 'px)';
interact(newItem).draggable({
manualStart: false,
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
inertia: true,
listeners: {
move(event) {
var target = event.target;
var x =
(parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
var y =
(parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
target.style.webkitTransform = target.style.transform =
'translate(' + x + 'px, ' + y + 'px)';
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
}
}
});
interaction.start({ name: 'drag' }, event.interactable, newItem);
}
event.preventDefault();
}
}
});
invalidation.then(() => {
interact(`#${divId}`).unset();
interact(`#${divId} .item`).unset();
});
return div;
}