feat(hosted-files): introduce standardized download component and V3 action support

- Created AE_Comp_Hosted_Files_Download_Button using Svelte 5 and Lucide icons.
- Added file_extension_icon_lucide utility for direct Lucide icon mapping.
- Refactored download logic to core__hosted_files.ts using V3 Action endpoint (/v3/action/hosted_file/.../download).
- Integrated new component into Event File Object Table.
- Cleaned up legacy window.postMessage calls in several file management views.

NOTE: The new download component is currently in development and may not be fully functional.
This commit is contained in:
Scott Idem
2026-02-03 11:19:23 -05:00
parent 1ae7b5642d
commit aaead82c1a
11 changed files with 275 additions and 61 deletions

View File

@@ -8,6 +8,7 @@ import {
} from './ae_utils__files';
import { get_obj_li_w_match_prop } from './ae_utils__get_obj_li_w_match_prop';
import { file_extension_icon } from './ae_utils__file_extension_icon';
import { file_extension_icon_lucide } from './ae_utils__file_extension_icon_lucide';
import { process_permission_checks } from './ae_utils__perm_checks';
import { iso_datetime_formatter } from './ae_utils__datetime_format';
import { is_datetime_recent } from './ae_utils__is_datetime_recent';
@@ -337,6 +338,7 @@ export const ae_util = {
shorten_string: shorten_string,
shorten_filename: shorten_filename,
file_extension_icon: file_extension_icon,
file_extension_icon_lucide: file_extension_icon_lucide,
format_html: format_html,
set_obj_prop_display_name: set_obj_prop_display_name,
return_obj_type_path: return_obj_type_path,

View File

@@ -0,0 +1,66 @@
import * as Lucide from 'lucide-svelte';
/**
* Returns a Lucide icon component based on the provided file extension.
* @param extension The file extension (e.g., 'pdf', 'jpg').
* @returns The Lucide icon component.
*/
export function file_extension_icon_lucide(extension: string | undefined | null): any {
const ext = extension?.toLowerCase() || '';
const icon_map: Record<string, any> = {
'pdf': Lucide.FileText,
'doc': Lucide.FileText,
'docx': Lucide.FileText,
'txt': Lucide.FileText,
'rtf': Lucide.FileText,
'xls': Lucide.FileSpreadsheet,
'xlsx': Lucide.FileSpreadsheet,
'csv': Lucide.FileSpreadsheet,
'png': Lucide.FileImage,
'jpg': Lucide.FileImage,
'jpeg': Lucide.FileImage,
'gif': Lucide.FileImage,
'webp': Lucide.FileImage,
'bmp': Lucide.FileImage,
'svg': Lucide.FileImage,
'mp3': Lucide.FileAudio,
'wav': Lucide.FileAudio,
'm4a': Lucide.FileAudio,
'flac': Lucide.FileAudio,
'aac': Lucide.FileAudio,
'aif': Lucide.FileAudio,
'aiff': Lucide.FileAudio,
'mp4': Lucide.FileVideo,
'mkv': Lucide.FileVideo,
'mov': Lucide.FileVideo,
'avi': Lucide.FileVideo,
'3gp': Lucide.FileVideo,
'ppt': Lucide.Presentation,
'pptx': Lucide.Presentation,
'key': Lucide.Presentation,
'odp': Lucide.Presentation,
'zip': Lucide.FileArchive,
'7z': Lucide.FileArchive,
'rar': Lucide.FileArchive,
'tar': Lucide.FileArchive,
'gz': Lucide.FileArchive,
'json': Lucide.FileJson,
'html': Lucide.FileCode,
'htm': Lucide.FileCode,
'js': Lucide.FileCode,
'ts': Lucide.FileCode,
'css': Lucide.FileCode,
'php': Lucide.FileCode
};
return icon_map[ext] || Lucide.File;
}