uni-manager 0.1.9 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"uni-manager-locale.mjs","sources":["../../../projects/uni-manager/locale/manager.ts","../../../projects/uni-manager/locale/uni-manager-locale.ts"],"sourcesContent":["import { BehaviorSubject } from 'rxjs';\r\n\r\nexport class UniLocaleManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Codice lingua corrente (es. 'it-IT', 'en-US') usato per formattare date e numeri */\r\n private static _locale = navigator.language ?? 'en-US';\r\n\r\n /** Elenco dei codici lingua supportati dall'applicazione (es. ['it-IT', 'en-US']) */\r\n private static _localesSupported: string[] = [];\r\n\r\n /** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */\r\n private static _prefix: string | undefined = undefined;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* --------------------------------- Metodi: get --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Restituisce il codice lingua corrente */\r\n public static get locale(): string {\r\n return this._locale;\r\n }\r\n\r\n /** Restituisce l'array contenente tutti i codici locale supportati.*/\r\n public static get localesSupported(): string[] {\r\n return this._localesSupported;\r\n }\r\n\r\n /** Restituisce solo la lingua (es. 'it') */\r\n public static get language(): string {\r\n return this._locale.split('-')[0];\r\n }\r\n\r\n /** Restituisce solo il paese (es. 'IT') */\r\n public static get region(): string {\r\n const parts = this._locale.split('-');\r\n return parts.length > 1 ? parts[1] : '';\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n public static store = new BehaviorSubject<Record<string, string>>({});\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$ = this.store.asObservable();\r\n\r\n /** Ottiene il dizionario attuale senza sottoscrizione */\r\n public static get currentValue(): Record<string, string> {\r\n return this.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza la configurazione di rete del manager.\r\n * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.\r\n */\r\n public static setup(locale: string | null | undefined, prefix?: string): void {\r\n this._locale = locale ?? 'en-US';\r\n this._prefix = prefix;\r\n }\r\n\r\n /** Imposta l'elenco dei codici lingua supportati dall'applicazione */\r\n public static setLocalesSupported(locales: string[] | undefined): void {\r\n this._localesSupported = locales ?? [];\r\n }\r\n\r\n /**\r\n * Aggiorna lo store locale con il dizionario delle traduzioni fornito.\r\n * Se viene passato undefined, lo store viene inizializzato come oggetto vuoto.\r\n */\r\n public static setTranslations(translations: Record<string, string> | undefined): void {\r\n this.store.next(translations ?? {});\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------- Metodi: traduzioni ------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Traduce una label in base al dizionario caricato.\r\n * Gestisce la composizione della chiave, i parametri dinamici (interpolazione) e il fallback.\r\n */\r\n public static translate(\r\n key: string,\r\n prefix = 'lbl',\r\n params?: Record<string, string | number | Date>,\r\n ): string {\r\n if (!key) return '-';\r\n\r\n // Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola\r\n const keyParts = key.trim().split(/(?=[A-Z])/);\r\n const rootKeyParts = keyParts.filter((p) => p.toLowerCase() !== prefix.toLowerCase());\r\n const cleanKey = rootKeyParts.length > 0 ? rootKeyParts.join('') : undefined;\r\n const capitalizedKey = cleanKey ? cleanKey.charAt(0).toUpperCase() + cleanKey.slice(1) : '';\r\n const finalKey = `${this._prefix ?? ''}${prefix}${capitalizedKey}`;\r\n\r\n // Cerca la chiave in minuscolo (standardizzazione)\r\n let translation = this.currentValue?.[finalKey.toLowerCase()];\r\n\r\n // Log e fallback se la traduzione manca\r\n if (!translation) {\r\n console.warn(`Translation missing for key: ${finalKey}`);\r\n return `🔑 ${finalKey}`;\r\n }\r\n\r\n // Interpolazione variabili\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n const displayValue =\r\n value instanceof Date ? value.toLocaleDateString(this._locale) : String(value);\r\n\r\n translation = translation.replaceAll(`{{${key}}}`, displayValue);\r\n }\r\n }\r\n\r\n return translation;\r\n }\r\n\r\n /**\r\n * Traduce una stringa che contiene parametri separati da un carattere specifico.\r\n * Supporta ora un numero arbitrario di parametri in formato \"label/param1/param2\"\r\n * o semplicemente \"label\".\r\n */\r\n public static translateInlineParams(keyWithParams: string, splitChar: string): string {\r\n if (!keyWithParams) return '-';\r\n\r\n const [label, ...params] = keyWithParams.split(splitChar);\r\n\r\n // Se non ci sono parametri, esegui una traduzione semplice\r\n if (params.length === 0) {\r\n return this.translate(label);\r\n }\r\n\r\n // Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }\r\n const interpolationParameters: Record<string, string> = {};\r\n for (const [index, val] of params.entries()) {\r\n interpolationParameters[`param${index}`] = val;\r\n }\r\n\r\n return this.translate(label, 'lbl', interpolationParameters);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------- Metodi: numeri -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Converte un valore numerico in una stringa formattata secondo il locale impostato.\r\n * Disabilita i separatori delle migliaia e forza un numero fisso di decimali.\r\n */\r\n public static toStringNumber(value: number, decimal: number): string {\r\n return new Intl.NumberFormat(this._locale, {\r\n useGrouping: true,\r\n minimumFractionDigits: decimal,\r\n maximumFractionDigits: decimal,\r\n numberingSystem: 'latn',\r\n }).format(value);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: date --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Formatta una data o una stringa in base al locale corrente.\r\n * Gestisce tre modalità predefinite (date, time, full) e accetta opzioni personalizzate Intl.\r\n */\r\n public static toDate(\r\n date: string | Date,\r\n mode: 'date' | 'time' | 'full' = 'full',\r\n force?: { oldLang: string; newLocale: string },\r\n ): string {\r\n const dt = new Date(date);\r\n\r\n // Controllo: validità data\r\n if (Number.isNaN(dt.getTime())) {\r\n console.error(`[UniLocaleManager] Data non valida fornita a formatDateTime:`, date);\r\n return '';\r\n }\r\n\r\n // Controllo: locale da forzare\r\n const locale = force && this._locale.startsWith(force.oldLang) ? force.newLocale : this._locale;\r\n\r\n switch (mode) {\r\n case 'date': {\r\n return dt.toLocaleDateString(locale);\r\n }\r\n case 'time': {\r\n return dt.toLocaleTimeString(locale);\r\n }\r\n case 'full': {\r\n return dt.toLocaleString(locale);\r\n }\r\n }\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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"}
1
+ {"version":3,"file":"uni-manager-locale.mjs","sources":["../../../projects/uni-manager/locale/manager.ts","../../../projects/uni-manager/locale/uni-manager-locale.ts"],"sourcesContent":["import { BehaviorSubject } from 'rxjs';\r\n\r\nexport class UniLocaleManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Codice lingua corrente (es. 'it-IT', 'en-US') usato per formattare date e numeri */\r\n private static _locale = navigator.language ?? 'en-US';\r\n\r\n /** Elenco dei codici lingua supportati dall'applicazione (es. ['it-IT', 'en-US']) */\r\n private static _localesSupported: string[] = [];\r\n\r\n /** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */\r\n private static _prefix: string | undefined = undefined;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* --------------------------------- Metodi: get --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Restituisce il codice lingua corrente */\r\n public static get locale(): string {\r\n return UniLocaleManager._locale;\r\n }\r\n\r\n /** Restituisce l'array contenente tutti i codici locale supportati.*/\r\n public static get localesSupported(): string[] {\r\n return UniLocaleManager._localesSupported;\r\n }\r\n\r\n /** Restituisce solo la lingua (es. 'it') */\r\n public static get language(): string {\r\n return UniLocaleManager._locale.split('-')[0];\r\n }\r\n\r\n /** Restituisce solo il paese (es. 'IT') */\r\n public static get region(): string {\r\n const parts = UniLocaleManager._locale.split('-');\r\n return parts.length > 1 ? parts[1] : '';\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n public static store = new BehaviorSubject<Record<string, string>>({});\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$ = UniLocaleManager.store.asObservable();\r\n\r\n /** Ottiene il dizionario attuale senza sottoscrizione */\r\n public static get currentValue(): Record<string, string> {\r\n return UniLocaleManager.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza la configurazione di rete del manager.\r\n * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.\r\n */\r\n public static setup(locale: string | null | undefined, prefix?: string): void {\r\n UniLocaleManager._locale = locale ?? 'en-US';\r\n UniLocaleManager._prefix = prefix;\r\n }\r\n\r\n /** Imposta l'elenco dei codici lingua supportati dall'applicazione */\r\n public static setLocalesSupported(locales: string[] | undefined): void {\r\n UniLocaleManager._localesSupported = locales ?? [];\r\n }\r\n\r\n /**\r\n * Aggiorna lo store locale con il dizionario delle traduzioni fornito.\r\n * Se viene passato undefined, lo store viene inizializzato come oggetto vuoto.\r\n */\r\n public static setTranslations(translations: Record<string, string> | undefined): void {\r\n UniLocaleManager.store.next(translations ?? {});\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------- Metodi: traduzioni ------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Traduce una label in base al dizionario caricato.\r\n * Gestisce la composizione della chiave, i parametri dinamici (interpolazione) e il fallback.\r\n */\r\n public static translate(\r\n key: string,\r\n prefix = 'lbl',\r\n params?: Record<string, string | number | Date>,\r\n ): string {\r\n if (!key) return '-';\r\n\r\n // Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola\r\n const keyParts = key.trim().split(/(?=[A-Z])/);\r\n const rootKeyParts = keyParts.filter((p) => p.toLowerCase() !== prefix.toLowerCase());\r\n const cleanKey = rootKeyParts.length > 0 ? rootKeyParts.join('') : undefined;\r\n const capitalizedKey = cleanKey ? cleanKey.charAt(0).toUpperCase() + cleanKey.slice(1) : '';\r\n const finalKey = `${UniLocaleManager._prefix ?? ''}${prefix}${capitalizedKey}`;\r\n\r\n // Cerca la chiave in minuscolo (standardizzazione)\r\n let translation = UniLocaleManager.currentValue?.[finalKey.toLowerCase()];\r\n\r\n // Log e fallback se la traduzione manca\r\n if (!translation) {\r\n console.warn(`Translation missing for key: ${finalKey}`);\r\n return `🔑 ${finalKey}`;\r\n }\r\n\r\n // Interpolazione variabili\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n const displayValue =\r\n value instanceof Date\r\n ? value.toLocaleDateString(UniLocaleManager._locale)\r\n : String(value);\r\n\r\n translation = translation.replaceAll(`{{${key}}}`, displayValue);\r\n }\r\n }\r\n\r\n return translation;\r\n }\r\n\r\n /**\r\n * Traduce una stringa che contiene parametri separati da un carattere specifico.\r\n * Supporta ora un numero arbitrario di parametri in formato \"label/param1/param2\"\r\n * o semplicemente \"label\".\r\n */\r\n public static translateInlineParams(keyWithParams: string, splitChar: string): string {\r\n if (!keyWithParams) return '-';\r\n\r\n const [label, ...params] = keyWithParams.split(splitChar);\r\n\r\n // Se non ci sono parametri, esegui una traduzione semplice\r\n if (params.length === 0) {\r\n return UniLocaleManager.translate(label);\r\n }\r\n\r\n // Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }\r\n const interpolationParameters: Record<string, string> = {};\r\n for (const [index, val] of params.entries()) {\r\n interpolationParameters[`param${index}`] = val;\r\n }\r\n\r\n return UniLocaleManager.translate(label, 'lbl', interpolationParameters);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------- Metodi: numeri -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Converte un valore numerico in una stringa formattata secondo il locale impostato.\r\n * Disabilita i separatori delle migliaia e forza un numero fisso di decimali.\r\n */\r\n public static toStringNumber(value: number, decimal: number): string {\r\n return new Intl.NumberFormat(UniLocaleManager._locale, {\r\n useGrouping: true,\r\n minimumFractionDigits: decimal,\r\n maximumFractionDigits: decimal,\r\n numberingSystem: 'latn',\r\n }).format(value);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: date --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Formatta una data o una stringa in base al locale corrente.\r\n * Gestisce tre modalità predefinite (date, time, full) e accetta opzioni personalizzate Intl.\r\n */\r\n public static toDate(\r\n date: string | Date,\r\n mode: 'date' | 'time' | 'full' = 'full',\r\n force?: { oldLang: string; newLocale: string },\r\n ): string {\r\n const dt = new Date(date);\r\n\r\n // Controllo: validità data\r\n if (Number.isNaN(dt.getTime())) {\r\n console.error(`[UniLocaleManager] Data non valida fornita a formatDateTime:`, date);\r\n return '';\r\n }\r\n\r\n // Controllo: locale da forzare\r\n const locale =\r\n force && UniLocaleManager._locale.startsWith(force.oldLang)\r\n ? force.newLocale\r\n : UniLocaleManager._locale;\r\n\r\n switch (mode) {\r\n case 'date': {\r\n return dt.toLocaleDateString(locale);\r\n }\r\n case 'time': {\r\n return dt.toLocaleTimeString(locale);\r\n }\r\n case 'full': {\r\n return dt.toLocaleString(locale);\r\n }\r\n }\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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"}
@@ -9,7 +9,7 @@ class UniToastManager {
9
9
  * Inizializza il manager con una serie di operazioni
10
10
  */
11
11
  static setup(operations) {
12
- this.manager = operations;
12
+ UniToastManager.manager = operations;
13
13
  }
14
14
  /* ------------------------------------------------------------------------------- */
15
15
  /* -------------------------------- Metodi: show --------------------------------- */
@@ -21,7 +21,7 @@ class UniToastManager {
21
21
  /* Messaggio tradotto */
22
22
  const msg = UniLocaleManager.translate(config.label, 'toast', config.params);
23
23
  const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;
24
- this.manager[config.type ?? 'info'](msgFixed, config);
24
+ UniToastManager.manager[config.type ?? 'info'](msgFixed, config);
25
25
  }
26
26
  /**
27
27
  * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.
@@ -47,7 +47,7 @@ class UniToastManager {
47
47
  }
48
48
  }
49
49
  /* Messaggio tradotto */
50
- this.show({ ...config, params: allParams });
50
+ UniToastManager.show({ ...config, params: allParams });
51
51
  }
52
52
  }
