@@ -370,40 +370,44 @@ export default function AssistentePage() {
370370 { /* Controlli team (start/stop) — solo desktop, nascosti sul cloud read-only */ }
371371 { isCloud !== true && (
372372 < >
373- { ! isActive && (
374- < button
375- onClick = { handleStart }
376- disabled = { startBusy || status == null }
377- className = "px-6 py-2.5 rounded-lg text-[12px] font-bold tracking-wide transition-all"
378- style = { {
379- background :
380- startBusy || status == null
381- ? "var(--color-border)"
382- : "var(--color-green)" ,
383- color :
384- startBusy || status == null ? "var(--color-dim)" : "#000" ,
385- cursor :
386- startBusy || status == null ? "not-allowed" : "pointer" ,
387- opacity : startBusy ? 0.7 : 1 ,
388- } }
389- >
390- { startLabel }
391- </ button >
392- ) }
393- { isActive && (
394- < button
395- onClick = { handleStop }
396- disabled = { stopBusy }
397- className = "px-5 py-2.5 rounded-lg text-[12px] font-bold tracking-wide transition-all border border-[var(--color-red)] hover:bg-[var(--color-red)] hover:text-[#000]"
398- style = { {
399- color : "var(--color-red)" ,
400- cursor : stopBusy ? "not-allowed" : "pointer" ,
401- opacity : stopBusy ? 0.6 : 1 ,
402- } }
403- >
404- { stopBusy ? "Fermando…" : "Ferma" }
405- </ button >
406- ) }
373+ { ! isActive && (
374+ < button
375+ onClick = { handleStart }
376+ disabled = { startBusy || status == null }
377+ className = "px-6 py-2.5 rounded-lg text-[12px] font-bold tracking-wide transition-all"
378+ style = { {
379+ background :
380+ startBusy || status == null
381+ ? "var(--color-border)"
382+ : "var(--color-green)" ,
383+ color :
384+ startBusy || status == null
385+ ? "var(--color-dim)"
386+ : "#000" ,
387+ cursor :
388+ startBusy || status == null
389+ ? "not-allowed"
390+ : "pointer" ,
391+ opacity : startBusy ? 0.7 : 1 ,
392+ } }
393+ >
394+ { startLabel }
395+ </ button >
396+ ) }
397+ { isActive && (
398+ < button
399+ onClick = { handleStop }
400+ disabled = { stopBusy }
401+ className = "px-5 py-2.5 rounded-lg text-[12px] font-bold tracking-wide transition-all border border-[var(--color-red)] hover:bg-[var(--color-red)] hover:text-[#000]"
402+ style = { {
403+ color : "var(--color-red)" ,
404+ cursor : stopBusy ? "not-allowed" : "pointer" ,
405+ opacity : stopBusy ? 0.6 : 1 ,
406+ } }
407+ >
408+ { stopBusy ? "Fermando…" : "Ferma" }
409+ </ button >
410+ ) }
407411 </ >
408412 ) }
409413 { startBanner && (
@@ -649,91 +653,93 @@ export default function AssistentePage() {
649653
650654 { /* Input chat — [JHT-DASHBOARD-SPLIT] composer = controllo, solo desktop */ }
651655 { isCloud !== true && (
652- < form
653- onSubmit = { ( e ) => {
654- e . preventDefault ( ) ;
655- handleSend ( ) ;
656- } }
657- className = "flex items-center border border-t-0 border-[var(--color-border)] overflow-hidden"
658- style = { {
659- background : "#0d1117" ,
660- borderRadius : chatFullscreen ? "0" : "0 0 12px 12px" ,
661- margin : chatFullscreen ? "0 16px 16px 16px" : undefined ,
662- } }
663- >
664- < input
665- ref = { fileInputRef }
666- type = "file"
667- multiple
668- onChange = { handleFileSelect }
669- className = "hidden"
670- accept = ".pdf,.doc,.docx,.txt,.md,.png,.jpg,.jpeg,.csv,.xlsx,.xls,.json,.yaml,.yml"
671- />
672- < button
673- type = "button"
674- onClick = { ( ) => fileInputRef . current ?. click ( ) }
675- disabled = { sending }
676- className = "pl-3 pr-1 py-3 transition-colors cursor-pointer"
677- aria-label = "Allega file"
678- title = "Allega file"
656+ < form
657+ onSubmit = { ( e ) => {
658+ e . preventDefault ( ) ;
659+ handleSend ( ) ;
660+ } }
661+ className = "flex items-center border border-t-0 border-[var(--color-border)] overflow-hidden"
679662 style = { {
680- color :
681- attachedFiles . length > 0
682- ? "var(--color-green)"
683- : "var(--color-dim)" ,
663+ background : "#0d1117" ,
664+ borderRadius : chatFullscreen ? "0" : "0 0 12px 12px" ,
665+ margin : chatFullscreen
666+ ? "0 16px 16px 16px"
667+ : undefined ,
684668 } }
685669 >
686- < svg
687- aria-hidden = "true"
688- width = "16"
689- height = "16"
690- viewBox = "0 0 24 24"
691- fill = "none"
692- stroke = "currentColor"
693- strokeWidth = "2"
694- strokeLinecap = "round"
695- strokeLinejoin = "round"
670+ < input
671+ ref = { fileInputRef }
672+ type = "file"
673+ multiple
674+ onChange = { handleFileSelect }
675+ className = "hidden"
676+ accept = ".pdf,.doc,.docx,.txt,.md,.png,.jpg,.jpeg,.csv,.xlsx,.xls,.json,.yaml,.yml"
677+ />
678+ < button
679+ type = "button"
680+ onClick = { ( ) => fileInputRef . current ?. click ( ) }
681+ disabled = { sending }
682+ className = "pl-3 pr-1 py-3 transition-colors cursor-pointer"
683+ aria-label = "Allega file"
684+ title = "Allega file"
685+ style = { {
686+ color :
687+ attachedFiles . length > 0
688+ ? "var(--color-green)"
689+ : "var(--color-dim)" ,
690+ } }
696691 >
697- < path d = "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" />
698- </ svg >
699- </ button >
700- < input
701- ref = { inputRef }
702- type = "text "
703- value = { input }
704- onChange = { ( e ) => setInput ( e . target . value ) }
705- placeholder = {
706- attachedFiles . length > 0
707- ? ` ${ attachedFiles . length } file allegat ${ attachedFiles . length === 1 ? "o" : "i" } — scrivi un messaggio...`
708- : "Scrivi un messaggio..."
709- }
710- disabled = { sending }
711- className = "flex-1 px-3 py-3 text-[12px] bg-transparent outline-none"
712- style = { { color : "var(--color-bright)" } }
713- />
714- < button
715- type = "submit"
716- disabled = {
717- ( ! input . trim ( ) && attachedFiles . length === 0 ) ||
718- sending
719- }
720- className = "px-5 py-3 text-[11px] font-semibold tracking-widest uppercase transition-colors"
721- style = { {
722- color :
723- ( ! input . trim ( ) && attachedFiles . length === 0 ) ||
724- sending
725- ? "var(--color-dim)"
726- : "var(--color-green)" ,
727- cursor :
692+ < svg
693+ aria-hidden = "true"
694+ width = "16"
695+ height = "16"
696+ viewBox = "0 0 24 24"
697+ fill = "none "
698+ stroke = "currentColor"
699+ strokeWidth = "2"
700+ strokeLinecap = "round"
701+ strokeLinejoin = "round"
702+ >
703+ < path d = "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" />
704+ </ svg >
705+ </ button >
706+ < input
707+ ref = { inputRef }
708+ type = "text"
709+ value = { input }
710+ onChange = { ( e ) => setInput ( e . target . value ) }
711+ placeholder = {
712+ attachedFiles . length > 0
713+ ? ` ${ attachedFiles . length } file allegat ${ attachedFiles . length === 1 ? "o" : "i" } — scrivi un messaggio...`
714+ : "Scrivi un messaggio..."
715+ }
716+ disabled = { sending }
717+ className = "flex-1 px-3 py-3 text-[12px] bg-transparent outline-none"
718+ style = { { color : "var(--color-bright)" } }
719+ />
720+ < button
721+ type = "submit"
722+ disabled = {
728723 ( ! input . trim ( ) && attachedFiles . length === 0 ) ||
729724 sending
730- ? "default"
731- : "pointer" ,
732- } }
733- >
734- { sending ? "…" : "invia" }
735- </ button >
736- </ form >
725+ }
726+ className = "px-5 py-3 text-[11px] font-semibold tracking-widest uppercase transition-colors"
727+ style = { {
728+ color :
729+ ( ! input . trim ( ) && attachedFiles . length === 0 ) ||
730+ sending
731+ ? "var(--color-dim)"
732+ : "var(--color-green)" ,
733+ cursor :
734+ ( ! input . trim ( ) && attachedFiles . length === 0 ) ||
735+ sending
736+ ? "default"
737+ : "pointer" ,
738+ } }
739+ >
740+ { sending ? "…" : "invia" }
741+ </ button >
742+ </ form >
737743 ) }
738744
739745 { /* Terminale (toggle) — nascosto in fullscreen */ }
0 commit comments