function dndzone(node, options) {
    if (shouldIgnoreZone(node)) {
        return {
            update: () => {},
            destroy: () => {}
        };
    }
    validateOptions(options);
    const pointerZone = pointerDndZone(node, options);
    const keyboardZone = keyboardDndZone(node, options);
    return {
        update: newOptions => {
            validateOptions(newOptions);
            pointerZone.update(newOptions);
            keyboardZone.update(newOptions);
        },
        destroy: () => {
            pointerZone.destroy();
            keyboardZone.destroy();
        }
    };
}
A custom action to turn any container to a dnd zone and all of its direct children to draggables
Supports mouse, touch and keyboard interactions.
Dispatches two events that the container is expected to react to by modifying its list of items,
which will then feed back in to this action via the update function

@typedef {object} Options
@property {array} items - the list of items that was used to generate the children of the given node (the list used in the #each block
@property {string} [type] - the type of the dnd zone. children dragged from here can only be dropped in other zones of the same type, default to a base type
@property {number} [flipDurationMs] - if the list animated using flip (recommended), specifies the flip duration such that everything syncs with it without conflict, defaults to zero
@property {boolean} [dragDisabled]
@property {boolean} [morphDisabled] - whether dragged element should morph to zone dimensions
@property {boolean} [dropFromOthersDisabled]
@property {number} [zoneTabIndex] - set the tabindex of the list container when not dragging
@property {number} [zoneItemTabIndex] - set the tabindex of the list container items when not dragging
@property {object} [dropTargetStyle]
@property {string[]} [dropTargetClasses]
@property {boolean} [dropAnimationDisabled] - cancels the drop animation to place
@property {function} [transformDraggedElement]
@param {HTMLElement} node - the element to enhance
@param {Options} options
@return {{update: function, destroy: function}}