diff --git a/frontend/src/routes/teacher/content/+page.svelte b/frontend/src/routes/teacher/content/+page.svelte index 1259f00..30b448e 100644 --- a/frontend/src/routes/teacher/content/+page.svelte +++ b/frontend/src/routes/teacher/content/+page.svelte @@ -132,7 +132,16 @@ ].filter((t) => t.show !== false) ); - let allTabs = $derived([{ id: 'files', label: 'Files' }, ...contentTabs]); + // Label tab "Files": saat ada file aktif, tampilkan status + nama file + // (menggantikan baris pinned di rail yang memakan ruang horizontal). + let filesTabLabel = $derived.by(() => { + if (!mgr.activePath) return 'Files'; + const name = mgr.activePath.split('/').pop() ?? mgr.activePath; + if (mgr.treeRoot === 'assets') return `🖼️ ${name}`; + return `${mgr.dirty ? '●' : '✓'} ${name}`; + }); + + let allTabs = $derived([{ id: 'files', label: filesTabLabel }, ...contentTabs]); // Auto-select: setelah preview file aktif selesai dimuat, pindah ke tab // konten pertama file itu (skip 'files'). Tanpa tab konten → tetap Files. @@ -208,6 +217,7 @@ if (mgr.dirty && !window.confirm('Ada perubahan yang belum disimpan. Lanjut buka file lain?')) { return; } + ensureMobileWorkspace(); if (mgr.treeRoot === 'assets') { // Asset file: load for preview only, don't go through draft system mgr.activePath = path; @@ -231,9 +241,6 @@ mgr.activeTab = 'files'; await mgr.loadDraft(path); } - if (mgr.isMobile) { - mgr.mobileMode = mgr.treeRoot === 'assets' ? 'h50' : 'peek'; - } } function handleEditorChange(value: string) { @@ -351,6 +358,18 @@ await mgr.handlePublish(); } + /** + * Mobile: pastikan bottom-sheet cukup tinggi untuk menampilkan tab, rail + * tools, dan tree. Mode `hidden`/`peek`/`h30` terlalu sempit — naikkan ke + * h50 minimal saat user membuka tab / memilih file. + */ + function ensureMobileWorkspace() { + if (!mgr.isMobile) return; + if (mgr.mobileMode === 'hidden' || mgr.mobileMode === 'peek' || mgr.mobileMode === 'h30') { + mgr.mobileMode = 'h50'; + } + } + function handleTabClick(tab: string) { if (mgr.activeTab === 'velxio' && tab !== 'velxio') { syncVelxioToMarkdown(); @@ -358,9 +377,7 @@ // Pilihan manual user membatalkan auto-select yang masih menunggu preview. autoSelectPath = null; mgr.activeTab = tab; - if (mgr.isMobile && mgr.mobileMode === 'hidden') { - mgr.mobileMode = 'h50'; - } + ensureMobileWorkspace(); } // Step the mobile workspace height up/down through the available modes @@ -1035,6 +1052,8 @@ + {:else if mgr.activePath && isAssetFile} + {/if} {/snippet} @@ -1072,68 +1091,47 @@ {#snippet toolsRail()} - {#if mgr.activePath} + {#if mgr.activePath && !isAssetFile} +