{"version":3,"file":"blazor-component.js","sources":["../../../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":["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.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\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 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 { 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 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 { 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}\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 registerDirective from \"./directive/index\";\r\nimport { parseTouchEvent, touchEvents } from \"./events/EventType\";\r\nimport { registerExtraEvents } from \"./events/index\";\r\nimport { 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]: any[] } = {}\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 var config = {};\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 let timeout;\r\n config[\"listener\"] = function (args: any) {\r\n clearTimeout(timeout)\r\n timeout = setTimeout(() => listener(args), extras.debounce);\r\n }\r\n }\r\n else if (extras?.throttle && extras.throttle > 0) {\r\n let throttled: boolean;\r\n config[\"listener\"] = function (args: any) {\r\n if (!throttled) {\r\n listener(args)\r\n throttled = true;\r\n setTimeout(() => {\r\n throttled = false;\r\n }, (extras?.throttle ?? 0));\r\n }\r\n }\r\n } else {\r\n config[\"listener\"] = listener;\r\n }\r\n\r\n config['options'] = options;\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\"], 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 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 resizeObserver(selector: string, invoker: DotNet.DotNetObject) {\r\n var el = document.querySelector(selector);\r\n if (!el) return;\r\n\r\n const resizeObserver = new ResizeObserver((entries => {\r\n const dimensions = [];\r\n for (var entry of entries) {\r\n const dimension = entry.contentRect;\r\n dimensions.push(dimension);\r\n }\r\n invoker.invokeMethodAsync('Invoke', dimensions);\r\n }));\r\n\r\n resizeObserver.observe(el);\r\n}\r\n\r\nexport function intersectionObserver(selector: string, invokers: DotNet.DotNetObject[]) {\r\n var el = document.querySelector(selector);\r\n if (!el) return;\r\n\r\n const observer = new IntersectionObserver((\r\n entries: IntersectionObserverEntry[] = [],\r\n observer: IntersectionObserver\r\n ) => {\r\n if (entries.some(e => e.isIntersecting)) {\r\n invokers.forEach(item => {\r\n item.invokeMethodAsync('Invoke')\r\n })\r\n }\r\n })\r\n\r\n observer.observe(el)\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 element.addEventListener('mousedown', (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\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 elementList[i].addEventListener('input', (e: Event) => otpInputOnInputEvent(e, i, elementList, callback));\r\n elementList[i].addEventListener('focus', (e: Event) => otpInputFocusEvent(e, i, elementList));\r\n elementList[i].addEventListener('keyup', (e: KeyboardEvent) => otpInputKeyupEvent(e, i, elementList, callback));\r\n }\r\n}\r\n\r\nexport function 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\nexport function 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\nexport function 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\nexport function 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 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}","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":["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","setTimeout","remove","hide","getElementsByClassName","length","isHiding","diff","Number","delay","max","parentNode","removeChild","rippleShow","currentTarget","rippleHide","touchEvents","parseTouchEvent","event","detail","touches","parseTouch","targetTouches","changedTouches","ctrlKey","shiftKey","altKey","metaKey","type","touchList","i","touch","push","identifier","screenX","screenY","pageX","pageY","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","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","args","assign","offsetX","offsetY","button","buttons","elementReferenceId","getAttributeNames","find","a","startsWith","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","getData","MutationObserver","mutationsList","mutation","_bind","attributes","rippleEls","querySelectorAll","rippleEl","attributeName","observe","subtree","childList","attributeFilter","cloned","cloneNode","parentElement","stopPropagation","evt","createEvent","initEvent","dispatchEvent","name","attach","_a","_b","invoker","options","extras","htmlElement","config","listener","relatedTarget","contains","k","debounce","timeout","clearTimeout","throttle","throttled","configs","item","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","Array","isArray","code","ResizeObserver","entries","entry","dimension","contentRect","invokers","IntersectionObserver","observer","some","isIntersecting","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","attribute","tiles","contentSelector","tilesSelector","keyCode","tile","contentHeight","translateY","threshold","elementTop","domain","isNaN","exp","Date","setTime","getTime","Days","escape","toUTCString","reg","RegExp","arr","match","unescape","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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"}