Library upload, new folder, rename and delete; a chat's tools and skills (/scope)
Files -> Server writes through /api/v2/files/{upload,mkdir,rename} and
DELETE /files (the trash); upload is a Rust command (library_upload) that
picks files in the system dialog and sends them multipart in the field
`files`. A chat's menu opens Tools and skills..., the web's chat-settings
switches over GET/POST /chats/{id}/scope and /allow/clear. A popover can
open at a context menu's point.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
13 files changed
+582
-27
No files matched your search
+20
@@ -1401,6 +1401,9 @@ details[open] > summary .step__chev .icon { transform: rotate(90deg); }
|
||||
.files__pane { display: grid; gap: var(--sp-2); background: var(--surface); border: var(--border-w) solid var(--border); border-radius: var(--radius-soft); padding: var(--sp-3); min-width: 0; }
|
||||
.files__head { display: grid; grid-template-columns: minmax(0, 1fr) var(--control-h-sm); gap: var(--sp-2); align-items: center; }
|
||||
.files__where { min-width: 0; }
|
||||
/* The server's pane: Upload and New folder before Read again. */
|
||||
#pane-server .files__head { grid-template-columns: minmax(0, 1fr) repeat(3, var(--control-h-sm)); }
|
||||
#server-status { white-space: pre-line; }
|
||||
.files__where select { width: 100%; height: var(--control-h-sm); }
|
||||
.files__tree { min-height: 0; }
|
||||
.pane__path { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; direction: rtl; text-align: left; font: var(--text-xs) var(--font-ui); color: var(--ink-muted); }
|
||||
@@ -1434,6 +1437,12 @@ details[open] > summary .step__chev .icon { transform: rotate(90deg); }
|
||||
.tree__row[aria-expanded="true"] .tree__chevron .icon { transform: rotate(90deg); }
|
||||
.tree__name { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
|
||||
.tree__size { font: var(--text-xs) var(--font-ui); color: var(--ink-faint); }
|
||||
/* A row with a more button beside it: the button on the row's own line, its folder below both. */
|
||||
.tree__item { display: grid; grid-template-columns: minmax(0, 1fr) var(--control-h-sm); align-items: center; }
|
||||
.tree__item > ul { grid-column: 1 / -1; }
|
||||
.tree__more { opacity: 0; }
|
||||
.tree__item:hover > .tree__more, .tree__more:focus-visible, .tree__more[aria-expanded="true"] { opacity: 1; }
|
||||
@media (hover: none) { .tree__more { opacity: 1; } }
|
||||
.tree__note { padding: var(--sp-1) var(--sp-3); font-size: var(--text-xs); color: var(--ink-muted); }
|
||||
|
||||
/* An empty page: an icon, a heading, a sentence, centred. */
|
||||
@@ -1696,6 +1705,17 @@ details[open] > summary .step__chev .icon { transform: rotate(90deg); }
|
||||
.arch__page { display: grid; gap: var(--sp-3); }
|
||||
.head__unarchive { white-space: nowrap; }
|
||||
|
||||
/* --- A chat's tools and skills (scope.js): switches in a popover, the allowed commands below. */
|
||||
|
||||
.scope { max-height: min(70vh, 32rem); overflow-y: auto; }
|
||||
.scope .pop__actions { justify-content: flex-start; }
|
||||
.scope .pop__actions .btn { max-width: 100%; white-space: normal; height: auto; min-height: var(--control-h-sm); }
|
||||
.scope__list { display: grid; gap: var(--sp-2); }
|
||||
.scope__row span { overflow-wrap: anywhere; }
|
||||
.scope__hint { margin: 0; font-size: var(--text-xs); }
|
||||
.scope__allow { display: grid; gap: var(--sp-1); margin: 0; padding: 0; list-style: none; }
|
||||
.scope__allow code { font: var(--text-xs) var(--font-mono); overflow-wrap: anywhere; }
|
||||
|
||||
/* --- Memory: a new one on top, then each record over its group and date · Edit · more. */
|
||||
|
||||
.mnew { display: grid; gap: var(--sp-2); }
|
||||
|
||||
Reference in new issue
Block a user