{"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 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","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 } 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 addStepperEventListener(element: HTMLElement, isActive: Boolean) {\r\n if (element?.addEventListener) {\r\n element.addEventListener(\r\n 'transitionend',\r\n e => onTransition(e, isActive, element),\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport function removeStepperEventListener(element: HTMLElement, isActive: Boolean) {\r\n if (element?.removeEventListener) {\r\n element.removeEventListener(\r\n 'transitionend',\r\n e => onTransition(e, isActive, element),\r\n false\r\n );\r\n }\r\n}\r\n\r\nexport function initStepperWrapper(element: HTMLElement) {\r\n if (!element.classList.contains('active')) {\r\n element.style.display = 'none';\r\n }\r\n\r\n var observer = new MutationObserver(function (mutationsList) {\r\n for (let mutation of mutationsList) {\r\n if (mutation.type === 'attributes') {\r\n if (mutation.attributeName == 'class') {\r\n var target: HTMLElement = mutation.target as HTMLElement;\r\n if (target.classList.contains('active')) {\r\n target.style.display = '';\r\n enter(target, true);\r\n } else {\r\n leave(target);\r\n setTimeout(() => {\r\n target.style.display = 'none';\r\n }, 300);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n observer.observe(element, { attributes: true, attributeFilter: ['class'] });\r\n}\r\n\r\nfunction onTransition(e: TransitionEvent, isActive: Boolean, element: HTMLElement) {\r\n if (!isActive ||\r\n e.propertyName !== 'height'\r\n ) return\r\n\r\n element.style.height = 'auto';\r\n}\r\n\r\nfunction enter(element: HTMLElement, isActive: Boolean) {\r\n let scrollHeight = 0\r\n\r\n // Render bug with height\r\n requestAnimationFrame(() => {\r\n scrollHeight = element.scrollHeight;\r\n });\r\n\r\n element.style.height = 0 + 'px';\r\n // Give the collapsing element time to collapse\r\n setTimeout(() => isActive && (element.style.height = (scrollHeight + 'px' || 'auto')), 450)\r\n}\r\n\r\nfunction leave(element: HTMLElement) {\r\n element.style.height = element.clientHeight + 'px';\r\n setTimeout(() => {\r\n element.style.height = 0 + 'px';\r\n }, 10)\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 htmlElementEventListennerConfigs: { [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 = (args: any): void => {\r\n if (extras?.stopPropagation) {\r\n args.stopPropagation();\r\n }\r\n\r\n if (extras?.preventDefault) {\r\n args.preventDefault();\r\n }\r\n\r\n // mouseleave relatedTarget\r\n if (extras?.relatedTarget && document.querySelector(extras.relatedTarget)?.contains(args.relatedTarget)) {\r\n return;\r\n }\r\n\r\n let obj = {};\r\n\r\n for (var k in args) {\r\n if (typeof args[k] == 'string' || typeof args[k] == 'number') {\r\n obj[k] = args[k];\r\n } else if (k == 'target' && args.target.attributes) {\r\n var target = {\r\n attributes: {}\r\n };\r\n\r\n for (let index = 0; index < args.target.attributes.length; index++) {\r\n const attr = args.target.attributes[index];\r\n target.attributes[attr.name] = attr.value;\r\n }\r\n obj[k] = target;\r\n } else if (k == 'touches' || k == 'targetTouches' || k == 'changedTouches') {\r\n obj = parseTouchEvent(args)\r\n }\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 (htmlElementEventListennerConfigs[key]) {\r\n htmlElementEventListennerConfigs[key].push(config);\r\n } else {\r\n htmlElementEventListennerConfigs[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 = htmlElementEventListennerConfigs[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 htmlElementEventListennerConfigs[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(container, target) {\r\n let dom: HTMLElement = getDom(container);\r\n\r\n target = dom.querySelector('.active') as HTMLElement;\r\n if (!target) {\r\n return;\r\n }\r\n\r\n dom.scrollTop = target.offsetTop - dom.offsetHeight / 2 + target.offsetHeight / 2;\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 isMobile() {\r\n return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4));\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","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","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","Element","path","nodeType","Node","ELEMENT_NODE","selector","nodeName","toLowerCase","id","unshift","sib","nth","previousElementSibling","join","getElementSelector","getAttribute","registerExtraEvents","registerEvent","getZIndex","index","getPropertyValue","onTransition","isActive","propertyName","scrollHeight","requestAnimationFrame","leave","getDomInfoObj","dom","result","offsetTop","offsetLeft","scrollWidth","scrollLeft","scrollTop","clientTop","clientLeft","res","viewportElement","box","offsetWidth","offsetHeight","relativeTop","relativeBottom","bottom","relativeLeft","relativeRight","absoluteLeft","absoluteTop","getElementPos","round","htmlElementEventListennerConfigs","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","contains","cloned","cloneNode","parentElement","stopPropagation","evt","createEvent","initEvent","dispatchEvent","name","attach","_a","_b","invoker","options","extras","htmlElement","config","listener","relatedTarget","k","attr","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","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","itemEl","inputElement","mouseEventArgs","Detail","ScreenX","ScreenY","ClientX","ClientY","OffsetX","OffsetY","PageX","PageY","Button","Buttons","CtrlKey","ShiftKey","AltKey","MetaKey","Type","test","userAgent","substr","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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"}