@pure-ds/core 0.7.48 → 0.7.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/pds.d.ts +7 -5
- package/dist/types/public/assets/pds/components/pds-toaster.d.ts +4 -1
- package/dist/types/public/assets/pds/components/pds-toaster.d.ts.map +1 -1
- package/dist/types/src/js/common/toast.d.ts +9 -0
- package/dist/types/src/js/common/toast.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/assets/js/app.js +2131 -5
- package/public/assets/js/app.js.map +7 -0
- package/public/assets/js/lit.js +1031 -3
- package/public/assets/js/lit.js.map +7 -0
- package/public/assets/js/pds-ask.js +464 -9
- package/public/assets/js/pds-ask.js.map +7 -0
- package/public/assets/js/pds-autocomplete.js +639 -7
- package/public/assets/js/pds-autocomplete.js.map +7 -0
- package/public/assets/js/pds-enhancers.js +1471 -1
- package/public/assets/js/pds-enhancers.js.map +7 -0
- package/public/assets/js/pds-manager.js +17568 -3384
- package/public/assets/js/pds-manager.js.map +7 -0
- package/public/assets/js/pds-toast.js +30 -1
- package/public/assets/js/pds-toast.js.map +7 -0
- package/public/assets/js/pds.js +1969 -2
- package/public/assets/js/pds.js.map +7 -0
- package/public/assets/pds/components/pds-toaster.js +25 -7
- package/public/assets/pds/core/pds-ask.js +464 -9
- package/public/assets/pds/core/pds-autocomplete.js +639 -7
- package/public/assets/pds/core/pds-enhancers.js +1471 -1
- package/public/assets/pds/core/pds-manager.js +17568 -3384
- package/public/assets/pds/core/pds-toast.js +30 -1
- package/public/assets/pds/core.js +1969 -2
- package/public/assets/pds/external/lit.js +1031 -3
- package/src/js/common/toast.js +8 -0
- package/src/js/pds-core/pds-generator.js +1 -1
- package/src/js/pds.d.ts +7 -5
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/pure-web/src/js/common.js", "../../../node_modules/pure-web/src/js/autocomplete.js", "../../../src/js/pds-autocomplete.js"],
|
|
4
|
+
"sourcesContent": ["let ctlNr = 1000;\n\n/**\n * Returns a contextual unique identifier with the given prefix\n * @param {String} prefix\n * @param {Number} radix\n * @returns { String} unique identifier\n */\nexport function getUniqueName(prefix = \"df\", radix = 16) {\n return `${prefix}${(ctlNr++).toString(radix)}`;\n}\n\n/**\n * Generates an HTML NodeList by parsing the given HTML string\n * @param {String} html\n * @returns {NodeListOf<ChildNode>} DOM element\n */\nexport function parseHTML(html) {\n return new DOMParser().parseFromString(html, \"text/html\").body.childNodes;\n}\n\n/**\n * Debounces events that occur repeatedly, such as resize and mousemove events.\n * @param {Function} fn\n */\nexport function debounce(fn) {\n // This holds the requestAnimationFrame reference, so we can cancel it if we wish\n let frame;\n\n // The debounce function returns a new function that can receive a variable number of arguments\n return (...params) => {\n // If the frame variable has been defined, clear it now, and queue for next frame\n if (frame) {\n cancelAnimationFrame(frame);\n }\n\n // Queue our function call for the next frame\n frame = requestAnimationFrame(() => {\n // Call our function and pass any params we received\n fn(...params);\n });\n };\n}\n\n/**\n * Throttles execution of any function\n * @param {Function} fn - Function to fire\n * @param {Number} timeoutMs - time in milliseconds to buffer all calls to fn.\n */\nexport function throttle(fn, timeoutMs = 100) {\n let handle;\n return function executedFunction(...args) {\n const fire = () => {\n clearTimeout(handle);\n fn(...args);\n };\n clearTimeout(handle);\n handle = setTimeout(fire, timeoutMs);\n };\n}\n\n/**\n * Queues a call for when the main thread is free.\n * @param {Function} fn - the function to call\n */\nexport function enQueue(fn) {\n setTimeout(fn, 0);\n}\n\n/**\n * Returns true if the given string is a valid URL.\n * @param {String} str\n * @returns { Boolean }\n */\nexport function isUrl(str) {\n try {\n if (typeof str !== \"string\") return false;\n if (str.indexOf(\"\\n\") !== -1 || str.indexOf(\" \") !== -1) return false;\n if (str.startsWith(\"#/\")) return false;\n const newUrl = new URL(str, window.location.origin);\n return newUrl.protocol === \"http:\" || newUrl.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\n/**\n * Opens a window and returns the handle.\n * @param {String} url\n * @param {Number} width\n * @param {Number} height\n * @returns window handle reference\n */\nexport function openCenteredWindow(url, width, height) {\n const left = window.screen.width / 2 - width / 2;\n const top = window.screen.height / 2 - height / 2;\n return window.open(\n url,\n \"\",\n `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=${width}, height=${height}, top=${top}, left=${left}`\n );\n}\n\n/**\n * Input Template.\n * @type {string}\n */\nconst inputTemplate = /*html*/ `\n<label>\n <span data-label></span>\n <span class=\"placeholder\"></span>\n</label>`;\n\n/**\n * Enhance inputs having data-label attribute.\n *\n * @param {HTMLElement|Document|null} root On which root element we should apply it.\n */\nexport function enhanceInputWithLabel(input) {\n const labelText = input.getAttribute(\"data-label\") ?? \"\";\n if (labelText.length) {\n const label = parseHTML(inputTemplate)[0];\n const type = input.getAttribute(\"type\") || \"text\";\n input.insertAdjacentElement(\"beforebegin\", label);\n label.querySelector(\".placeholder\").replaceWith(input);\n label.querySelector(\"span[data-label]\").textContent = labelText;\n input.removeAttribute(\"data-label\");\n input.setAttribute(\"type\", type);\n }\n\n const icon = input.getAttribute(\"data-icon\") || \"\";\n if (icon) {\n const iconColor = input.getAttribute(\"data-icon-color\") || \"\";\n const iconSize = input.getAttribute(\"data-icon-size\") || \"\";\n const iconHtml = /*html*/ `<svg-icon icon=\"${icon}\" color=\"${iconColor}\" size=\"${iconSize}\"></svg-icon>`;\n input.insertAdjacentElement(\"afterend\", parseHTML(iconHtml)[0]);\n }\n}\n\nlet uniqueNavId;\n/**\n * Enhances a <nav data-dropdown><button></button><menu></menu></nav> structure\n * to become a dropdown button.\n * @param {HTMLElement} nav\n * @returns {String} return value indicating the enhancement has been applied.\n */\nexport function enhanceNavDropdownButton(nav) {\n const button = nav.querySelector(\"button\");\n if (button.textContent.trim().length === 0) {\n const span = document.createElement(\"span\");\n span.innerHTML = \" \";\n span.setAttribute(\"data-label\", \"\");\n span.setAttribute(\"hidden\", \"\");\n button.appendChild(span);\n }\n const menu = nav.querySelector(\"menu\");\n menu.setAttribute(\"role\", \"menu\");\n menu.setAttribute(\"hidden\", \"\");\n\n uniqueNavId = getUniqueName(\"nav\");\n\n nav.setAttribute(\"aria-controls\", uniqueNavId);\n nav.setAttribute(\"aria-haspopup\", \"true\");\n nav.setAttribute(\"aria-expanded\", \"false\");\n menu.setAttribute(\"id\", uniqueNavId);\n [...menu.children].forEach((li) => {\n li.setAttribute(\"role\", \"menuitem\");\n });\n\n button.addEventListener(\"click\", () => {\n const hidden = menu.hasAttribute(\"hidden\");\n if (hidden) {\n menu.removeAttribute(\"hidden\");\n\n setTimeout(() => {\n document.addEventListener(\n \"click\",\n (e) => {\n if (!nav.contains(e.target)) button.click();\n },\n {\n once: true,\n }\n );\n }, 100);\n } else menu.setAttribute(\"hidden\", \"\");\n });\n return \"nav\";\n}\n\n/**\n * Returns a string that displays the element in a CSS-type,\n * readable way, following CSS selector syntax.\n * @param {HTMLElement} element\n * @returns {String} human readable string that identifies the element.\n */\nexport function getElementSelector(element) {\n const id = element.id ? \"#\" + element.id : \"\";\n let cls = [...element.classList].join(\".\");\n if (cls) cls = \".\" + cls;\n return `${element.nodeName.toLowerCase()}${id}${cls}`;\n}\n\n/**\n * Enhances a regular grid to become a masonry grid\n * @param {HTMLElement} element\n */\nexport function enhanceMasonryGrid(element) {\n element.style.setProperty(\"grid-auto-rows\", \"20px\");\n\n addStyleSheet(/*css*/ `\n .masonry {\n opacity: 0;\n }\n\n .masonry-applied {\n opacity: 1;\n transition: opacity .2s ease\n }\n `);\n\n const resizeGridItem = (item) => {\n const rowHeight = parseInt(\n window.getComputedStyle(element).getPropertyValue(\"grid-auto-rows\")\n );\n const rowGap = parseInt(\n window.getComputedStyle(element).getPropertyValue(\"grid-row-gap\")\n );\n const content = item.querySelector(\":scope > *\") ?? item;\n const rowSpan = Math.ceil(\n (content.getBoundingClientRect().height + rowGap) / (rowHeight + rowGap)\n );\n item.style.gridRowEnd = \"span \" + rowSpan;\n };\n\n const resizeAllGridItems = () => {\n try {\n element.classList.remove(\"masonry-applied\");\n for (const item of element.children) resizeGridItem(item);\n } finally {\n element.classList.add(\"masonry-applied\");\n }\n };\n\n window.addEventListener(\"resize\", throttle(resizeAllGridItems, 100));\n waitForImages(element).then(resizeAllGridItems);\n\n return \"masonry\";\n}\n\n/**\n * Returns a Promise that resolves when all images in the given container have downloaded.\n */\nexport function waitForImages(container) {\n const imgElements = container.querySelectorAll(\"img\");\n\n const imgPromises = Array.from(imgElements).map((img) => {\n return new Promise((resolve, reject) => {\n const imgSrc = img.src;\n const image = new Image();\n image.onload = () => resolve(imgSrc);\n image.onerror = (error) => reject(error);\n image.src = imgSrc;\n });\n });\n return Promise.all(imgPromises);\n}\n\n/**\n * Creates\n * @param {String} cssText\n * @returns {String} id of the style element\n */\nexport function addStyleSheet(cssText) {\n const id = generateHash(cssText);\n let styleElement = document.getElementById(id);\n if (!styleElement) {\n styleElement = document.createElement(\"style\");\n styleElement.id = id;\n styleElement.textContent = cssText;\n document.querySelector(\"head\").appendChild(styleElement);\n }\n return id;\n}\n\n/**\n * Generates a hash that uniquely identifies a string\n * @param {String} str\n * @param {Number} seed\n * @returns {String }\n */\nexport function generateHash(str, seed = 0) {\n let h1 = 0xdeadbeef ^ seed,\n h2 = 0x41c6ce57 ^ seed;\n for (let i = 0, ch; i < str.length; i++) {\n ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 =\n Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^\n Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 =\n Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^\n Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n const hashNr = 4294967296 * (2097151 & h2) + (h1 >>> 0);\n const radix = 16;\n return `h${hashNr.toString(radix)}`;\n}\n\n/**\n * Enhance buttons with [data-prepend-icon] and [data-append-icon]\n * @param {HTMLButtonElement} button\n */\nexport function enhanceButtonWithIcon(button) {\n [\"prepend\", \"append\"].forEach((position) => {\n const icon = button.getAttribute(`data-${position}-icon`) ?? \"\";\n if (icon) {\n button.removeAttribute(`data-${position}-icon`);\n button.classList.add(\"icon\", position === \"prepend\" ? \"left\" : \"right\");\n const svgIcon = parseHTML(`<svg-icon icon=\"${icon}\"></svg-icon>`)[0];\n button.insertBefore(svgIcon, button.childNodes[0]);\n }\n return \"icon-button\";\n });\n}\n\n/**\n * Progressively enhances a range input into a social rating control\n * @param {HtmlElement} range input\n */\nexport function enhanceRangeStars(range) {\n if (!(range instanceof HTMLInputElement) || range.type !== \"range\") return;\n\n const inputTemplate = /*html*/ `<span class=\"stars-rating\">\n <span class=\"placeholder\"></span>\n </span>`;\n\n range.classList.remove(\"stars-rating\");\n const surroundingSpan = parseHTML(inputTemplate)[0];\n range.insertAdjacentElement(\"beforebegin\", surroundingSpan);\n surroundingSpan.querySelector(\".placeholder\").replaceWith(range);\n range.max = range.max ?? 5;\n\n range.id = range.id ?? getUniqueName();\n surroundingSpan.style.setProperty(\"--max-value\", Number(range.max));\n\n const output = parseHTML(\n /*html*/ `<output for=\"${range.id}\" data-max=\"${range.max}\"></output>`\n )[0];\n surroundingSpan.appendChild(output);\n const update = (value) => {\n range.setAttribute(\"value\", value);\n output.value = value;\n output.setAttribute(\"data-stars\", \"\u2605\".repeat(parseInt(value)));\n };\n range.addEventListener(\"input\", (e) => {\n update(e.target.value);\n });\n\n update(range.value);\n}\n\n/**\n * Gets a boolean value from a string or number\n * @param {Object} value\n * @returns { Boolean }\n */\nexport function toBoolean(value) {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") return value.toLowerCase() === \"true\";\n if (typeof value === \"number\") return value !== 0;\n return false;\n}\n\n/**\n * Converts a CamelCased string to a string with individual words separated by spaces.\n * @param { String } text\n * @returns { String } converted string\n */\nexport function toWords(text) {\n text = text.replace(/([A-Z])/g, \" $1\");\n return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\n/**\n * Converts kebab-case string into PascalCase\n * @param { String } text\n * @returns { String } CamelCased version of the input string\n */\nexport function kebabToPascal(text) {\n return text\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n}\n", "import {\n enQueue,\n throttle,\n isUrl,\n openCenteredWindow,\n parseHTML,\n} from \"./common\";\n\nconst cssClasses = {\n result: \"ac-suggestion\",\n item: \"ac-itm\",\n};\n\n/**\n * Generic Autocompletion class for enrichment of textboxes\n */\nexport class AutoComplete extends EventTarget {\n constructor(parent, textInput, settings) {\n super();\n this.settings = {\n emptyResultsText: \"\",\n ...settings,\n };\n this.container = parent;\n this.input = textInput;\n this.input.setAttribute(\"autocomplete\", \"off\");\n this.categories = settings.categories || {};\n this.caches = new Map();\n\n enQueue(this.attach.bind(this));\n }\n\n /**\n * Connector logic to call on @focus events.\n * Lit example:\n * <input type=\"search\" @focus=${(e) => {AutoComplete.connect(e, this.autoComplete); }} />\n *\n * @param {*} event focus event\n * @param {*} options AutoComplete options\n */\n static connect(event, options) {\n const input = event.target;\n if (!input._autoComplete) {\n if (!options?.categories) throw Error(\"Missing autocomplete settings\");\n input._autoComplete = new AutoComplete(input.parentNode, input, options);\n\n if (event.type === \"focus\") {\n setTimeout(() => {\n input._autoComplete.focusHandler(event);\n }, 100);\n }\n }\n return input._autoComplete;\n }\n\n on(a, b) {\n this.input.addEventListener(a, b);\n return this;\n }\n\n attach() {\n this.resultsDiv = document.createElement(\"div\");\n this.resultsDiv.title = \"\"; // block\n this.resultsDiv.classList.add(cssClasses.result);\n \n if(this.container.offsetWidth > 100)\n this.resultsDiv.style.width = this.container.offsetWidth;\n\n this.resultsDiv.addEventListener(\"mousedown\", this.resultClick.bind(this));\n this.container.classList.add(\"ac-container\");\n this.input.classList.add(\"ac-input\");\n const inputStyle = getComputedStyle(this.input);\n this.container.style.setProperty(\n \"--ac-bg-default\",\n inputStyle.backgroundColor\n );\n this.container.style.setProperty(\"--ac-color-default\", inputStyle.color);\n const acc = getComputedStyle(this.input).accentColor;\n if (acc !== \"auto\")\n this.container.style.setProperty(\"--ac-accent-color\", acc);\n\n (this.container?.shadowRoot ?? this.container).appendChild(this.resultsDiv);\n\n this.controller().clear(\"attach\");\n\n this.on(\n \"input\",\n throttle(\n this.inputHandler.bind(this),\n this.settings.throttleInputMs ?? 300\n )\n )\n .on(\"focus\", this.focusHandler.bind(this))\n .on(\"focusout\", this.blurHandler.bind(this))\n .on(\"keyup\", this.keyUpHandler.bind(this))\n .on(\"keydown\", this.keyDownHandler.bind(this));\n }\n\n controller() {\n let c = this.internalController();\n\n if (typeof this.settings.controller === \"function\")\n c = this.settings.controller(this) ?? c;\n\n return c;\n }\n\n internalController() {\n return {\n show: this.show.bind(this),\n hide: this.hide.bind(this),\n clear: this.clear.bind(this),\n empty: () => {},\n };\n }\n\n moveResult(add) {\n this.controller().show();\n let length = this.acItems.length;\n this.rowIndex = this.rowIndex + add;\n\n if (this.rowIndex <= 0) {\n this.rowIndex = 0;\n } else if (this.rowIndex > length - 1) {\n this.rowIndex = 0;\n }\n for (const r of this.acItems) {\n r.classList.remove(\"selected\");\n }\n\n let div = this.getSelectedDiv();\n if (div) {\n div.classList.add(\"selected\");\n div.scrollIntoView({\n behavior: \"smooth\",\n block: \"end\",\n inline: \"nearest\",\n });\n } else {\n this.focusHandler({\n target: this.input,\n });\n }\n }\n\n getSelectedDiv() {\n return this.resultsDiv.querySelector(`div:nth-child(${this.rowIndex + 1})`);\n }\n\n // execute action\n selectResult(div) {\n div = div || this.getSelectedDiv();\n\n if (div) {\n let index = parseInt(div.getAttribute(\"data-index\"));\n this.resultClicked = true;\n let result = this.results[index];\n\n let handlingCategory = this.categories[result.category] ?? {};\n handlingCategory.action =\n handlingCategory.action ?? this.setText.bind(this);\n\n if (handlingCategory.newTab) {\n this.tabWindow = openCenteredWindow(\"about:blank\");\n }\n\n let options = {\n ...result,\n search: this.input.value,\n };\n\n div.classList.add(\"ac-active\");\n\n setTimeout(() => {\n this.controller().hide(\"result-selected\");\n\n if (options.action) {\n options.action(options);\n } else {\n handlingCategory.action(options);\n if (handlingCategory.newTab) {\n if (options.url) {\n this.tabWindow.location.href = options.url;\n } else {\n this.tabWindow.close();\n }\n }\n }\n var event = new Event(\"change\", { bubbles: true });\n this.input.dispatchEvent(event);\n\n this.controller().clear(\"result-selected\");\n\n const ev = new Event(\"result-selected\");\n ev.detail = options;\n this.input.dispatchEvent(ev);\n }, 0);\n }\n }\n\n setText(options) {\n let valueSet = false;\n if (this.input) {\n this.input.value = options.text;\n valueSet = true;\n } else if (this.container?.autoCompleteInput) {\n this.container.autoCompleteInput.value = options.text;\n valueSet = true;\n } else if (\"value\" in this.container) {\n this.container.value = options.text;\n valueSet = true;\n }\n\n if (valueSet && this.input) {\n this.input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n }\n\n this.controller().hide(\"settext\");\n }\n\n resultClick(event) {\n this.selectResult(event.target.closest(`.${cssClasses.item}`));\n }\n\n blurHandler() {\n setTimeout(() => {\n if (!this.resultClicked) this.controller().clear(\"blurred\");\n\n this.resultClicked = false;\n }, 100);\n }\n\n clear() {\n if (this.settings.debug) return;\n\n if (!this.resultsDiv) return;\n this.resultsDiv.innerHTML = \"\";\n this.controller().hide(\"clear\");\n\n if (this.cacheTmr) clearTimeout(this.cacheTmr);\n\n this.cacheTmr = setTimeout(() => {\n this.caches.clear();\n }, 60 * 1000 * 5); // 5 minutes\n }\n\n show() {\n // check dropDown/dropUp\n\n if (!this.resultsDiv.classList.contains(\"ac-active\")) {\n const viewBounds = this.getViewBounds();\n\n this.resultsDiv.style.position = \"absolute\";\n\n if(viewBounds.rect.width > 100)\n this.resultsDiv.style.width = `${viewBounds.rect.width}px`;\n\n this.settings.direction = this.settings.direction ?? viewBounds.suggestedDirection;\n this.resultsDiv.setAttribute(\"data-direction\", this.settings.direction);\n\n if (this.settings.direction === \"up\") {\n this.resultsDiv.style.top = \"unset\";\n this.resultsDiv.style.bottom = `${viewBounds.rect.height + 20}px`;\n this.rowIndex = this.acItems.length;\n } else {\n this.resultsDiv.style.bottom = \"unset\";\n this.resultsDiv.style.top = `${viewBounds.rect.height}px`;\n this.rowIndex = -1;\n }\n this.resultsDiv.style.maxWidth = \"unset\";\n this.resultsDiv.classList.toggle(\"ac-active\", true);\n }\n }\n\n getViewBounds() {\n const rect = this.input.getBoundingClientRect();\n\n return {\n rect,\n suggestedDirection:\n rect.top + rect.height + 500 > window.innerHeight ? \"up\" : \"down\",\n };\n }\n\n hide() {\n this.resultsDiv.classList.toggle(\"ac-active\", false);\n }\n\n empty() {\n this.resultsDiv.innerHTML = `<div class=\"ac-empty\">${this.settings.emptyResultsText}</div>`;\n this.controller().show();\n }\n\n inputHandler(e) {\n if (this.cacheTmr) clearTimeout(this.cacheTmr);\n\n let options = {\n search: e.target.value,\n categories: this.categories,\n };\n\n this.container.classList.add(\"search-running\");\n\n this.getItems(options, e).then((r) => {\n this.controller().clear(\"new-results\");\n this.resultsHandler(r, options);\n this.container.classList.remove(\"search-running\");\n });\n }\n\n keyDownHandler(e) {\n switch (e.key) {\n case \"Enter\":\n e.stopPropagation();\n e.preventDefault();\n break;\n case \"ArrowDown\":\n enQueue(this.moveResult(1));\n break;\n case \"ArrowUp\":\n enQueue(this.moveResult(-1));\n break;\n }\n }\n\n keyUpHandler(e) {\n switch (e.key) {\n case \"Escape\":\n this.controller().hide(\"escape\");\n break;\n case \"Enter\":\n if (this.getSelectedDiv()) {\n this.container.preventEnter = true;\n e.stopPropagation();\n e.preventDefault();\n this.selectResult();\n setTimeout(() => {\n this.container.preventEnter = false;\n }, 10);\n }\n\n break;\n default:\n //this.toggle();\n break;\n }\n }\n\n focusHandler(e) {\n this.controller().clear(\"focus\");\n let value = e.target.value;\n this.suggest(value, e);\n }\n\n /**\n * Shows suggestion box\n * @param {string} value - String to suggest results for\n */\n suggest(value, e) {\n this.input.focus();\n\n const options = {\n suggest: true,\n search: value || \"\",\n categories: this.categories,\n };\n this.getItems(options, e).then((r) => {\n this.input.dispatchEvent(\n new CustomEvent(\"show-results\", {\n detail: {\n results: r,\n },\n })\n );\n\n this.resultsHandler(r, options);\n });\n }\n\n // Sort results based on static (integer) or dynamic (function) sortIndex in category.\n sort(r, options) {\n return r.sort((a, b) => {\n const aCat = options.categories[a.category];\n const bCat = options.categories[b.category];\n const aIndex =\n typeof aCat.sortIndex === \"function\"\n ? aCat.sortIndex(options)\n : aCat.sortIndex ?? 0;\n const bIndex =\n typeof bCat.sortIndex === \"function\"\n ? bCat.sortIndex(options)\n : bCat.sortIndex ?? 0;\n return bIndex > aIndex ? 1 : -1;\n });\n }\n\n resultsHandler(r, options) {\n this.results = r;\n this.rowIndex = -1;\n let index = 0;\n\n const singleItemTemplate = (catHandler, i) => {\n return /*html*/ `\n <div title=\"${i.tooltip || \"\"}\" data-index=\"${index}\" class=\"${`${\n cssClasses.item\n } cat-${i.category} ${i.class ?? \"\"}`.trim()}\"${\n i.style ? ` style=\"${i.style}\"` : \"\"\n }>\n ${this.handleImageOrIcon(i)}\n <span class=\"text\">${this.formatResultItem(\n i,\n options,\n catHandler\n )}</span>\n ${\n !this.settings.hideCategory\n ? `<span class=\"category\">${i.category || \"\"}</span>`\n : \"\"\n }\n </div>`;\n };\n\n r.forEach((i) => {\n let catHandler = options.categories[i.category] || {};\n if (i.element) {\n this.resultsDiv.appendChild(i.element);\n } else {\n i = typeof i === \"string\" ? { text: i } : i;\n this.resultsDiv.appendChild(\n parseHTML(singleItemTemplate(catHandler, i))[0]\n );\n }\n\n index++;\n });\n if (r.length) {\n this.acItems = this.resultsDiv.querySelectorAll(\".ac-itm\");\n this.controller().show();\n } else if (options.search.length) this.controller().empty();\n }\n\n handleImageOrIcon(i) {\n if (i.image) {\n return /*html*/ `<img src=\"${i.image}\"/>`;\n }\n\n if(typeof(this.settings.iconHandler) === \"function\") \n return this.settings.iconHandler(i);\n\n return /*html*/ `<svg-icon icon=\"${i.icon}\"></svg-icon>`;\n }\n\n formatResultItem(item, options, catHandler) {\n const i = typeof item === \"string\" ? { text: item } : item;\n let result = i.text;\n\n if (options.search) {\n result = result.replace(\"%search%\", options.search);\n i.description = i.description?.replace(\"%search%\", options.search);\n }\n\n result = this.highlight(result, options.search);\n\n if (i.description) {\n result = `<div>${result}</div><small>${i.description}</small>`;\n }\n\n if (catHandler.format) {\n result = catHandler.format({\n item: i,\n result: result,\n options: options,\n });\n }\n return result;\n }\n\n highlight(str, find) {\n var reg = new RegExp(\"(\" + find + \")\", \"gi\");\n return str.replace(reg, '<span class=\"txt-hl\">$1</span>');\n }\n\n async getItems(options, e) {\n if (this.aborter) {\n this.aborter.abort();\n }\n\n let cache = this.caches.get(options.search);\n if (cache) return cache;\n\n const prop = this.settings.map;\n\n const normalizeItem = (i) => {\n if (typeof i === \"string\") i = { text: i };\n\n return i;\n };\n\n const map = (list) => {\n if (!prop) {\n return list.map((i) => {\n return normalizeItem(i);\n });\n }\n return list.map((i) => {\n return { text: i[prop] };\n });\n };\n\n const max = (list) => {\n if (this.settings.max && this.settings.max > 0) {\n list.length = this.settings.max;\n }\n return list;\n };\n\n // Create a new AbortController instance\n this.aborter = new AbortController();\n this.aborterSignal = this.aborter.signal;\n\n return new Promise((resolve) => {\n const internalResolve = (data) => {\n data = this.sort(data, options);\n\n if (this.settings.cache !== false)\n this.caches.set(options.search, data);\n\n resolve(data);\n };\n\n if (isUrl(this.items)) {\n if (this.settings.minlength > 0) {\n if (\n !options.search ||\n options.search.length < this.settings.minlength\n ) {\n internalResolve([]);\n return;\n }\n }\n let url = this.formatSearch(this.items, options);\n fetch(url).then((x) => {\n if (x.status === 200) {\n x.json().then((items) => {\n items = map(items);\n\n internalResolve(\n max(\n items.filter((i) => {\n return this.isMatch(options, i);\n })\n )\n );\n });\n return;\n }\n throw Error(`HTTP error ${x.status} - ${url}`);\n });\n } else if (Array.isArray(this.items)) {\n let simple = true;\n\n this.items = this.items.map((i) => {\n if (typeof i === \"string\") {\n return { text: i };\n }\n simple = false;\n return i;\n });\n if (simple) {\n this.container.classList.add(\"simple\");\n }\n internalResolve(max(map(this.items)));\n } else if (typeof this.items === \"function\") {\n options.control = this.container;\n let ar = Promise.resolve(this.items(options, e));\n ar.then((ar) => {\n ar = ar.map((i) => {\n return normalizeItem(i);\n });\n\n ar = map(ar);\n\n internalResolve(ar);\n });\n } else {\n return internalResolve(\n Promise.resolve(this.items.apply(this, options))\n );\n }\n });\n }\n\n async items(options) {\n let arr = [];\n options.results = [];\n options.signal = this.aborterSignal;\n\n for (var c in options.categories) {\n let catHandler = options.categories[c];\n catHandler.trigger =\n catHandler.trigger ??\n (() => {\n return true;\n });\n options.results = arr;\n\n if (catHandler.trigger(options)) {\n let catResults = [];\n try {\n catResults = await catHandler.getItems(options);\n } catch (ex) {\n console.warn(`Error loading items for omniBox category '${c}'.`, ex);\n }\n\n arr = arr.concat(\n catResults.map((i) => {\n i.category = c;\n return i;\n })\n );\n }\n }\n\n return arr;\n }\n\n formatSearch(url, options) {\n if (url.indexOf(\"%search%\")) {\n return url.replace(\"%search%\", options.search || \"\");\n }\n\n return url + \"?\" + this.createQueryParam(options);\n }\n\n createQueryParam(options) {\n let suggest = options.suggest ? \"&suggest=true\" : \"\";\n return `q=${options.text}${suggest}`;\n }\n\n isMatch(options, i) {\n if (i.text?.indexOf(\"%search%\") >= 0) return true;\n\n return options.search\n ? i.text?.toLowerCase().indexOf(options.search.toLowerCase()) >= 0\n : options.suggest;\n }\n\n static textFilter(options, propertyName) {\n return function (i) {\n if (!options.search) return true;\n\n if (i.hidden) return false;\n\n const prop = propertyName ? i[propertyName] : i;\n const isMatch = prop.match(new RegExp(options.search, \"gi\"));\n\n if (isMatch) return isMatch;\n\n if (i.config?.tags) {\n return i.config.tags.some((tag) => {\n return tag.match(new RegExp(options.search, \"gi\"));\n });\n }\n };\n }\n}\n", "import { AutoComplete } from \"pure-web/ac\";\r\n\r\nconst originalSelectResult = AutoComplete?.prototype?.selectResult;\r\n\r\nif (\r\n\ttypeof originalSelectResult === \"function\" &&\r\n\tAutoComplete?.prototype?.__pdsSelectedItemPatched !== true\r\n) {\r\n\tAutoComplete.prototype.selectResult = function patchedSelectResult(div) {\r\n const selectedItem = div || this.getSelectedDiv?.();\r\n\t\tif (!selectedItem) {\r\n\t\t\treturn originalSelectResult.call(this, div);\r\n\t\t}\r\n\r\n\t\tconst indexRaw = selectedItem.getAttribute?.(\"data-index\") ?? \"\";\r\n\t\tconst index = Number.parseInt(indexRaw, 10);\r\n\t\tconst result = Number.isInteger(index) ? this.results?.[index] : null;\r\n\t\tconst categoryConfig =\r\n\t\t\tresult && this.categories ? this.categories[result.category] : null;\r\n\t\tconst restores = [];\r\n\r\n\t\tconst wrapAction = (target, key) => {\r\n\t\t\tif (!target || typeof target[key] !== \"function\") return;\r\n\t\t\tconst originalAction = target[key];\r\n\t\t\tlet restored = false;\r\n\r\n\t\t\tconst restore = () => {\r\n\t\t\t\tif (restored) return;\r\n\t\t\t\ttarget[key] = originalAction;\r\n\t\t\t\trestored = true;\r\n\t\t\t};\r\n\r\n\t\t\ttarget[key] = function wrappedAction(options = {}, ...rest) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\toptions &&\r\n\t\t\t\t\t\ttypeof options === \"object\" &&\r\n\t\t\t\t\t\t!(\"selectedItem\" in options)\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\toptions.selectedItem = selectedItem;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn originalAction.call(this, options, ...rest);\r\n\t\t\t\t} finally {\r\n\t\t\t\t\trestore();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\trestores.push(restore);\r\n\t\t};\r\n\r\n\t\twrapAction(result, \"action\");\r\n\t\twrapAction(categoryConfig, \"action\");\r\n\r\n\t\tconst output = originalSelectResult.call(this, selectedItem);\r\n\r\n\t\t// Fallback cleanup for unexpected flows where upstream action does not run.\r\n\t\tsetTimeout(() => {\r\n\t\t\tfor (const restore of restores) {\r\n\t\t\t\trestore();\r\n\t\t\t}\r\n\t\t}, 1000);\r\n\r\n\t\treturn output;\r\n\t};\r\n\r\n\tAutoComplete.prototype.__pdsSelectedItemPatched = true;\r\n}\r\n\r\nexport { AutoComplete };\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ar"]
|
|
7
|
+
}
|