feat(ai): menu @ instantane, selecteurs agrandis et BooksLM racine (#82)
CI / lint (push) Successful in 1m11s
CI / security (push) Successful in 47s
CI / test (push) Successful in 2m12s
CI / build (push) Successful in 45s
CI / e2e (push) Successful in 10m21s

Nouvel endpoint GET /api/vault/{vault}/paths + prechargement et filtrage client du menu @ (affichage instantane des fichiers/repertoires). Selecteurs Fournisseur/Modele agrandis (0,8rem / 34px) pour s'aligner sur le reste du site. Ajout de BooksLM au menu contextuel de la racine des vaults.
This commit is contained in:
2026-09-12 20:09:08 -04:00
parent d6cdd670b1
commit 9274dbd49f
10 changed files with 218 additions and 26 deletions
+24 -19
View File
@@ -9193,7 +9193,7 @@ body.popup-mode .content-area {
text-transform: uppercase; letter-spacing: .04em; flex-shrink: 0; }
.bookslm-toolbar .ai-picker { margin-left: 0; padding-left: 0; border-left: none;
flex-wrap: wrap; row-gap: 4px; }
.bookslm-toolbar .ai-picker select { max-width: 200px; }
.bookslm-toolbar .ai-picker select { max-width: 220px; }
.bookslm-panel.fullscreen { width: 100vw; }
.bookslm-status { padding: 6px 16px; font-size: 12px; color: var(--text-secondary);
border-bottom: 1px solid var(--border); display: flex; gap: 12px; align-items: center; }
@@ -9380,40 +9380,45 @@ body.bookslm-resizing { cursor: ew-resize; user-select: none; }
.bookslm-modal-actions button { padding: 7px 14px; border-radius: 8px; border: 1px solid var(--border);
background: var(--surface); color: var(--text-primary); cursor: pointer; font-size: 13px; }
.bookslm-modal-actions button.primary { background: var(--accent); color: #fff; border-color: var(--accent); }
/* ── Provider/model picker (compact, shared by assistant + editor) ── */
.ai-picker { display: inline-flex; align-items: center; gap: 6px;
font-size: 0.7rem; color: var(--text-secondary); flex-shrink: 0; position: relative; }
/* ── Provider/model picker (shared by assistant + editor) ── */
.ai-picker { display: inline-flex; align-items: center; gap: 8px;
font-size: 0.8rem; color: var(--text-secondary); flex-shrink: 0; position: relative; }
.ai-picker-label { white-space: nowrap; }
.ai-picker select { font-size: 0.7rem; background: var(--surface); color: var(--text-primary);
border: 1px solid var(--border); border-radius: 4px; padding: 2px 4px; cursor: pointer; }
.ai-picker select { font-size: 0.8rem; background: var(--surface); color: var(--text-primary);
border: 1px solid var(--border); border-radius: 6px; padding: 6px 10px; cursor: pointer;
min-height: 34px; }
.ai-picker select:hover { border-color: var(--accent); }
.ai-picker select:focus { border-color: var(--accent); outline: none; }
/* Searchable model combobox. */
.ai-picker-model-combo { position: relative; display: inline-flex; }
.ai-picker-model-trigger { display: inline-flex; align-items: center; gap: 4px; max-width: 220px;
font-size: 0.7rem; background: var(--surface); color: var(--text-primary);
border: 1px solid var(--border); border-radius: 4px; padding: 3px 6px; cursor: pointer; }
.ai-picker-model-trigger:hover { border-color: var(--accent); }
.ai-picker-model-trigger { display: inline-flex; align-items: center; justify-content: space-between;
gap: 6px; max-width: 240px; min-width: 120px; min-height: 34px;
font-size: 0.8rem; background: var(--surface); color: var(--text-primary);
border: 1px solid var(--border); border-radius: 6px; padding: 6px 10px; cursor: pointer; }
.ai-picker-model-trigger:hover, .ai-picker-model-trigger:focus { border-color: var(--accent); outline: none; }
.ai-picker-model-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ai-picker-model-chevron { opacity: 0.6; font-size: 0.6rem; }
.ai-picker-model-chevron { opacity: 0.6; font-size: 0.7rem; flex-shrink: 0; }
.ai-picker-model-pop { position: absolute; top: calc(100% + 4px); right: 0; z-index: 60;
min-width: 220px; width: 340px; max-width: calc(100vw - 24px); background: var(--bg-primary);
border: 1px solid var(--border); border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.35);
padding: 6px; }
.ai-picker-model-pop.hidden { display: none; }
.ai-picker-model-search { width: 100%; box-sizing: border-box; font-size: 0.72rem;
.ai-picker-model-search { width: 100%; box-sizing: border-box; font-size: 0.8rem;
background: var(--bg-secondary); color: var(--text-primary); border: 1px solid var(--border);
border-radius: 6px; padding: 5px 8px; margin-bottom: 4px; }
.ai-picker-model-list { max-height: 240px; overflow-y: auto; display: flex; flex-direction: column; }
.ai-picker-model-option { display: block; width: 100%; text-align: left; font-size: 0.78rem;
line-height: 1.3; padding: 5px 8px; border-radius: 5px; background: none; border: none;
border-radius: 6px; padding: 7px 10px; margin-bottom: 4px; }
.ai-picker-model-search:focus { border-color: var(--accent); outline: none; }
.ai-picker-model-list { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; }
.ai-picker-model-option { display: block; width: 100%; text-align: left; font-size: 0.8rem;
line-height: 1.35; padding: 7px 10px; border-radius: 5px; background: none; border: none;
color: var(--text-primary); cursor: pointer; white-space: normal; overflow-wrap: anywhere; }
.ai-picker-model-option:hover { background: var(--bg-hover); }
.ai-picker-model-option.active { background: var(--bg-hover); box-shadow: inset 3px 0 0 var(--accent); }
.ai-picker-model-empty { font-size: 0.7rem; color: var(--text-secondary); padding: 6px 8px; text-align: center; }
.ai-picker-model-more { font-size: 0.7rem; color: var(--text-secondary); padding: 6px 8px; text-align: center; }
.ai-picker-model-empty { font-size: 0.78rem; color: var(--text-secondary); padding: 8px 10px; text-align: center; }
.ai-picker-model-more { font-size: 0.78rem; color: var(--text-secondary); padding: 8px 10px; text-align: center; }
/* Capability info button (ⓘ) + informational bubble. */
.ai-picker-caps-host { position: relative; display: inline-flex; }
.ai-picker-info { background: none; border: none; cursor: pointer; color: var(--text-secondary);
font-size: 0.85rem; line-height: 1; padding: 2px 4px; border-radius: 4px; }
font-size: 1rem; line-height: 1; padding: 5px 7px; border-radius: 6px; }
.ai-picker-info:hover, .ai-picker-info:focus { color: var(--accent); }
.ai-picker-info.hidden { display: none; }
.ai-picker-caps-pop { position: absolute; top: calc(100% + 4px); right: 0; z-index: 60;