{"version":3,"file":"util.mjs","sources":["../../../../src/canvas/DOMManagers/util.ts"],"sourcesContent":["import { LEFT, NONE, TOP } from '../../constants';\nimport type { TSize } from '../../typedefs';\nimport {\n  getDocumentFromElement,\n  getWindowFromElement,\n  getScrollLeftTop,\n} from '../../util/dom_misc';\nimport { setStyle } from '../../util/dom_style';\n\nexport const setCanvasDimensions = (\n  el: HTMLCanvasElement,\n  ctx: CanvasRenderingContext2D,\n  { width, height }: TSize,\n  retinaScaling = 1\n) => {\n  el.width = width;\n  el.height = height;\n  if (retinaScaling > 1) {\n    el.setAttribute('width', (width * retinaScaling).toString());\n    el.setAttribute('height', (height * retinaScaling).toString());\n    ctx.scale(retinaScaling, retinaScaling);\n  }\n};\n\nexport function allowTouchScrolling(element: HTMLElement, allow: boolean) {\n  const touchAction = allow ? 'manipulation' : NONE;\n  setStyle(element, {\n    'touch-action': touchAction,\n    '-ms-touch-action': touchAction,\n  });\n}\n\nexport type CSSDimensions = {\n  width: number | string;\n  height: number | string;\n};\n\nexport const setCSSDimensions = (\n  el: HTMLElement,\n  { width, height }: Partial<CSSDimensions>\n) => {\n  width && (el.style.width = typeof width === 'number' ? `${width}px` : width);\n  height &&\n    (el.style.height = typeof height === 'number' ? `${height}px` : height);\n};\n\n/**\n * Returns offset for a given element\n * @param {HTMLElement} element Element to get offset for\n * @return {Object} Object with \"left\" and \"top\" properties\n */\nexport function getElementOffset(element: HTMLElement) {\n  let box = { left: 0, top: 0 };\n  const doc = element && getDocumentFromElement(element),\n    offset = { left: 0, top: 0 },\n    offsetAttributes = {\n      borderLeftWidth: LEFT,\n      borderTopWidth: TOP,\n      paddingLeft: LEFT,\n      paddingTop: TOP,\n    } as const;\n\n  if (!doc) {\n    return offset;\n  }\n  const elemStyle =\n    getWindowFromElement(element)?.getComputedStyle(element, null) || {};\n  for (const attr in offsetAttributes) {\n    // @ts-expect-error TS learn to iterate!\n    offset[offsetAttributes[attr]] += parseInt(elemStyle[attr], 10) || 0;\n  }\n\n  const docElem = doc.documentElement;\n  if (typeof element.getBoundingClientRect !== 'undefined') {\n    box = element.getBoundingClientRect();\n  }\n\n  const scrollLeftTop = getScrollLeftTop(element);\n\n  return {\n    left:\n      box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n    top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,\n  };\n}\n\n/**\n * Makes element unselectable\n * @param {HTMLElement} element Element to make unselectable\n * @return {HTMLElement} Element that was passed in\n */\nexport function makeElementUnselectable(element: HTMLElement) {\n  if (typeof element.onselectstart !== 'undefined') {\n    element.onselectstart = () => false;\n  }\n  element.style.userSelect = NONE;\n  return element;\n}\n"],"names":["setCanvasDimensions","el","ctx","_ref","width","height","retinaScaling","arguments","length","undefined","setAttribute","toString","scale","allowTouchScrolling","element","allow","touchAction","NONE","setStyle","setCSSDimensions","_ref2","style","concat","getElementOffset","_getWindowFromElement","box","left","top","doc","getDocumentFromElement","offset","offsetAttributes","borderLeftWidth","LEFT","borderTopWidth","TOP","paddingLeft","paddingTop","elemStyle","getWindowFromElement","getComputedStyle","attr","parseInt","docElem","documentElement","getBoundingClientRect","scrollLeftTop","getScrollLeftTop","clientLeft","clientTop","makeElementUnselectable","onselectstart","userSelect"],"mappings":"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"}