Skip to content

spec(DateInput): wheel and calendar rules for the touch sheet - #9402

Merged
cixzhang merged 1 commit into
mainfrom
spec/dateinput-wheel-rules
Nov 1, 2026
Merged

cixzhang merged 1 commit into
mainfrom
spec/dateinput-wheel-rules

Conversation

@cixzhang

@cixzhang cixzhang commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Maintainer impact

People choosing a date or time in a phone sheet get one recorded rule for the picker wheel instead of none: a wheel never loses their place at a range limit, opening a sheet never rewrites an untouched value, a value changed elsewhere turns the wheel instead of jumping it, a trackpad drives the wheel like a finger while a mouse-wheel notch turns one row, and the touch calendar pages by month and year from the keyboard. Maintainers get one owner for the wheel: component:DateInput holds the rules, and TimeInput and DateTimeInput point to it, so a later change edits one record instead of three. No public API, default, token, or theme change. Every rule that main does not yet build is marked as an implementation gap with a matching verification row.

Exact decision needed

The current component:DateInput record says nothing about the bottom-sheet picker wheel, its scroll input, or the touch calendar's month pager and year step, so work that changes them has no current authority to review against.

Existing authority searched

component:DateInput, component:TimeInput, component:DateTimeInput (all current); spec:AST-094 FR42, FR43 (touch presentations, current); spec:AST-043 (presentation vocabulary); spec:AST-020 FR15 (APG grid); design:reduced-motion. Open work carrying wheel rules in the record's old draft path: #8209, #8200, #8206, #8480, #8698. None of the current records settles the wheel's rest, turn, scroll input, or look.

Decision

  • The owner approved adding the wheel and calendar rules on 2026-11-01.
  • The owner chose to keep today's flat scrolling column under a finger, with no cylinder or 3D wheel look (2026-11-01).
  • The owner chose that a trackpad drives the wheel like a finger and a mouse-wheel notch turns one row, as spec:AST-094 FR43 provides (2026-11-01).

Changed records:

  • component:DateInput: ownership line for the shared sheet wheel; non-goal for a cylinder look; FR13 (rest on a disabled row continues to the nearest enabled row; a rest on the committed row or opening out of bounds commits nothing); FR14 (a shown wheel turns onto an outside change); FR15 (trackpad and mouse-wheel input, citing spec:AST-094 FR43); PR2 (month pager reports the visible month once per half-month crossed); AR8 (Shift+PageUp/PageDown move by a year); DEC-1 (rest rule), DEC-2 (flat column); verification rows for FR13–FR15, PR2, and AR8; Current-state impact entries for each gap.
  • component:TimeInput: one "does not own" pointer line to DateInput.
  • component:DateTimeInput: one "does not own" pointer line to DateInput.

Rejected alternatives

  • Returning a wheel to its previous row when it rests on a disabled row (DEC-1).
  • A UIPickerView-style cylinder look (DEC-2).

Claim scope and non-goals

Only the sheet wheel's rest, turn, scroll input, and look, the month pager's reporting, and the Shift+Page year step. A fine pointer's native column, the public API, theme tokens, and the time wheels' own clamping in TimeInput FR7 are unchanged.

Evidence and implementation relationship

Rest and turn rules follow UIDatePicker's measured behavior on the iOS 26.2 simulator; scroll input follows spec:AST-094 FR43. This PR records rules only. It unblocks #8209, #8200, #8206 and the rules part of #8480 and #8698; those branches move their record rows to docs/specs/components/DateInput/ on rebase and are reviewed against these rows.

Writing rubric results

  • R1 narration: none; every added row is present tense. Unbuilt behavior is stated as an "Implementation gap:" sentence on its row and in Current-state impact.
  • R2 research in the record: none; the platform comparison stays out of the record, and only the basis "UIDatePicker on the iOS 26.2 simulator" is cited.
  • R3 evidence naming a change: none; basis cells cite DEC-1, spec:AST-094 FR43, the platform observation, and current source.
  • R4 rejected alternatives over one line or outside a decision: two, each one line inside DEC-1 and DEC-2.
  • R5 pull request or issue references remaining: none added (one existing test name in the FR6 verification row carries an issue number; untouched).
  • R6 ruled open questions still listing options: none; Open questions stays "None".

Scope

  • This PR contains specification records only.
  • It records observable behavior and preserves equivalent internal implementations.
  • Any named internal mechanism is intentionally public, names its dependent caller/system, and explains why an equivalent implementation would not satisfy the contract.
  • Verification states the evidence layer and failure signal without prescribing CI job/workflow topology.
  • It records one intentional durable decision, not a rescue for a separable tagalong.
  • The canonical knowledge owner, affected current claims, and overlapping open work are named; any ownership collision is resolved or called out for human decision.
  • Adjacent API, visual, accessibility, composition, and implementation facts remain outside scope unless this exact decision depends on them.
  • Public text and artifacts contain no internal Meta context.

Validation

  • pnpm install --frozen-lockfile
  • pnpm check:knowledge: "Knowledge templates and records are aligned."
  • Prettier
  • git diff --check

@vercel

vercel Bot commented Nov 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
astryx Building Building Preview Nov 1, 2026 11:51pm UTC

Request Review

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Meta Open Source bot. label Nov 1, 2026
@astracat-bot

astracat-bot Bot commented Nov 1, 2026

Copy link
Copy Markdown

AI review status for this pull request.

Review status Updated
🔄 In progress (for maintainers only) Nov 1, 2026, 11:51 PM UTC

@github-actions github-actions Bot added the needs:spec-owner-review Current knowledge records await owner approval label Nov 1, 2026
@cixzhang

cixzhang commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

/approve-spec e545f89

@github-actions github-actions Bot removed the needs:spec-owner-review Current knowledge records await owner approval label Nov 1, 2026
@cixzhang
cixzhang merged commit 2555233 into main Nov 1, 2026
51 of 52 checks passed
@github-actions
github-actions Bot deleted the spec/dateinput-wheel-rules branch November 2, 2026 06:05

This branch was successfully deployed

1 active deployment
Preview — e545f89e Deployed Nov 2, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Meta Open Source bot.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant