{"version":3,"file":"util.min.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":"+OASO,MAAMA,EAAsB,SACjCC,EACAC,EAA6BC,GAG1B,IAFHC,MAAEA,EAAKC,OAAEA,GAAeF,EACxBG,EAAaC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,EAEhBN,EAAGG,MAAQA,EACXH,EAAGI,OAASA,EACRC,EAAgB,IAClBL,EAAGS,aAAa,SAAUN,EAAQE,GAAeK,YACjDV,EAAGS,aAAa,UAAWL,EAASC,GAAeK,YACnDT,EAAIU,MAAMN,EAAeA,GAE7B,EAEO,SAASO,EAAoBC,EAAsBC,GACxD,MAAMC,EAAcD,EAAQ,eAAiBE,EAC7CC,EAASJ,EAAS,CAChB,eAAgBE,EAChB,mBAAoBA,GAExB,OAOaG,EAAmBA,CAC9BlB,EAAemB,KAEZ,IADHhB,MAAEA,EAAKC,OAAEA,GAAgCe,EAEzChB,IAAUH,EAAGoB,MAAMjB,MAAyB,iBAAVA,EAAkBkB,GAAAA,OAAMlB,EAAK,MAAOA,GACtEC,IACGJ,EAAGoB,MAAMhB,OAA2B,iBAAXA,EAAmBiB,GAAAA,OAAMjB,EAAM,MAAOA,EAAO,EAQpE,SAASkB,EAAiBT,GAAsB,IAAAU,EACrD,IAAIC,EAAM,CAAEC,KAAM,EAAGC,IAAK,GAC1B,MAAMC,EAAMd,GAAWe,EAAuBf,GAC5CgB,EAAS,CAAEJ,KAAM,EAAGC,IAAK,GACzBI,EAAmB,CACjBC,gBAAiBC,EACjBC,eAAgBC,EAChBC,YAAaH,EACbI,WAAYF,GAGhB,IAAKP,EACH,OAAOE,EAET,MAAMQ,GACyBd,QAA7BA,EAAAe,EAAqBzB,cAAQU,SAA7BA,EAA+BgB,iBAAiB1B,EAAS,QAAS,GACpE,IAAK,MAAM2B,KAAQV,EAEjBD,EAAOC,EAAiBU,KAAUC,SAASJ,EAAUG,GAAO,KAAO,EAGrE,MAAME,EAAUf,EAAIgB,qBACyB,IAAlC9B,EAAQ+B,wBACjBpB,EAAMX,EAAQ+B,yBAGhB,MAAMC,EAAgBC,EAAiBjC,GAEvC,MAAO,CACLY,KACED,EAAIC,KAAOoB,EAAcpB,MAAQiB,EAAQK,YAAc,GAAKlB,EAAOJ,KACrEC,IAAKF,EAAIE,IAAMmB,EAAcnB,KAAOgB,EAAQM,WAAa,GAAKnB,EAAOH,IAEzE,CAOO,SAASuB,EAAwBpC,GAKtC,YAJqC,IAA1BA,EAAQqC,gBACjBrC,EAAQqC,cAAgB,KAAM,GAEhCrC,EAAQO,MAAM+B,WAAanC,EACpBH,CACT"}