"""Shared Hugging Face branding for smolcode Gradio UIs.""" from __future__ import annotations from .themes import theme_css_vars # Official HF icon (huggingface.co/front/assets/huggingface_logo-noborder.svg) HF_LOGO_SVG = ( '' ) SMOLCODE_CSS = """ :root { --hf-yellow:#FFD21E; --sc-accent:#7c3aed; --sc-bg:#0b1020; --sc-panel:#111827; --sc-border:#334155; --sc-fg:#e2e8f0; --sc-dim:#64748b; --sc-ok:#34d399; --sc-tool:#a78bfa; } body, .gradio-container { background:var(--sc-bg) !important; color:var(--sc-fg) !important; } /* Lock the whole page to the viewport so it can NEVER scroll; only inner panes scroll. */ html, body { height:100% !important; max-height:100vh !important; margin:0 !important; overflow:hidden !important; } gradio-app { display:block !important; height:100vh !important; max-height:100vh !important; overflow:hidden !important; } .gradio-container { max-width:100% !important; padding:0.5rem 1rem !important; height:100vh !important; max-height:100vh !important; min-height:0 !important; overflow:hidden !important; } /* Every Gradio wrapper between the container and our shell must be height-locked, not auto. */ .gradio-container > .wrap, .gradio-container .contain, main.fillable, main.app, .gradio-container > main { height:100% !important; max-height:100% !important; min-height:0 !important; overflow:hidden !important; } /* The unnamed outer column Gradio injects around our shell column. */ main.fillable > .column, .contain > .column, .wrap > .column { height:100% !important; max-height:100% !important; min-height:0 !important; overflow:hidden !important; } .sc-header { display:flex; align-items:center; gap:.75rem; margin-bottom:.25rem; } .hf-logo { flex-shrink:0; } .sc-title { font-weight:800; font-size:1.7rem; letter-spacing:-.02em; line-height:1.2; } .sc-title .hf-accent, .hf-accent { color:var(--hf-yellow); } .sc-badge { display:inline-block; padding:2px 10px; border-radius:999px; background:#2a2410; color:var(--hf-yellow); border:1px solid rgba(255,210,30,.25); font-size:.72rem; font-weight:600; margin-left:.4rem; vertical-align:middle; } .sc-sub { color:#94a3b8; margin-top:.2rem; font-size:.9rem; } .sc-tui-shell { display:flex !important; flex-direction:column; gap:.5rem; height:100% !important; max-height:100% !important; min-height:0; overflow:hidden !important; } .sc-header-bar { display:flex; align-items:center; gap:.85rem; padding:.5rem .75rem; background:#1e293b; border-radius:6px; font-family:ui-monospace,monospace; font-size:.8rem; flex-shrink:0; } .sc-hbrand { font-weight:700; color:#0b1020; background:var(--sc-accent); padding:1px 8px; border-radius:4px; } .sc-hbrand .hf-accent { color:var(--hf-yellow); } .sc-hgit { color:var(--sc-ok); } .sc-hmodel { color:var(--sc-tool); font-weight:700; } .sc-hhost { color:var(--sc-dim); } .sc-htheme { color:var(--sc-dim); margin-left:auto; } .sc-main-row { display:flex !important; flex-wrap:nowrap !important; align-items:stretch !important; gap:.5rem !important; flex:1 !important; min-height:0 !important; overflow:hidden !important; } .sc-main-row > .gr-html, .sc-main-row > .gr-column { min-height:0 !important; height:100% !important; } .sc-sidebar { width:17rem !important; min-width:17rem !important; max-width:17rem !important; flex-shrink:0 !important; height:100% !important; min-height:0 !important; overflow:hidden !important; } .sc-sidebar > .html-container { padding:0 !important; height:100% !important; min-height:0 !important; } .sc-sidebar-panel { height:100%; min-height:0; max-height:100%; display:flex; flex-direction:column; background:var(--sc-panel); border:1px solid var(--sc-border); border-radius:8px; font-family:ui-monospace,monospace; font-size:.78rem; overflow:hidden; } .sc-sidebar-focused { border-color:var(--sc-accent); } .sc-sidebar-title { padding:.35rem .55rem; color:var(--sc-accent); font-weight:700; border-bottom:1px solid var(--sc-border); background:#0f172a; } .sc-sidebar-body { flex:1 1 0%; min-height:0; height:100%; max-height:calc(100vh - 5rem); overflow-y:auto; overflow-x:hidden; padding:.25rem 0; line-height:1.35; } .sc-sb-dir { color:var(--sc-accent); font-weight:700; padding:.1rem .45rem; white-space:nowrap; } .sc-sb-file { display:flex; align-items:baseline; gap:.15rem; padding:.05rem .45rem; color:var(--sc-fg); white-space:nowrap; } .sc-sb-file:hover { background:#1e293b; } .sc-sb-sel { background:var(--sc-ok); color:#0b1020; font-weight:700; } .sc-sb-sel .sc-sb-glyph, .sc-sb-sel .sc-sb-name { color:#0b1020; } .sc-sb-mark { display:inline-block; width:.85rem; text-align:center; } .sc-sb-glyph { opacity:.6; } .sc-sb-more { color:var(--sc-dim); font-style:italic; padding:.2rem .45rem; } .sc-sb-empty, .sc-sb-stat { padding:.15rem .45rem; color:var(--sc-fg); } .sc-sb-dim { color:var(--sc-dim); } .sc-main-col { flex:1 !important; min-width:0 !important; min-height:0 !important; height:100% !important; display:flex !important; flex-direction:column !important; gap:.5rem !important; overflow:hidden !important; } .sc-editor-wrap, .sc-editor-wrap .gr-group { overflow:visible !important; flex-shrink:0 !important; } .sc-transcript-wrap { flex:1; min-height:0; overflow-y:auto; overflow-x:hidden; background:#0f172a; border:1px solid var(--sc-border); border-radius:8px; padding:.5rem .65rem; } .sc-transcript-inner { font-family:ui-monospace,monospace; font-size:.82rem; line-height:1.45; } .sc-transcript-empty { color:var(--sc-dim); padding:1rem; font-family:ui-monospace,monospace; } .sc-tline { margin:.15rem 0; } .sc-tglyph { display:inline-block; width:1rem; } .sc-editor-wrap { border:1px solid var(--sc-accent); border-radius:8px; padding:.25rem; background:#0f172a; flex-shrink:0; min-height:9rem; overflow:visible !important; } .sc-editor-wrap .block, #sc-editor { height:auto !important; min-height:7rem !important; overflow:visible !important; } .sc-editor-wrap label { display:flex !important; flex-direction:column; min-height:6.5rem; } .sc-editor-wrap textarea, #sc-editor textarea, #sc-editor input, [data-testid="textbox"] textarea, [data-testid="textbox"] input { font-family:ui-monospace,monospace !important; font-size:.85rem !important; background:#0f172a !important; color:var(--sc-fg) !important; border:none !important; box-shadow:none !important; pointer-events:auto !important; min-height:6.5rem !important; resize:vertical !important; } #sc-editor { pointer-events:auto !important; } .sc-editor-hint { font-size:.72rem; color:var(--sc-dim); padding:.2rem .4rem; font-family:ui-monospace,monospace; } .sc-status-wrap { flex-shrink:0; } .sc-status-bar { display:flex; flex-wrap:wrap; gap:.35rem; padding:.4rem .5rem; background:#1e293b; border-radius:6px; font-family:ui-monospace,monospace; font-size:.75rem; } .sc-chip { padding:2px 8px; border-radius:4px; background:#334155; color:#e2e8f0; } .sc-chip-brand { background:var(--sc-accent); color:#fff; font-weight:700; } .sc-chip-mode { background:#2a2410; color:var(--hf-yellow); font-weight:600; } .sc-chip-think { background:#422006; color:#fdba74; } .sc-chip-run { background:#14532d; color:#86efac; } .sc-chip-dim { color:#94a3b8; } .sc-chip-model { color:#a78bfa; } .sc-chip-clickable { cursor:pointer; border:none; font:inherit; font-family:inherit; font-size:inherit; } .sc-chip-clickable:hover { filter:brightness(1.15); } .sc-picker-title { color:var(--sc-accent); font-weight:700; margin-bottom:.5rem; } .sc-picker-list { display:flex; flex-direction:column; gap:2px; max-height:280px; overflow-y:auto; } .sc-picker-item { display:flex; gap:.35rem; align-items:baseline; width:100%; text-align:left; padding:.25rem .4rem; background:transparent; border:none; color:var(--sc-fg); font-family:ui-monospace,monospace; font-size:.85rem; cursor:pointer; border-radius:4px; } .sc-picker-item:hover { background:#334155; } .sc-picker-sel { background:var(--sc-accent); color:#fff; font-weight:700; } .sc-picker-mark { display:inline-block; width:1rem; text-align:center; } .sc-picker-hint { margin-top:.6rem; font-size:.72rem; color:var(--sc-dim); } .sc-picker-empty { color:var(--sc-dim); font-style:italic; } .sc-popup-item.sc-popup-sel { background:#334155; font-weight:700; } .sc-overlay { position:fixed; inset:0; background:rgba(0,0,0,.55); z-index:9999; display:flex; align-items:center; justify-content:center; pointer-events:auto; } .sc-overlay-panel { background:#1e293b; border:1px solid #7c3aed; border-radius:10px; padding:1rem 1.25rem; max-width:480px; font-family:ui-monospace,monospace; font-size:.85rem; color:#e2e8f0; pointer-events:auto; } .sc-popup { position:absolute; z-index:100; background:#1e293b; border:1px solid #7c3aed; border-radius:6px; max-height:200px; overflow:auto; font-family:ui-monospace,monospace; font-size:.8rem; } .sc-popup-item { padding:.25rem .5rem; cursor:pointer; color:#34d399; } .sc-popup-item:hover { background:#334155; } .sc-approval { padding:.75rem 1rem; border:1px solid rgba(124,58,237,.45); border-radius:8px; background:#1e1b4b; margin:.5rem 0; font-size:.9rem; } footer { display:none !important; } .gradio-container .block, .gradio-container .form { background:transparent !important; border:none !important; box-shadow:none !important; } .gradio-container .gr-group { background:transparent !important; border:none !important; } .gradio-container label { display:none !important; } .sc-hidden-controls { position:fixed !important; left:-10000px !important; top:0 !important; width:1px !important; height:1px !important; overflow:hidden !important; opacity:0 !important; } .sc-hidden-btn, .sc-hidden-btn.block, #sc-submit, #sc-clear, #sc-interrupt, #sc-toggle-sidebar, #sc-cycle-mode, #sc-cycle-agent, #sc-cycle-model, #sc-cycle-think, #sc-help, #sc-whichkey, #sc-open-picker-models, #sc-open-picker-themes, #sc-open-picker-agents, #sc-open-picker-sessions, #sc-picker-up, #sc-picker-down, #sc-picker-confirm, #sc-picker-pick { position:fixed !important; left:-10000px !important; top:0 !important; width:1px !important; height:1px !important; opacity:0 !important; overflow:hidden !important; pointer-events:auto !important; } """ + theme_css_vars() def smolcode_header_html(*, preset: str, tier_badge: str, subtitle: str) -> str: return ( f"
{HF_LOGO_SVG}
" f"
smolcode" f"preset: {preset}" f"{tier_badge}
" f"
{subtitle}
" f"
" )