feat(dashboard): restyle lesson transcript and summarize actions (#758)

* feat(dashboard): restyle lesson transcript and summarize actions

Add separator lines around lesson material actions below the video,
switch transcript and summarize controls to plain ghost buttons with
hover-animated icons, and separate the two actions with a pipe when both
are visible. Display rules are unchanged.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* refactor(dashboard): inline summarize action into material actions

Fold lesson-summarize-button into lesson-material-actions and remove the
standalone component. Lessons without videos use the same actions bar with
separators disabled.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(dashboard): align lesson actions with note width on mobile

Constrain material actions to max-w-2xl when there is no video so they
match the note column. Improve small-screen layout with tighter padding,
flex-wrap, and hide the pipe separator below the sm breakpoint.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* add script update

* fix(dashboard): tighten spacing between lesson video and note

Remove gap-2 from the lesson content stack and drop bottom margin on the
last video wrapper so material actions separators control the gap before
the note.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(dashboard): show bottom separator on note-only lesson actions

Lessons without video were passing showSeparators=false, hiding both
lines. Split into top/bottom controls so summarize still gets a line before
the note without one above the action row.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(dashboard): always show top separator on lesson material actions

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(dashboard): reduce lesson material action separator margin to my-2

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* feat(dashboard): consolidate multi-video transcript actions and navigation

Register transcript sources per upload video, show a single material
actions row after all videos, and add prev/next video navigation in the
transcript side panel when multiple transcripts are available.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(dashboard): address greptile review on lesson material actions

Require lessonId on material actions and stop overwriting the transcript
seek wrapper with a stale localSeekFn snapshot in the sync effect.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(dashboard): stop transcript registry effect infinite loop

Replace the reactive sync effect with explicit registry updates from
loadTranscript and skip no-op transcript source writes to avoid reading
and writing transcriptSources in the same effect pass.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

* fix(ui): raise tooltip z-index above app bar side panel

Use z-menu-elevated for tooltip content so header icon tooltips are not
hidden behind the fixed transcript side panel (z-app-bar).

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>

---------

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
This commit is contained in:
Rotimi Best
2026-07-15 22:28:40 +01:00
committed by GitHub
co-authored by Rotimi Best
parent 656fa4fa7e
commit 3980aa0a9b
23 changed files with 580 additions and 98 deletions
@@ -2064,7 +2064,10 @@
"edit": "Rediger udskrift",
"save": "Gem",
"cancel": "Annuller",
"segment_label": "Segmenter kl. {timestamp}"
"segment_label": "Segmenter kl. {timestamp}",
"video_nav_label": "Video {number}",
"previous_video": "Forrige videotransskript",
"next_video": "Næste videotransskript"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -2064,7 +2064,10 @@
"edit": "Transkript bearbeiten",
"save": "Speichern",
"cancel": "Abbrechen",
"segment_label": "Segmentieren um {timestamp}"
"segment_label": "Segmentieren um {timestamp}",
"video_nav_label": "Video {number}",
"previous_video": "Vorheriges Video-Transkript",
"next_video": "Nächstes Video-Transkript"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -2384,7 +2384,10 @@
"edit": "Edit transcript",
"save": "Save",
"cancel": "Cancel",
"segment_label": "Segment at {timestamp}"
"segment_label": "Segment at {timestamp}",
"video_nav_label": "Video {number}",
"previous_video": "Previous video transcript",
"next_video": "Next video transcript"
}
},
"document": {
@@ -2064,7 +2064,10 @@
"edit": "Editar transcripción",
"save": "Guardar",
"cancel": "Cancelar",
"segment_label": "Segmentar en {timestamp}"
"segment_label": "Segmentar en {timestamp}",
"video_nav_label": "Video {number}",
"previous_video": "Transcripción del video anterior",
"next_video": "Transcripción del video siguiente"
},
"simple_card": {
"kind_youtube": "youtube",
@@ -2064,7 +2064,10 @@
"edit": "Modifier la transcription",
"save": "Enregistrer",
"cancel": "Annuler",
"segment_label": "Segment à {timestamp}"
"segment_label": "Segment à {timestamp}",
"video_nav_label": "Vidéo {number}",
"previous_video": "Transcription de la vidéo précédente",
"next_video": "Transcription de la vidéo suivante"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -2064,7 +2064,10 @@
"edit": "प्रतिलेख संपादित करें",
"save": "सहेजें",
"cancel": "रद्द करें",
"segment_label": "{timestamp} पर खंड"
"segment_label": "{timestamp} पर खंड",
"video_nav_label": "वीडियो {number}",
"previous_video": "पिछले वीडियो का प्रतिलेख",
"next_video": "अगले वीडियो का प्रतिलेख"
},
"simple_card": {
"kind_youtube": "यूट्यूब",
@@ -2064,7 +2064,10 @@
"edit": "Edytuj transkrypcję",
"save": "Zapisz",
"cancel": "Anuluj",
"segment_label": "Segment o {timestamp}"
"segment_label": "Segment o {timestamp}",
"video_nav_label": "Wideo {number}",
"previous_video": "Transkrypcja poprzedniego wideo",
"next_video": "Transkrypcja następnego wideo"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -2064,7 +2064,10 @@
"edit": "Editar transcrição",
"save": "Salvar",
"cancel": "Cancelar",
"segment_label": "Segmentar em {timestamp}"
"segment_label": "Segmentar em {timestamp}",
"video_nav_label": "Vídeo {number}",
"previous_video": "Transcrição do vídeo anterior",
"next_video": "Transcrição do próximo vídeo"
},
"simple_card": {
"kind_youtube": "YouTube",
@@ -2064,7 +2064,10 @@
"edit": "Изменить стенограмму",
"save": "Сохранить",
"cancel": "Отмена",
"segment_label": "Сегмент в {timestamp}"
"segment_label": "Сегмент в {timestamp}",
"video_nav_label": "Видео {number}",
"previous_video": "Транскрипт предыдущего видео",
"next_video": "Транскрипт следующего видео"
},
"simple_card": {
"kind_youtube": "Ютуб",
@@ -2064,7 +2064,10 @@
"edit": "Chỉnh sửa bản ghi",
"save": "Lưu",
"cancel": "Hủy bỏ",
"segment_label": "Đoạn tại {timestamp}"
"segment_label": "Đoạn tại {timestamp}",
"video_nav_label": "Video {number}",
"previous_video": "Bản ghi video trước",
"next_video": "Bản ghi video tiếp theo"
},
"simple_card": {
"kind_youtube": "YouTube",