ENGLISH·COURSE API
    Preparing search index...
    • How much of one video the learner has watched.

      Parameters

      • lessonId: {
            lessonId: string & $brand<"LessonId">;
            durationSeconds: number;
            className?: string;
        }

        The lesson whose progress is being shown

      Returns Element | null

      A client island by necessity: the playback position lives in localStorage, which the server cannot read. Dropping this into a Server Component's row keeps that row server-rendered — only the bar itself crosses to the client.

      It renders nothing for a lesson with no progress, and that is deliberate. Bars can only appear after hydration, so the first frame necessarily shows none; a bar drawn at zero in that frame would assert the learner has watched nothing, which may be false. Absence is the neutral state, so hydration only ever adds a bar.

      A reading lesson has no runtime and therefore no bar — its completion is carried by the mark alone.

      The percentage is formatted through next-intl, so a locale that writes 40 % gets it.