fix: Dashboard Card-Dropdown nicht mehr abgeschnitten
- CSS: position: fixed statt absolute, z-index: 1000, box-shadow - JS: Position dynamisch berechnet (getBoundingClientRect) beim Öffnen - Viewport-Overflow-Korrektur falls Dropdown zu weit rechts/links
This commit is contained in:
1 parent
4fa0111c33
commit
90afd79e76
3 files changed
+33
-5
No files matched your search
@@ -14,6 +14,7 @@
|
||||
- [x] Refactoring: Agent/Session-Einstellungen, die den System-Prompt bzw. das Tool Use bearbeiten
|
||||
- [ ] Cronjobs: Planung, ob cron von Debian/Linux verwendet werden soll, oder ein eigener Worker/Service in der App selbst, der das übernimmt
|
||||
- [x] Weiteres Modell hinzufügen: "Haiku 4.5"
|
||||
- [ ] Weitere Tools: Glob? Search?
|
||||
|
||||
## Bugs
|
||||
- [x] Wenn gerade gestreamt wird und man refreshed die Seite, dann verliert das Frontend den Status "Streaming..." und ich kann eine Nachricht schreiben, obwohl das nicht möglich sein sollte
|
||||
@@ -31,7 +32,7 @@
|
||||
- [x] Browser: "Zurück"-Taste soll auf den vorherigen location.hash wechseln
|
||||
- [x] File Explorer: CodeMirror lässt sich horizontal nicht scroll
|
||||
- [ ] Chat: Datum und Uhrzeit bei den Nachrichten anzeigen (Format: dd.MM.yyyy HH:mm:ss)
|
||||
- [ ] Dashboard: Menu-Dropdown bei Cards sind abgeschnitten wenn die Card-Höhe nicht ausreicht (logisch, weil das Menu-Dropdown ein Child von der Card ist)
|
||||
- [x] Dashboard: Menu-Dropdown bei Cards sind abgeschnitten wenn die Card-Höhe nicht ausreicht (logisch, weil das Menu-Dropdown ein Child von der Card ist)
|
||||
|
||||
## Ideas / Backlog
|
||||
- [ ] Memory: Embedding-Modell für semantische Suche über Memory-Dateien (Vektor-basiert + BM25 Hybrid Search)
|
||||
|
||||
@@ -211,10 +211,7 @@
|
||||
}
|
||||
|
||||
.card-menu-dropdown {
|
||||
margin-top: var(--badge-spacing);
|
||||
position: absolute;
|
||||
top: 100%;
|
||||
right: 0;
|
||||
position: fixed;
|
||||
background: var(--f3-bg);
|
||||
border: var(--border-width) solid var(--f3-border);
|
||||
border-radius: var(--border-radius);
|
||||
@@ -223,6 +220,8 @@
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
padding-block: var(--badge-spacing);
|
||||
z-index: 1000;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
.card-menu-dropdown[hidden] {
|
||||
|
||||
@@ -78,7 +78,21 @@ registerPage('dashboard', {
|
||||
menuTrigger.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
closeAllCardMenus();
|
||||
// Position fixed dropdown relative to trigger
|
||||
const rect = menuTrigger.getBoundingClientRect();
|
||||
menuDropdown.style.top = `${rect.bottom + 4}px`;
|
||||
menuDropdown.style.left = `${rect.right - menuDropdown.offsetWidth}px`;
|
||||
menuDropdown.hidden = !menuDropdown.hidden;
|
||||
// Adjust if off-screen right
|
||||
if (!menuDropdown.hidden) {
|
||||
const dropRect = menuDropdown.getBoundingClientRect();
|
||||
if (dropRect.right > window.innerWidth) {
|
||||
menuDropdown.style.left = `${window.innerWidth - dropRect.width - 8}px`;
|
||||
}
|
||||
if (dropRect.left < 0) {
|
||||
menuDropdown.style.left = '8px';
|
||||
}
|
||||
}
|
||||
});
|
||||
chatBtn.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
@@ -209,7 +223,21 @@ registerPage('dashboard', {
|
||||
menuTrigger.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
closeAllCardMenus();
|
||||
// Position fixed dropdown relative to trigger
|
||||
const rect = menuTrigger.getBoundingClientRect();
|
||||
menuDropdown.style.top = `${rect.bottom + 4}px`;
|
||||
menuDropdown.style.left = `${rect.right - menuDropdown.offsetWidth}px`;
|
||||
menuDropdown.hidden = !menuDropdown.hidden;
|
||||
// Adjust if off-screen right
|
||||
if (!menuDropdown.hidden) {
|
||||
const dropRect = menuDropdown.getBoundingClientRect();
|
||||
if (dropRect.right > window.innerWidth) {
|
||||
menuDropdown.style.left = `${window.innerWidth - dropRect.width - 8}px`;
|
||||
}
|
||||
if (dropRect.left < 0) {
|
||||
menuDropdown.style.left = '8px';
|
||||
}
|
||||
}
|
||||
});
|
||||
menuDropdown.querySelector('[data-action="files"]').addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
|
||||
Reference in new issue
Block a user