refactor(ui): fix dead token refs + dedupe toggle to one primitive

Migrate all .toggle-slider consumers (Users, Chat, AgentChat) to the
canonical BEM toggle primitive and delete the legacy duplicate CSS block.

Assisted-by: Claude:claude-opus-4-8 [Claude Code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
Ettore Di Giacinto
2026-06-18 10:18:39 +00:00
parent 7d501f1ba1
commit 6ef88c78f2
4 changed files with 15 additions and 65 deletions

View File

@@ -2031,7 +2031,7 @@ select.input {
.stat-card:hover {
transform: translateY(-1px);
box-shadow: var(--shadow-sm);
border-color: var(--color-border);
border-color: var(--color-border-strong);
}
.stat-card__body {
@@ -2401,52 +2401,6 @@ select.input {
background: var(--color-surface-hover);
}
/* Toggle switch */
.toggle {
position: relative;
display: inline-block;
width: 36px;
height: 20px;
}
.toggle input {
opacity: 0;
width: 0;
height: 0;
}
.toggle-slider {
position: absolute;
cursor: pointer;
inset: 0;
background: var(--color-toggle-off, #CBD5E1);
border-radius: var(--radius-full);
transition: background var(--duration-fast);
}
.toggle-slider::before {
content: '';
position: absolute;
height: 14px;
width: 14px;
left: 2px;
bottom: 2px;
background: white;
border-radius: 50%;
transition: transform var(--duration-fast);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
}
.toggle input:checked + .toggle-slider {
background: var(--color-primary);
border-color: var(--color-primary);
}
.toggle input:checked + .toggle-slider::before {
transform: translateX(16px);
background: white;
}
/* Model checkbox list */
.model-list {
display: flex;

View File

@@ -556,7 +556,7 @@ export default function AgentChat() {
<label className="canvas-mode-toggle" title="Extract code blocks and media into a side panel for preview, copy, and download">
<i className="fas fa-columns" />
<span className="canvas-mode-label">Canvas</span>
<span className="toggle">
<span className={`toggle${canvasMode ? ' toggle--on' : ''}`}>
<input
type="checkbox"
checked={canvasMode}
@@ -565,7 +565,9 @@ export default function AgentChat() {
if (!e.target.checked) setCanvasOpen(false)
}}
/>
<span className="toggle-slider" />
<span className="toggle__track">
<span className="toggle__thumb" />
</span>
</span>
</label>
{canvasMode && artifacts.length > 0 && !canvasOpen && (

View File

@@ -7,6 +7,7 @@ import ModelSelector from '../components/ModelSelector'
import { renderMarkdown, highlightAll } from '../utils/markdown'
import { extractCodeArtifacts, renderMarkdownWithArtifacts } from '../utils/artifacts'
import CanvasPanel from '../components/CanvasPanel'
import Toggle from '../components/Toggle'
import { fileToBase64, modelsApi, mcpApi } from '../utils/api'
import { CAP_CHAT } from '../utils/capabilities'
import { useMCPClient } from '../hooks/useMCPClient'
@@ -966,14 +967,10 @@ export default function Chat() {
{t('settings.manageModeDesc')}
</span>
</div>
<label className="toggle">
<input
type="checkbox"
checked={!!activeChat.localaiAssistant}
onChange={(e) => updateChatSettings(activeChat.id, { localaiAssistant: e.target.checked })}
/>
<span className="toggle-slider" />
</label>
<Toggle
checked={!!activeChat.localaiAssistant}
onChange={(next) => updateChatSettings(activeChat.id, { localaiAssistant: next })}
/>
</div>
)}
<div className="form-group">

View File

@@ -6,6 +6,7 @@ import { adminUsersApi, adminInvitesApi } from '../utils/api'
import LoadingSpinner from '../components/LoadingSpinner'
import Modal from '../components/Modal'
import ConfirmDialog from '../components/ConfirmDialog'
import Toggle from '../components/Toggle'
import './auth.css'
function RoleBadge({ role }) {
@@ -289,14 +290,10 @@ function PermissionsModal({ user, featureMeta, availableModels, onClose, onSave,
</div>
<div style={{ marginBottom: 'var(--spacing-sm)' }}>
<label className="perm-toggle-label">
<label className="toggle" style={{ flexShrink: 0 }}>
<input
type="checkbox"
checked={allowedModels.enabled}
onChange={() => setAllowedModels(prev => ({ ...prev, enabled: !prev.enabled }))}
/>
<span className="toggle-slider" />
</label>
<Toggle
checked={allowedModels.enabled}
onChange={next => setAllowedModels(prev => ({ ...prev, enabled: next }))}
/>
Restrict to specific models
</label>
</div>