Add multimodal AI chat attachments
This commit is contained in:
1 parent
8aba30a093
commit
84b42c5369
6 files changed
+434
-39
No files matched your search
@@ -857,7 +857,11 @@ body.touch.term-active .ai-fab { bottom:104px; }
|
||||
.ai-head .ai-chatsel { min-width:0; }
|
||||
.ai-head .ai-chatname { min-width:3ch; }
|
||||
.ai-head .ai-chatsel { flex:0 1 auto; }
|
||||
.ai-list { flex:1; overflow:auto; padding:12px; display:flex; flex-direction:column; gap:10px; }
|
||||
.ai-chat-body { position:relative; flex:1; min-height:0; }
|
||||
.ai-list { height:100%; box-sizing:border-box; overflow:auto; padding:12px; display:flex; flex-direction:column; gap:10px; }
|
||||
.ai-jump { position:absolute; right:14px; bottom:14px; z-index:2; width:38px; height:38px; padding:0; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; color:var(--text); background:var(--panel); border:1px solid var(--border); box-shadow:0 4px 14px rgba(0,0,0,.35); }
|
||||
.ai-jump:hover { background:#202833; }
|
||||
.ai-jump[hidden] { display:none; }
|
||||
.ai-msg { max-width:92%; padding:8px 11px; border-radius:10px; font-size:14px; line-height:1.45; overflow-wrap:anywhere; }
|
||||
.ai-msg.user { align-self:flex-end; background:#16324f; white-space:pre-wrap; }
|
||||
.ai-msg.assistant { align-self:flex-start; background:#151a21; border:1px solid var(--border); }
|
||||
@@ -869,10 +873,26 @@ body.touch.term-active .ai-fab { bottom:104px; }
|
||||
.ai-code { margin:6px 0; }
|
||||
.ai-code pre { margin:0; padding:8px; background:#0c0f13; border:1px solid var(--border); border-radius:7px; overflow:auto; font-size:12.5px; white-space:pre-wrap; }
|
||||
.ai-code .ai-run { margin-top:6px; }
|
||||
.ai-form-in { display:flex; align-items:flex-end; gap:8px; padding:8px 10px 10px; }
|
||||
.ai-form-in textarea { flex:1; resize:none; font:inherit; font-size:14px; line-height:20px; padding:9px 10px; height:40px; max-height:140px; overflow-y:auto; color:var(--text);
|
||||
background:#0c0f13; border:1px solid var(--border); border-radius:8px; }
|
||||
.ai-form-in textarea:focus { outline:none; border-color:var(--accent); }
|
||||
.ai-form-in { display:flex; padding:8px 10px 10px; }
|
||||
.ai-inputbox { min-width:0; flex:1; padding:5px; background:#0c0f13; border:1px solid var(--border); border-radius:13px; transition:border-color .15s, box-shadow .15s; }
|
||||
.ai-inputbox:focus-within { border-color:var(--accent); box-shadow:0 0 0 2px rgba(91,140,255,.12); }
|
||||
.ai-entry { display:flex; align-items:flex-end; gap:5px; min-width:0; }
|
||||
.ai-form-in textarea { flex:1; min-width:0; resize:none; font:inherit; font-size:14px; line-height:20px; padding:9px 6px; height:40px; max-height:140px; overflow-y:auto; color:var(--text); background:transparent; border:0; border-radius:8px; }
|
||||
.ai-form-in textarea:focus { outline:none; border-color:transparent; }
|
||||
.ai-attach, .ai-from-pane { flex:none; width:36px; height:36px; padding:0; display:inline-flex; align-items:center; justify-content:center; color:var(--muted); background:transparent; border:0; border-radius:50%; }
|
||||
.ai-attach:hover, .ai-from-pane:hover { color:var(--text); background:#1b222c; }
|
||||
.ai-attachments { display:flex; flex-wrap:wrap; gap:5px; padding:2px 3px 6px; }
|
||||
.ai-attachments[hidden] { display:none; }
|
||||
.ai-file-chip { display:inline-flex; align-items:center; gap:4px; max-width:100%; padding:3px 7px 3px 9px; border:1px solid var(--border); border-radius:999px; background:#151a21; color:var(--muted); font-size:11.5px; }
|
||||
.ai-file-chip span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
|
||||
.ai-file-chip button { flex:none; width:18px; height:18px; padding:0; border:0; border-radius:50%; background:transparent; color:var(--muted); line-height:1; }
|
||||
.ai-file-chip button:hover { color:var(--text); background:#303846; }
|
||||
.ai-file-picker { position:absolute; right:10px; bottom:78px; z-index:5; display:flex; flex-direction:column; gap:3px; max-width:min(320px, calc(100% - 20px)); max-height:45%; overflow:auto; padding:9px; background:var(--panel); border:1px solid var(--border); border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.45); }
|
||||
.ai-file-picker[hidden] { display:none; }
|
||||
.ai-file-picker strong { padding:3px 6px 6px; color:var(--muted); font-size:12px; }
|
||||
.ai-file-option { width:100%; overflow:hidden; text-align:left; text-overflow:ellipsis; white-space:nowrap; background:transparent; border-color:transparent; color:var(--text); font-size:12px; }
|
||||
.ai-file-option:hover { background:#202833; }
|
||||
.ai-form-in.drag .ai-inputbox { border-color:var(--accent); box-shadow:0 0 0 3px rgba(91,140,255,.18); }
|
||||
@media (max-width: 640px) {
|
||||
/* A phone: the chat is a screen of its own, sliding up. */
|
||||
.ai-box { inset:0; width:auto; max-width:none; height:auto; border-radius:0; border:0; z-index:60; transform:translateY(40px); }
|
||||
@@ -908,7 +928,7 @@ body:not(.touch) .ai-head { cursor:grab; user-select:none; }
|
||||
body.ai-dragging, body.ai-dragging * { cursor:grabbing !important; user-select:none; }
|
||||
body:not(.touch) .ai-fab { cursor:grab; touch-action:none; }
|
||||
/* Send: the field's height, square. */
|
||||
.ai-form-in textarea, .ai-send { box-sizing:border-box; }
|
||||
.ai-form-in textarea, .ai-send, .ai-attach, .ai-from-pane { box-sizing:border-box; }
|
||||
.ai-send { width:40px; height:40px; align-self:flex-end; }
|
||||
@media (max-width: 640px) {
|
||||
.ai-fab { width:46px; height:46px; right:22px; bottom:24px; }
|
||||
|
||||
Reference in new issue
Block a user