ENGLISH·COURSE API
    Preparing search index...
    • The Profile page's save bar, for as long as the learner's card has unsaved changes: under the card on a wide screen, docked to the bottom edge of the viewport on a narrow one.

      Parameters

      Returns Element | null

      On a wide screen the page keeps the card in view in a column of its own, so the bar sits there, under the card it saves. On a narrow screen the card scrolls away while the learner edits, so the controls come to them instead. It is one bar that moves, never two, so there is only ever one Save. They exist only when they can do something: nothing is drawn for a card with nothing edited, which is also why the page no longer carries a disabled Discard.

      After a save the controls give way to the confirmation, announced as a status, and the bar stays until the next edit raises the controls again.

      The bar clears the iPhone's home indicator by adding the bottom safe-area inset to its own padding, rather than by sitting above it.

      Docked, it is as wide as the Profile page's own column, so the controls sit under the content they act on rather than under the window.

      <ProfileSaveBar
      state={isSaved ? "saved" : isDirty ? "unsaved" : "clean"}
      canSave={hasName}
      onSave={handleSave}
      onDiscard={discard}
      />