{"version":3,"file":"utils-013c0d40.js","sources":["../../../../js/utils/src/utils.ts"],"sourcesContent":["import type { ActionReturn } from \"svelte/action\";\nexport interface SelectData {\n\tindex: number | [number, number];\n\tvalue: any;\n\tselected?: boolean;\n}\n\nexport interface LikeData {\n\tindex: number | [number, number];\n\tvalue: any;\n\tliked?: boolean;\n}\n\nexport interface KeyUpData {\n\tkey: string;\n\tinput_value: string;\n}\n\nexport interface ShareData {\n\tdescription: string;\n\ttitle?: string;\n}\n\nexport class ShareError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"ShareError\";\n\t}\n}\n\nexport async function uploadToHuggingFace(\n\tdata: string,\n\ttype: \"base64\" | \"url\"\n): Promise {\n\tif (window.__gradio_space__ == null) {\n\t\tthrow new ShareError(\"Must be on Spaces to share.\");\n\t}\n\tlet blob: Blob;\n\tlet contentType: string;\n\tlet filename: string;\n\tif (type === \"url\") {\n\t\tconst response = await fetch(data);\n\t\tblob = await response.blob();\n\t\tcontentType = response.headers.get(\"content-type\") || \"\";\n\t\tfilename = response.headers.get(\"content-disposition\") || \"\";\n\t} else {\n\t\tblob = dataURLtoBlob(data);\n\t\tcontentType = data.split(\";\")[0].split(\":\")[1];\n\t\tfilename = \"file\" + contentType.split(\"/\")[1];\n\t}\n\n\tconst file = new File([blob], filename, { type: contentType });\n\n\t// Send file to endpoint\n\tconst uploadResponse = await fetch(\"https://huggingface.co/uploads\", {\n\t\tmethod: \"POST\",\n\t\tbody: file,\n\t\theaders: {\n\t\t\t\"Content-Type\": file.type,\n\t\t\t\"X-Requested-With\": \"XMLHttpRequest\"\n\t\t}\n\t});\n\n\t// Check status of response\n\tif (!uploadResponse.ok) {\n\t\tif (\n\t\t\tuploadResponse.headers.get(\"content-type\")?.includes(\"application/json\")\n\t\t) {\n\t\t\tconst error = await uploadResponse.json();\n\t\t\tthrow new ShareError(`Upload failed: ${error.error}`);\n\t\t}\n\t\tthrow new ShareError(`Upload failed.`);\n\t}\n\n\t// Return response if needed\n\tconst result = await uploadResponse.text();\n\treturn result;\n}\n\nfunction dataURLtoBlob(dataurl: string): Blob {\n\tvar arr = dataurl.split(\",\"),\n\t\tmime = (arr[0].match(/:(.*?);/) as RegExpMatchArray)[1],\n\t\tbstr = atob(arr[1]),\n\t\tn = bstr.length,\n\t\tu8arr = new Uint8Array(n);\n\twhile (n--) {\n\t\tu8arr[n] = bstr.charCodeAt(n);\n\t}\n\treturn new Blob([u8arr], { type: mime });\n}\n\nexport function copy(node: HTMLDivElement): ActionReturn {\n\tnode.addEventListener(\"click\", handle_copy);\n\n\tasync function handle_copy(event: MouseEvent): Promise {\n\t\tconst path = event.composedPath() as HTMLButtonElement[];\n\n\t\tconst [copy_button] = path.filter(\n\t\t\t(e) => e?.tagName === \"BUTTON\" && e.classList.contains(\"copy_code_button\")\n\t\t);\n\n\t\tif (copy_button) {\n\t\t\tevent.stopImmediatePropagation();\n\n\t\t\tconst copy_text = copy_button.parentElement!.innerText.trim();\n\t\t\tconst copy_sucess_button = Array.from(\n\t\t\t\tcopy_button.children\n\t\t\t)[1] as HTMLDivElement;\n\n\t\t\tconst copied = await copy_to_clipboard(copy_text);\n\n\t\t\tif (copied) copy_feedback(copy_sucess_button);\n\n\t\t\tfunction copy_feedback(_copy_sucess_button: HTMLDivElement): void {\n\t\t\t\t_copy_sucess_button.style.opacity = \"1\";\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t_copy_sucess_button.style.opacity = \"0\";\n\t\t\t\t}, 2000);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tdestroy(): void {\n\t\t\tnode.removeEventListener(\"click\", handle_copy);\n\t\t}\n\t};\n}\n\nasync function copy_to_clipboard(value: string): Promise {\n\tlet copied = false;\n\tif (\"clipboard\" in navigator) {\n\t\tawait navigator.clipboard.writeText(value);\n\t\tcopied = true;\n\t} else {\n\t\tconst textArea = document.createElement(\"textarea\");\n\t\ttextArea.value = value;\n\n\t\ttextArea.style.position = \"absolute\";\n\t\ttextArea.style.left = \"-999999px\";\n\n\t\tdocument.body.prepend(textArea);\n\t\ttextArea.select();\n\n\t\ttry {\n\t\t\tdocument.execCommand(\"copy\");\n\t\t\tcopied = true;\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\tcopied = false;\n\t\t} finally {\n\t\t\ttextArea.remove();\n\t\t}\n\t}\n\n\treturn copied;\n}\n\nexport const format_time = (seconds: number): string => {\n\tconst hours = Math.floor(seconds / 3600);\n\tconst minutes = Math.floor((seconds % 3600) / 60);\n\tconst seconds_remainder = Math.round(seconds) % 60;\n\tconst padded_minutes = `${minutes < 10 ? \"0\" : \"\"}${minutes}`;\n\tconst padded_seconds = `${\n\t\tseconds_remainder < 10 ? \"0\" : \"\"\n\t}${seconds_remainder}`;\n\n\tif (hours > 0) {\n\t\treturn `${hours}:${padded_minutes}:${padded_seconds}`;\n\t}\n\treturn `${minutes}:${padded_seconds}`;\n};\n\nexport type I18nFormatter = any;\nexport class Gradio = Record> {\n\t#id: number;\n\ttheme: string;\n\tversion: string;\n\ti18n: I18nFormatter;\n\t#el: HTMLElement;\n\troot: string;\n\tautoscroll: boolean;\n\n\tconstructor(\n\t\tid: number,\n\t\tel: HTMLElement,\n\t\ttheme: string,\n\t\tversion: string,\n\t\troot: string,\n\t\tautoscroll: boolean\n\t) {\n\t\tthis.#id = id;\n\t\tthis.theme = theme;\n\t\tthis.version = version;\n\t\tthis.#el = el;\n\n\t\tthis.i18n = (x: string): string => x;\n\t\tthis.root = root;\n\t\tthis.autoscroll = autoscroll;\n\t}\n\n\tdispatch(event_name: E, data?: T[E]): void {\n\t\tconst e = new CustomEvent(\"gradio\", {\n\t\t\tbubbles: true,\n\t\t\tdetail: { data, id: this.#id, event: event_name }\n\t\t});\n\t\tthis.#el.dispatchEvent(e);\n\t}\n}\n"],"names":[],"mappings":"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"}