+469
src/components/transcript-view-modal.ts
+469
src/components/transcript-view-modal.ts
···+src="https://hostedboringavatars.vercel.app/api/marble?size=32&name=${this.transcript.user_id}&colors=2d3142ff,4f5d75ff,bfc0c0ff,ef8354ff"+<audio id="audio-${this.transcript.id}" controls src="/api/transcriptions/${this.transcript.id}/audio"></audio>+? html`<vtt-viewer .vttContent=${this.transcript.vtt_content ?? ""} .audioId=${`audio-${this.transcript.id}`}></vtt-viewer>`+: html`<div class="transcript-text">${this.transcript.vtt_content || "No transcript available"}</div>`}
+7
-170
src/components/transcription.ts
+7
-170
src/components/transcription.ts
·····················-const endOffset = si < sentences.length - 1 ? startOffset + sentenceDuration - 0.001 : paraEnd - paraStart;-return html`<span class="segment" data-start="${spanStart}" data-end="${spanEnd}">${sent}</span>${si < sentences.length - 1 ? ' ' : ''}`;+return html`<vtt-viewer .vttContent=${job.vttContent ?? ""} .audioId=${`audio-${job.id}`}></vtt-viewer>`;···
+268
src/components/vtt-viewer.ts
+268
src/components/vtt-viewer.ts
···+transcriptDiv.querySelectorAll('.current-segment').forEach((el) => (el as HTMLElement).classList.remove('current-segment'));+const endOffset = si < sentences.length - 1 ? startOffset + sentenceDuration - 0.001 : paraEnd - paraStart;+return html`<span class="segment" data-start="${spanStart}" data-end="${spanEnd}">${sent}</span>${si < sentences.length - 1 ? ' ' : ''}`;
+114
-48
src/index.ts
+114
-48
src/index.ts
············+"SELECT id, user_id, filename, original_filename, status, progress, created_at FROM transcriptions WHERE id = ?",·····················+"SELECT id, original_filename, status, created_at, updated_at, error_message, user_id FROM transcriptions WHERE id = ?",
-4
src/lib/transcript-storage.test.ts
-4
src/lib/transcript-storage.test.ts
-50
src/lib/transcript-storage.ts
-50
src/lib/transcript-storage.ts
······
+113
-13
src/pages/admin.html
+113
-13
src/pages/admin.html
······+<input type="text" id="transcript-search" class="search" placeholder="Search by filename or user..." />···<input type="text" id="user-search" class="search" placeholder="Search by name or email..." />············+<th class="sortable ${transcriptSortKey === 'original_filename' ? transcriptSortDirection : ''}" data-sort="original_filename">File Name</th>+<th class="sortable ${transcriptSortKey === 'status' ? transcriptSortDirection : ''}" data-sort="status">Status</th>+<th class="sortable ${transcriptSortKey === 'created_at' ? transcriptSortDirection : ''}" data-sort="created_at">Created At</th>············