Design system contents

Components

Save controls and persistence feedback

Separate an action being attempted from a confirmed save.

On this page

Purpose and composition

SaveButton presents a named save action and a relative timestamp. The course builder also has its own live queue status.

Anatomy

  • Save button
  • Saving label and disabled state
  • Confirmed relative timestamp

Configuration and variants

Configuration and variants
Input or variantContract
onClickAsync callback; local pending state lasts through finally.
isSavingExternal pending state combines with the local latch.
lastSavedParent supplies a confirmed timestamp; the label refreshes every 30 seconds.

States and feedback

Idle, saving, and saved appear together in the component board. Rejected writes must not create a new success timestamp.

Interaction and responsive behavior

A pending control prevents duplicate activation. SaveButton does not choose error wording or persist records itself. Builder auto-save is a distinct revision-aware queue.

Accessibility and known limits

Provide a visible failure and recovery action in the parent. Builder status uses aria-live; a changing relative timestamp alone is not a complete announcement strategy.

Source references

Source references
FileResponsibility
src/components/SaveButton.tsxButton state
src/hooks/useAutoSaveCourse.tsCourse save hook
src/app/make-class/[classId]/video-lessons/page.tsxLesson queue and live status

Interface examples

Native TeachKit interfaces with fictional course, account, and learner records. Service responses and media are isolated demonstrations; no customer data or live changes. Captured at 2× resolution or higher. Select an image to inspect it full size.

Builder Status · Component detail · Light · Desktop · Saving · 3504 × 402 px
Save · Component detail · Light · Desktop · 2280 × 504 px

Source audit: 2026-10-22 · Revision 903bbf05ca9d · Documentation v2.0.0