diff --git a/public/_app-bi-demo.html b/public/_app-bi-demo.html index 2514c05..70c88b8 100644 --- a/public/_app-bi-demo.html +++ b/public/_app-bi-demo.html @@ -71,7 +71,7 @@ - + - + diff --git a/public/admin/organizations.html b/public/admin/organizations.html index 6bc28f9..07c1f0e 100644 --- a/public/admin/organizations.html +++ b/public/admin/organizations.html @@ -148,7 +148,7 @@ - + diff --git a/public/admin/users.html b/public/admin/users.html index 4499b20..e9dc3fd 100644 --- a/public/admin/users.html +++ b/public/admin/users.html @@ -170,7 +170,7 @@ - + diff --git a/public/architecture.html b/public/architecture.html index d45f7cd..85e326a 100644 --- a/public/architecture.html +++ b/public/architecture.html @@ -1091,7 +1091,7 @@ - + diff --git a/public/assessment.html b/public/assessment.html index ab9419d..d9ffbe2 100644 --- a/public/assessment.html +++ b/public/assessment.html @@ -155,7 +155,7 @@ - + diff --git a/public/assets.html b/public/assets.html index 6172d40..ce068b4 100644 --- a/public/assets.html +++ b/public/assets.html @@ -362,7 +362,7 @@ - + diff --git a/public/calendario.html b/public/calendario.html index ab8329a..3efad53 100644 --- a/public/calendario.html +++ b/public/calendario.html @@ -152,7 +152,7 @@ - + diff --git a/public/companies.html b/public/companies.html index cfceed6..7f1dfa2 100644 --- a/public/companies.html +++ b/public/companies.html @@ -350,7 +350,7 @@ - + diff --git a/public/competenze.html b/public/competenze.html index ee0c3bb..5360822 100644 --- a/public/competenze.html +++ b/public/competenze.html @@ -184,7 +184,7 @@ - + diff --git a/public/controlli-periodici.html b/public/controlli-periodici.html index b86e30e..40aeef0 100644 --- a/public/controlli-periodici.html +++ b/public/controlli-periodici.html @@ -137,7 +137,7 @@ - + diff --git a/public/cross-analysis.html b/public/cross-analysis.html index 6f98a92..51247c3 100644 --- a/public/cross-analysis.html +++ b/public/cross-analysis.html @@ -383,7 +383,7 @@ - + diff --git a/public/dashboard.html b/public/dashboard.html index 63bef5a..cdcd8a3 100644 --- a/public/dashboard.html +++ b/public/dashboard.html @@ -144,7 +144,7 @@ - + diff --git a/public/guida.html b/public/guida.html index 6b05738..beeff90 100644 --- a/public/guida.html +++ b/public/guida.html @@ -1143,7 +1143,7 @@ - + diff --git a/public/incidents.html b/public/incidents.html index 99aa730..54983a5 100644 --- a/public/incidents.html +++ b/public/incidents.html @@ -352,7 +352,7 @@ - + diff --git a/public/integrazioniext.html b/public/integrazioniext.html index c6f633f..20ba344 100644 --- a/public/integrazioniext.html +++ b/public/integrazioniext.html @@ -912,7 +912,7 @@ curl -H "X-API-Key: nis2_TUA_CHIAVE" \ - + - + diff --git a/public/isms.html b/public/isms.html index 0c0571b..65956fa 100644 --- a/public/isms.html +++ b/public/isms.html @@ -185,7 +185,7 @@ - + diff --git a/public/js/common.js b/public/js/common.js index b42ae37..7ccd9ed 100644 --- a/public/js/common.js +++ b/public/js/common.js @@ -996,8 +996,24 @@ function switchLang(lang) { var STORAGE_KEY = 'nis2_ai_chat'; var history = []; + var pending = false; // ARIA sta elaborando una risposta (mostra indicatore "sta scrivendo") try { history = JSON.parse(sessionStorage.getItem(STORAGE_KEY) || '[]'); } catch (e) {} + // Stile una-tantum per l'indicatore "ARIA sta scrivendo…" (puntini animati, + // rispetta prefers-reduced-motion per accessibilita AGID/WCAG). + if (!document.getElementById('nis2-aria-style')) { + var ariaStyle = document.createElement('style'); + ariaStyle.id = 'nis2-aria-style'; + ariaStyle.textContent = + '@keyframes nis2AriaBlink{0%,80%,100%{opacity:.2}40%{opacity:1}}' + + '.nis2-aria-dot{display:inline-block;width:6px;height:6px;margin:0 1px;' + + 'border-radius:50%;background:#7C3AED;animation:nis2AriaBlink 1.2s infinite both}' + + '.nis2-aria-dot:nth-child(2){animation-delay:.2s}' + + '.nis2-aria-dot:nth-child(3){animation-delay:.4s}' + + '@media (prefers-reduced-motion:reduce){.nis2-aria-dot{animation:none;opacity:.6}}'; + document.head.appendChild(ariaStyle); + } + function escHtml(s) { return String(s).replace(/[&<>"']/g, function (c) { return ({'&':'&','<':'<','>':'>','"':'"',"'":'''})[c]; @@ -1043,31 +1059,60 @@ function switchLang(lang) { + (list || '
Ciao! Chiedimi qualcosa su NIS2: misure di ' + 'sicurezza, audit, fornitori, incident response…
') + + (pending + ? '
' + + '
ARIA sta scrivendo ' + + '' + + '
' + : '') + '' + '
' - + '' - + '' + '
'; document.getElementById('ai-chat-close').onclick = closePanel; document.getElementById('ai-chat-form').onsubmit = onSubmit; + var inputEl = document.getElementById('ai-chat-input'); + if (inputEl) { + // Invio = invia · Shift+Invio = vai a capo (textarea multi-riga) + inputEl.addEventListener('keydown', function (e) { + if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); onSubmit(e); } + }); + // Auto-crescita altezza della textarea fino a max-height + inputEl.addEventListener('input', function () { + inputEl.style.height = 'auto'; + inputEl.style.height = Math.min(inputEl.scrollHeight, 120) + 'px'; + }); + if (!pending) inputEl.focus(); + } var msgs = document.getElementById('ai-chat-msgs'); msgs.scrollTop = msgs.scrollHeight; } async function onSubmit(ev) { ev.preventDefault(); + if (pending) return; // evita invii doppi mentre ARIA elabora var input = document.getElementById('ai-chat-input'); var text = (input.value || '').trim(); if (!text) return; history.push({ role: 'user', content: text }); sessionStorage.setItem(STORAGE_KEY, JSON.stringify(history)); + pending = true; render(); try { // AI nativa NIS2 (RAG con KB Multi-Livello già attivo) @@ -1094,6 +1139,7 @@ function switchLang(lang) { content: '⚠️ ARIA non risponde in questo momento. Riprova tra poco.' }); } + pending = false; sessionStorage.setItem(STORAGE_KEY, JSON.stringify(history)); render(); } diff --git a/public/kb.html b/public/kb.html index d3611a1..d365f16 100644 --- a/public/kb.html +++ b/public/kb.html @@ -151,7 +151,7 @@ - + diff --git a/public/login.html b/public/login.html index 4f10fe0..4bce150 100644 --- a/public/login.html +++ b/public/login.html @@ -95,7 +95,7 @@ - + - + diff --git a/public/misure-requisiti.html b/public/misure-requisiti.html index 8288e2f..2b1e3b0 100644 --- a/public/misure-requisiti.html +++ b/public/misure-requisiti.html @@ -168,7 +168,7 @@ - + diff --git a/public/mktg-api-doc.html b/public/mktg-api-doc.html index 14801ba..bccef8b 100644 --- a/public/mktg-api-doc.html +++ b/public/mktg-api-doc.html @@ -426,6 +426,6 @@ curl https://nis2.agile.software/api/services/status - + diff --git a/public/normative.html b/public/normative.html index f9784b6..d5a255e 100644 --- a/public/normative.html +++ b/public/normative.html @@ -113,7 +113,7 @@ - + diff --git a/public/onboarding.html b/public/onboarding.html index b65b77b..5b41384 100644 --- a/public/onboarding.html +++ b/public/onboarding.html @@ -495,7 +495,7 @@ - + - + diff --git a/public/policies.html b/public/policies.html index b5496d9..0636287 100644 --- a/public/policies.html +++ b/public/policies.html @@ -334,7 +334,7 @@ - + diff --git a/public/raci.html b/public/raci.html index 07bda7f..97d3290 100644 --- a/public/raci.html +++ b/public/raci.html @@ -132,7 +132,7 @@ - + diff --git a/public/register.html b/public/register.html index b0b8f40..418eb17 100644 --- a/public/register.html +++ b/public/register.html @@ -269,7 +269,7 @@ - + - + diff --git a/public/review-schedule.html b/public/review-schedule.html index 2dfb5d6..d1d3743 100644 --- a/public/review-schedule.html +++ b/public/review-schedule.html @@ -142,7 +142,7 @@ - + diff --git a/public/risks.html b/public/risks.html index ead9680..b147b07 100644 --- a/public/risks.html +++ b/public/risks.html @@ -495,7 +495,7 @@ - + diff --git a/public/settings.html b/public/settings.html index 2c8d925..66b47d9 100644 --- a/public/settings.html +++ b/public/settings.html @@ -689,7 +689,7 @@ - + diff --git a/public/stakeholder-activities.html b/public/stakeholder-activities.html index 967ee94..fef385d 100644 --- a/public/stakeholder-activities.html +++ b/public/stakeholder-activities.html @@ -195,7 +195,7 @@ - + diff --git a/public/stakeholders.html b/public/stakeholders.html index 639eebf..3b37836 100644 --- a/public/stakeholders.html +++ b/public/stakeholders.html @@ -192,7 +192,7 @@ - + diff --git a/public/supply-chain.html b/public/supply-chain.html index 725d3e9..5879fb1 100644 --- a/public/supply-chain.html +++ b/public/supply-chain.html @@ -478,7 +478,7 @@ - + diff --git a/public/training.html b/public/training.html index 8280085..8d8b265 100644 --- a/public/training.html +++ b/public/training.html @@ -293,7 +293,7 @@ - + diff --git a/public/version.json b/public/version.json index bf48164..94abcb8 100644 --- a/public/version.json +++ b/public/version.json @@ -1 +1 @@ -{"version": "1.24.5", "build": "2026-06-21-v1.24.5", "date": "2026-06-21", "changelog": "Internazionalizzazione EN del modulo Fornitori: il Portale Fornitori esterno (supplier-portal.html) e' ora bilingue IT/EN con meccanismo self-contained (dizionario inline + toggle lingua, ~79 stringhe) preservando il flusso OTP/token; la pagina interna Supply Chain (supply-chain.html) ha l'i18n estesa (data-i18n + I18n.t, +82 chiavi sp.* in i18n.js, ora 120 totali). Le domande dei questionari restano nei dati (non tradotte)."} +{"version": "1.24.6", "build": "2026-06-23-v1.24.6", "date": "2026-06-23", "changelog": "Assistente AI ARIA (chat): aggiunto l'indicatore \"ARIA sta scrivendo...\" durante l'elaborazione (con campo input disabilitato anti-doppio-invio) cosi' l'utente vede che la risposta e' in arrivo e non pensa che sia bloccata; il campo di scrittura e' ora multi-riga (Invio per inviare, Shift+Invio per andare a capo). Risolti ticket #418/#420 (sembrava non rispondere / serviva riaprire) e #425 (Shift+Invio). Indicatore conforme a prefers-reduced-motion (AGID/WCAG)."} diff --git a/public/whistleblowing.html b/public/whistleblowing.html index 61d30a3..bb013cb 100644 --- a/public/whistleblowing.html +++ b/public/whistleblowing.html @@ -208,7 +208,7 @@ - + diff --git a/public/workflow.html b/public/workflow.html index 83c65ae..4ad0ca3 100644 --- a/public/workflow.html +++ b/public/workflow.html @@ -322,7 +322,7 @@ - +