{"version":3,"file":"uni-manager-file.mjs","sources":["../../../projects/uni-manager/file/manager.ts","../../../projects/uni-manager/file/uni-manager-file.ts"],"sourcesContent":["export class UniFileManager {\r\n  /**\r\n   * Tenta di aprire un file (es. PDF, immagini) in una nuova scheda del browser.\r\n   * * Nota sul comportamento dei browser:\r\n   * - I file supportati nativamente (PDF, JPG, PNG, ...) verranno visualizzati a schermo.\r\n   * - I file non supportati (Excel, CSV, Zip, ...) avvieranno automaticamente il download lasciando la nuova scheda vuota o chiudendola subito dopo.\r\n   */\r\n  public static openPreviewInNewTab(url: URL): void {\r\n    // Apre immediatamente una scheda vuota per prevenire il blocco pop-up del browser\r\n    const newTab = window.open('about:blank', '_blank');\r\n    if (!newTab) {\r\n      throw new Error('Failed to open file. Please allow pop-ups for this site.');\r\n    }\r\n\r\n    // Reindirizza la nuova scheda verso l'endpoint effettivo del backend\r\n    newTab.location.href = url.href;\r\n  }\r\n\r\n  /**\r\n   * Apre un file (es. PDF, immagini) nella scheda corrente del browser.\r\n   * * Nota sul comportamento dei browser:\r\n   * - I file supportati nativamente (PDF, JPG, PNG, ...) sovrascriveranno l'applicazione corrente per mostrare il file.\r\n   * - I file non supportati (Excel, CSV, Zip, ...) avvieranno il download senza spostare l'utente dalla pagina.\r\n   */\r\n  public static openPreviewInCurrentTab(url: URL): void {\r\n    // Naviga verso l'endpoint del file all'interno della stessa scheda\r\n    location.assign(url.href);\r\n  }\r\n\r\n  /**\r\n   * Avvia il download del file utilizzando il nome formattato o un nome personalizzato.\r\n   */\r\n  public static async download(blob: Blob, fileName?: string, customName?: string): Promise<void> {\r\n    // Generazione di un URL locale temporaneo puntante ai byte del Blob in memoria\r\n    const downloadUrl = URL.createObjectURL(blob);\r\n\r\n    // Creazione di un elemento 'a' (link) invisibile nel documento\r\n    const link = document.createElement('a');\r\n    link.href = downloadUrl;\r\n\r\n    // Selezione del nome base: customName ha la priorità, in alternativa si utilizza fileName\r\n    const baseName = customName ?? fileName;\r\n\r\n    if (baseName) {\r\n      link.download = baseName;\r\n    } else {\r\n      // Fallback in caso di assenza o invalidità di entrambi i parametri\r\n      link.setAttribute('download', '');\r\n    }\r\n\r\n    // Iniezione del link nel DOM, simulazione del click utente e successiva rimozione immediata\r\n    document.body.append(link);\r\n    link.click();\r\n    link.remove();\r\n\r\n    // Rilascio immediato della memoria occupata dal Blob URL\r\n    URL.revokeObjectURL(downloadUrl);\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"MAAa,cAAc,CAAA;AACzB;;;;;AAKG;IACI,OAAO,mBAAmB,CAAC,GAAQ,EAAA;;QAExC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;QAC7E;;QAGA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI;IACjC;AAEA;;;;;AAKG;IACI,OAAO,uBAAuB,CAAC,GAAQ,EAAA;;AAE5C,QAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;AAEA;;AAEG;IACI,aAAa,QAAQ,CAAC,IAAU,EAAE,QAAiB,EAAE,UAAmB,EAAA;;QAE7E,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;;QAG7C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;;AAGvB,QAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,QAAQ;QAEvC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAC1B;aAAO;;AAEL,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC;QACnC;;AAGA,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,MAAM,EAAE;;AAGb,QAAA,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC;IAClC;AACD;;AC1DD;;AAEG;;;;"}