Skip to content

One disclosure draws every expandable section — practice groups, Path's modules, Reference, For later and the FAQ (11 Sep drop) #596

Description

@maximsan

Found reconciling the 11 September 2026 prototype drop (a16008c5) against the app.

What the design draws now

The design has one disclosure and routes every expandable section through it. A header button carries a label or a custom header, an optional trailing slot before the glyph (a count, a lock), and an optional below line under the header. The panel opens over 240ms (cubic-bezier(.2,.8,.2,1)); the glyph turns over the same 240ms (cubic-bezier(.4,0,.2,1)). Two glyphs, on purpose: a caret (18, or 16 where a site says so) for lists — "more of the same, below" — turning 180°; a plus (12) for prose, an FAQ answer, turning 45° into a cross. collapsible={false} renders the header as a plain heading with the panel open — overruled for Path: the owner ruled that every module a learner can reach carries a caret and opens and shuts, so Disclosure states its open flag rather than inferring it. A collapsed panel keeps its content out of the tab order. divider draws the hairline under a row.

Its sites:

  • The practice list's Lessons and Games groups — divider between, panel paddingBottom: 6.
  • Their sub-groupsheaderPad: '12px 0', minHeight: 44, glyph 16, trailing gap 14, panel paddingLeft: 34, paddingBottom: 4. Built by The practice list groups lessons by module and games by kind, collapsibly (10 Sep drop) #582, which this ticket blocks.
  • Path's modulesheaderPad: 0, headerAlign: 'baseline', glyph 16, the lock as trailing, Finish X to unlock as below, panel paddingTop: 8. The move is now 240ms; the app took 320ms from the earlier design.
  • Reference — the same shape, its caption as below.
  • The challenges' For later list — headerPad: '4px 0', minHeight: 44, closed by default.
  • The Help FAQ rows — plus glyph, divider.
  • Coffee Duel's review, which v1 does not ship.

What the app draws now

Four hand-rolled dialects, and a fifth on its way: PracticeGroup with its own rotating chevron; PathModuleSection with a 13 chevron and expandDuration 320ms over AnimatedSize; ReferenceSection with CaretMark, whose own note says the turn is instant because the layer had no duration token — the design now gives one; the For later list, which does not collapse at all; and the Help PR (#591), which adds a plus-to-cross mark of its own for the FAQ.

What is owed

One Disclosure widget in lib/core/widgets/ carrying the design's slots, glyphs, timing and the collapsed-content rule, honouring reduced motion as a cut rather than a drop, as the Tour's frame does. The four app sites and the FAQ routed through it; CaretMark retired or folded in.

Acceptance criteria

  • One widget draws the Lessons and Games groups, Path's modules, Reference, For later and the FAQ, and no other expandable remains in lib/Disclosure; the only AnimatedSize left in lib/ is the dictionary self-check's reveal, which has no header and no glyph and is not a disclosure in the design either
  • Caret sites turn 180° and the FAQ's plus 45°, over 240ms with the design's easings; reduced motion cuts the move — AppMotion.disclosure with Cubic(.2,.8,.2,1) on the panel and Cubic(.4,0,.2,1) on the glyph; four tests in disclosure_test.dart hold the turns, the growth and the cut
  • A collapsed panel exposes nothing to assistive tech — it is not mounted at all, asserted against the semantics tree. Path's active module is a button, not a heading: the owner ruled the design wrong here, so every module a learner can reach carries a caret and opens and shuts, the active one open on arrival. A module still out of reach keeps neither caret nor lessons.
  • dart format, flutter analyze, the metrics gate and the suite pass, with a changelog bullet, and Path, Today's practice list and the FAQ are shown in screenshots — 3166 tests green, six CI jobs green on One disclosure draws every expandable section #599, all three screens driven on a simulator and reviewed

Out of scope

  • Coffee Duel's review disclosure — v1 does not ship the Duel.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    design-parityCloses a finding in the app-vs-prototype divergence register

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions