{ "version": 3, "sources": ["../ts/modules/FileUpload.ts", "../ts/components/click-spark/ClickSpark.ts", "../ts/upload.ts"], "sourcesContent": ["export default class FileUpload {\n\n private dragging: boolean = false;\n private uploading: boolean = false;\n private leaveTimer?: number;\n\n\n constructor(\n private dragArea: HTMLElement,\n private readonly form: HTMLFormElement,\n private fileField: HTMLInputElement\n ) {\n this.attachEventListeners();\n }\n\n\n private attachEventListeners(): void {\n const dragEvents = [\"dragover\", \"dragenter\", \"dragleave\", \"drop\"];\n dragEvents.forEach(eventType => {\n this.dragArea.addEventListener(eventType, this.handleDrag.bind(this), false);\n });\n\n this.fileField.addEventListener('change', (event) => this.handleChange(event), false);\n this.form.addEventListener(\"submit\", (event) => this.handleSubmit(event), false);\n\n this.dragArea.querySelector('#label_upload').addEventListener('click', this.handleClick.bind(this), false);\n\n }\n\n private handleDrag(event: DragEvent): void {\n switch (event.type) {\n case \"dragover\":\n case \"dragenter\":\n if (this.uploading || !event.dataTransfer?.types.includes(\"Files\")) return;\n clearTimeout(this.leaveTimer);\n event.preventDefault();\n this.showDragView();\n break;\n case \"dragleave\":\n if (this.uploading) return;\n this.leaveTimer = window.setTimeout(() => {\n if (!this.dragArea.contains(event.relatedTarget as Node)) {\n this.removeDragView();\n }\n }, 50);\n break;\n case \"drop\":\n if (this.uploading) return;\n event.preventDefault();\n const file = event.dataTransfer?.files[0];\n if (file) {\n this.handleFileUpload(file);\n }\n break;\n }\n }\n\n\n private handleChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.handleFileUpload(input.files[0]); // Directly handle the file upload\n }\n }\n\n\n private handleSubmit(event: SubmitEvent): void {\n event.preventDefault();\n this.submitForm();\n }\n\n\n private handleClick(event: MouseEvent): void {\n event.preventDefault();\n if (this.uploading) return;\n event.stopPropagation();\n this.fileField.click();\n }\n\n\n private showDragView(): void {\n if (this.dragging) return;\n this.dragging = true;\n this.dragArea.classList.add('dragging');\n }\n\n\n public removeDragView(): void {\n if (!this.dragging) return;\n this.dragging = false;\n this.dragArea.classList.remove('dragging');\n }\n\n\n private handleFileUpload(file: File): void {\n this.removeDragView();\n\n const allowedAudioExtensions = ['.caf'];\n const fileExtension = file.name.slice((file.name.lastIndexOf('.') - 1 >>> 0) + 2).toLowerCase();\n\n if (!file.type.startsWith('audio/') && !allowedAudioExtensions.includes(`.${fileExtension}`)) {\n this.dispatchDropErrorEvent('Only audio files are allowed. File type ' + file.type + ' is not supported.');\n return;\n }\n\n let size_mb = Math.ceil(file.size / Math.pow(1024, 2));\n if (size_mb > 60) {\n this.dispatchDropErrorEvent(`Your audio file is ${size_mb}MB. Max allowed audio file size is 60MB.`);\n return;\n }\n\n this.uploadFile(file);\n }\n\n\n private dispatchDropErrorEvent(message: string): void {\n this.uploading = false;\n this.form.reset();\n document.dispatchEvent(new CustomEvent('audioUploadError', {detail: {message}}));\n }\n\n\n private async uploadFile(file: File): Promise {\n this.uploading = true;\n this.removeDragView();\n this.dispatchUploadProgressEvent('Uploading audio');\n\n const formData = new FormData();\n formData.append('uploaded_audio_file', file);\n\n try {\n const response = await fetch('/upload/file', {\n method: \"POST\",\n body: formData,\n });\n\n if (!response.ok) throw await response.json();\n\n const json = await response.json();\n this.dispatchUploadSuccessEvent(json.redirect_url);\n } catch (error: any) {\n this.uploading = false;\n this.dispatchDropErrorEvent(error.message ?? 'Something went wrong, please contact us.');\n }\n }\n\n private dispatchUploadProgressEvent(message: string): void {\n this.uploading = true;\n document.dispatchEvent(new CustomEvent('audioUploadProgress', {detail: {message}}));\n }\n\n private dispatchUploadSuccessEvent(redirect: string): void {\n this.uploading = false;\n document.dispatchEvent(new CustomEvent('audioUploadSuccess', {detail: {redirect}}));\n }\n\n public submitForm(): void {\n const file = this.fileField.files?.[0];\n if (file) {\n this.handleFileUpload(file);\n } else {\n this.dispatchDropErrorEvent('Please select a file before submitting.');\n }\n }\n\n}\n", "export default class extends HTMLElement {\n\n private root: HTMLElement;\n private svg: any;\n\n\n constructor() {\n super();\n this.attachShadow({mode: \"open\"});\n this.root = document.documentElement;\n }\n\n connectedCallback() {\n this.setupSpark();\n this.root.addEventListener(\"click\", (e) => {\n this.setSparkPosition(e);\n this.animateSpark();\n });\n }\n\n animateSpark() {\n let sparks = [...this.svg.children];\n let size = parseInt(sparks[0].getAttribute(\"y1\"));\n let offset = size / 2 + \"px\";\n\n let keyframes = (i: number) => {\n let deg = `calc(${i} * (360deg / ${sparks.length}))`;\n\n return [\n {\n strokeDashoffset: size * 3,\n transform: `rotate(${deg}) translateY(${offset})`,\n },\n {\n strokeDashoffset: size,\n transform: `rotate(${deg}) translateY(0)`,\n },\n ];\n };\n\n let options = {\n duration: 660,\n easing: \"cubic-bezier(0.25, 1, 0.5, 1)\",\n fill: \"forwards\",\n };\n\n sparks.forEach((spark, i) => spark.animate(keyframes(i), options));\n }\n\n setSparkPosition(e: MouseEvent) {\n let rect = this.root.getBoundingClientRect();\n this.svg.style.left = e.clientX - rect.left - this.svg.clientWidth / 2 + \"px\";\n this.svg.style.top = e.clientY - rect.top - this.svg.clientHeight / 2 + \"px\";\n }\n\n setupSpark() {\n this.shadowRoot.innerHTML = `\n \n \n ${Array.from({length: 8}, (_) => ``).join(\"\")}\n \n `;\n this.svg = this.shadowRoot.querySelector(\"svg\");\n }\n}", "import FileUpload from \"./modules/FileUpload\";\nimport ClickSpark from './components/click-spark/ClickSpark'\n\nconst mainEl = document.querySelector('main');\nconst uploadContainer = document.getElementById('hero') as HTMLElement;\nconst fileInput = document.getElementById('file_upload');\nconst form = document.getElementById(\"upload_form\")\n\nlet originalDropMessage = '';\nconst drop_error_message = document.getElementById('dragoverMessage');\n\nif (drop_error_message) {\n originalDropMessage = drop_error_message.textContent;\n}\n\nconst progress_message = document.getElementById('message');\nlet originalMessage = progress_message.textContent;\nconst subMessage = document.querySelector('#fullScreenMessage h4');\n\n\nconst getTimeOutBasedOnLength = (length: number) => {\n return Math.ceil(((((length / 5) / 180) * 60) * 1000) + 1500);\n}\n\nconst successAnimation = (timeout: number) => {\n updateContainerHeight();\n // To continuously create hearts\n let interval = setInterval(createHeart, 50); // Adjust interval as needed\n setTimeout(() => {\n clearTimeout(interval)\n mainEl.classList.add('fade');\n }, timeout)\n}\n\n\nif (uploadContainer) {\n const fileUpload = new FileUpload(uploadContainer, form, fileInput);\n\n document.addEventListener('audioUploadError', (event: CustomEvent) => {\n let timeout = getTimeOutBasedOnLength(event.detail.message.length);\n drop_error_message.textContent = event.detail.message;\n uploadContainer.classList.add('error');\n mainEl.classList.remove('uploading');\n setTimeout(() => {\n drop_error_message.textContent = originalDropMessage;\n progress_message.textContent = originalMessage;\n subMessage.style.display = null;\n uploadContainer.classList.remove('error');\n fileUpload.removeDragView();\n }, timeout)\n });\n\n\n document.addEventListener('audioUploadProgress', (event: CustomEvent) => {\n mainEl.classList.add('uploading');\n });\n\n\n document.addEventListener('audioUploadSuccess', (event: CustomEvent) => {\n\n let redirect = event.detail.redirect;\n\n mainEl.classList.add('success');\n\n successAnimation(2000);\n\n setTimeout(() => {\n\n // Fallback for browsers that don't support this API:\n // @ts-ignore\n if (!document.startViewTransition) {\n window.location.assign(redirect);\n return;\n }\n\n // With a transition:\n // @ts-ignore\n document.startViewTransition(() => window.location.assign(redirect));\n\n }, 2500)\n\n });\n\n}\n\n// Click Spark On loading = Fun!\nif (!customElements.get(\"click-spark\")) {\n customElements.define(\"click-spark\", ClickSpark);\n}\n\n\n// main.addEventListener('audioFileDropped', handleCardUpdate); /**\n// * @param {CustomEvent} event\n// */\n// public handleCardUpdate(event) {\n// const {file} = event.detail;\n// if (file) {\n// profileCard.querySelector(\"img\").src = image;\n// }\n// }\n\n/*\n|--------------------------------------------------------------------------\n| Success Hearts\n|--------------------------------------------------------------------------\n*/\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n if (mainEl.classList.contains('success')) {\n successAnimation(2500);\n }\n});\n\nconst container = document.getElementById('loading_block');\nconst originalHeart = document.querySelector('.flyingBubble') as Element;\n\nfunction updateContainerHeight() {\n const height = container.offsetHeight;\n document.documentElement.style.setProperty('--container-height', `-${height}px`);\n}\n\n// Update on load and resize\nupdateContainerHeight();\nwindow.addEventListener('resize', updateContainerHeight);\n\nfunction createHeart() {\n const heart = originalHeart.cloneNode(true);\n if (heart instanceof SVGElement) {\n //--color - 1\n heart.style.position = 'absolute';\n heart.style.bottom = '0';\n heart.style.left = `${Math.random() * 100}%`;\n // Random duration between 1 to 5 seconds\n const duration = Math.random() * 2 + 1;\n heart.style.scale = (Math.random() + 1).toString();\n\n const colorNumber = Math.floor(Math.random() * 8) + 1; // Random number between 1 and 8\n heart.style.fill = `var(--color-${colorNumber})`;\n\n heart.style.animation = `moveUp ${duration}s linear`;\n container.appendChild(heart);\n // Remove heart after animation\n setTimeout(() => {\n heart.remove();\n }, duration * 1000);\n }\n\n}\n\n\n\n"], "mappings": "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", "names": ["FileUpload", "dragArea", "form", "fileField", "eventType", "event", "file", "input", "allowedAudioExtensions", "fileExtension", "size_mb", "message", "formData", "response", "json", "error", "redirect", "ClickSpark_default", "e", "sparks", "size", "offset", "keyframes", "i", "deg", "options", "spark", "rect", "_", "mainEl", "uploadContainer", "fileInput", "form", "originalDropMessage", "drop_error_message", "progress_message", "originalMessage", "subMessage", "getTimeOutBasedOnLength", "length", "successAnimation", "timeout", "updateContainerHeight", "interval", "createHeart", "fileUpload", "FileUpload", "event", "redirect", "ClickSpark_default", "container", "originalHeart", "height", "heart", "duration", "colorNumber"] }