{"version":3,"sources":["jsdelivr-header.js","/npm/slickgrid@5.18.4/src/slick.interactions.ts"],"names":[],"mappings":"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","file":"/npm/slickgrid@5.18.4/dist/browser/slick.interactions.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/slickgrid@5.18.4/dist/browser/slick.interactions.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import type { DragItem, DragPosition, ClassDetectElement, DraggableOption, MouseWheelOption, ResizableOption } from './models/index.js';\nimport { Utils as Utils_ } from './slick.core.js';\n\n// for (iife) load Slick methods from global Slick object, or use imports for (esm)\nconst Utils = IIFE_ONLY ? Slick.Utils : Utils_;\n\n/***\n * Interactions, add basic behaviors to any element.\n * All the packages are written in pure vanilla JS and supports both mouse & touch events.\n * @module Interactions\n * @namespace Slick\n */\n\n/**\n * Draggable Class, enables dragging functionality for any element for example cell & row selections.\n * Note that mouse/touch start is on the specified container element but all other events are on the document body.\n * code refs:\n *   https://betterprogramming.pub/perfecting-drag-and-drop-in-pure-vanilla-javascript-a761184b797a\n * available optional options:\n *   - containerElement: container DOM element, defaults to \"document\"\n *   - dragFromClassDetectArr: array of tags and query selectors/ids to match on dragstart, used to determine\n *     drag source element. eg:  [ { tag: 'B', id: 'myElement' }, { tag: 'A', cssSelector: 'div.myClass' } ]\n *   - allowDragFrom: when defined, only allow dragging from an element that matches a specific query selector\n *   - allowDragFromClosest: when defined, only allow dragging from an element or its parent matching a specific .closest() query selector\n *   - onDragInit: drag initialized callback\n *   - onDragStart: drag started callback\n *   - onDrag: drag callback\n *   - onDragEnd: drag ended callback\n * @param {Object} options\n * @returns - Draggable instance which includes destroy method\n * @class Draggable\n */\nexport function Draggable(options: DraggableOption) {\n  let { containerElement } = options;\n  const { onDragInit, onDragStart, onDrag, onDragEnd, preventDragFromKeys } = options;\n  let element: HTMLElement | null;\n  let startX: number;\n  let startY: number;\n  let deltaX: number;\n  let deltaY: number;\n  let dragStarted: boolean;\n  let matchClassTag: string;\n\n  if (!containerElement) {\n    containerElement = document.body;\n  }\n\n  let originaldd: Partial<DragItem> = {\n    dragSource: containerElement,\n    dragHandle: null,\n  };\n\n  function init() {\n    if (containerElement) {\n      containerElement.addEventListener('mousedown', userPressed as EventListener);\n      containerElement.addEventListener('touchstart', userPressed as EventListener);\n    }\n  }\n\n  function executeDragCallbackWhenDefined(callback?: (e: DragEvent, dd: DragItem) => boolean | void, evt?: MouseEvent | Touch | TouchEvent | KeyboardEvent, dd?: DragItem) {\n    if (typeof callback === 'function') {\n      return callback(evt as DragEvent, dd as DragItem);\n    }\n  }\n\n  function destroy() {\n    if (containerElement) {\n      containerElement.removeEventListener('mousedown', userPressed as EventListener);\n      containerElement.removeEventListener('touchstart', userPressed as EventListener);\n    }\n  }\n\n  /** Do we want to prevent Drag events from happening (for example prevent onDrag when Ctrl key is pressed while dragging) */\n  function preventDrag(event: MouseEvent | TouchEvent | KeyboardEvent) {\n    let eventPrevented = false;\n    if (preventDragFromKeys) {\n      preventDragFromKeys.forEach(key => {\n        if ((event as KeyboardEvent)[key]) {\n          eventPrevented = true;\n        }\n      });\n    }\n    return eventPrevented;\n  }\n\n  function userPressed(event: MouseEvent | TouchEvent | KeyboardEvent) {\n    if (!preventDrag(event)) {\n      element = event.target as HTMLElement;\n      const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\n      const { target } = targetEvent;\n\n      if (!options.allowDragFrom || (options.allowDragFrom && (element.matches(options.allowDragFrom)) || (options.allowDragFromClosest && element.closest(options.allowDragFromClosest)))) {\n        originaldd.dragHandle = element as HTMLElement;\n\n        matchClassTag = '';\n        if (options.dragFromClassDetectArr) {\n          for (let o: ClassDetectElement, i = 0; i < options.dragFromClassDetectArr.length; i++) {\n            o = options.dragFromClassDetectArr[i];\n\n            if ((o.id && element.id === o.id) || (o.cssSelector && element.matches(o.cssSelector))) {\n              matchClassTag = o.tag;\n              break;\n            }\n          }\n        }\n\n        const winScrollPos = Utils.windowScrollPosition();\n        startX = winScrollPos.left + targetEvent.clientX;\n        startY = winScrollPos.top + targetEvent.clientY;\n        deltaX = targetEvent.clientX - targetEvent.clientX;\n        deltaY = targetEvent.clientY - targetEvent.clientY;\n        originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target, matchClassTag });\n        const result = executeDragCallbackWhenDefined(onDragInit as (e: DragEvent, dd: DragPosition) => boolean | void, event, originaldd as DragItem);\n\n        if (result !== false) {\n          document.body.addEventListener('mousemove', userMoved);\n          document.body.addEventListener('touchmove', userMoved);\n          // register mouseup/... events on the window object so that we can catch them even if the user moves the mouse outside the container element\n          window.addEventListener('mouseup', userReleased);\n          window.addEventListener('touchend', userReleased);\n          window.addEventListener('touchcancel', userReleased);\n        }\n      }\n    }\n  }\n\n  function userMoved(event: MouseEvent | TouchEvent | KeyboardEvent) {\n    if (!preventDrag(event)) {\n      const targetEvent: MouseEvent | Touch = (event as TouchEvent)?.touches?.[0] ?? event;\n      deltaX = targetEvent.clientX - startX;\n      deltaY = targetEvent.clientY - startY;\n      const { target } = targetEvent;\n\n      if (!dragStarted) {\n        originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target, matchClassTag });\n        executeDragCallbackWhenDefined(onDragStart, event, originaldd as DragItem);\n        dragStarted = true;\n      }\n\n      originaldd = Object.assign(originaldd, { deltaX, deltaY, startX, startY, target, matchClassTag });\n      executeDragCallbackWhenDefined(onDrag, event, originaldd as DragItem);\n    }\n  }\n\n  function userReleased(event: MouseEvent | TouchEvent) {\n    document.body.removeEventListener('mousemove', userMoved);\n    document.body.removeEventListener('touchmove', userMoved);\n    window.removeEventListener('mouseup', userReleased);\n    window.removeEventListener('touchend', userReleased);\n    window.removeEventListener('touchcancel', userReleased);\n\n    // trigger a dragEnd event only after dragging started and stopped\n    if (dragStarted) {\n      const { target } = event;\n      originaldd = Object.assign(originaldd, { target });\n      executeDragCallbackWhenDefined(onDragEnd, event, originaldd as DragItem);\n      dragStarted = false;\n    }\n  }\n\n  // initialize Draggable service by attaching mouse/touch events\n  init();\n\n  // public API\n  return { destroy };\n}\n\n/**\n * MouseWheel Class, add mousewheel listeners and calculate delta values and return them in the callback function.\n * available optional options:\n *   - element: optional DOM element to attach mousewheel values, if undefined we'll attach it to the \"window\" object\n *   - onMouseWheel: mousewheel callback\n * @param {Object} options\n * @returns - MouseWheel instance which includes destroy method\n * @class MouseWheel\n */\nexport function MouseWheel(options: MouseWheelOption) {\n  const { element, onMouseWheel } = options;\n\n  function destroy() {\n    element.removeEventListener('wheel', wheelHandler as EventListener);\n    element.removeEventListener('mousewheel', wheelHandler as EventListener);\n  }\n\n  function init() {\n    element.addEventListener('wheel', wheelHandler as EventListener);\n    element.addEventListener('mousewheel', wheelHandler as EventListener);\n  }\n\n  // copy over the same event handler code used in jquery.mousewheel\n  function wheelHandler(event: WheelEvent & { axis: number; wheelDelta: number; wheelDeltaX: number; wheelDeltaY: number; HORIZONTAL_AXIS: number; }) {\n    const orgEvent = event || window.event;\n    let delta = 0;\n    let deltaX = 0;\n    let deltaY = 0;\n\n    // Old school scrollwheel delta\n    if (orgEvent.wheelDelta) {\n      delta = orgEvent.wheelDelta / 120;\n    }\n    if (orgEvent.detail) {\n      delta = -orgEvent.detail / 3;\n    }\n\n    // New school multidimensional scroll (touchpads) deltas\n    deltaY = delta;\n\n    // Gecko\n    if (orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\n      deltaY = 0;\n      deltaX = -1 * delta;\n    }\n\n    // WebKit\n    if (orgEvent.wheelDeltaY !== undefined) {\n      deltaY = orgEvent.wheelDeltaY / 120;\n    }\n    if (orgEvent.wheelDeltaX !== undefined) {\n      deltaX = -1 * orgEvent.wheelDeltaX / 120;\n    }\n\n    if (typeof onMouseWheel === 'function') {\n      onMouseWheel(event, delta, deltaX, deltaY);\n    }\n  }\n\n  // initialize MouseWheel service by attaching mousewheel events\n  init();\n\n  // public API\n  return { destroy };\n}\n\n/**\n * Resizable Class, enables resize functionality for any element\n * Code mostly comes from these 2 resources:\n *   https://spin.atomicobject.com/2019/11/21/creating-a-resizable-html-element/\n *   https://htmldom.dev/make-a-resizable-element/\n * available optional options:\n *   - resizeableElement: resizable DOM element\n *   - resizeableHandleElement: resizable DOM element\n *   - onResizeStart: resize start callback\n *   - onResize: resizing callback\n *   - onResizeEnd: resize ended callback\n * @param {Object} options\n * @returns - Resizable instance which includes destroy method\n * @class Resizable\n */\nexport function Resizable(options: ResizableOption) {\n  const { resizeableElement, resizeableHandleElement, onResizeStart, onResize, onResizeEnd } = options;\n  if (!resizeableHandleElement || typeof resizeableHandleElement.addEventListener !== 'function') {\n    throw new Error('[Slick.Resizable] You did not provide a valid html element that will be used for the handle to resize.');\n  }\n\n  function init() {\n    // add event listeners on the draggable element\n    resizeableHandleElement.addEventListener('mousedown', resizeStartHandler);\n    resizeableHandleElement.addEventListener('touchstart', resizeStartHandler);\n  }\n\n  function destroy() {\n    if (typeof resizeableHandleElement?.removeEventListener === 'function') {\n      resizeableHandleElement.removeEventListener('mousedown', resizeStartHandler);\n      resizeableHandleElement.removeEventListener('touchstart', resizeStartHandler);\n    }\n  }\n\n  function executeResizeCallbackWhenDefined(callback?: Function, e?: MouseEvent | TouchEvent | Touch) {\n    if (typeof callback === 'function') {\n      return callback(e, { resizeableElement, resizeableHandleElement });\n    }\n  }\n\n  function resizeStartHandler(e: MouseEvent | TouchEvent) {\n    e.preventDefault();\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\n    const result = executeResizeCallbackWhenDefined(onResizeStart, event);\n    if (result !== false) {\n      document.body.addEventListener('mousemove', resizingHandler);\n      document.body.addEventListener('mouseup', resizeEndHandler);\n      document.body.addEventListener('touchmove', resizingHandler);\n      document.body.addEventListener('touchend', resizeEndHandler);\n    }\n  }\n\n  function resizingHandler(e: MouseEvent | TouchEvent) {\n    if (e.preventDefault && e.type !== 'touchmove') {\n      e.preventDefault();\n    }\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\n    if (typeof onResize === 'function') {\n      onResize(event, { resizeableElement, resizeableHandleElement });\n    }\n  }\n\n  /** Remove all mouse/touch handlers */\n  function resizeEndHandler(e: MouseEvent | TouchEvent) {\n    const event = (e as TouchEvent).touches ? (e as TouchEvent).changedTouches[0] : e;\n    executeResizeCallbackWhenDefined(onResizeEnd, event);\n    document.body.removeEventListener('mousemove', resizingHandler);\n    document.body.removeEventListener('mouseup', resizeEndHandler);\n    document.body.removeEventListener('touchmove', resizingHandler);\n    document.body.removeEventListener('touchend', resizeEndHandler);\n  }\n\n  // initialize Resizable service by attaching mouse/touch events\n  init();\n\n  // public API\n  return { destroy };\n}\n\n// extend Slick namespace on window object when building as iife\nif (IIFE_ONLY && window.Slick) {\n  Utils.extend(Slick, {\n    Draggable,\n    MouseWheel,\n    Resizable,\n  });\n}\n"]}