"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Event = exports.dataOf = void 0; const event_1 = require("../utils/event"); function dataOf(element, view) { const { __data__: datum } = element; const { markKey, index, seriesIndex } = datum; const { markState } = view; const selectedMark = Array.from(markState.keys()).find((mark) => mark.key === markKey); if (!selectedMark) return; if (seriesIndex) { return seriesIndex.map((i) => selectedMark.data[i]); } return selectedMark.data[index]; } exports.dataOf = dataOf; function bubblesEvent(eventType, view, emitter, predicate = (event) => true) { return (e) => { if (!predicate(e)) return; // Emit plot events. emitter.emit(`plot:${eventType}`, e); const { target } = e; // There is no target for pointerupoutside event if out of canvas. if (!target) return; const { className: elementType, markType } = target; // If target area is plot area, do not emit extra events. if (elementType === 'plot') return; // Emit wrapped events. if (elementType === 'element') { const e1 = Object.assign(Object.assign({}, e), { nativeEvent: true, data: { data: dataOf(target, view) } }); emitter.emit(`element:${eventType}`, e1); emitter.emit(`${markType}:${eventType}`, e1); } else { // @todo Handle click axis and legend. emitter.emit(`${elementType}:${eventType}`, e); } }; } // @todo Provide more info for event.dataset. function Event() { return (context, _, emitter) => { const { container, view } = context; // Click events. const click = bubblesEvent(event_1.ChartEvent.CLICK, view, emitter, (e) => e.detail === 1); const dblclick = bubblesEvent(event_1.ChartEvent.DBLCLICK, view, emitter, (e) => e.detail === 2); // Pointer events. const pointertap = bubblesEvent(event_1.ChartEvent.POINTER_TAP, view, emitter); const pointerdown = bubblesEvent(event_1.ChartEvent.POINTER_DOWN, view, emitter); const pointerup = bubblesEvent(event_1.ChartEvent.POINTER_UP, view, emitter); const pointerover = bubblesEvent(event_1.ChartEvent.POINTER_OVER, view, emitter); const pointerout = bubblesEvent(event_1.ChartEvent.POINTER_OUT, view, emitter); const pointermove = bubblesEvent(event_1.ChartEvent.POINTER_MOVE, view, emitter); const pointerenter = bubblesEvent(event_1.ChartEvent.POINTER_ENTER, view, emitter); const pointerleave = bubblesEvent(event_1.ChartEvent.POINTER_LEAVE, view, emitter); const pointerupoutside = bubblesEvent(event_1.ChartEvent.POINTER_UPOUTSIDE, view, emitter); // Drag and drop events. const dragstart = bubblesEvent(event_1.ChartEvent.DRAG_START, view, emitter); const drag = bubblesEvent(event_1.ChartEvent.DRAG, view, emitter); const dragend = bubblesEvent(event_1.ChartEvent.DRAG_END, view, emitter); const dragenter = bubblesEvent(event_1.ChartEvent.DRAG_ENTER, view, emitter); const dragleave = bubblesEvent(event_1.ChartEvent.DRAG_LEAVE, view, emitter); const dragover = bubblesEvent(event_1.ChartEvent.DRAG_OVER, view, emitter); const drop = bubblesEvent(event_1.ChartEvent.DROP, view, emitter); // For legacy usage. container.addEventListener('click', click); container.addEventListener('click', dblclick); // Recommend events. container.addEventListener('pointertap', pointertap); container.addEventListener('pointerdown', pointerdown); container.addEventListener('pointerup', pointerup); container.addEventListener('pointerover', pointerover); container.addEventListener('pointerout', pointerout); container.addEventListener('pointermove', pointermove); container.addEventListener('pointerenter', pointerenter); container.addEventListener('pointerleave', pointerleave); container.addEventListener('pointerupoutside', pointerupoutside); // Plugin events. container.addEventListener('dragstart', dragstart); container.addEventListener('drag', drag); container.addEventListener('dragend', dragend); container.addEventListener('dragenter', dragenter); container.addEventListener('dragleave', dragleave); container.addEventListener('dragover', dragover); container.addEventListener('drop', drop); return () => { container.removeEventListener('click', click); container.removeEventListener('click', dblclick); container.removeEventListener('pointertap', pointertap); container.removeEventListener('pointerdown', pointerdown); container.removeEventListener('pointerup', pointerup); container.removeEventListener('pointerover', pointerover); container.removeEventListener('pointerout', pointerout); container.removeEventListener('pointermove', pointermove); container.removeEventListener('pointerenter', pointerenter); container.removeEventListener('pointerleave', pointerleave); container.removeEventListener('pointerupoutside', pointerupoutside); container.removeEventListener('dragstart', dragstart); container.removeEventListener('drag', drag); container.removeEventListener('dragend', dragend); container.removeEventListener('dragenter', dragenter); container.removeEventListener('dragleave', dragleave); container.removeEventListener('dragover', dragover); container.removeEventListener('drop', drop); }; }; } exports.Event = Event; //# sourceMappingURL=event.js.map