53
53
 
@@ -1 +1 @@
1
- {"version":3,"file":"uni-manager-toast.mjs","sources":["../../../projects/uni-manager/toast/manager.ts","../../../projects/uni-manager/toast/uni-manager-toast.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { UniLocaleManager } from 'uni-manager/locale';\r\nimport type { IToastManager, ToastConfig, ToastHttpConfig } from './model';\r\n\r\nexport class UniToastManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Riferimento interno all'istanza */\r\n private static manager: IToastManager;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza il manager con una serie di operazioni\r\n */\r\n public static setup(operations: IToastManager): void {\r\n this.manager = operations;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: show --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static show(\r\n config: ToastConfig & {\r\n prefix?: string;\r\n suffix?: string;\r\n },\r\n ): void {\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(config.label, 'toast', config.params);\r\n const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;\r\n this.manager[config.type ?? 'info'](msgFixed, config);\r\n }\r\n\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static showHttp<T>(config: ToastConfig & ToastHttpConfig<T>, res: T | undefined): void {\r\n const { params, resParams, formatters } = config;\r\n\r\n /* Parametri statici di base */\r\n const allParams: Record<string, any> = { ...params };\r\n\r\n if (res !== undefined && res !== null) {\r\n /* Se è un array aggiunge il parametro 'count' con la lunghezza dell'array */\r\n if (Array.isArray(res)) {\r\n allParams['count'] = res.length;\r\n } else if (typeof res === 'object' && resParams?.length) {\r\n // Se la proprietà NON esiste nella risposta, allora salta\r\n for (const resParam of resParams ?? []) {\r\n if (!(resParam in res)) continue;\r\n\r\n // Se esiste un formatter per questa chiave lo si usa, altrimenti valore grezzo\r\n const rawValue = res[resParam];\r\n allParams[resParam] = formatters?.[resParam] ? formatters[resParam](rawValue) : rawValue;\r\n }\r\n }\r\n }\r\n\r\n /* Messaggio tradotto */\r\n this.show({ ...config, params: allParams });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;MAIa,eAAe,CAAA;;;;AAU1B;;AAEG;IACI,OAAO,KAAK,CAAC,UAAyB,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;IAC3B;;;;AAKA;;AAEG;IACI,OAAO,IAAI,CAChB,MAGC,EAAA;;AAGD,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA,EAAG,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;AACrE,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;IACvD;AAEA;;AAEG;AACI,IAAA,OAAO,QAAQ,CAAI,MAAwC,EAAE,GAAkB,EAAA;QACpF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;;AAGhD,QAAA,MAAM,SAAS,GAAwB,EAAE,GAAG,MAAM,EAAE;QAEpD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;;AAErC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM;YACjC;iBAAO,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,EAAE,MAAM,EAAE;;AAEvD,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,IAAI,EAAE,EAAE;AACtC,oBAAA,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC;wBAAE;;AAGxB,oBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC9B,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ;gBAC1F;YACF;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7C;AACD;;ACnED;;AAEG;;;;"}
1
+ {"version":3,"file":"uni-manager-toast.mjs","sources":["../../../projects/uni-manager/toast/manager.ts","../../../projects/uni-manager/toast/uni-manager-toast.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { UniLocaleManager } from 'uni-manager/locale';\r\nimport type { IToastManager, ToastConfig, ToastHttpConfig } from './model';\r\n\r\nexport class UniToastManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Riferimento interno all'istanza */\r\n private static manager: IToastManager;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza il manager con una serie di operazioni\r\n */\r\n public static setup(operations: IToastManager): void {\r\n UniToastManager.manager = operations;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: show --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static show(\r\n config: ToastConfig & {\r\n prefix?: string;\r\n suffix?: string;\r\n },\r\n ): void {\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(config.label, 'toast', config.params);\r\n const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;\r\n UniToastManager.manager[config.type ?? 'info'](msgFixed, config);\r\n }\r\n\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static showHttp<T>(config: ToastConfig & ToastHttpConfig<T>, res: T | undefined): void {\r\n const { params, resParams, formatters } = config;\r\n\r\n /* Parametri statici di base */\r\n const allParams: Record<string, any> = { ...params };\r\n\r\n if (res !== undefined && res !== null) {\r\n /* Se è un array aggiunge il parametro 'count' con la lunghezza dell'array */\r\n if (Array.isArray(res)) {\r\n allParams['count'] = res.length;\r\n } else if (typeof res === 'object' && resParams?.length) {\r\n // Se la proprietà NON esiste nella risposta, allora salta\r\n for (const resParam of resParams ?? []) {\r\n if (!(resParam in res)) continue;\r\n\r\n // Se esiste un formatter per questa chiave lo si usa, altrimenti valore grezzo\r\n const rawValue = res[resParam];\r\n allParams[resParam] = formatters?.[resParam] ? formatters[resParam](rawValue) : rawValue;\r\n }\r\n }\r\n }\r\n\r\n /* Messaggio tradotto */\r\n UniToastManager.show({ ...config, params: allParams });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;MAIa,eAAe,CAAA;;;;AAU1B;;AAEG;IACI,OAAO,KAAK,CAAC,UAAyB,EAAA;AAC3C,QAAA,eAAe,CAAC,OAAO,GAAG,UAAU;IACtC;;;;AAKA;;AAEG;IACI,OAAO,IAAI,CAChB,MAGC,EAAA;;AAGD,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA,EAAG,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;AACrE,QAAA,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClE;AAEA;;AAEG;AACI,IAAA,OAAO,QAAQ,CAAI,MAAwC,EAAE,GAAkB,EAAA;QACpF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;;AAGhD,QAAA,MAAM,SAAS,GAAwB,EAAE,GAAG,MAAM,EAAE;QAEpD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;;AAErC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM;YACjC;iBAAO,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,EAAE,MAAM,EAAE;;AAEvD,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,IAAI,EAAE,EAAE;AACtC,oBAAA,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC;wBAAE;;AAGxB,oBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC9B,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ;gBAC1F;YACF;QACF;;AAGA,QAAA,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACxD;AACD;;ACnED;;AAEG;;;;"}
@@ -68,7 +68,7 @@ class UniTypeStringManager {
68
68
  // Pulizia chiave
69
69
  const fixedKey = key.trim();
70
70
  // Unisce il prefisso
71
- return prefix + this.toPascalCase(fixedKey);
71
+ return prefix + UniTypeStringManager.toPascalCase(fixedKey);
72
72
  }
73
73
  /** Converte una stringa in PascalCase (es. "user_id" -> "UserId") */
74
74
  static toPascalCase(key) {
@@ -78,11 +78,11 @@ class UniTypeStringManager {
78
78
  // Pulizia chiave
79
79
  const fixedKey = key.trim();
80
80
  // Normalizza e pulisce
81
- const parts = this.splitString(fixedKey);
81
+ const parts = UniTypeStringManager.splitString(fixedKey);
82
82
  if (parts.length === 0)
83
83
  return '';
84
84
  // Converte in PascalCase
85
- const pascalCased = this.toPascalCaseParts(parts);
85
+ const pascalCased = UniTypeStringManager.toPascalCaseParts(parts);
86
86
  return pascalCased;
87
87
  }
88
88
  /** Converte una stringa in camelCase (es. "user_id" -> "userId") */
@@ -93,13 +93,13 @@ class UniTypeStringManager {
93
93
  // Pulizia chiave
94
94
  const fixedKey = key.trim();
95
95
  // Normalizza e pulisce
96
- const parts = this.splitString(fixedKey);
96
+ const parts = UniTypeStringManager.splitString(fixedKey);
97
97
  if (parts.length === 0)
98
98
  return '';
99
99
  // La prima parola resta minuscola, le successive PascalCase
100
100
  const first = parts[0].toLowerCase();
101
101
  const rest = parts.slice(1);
102
- return first + this.toPascalCaseParts(rest);
102
+ return first + UniTypeStringManager.toPascalCaseParts(rest);
103
103
  }
104
104
  /** Capitalizza solo la prima lettera della stringa */
105
105
  static toCapitalize(key) {
@@ -1 +1 @@
1
- {"version":3,"file":"uni-manager-type.mjs","sources":["../../../projects/uni-manager/type/date.manager.ts","../../../projects/uni-manager/type/number.manager.ts","../../../projects/uni-manager/type/string.manager.ts","../../../projects/uni-manager/type/uni-manager-type.ts"],"sourcesContent":["/**\r\n * Classe di utilità per la gestione e formattazione delle date.\r\n * Fornisce metodi per convertire in modo sicuro valori di tipo Date, stringa o null in formati standardizzati.\r\n */\r\nexport class UniTypeDateManager {\r\n static toYYYYMMDD(date: Date | string | null | undefined): string {\r\n if (!date) return '';\r\n\r\n const d = new Date(date);\r\n\r\n if (Number.isNaN(d.getTime())) return '';\r\n\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n}\r\n","/**\r\n * Utility per la gestione e formattazione di valori numerici.\r\n */\r\nexport class UniTypeNumberManager {\r\n /** Applica il padding a un numero o una stringa */\r\n static toPad(value: number | string | null | undefined, count: number, character = '0'): string {\r\n // Se il valore è null/undefined, riempiamo l'intero campo con il carattere scelto\r\n if (value === null || value === undefined) {\r\n return ''.padStart(count, character);\r\n }\r\n\r\n // Convertiamo in stringa e applichiamo il padding\r\n return value.toString().padStart(count, character);\r\n }\r\n\r\n /** Formatta un numero in una versione leggibile (es: 1000 -> 1K, 1000000 -> 1M) */\r\n static toTruncateAndAdUdm(value: number, decimalDigits = 0, maxIntegerDigits = 3): string {\r\n // Nessun limite impostato o numero inferiore alla soglia definita\r\n if (Math.abs(value) < Math.pow(10, maxIntegerDigits)) {\r\n return value.toFixed(decimalDigits);\r\n }\r\n\r\n // Definizione delle scale di riduzione per grandi numeri\r\n const scales = [\r\n { threshold: 1e12, suffix: 'T' }, // Trilioni\r\n { threshold: 1e9, suffix: 'B' }, // Miliardi\r\n { threshold: 1e6, suffix: 'M' }, // Milioni\r\n { threshold: 1e3, suffix: 'K' }, // Migliaia\r\n ];\r\n\r\n // Itera dalla scala più grande alla più piccola per trovare la soglia corretta\r\n for (const { threshold, suffix } of scales) {\r\n if (Math.abs(value) >= threshold) {\r\n const reduced = value / threshold;\r\n\r\n // parseFloat(toFixed()) rimuove gli zeri decimali superflui (es: 1.50 -> 1.5)\r\n // aggiungendo poi il relativo suffisso (K, M, B, T)\r\n return Number.parseFloat(reduced.toFixed(decimalDigits)).toString() + suffix;\r\n }\r\n }\r\n\r\n // Fallback: se il numero è grande ma non rientra nelle scale (caso raro con la logica attuale)\r\n return value.toFixed(decimalDigits);\r\n }\r\n}\r\n","/**\r\n * Utility per la manipolazione di stringhe\r\n */\r\nexport class UniTypeStringManager {\r\n /** Converte una stringa in formato lblPascalCase (es. \"user_id\" -> \"lblUserId\") */\r\n static toLabelize(key: string | null | undefined, prefix = 'lbl'): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Unisce il prefisso\r\n return prefix + this.toPascalCase(fixedKey);\r\n }\r\n\r\n /** Converte una stringa in PascalCase (es. \"user_id\" -> \"UserId\") */\r\n static toPascalCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = this.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // Converte in PascalCase\r\n const pascalCased = this.toPascalCaseParts(parts);\r\n\r\n return pascalCased;\r\n }\r\n\r\n /** Converte una stringa in camelCase (es. \"user_id\" -> \"userId\") */\r\n static toCamelCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = this.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // La prima parola resta minuscola, le successive PascalCase\r\n const first = parts[0].toLowerCase();\r\n const rest = parts.slice(1);\r\n return first + this.toPascalCaseParts(rest);\r\n }\r\n\r\n /** Capitalizza solo la prima lettera della stringa */\r\n static toCapitalize(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n return fixedKey.charAt(0).toUpperCase() + fixedKey.slice(1);\r\n }\r\n\r\n /** Sostituisce sotto-stringhe all'interno della stringa */\r\n static toReplace(\r\n key: string | null | undefined,\r\n values: { searchValue: string; replaceValue: string }[],\r\n ): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n let fixedKey = key.trim();\r\n\r\n for (const value of values) {\r\n fixedKey = fixedKey.replaceAll(value.searchValue, value.replaceValue);\r\n }\r\n\r\n return fixedKey;\r\n }\r\n\r\n /* ----------------- Utils ----------------- */\r\n private static splitString(key: string): string[] {\r\n return (\r\n key\r\n // Pulisce eventuali caratteri di separazione rimasti in testa (es. \"_tab_name\" -> \"tab_name\")\r\n .replace(/^[-_\\s]+/, '')\r\n\r\n // Isola il CamelCase inserendo un underscore tra minuscole e maiuscole (es. \"userId\" -> \"user_Id\")\r\n .replaceAll(/([a-z])([A-Z])/g, '$1_$2')\r\n\r\n // Isola gli acronimi attaccati a parole Normali (es. \"VARAna\" -> \"VAR_Ana\" grazie alla minuscola \"na\")\r\n .replaceAll(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\r\n\r\n // Applica il taglio definitivo usando come riferimento i trattini, gli underscore e gli spazi\r\n .split(/[-_\\s]+/)\r\n\r\n // Rimuove dall'array finale eventuali stringhe vuote generate da separatori consecutivi\r\n .filter(Boolean)\r\n );\r\n }\r\n\r\n private static toPascalCaseParts(parts: string[]): string {\r\n return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join('');\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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"}
1
+ {"version":3,"file":"uni-manager-type.mjs","sources":["../../../projects/uni-manager/type/date.manager.ts","../../../projects/uni-manager/type/number.manager.ts","../../../projects/uni-manager/type/string.manager.ts","../../../projects/uni-manager/type/uni-manager-type.ts"],"sourcesContent":["/**\r\n * Classe di utilità per la gestione e formattazione delle date.\r\n * Fornisce metodi per convertire in modo sicuro valori di tipo Date, stringa o null in formati standardizzati.\r\n */\r\nexport class UniTypeDateManager {\r\n static toYYYYMMDD(date: Date | string | null | undefined): string {\r\n if (!date) return '';\r\n\r\n const d = new Date(date);\r\n\r\n if (Number.isNaN(d.getTime())) return '';\r\n\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n}\r\n","/**\r\n * Utility per la gestione e formattazione di valori numerici.\r\n */\r\nexport class UniTypeNumberManager {\r\n /** Applica il padding a un numero o una stringa */\r\n static toPad(value: number | string | null | undefined, count: number, character = '0'): string {\r\n // Se il valore è null/undefined, riempiamo l'intero campo con il carattere scelto\r\n if (value === null || value === undefined) {\r\n return ''.padStart(count, character);\r\n }\r\n\r\n // Convertiamo in stringa e applichiamo il padding\r\n return value.toString().padStart(count, character);\r\n }\r\n\r\n /** Formatta un numero in una versione leggibile (es: 1000 -> 1K, 1000000 -> 1M) */\r\n static toTruncateAndAdUdm(value: number, decimalDigits = 0, maxIntegerDigits = 3): string {\r\n // Nessun limite impostato o numero inferiore alla soglia definita\r\n if (Math.abs(value) < Math.pow(10, maxIntegerDigits)) {\r\n return value.toFixed(decimalDigits);\r\n }\r\n\r\n // Definizione delle scale di riduzione per grandi numeri\r\n const scales = [\r\n { threshold: 1e12, suffix: 'T' }, // Trilioni\r\n { threshold: 1e9, suffix: 'B' }, // Miliardi\r\n { threshold: 1e6, suffix: 'M' }, // Milioni\r\n { threshold: 1e3, suffix: 'K' }, // Migliaia\r\n ];\r\n\r\n // Itera dalla scala più grande alla più piccola per trovare la soglia corretta\r\n for (const { threshold, suffix } of scales) {\r\n if (Math.abs(value) >= threshold) {\r\n const reduced = value / threshold;\r\n\r\n // parseFloat(toFixed()) rimuove gli zeri decimali superflui (es: 1.50 -> 1.5)\r\n // aggiungendo poi il relativo suffisso (K, M, B, T)\r\n return Number.parseFloat(reduced.toFixed(decimalDigits)).toString() + suffix;\r\n }\r\n }\r\n\r\n // Fallback: se il numero è grande ma non rientra nelle scale (caso raro con la logica attuale)\r\n return value.toFixed(decimalDigits);\r\n }\r\n}\r\n","/**\r\n * Utility per la manipolazione di stringhe\r\n */\r\nexport class UniTypeStringManager {\r\n /** Converte una stringa in formato lblPascalCase (es. \"user_id\" -> \"lblUserId\") */\r\n static toLabelize(key: string | null | undefined, prefix = 'lbl'): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Unisce il prefisso\r\n return prefix + UniTypeStringManager.toPascalCase(fixedKey);\r\n }\r\n\r\n /** Converte una stringa in PascalCase (es. \"user_id\" -> \"UserId\") */\r\n static toPascalCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = UniTypeStringManager.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // Converte in PascalCase\r\n const pascalCased = UniTypeStringManager.toPascalCaseParts(parts);\r\n\r\n return pascalCased;\r\n }\r\n\r\n /** Converte una stringa in camelCase (es. \"user_id\" -> \"userId\") */\r\n static toCamelCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = UniTypeStringManager.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // La prima parola resta minuscola, le successive PascalCase\r\n const first = parts[0].toLowerCase();\r\n const rest = parts.slice(1);\r\n return first + UniTypeStringManager.toPascalCaseParts(rest);\r\n }\r\n\r\n /** Capitalizza solo la prima lettera della stringa */\r\n static toCapitalize(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n return fixedKey.charAt(0).toUpperCase() + fixedKey.slice(1);\r\n }\r\n\r\n /** Sostituisce sotto-stringhe all'interno della stringa */\r\n static toReplace(\r\n key: string | null | undefined,\r\n values: { searchValue: string; replaceValue: string }[],\r\n ): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n let fixedKey = key.trim();\r\n\r\n for (const value of values) {\r\n fixedKey = fixedKey.replaceAll(value.searchValue, value.replaceValue);\r\n }\r\n\r\n return fixedKey;\r\n }\r\n\r\n /* ----------------- Utils ----------------- */\r\n private static splitString(key: string): string[] {\r\n return (\r\n key\r\n // Pulisce eventuali caratteri di separazione rimasti in testa (es. \"_tab_name\" -> \"tab_name\")\r\n .replace(/^[-_\\s]+/, '')\r\n\r\n // Isola il CamelCase inserendo un underscore tra minuscole e maiuscole (es. \"userId\" -> \"user_Id\")\r\n .replaceAll(/([a-z])([A-Z])/g, '$1_$2')\r\n\r\n // Isola gli acronimi attaccati a parole Normali (es. \"VARAna\" -> \"VAR_Ana\" grazie alla minuscola \"na\")\r\n .replaceAll(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\r\n\r\n // Applica il taglio definitivo usando come riferimento i trattini, gli underscore e gli spazi\r\n .split(/[-_\\s]+/)\r\n\r\n // Rimuove dall'array finale eventuali stringhe vuote generate da separatori consecutivi\r\n .filter(Boolean)\r\n );\r\n }\r\n\r\n private static toPascalCaseParts(parts: string[]): string {\r\n return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join('');\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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"}
@@ -12,7 +12,7 @@ class UniErrorManager {
12
12
  /* ------------------------------------------------------------------------------- */
13
13
  /** Restituisce se lo store ha chiamate in attesa di risposta o meno */
14
14
  static get errors$() {
15
- return this.store$.pipe(map((x) => Array.from(x.entries(), ([id, error]) => ({ ...error, id }))), distinctUntilChanged((prev, curr) => {
15
+ return UniErrorManager.store$.pipe(map((x) => Array.from(x.entries(), ([id, error]) => ({ ...error, id }))), distinctUntilChanged((prev, curr) => {
16
16
  if (prev.length !== curr.length)
17
17
  return false;
18
18
  return prev.every((err, index) => err.id === curr[index].id && err.count === curr[index].count);
@@ -24,10 +24,10 @@ class UniErrorManager {
24
24
  /** Store privato (Subject) */
25
25
  static { this.store = new BehaviorSubject(new Map()); }
26
26
  /** Store pubblico (Observable) */
27
- static { this.store$ = this.store.asObservable(); }
27
+ static { this.store$ = UniErrorManager.store.asObservable(); }
28
28
  /** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */
29
29
  static get currentValue() {
30
- return this.store.getValue();
30
+ return UniErrorManager.store.getValue();
31
31
  }
32
32
  /* ------------------------------------------------------------------------------- */
33
33
  /* -------------------------------- Metodi: store -------------------------------- */
@@ -38,7 +38,7 @@ class UniErrorManager {
38
38
  */
39
39
  static add(id, error) {
40
40
  // Recupera l'ultimo stato (Map)
41
- const oldMap = this.currentValue;
41
+ const oldMap = UniErrorManager.currentValue;
42
42
  // Tenta di recuperare l'oggetto corrente
43
43
  const oldItem = oldMap.get(id);
44
44
  // Crea il nuovo oggetto aggiornando contatore e portando il timestamp al momento attuale
@@ -51,14 +51,14 @@ class UniErrorManager {
51
51
  const newMap = new Map(oldMap);
52
52
  newMap.set(id, newItemMap);
53
53
  // Aggiorna il nuovo stato notificando l'observer
54
- this.store.next(newMap);
54
+ UniErrorManager.store.next(newMap);
55
55
  }
56
56
  /**
57
57
  * Rimuove un errore tramite ID
58
58
  */
59
59
  static remove(id) {
60
60
  // Recupera l'ultimo stato (Map)
61
- const oldMap = this.currentValue;
61
+ const oldMap = UniErrorManager.currentValue;
62
62
  // Controllo: se non è presente l'item allora termina
63
63
  if (!oldMap.has(id))
64
64
  return;
@@ -66,7 +66,7 @@ class UniErrorManager {
66
66
  const newMap = new Map(oldMap);
67
67
  newMap.delete(id);
68
68
  // Aggiorna il nuovo stato notificando l'observer
69
- this.store.next(newMap);
69
+ UniErrorManager.store.next(newMap);
70
70
  }
71
71
  /**
72
72
  * Svuota completamente la lista degli errori
@@ -75,7 +75,7 @@ class UniErrorManager {
75
75
  // Crea una nuova istanza della Map
76
76
  const newMap = new Map();
77
77
  // Aggiorna il nuovo stato notificando l'observer
78
- this.store.next(newMap);
78
+ UniErrorManager.store.next(newMap);
79
79
  }
80
80
  }
81
81
 
@@ -92,7 +92,7 @@ class UniFileManager {
92
92
  return;
93
93
  newWindow.document.title = data.name;
94
94
  // Crea l'iframe e lo aggiunge al body della nuova finestra
95
- const iframe = this.createIframe(newWindow.document, data.url, '100%', '100%');
95
+ const iframe = UniFileManager.createIframe(newWindow.document, data.url, '100%', '100%');
96
96
  newWindow.document.body.style.margin = '0';
97
97
  newWindow.document.body.append(iframe);
98
98
  // Rimuove l'oggetto URL dalla memoria dopo un tempo congruo per il caricamento
@@ -106,7 +106,7 @@ class UniFileManager {
106
106
  if (!data || !data.url)
107
107
  return;
108
108
  // Crea l'iframe come elemento fisso e nascosto (dimensioni zero)
109
- const iframe = this.createIframe(document, data.url, '0', '0');
109
+ const iframe = UniFileManager.createIframe(document, data.url, '0', '0');
110
110
  iframe.style.position = 'fixed';
111
111
  iframe.style.bottom = '0';
112
112
  document.body.append(iframe);
@@ -601,7 +601,7 @@ class UniHttpManager {
601
601
  /* ------------------------------------------------------------------------------- */
602
602
  /** Restituisce se lo store ha chiamate in attesa di risposta o meno */
603
603
  static get hasWaitingRequests$() {
604
- return this.store$.pipe(map((requestMap) => {
604
+ return UniHttpManager.store$.pipe(map((requestMap) => {
605
605
  for (const request of requestMap.values()) {
606
606
  if (request.pendingCount > 0)
607
607
  return true;
@@ -615,10 +615,10 @@ class UniHttpManager {
615
615
  /** Store privato (Subject) */
616
616
  static { this.store = new BehaviorSubject(new Map()); }
617
617
  /** Store pubblico (Observable) */
618
- static { this.store$ = this.store.asObservable(); }
618
+ static { this.store$ = UniHttpManager.store.asObservable(); }
619
619
  /** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */
620
620
  static get currentValue() {
621
- return this.store.getValue();
621
+ return UniHttpManager.store.getValue();
622
622
  }
623
623
  /* ------------------------------------------------------------------------------- */
624
624
  /* -------------------------------- Metodi: setup -------------------------------- */
@@ -628,8 +628,9 @@ class UniHttpManager {
628
628
  * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.
629
629
  */
630
630
  static setup(hostname, port) {
631
- this.hostname = hostname;
632
- this.port = port;
631
+ UniHttpManager.hostname = hostname;
632
+ UniHttpManager.port = port;
633
+ console.log(UniHttpManager.hostname, UniHttpManager.port);
633
634
  }
634
635
  /* ------------------------------------------------------------------------------- */
635
636
  /* -------------------------------- Metodi: CRUD --------------------------------- */
@@ -645,7 +646,8 @@ class UniHttpManager {
645
646
  method: 'GET',
646
647
  };
647
648
  /* API */
648
- const url = getUrl(this.hostname, this.port, config);
649
+ console.log('read$', UniHttpManager.hostname, UniHttpManager.port);
650
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
649
651
  return http$(url, 'one', config, () => executeHttp(url, initCustom)).pipe(tap((res) => {
650
652
  if (Array.isArray(res) && config.toast === undefined) {
651
653
  UniToastManager$1.show({
@@ -676,7 +678,8 @@ class UniHttpManager {
676
678
  toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
677
679
  };
678
680
  /* API */
679
- const url = getUrl(this.hostname, this.port, config);
681
+ console.log('create$', UniHttpManager.hostname, UniHttpManager.port);
682
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
680
683
  return http$(url, 'one', configCustom, () => executeHttp(url, initCustom));
681
684
  }
682
685
  /**
@@ -698,7 +701,7 @@ class UniHttpManager {
698
701
  toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
699
702
  };
700
703
  /* API */
701
- const url = getUrl(this.hostname, this.port, config);
704
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
702
705
  return http$(url, 'one', configCustom, () => executeHttp(url, initCustom));
703
706
  }
704
707
  /**
@@ -717,7 +720,7 @@ class UniHttpManager {
717
720
  toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
718
721
  };
719
722
  /* API */
720
- const url = getUrl(this.hostname, this.port, config);
723
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
721
724
  return http$(url, 'one', configCustom, () => executeHttp(url, initCustom));
722
725
  }
723
726
  /* ------------------------------------------------------------------------------- */
@@ -734,7 +737,7 @@ class UniHttpManager {
734
737
  method: 'GET',
735
738
  };
736
739
  /* API */
737
- const url = getUrl(this.hostname, this.port, config);
740
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
738
741
  return http$(url, 'image', config, () => executeBlob(url, initCustom));
739
742
  }
740
743
  /**
@@ -753,7 +756,7 @@ class UniHttpManager {
753
756
  toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
754
757
  };
755
758
  /* API */
756
- const url = getUrl(this.hostname, this.port, config);
759
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
757
760
  return http$(url, 'file', configCustom, () => executeBlob(url, initCustom));
758
761
  }
759
762
  /* ------------------------------------------------------------------------------- */
@@ -770,7 +773,7 @@ class UniHttpManager {
770
773
  method: 'GET',
771
774
  };
772
775
  /* API */
773
- const url = getUrl(this.hostname, this.port, config);
776
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
774
777
  return httpPolling$(url, config, () => executeHttp(url, initCustom));
775
778
  }
776
779
  /**
@@ -786,7 +789,7 @@ class UniHttpManager {
786
789
  body: JSON.stringify(body),
787
790
  };
788
791
  /* API */
789
- const url = getUrl(this.hostname, this.port, config);
792
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
790
793
  return httpPolling$(url, config, () => executeHttp(url, initCustom));
791
794
  }
792
795
  /**
@@ -806,7 +809,7 @@ class UniHttpManager {
806
809
  initCustom.body = JSON.stringify(body);
807
810
  }
808
811
  /* API */
809
- const url = getUrl(this.hostname, this.port, config);
812
+ const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
810
813
  return httpPolling$(url, config, () => executeHttp(url, initCustom));
811
814
  }
812
815
  }
@@ -826,19 +829,19 @@ class UniLocaleManager {
826
829
  /* ------------------------------------------------------------------------------- */
827
830
  /** Restituisce il codice lingua corrente */
828
831
  static get locale() {
829
- return this._locale;
832
+ return UniLocaleManager._locale;
830
833
  }
831
834
  /** Restituisce l'array contenente tutti i codici locale supportati.*/
832
835
  static get localesSupported() {
833
- return this._localesSupported;
836
+ return UniLocaleManager._localesSupported;
834
837
  }
835
838
  /** Restituisce solo la lingua (es. 'it') */
836
839
  static get language() {
837
- return this._locale.split('-')[0];
840
+ return UniLocaleManager._locale.split('-')[0];
838
841
  }
839
842
  /** Restituisce solo il paese (es. 'IT') */
840
843
  static get region() {
841
- const parts = this._locale.split('-');
844
+ const parts = UniLocaleManager._locale.split('-');
842
845
  return parts.length > 1 ? parts[1] : '';
843
846
  }
844
847
  /* ------------------------------------------------------------------------------- */
@@ -847,10 +850,10 @@ class UniLocaleManager {
847
850
  /** Store privato (Subject) */
848
851
  static { this.store = new BehaviorSubject({}); }
849
852
  /** Store pubblico (Observable) */
850
- static { this.store$ = this.store.asObservable(); }
853
+ static { this.store$ = UniLocaleManager.store.asObservable(); }
851
854
  /** Ottiene il dizionario attuale senza sottoscrizione */
852
855
  static get currentValue() {
853
- return this.store.getValue();
856
+ return UniLocaleManager.store.getValue();
854
857
  }
855
858
  /* ------------------------------------------------------------------------------- */
856
859
  /* -------------------------------- Metodi: setup -------------------------------- */
@@ -860,19 +863,19 @@ class UniLocaleManager {
860
863
  * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.
861
864
  */
862
865
  static setup(locale, prefix) {
863
- this._locale = locale ?? 'en-US';
864
- this._prefix = prefix;
866
+ UniLocaleManager._locale = locale ?? 'en-US';
867
+ UniLocaleManager._prefix = prefix;
865
868
  }
866
869
  /** Imposta l'elenco dei codici lingua supportati dall'applicazione */
867
870
  static setLocalesSupported(locales) {
868
- this._localesSupported = locales ?? [];
871
+ UniLocaleManager._localesSupported = locales ?? [];
869
872
  }
870
873
  /**
871
874
  * Aggiorna lo store locale con il dizionario delle traduzioni fornito.
872
875
  * Se viene passato undefined, lo store viene inizializzato come oggetto vuoto.
873
876
  */
874
877
  static setTranslations(translations) {
875
- this.store.next(translations ?? {});
878
+ UniLocaleManager.store.next(translations ?? {});
876
879
  }
877
880
  /* ------------------------------------------------------------------------------- */
878
881
  /* ----------------------------- Metodi: traduzioni ------------------------------ */
@@ -889,9 +892,9 @@ class UniLocaleManager {
889
892
  const rootKeyParts = keyParts.filter((p) => p.toLowerCase() !== prefix.toLowerCase());
890
893
  const cleanKey = rootKeyParts.length > 0 ? rootKeyParts.join('') : undefined;
891
894
  const capitalizedKey = cleanKey ? cleanKey.charAt(0).toUpperCase() + cleanKey.slice(1) : '';
892
- const finalKey = `${this._prefix ?? ''}${prefix}${capitalizedKey}`;
895
+ const finalKey = `${UniLocaleManager._prefix ?? ''}${prefix}${capitalizedKey}`;
893
896
  // Cerca la chiave in minuscolo (standardizzazione)
894
- let translation = this.currentValue?.[finalKey.toLowerCase()];
897
+ let translation = UniLocaleManager.currentValue?.[finalKey.toLowerCase()];
895
898
  // Log e fallback se la traduzione manca
896
899
  if (!translation) {
897
900
  console.warn(`Translation missing for key: ${finalKey}`);
@@ -900,7 +903,9 @@ class UniLocaleManager {
900
903
  // Interpolazione variabili
901
904
  if (params) {
902
905
  for (const [key, value] of Object.entries(params)) {
903
- const displayValue = value instanceof Date ? value.toLocaleDateString(this._locale) : String(value);
906
+ const displayValue = value instanceof Date
907
+ ? value.toLocaleDateString(UniLocaleManager._locale)
908
+ : String(value);
904
909
  translation = translation.replaceAll(`{{${key}}}`, displayValue);
905
910
  }
906
911
  }
@@ -917,14 +922,14 @@ class UniLocaleManager {
917
922
  const [label, ...params] = keyWithParams.split(splitChar);
918
923
  // Se non ci sono parametri, esegui una traduzione semplice
919
924
  if (params.length === 0) {
920
- return this.translate(label);
925
+ return UniLocaleManager.translate(label);
921
926
  }
922
927
  // Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }
923
928
  const interpolationParameters = {};
924
929
  for (const [index, val] of params.entries()) {
925
930
  interpolationParameters[`param${index}`] = val;
926
931
  }
927
- return this.translate(label, 'lbl', interpolationParameters);
932
+ return UniLocaleManager.translate(label, 'lbl', interpolationParameters);
928
933
  }
929
934
  /* ------------------------------------------------------------------------------- */
930
935
  /* ------------------------------- Metodi: numeri -------------------------------- */
@@ -934,7 +939,7 @@ class UniLocaleManager {
934
939
  * Disabilita i separatori delle migliaia e forza un numero fisso di decimali.
935
940
  */
936
941
  static toStringNumber(value, decimal) {
937
- return new Intl.NumberFormat(this._locale, {
942
+ return new Intl.NumberFormat(UniLocaleManager._locale, {
938
943
  useGrouping: true,
939
944
  minimumFractionDigits: decimal,
940
945
  maximumFractionDigits: decimal,
@@ -956,7 +961,9 @@ class UniLocaleManager {
956
961
  return '';
957
962
  }
958
963
  // Controllo: locale da forzare
959
- const locale = force && this._locale.startsWith(force.oldLang) ? force.newLocale : this._locale;
964
+ const locale = force && UniLocaleManager._locale.startsWith(force.oldLang)
965
+ ? force.newLocale
966
+ : UniLocaleManager._locale;
960
967
  switch (mode) {
961
968
  case 'date': {
962
969
  return dt.toLocaleDateString(locale);
@@ -980,7 +987,7 @@ class UniToastManager {
980
987
  * Inizializza il manager con una serie di operazioni
981
988
  */
982
989
  static setup(operations) {
983
- this.manager = operations;
990
+ UniToastManager.manager = operations;
984
991
  }
985
992
  /* ------------------------------------------------------------------------------- */
986
993
  /* -------------------------------- Metodi: show --------------------------------- */
@@ -992,7 +999,7 @@ class UniToastManager {
992
999
  /* Messaggio tradotto */
993
1000
  const msg = UniLocaleManager$1.translate(config.label, 'toast', config.params);
994
1001
  const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;
995
- this.manager[config.type ?? 'info'](msgFixed, config);
1002
+ UniToastManager.manager[config.type ?? 'info'](msgFixed, config);
996
1003
  }
997
1004
  /**
998
1005
  * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.
@@ -1018,7 +1025,7 @@ class UniToastManager {
1018
1025
  }
1019
1026
  }
1020
1027
  /* Messaggio tradotto */
1021
- this.show({ ...config, params: allParams });
1028
+ UniToastManager.show({ ...config, params: allParams });
1022
1029
  }
1023
1030
  }
1024
1031
 
@@ -1092,7 +1099,7 @@ class UniTypeStringManager {
1092
1099
  // Pulizia chiave
1093
1100
  const fixedKey = key.trim();
1094
1101
  // Unisce il prefisso
1095
- return prefix + this.toPascalCase(fixedKey);
1102
+ return prefix + UniTypeStringManager.toPascalCase(fixedKey);
1096
1103
  }
1097
1104
  /** Converte una stringa in PascalCase (es. "user_id" -> "UserId") */
1098
1105
  static toPascalCase(key) {
@@ -1102,11 +1109,11 @@ class UniTypeStringManager {
1102
1109
  // Pulizia chiave
1103
1110
  const fixedKey = key.trim();
1104
1111
  // Normalizza e pulisce
1105
- const parts = this.splitString(fixedKey);
1112
+ const parts = UniTypeStringManager.splitString(fixedKey);
1106
1113
  if (parts.length === 0)
1107
1114
  return '';
1108
1115
  // Converte in PascalCase
1109
- const pascalCased = this.toPascalCaseParts(parts);
1116
+ const pascalCased = UniTypeStringManager.toPascalCaseParts(parts);
1110
1117
  return pascalCased;
1111
1118
  }
1112
1119
  /** Converte una stringa in camelCase (es. "user_id" -> "userId") */
@@ -1117,13 +1124,13 @@ class UniTypeStringManager {
1117
1124
  // Pulizia chiave
1118
1125
  const fixedKey = key.trim();
1119
1126
  // Normalizza e pulisce
1120
- const parts = this.splitString(fixedKey);
1127
+ const parts = UniTypeStringManager.splitString(fixedKey);
1121
1128
  if (parts.length === 0)
1122
1129
  return '';
1123
1130
  // La prima parola resta minuscola, le successive PascalCase
1124
1131
  const first = parts[0].toLowerCase();
1125
1132
  const rest = parts.slice(1);
1126
- return first + this.toPascalCaseParts(rest);
1133
+ return first + UniTypeStringManager.toPascalCaseParts(rest);
1127
1134
  }
1128
1135
  /** Capitalizza solo la prima lettera della stringa */
1129
1136
  static toCapitalize(key) {