{"version":3,"file":"uni-manager-file.mjs","sources":["../../../projects/uni-manager/file/manager.ts","../../../projects/uni-manager/file/uni-manager-file.ts"],"sourcesContent":["import type { FileDatasource } from 'uni-model-type/type';\r\n\r\nexport class UniFileManager {\r\n  /**\r\n   * Apre un file (es. PDF, immagine) in una nuova scheda del browser\r\n   * Il contenuto viene caricato all'interno di un iframe per garantire compatibilità di visualizzazione\r\n   */\r\n  public static openInNewTab(data: FileDatasource): void {\r\n    if (!data || !data.url) return;\r\n\r\n    const newWindow = window.open('', '_blank');\r\n    if (!newWindow) return;\r\n\r\n    newWindow.document.title = data.name;\r\n\r\n    // Crea l'iframe e lo aggiunge al body della nuova finestra\r\n    const iframe = this.createIframe(newWindow.document, data.url, '100%', '100%');\r\n    newWindow.document.body.style.margin = '0';\r\n    newWindow.document.body.append(iframe);\r\n\r\n    // Rimuove l'oggetto URL dalla memoria dopo un tempo congruo per il caricamento\r\n    setTimeout(() => URL.revokeObjectURL(data.url), 3000);\r\n  }\r\n\r\n  /**\r\n   * Stampa un file aprendo il dialogo di stampa nativo del sistema\r\n   * Utilizza un iframe invisibile per non interrompere la navigazione\r\n   */\r\n  public static openInPrintPreview(data: FileDatasource): void {\r\n    if (!data || !data.url) return;\r\n\r\n    // Crea l'iframe come elemento fisso e nascosto (dimensioni zero)\r\n    const iframe = this.createIframe(document, data.url, '0', '0');\r\n    iframe.style.position = 'fixed';\r\n    iframe.style.bottom = '0';\r\n    document.body.append(iframe);\r\n\r\n    // Attende il completamento del caricamento del file nell'iframe\r\n    iframe.addEventListener('load', (): void => {\r\n      // Attesa supplementare per consentire il rendering del PDF\r\n      setTimeout(() => {\r\n        iframe.contentWindow?.focus();\r\n        iframe.contentWindow?.print();\r\n\r\n        // Rimozione dell'iframe dal DOM e pulizia della memoria\r\n        setTimeout(() => {\r\n          iframe.remove();\r\n          URL.revokeObjectURL(data.url);\r\n        }, 1000);\r\n      }, 1000);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Scarica un file localmente sul dispositivo dell'utente\r\n   */\r\n  public static download(data: FileDatasource): void {\r\n    if (!data || !data.url) return;\r\n\r\n    const link = document.createElement('a');\r\n    link.href = data.url;\r\n\r\n    // Specifica il nome con cui il file verrà salvato\r\n    link.download = data.name;\r\n\r\n    // Opzionale: assicura che il link non sia visibile\r\n    link.style.display = 'none';\r\n\r\n    document.body.append(link);\r\n    link.click();\r\n\r\n    // Pulizia: rimuove l'elemento e revoca l'URL\r\n    setTimeout(() => {\r\n      link.remove();\r\n      URL.revokeObjectURL(data.url);\r\n    }, 100);\r\n  }\r\n\r\n  /* ----------------------------- Utils ----------------------------- */\r\n  private static createIframe(\r\n    doc: Document,\r\n    url: string,\r\n    width: string,\r\n    height: string,\r\n  ): HTMLIFrameElement {\r\n    const iframe = doc.createElement('iframe');\r\n    iframe.src = url;\r\n    iframe.style.width = width;\r\n    iframe.style.height = height;\r\n    iframe.style.border = 'none';\r\n    return iframe;\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}