{"version":3,"file":"blazor-component.js","sources":["../../../BlazorComponent.Web/node_modules/just-debounce-it/index.mjs","../../../BlazorComponent.Web/node_modules/just-throttle/index.mjs","../../../BlazorComponent.Web/src/directive/ripple.ts","../../../BlazorComponent.Web/src/events/EventType.ts","../../../BlazorComponent.Web/src/utils/helper.ts","../../../BlazorComponent.Web/src/events/extra.ts","../../../BlazorComponent.Web/src/events/index.ts","../../../BlazorComponent.Web/src/interop.ts","../../../BlazorComponent.Web/src/directive/index.ts","../../../BlazorComponent.Web/src/mixins/overlayable/index.ts","../../../BlazorComponent.Web/src/main.ts"],"sourcesContent":["var functionDebounce = debounce;\n\nfunction debounce(fn, wait, callFirst) {\n var timeout = null;\n var debouncedFn = null;\n\n var clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n\n debouncedFn = null;\n timeout = null;\n }\n };\n\n var flush = function() {\n var call = debouncedFn;\n clear();\n\n if (call) {\n call();\n }\n };\n\n var debounceWrapper = function() {\n if (!wait) {\n return fn.apply(this, arguments);\n }\n\n var context = this;\n var args = arguments;\n var callNow = callFirst && !timeout;\n clear();\n\n debouncedFn = function() {\n fn.apply(context, args);\n };\n\n timeout = setTimeout(function() {\n timeout = null;\n\n if (!callNow) {\n var call = debouncedFn;\n debouncedFn = null;\n\n return call();\n }\n }, wait);\n\n if (callNow) {\n return debouncedFn();\n }\n };\n\n debounceWrapper.cancel = clear;\n debounceWrapper.flush = flush;\n\n return debounceWrapper;\n}\n\nexport {functionDebounce as default};\n","var functionThrottle = throttle;\n\nfunction throttle(fn, interval, options) {\n var timeoutId = null;\n var throttledFn = null;\n var leading = (options && options.leading);\n var trailing = (options && options.trailing);\n\n if (leading == null) {\n leading = true; // default\n }\n\n if (trailing == null) {\n trailing = !leading; //default\n }\n\n if (leading == true) {\n trailing = false; // forced because there should be invocation per call\n }\n\n var cancel = function() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n\n var flush = function() {\n var call = throttledFn;\n cancel();\n\n if (call) {\n call();\n }\n };\n\n var throttleWrapper = function() {\n var callNow = leading && !timeoutId;\n var context = this;\n var args = arguments;\n\n throttledFn = function() {\n return fn.apply(context, args);\n };\n\n if (!timeoutId) {\n timeoutId = setTimeout(function() {\n timeoutId = null;\n\n if (trailing) {\n return throttledFn();\n }\n }, interval);\n }\n\n if (callNow) {\n callNow = false;\n return throttledFn();\n }\n };\n\n throttleWrapper.cancel = cancel;\n throttleWrapper.flush = flush;\n\n return throttleWrapper;\n}\n\nexport {functionThrottle as default};\n","const calculate = (e, el) => {\r\n let localX = 0;\r\n let localY = 0;\r\n\r\n const offset = el.getBoundingClientRect();\r\n const target = e;\r\n\r\n localX = target.clientX - offset.left;\r\n localY = target.clientY - offset.top;\r\n\r\n let radius = 0;\r\n let scale = 0.3;\r\n\r\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2;\r\n\r\n const centerX = `${(el.clientWidth - radius * 2) / 2}px`;\r\n const centerY = `${(el.clientHeight - radius * 2) / 2}px`;\r\n\r\n const x = `${localX - radius}px`;\r\n const y = `${localY - radius}px`;\r\n\r\n return { radius, scale, x, y, centerX, centerY };\r\n};\r\n\r\nfunction transform(el, value) {\r\n el.style.transform = value;\r\n el.style.webkitTransform = value;\r\n}\r\n\r\nfunction opacity(el, value) {\r\n el.style.opacity = value.toString();\r\n}\r\n\r\nconst ripples = {\r\n /* eslint-disable max-statements */\r\n show(e, el) {\r\n const container = document.createElement(\"span\");\r\n const animation = document.createElement(\"span\");\r\n\r\n container.appendChild(animation);\r\n container.className = \"m-ripple__container\";\r\n\r\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el);\r\n\r\n const size = `${radius * 2}px`;\r\n animation.className = \"m-ripple__animation\";\r\n animation.style.width = size;\r\n animation.style.height = size;\r\n\r\n el.appendChild(container);\r\n\r\n const computed = window.getComputedStyle(el);\r\n if (computed && computed.position === \"static\") {\r\n el.style.position = \"relative\";\r\n el.dataset.previousPosition = \"static\";\r\n }\r\n\r\n animation.classList.add(\"m-ripple__animation--enter\");\r\n animation.classList.add(\"m-ripple__animation--visible\");\r\n transform(\r\n animation,\r\n `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`\r\n );\r\n opacity(animation, 0);\r\n animation.dataset.activated = String(performance.now());\r\n\r\n setTimeout(() => {\r\n animation.classList.remove(\"m-ripple__animation--enter\");\r\n animation.classList.add(\"m-ripple__animation--in\");\r\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);\r\n opacity(animation, 0.25);\r\n }, 0);\r\n },\r\n\r\n hide(el) {\r\n const ripples = el.getElementsByClassName(\"m-ripple__animation\");\r\n\r\n if (ripples.length === 0) return;\r\n const animation = ripples[ripples.length - 1];\r\n\r\n if (animation.dataset.isHiding) return;\r\n else animation.dataset.isHiding = \"true\";\r\n\r\n const diff = performance.now() - Number(animation.dataset.activated);\r\n const delay = Math.max(250 - diff, 0);\r\n\r\n setTimeout(() => {\r\n animation.classList.remove(\"m-ripple__animation--in\");\r\n animation.classList.add(\"m-ripple__animation--out\");\r\n opacity(animation, 0);\r\n\r\n setTimeout(() => {\r\n const ripples = el.getElementsByClassName(\"m-ripple__animation\");\r\n if (ripples.length === 1 && el.dataset.previousPosition) {\r\n el.style.position = el.dataset.previousPosition;\r\n delete el.dataset.previousPosition;\r\n }\r\n\r\n animation.parentNode && el && el.removeChild(animation.parentNode);\r\n }, 300);\r\n }, delay);\r\n },\r\n};\r\n\r\nexport function rippleShow(e) {\r\n ripples.show(e, e.currentTarget);\r\n}\r\n\r\nexport function rippleHide(e) {\r\n ripples.hide(e.currentTarget);\r\n}\r\n","// see https://github.com/dotnet/aspnetcore/blob/main/src/Components/Web.JS/src/Rendering/Events/EventTypes.ts\r\n// updated at 2022/08/31\r\n\r\nexport const touchEvents = [\r\n \"touchcancel\",\r\n \"touchend\",\r\n \"touchmove\",\r\n \"touchenter\",\r\n \"touchleave\",\r\n \"touchstart\",\r\n];\r\n\r\nexport function parseMouseEvent(event: MouseEvent): Blazor.MouseEventArgs {\r\n return {\r\n detail: event.detail,\r\n screenX: event.screenX,\r\n screenY: event.screenY,\r\n clientX: event.clientX,\r\n clientY: event.clientY,\r\n offsetX: event.offsetX,\r\n offsetY: event.offsetY,\r\n pageX: event.pageX,\r\n pageY: event.pageY,\r\n button: event.button,\r\n buttons: event.buttons,\r\n ctrlKey: event.ctrlKey,\r\n shiftKey: event.shiftKey,\r\n altKey: event.altKey,\r\n metaKey: event.metaKey,\r\n type: event.type,\r\n } as Blazor.MouseEventArgs;\r\n}\r\n\r\nexport function parseTouchEvent(event: TouchEvent): Blazor.TouchEventArgs {\r\n return {\r\n detail: event.detail,\r\n touches: parseTouch(event.touches),\r\n targetTouches: parseTouch(event.targetTouches),\r\n changedTouches: parseTouch(event.changedTouches),\r\n ctrlKey: event.ctrlKey,\r\n shiftKey: event.shiftKey,\r\n altKey: event.altKey,\r\n metaKey: event.metaKey,\r\n type: event.type,\r\n };\r\n}\r\n\r\nfunction parseTouch(touchList: TouchList): Blazor.TouchPoint[] {\r\n const touches: Blazor.TouchPoint[] = [];\r\n\r\n for (let i = 0; i < touchList.length; i++) {\r\n const touch = touchList[i];\r\n touches.push({\r\n identifier: touch.identifier,\r\n clientX: touch.clientX,\r\n clientY: touch.clientY,\r\n screenX: touch.screenX,\r\n screenY: touch.screenY,\r\n pageX: touch.pageX,\r\n pageY: touch.pageY,\r\n });\r\n }\r\n return touches;\r\n}\r\n\r\nexport function parseChangeEvent(event: Event): Blazor.ChangeEventArgs {\r\n const element = event.target as Element;\r\n if (isTimeBasedInput(element)) {\r\n const normalizedValue = normalizeTimeBasedValue(element);\r\n return { value: normalizedValue };\r\n } else if (isMultipleSelectInput(element)) {\r\n const selectElement = element as HTMLSelectElement;\r\n const selectedValues = Array.from(selectElement.options)\r\n .filter((option) => option.selected)\r\n .map((option) => option.value);\r\n return { value: selectedValues };\r\n } else {\r\n const targetIsCheckbox = isCheckbox(element);\r\n const newValue = targetIsCheckbox ? !!element[\"checked\"] : element[\"value\"];\r\n return { value: newValue };\r\n }\r\n}\r\n\r\nexport function parseDragEvent(event: DragEvent): Blazor.DragEventArgs {\r\n return {\r\n ...parseMouseEvent(event),\r\n dataTransfer: event.dataTransfer ? {\r\n dropEffect: event.dataTransfer.dropEffect,\r\n effectAllowed: event.dataTransfer.effectAllowed,\r\n files: Array.from(event.dataTransfer.files).map(f => f.name),\r\n items: Array.from(event.dataTransfer.items).map(i => ({ kind: i.kind, type: i.type })),\r\n types: event.dataTransfer.types\r\n } : null,\r\n };\r\n}\r\n\r\nfunction isTimeBasedInput(element: Element): element is HTMLInputElement {\r\n return timeBasedInputs.indexOf(element.getAttribute(\"type\")!) !== -1;\r\n}\r\n\r\nconst timeBasedInputs = [\"date\", \"datetime-local\", \"month\", \"time\", \"week\"];\r\n\r\nfunction normalizeTimeBasedValue(element: HTMLInputElement): string {\r\n const value = element.value;\r\n const type = element.type;\r\n switch (type) {\r\n case \"date\":\r\n case \"month\":\r\n return value;\r\n case \"datetime-local\":\r\n return value.length === 16 ? value + \":00\" : value; // Convert yyyy-MM-ddTHH:mm to yyyy-MM-ddTHH:mm:00\r\n case \"time\":\r\n return value.length === 5 ? value + \":00\" : value; // Convert hh:mm to hh:mm:00\r\n case \"week\":\r\n // For now we are not going to normalize input type week as it is not trivial\r\n return value;\r\n }\r\n\r\n throw new Error(`Invalid element type '${type}'.`);\r\n}\r\n\r\nfunction isMultipleSelectInput(element: Element): element is HTMLSelectElement {\r\n return (\r\n element instanceof HTMLSelectElement && element.type === \"select-multiple\"\r\n );\r\n}\r\n\r\nfunction isCheckbox(element: Element | null): boolean {\r\n return (\r\n !!element &&\r\n element.tagName === \"INPUT\" &&\r\n element.getAttribute(\"type\") === \"checkbox\"\r\n );\r\n}\r\n","export function addOnceEventListener (\r\n el: EventTarget,\r\n eventName: string,\r\n cb: (event: Event) => void,\r\n options: boolean | AddEventListenerOptions = false\r\n): void {\r\n const once = (event: Event) => {\r\n cb(event)\r\n el.removeEventListener(eventName, once, options)\r\n }\r\n\r\n el.addEventListener(eventName, once, options)\r\n}\r\n\r\nlet passiveSupported = false\r\ntry {\r\n if (typeof window !== 'undefined') {\r\n const testListenerOpts = Object.defineProperty({}, 'passive', {\r\n get: () => {\r\n passiveSupported = true\r\n },\r\n })\r\n\r\n window.addEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n window.removeEventListener('testListener' as any, testListenerOpts as any, testListenerOpts)\r\n }\r\n} catch (e) { console.warn(e) } /* eslint-disable-line no-console */\r\nexport { passiveSupported }\r\n\r\nexport function addPassiveEventListener (\r\n el: EventTarget,\r\n event: string,\r\n cb: ((e: any) => void),\r\n options: {}\r\n): void {\r\n el.addEventListener(event, cb, passiveSupported ? options : false)\r\n}\r\n\r\nexport function getZIndex (el?: Element | null): number {\r\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\r\n\r\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\r\n\r\n if (!index) return getZIndex(el.parentNode as Element)\r\n return index\r\n}\r\n\r\n// KeyboardEvent.keyCode aliases\r\nexport const keyCodes = Object.freeze({\r\n enter: 13,\r\n tab: 9,\r\n delete: 46,\r\n esc: 27,\r\n space: 32,\r\n up: 38,\r\n down: 40,\r\n left: 37,\r\n right: 39,\r\n end: 35,\r\n home: 36,\r\n del: 46,\r\n backspace: 8,\r\n insert: 45,\r\n pageup: 33,\r\n pagedown: 34,\r\n shift: 16,\r\n})\r\n\r\n/** Polyfill for Event.prototype.composedPath */\r\nexport function composedPath (e: Event): EventTarget[] {\r\n if (e.composedPath) return e.composedPath()\r\n\r\n const path = []\r\n let el = e.target as Element\r\n\r\n while (el) {\r\n path.push(el)\r\n\r\n if (el.tagName === 'HTML') {\r\n path.push(document)\r\n path.push(window)\r\n\r\n return path\r\n }\r\n\r\n el = el.parentElement!\r\n }\r\n return path\r\n}\r\n\r\nexport function getBlazorId(el) {\r\n if (!el) {\r\n return null;\r\n }\r\n let _bl_ = el.getAttributeNames().find(a => a.startsWith('_bl_'))\r\n if (_bl_) {\r\n _bl_ = _bl_.substring(4);\r\n }\r\n\r\n return _bl_;\r\n}\r\n\r\nexport function getElementSelector(el) {\r\n if (!(el instanceof Element))\r\n return;\r\n var path = [];\r\n while (el.nodeType === Node.ELEMENT_NODE) {\r\n var selector = el.nodeName.toLowerCase();\r\n if (el.id) {\r\n selector += '#' + el.id;\r\n path.unshift(selector);\r\n break;\r\n } else {\r\n var sib = el, nth = 1;\r\n while (sib = sib.previousElementSibling) {\r\n if (sib.nodeName.toLowerCase() == selector)\r\n nth++;\r\n }\r\n if (nth != 1)\r\n selector += \":nth-of-type(\" + nth + \")\";\r\n }\r\n path.unshift(selector);\r\n el = el.parentNode;\r\n }\r\n return path.join(\" > \");\r\n}\r\n\r\nexport function getDom(elOrString: Element | string | undefined) {\r\n let element: HTMLElement;\r\n\r\n try {\r\n if (!elOrString) {\r\n element = document.body;\r\n } else if (typeof elOrString === \"string\") {\r\n if (elOrString === \"document\") {\r\n element = document.documentElement;\r\n } else if (elOrString.indexOf(\"__.__\") > 0) {\r\n // for example: el__.__parentElement\r\n let array = elOrString.split(\"__.__\");\r\n let i = 0;\r\n let el = document.querySelector(array[i++]);\r\n\r\n if (el) {\r\n while (array[i]) {\r\n el = el[array[i]];\r\n i++;\r\n }\r\n }\r\n\r\n if (el instanceof HTMLElement) {\r\n element = el;\r\n }\r\n } else {\r\n element = document.querySelector(elOrString);\r\n }\r\n } else {\r\n element = elOrString as HTMLElement;\r\n }\r\n\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n\r\n return element;\r\n}\r\n\r\nexport const canUseDom = !!(\r\n typeof window !== 'undefined' &&\r\n typeof document !== 'undefined' &&\r\n window.document &&\r\n window.document.createElement\r\n)\r\n\r\nexport function convertToUnit (str: number, unit?: string): string\r\nexport function convertToUnit (str: string | number | null | undefined, unit?: string): string | undefined\r\nexport function convertToUnit (str: string | number | null | undefined, unit = 'px'): string | undefined {\r\n if (str == null || str === '') {\r\n return undefined\r\n } else if (isNaN(+str!)) {\r\n return String(str)\r\n } else if (!isFinite(+str!)) {\r\n return undefined\r\n } else {\r\n return `${Number(str)}${unit}`\r\n }\r\n}","import { getElementSelector } from \"../utils/helper\";\r\nimport { parseDragEvent, parseMouseEvent, parseTouchEvent } from \"./EventType\";\r\n\r\nexport function registerExtraMouseEvent(eventType: string, eventName: string) {\r\n if (Blazor) {\r\n Blazor.registerCustomEventType(eventType, {\r\n browserEventName: eventName,\r\n createEventArgs: e => createSharedEventArgs(\"mouse\", e)\r\n })\r\n }\r\n}\r\n\r\nexport function registerExtraTouchEvent(eventType: string, eventName: string) {\r\n if (Blazor) {\r\n Blazor.registerCustomEventType(eventType, {\r\n browserEventName: eventName,\r\n createEventArgs: e => createSharedEventArgs(\"touch\", e)\r\n })\r\n }\r\n}\r\n\r\nexport function registerExtraDropEvent(eventType: string, eventName: string) {\r\n if (Blazor) {\r\n Blazor.registerCustomEventType(eventType, {\r\n browserEventName: eventName,\r\n createEventArgs: (e: DragEvent) => {\r\n const eventArgs = parseDragEvent(e);\r\n const value = e.dataTransfer.getData('data-value');\r\n const offsetX = e.dataTransfer.getData('offsetX');\r\n const offsetY = e.dataTransfer.getData('offsetY');\r\n\r\n eventArgs.dataTransfer['data'] = {\r\n value,\r\n offsetX: Number(offsetX),\r\n offsetY: Number(offsetY)\r\n }\r\n\r\n return eventArgs;\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport function createSharedEventArgs(type: \"mouse\" | \"touch\", e: Event,) {\r\n let args = { target: {} }\r\n if (type === 'mouse') {\r\n args = {\r\n ...args,\r\n ...parseMouseEvent(e as MouseEvent)\r\n }\r\n } else if (type === 'touch') {\r\n args = {\r\n ...args,\r\n ...parseTouchEvent(e as TouchEvent)\r\n }\r\n }\r\n\r\n if (e.target) {\r\n const target = e.target as HTMLElement;\r\n const elementReferenceId = target.getAttributeNames().find(a => a.startsWith('_bl_'));\r\n if (elementReferenceId) {\r\n args.target['elementReferenceId'] = elementReferenceId\r\n args.target['selector'] = `[${elementReferenceId}]`\r\n } else {\r\n args.target['selector'] = getElementSelector(target)\r\n }\r\n\r\n args.target['class'] = target.getAttribute('class')\r\n }\r\n\r\n return args;\r\n}","import { registerExtraDropEvent, registerExtraMouseEvent, registerExtraTouchEvent } from \"./extra\";\r\n\r\nexport function registerExtraEvents() {\r\n registerExtraMouseEvent(\"exmousedown\", \"mousedown\");\r\n registerExtraMouseEvent(\"exmouseup\", \"mouseup\");\r\n registerExtraMouseEvent(\"exclick\", \"click\");\r\n registerExtraMouseEvent(\"exmouseleave\", \"mouseleave\");\r\n registerExtraMouseEvent(\"exmouseenter\", \"mouseenter\");\r\n registerExtraMouseEvent(\"exmousemove\", \"mousemove\");\r\n registerExtraTouchEvent(\"extouchstart\", \"touchstart\");\r\n registerEvent(\"transitionend\", \"transitionend\")\r\n registerExtraDropEvent(\"exdrop\", \"drop\");\r\n}\r\n\r\nfunction registerEvent(eventType: string, eventName: string) {\r\n if (Blazor) {\r\n Blazor.registerCustomEventType(eventType, {\r\n browserEventName: eventName,\r\n })\r\n }\r\n}","import debounceIt from \"just-debounce-it\";\r\nimport throttle from \"just-throttle\";\r\n\r\nimport registerDirective from \"./directive/index\";\r\nimport { parseDragEvent, parseTouchEvent, touchEvents } from \"./events/EventType\";\r\nimport { registerExtraEvents } from \"./events/index\";\r\nimport { getBlazorId, getDom, getElementSelector } from \"./utils/helper\";\r\n\r\nexport function getZIndex(el?: Element | null): number {\r\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return 0\r\n\r\n const index = +window.getComputedStyle(el).getPropertyValue('z-index')\r\n\r\n if (!index) return getZIndex(el.parentNode as Element)\r\n return index\r\n}\r\n\r\nexport function getDomInfo(element, selector = \"body\") {\r\n var result = {};\r\n\r\n var dom = getDom(element);\r\n\r\n if (dom) {\r\n if (dom.style && dom.style[\"display\"] === \"none\") {\r\n // clone and set display not none because\r\n // element with display:none can not get the dom info\r\n var cloned = dom.cloneNode(true) as HTMLElement;\r\n cloned.style[\"display\"] = \"inline-block\";\r\n cloned.style[\"z-index\"] = -1000;\r\n dom.parentElement.appendChild(cloned);\r\n\r\n result = getDomInfoObj(cloned);\r\n\r\n dom.parentElement.removeChild(cloned);\r\n } else {\r\n result = getDomInfoObj(dom);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction getDomInfoObj(dom) {\r\n var result = {};\r\n result[\"offsetTop\"] = dom.offsetTop || 0;\r\n result[\"offsetLeft\"] = dom.offsetLeft || 0;\r\n result[\"scrollHeight\"] = dom.scrollHeight || 0;\r\n result[\"scrollWidth\"] = dom.scrollWidth || 0;\r\n result[\"scrollLeft\"] = dom.scrollLeft || 0;\r\n result[\"scrollTop\"] = dom.scrollTop || 0;\r\n result[\"clientTop\"] = dom.clientTop || 0;\r\n result[\"clientLeft\"] = dom.clientLeft || 0;\r\n result[\"clientHeight\"] = dom.clientHeight || 0;\r\n result[\"clientWidth\"] = dom.clientWidth || 0;\r\n var position = getElementPos(dom);\r\n result[\"offsetWidth\"] = Math.round(position.offsetWidth) || 0;\r\n result[\"offsetHeight\"] = Math.round(position.offsetHeight) || 0;\r\n result[\"relativeTop\"] = Math.round(position.relativeTop) || 0;\r\n result[\"relativeBottom\"] = Math.round(position.relativeBottom) || 0;\r\n result[\"relativeLeft\"] = Math.round(position.relativeLeft) || 0;\r\n result[\"relativeRight\"] = Math.round(position.relativeRight) || 0;\r\n result[\"absoluteLeft\"] = Math.round(position.absoluteLeft) || 0;\r\n result[\"absoluteTop\"] = Math.round(position.absoluteTop) || 0;\r\n return result;\r\n}\r\n\r\nfunction getElementPos(element) {\r\n var res: any = new Object();\r\n res.x = 0;\r\n res.y = 0;\r\n if (element !== null) {\r\n if (element.getBoundingClientRect) {\r\n var viewportElement = document.documentElement;\r\n var box = element.getBoundingClientRect();\r\n var scrollLeft = viewportElement.scrollLeft;\r\n var scrollTop = viewportElement.scrollTop;\r\n\r\n res.offsetWidth = box.width;\r\n res.offsetHeight = box.height;\r\n res.relativeTop = box.top;\r\n res.relativeBottom = box.bottom;\r\n res.relativeLeft = box.left;\r\n res.relativeRight = box.right;\r\n res.absoluteLeft = box.left + scrollLeft;\r\n res.absoluteTop = box.top + scrollTop;\r\n }\r\n }\r\n return res;\r\n}\r\n\r\nexport function triggerEvent(element, eventType, eventName, stopPropagation) {\r\n var dom = getDom(element);\r\n var evt = document.createEvent(eventType);\r\n evt.initEvent(eventName);\r\n\r\n if (stopPropagation) {\r\n evt.stopPropagation();\r\n }\r\n\r\n return dom.dispatchEvent(evt);\r\n}\r\n\r\nexport function setProperty(element, name, value) {\r\n var dom = getDom(element);\r\n dom[name] = value;\r\n}\r\n\r\nexport function getBoundingClientRect(element, attach = \"body\") {\r\n let dom = getDom(element);\r\n\r\n var result = {};\r\n\r\n if (dom && dom.getBoundingClientRect) {\r\n if (dom.style && dom.style[\"display\"] === \"none\") {\r\n var cloned = dom.cloneNode(true) as HTMLElement;\r\n cloned.style[\"display\"] = \"inline-block\";\r\n cloned.style[\"z-index\"] = -1000;\r\n document.querySelector(attach)?.appendChild(cloned);\r\n\r\n result = cloned.getBoundingClientRect();\r\n\r\n document.querySelector(attach)?.removeChild(cloned);\r\n } else {\r\n result = dom.getBoundingClientRect();\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nvar htmlElementEventListenerConfigs: { [prop: string]: HtmlElementEventListenerConfig[] } = {}\r\n\r\ntype HtmlElementEventListenerConfig = {\r\n listener?: (args: any) => void;\r\n options?: any;\r\n handle?: DotNet.DotNetObject;\r\n}\r\n\r\nexport function addHtmlElementEventListener(\r\n selector: \"window\" | \"document\" | K,\r\n type: string,\r\n invoker: DotNet.DotNetObject,\r\n options?: boolean | AddEventListenerOptions,\r\n extras?: Partial> & { relatedTarget?: string, throttle?: number, debounce?: number, key?: string }) {\r\n let htmlElement: HTMLElement | Window\r\n\r\n if (selector == \"window\") {\r\n htmlElement = window;\r\n } else if (selector == \"document\") {\r\n htmlElement = document.documentElement;\r\n } else {\r\n htmlElement = document.querySelector(selector);\r\n }\r\n\r\n var key = extras?.key || `${selector}:${type}`;\r\n\r\n //save for remove\r\n const config: HtmlElementEventListenerConfig = {};\r\n\r\n var listener = (e: any): void => {\r\n if (extras?.stopPropagation) {\r\n e.stopPropagation();\r\n }\r\n\r\n if (extras?.preventDefault) {\r\n e.preventDefault();\r\n }\r\n\r\n // mouseleave relatedTarget\r\n if (extras?.relatedTarget && document.querySelector(extras.relatedTarget)?.contains(e.relatedTarget)) {\r\n return;\r\n }\r\n\r\n let obj: any = {}\r\n\r\n if (touchEvents.includes(e.type)) {\r\n obj = parseTouchEvent(e)\r\n } else {\r\n for (var k in e) {\r\n if (typeof e[k] == 'string' || typeof e[k] == 'number') {\r\n obj[k] = e[k];\r\n }\r\n }\r\n }\r\n\r\n if (e.target && e.target !== window && e.target !== document) {\r\n obj.target = {}\r\n const target = e.target as HTMLElement;\r\n const elementReferenceId = target.getAttributeNames().find(a => a.startsWith('_bl_'));\r\n if (elementReferenceId) {\r\n obj.target['elementReferenceId'] = elementReferenceId\r\n obj.target['selector'] = `[${elementReferenceId}]`\r\n } else {\r\n obj.target['selector'] = getElementSelector(target)\r\n }\r\n\r\n obj.target['class'] = target.getAttribute('class')\r\n }\r\n\r\n invoker.invokeMethodAsync('Invoke', obj);\r\n };\r\n\r\n if (extras?.debounce && extras.debounce > 0) {\r\n config.listener = debounceIt(listener, extras.debounce)\r\n } else if (extras?.throttle && extras.throttle > 0) {\r\n config.listener = throttle(listener, extras.throttle, { trailing: true })\r\n } else {\r\n config.listener = listener;\r\n }\r\n\r\n config.options = options;\r\n config.handle = invoker\r\n\r\n if (htmlElementEventListenerConfigs[key]) {\r\n htmlElementEventListenerConfigs[key].push(config);\r\n } else {\r\n htmlElementEventListenerConfigs[key] = [config]\r\n }\r\n\r\n if (htmlElement) {\r\n htmlElement.addEventListener(type, config.listener, config.options);\r\n }\r\n}\r\n\r\nexport function removeHtmlElementEventListener(selector, type, k?: string) {\r\n let htmlElement: any\r\n\r\n if (selector == \"window\") {\r\n htmlElement = window;\r\n } else if (selector == \"document\") {\r\n htmlElement = document.documentElement;\r\n } else {\r\n htmlElement = document.querySelector(selector);\r\n }\r\n\r\n var k = k || `${selector}:${type}`;\r\n\r\n var configs = htmlElementEventListenerConfigs[k];\r\n\r\n if (configs) {\r\n configs.forEach(item => {\r\n item.handle.dispose();\r\n htmlElement?.removeEventListener(type, item.listener, item.options);\r\n });\r\n\r\n htmlElementEventListenerConfigs[k] = []\r\n }\r\n}\r\n\r\nexport function addMouseleaveEventListener(selector) {\r\n var htmlElement = document.querySelector(selector);\r\n if (htmlElement) {\r\n htmlElement.addEventListener()\r\n }\r\n}\r\n\r\nexport function contains(e1, e2) {\r\n const dom1 = getDom(e1);\r\n if (dom1 && dom1.contains) {\r\n return dom1.contains(getDom(e2));\r\n }\r\n return false;\r\n}\r\n\r\nexport function equalsOrContains(e1: any, e2: any) {\r\n const dom1 = getDom(e1);\r\n const dom2 = getDom(e2);\r\n return !!dom1 && dom1.contains && !!dom2 && (dom1 == dom2 || dom1.contains(dom2));\r\n}\r\n\r\nfunction fallbackCopyTextToClipboard(text) {\r\n var textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n\r\n // Avoid scrolling to bottom\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n textArea.style.position = \"fixed\";\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n var successful = document.execCommand('copy');\r\n var msg = successful ? 'successful' : 'unsuccessful';\r\n console.log('Fallback: Copying text command was ' + msg);\r\n } catch (err) {\r\n console.error('Fallback: Oops, unable to copy', err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n}\r\n\r\nexport function copy(text) {\r\n if (!navigator.clipboard) {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n navigator.clipboard.writeText(text).then(function () {\r\n console.log('Async: Copying to clipboard was successful!');\r\n }, function (err) {\r\n console.error('Async: Could not copy text: ', err);\r\n });\r\n}\r\n\r\nexport function focus(selector, noScroll: boolean = false) {\r\n let dom = getDom(selector);\r\n if (!(dom instanceof HTMLElement))\r\n throw new Error(\"Unable to focus an invalid element.\");\r\n dom.focus({\r\n preventScroll: noScroll\r\n })\r\n}\r\n\r\nexport function select(selector) {\r\n let dom = getDom(selector);\r\n if (!(dom instanceof HTMLInputElement || dom instanceof HTMLTextAreaElement))\r\n throw new Error(\"Unable to select an invalid element\")\r\n dom.select()\r\n}\r\n\r\nexport function hasFocus(selector) {\r\n let dom = getDom(selector);\r\n return (document.activeElement === dom);\r\n}\r\n\r\nexport function blur(selector) {\r\n let dom = getDom(selector);\r\n dom.blur();\r\n}\r\n\r\nexport function log(text) {\r\n console.log(text);\r\n}\r\n\r\nexport function scrollIntoView(target, arg?: boolean | ScrollIntoViewOptions) {\r\n let dom = getDom(target);\r\n if (dom instanceof HTMLElement) {\r\n if (arg === null || arg == undefined) {\r\n dom.scrollIntoView();\r\n } else if (typeof arg === 'boolean') {\r\n dom.scrollIntoView(arg);\r\n } else {\r\n dom.scrollIntoView({\r\n block: arg.block == null ? undefined : arg.block,\r\n inline: arg.inline == null ? undefined : arg.inline,\r\n behavior: arg.behavior\r\n })\r\n }\r\n }\r\n}\r\n\r\nexport function scrollIntoParentView(\r\n target,\r\n inline = false,\r\n start = false,\r\n level = 1,\r\n behavior: ScrollBehavior = \"smooth\",\r\n) {\r\n const dom = getDom(target);\r\n if (dom instanceof HTMLElement) {\r\n let parent: HTMLElement = dom;\r\n while (level > 0) {\r\n parent = parent.parentElement;\r\n level--;\r\n if (!parent) {\r\n return;\r\n }\r\n }\r\n\r\n const options: ScrollToOptions = {\r\n behavior,\r\n };\r\n\r\n if (inline) {\r\n if (start) {\r\n options.left = dom.offsetLeft\r\n } else {\r\n const to = dom.offsetLeft - parent.offsetLeft;\r\n if (to - parent.scrollLeft < 0) {\r\n options.left = to;\r\n } else if (\r\n to + dom.offsetWidth - parent.scrollLeft >\r\n parent.offsetWidth\r\n ) {\r\n options.left = to + dom.offsetWidth - parent.offsetWidth;\r\n }\r\n }\r\n } else {\r\n if (start) {\r\n options.top = dom.offsetTop;\r\n } else {\r\n const to = dom.offsetTop - parent.offsetTop;\r\n if (to - parent.scrollTop < 0) {\r\n options.top = to;\r\n } else if (\r\n to + dom.offsetHeight - parent.scrollTop >\r\n parent.offsetHeight\r\n ) {\r\n options.top = to + dom.offsetHeight - parent.offsetHeight;\r\n }\r\n }\r\n }\r\n\r\n if (options.left || options.top) {\r\n parent.scrollTo(options);\r\n }\r\n }\r\n}\r\n\r\nexport function scrollTo(target, options: ScrollToOptions) {\r\n let dom = getDom(target);\r\n if (dom instanceof HTMLElement) {\r\n const o = {\r\n left: options.left === null ? undefined : options.left,\r\n top: options.top === null ? undefined : options.top,\r\n behavior: options.behavior\r\n }\r\n dom.scrollTo(o)\r\n }\r\n}\r\n\r\nexport function scrollToElement(target, offset: number, behavior?: ScrollBehavior) {\r\n const dom = getDom(target)\r\n if (!dom) return;\r\n const domPosition = dom.getBoundingClientRect().top;\r\n const offsetPosition = domPosition + window.pageYOffset - offset;\r\n window.scrollTo({\r\n top: offsetPosition,\r\n behavior: behavior\r\n })\r\n}\r\n\r\nexport function scrollToActiveElement(\r\n container,\r\n element = \".active\",\r\n position: \"center\" | number = \"center\"\r\n) {\r\n let containerEl: HTMLElement = getDom(container);\r\n\r\n let activeEl: HTMLElement\r\n if (typeof element === 'string') {\r\n activeEl = container.querySelector(element)\r\n }\r\n\r\n if (!containerEl || !activeEl) {\r\n return;\r\n }\r\n\r\n if (position === 'center') {\r\n containerEl.scrollTop = activeEl.offsetTop - containerEl.offsetHeight / 2 + activeEl.offsetHeight / 2;\r\n }\r\n else {\r\n containerEl.scrollTop = activeEl.offsetTop - position\r\n }\r\n}\r\n\r\nexport function addClsToFirstChild(element, className) {\r\n var dom = getDom(element);\r\n if (dom.firstElementChild) {\r\n dom.firstElementChild.classList.add(className);\r\n }\r\n}\r\n\r\nexport function removeClsFromFirstChild(element, className) {\r\n var dom = getDom(element);\r\n if (dom.firstElementChild) {\r\n dom.firstElementChild.classList.remove(className);\r\n }\r\n}\r\n\r\nexport function getAbsoluteTop(e) {\r\n var offset = e.offsetTop;\r\n if (e.offsetParent != null) {\r\n offset += getAbsoluteTop(e.offsetParent);\r\n }\r\n return offset;\r\n}\r\n\r\nexport function getAbsoluteLeft(e) {\r\n var offset = e.offsetLeft;\r\n if (e.offsetParent != null) {\r\n offset += getAbsoluteLeft(e.offsetParent);\r\n }\r\n return offset;\r\n}\r\n\r\nexport function addElementToBody(element) {\r\n document.body.appendChild(element);\r\n}\r\n\r\nexport function delElementFromBody(element) {\r\n document.body.removeChild(element);\r\n}\r\n\r\nexport function addElementTo(addElement, elementSelector) {\r\n let parent = getDom(elementSelector);\r\n if (parent && addElement) {\r\n parent.appendChild(addElement);\r\n }\r\n}\r\n\r\nexport function delElementFrom(delElement, elementSelector) {\r\n let parent = getDom(elementSelector);\r\n if (parent && delElement) {\r\n parent.removeChild(delElement);\r\n }\r\n}\r\n\r\nexport function getActiveElement() {\r\n let element = document.activeElement;\r\n let id = element.getAttribute(\"id\") || \"\";\r\n return id;\r\n}\r\n\r\nexport function focusDialog(selector: string, count: number = 0) {\r\n let ele = document.querySelector(selector);\r\n if (ele && !ele.hasAttribute(\"disabled\")) {\r\n setTimeout(() => {\r\n ele.focus();\r\n let curId = \"#\" + getActiveElement();\r\n if (curId !== selector) {\r\n if (count < 10) {\r\n focusDialog(selector, count + 1);\r\n }\r\n }\r\n }, 10);\r\n }\r\n}\r\n\r\nexport function getWindow() {\r\n return {\r\n innerWidth: window.innerWidth,\r\n innerHeight: window.innerHeight,\r\n pageXOffset: window.pageXOffset,\r\n pageYOffset: window.pageYOffset,\r\n isTop: window.scrollY == 0,\r\n isBottom: (window.scrollY + window.innerHeight) == document.body.clientHeight\r\n };\r\n}\r\n\r\nexport function getWindowAndDocumentProps(windowProps: string[] = [], documentProps: string[] = []) {\r\n const obj = {}\r\n\r\n if (windowProps) {\r\n windowProps.forEach(prop => obj[prop] = window[prop]);\r\n }\r\n\r\n if (documentProps) {\r\n documentProps.forEach(prop => obj[prop] = document.documentElement[prop]);\r\n }\r\n\r\n return obj\r\n}\r\n\r\nfunction debounce(func, wait, immediate) {\r\n var timeout;\r\n return () => {\r\n const context = this, args = arguments;\r\n const later = () => {\r\n timeout = null;\r\n if (!immediate) func.apply(this, args);\r\n };\r\n const callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) func.apply(context, args);\r\n };\r\n};\r\n\r\nexport function css(element: any, name: string | object, value: string | null = null) {\r\n var dom = getDom(element);\r\n if (typeof name === 'string') {\r\n dom.style[name] = value;\r\n } else {\r\n for (let key in name) {\r\n if (name.hasOwnProperty(key)) {\r\n dom.style[key] = name[key];\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function addCls(selector: Element | string, clsName: string | Array) {\r\n let element = getDom(selector);\r\n\r\n if (typeof clsName === \"string\") {\r\n element.classList.add(clsName);\r\n } else {\r\n element.classList.add(...clsName);\r\n }\r\n}\r\n\r\nexport function removeCls(selector: Element | string, clsName: string | Array) {\r\n let element = getDom(selector);\r\n\r\n if (typeof clsName === \"string\") {\r\n element.classList.remove(clsName);\r\n } else {\r\n element.classList.remove(...clsName);\r\n }\r\n}\r\n\r\nexport function elementScrollIntoView(selector: Element | string) {\r\n let element = getDom(selector);\r\n\r\n if (!element)\r\n return;\r\n\r\n element.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'start' });\r\n}\r\n\r\nconst hasScrollbar = () => {\r\n let overflow = document.body.style.overflow;\r\n if (overflow && overflow === \"hidden\") return false;\r\n return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight);\r\n}\r\n\r\nexport function getScroll() {\r\n return { x: window.pageXOffset, y: window.pageYOffset };\r\n}\r\n\r\nexport function getInnerText(element) {\r\n let dom = getDom(element);\r\n return dom.innerText;\r\n}\r\n\r\nexport function getMenuOrDialogMaxZIndex(exclude: Element[] = [], element: Element) {\r\n const base = getDom(element);\r\n // Start with lowest allowed z-index or z-index of\r\n // base component's element, whichever is greater\r\n const zis = [getZIndex(base)]\r\n\r\n const activeElements = [\r\n ...document.getElementsByClassName('m-menu__content--active'),\r\n ...document.getElementsByClassName('m-dialog__content--active'),\r\n ]\r\n\r\n // Get z-index for all active dialogs\r\n for (let index = 0; index < activeElements.length; index++) {\r\n if (!exclude.includes(activeElements[index])) {\r\n zis.push(getZIndex(activeElements[index]))\r\n }\r\n }\r\n\r\n return Math.max(...zis)\r\n}\r\n\r\nexport function getMaxZIndex() {\r\n return [...document.all].reduce((r, e) => Math.max(r, +window.getComputedStyle(e).zIndex || 0), 0)\r\n}\r\n\r\nexport function getStyle(element, styleProp) {\r\n element = getDom(element);\r\n\r\n if (element.currentStyle) {\r\n return element.currentStyle[styleProp];\r\n } else if (window.getComputedStyle) {\r\n return document.defaultView.getComputedStyle(element, null).getPropertyValue(styleProp);\r\n }\r\n}\r\n\r\nexport function getTextAreaInfo(element) {\r\n var result = {};\r\n var dom = getDom(element);\r\n result[\"scrollHeight\"] = dom.scrollHeight || 0;\r\n\r\n if (element.currentStyle) {\r\n result[\"lineHeight\"] = parseFloat(element.currentStyle[\"line-height\"]);\r\n result[\"paddingTop\"] = parseFloat(element.currentStyle[\"padding-top\"]);\r\n result[\"paddingBottom\"] = parseFloat(element.currentStyle[\"padding-bottom\"]);\r\n result[\"borderBottom\"] = parseFloat(element.currentStyle[\"border-bottom\"]);\r\n result[\"borderTop\"] = parseFloat(element.currentStyle[\"border-top\"]);\r\n } else if (window.getComputedStyle) {\r\n result[\"lineHeight\"] = parseFloat(document.defaultView.getComputedStyle(element, null).getPropertyValue(\"line-height\"));\r\n result[\"paddingTop\"] = parseFloat(document.defaultView.getComputedStyle(element, null).getPropertyValue(\"padding-top\"));\r\n result[\"paddingBottom\"] = parseFloat(document.defaultView.getComputedStyle(element, null).getPropertyValue(\"padding-bottom\"));\r\n result[\"borderBottom\"] = parseFloat(document.defaultView.getComputedStyle(element, null).getPropertyValue(\"border-bottom\"));\r\n result[\"borderTop\"] = parseFloat(document.defaultView.getComputedStyle(element, null).getPropertyValue(\"border-top\"));\r\n }\r\n //Firefox can return this as NaN, so it has to be handled here like that.\r\n if (Object.is(NaN, result[\"borderTop\"]))\r\n result[\"borderTop\"] = 1;\r\n if (Object.is(NaN, result[\"borderBottom\"]))\r\n result[\"borderBottom\"] = 1;\r\n return result;\r\n}\r\n\r\nconst objReferenceDict = {};\r\n\r\nexport function disposeObj(objReferenceName) {\r\n delete objReferenceDict[objReferenceName];\r\n}\r\n\r\nexport function upsertThemeStyle(id: string, style: string) {\r\n const d = document.getElementById(id);\r\n if (d) {\r\n document.head.removeChild(d);\r\n }\r\n\r\n const d_style = document.createElement('style')\r\n d_style.id = id;\r\n d_style.type = \"text/css\";\r\n d_style.innerHTML = style;\r\n\r\n document.head.insertAdjacentElement('beforeend', d_style)\r\n}\r\n\r\nexport function getImageDimensions(src: string) {\r\n return new Promise(function (resolve, reject) {\r\n var img = new Image()\r\n img.src = src\r\n img.onload = function () {\r\n resolve({\r\n width: img.width,\r\n height: img.height,\r\n hasError: false\r\n })\r\n }\r\n img.onerror = function () {\r\n resolve({\r\n width: 0,\r\n height: 0,\r\n hasError: true\r\n })\r\n }\r\n })\r\n}\r\n\r\nexport function enablePreventDefaultForEvent(element: any, event: string, condition?: any) {\r\n const dom = getDom(element);\r\n if (!dom) return;\r\n if (event === 'keydown') {\r\n dom.addEventListener(event, (e: KeyboardEvent) => {\r\n if (Array.isArray(condition)) {\r\n var codes = condition as string[];\r\n if (codes.includes(e.code)) {\r\n e.preventDefault();\r\n }\r\n } else {\r\n e.preventDefault();\r\n }\r\n })\r\n } else {\r\n dom.addEventListener(event, e => {\r\n if (e.preventDefault) {\r\n e.preventDefault();\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport function getBoundingClientRects(selector) {\r\n var elements = document.querySelectorAll(selector);\r\n\r\n var result = [];\r\n\r\n for (var i = 0; i < elements.length; i++) {\r\n var e: Element = elements[i];\r\n var dom = {\r\n id: e.id,\r\n rect: e.getBoundingClientRect()\r\n };\r\n result.push(dom);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function getSize(selectors, sizeProp) {\r\n var el = getDom(selectors);\r\n\r\n var display = el.style.display;\r\n var overflow = el.style.overflow;\r\n\r\n el.style.display = \"\";\r\n el.style.overflow = \"hidden\";\r\n\r\n var size = el[\"offset\" + sizeProp.charAt(0).toUpperCase() + sizeProp.slice(1)] || 0;\r\n\r\n el.style.display = display;\r\n el.style.overflow = overflow;\r\n\r\n return size;\r\n}\r\n\r\nexport function getProp(selectors, name) {\r\n var el = getDom(selectors);\r\n if (!el) {\r\n return null;\r\n }\r\n\r\n return el[name];\r\n}\r\n\r\nexport function updateWindowTransition(selectors, isActive, item) {\r\n var el: HTMLElement = getDom(selectors);\r\n var container: HTMLElement = el.querySelector('.m-window__container');\r\n\r\n if (item) {\r\n var itemEl: HTMLElement = getDom(item);\r\n container.style.height = itemEl.clientHeight + 'px';\r\n return;\r\n }\r\n\r\n if (isActive) {\r\n container.classList.add('m-window__container--is-active');\r\n container.style.height = el.clientHeight + 'px';\r\n } else {\r\n container.style.height = '';\r\n container.classList.remove('m-window__container--is-active');\r\n }\r\n}\r\n\r\nexport function getScrollHeightWithoutHeight(selectors) {\r\n var el: HTMLElement = getDom(selectors);\r\n if (!el) {\r\n return 0;\r\n }\r\n\r\n var height = el.style.height;\r\n el.style.height = '0'\r\n var scrollHeight = el.scrollHeight;\r\n el.style.height = height;\r\n\r\n return scrollHeight;\r\n}\r\n\r\n//register custom events\r\nwindow.onload = function () {\r\n registerExtraEvents();\r\n registerPasteWithData(\"pastewithdata\")\r\n registerDirective();\r\n}\r\n\r\nfunction registerPasteWithData(customEventName) {\r\n if (Blazor) {\r\n Blazor.registerCustomEventType(customEventName, {\r\n browserEventName: 'paste',\r\n createEventArgs: (event: ClipboardEvent) => {\r\n return {\r\n type: event.type,\r\n pastedData: event.clipboardData.getData('text')\r\n };\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function registerTextFieldOnMouseDown(element, inputElement, callback) {\r\n if (!element || !inputElement) return\r\n\r\n addHtmlElementEventListener\r\n const listener = (e: MouseEvent) => {\r\n const target = e.target;\r\n const inputDom = getDom(inputElement);\r\n if (target !== inputDom) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n if (callback) {\r\n const mouseEventArgs = {\r\n Detail: e.detail,\r\n ScreenX: e.screenX,\r\n ScreenY: e.screenY,\r\n ClientX: e.clientX,\r\n ClientY: e.clientY,\r\n OffsetX: e.offsetX,\r\n OffsetY: e.offsetY,\r\n PageX: e.pageX,\r\n PageY: e.pageY,\r\n Button: e.button,\r\n Buttons: e.buttons,\r\n CtrlKey: e.ctrlKey,\r\n ShiftKey: e.shiftKey,\r\n AltKey: e.altKey,\r\n MetaKey: e.metaKey,\r\n Type: e.type\r\n }\r\n\r\n callback.invokeMethodAsync('Invoke', mouseEventArgs);\r\n }\r\n };\r\n\r\n element.addEventListener('mousedown', listener)\r\n\r\n const config: HtmlElementEventListenerConfig = {\r\n listener,\r\n handle: callback\r\n };\r\n\r\n const key =`registerTextFieldOnMouseDown_${getBlazorId(element)}`;\r\n htmlElementEventListenerConfigs[key] = [config]\r\n}\r\n\r\nexport function unregisterTextFieldOnMouseDown(element: HTMLElement) {\r\n const key =`registerTextFieldOnMouseDown_${getBlazorId(element)}`;\r\n const configs = htmlElementEventListenerConfigs[key]\r\n if (configs && configs.length) {\r\n configs.forEach(item => {\r\n item.handle.dispose();\r\n if (element) {\r\n element.removeEventListener(\"mousedown\", item.listener);\r\n }\r\n })\r\n }\r\n}\r\n\r\nexport function containsActiveElement(selector) {\r\n var el = getDom(selector);\r\n if (el && el.contains) {\r\n return el.contains(document.activeElement);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport function copyChild(el) {\r\n if (typeof el === 'string') {\r\n el = document.querySelector(el);\r\n }\r\n\r\n if (!el) return;\r\n\r\n el.setAttribute('contenteditable', 'true');\r\n el.focus();\r\n document.execCommand('selectAll', false, null);\r\n document.execCommand('copy');\r\n document.execCommand('unselect');\r\n el.removeAttribute('contenteditable');\r\n}\r\n\r\nexport function copyText(text) {\r\n if (!navigator.clipboard) {\r\n var textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n\r\n // Avoid scrolling to bottom\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n textArea.style.position = \"fixed\";\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n var successful = document.execCommand('copy');\r\n var msg = successful ? 'successful' : 'unsuccessful';\r\n console.log('Fallback: Copying text command was ' + msg);\r\n } catch (err) {\r\n console.error('Fallback: Oops, unable to copy', err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n return;\r\n }\r\n\r\n navigator.clipboard.writeText(text).then(function () {\r\n console.log('Async: Copying to clipboard was successful!');\r\n }, function (err) {\r\n console.error('Async: Could not copy text: ', err);\r\n });\r\n}\r\n\r\nexport function getMenuableDimensions(hasActivator, activatorSelector, isDefaultAttach, contentElement, attached, attachSelector) {\r\n if (!attached) {\r\n var container = document.querySelector(attachSelector);\r\n if (contentElement.nodeType) {\r\n container.appendChild(contentElement);\r\n }\r\n }\r\n\r\n var dimensions = {\r\n activator: {} as any,\r\n content: {},\r\n relativeYOffset: 0,\r\n offsetParentLeft: 0\r\n };\r\n\r\n if (hasActivator) {\r\n var activator = document.querySelector(activatorSelector);\r\n dimensions.activator = measure(activator, isDefaultAttach)\r\n dimensions.activator.offsetLeft = activator.offsetLeft\r\n if (!isDefaultAttach) {\r\n // account for css padding causing things to not line up\r\n // this is mostly for v-autocomplete, hopefully it won't break anything\r\n dimensions.activator.offsetTop = activator.offsetTop\r\n } else {\r\n dimensions.activator.offsetTop = 0\r\n }\r\n }\r\n\r\n sneakPeek(() => {\r\n if (contentElement) {\r\n if (contentElement.offsetParent) {\r\n const offsetRect = getRoundedBoundedClientRect(contentElement.offsetParent)\r\n dimensions.relativeYOffset = window.pageYOffset + offsetRect.top\r\n\r\n if (hasActivator) {\r\n dimensions.activator.top -= dimensions.relativeYOffset\r\n dimensions.activator.left -= window.pageXOffset + offsetRect.left\r\n } else {\r\n dimensions.offsetParentLeft = offsetRect.left\r\n }\r\n }\r\n\r\n dimensions.content = measure(contentElement, isDefaultAttach)\r\n }\r\n }, contentElement);\r\n\r\n return dimensions;\r\n}\r\n\r\nfunction measure(el: HTMLElement, isDefaultAttach) {\r\n if (!el) return {}\r\n\r\n const rect = getRoundedBoundedClientRect(el)\r\n\r\n // Account for activator margin\r\n if (!isDefaultAttach) {\r\n const style = window.getComputedStyle(el)\r\n\r\n rect.left = parseInt(style.marginLeft!)\r\n rect.top = parseInt(style.marginTop!)\r\n }\r\n\r\n return rect\r\n}\r\n\r\nfunction getRoundedBoundedClientRect(el: Element) {\r\n if (!el || !el.nodeType) {\r\n return null\r\n }\r\n\r\n const rect = el.getBoundingClientRect()\r\n return {\r\n top: Math.round(rect.top),\r\n left: Math.round(rect.left),\r\n bottom: Math.round(rect.bottom),\r\n right: Math.round(rect.right),\r\n width: Math.round(rect.width),\r\n height: Math.round(rect.height),\r\n }\r\n}\r\n\r\nfunction sneakPeek(cb: () => void, el) {\r\n if (!el || !el.style || el.style.display !== 'none') {\r\n cb()\r\n return\r\n }\r\n\r\n el.style.display = 'inline-block'\r\n cb()\r\n el.style.display = 'none'\r\n}\r\n\r\nexport function invokeMultipleMethod(windowProps, documentProps, hasActivator, activatorSelector, attach, contentElement, attached, attachSelector, element) {\r\n var multipleResult = {\r\n windowAndDocument: null,\r\n dimensions: null,\r\n zIndex: 0\r\n };\r\n\r\n multipleResult.windowAndDocument = getWindowAndDocumentProps(windowProps, documentProps);\r\n multipleResult.dimensions = getMenuableDimensions(hasActivator, activatorSelector, attach, contentElement, attached, attachSelector);\r\n multipleResult.zIndex = getMenuOrDialogMaxZIndex([contentElement], element);\r\n\r\n return multipleResult;\r\n}\r\n\r\nexport function registerOTPInputOnInputEvent(elementList, callback) {\r\n for (let i = 0; i < elementList.length; i++) {\r\n const inputListener = (e: Event) => otpInputOnInputEvent(e, i, elementList, callback);\r\n const focusListener = (e: Event) => otpInputFocusEvent(e, i, elementList);\r\n const keyupListener =(e: KeyboardEvent) => otpInputKeyupEvent(e, i, elementList, callback);\r\n\r\n elementList[i].addEventListener('input', inputListener);\r\n elementList[i].addEventListener('focus', focusListener);\r\n elementList[i].addEventListener('keyup', keyupListener);\r\n\r\n elementList[i]._optInput = {\r\n inputListener,\r\n focusListener,\r\n keyupListener\r\n }\r\n }\r\n}\r\n\r\nfunction otpInputKeyupEvent(e: KeyboardEvent, otpIdx: number, elementList, callback) {\r\n e.preventDefault();\r\n const eventKey = e.key;\r\n if (eventKey === 'ArrowLeft' || eventKey === 'Backspace') {\r\n if (eventKey === 'Backspace') {\r\n const obj = {\r\n type: eventKey,\r\n index: otpIdx,\r\n value: ''\r\n }\r\n if (callback) {\r\n callback.invokeMethodAsync('Invoke', JSON.stringify(obj));\r\n }\r\n }\r\n otpInputFocus(otpIdx - 1, elementList);\r\n }\r\n else if (eventKey === 'ArrowRight') {\r\n otpInputFocus(otpIdx + 1, elementList);\r\n }\r\n}\r\n\r\nfunction otpInputFocus(focusIndex: number, elementList) {\r\n if (focusIndex < 0) {\r\n otpInputFocus(0, elementList);\r\n }\r\n else if (focusIndex >= elementList.length) {\r\n otpInputFocus(elementList.length - 1, elementList);\r\n }\r\n else {\r\n if (document.activeElement !== elementList[focusIndex]) {\r\n const element = getDom(elementList[focusIndex])\r\n element.focus();\r\n }\r\n }\r\n}\r\n\r\nfunction otpInputFocusEvent(e: Event, otpIdx: number, elementList) {\r\n const element = getDom(elementList[otpIdx]) as HTMLInputElement;\r\n if (element && document.activeElement === element) {\r\n element.select();\r\n }\r\n}\r\n\r\nfunction otpInputOnInputEvent(e: Event, otpIdx: number, elementList, callback) {\r\n const target = e.target as HTMLInputElement;\r\n const value = target.value;\r\n\r\n if (value && value !== '') {\r\n otpInputFocus(otpIdx + 1, elementList);\r\n\r\n if (callback) {\r\n const obj = {\r\n type: 'Input',\r\n index: otpIdx,\r\n value: value\r\n }\r\n callback.invokeMethodAsync('Invoke', JSON.stringify(obj));\r\n }\r\n }\r\n}\r\n\r\nexport function unregisterOTPInputOnInputEvent(elementList) {\r\n for (let i = 0; i < elementList.length; i++) {\r\n const el = elementList[i]\r\n if(el && el._optInput) {\r\n el.removeEventListener('input', el._optInput.inputListener)\r\n el.removeEventListener('focus', el._optInput.focusListener)\r\n el.removeEventListener('keyup', el._optInput.keyupListener)\r\n }\r\n }\r\n}\r\n\r\nexport function getListIndexWhereAttributeExists(selector: string, attribute:string, value: string) {\r\n const tiles = document.querySelectorAll(selector);\r\n if (!tiles) {\r\n return -1;\r\n }\r\n\r\n let index = -1;\r\n for (let i = 0; i < tiles.length; i++) {\r\n if (tiles[i].getAttribute(attribute) === value) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n return index;\r\n}\r\n\r\nexport function scrollToTile(contentSelector: string, tilesSelector: string, index: number, keyCode: string) {\r\n var tiles = document.querySelectorAll(tilesSelector)\r\n if (!tiles) return;\r\n\r\n let tile = tiles[index] as HTMLElement;\r\n\r\n if (!tile) return;\r\n\r\n const content = document.querySelector(contentSelector);\r\n if (!content) return;\r\n\r\n const scrollTop = content.scrollTop;\r\n const contentHeight = content.clientHeight;\r\n\r\n if (scrollTop > tile.offsetTop - 8) {\r\n content.scrollTo({ top: tile.offsetTop - tile.clientHeight, behavior: \"smooth\" })\r\n } else if (scrollTop + contentHeight < tile.offsetTop + tile.clientHeight + 8) {\r\n content.scrollTo({ top: tile.offsetTop - contentHeight + tile.clientHeight * 2, behavior: \"smooth\" })\r\n }\r\n}\r\n\r\nexport function getElementTranslateY(element) {\r\n const style = window.getComputedStyle(element);\r\n const transform = style.transform || style.webkitTransform;\r\n const translateY = transform.slice(7, transform.length - 1).split(', ')[5];\r\n\r\n return Number(translateY);\r\n}\r\n\r\nfunction isWindow(element: any | Window): element is Window {\r\n return element === window\r\n}\r\n\r\nexport function checkIfThresholdIsExceededWhenScrolling(el: Element, parent: any, threshold: number) {\r\n if (!el || !parent) return\r\n\r\n let parentElement: HTMLElement | Window\r\n\r\n if (parent == \"window\") {\r\n parentElement = window;\r\n } else if (parent == \"document\") {\r\n parentElement = document.documentElement;\r\n } else {\r\n parentElement = document.querySelector(parent);\r\n }\r\n\r\n const rect = el.getBoundingClientRect();\r\n const elementTop = rect.top;\r\n const current = isWindow(parentElement)\r\n ? window.innerHeight\r\n : parentElement.getBoundingClientRect().bottom\r\n\r\n return (current >= elementTop - threshold)\r\n}\r\n\r\nexport function get_top_domain() {\r\n var i, h,\r\n weird_cookie = 'weird_get_top_level_domain=cookie',\r\n hostname = document.location.hostname.split('.');\r\n for (i = hostname.length - 1; i >= 0; i--) {\r\n h = hostname.slice(i).join('.');\r\n document.cookie = weird_cookie + ';domain=.' + h + ';';\r\n if (document.cookie.indexOf(weird_cookie) > -1) {\r\n // We were able to store a cookie! This must be it\r\n document.cookie = weird_cookie.split('=')[0] + '=;domain=.' + h + ';expires=Thu, 01 Jan 1970 00:00:01 GMT;';\r\n return h;\r\n }\r\n }\r\n}\r\n\r\nexport function setCookie(name, value) {\r\n var domain = get_top_domain();\r\n if (!domain) {\r\n domain = '';\r\n }else if (isNaN(domain[0])) {\r\n domain = `.${domain}`;\r\n }\r\n var Days = 30;\r\n var exp = new Date();\r\n exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000);\r\n document.cookie = `${name}=${escape(value.toString())};path=/;expires=${exp.toUTCString()};domain=${domain}`;\r\n}\r\n\r\nexport function getCookie(name) {\r\n const reg = new RegExp(`(^| )${name}=([^;]*)(;|$)`);\r\n const arr = document.cookie.match(reg);\r\n if (arr) {\r\n return unescape(arr[2]);\r\n }\r\n return null;\r\n}\r\n\r\nexport function registerDragEvent(el: HTMLElement, dataKey?: string) {\r\n if (el) {\r\n const blazorId = getBlazorId(el);\r\n const listener = (e: DragEvent) => {\r\n if (dataKey) {\r\n const dataValue = (e.target as HTMLElement).getAttribute(dataKey);\r\n e.dataTransfer.setData(dataKey, dataValue);\r\n e.dataTransfer.setData('offsetX', e.offsetX.toString())\r\n e.dataTransfer.setData('offsetY', e.offsetY.toString())\r\n }\r\n };\r\n const key = `${blazorId}:dragstart`;\r\n htmlElementEventListenerConfigs[key] = [{\r\n listener\r\n }];\r\n el.addEventListener(\"dragstart\", listener);\r\n }\r\n}\r\n\r\nexport function unregisterDragEvent(el: HTMLElement) {\r\n const blazorId = getBlazorId(el);\r\n if (blazorId) {\r\n const key = `${blazorId}:dragstart`;\r\n if (htmlElementEventListenerConfigs[key]) {\r\n htmlElementEventListenerConfigs[key].forEach((config) => {\r\n el.removeEventListener(\"dragstart\", config.listener);\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport function resizableDataTable(dataTable: HTMLElement) {\r\n const table = dataTable.querySelector('table')\r\n const row = table.querySelector('.m-data-table-header').getElementsByTagName('tr')[0];\r\n const cols = row ? row.children : [];\r\n if (!cols) return;\r\n\r\n table.style.overflow = 'hidden';\r\n\r\n const tableHeight = table.offsetHeight;\r\n\r\n for (var i = 0; i < cols.length; i++) {\r\n const col: any = cols[i];\r\n const colResizeDiv: HTMLDivElement = col.querySelector(\".m-data-table-header__col-resize\");\r\n if (!colResizeDiv) continue\r\n colResizeDiv.style.height = tableHeight + \"px\"\r\n\r\n let minWidth = (col.firstElementChild as HTMLElement).offsetWidth; // width of span\r\n minWidth = minWidth + 32 + 18 + 1 + 1; // 32:padding 18:sort\r\n if(!col.style.minWidth){\r\n col.minWidth = minWidth;\r\n col.style.minWidth = minWidth + \"px\";\r\n }\r\n\r\n setListeners(colResizeDiv);\r\n }\r\n\r\n function setListeners(div: HTMLDivElement) {\r\n let pageX:number\r\n let curCol: HTMLElement;\r\n let nxtCol: HTMLElement;\r\n let curColWidth: number;\r\n let nxtColWidth: number;\r\n let tableWidth: number;\r\n\r\n div.addEventListener('click', e => e.stopPropagation());\r\n\r\n div.addEventListener('mousedown', function (e) {\r\n curCol = (e.target as HTMLElement).parentElement;\r\n nxtCol = curCol.nextElementSibling as HTMLElement;\r\n pageX = e.pageX;\r\n\r\n tableWidth = table.offsetWidth;\r\n\r\n var padding = paddingDiff(curCol);\r\n\r\n curColWidth = curCol.offsetWidth - padding;\r\n if (nxtCol)\r\n nxtColWidth = nxtCol.offsetWidth - padding;\r\n });\r\n\r\n document.addEventListener(\"mousemove\", function (e) {\r\n if (curCol) {\r\n let diffX = e.pageX - pageX;\r\n\r\n const isRtl = dataTable.classList.contains(\"m-data-table--rtl\")\r\n if (isRtl) {\r\n diffX = 0 - diffX;\r\n }\r\n\r\n let newCurColWidth = curColWidth + diffX;\r\n\r\n curCol.style.width = newCurColWidth + \"px\";\r\n\r\n const isOverflow = dataTable.classList.contains(\r\n \"m-data-table--resizable-overflow\"\r\n );\r\n if (isOverflow) {\r\n table.style.width = tableWidth + diffX + \"px\";\r\n return;\r\n }\r\n\r\n const isIndependent = dataTable.classList.contains(\r\n \"m-data-table--resizable-independent\"\r\n );\r\n if (isIndependent) {\r\n let newNextColWidth = nxtColWidth - diffX;\r\n const twoColWidth = curColWidth + nxtColWidth;\r\n\r\n if (diffX > 0) {\r\n if (nxtCol) {\r\n if (newNextColWidth < nxtCol[\"minWidth\"]) {\r\n newNextColWidth = nxtCol[\"minWidth\"];\r\n newCurColWidth = twoColWidth - newNextColWidth;\r\n }\r\n }\r\n } else {\r\n if (newCurColWidth < curCol[\"minWidth\"]) {\r\n newCurColWidth = curCol[\"minWidth\"];\r\n newNextColWidth = twoColWidth - newCurColWidth;\r\n }\r\n }\r\n\r\n curCol.style.width = newCurColWidth + \"px\";\r\n\r\n if (nxtCol) {\r\n nxtCol.style.width = newNextColWidth + \"px\";\r\n }\r\n }\r\n }\r\n });\r\n\r\n document.addEventListener('mouseup', function (e) {\r\n if (curCol) {\r\n for (let i = 0; i < cols.length; i++) {\r\n const col:any = cols[i];\r\n col.style.width = col['offsetWidth'] + \"px\"\r\n }\r\n }\r\n curCol = undefined;\r\n nxtCol = undefined;\r\n pageX = undefined;\r\n nxtColWidth = undefined;\r\n curColWidth = undefined;\r\n tableWidth = undefined;\r\n });\r\n }\r\n\r\n function paddingDiff(col) {\r\n if (getStyleVal(col, 'box-sizing') == 'border-box') {\r\n return 0;\r\n }\r\n\r\n var padLeft = getStyleVal(col, 'padding-left');\r\n var padRight = getStyleVal(col, 'padding-right');\r\n return (parseInt(padLeft) + parseInt(padRight));\r\n }\r\n\r\n function getStyleVal(elm, css) {\r\n return (window.getComputedStyle(elm, null).getPropertyValue(css))\r\n }\r\n}\r\n\r\nexport function updateDataTableResizeHeight(dataTable: HTMLElement) {\r\n const table = dataTable.querySelector('table')\r\n const row = table.querySelector('.m-data-table-header').getElementsByTagName('tr')[0];\r\n const cols = row ? row.children : [];\r\n if (!cols) return;\r\n\r\n const tableHeight = table.offsetHeight;\r\n\r\n for (var i = 0; i < cols.length; i++) {\r\n const col: any = cols[i];\r\n const colResizeDiv: HTMLDivElement = col.querySelector(\".m-data-table-header__col-resize\");\r\n colResizeDiv.style.height = tableHeight + \"px\"\r\n }\r\n}","import { rippleHide, rippleShow } from \"./ripple\";\r\n\r\nexport default function registerDirective() {\r\n var observer = new MutationObserver(function (mutationsList) {\r\n for (let mutation of mutationsList) {\r\n if (mutation.type === \"childList\") {\r\n var target: any = mutation.target;\r\n //ripple\r\n if (!target._bind && target.attributes && target.attributes[\"ripple\"]) {\r\n target.addEventListener(\"mousedown\", rippleShow);\r\n target.addEventListener(\"mouseup\", rippleHide);\r\n target.addEventListener(\"mouseleave\", rippleHide);\r\n\r\n target._bind = true;\r\n } else if (target.nodeName == \"BODY\") {\r\n var rippleEls = document.querySelectorAll(\"[ripple]\");\r\n for (let rippleEl of rippleEls) {\r\n var el: any = rippleEl;\r\n if (!el._bind) {\r\n el.addEventListener(\"mousedown\", rippleShow);\r\n el.addEventListener(\"mouseup\", rippleHide);\r\n el.addEventListener(\"mouseleave\", rippleHide);\r\n\r\n el._bind = true;\r\n }\r\n }\r\n }\r\n } else if (mutation.type === \"attributes\") {\r\n //ripple\r\n if (mutation.attributeName == \"ripple\") {\r\n var target: any = mutation.target;\r\n if (target.attributes[\"ripple\"]) {\r\n target.addEventListener(\"mousedown\", rippleShow);\r\n target.addEventListener(\"mouseup\", rippleHide);\r\n target.addEventListener(\"mouseleave\", rippleHide);\r\n } else {\r\n target.removeEventListener(\"mousedown\", rippleShow);\r\n target.removeEventListener(\"mouseup\", rippleHide);\r\n target.removeEventListener(\"mouseleave\", rippleHide);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n observer.observe(document, {\r\n attributes: true,\r\n subtree: true,\r\n childList: true,\r\n attributeFilter: [\"ripple\"],\r\n });\r\n}\r\n","// Utilities\r\nimport { addPassiveEventListener, composedPath, getDom, keyCodes } from \"../../utils/helper\";\r\n\r\nvar wheelListenerCaches: { [key: string]: any } = {}\r\n\r\nexport function hideScroll(fullscreen: boolean, overlaySelector: string, content, dialog) {\r\n if (fullscreen) {\r\n document.documentElement!.classList.add('overflow-y-hidden')\r\n } else {\r\n if (!overlaySelector) return\r\n const overlay = getDom(overlaySelector);\r\n const listener = (e) => {\r\n scrollListener(e, overlay, content, dialog)\r\n }\r\n\r\n wheelListenerCaches[`window_${overlaySelector}`] = listener;\r\n\r\n addPassiveEventListener(window, 'wheel', listener, { passive: false })\r\n window.addEventListener('keydown', listener)\r\n }\r\n}\r\n\r\nexport function showScroll (overlaySelector) {\r\n document.documentElement!.classList.remove('overflow-y-hidden')\r\n\r\n var listener = wheelListenerCaches[`window_${overlaySelector}`]\r\n if (listener) {\r\n window.removeEventListener('wheel', listener)\r\n window.removeEventListener('keydown', listener)\r\n }\r\n}\r\n\r\nfunction scrollListener (e: WheelEvent & KeyboardEvent, overlay, content, dialog) {\r\n if (e.type === 'keydown') {\r\n if (\r\n ['INPUT', 'TEXTAREA', 'SELECT'].includes((e.target as Element).tagName) ||\r\n // https://github.com/vuetifyjs/vuetify/issues/4715\r\n (e.target as HTMLElement).isContentEditable\r\n ) return\r\n\r\n const up:number[] = [keyCodes.up, keyCodes.pageup]\r\n const down:number[] = [keyCodes.down, keyCodes.pagedown]\r\n\r\n if (up.includes(e.keyCode)) {\r\n (e as any).deltaY = -1\r\n } else if (down.includes(e.keyCode)) {\r\n (e as any).deltaY = 1\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n if (e.target === overlay ||\r\n (e.type !== 'keydown' && e.target === document.body) ||\r\n checkPath(e, content, dialog)) e.preventDefault()\r\n}\r\n\r\nfunction checkPath(e: WheelEvent, content, dialog) {\r\n const path = composedPath(e)\r\n\r\n if (e.type === 'keydown' && path[0] === document.body) {\r\n // getSelection returns null in firefox in some edge cases, can be ignored\r\n const selected = window.getSelection()!.anchorNode as Element\r\n if (dialog && hasScrollbar(dialog) && isInside(selected, dialog)) {\r\n return !shouldScroll(dialog, e)\r\n }\r\n return true\r\n }\r\n\r\n for (let index = 0; index < path.length; index++) {\r\n const el = path[index]\r\n\r\n if (el === document) return true\r\n if (el === document.documentElement) return true\r\n if (el === content) return true\r\n\r\n if (hasScrollbar(el as Element)) return !shouldScroll(el as Element, e)\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction shouldScroll(el: Element, e: WheelEvent): boolean {\r\n if (el.hasAttribute('data-app')) return false\r\n\r\n const dir = e.shiftKey || e.deltaX ? 'x' : 'y'\r\n const delta = dir === 'y' ? e.deltaY : e.deltaX || e.deltaY\r\n\r\n let alreadyAtStart: boolean\r\n let alreadyAtEnd: boolean\r\n if (dir === 'y') {\r\n alreadyAtStart = el.scrollTop === 0\r\n alreadyAtEnd = el.scrollTop + el.clientHeight === el.scrollHeight\r\n } else {\r\n alreadyAtStart = el.scrollLeft === 0\r\n alreadyAtEnd = el.scrollLeft + el.clientWidth === el.scrollWidth\r\n }\r\n\r\n const scrollingUp = delta < 0\r\n const scrollingDown = delta > 0\r\n\r\n if (!alreadyAtStart && scrollingUp) return true\r\n if (!alreadyAtEnd && scrollingDown) return true\r\n if ((alreadyAtStart || alreadyAtEnd)) {\r\n return shouldScroll(el.parentNode as Element, e)\r\n }\r\n\r\n return false\r\n}\r\n\r\nfunction isInside(el: Element, parent: Element): boolean {\r\n if (el === parent) {\r\n return true\r\n } else if (el === null || el === document.body) {\r\n return false\r\n } else {\r\n return isInside(el.parentNode as Element, parent)\r\n }\r\n}\r\n\r\nfunction hasScrollbar(el?: Element) {\r\n if (!el || el.nodeType !== Node.ELEMENT_NODE) return false\r\n\r\n const style = window.getComputedStyle(el)\r\n return ((['auto', 'scroll'].includes(style.overflowY!) || el.tagName === 'SELECT') && el.scrollHeight > el.clientHeight) ||\r\n ((['auto', 'scroll'].includes(style.overflowX!)) && el.scrollWidth > el.clientWidth)\r\n}\r\n","import * as interop from \"./interop\";\r\nimport * as overlayable from \"./mixins/overlayable\";\r\n\r\ndeclare global {\r\n interface Window {\r\n BlazorComponent: any;\r\n MasaBlazor: any;\r\n }\r\n}\r\n\r\nwindow.BlazorComponent = {\r\n interop: {\r\n ...interop,\r\n ...overlayable,\r\n },\r\n};\r\n\r\nwindow.MasaBlazor = {};\r\n"],"names":["functionDebounce","fn","wait","callFirst","timeout","debouncedFn","clear","clearTimeout","debounceWrapper","apply","this","arguments","context","args","callNow","setTimeout","call","cancel","flush","functionThrottle","interval","options","timeoutId","throttledFn","leading","trailing","throttleWrapper","transform","el","value","style","webkitTransform","opacity","toString","ripples","show","e","container","document","createElement","animation","appendChild","className","radius","scale","x","y","centerX","centerY","localX","localY","offset","getBoundingClientRect","target","clientX","left","clientY","top","Math","sqrt","clientWidth","clientHeight","calculate","size","width","height","computed","window","getComputedStyle","position","dataset","previousPosition","classList","add","activated","String","performance","now","remove","hide","getElementsByClassName","length","isHiding","diff","Number","delay","max","parentNode","removeChild","rippleShow","currentTarget","rippleHide","touchEvents","parseMouseEvent","event","detail","screenX","screenY","offsetX","offsetY","pageX","pageY","button","buttons","ctrlKey","shiftKey","altKey","metaKey","type","parseTouchEvent","touches","parseTouch","targetTouches","changedTouches","touchList","i","touch","push","identifier","passiveSupported","testListenerOpts","Object","defineProperty","get","addEventListener","removeEventListener","console","warn","keyCodes","freeze","enter","tab","delete","esc","space","up","down","right","end","home","del","backspace","insert","pageup","pagedown","shift","getBlazorId","_bl_","getAttributeNames","find","a","startsWith","substring","getElementSelector","Element","path","nodeType","Node","ELEMENT_NODE","selector","nodeName","toLowerCase","id","unshift","sib","nth","previousElementSibling","join","getDom","elOrString","element","documentElement","indexOf","array","split","querySelector","HTMLElement","body","error","registerExtraMouseEvent","eventType","eventName","Blazor","registerCustomEventType","browserEventName","createEventArgs","createSharedEventArgs","registerExtraDropEvent","eventArgs","assign","dataTransfer","dropEffect","effectAllowed","files","Array","from","map","f","name","items","kind","types","getData","elementReferenceId","getAttribute","registerExtraEvents","registerEvent","getZIndex","index","getPropertyValue","getDomInfoObj","dom","result","offsetTop","offsetLeft","scrollHeight","scrollWidth","scrollLeft","scrollTop","clientTop","clientLeft","res","viewportElement","box","offsetWidth","offsetHeight","relativeTop","relativeBottom","bottom","relativeLeft","relativeRight","absoluteLeft","absoluteTop","getElementPos","round","htmlElementEventListenerConfigs","getActiveElement","activeElement","getWindowAndDocumentProps","windowProps","documentProps","obj","forEach","prop","getMenuOrDialogMaxZIndex","exclude","zis","activeElements","includes","getMenuableDimensions","hasActivator","activatorSelector","isDefaultAttach","contentElement","attached","attachSelector","dimensions","activator","content","relativeYOffset","offsetParentLeft","measure","cb","display","sneakPeek","offsetParent","offsetRect","getRoundedBoundedClientRect","pageYOffset","pageXOffset","rect","parseInt","marginLeft","marginTop","otpInputKeyupEvent","otpIdx","elementList","callback","preventDefault","eventKey","key","invokeMethodAsync","JSON","stringify","otpInputFocus","focusIndex","focus","otpInputFocusEvent","select","otpInputOnInputEvent","get_top_domain","h","weird_cookie","hostname","location","slice","cookie","onload","customEventName","pastedData","clipboardData","MutationObserver","mutationsList","mutation","_bind","attributes","rippleEls","querySelectorAll","rippleEl","attributeName","observe","subtree","childList","attributeFilter","cloned","cloneNode","parentElement","stopPropagation","evt","createEvent","initEvent","dispatchEvent","attach","_a","_b","invoker","extras","htmlElement","config","listener","relatedTarget","contains","k","debounce","debounceIt","throttle","handle","configs","item","dispose","e1","e2","dom1","dom2","text","navigator","clipboard","writeText","then","log","err","textArea","msg","execCommand","fallbackCopyTextToClipboard","noScroll","Error","preventScroll","HTMLInputElement","HTMLTextAreaElement","blur","arg","undefined","scrollIntoView","block","inline","behavior","start","level","parent","to","scrollTo","o","offsetPosition","activeEl","containerEl","firstElementChild","getAbsoluteTop","getAbsoluteLeft","addElement","elementSelector","delElement","focusDialog","count","ele","hasAttribute","innerWidth","innerHeight","isTop","scrollY","isBottom","hasOwnProperty","clsName","innerText","all","reduce","r","zIndex","styleProp","currentStyle","defaultView","parseFloat","is","NaN","objReferenceName","d","getElementById","head","d_style","innerHTML","insertAdjacentElement","src","Promise","resolve","reject","img","Image","hasError","onerror","condition","isArray","code","elements","selectors","sizeProp","overflow","charAt","toUpperCase","isActive","itemEl","inputElement","mouseEventArgs","Detail","ScreenX","ScreenY","ClientX","ClientY","OffsetX","OffsetY","PageX","PageY","Button","Buttons","CtrlKey","ShiftKey","AltKey","MetaKey","Type","setAttribute","removeAttribute","multipleResult","windowAndDocument","inputListener","focusListener","keyupListener","_optInput","attribute","tiles","contentSelector","tilesSelector","keyCode","tile","contentHeight","translateY","threshold","elementTop","domain","isNaN","exp","Date","setTime","getTime","Days","escape","toUTCString","reg","RegExp","arr","match","unescape","dataKey","blazorId","dataValue","setData","dataTable","table","row","getElementsByTagName","cols","children","tableHeight","col","colResizeDiv","minWidth","setListeners","div","curCol","nxtCol","curColWidth","nxtColWidth","tableWidth","nextElementSibling","padding","getStyleVal","padLeft","padRight","paddingDiff","diffX","newCurColWidth","newNextColWidth","twoColWidth","elm","css","wheelListenerCaches","shouldScroll","dir","deltaX","delta","deltaY","alreadyAtStart","alreadyAtEnd","isInside","hasScrollbar","overflowY","tagName","overflowX","fullscreen","overlaySelector","dialog","overlay","isContentEditable","composedPath","selected","getSelection","anchorNode","checkPath","scrollListener","passive","BlazorComponent","interop","overlayable","MasaBlazor"],"mappings":"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"}