"use strict"; class File_Upload extends Component { on_ready() { const $input = this.$sid('file_input'); const $drop_zone = this.$sid('drop_zone'); if (this.args.accept) { $input.attr('accept', this.args.accept); } if (this.args.multiple) { $input.attr('multiple', true); } // Click to upload $drop_zone.on('click', () => { $input.click(); }); // File selected $input.on('change', e => { const files = e.target.files; if (files.length > 0) { this.handle_files(files); } }); // Drag and drop $drop_zone.on('dragover', e => { e.preventDefault(); e.stopPropagation(); $drop_zone.addClass('border-primary bg-light'); }); $drop_zone.on('dragleave', e => { e.preventDefault(); e.stopPropagation(); $drop_zone.removeClass('border-primary bg-light'); }); $drop_zone.on('drop', e => { e.preventDefault(); e.stopPropagation(); $drop_zone.removeClass('border-primary bg-light'); const files = e.originalEvent.dataTransfer.files; if (files.length > 0) { this.handle_files(files); } }); // Remove button this.$sid('remove_btn').on('click', e => { e.stopPropagation(); this.clear(); }); } handle_files(files) { const file = files[0]; // Single file for now // Validate file size if (this.args.max_size_bytes && file.size > this.args.max_size_bytes) { alert(`File is too large. Max size is ${this.format_size(this.args.max_size_bytes)}`); return; } this.selected_file = file; // Show file info this.$sid('placeholder').hide(); this.$sid('file_info').show(); this.$sid('file_name').text(file.name); this.$sid('file_size').text(this.format_size(file.size)); // Auto-upload if endpoint provided if (this.args.upload_url) { this.upload(); } // Trigger callback if (this.args.on_select) { this.args.on_select(file); } } async upload() { if (!this.selected_file || !this.args.upload_url) return; // Show progress this.$sid('file_info').hide(); this.$sid('progress').show(); const form_data = new FormData(); form_data.append('file', this.selected_file); try { const response = await fetch(this.args.upload_url, { method: 'POST', body: form_data }); const result = await response.json(); // Hide progress this.$sid('progress').hide(); this.$sid('file_info').show(); if (this.args.on_upload) { this.args.on_upload(result); } } catch (error) { alert('Upload failed: ' + error.message); this.$sid('progress').hide(); this.$sid('placeholder').show(); } } clear() { this.selected_file = null; this.$sid('file_input').val(''); this.$sid('file_info').hide(); this.$sid('progress').hide(); this.$sid('placeholder').show(); if (this.args.on_clear) { this.args.on_clear(); } } get_file() { return this.selected_file; } format_size(bytes) { if (bytes < 1024) return bytes + ' B'; if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB'; return (bytes / (1024 * 1024)).toFixed(1) + ' MB'; } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGaWxlX1VwbG9hZCIsIkpxaHRtbF9Db21wb25lbnQiLCJvbl9yZWFkeSIsIiRpbnB1dCIsIiRpZCIsIiRkcm9wX3pvbmUiLCJhcmdzIiwiYWNjZXB0IiwiYXR0ciIsIm11bHRpcGxlIiwib24iLCJjbGljayIsImUiLCJmaWxlcyIsInRhcmdldCIsImxlbmd0aCIsImhhbmRsZV9maWxlcyIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiYWRkQ2xhc3MiLCJyZW1vdmVDbGFzcyIsIm9yaWdpbmFsRXZlbnQiLCJkYXRhVHJhbnNmZXIiLCJjbGVhciIsImZpbGUiLCJtYXhfc2l6ZV9ieXRlcyIsInNpemUiLCJhbGVydCIsImZvcm1hdF9zaXplIiwic2VsZWN0ZWRfZmlsZSIsImhpZGUiLCJzaG93IiwidGV4dCIsIm5hbWUiLCJ1cGxvYWRfdXJsIiwidXBsb2FkIiwib25fc2VsZWN0IiwiZm9ybV9kYXRhIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJyZXNwb25zZSIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsInJlc3VsdCIsImpzb24iLCJvbl91cGxvYWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJ2YWwiLCJvbl9jbGVhciIsImdldF9maWxlIiwiYnl0ZXMiLCJ0b0ZpeGVkIl0sInNvdXJjZXMiOlsicnN4L3RoZW1lL2NvbXBvbmVudHMvX2FyY2hpdmVkL3VuZmluaXNoZWQvRmlsZV9VcGxvYWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgRmlsZV9VcGxvYWQgZXh0ZW5kcyBKcWh0bWxfQ29tcG9uZW50IHtcbiAgICBvbl9yZWFkeSgpIHtcbiAgICAgICAgY29uc3QgJGlucHV0ID0gdGhpcy4kaWQoJ2ZpbGVfaW5wdXQnKTtcbiAgICAgICAgY29uc3QgJGRyb3Bfem9uZSA9IHRoaXMuJGlkKCdkcm9wX3pvbmUnKTtcblxuICAgICAgICBpZiAodGhpcy5hcmdzLmFjY2VwdCkge1xuICAgICAgICAgICAgJGlucHV0LmF0dHIoJ2FjY2VwdCcsIHRoaXMuYXJncy5hY2NlcHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXJncy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgJGlucHV0LmF0dHIoJ211bHRpcGxlJywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGljayB0byB1cGxvYWRcbiAgICAgICAgJGRyb3Bfem9uZS5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAkaW5wdXQuY2xpY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRmlsZSBzZWxlY3RlZFxuICAgICAgICAkaW5wdXQub24oJ2NoYW5nZScsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzO1xuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZV9maWxlcyhmaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERyYWcgYW5kIGRyb3BcbiAgICAgICAgJGRyb3Bfem9uZS5vbignZHJhZ292ZXInLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRkcm9wX3pvbmUuYWRkQ2xhc3MoJ2JvcmRlci1wcmltYXJ5IGJnLWxpZ2h0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRkcm9wX3pvbmUub24oJ2RyYWdsZWF2ZScsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGRyb3Bfem9uZS5yZW1vdmVDbGFzcygnYm9yZGVyLXByaW1hcnkgYmctbGlnaHQnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGRyb3Bfem9uZS5vbignZHJvcCcsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgJGRyb3Bfem9uZS5yZW1vdmVDbGFzcygnYm9yZGVyLXByaW1hcnkgYmctbGlnaHQnKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZV9maWxlcyhmaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlbW92ZSBidXR0b25cbiAgICAgICAgdGhpcy4kaWQoJ3JlbW92ZV9idG4nKS5vbignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGFuZGxlX2ZpbGVzKGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTsgLy8gU2luZ2xlIGZpbGUgZm9yIG5vd1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgc2l6ZVxuICAgICAgICBpZiAodGhpcy5hcmdzLm1heF9zaXplX2J5dGVzICYmIGZpbGUuc2l6ZSA+IHRoaXMuYXJncy5tYXhfc2l6ZV9ieXRlcykge1xuICAgICAgICAgICAgYWxlcnQoYEZpbGUgaXMgdG9vIGxhcmdlLiBNYXggc2l6ZSBpcyAke3RoaXMuZm9ybWF0X3NpemUodGhpcy5hcmdzLm1heF9zaXplX2J5dGVzKX1gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRfZmlsZSA9IGZpbGU7XG5cbiAgICAgICAgLy8gU2hvdyBmaWxlIGluZm9cbiAgICAgICAgdGhpcy4kaWQoJ3BsYWNlaG9sZGVyJykuaGlkZSgpO1xuICAgICAgICB0aGlzLiRpZCgnZmlsZV9pbmZvJykuc2hvdygpO1xuICAgICAgICB0aGlzLiRpZCgnZmlsZV9uYW1lJykudGV4dChmaWxlLm5hbWUpO1xuICAgICAgICB0aGlzLiRpZCgnZmlsZV9zaXplJykudGV4dCh0aGlzLmZvcm1hdF9zaXplKGZpbGUuc2l6ZSkpO1xuXG4gICAgICAgIC8vIEF1dG8tdXBsb2FkIGlmIGVuZHBvaW50IHByb3ZpZGVkXG4gICAgICAgIGlmICh0aGlzLmFyZ3MudXBsb2FkX3VybCkge1xuICAgICAgICAgICAgdGhpcy51cGxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyaWdnZXIgY2FsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuYXJncy5vbl9zZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXJncy5vbl9zZWxlY3QoZmlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyB1cGxvYWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZF9maWxlIHx8ICF0aGlzLmFyZ3MudXBsb2FkX3VybCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFNob3cgcHJvZ3Jlc3NcbiAgICAgICAgdGhpcy4kaWQoJ2ZpbGVfaW5mbycpLmhpZGUoKTtcbiAgICAgICAgdGhpcy4kaWQoJ3Byb2dyZXNzJykuc2hvdygpO1xuXG4gICAgICAgIGNvbnN0IGZvcm1fZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBmb3JtX2RhdGEuYXBwZW5kKCdmaWxlJywgdGhpcy5zZWxlY3RlZF9maWxlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmFyZ3MudXBsb2FkX3VybCwge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1fZGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgICAgICAgICAgLy8gSGlkZSBwcm9ncmVzc1xuICAgICAgICAgICAgdGhpcy4kaWQoJ3Byb2dyZXNzJykuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy4kaWQoJ2ZpbGVfaW5mbycpLnNob3coKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYXJncy5vbl91cGxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFyZ3Mub25fdXBsb2FkKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBhbGVydCgnVXBsb2FkIGZhaWxlZDogJyArIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy4kaWQoJ3Byb2dyZXNzJykuaGlkZSgpO1xuICAgICAgICAgICAgdGhpcy4kaWQoJ3BsYWNlaG9sZGVyJykuc2hvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRfZmlsZSA9IG51bGw7XG4gICAgICAgIHRoaXMuJGlkKCdmaWxlX2lucHV0JykudmFsKCcnKTtcbiAgICAgICAgdGhpcy4kaWQoJ2ZpbGVfaW5mbycpLmhpZGUoKTtcbiAgICAgICAgdGhpcy4kaWQoJ3Byb2dyZXNzJykuaGlkZSgpO1xuICAgICAgICB0aGlzLiRpZCgncGxhY2Vob2xkZXInKS5zaG93KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXJncy5vbl9jbGVhcikge1xuICAgICAgICAgICAgdGhpcy5hcmdzLm9uX2NsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRfZmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRfZmlsZTtcbiAgICB9XG5cbiAgICBmb3JtYXRfc2l6ZShieXRlcykge1xuICAgICAgICBpZiAoYnl0ZXMgPCAxMDI0KSByZXR1cm4gYnl0ZXMgKyAnIEInO1xuICAgICAgICBpZiAoYnl0ZXMgPCAxMDI0ICogMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyAnIEtCJztcbiAgICAgICAgcmV0dXJuIChieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSkgKyAnIE1CJztcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsV0FBVyxTQUFTQyxnQkFBZ0IsQ0FBQztFQUN2Q0MsUUFBUUEsQ0FBQSxFQUFHO0lBQ1AsTUFBTUMsTUFBTSxHQUFHLElBQUksQ0FBQ0MsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUNyQyxNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDRCxHQUFHLENBQUMsV0FBVyxDQUFDO0lBRXhDLElBQUksSUFBSSxDQUFDRSxJQUFJLENBQUNDLE1BQU0sRUFBRTtNQUNsQkosTUFBTSxDQUFDSyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQ0YsSUFBSSxDQUFDQyxNQUFNLENBQUM7SUFDM0M7SUFFQSxJQUFJLElBQUksQ0FBQ0QsSUFBSSxDQUFDRyxRQUFRLEVBQUU7TUFDcEJOLE1BQU0sQ0FBQ0ssSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7SUFDakM7O0lBRUE7SUFDQUgsVUFBVSxDQUFDSyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU07TUFDekJQLE1BQU0sQ0FBQ1EsS0FBSyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDOztJQUVGO0lBQ0FSLE1BQU0sQ0FBQ08sRUFBRSxDQUFDLFFBQVEsRUFBR0UsQ0FBQyxJQUFLO01BQ3ZCLE1BQU1DLEtBQUssR0FBR0QsQ0FBQyxDQUFDRSxNQUFNLENBQUNELEtBQUs7TUFDNUIsSUFBSUEsS0FBSyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLElBQUksQ0FBQ0MsWUFBWSxDQUFDSCxLQUFLLENBQUM7TUFDNUI7SUFDSixDQUFDLENBQUM7O0lBRUY7SUFDQVIsVUFBVSxDQUFDSyxFQUFFLENBQUMsVUFBVSxFQUFHRSxDQUFDLElBQUs7TUFDN0JBLENBQUMsQ0FBQ0ssY0FBYyxDQUFDLENBQUM7TUFDbEJM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