Repository navigation
Conversation
…; the measured spring becomes character 'native' The animated-layout glide, swap and edge reveal play --ease-move over --duration-medium-min under every pointer, so a theme's character and tempo reach them like every other move. character gains 'native', which keeps the standard tokens and bounces and plays the measured springs.settle role where a motion offers both a curve and a spring. SideNav FR6 and AppShell FR17 now defer to AST-105 FR4 for the motion.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
There was a problem hiding this comment.
Approval of this spec change waits on an engineering owner's decision. It intentionally rewrites current claims (AST-105 FR4's springs.settle glide, AST-108 FR1's three character values, SideNav FR6 and AppShell FR17), and no engineering owner has approved this head yet. An engineering owner records the decision by commenting /approve-spec <full head SHA> on this pull request; the author may do so if they are an engineering owner. That decision should also settle whether touch glides leave the measured spring by default, and whether 'native' reaches anything beyond the glide, swap and edge reveal.
Required changes, whatever the decision:
- AST-108 FR5 and its first Current-state impact bullet still say existing themes render exactly as before, though under the new FR4 every theme without
'native'changes its glides, SideNav rail collapse, AppShell content swap and resizable LayoutPanel collapse; name that exception and'native'as the way back. architecture:theme-authoring-contractINV15 still listscharacterascrisp,standard,expressive; amend it in this pull request, as SideNav FR6 and AppShell FR17 already are, so two current records do not disagree.
[Automated review]
| - `character` gains `'native'`. The animated-layout glide, swap and edge | ||
| reveal play `--ease-move` over `--duration-medium-min` at every other | ||
| character (`spec:AST-105` FR4), and the motion, easing-token and theme | ||
| docs, the theme template, the theme-authoring guide and | ||
| `architecture:theme-authoring-contract` describe the fourth value (FR7). |
There was a problem hiding this comment.
This bullet changes every theme's animated-layout motion, but FR5 (lines 121–123) and the first impact bullet (lines 151–152) still say existing themes render exactly as before. Name the exception there, with character: 'native' as the way to keep today's spring.
| - `character` is `'crisp'`, `'standard'` (default), `'expressive'`, or | ||
| `'native'`; it picks the entrance and move curves and the spring bounce. | ||
| `'native'` keeps the `'standard'` curves and bounce, and a motion that | ||
| plays a curve at every other character plays its measured spring instead, | ||
| such as the animated-layout glide (`spec:AST-105` FR4). A continuous | ||
| bounce is not offered; |
There was a problem hiding this comment.
architecture:theme-authoring-contract INV15 still lists character as crisp, standard, expressive. Amend it in this pull request so the two current records agree. "Such as the animated-layout glide" also leaves open which other motions 'native' reaches. Naming them (today the glide, swap and edge reveal) would settle it.
|
Updated: Decision from Cindy (via her agent): glide timing approved. Under Cindy's gesture rule, a glide is non-gesture motion and plays the theme's motion tokens, so please drop the |
Exact decision needed
Which motion times the animated-layout glide (the content after a size change, with the changed element, the in-place swap and the edge reveal) under a theme's motion knobs. Today
spec:AST-105(animated layout) FR4 plays the measuredsprings.settlerole under every pointer and everycharacter, so a theme'scharacterandtemponever reach its glides, and a mouse gets a spring that keeps moving after the CSS motion around it has landed.Existing authority searched
spec:AST-105(animated layout) FR4, FR5, FR7, FR8, FR9 and DEC-1: FR4 fixes the glide onsprings.settle; FR5 applies it under every pointer.spec:AST-108(theme motion) FR1–FR3, FR4a and DEC-1:characterhas three values and reaches the CSS curves and the spring bounce; nothing lets a theme move the glide off the spring.spec:AST-094(touch presentations) FR4, the measured role table, which this leaves unchanged, and its non-goal that pointer presentations keep the theme's duration and easing tokens.component:SideNavFR6 andcomponent:AppShellFR17 namedsprings.settleas FR4's motion; they now defer to FR4.design:reduced-motionDR1–DR3: unchanged.packages/core/src/motion/animatedLayout.ts,packages/core/src/theme/motionKnobs.ts,useAnimatedLayout,defineTheme'smotion.'native', where their glide paths still apply. feat(List): a row's start and end content animate with the list's animatedLayout handle (component:List FR12) #8803, feat(Resizable): deprecate useResizable's configuration-object form for useResizable(handleRef, options) #9202, fix(core): a layout change made late in a long task plays its motion instead of skipping past it #9274, feat(Resizable): a resizable LayoutPanel slides closed and open, and focus leaves a collapsing panel #9300, test(motion, SideNav): the rail proofs judge the frames a loaded page draws, not a frame rate #9518 and fix(core): a layout motion's copy carries on the CSS animations and transitions running in it #9534 touch animated-layout code or tests without deciding its timing. No open pull request edits these records.Decision
--ease-moveover--duration-medium-minunder every pointer, socharacter(crisp, standard, expressive) shapes the curve andtemposcales the duration. At the defaults that iscubic-bezier(0.24, 1, 0.4, 1)over 310 ms.charactergains'native'. The CSS tokens and spring bounces keep their'standard'values, and a motion that offers both a curve and a measured spring plays the spring: today, the glide, swap and edge reveal onsprings.settle, at the theme'stempo.spec:AST-108FR4a), the measured springs of touch presentations, and every other motion.character: 'native'.cixzhangfor all four records. Each new DEC-2 names her as decider and takes effect with her approval.Rejected alternatives
springs.settleas every theme's glide: a theme'scharacterandtemponever reach its glides, and with a mouse the glide lands long after the CSS motion around it.characteralready makes.'instant'as a character: whether to animate is already the opt-in handle per area, orreducedMotion: 'always'per theme;characterstays how lively motion feels.Claim scope and non-goals
spec:AST-094is unchanged.Evidence and implementation relationship
Measured in Chrome on the current canary build, with the glide opted in on Collapsible, TreeList and Table row expansion, and on the SideNav rail: the content after the change reaches 90% of its travel at about 314 ms, settles within half a pixel at about 580–660 ms, and keeps animating until about 765 ms. The theme's CSS transitions around it take 175–550 ms.
--ease-moveover 310 ms reaches 90% at about 123 ms and lands at 310 ms.Implementation follows in a separate pull request once this is approved: the animated-layout module reads the theme's move curve and duration (the animator already plays any closed-form curve, so the running-glide carry-over in Coverage stays), and the motion knobs add
'native'.Writing rubric results
spec:AST-108DEC-2 states that it amends DEC-1's three steps, as DEC-1 states what it supersedes.Scope
Validation
pnpm check:knowledge: "Knowledge templates and records are aligned."git diff --check: clean