Repository navigation
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
AI review status for this pull request.
|
PR Analysis Report🔎 Preview ·
|
| Component | Size | LoC | Visual · A11y · RTL |
|---|---|---|---|
| ChatLayout | 🔴 83.8 kB (+28.5 kB) · 9.9 kB CSS (0) | — | ✗ · ✓ · — |
| ChatComposer | 68.7 kB (+81 B) · 11.3 kB CSS (0) | — | ✗ · ✓ · — |
| ChatSendButton | 52.5 kB (+71 B) · 9.4 kB CSS (0) | — | ✗ · ✓ · — |
125 more components
| Component | Size | LoC | Visual · A11y · RTL |
|---|---|---|---|
| ChatDictationButton | 52.6 kB (+69 B) · 9.5 kB CSS (0) | — | ✗ · ✓ · — |
| ChatComposerInput | 66.7 kB (+67 B) · 10.7 kB CSS (0) | — | ✗ · ✓ · — |
| ChatLayoutScrollButton | 52.5 kB (+67 B) · 9.6 kB CSS (0) | — | ✗ · ✓ · — |
| ChatComposerTokenElement | 66.7 kB (+66 B) · 10.7 kB CSS (0) | — | ✗ · ✓ · — |
| ChatComposerDrawer | 17.7 kB (0) · 4.7 kB CSS (0) | — | ✗ · ✓ · — |
| ChatMessage | 16.8 kB (0) · 3.7 kB CSS (0) | — | ✗ · ✓ · ✓ |
| ChatMessageBubble | 7.2 kB (0) · 3.7 kB CSS (0) | — | ✗ · ✓ · ✓ |
| ChatMessageList | 23.9 kB (0) · 6.9 kB CSS (0) | — | ✗ · ✓ · — |
| ChatMessageMetadata | 19.9 kB (0) · 4.1 kB CSS (0) | — | ✗ · ✓ · — |
| ChatSystemMessage | 7.0 kB (0) · 3.8 kB CSS (0) | — | ✗ · ✓ · — |
| ChatTokenizedText | 7.2 kB (0) · 4.0 kB CSS (0) | — | ✗ · ✓ · — |
| ChatToolCalls | 27.8 kB (0) · 8.3 kB CSS (0) | — | ✗ · ✓ · — |
| Chat | — | — | ✗ · ✓ · — |
| lab/Comments | 309.4 kB (+1.6 kB) · 2.5 kB CSS (0) | — | — · — · — |
| lab/CommentComposer | 139.3 kB (+204 B) · 1.9 kB CSS (0) | — | — · — · — |
| Slider | 102.0 kB (+102 B) · 8.7 kB CSS (0) | — | — · — · — |
| DateTimeInput | 199.4 kB (+98 B) · 18.2 kB CSS (0) | — | — · — · — |
| DateInput | 177.1 kB (+93 B) · 16.5 kB CSS (0) | — | — · — · — |
| Lightbox | 103.3 kB (+91 B) · 9.9 kB CSS (0) | — | — · — · — |
| SegmentedControl | 89.8 kB (+90 B) · 6.8 kB CSS (0) | — | — · — · — |
| lab/CommentPin | 52.9 kB (+88 B) · 1.2 kB CSS (0) | — | — · — · — |
| Switch | 96.6 kB (+86 B) · 9.8 kB CSS (0) | — | — · — · — |
| Toast | 89.7 kB (+86 B) · 9.7 kB CSS (0) | — | — · — · — |
| DropdownMenuSubMenu | 64.9 kB (+83 B) · 9.4 kB CSS (0) | — | — · — · — |
| SideNavHeading | 67.1 kB (+82 B) · 10.7 kB CSS (0) | — | — · — · — |
| AvatarGroupOverflow | 44.7 kB (+80 B) · 5.5 kB CSS (0) | — | — · — · — |
| Carousel | 60.9 kB (+79 B) · 10.4 kB CSS (0) | — | — · — · — |
| DropdownMenu | 87.6 kB (+79 B) · 16.8 kB CSS (0) | — | — · — · — |
| Popover | 79.9 kB (+79 B) · 13.5 kB CSS (0) | — | — · — · — |
| TableSelectionToolbar | 61.6 kB (+79 B) · 12.5 kB CSS (0) | — | — · — · — |
| Thumbnail | 56.4 kB (+79 B) · 11.0 kB CSS (0) | — | — · — · — |
| lab/Schedule | 100.0 kB (+79 B) · 3.9 kB CSS (0) | — | — · — · — |
| MoreMenu | 87.8 kB (+78 B) · 16.8 kB CSS (0) | — | — · — · — |
| TimeInput | 153.8 kB (+78 B) · 15.6 kB CSS (0) | — | — · — · — |
| Toolbar | 39.8 kB (+78 B) · 7.9 kB CSS (0) | — | — · — · — |
| TopNavHeading | 66.6 kB (+78 B) · 10.5 kB CSS (0) | — | — · — · — |
| lab/ListInput | 96.6 kB (+78 B) · 1.6 kB CSS (0) | — | — · — · — |
| Typeahead | 74.7 kB (+77 B) · 12.2 kB CSS (0) | — | — · — · — |
| AlertDialog | 96.3 kB (+76 B) · 13.8 kB CSS (0) | — | — · — · — |
| AppShell | 82.0 kB (+76 B) · 12.9 kB CSS (0) | — | — · — · — |
| MobileNav | 62.2 kB (+76 B) · 10.0 kB CSS (0) | — | — · — · — |
| Selector | 94.0 kB (+76 B) · 16.9 kB CSS (0) | — | — · — · — |
| lab/EmojiPicker | 81.6 kB (+76 B) · 751 B CSS (0) | — | — · — · — |
| Banner | 54.1 kB (+75 B) · 9.9 kB CSS (0) | — | — · — · — |
| BreadcrumbItem | 76.2 kB (+75 B) · 11.5 kB CSS (0) | — | — · — · — |
| Link | 49.0 kB (+75 B) · 6.9 kB CSS (0) | — | — · — · — |
| Calendar | 63.0 kB (+74 B) · 10.0 kB CSS (0) | — | — · — · — |
| ToggleButton | 52.9 kB (+74 B) · 9.5 kB CSS (0) | — | — · — · — |
| TopNavMegaMenu | 61.4 kB (+74 B) · 11.2 kB CSS (0) | — | — · — · — |
| lab/DiffViewer | 78.4 kB (+74 B) · 2.1 kB CSS (0) | — | — · — · — |
| Button | 52.0 kB (+73 B) · 9.4 kB CSS (0) | — | — · — · — |
| InfoTip | 43.5 kB (+73 B) · 5.3 kB CSS (0) | — | — · — · — |
| MobileNavToggle | 52.4 kB (+73 B) · 9.4 kB CSS (0) | — | — · — · — |
| Tooltip | 26.1 kB (+73 B) · 4.3 kB CSS (0) | — | — · — · — |
| DrawerHeader | 55.1 kB (+72 B) · 12.3 kB CSS (0) | — | — · — · — |
| SideNavCollapseButton | 52.9 kB (+72 B) · 9.5 kB CSS (0) | — | — · — · — |
| Stepper | 53.7 kB (+72 B) · 9.6 kB CSS (0) | — | — · — · — |
| TabList | 40.4 kB (+72 B) · 6.4 kB CSS (0) | — | — · — · — |
| TabMenu | 63.5 kB (+72 B) · 10.5 kB CSS (0) | — | — · — · — |
| lab/SelectableCardGroup | 60.0 kB (+72 B) · 162 B CSS (0) | — | — · — · — |
| lab/TransferListSelector | 98.3 kB (+72 B) · 1.9 kB CSS (0) | — | — · — · — |
| richtext/RichTextEditor | 291.3 kB (+72 B) · 2.6 kB CSS (0) | — | — · — · — |
| CheckboxList | 54.5 kB (+71 B) · 7.9 kB CSS (0) | — | — · — · — |
| DateRangeInput | 87.0 kB (+71 B) · 12.2 kB CSS (0) | — | — · — · — |
| IconButton | 52.1 kB (+71 B) · 9.4 kB CSS (0) | — | — · — · — |
| Pagination | 104.1 kB (+71 B) · 17.3 kB CSS (0) | — | — · — · — |
| Table | 100.8 kB (+71 B) · 17.3 kB CSS (0) | — | — · — · — |
| Avatar | 39.7 kB (+70 B) · 5.5 kB CSS (0) | — | — · — · — |
| BaseTypeahead | 62.3 kB (+70 B) · 10.4 kB CSS (0) | — | — · — · — |
| richtext/RichTextEditorToolbar | 245.2 kB (+70 B) · 454 B CSS (0) | — | — · — · — |
| CodeBlock | 66.8 kB (+69 B) · 10.7 kB CSS (0) | — | — · — · — |
| HoverCard | 24.6 kB (+69 B) · 4.3 kB CSS (0) | — | — · — · — |
| MultiSelector | 89.5 kB (+69 B) · 16.4 kB CSS (0) | — | — · — · — |
| SideNavItem | 62.0 kB (+69 B) · 10.5 kB CSS (0) | — | — · — · — |
| StatusDot | 27.8 kB (+69 B) · 5.3 kB CSS (0) | — | — · — · — |
| TableCell | 92.5 kB (+69 B) · 17.0 kB CSS (0) | — | — · — · — |
| TopNav | 63.8 kB (+69 B) · 10.3 kB CSS (0) | — | — · — · — |
| TopNavMenu | 66.3 kB (+69 B) · 10.6 kB CSS (0) | — | — · — · — |
| richtext/RichTextView | 271.5 kB (+69 B) · 2.3 kB CSS (0) | — | — · — · — |
| charts/ChartTooltip | 158.0 kB (+68 B) · 423 B CSS (0) | — | — · — · — |
| FileInput | 64.5 kB (+68 B) · 10.7 kB CSS (0) | — | — · — · — |
| Markdown | 163.1 kB (+68 B) · 19.6 kB CSS (0) | — | — · — · — |
| NumberInput | 67.1 kB (+68 B) · 11.1 kB CSS (0) | — | — · — · — |
| lab/ChatReactionBar | 99.0 kB (+68 B) · 1.1 kB CSS (0) | — | — · — · — |
| lab/TourStep | 86.2 kB (+68 B) · 590 B CSS (0) | — | — · — · — |
| lab/TransferList | 91.3 kB (+68 B) · 1.7 kB CSS (0) | — | — · — · — |
| AvatarGroup | 42.4 kB (+67 B) · 5.6 kB CSS (0) | — | — · — · — |
| DialogHeader | 54.8 kB (+67 B) · 10.9 kB CSS (0) | — | — · — · — |
| Drawer | 46.2 kB (+67 B) · 8.2 kB CSS (0) | — | — · — · — |
| RadioListItem | 63.0 kB (+67 B) · 9.8 kB CSS (0) | — | — · — · — |
| SideNav | 81.7 kB (+67 B) · 10.8 kB CSS (0) | — | — · — · — |
| TableHeaderCell | 92.1 kB (+67 B) · 16.8 kB CSS (0) | — | — · — · — |
| TextArea | 58.1 kB (+67 B) · 9.2 kB CSS (0) | — | — · — · — |
| lab/ChatEmojiPicker | 97.9 kB (+67 B) · 773 B CSS (0) | — | — · — · — |
| BottomSheet | 63.1 kB (+66 B) · 7.5 kB CSS (0) | — | — · — · — |
| FieldLabel | 47.4 kB (+66 B) · 5.6 kB CSS (0) | — | — · — · — |
| Tokenizer | 86.1 kB (+66 B) · 18.1 kB CSS (0) | — | — · — · — |
| PowerSearch | 275.2 kB (+65 B) · 23.2 kB CSS (0) | — | — · — · — |
| CheckboxInput | 60.1 kB (+64 B) · 9.1 kB CSS (0) | — | — · — · — |
| ContextMenu | 91.4 kB (+64 B) · 16.6 kB CSS (0) | — | — · — · — |
| InputGroup | 52.3 kB (+64 B) · 7.8 kB CSS (0) | — | — · — · — |
| charts/Chart | 180.5 kB (+63 B) · 494 B CSS (0) | — | — · — · — |
| CheckboxListItem | 66.1 kB (+63 B) · 10.9 kB CSS (0) | — | — · — · — |
| ComplexSelector | 66.2 kB (+63 B) · 11.4 kB CSS (0) | — | — · — · — |
| ListItem | 65.1 kB (+59 B) · 10.9 kB CSS (0) | — | — · — · — |
| TextInput | 63.1 kB (+58 B) · 10.9 kB CSS (0) | — | — · — · — |
| Field | 50.7 kB (+57 B) · 7.2 kB CSS (0) | — | — · — · — |
| RadioList | 52.1 kB (+57 B) · 7.2 kB CSS (0) | — | — · — · — |
| lab/PageControl | 71.8 kB (+32 B) · 709 B CSS (0) | — | — · — · — |
| lab/NavigationScreen | 78.5 kB (+28 B) · 1.5 kB CSS (0) | — | — · — · — |
| lab/NavigationStack | 78.5 kB (+28 B) · 1.5 kB CSS (0) | — | — · — · — |
| ButtonGroup | 40.1 kB (+17 B) · 3.7 kB CSS (0) | — | — · — · — |
| CommandPalette | 59.7 kB (+1 B) · 12.4 kB CSS (0) | — | — · — · — |
| BottomSheetSwitcher | 17.5 kB (0) · 3.4 kB CSS (0) | — | — · — · — |
| CommandPaletteInput | 27.9 kB (0) · 7.5 kB CSS (0) | — | — · — · — |
| Dialog | 22.7 kB (0) · 6.7 kB CSS (0) | — | — · — · — |
| Heading | 8.2 kB (0) · 5.3 kB CSS (0) | — | — · — · — |
| Spinner | 20.5 kB (0) · 6.1 kB CSS (0) | — | — · — · — |
| Text | 7.6 kB (0) · 5.3 kB CSS (0) | — | — · — · — |
| Timer | 9.7 kB (0) · 5.9 kB CSS (0) | — | — · — · — |
| ProgressBar | 11.5 kB (−1 B) · 6.2 kB CSS (0) | — | — · — · — |
| charts/ChartLegend | 35.8 kB (−2 B) · 224 B CSS (0) | — | — · — · — |
| Timestamp | 23.2 kB (−2 B) · 9.7 kB CSS (0) | — | — · — · — |
| lab/CommentThread | 302.5 kB (−110 B) · 2.4 kB CSS (0) | — | — · — · — |
| chat | — | — | — · ✓ · — |
Visual changes: 4 snapshots in 1 component
A change is a question for the reviewer, not a failure.
| Component · story | Before | After | Diff |
|---|---|---|---|
| Chat · Default (neutral, dark) | ![]() |
![]() |
![]() |
| Chat · Default (neutral, light) | ![]() |
![]() |
![]() |
| Chat · Clipping (neutral, dark) | ![]() |
![]() |
![]() |
| Chat · Clipping (neutral, light) | ![]() |
![]() |
![]() |
Package size: @astryxdesign/core 6.83 MB packed (+11.1 kB); no new dependencies.
API changes: none in this pull request
Committed API report behind this build: cli 19 rows, core 24 rows; run pnpm api:report.
Touched components checked; add ci:run-visual, ci:run-a11y or ci:run-rtl to run the full suites.
Generated by PR Enrichment workflow | View full report
9bcc941 to
79f61b0
Compare
There was a problem hiding this comment.
Approval waits on an owner decision: no current spec covers ChatLayout's new keyboardDismissMode prop or its default-on 'interactive' dismissal. An engineering owner needs to provide or identify the governing spec, meaning whether ChatLayout ships the prop and which default it uses, and record it by commenting /approve-spec <full head SHA> on this pull request; the author can do this if they are an engineering owner. Independently of that decision, these changes are needed:
- The diff includes four open predecessor pull requests (#8045, #8067, #8074, #8176), about 27,000 authored lines, so please land them through their own reviews and rebase this branch down to its ChatLayout commit.
'onDrag'blurs the composer even when no software keyboard is shown, unlike'interactive', so please gate it on the keyboard being up and add a test.- The new draft
spec:AST-094needs its own owner ruling in the pull request that introduces it, and its FR7 citesspec:AST-090, which is not in the repository.
[Automated review]
79f61b0 to
187dadb
Compare
There was a problem hiding this comment.
Approval waits on an owner decision: no current spec covers ChatLayout's new keyboardDismissMode prop or its default-on 'interactive' dismissal. An engineering owner needs to provide or identify the governing spec, meaning whether ChatLayout ships the prop and which default it uses, and record it by commenting /approve-spec <full head SHA> on this pull request; the author may do so if they are an engineering owner. Independently of that decision, these changes are needed:
- The diff includes four open predecessor pull requests (#8045, #8067, #8074, #8176), about 27,000 authored lines, so please land them through their own reviews and rebase this branch down to its ChatLayout commit.
'onDrag'blurs the composer even when no software keyboard is shown, unlike'interactive', so please gate it on the keyboard being up and add a test for that case.- The new draft
spec:AST-094needs its own owner ruling in the pull request that introduces it, and its FR7 citesspec:AST-090, which is not in the repository. docsZhinChatLayout.doc.mjshas nokeyboardDismissModeentry and does not mention the new default.
[Automated review]
187dadb to
edc7843
Compare
There was a problem hiding this comment.
Approval waits on an owner decision: no current spec covers ChatLayout's new keyboardDismissMode prop or its default-on 'interactive' dismissal. An engineering owner needs to provide or identify the governing spec, meaning whether ChatLayout ships the prop and which default it uses, and record it by commenting /approve-spec <full head SHA> on this pull request; the author may do so if they are an engineering owner. Independently of that decision, these changes are needed:
- The diff includes six open predecessor pull requests (#8045, #8067, #8074, #8176, #8258, #8287), about 29,800 authored lines, so please land them through their own reviews and rebase this branch down to its ChatLayout commit.
'onDrag'blurs the composer even when no software keyboard is shown, unlike'interactive', so please gate it on the keyboard being up and add a test for that case.- The draft
spec:AST-094needs its own owner ruling in the pull request that introduces it: its FR7 citesspec:AST-090, which is not in the repository, and its FR4 rules out the theme-tunable touch motion that #8258 adds. docsZhinChatLayout.doc.mjshas nokeyboardDismissModeentry and does not mention the new default.
[Automated review]
|
Posted by Cindy's agent on her behalf. Parts of this PR re-implement behavior that already exists, or is being specified, as a shared part of core. Converging keeps one implementation per behavior:
This is about where the behavior lives, not about the PR's intent. |
|
Agreed: one implementation.
|
edc7843 to
cd49b1b
Compare
|
/approve-spec 1fd9e0e |
There was a problem hiding this comment.
Both pull requests in this stack are approved, pending CI.
#9983: approve. The layout-viewport floor restores the keyboard height while Safari pans to a focused field (spec:AST-099 FR2), and the Android emulator readings at this head cover Chrome with Gboard and Firefox.
#8217: approve. FR10, DEC-1 and the spec:AST-094 FR43 entry carry an engineering owner's approval for this head, the earlier fixes are in (shared helpers, release-note scope, stack line), and the drag, the composer's follow and the Reduce Motion cue behave as FR10 says in a Chromium check.
Whole stack: pass. Merged onto main, it typechecks and its unit tests pass.
A pull request lands only when it and every pull request below it are approved. Approved pending CI: CI has not run on these heads yet; once #8217 is ready for review, a maintainer adds the ci:run label to both so CI runs.
Non-blocking: a test asserting that the composer's spring-back starts from the release speed would pin spec:AST-094 FR38.
[Automated review]
|
Noted: the test that pins the spring-back to the release speed ( |
|
/approve-spec 39a9502 |
There was a problem hiding this comment.
Changes requested on #8217; #9983 is approved.
#9983: approve. The keyboard height now reads the whole keyboard while Safari pans to a focused field, restoring spec:AST-099 FR2, and nothing has changed since its approval.
#8217: request changes. The rewritten FR10, DEC-1 and the spec:AST-094 FR36 and FR43 edits carry an engineering owner's approval for this head, but the composer's scroll hold needs these fixes:
- A two-finger pinch that starts on the composer has every move cancelled while the keyboard is up, so the page cannot be zoomed from there, which
spec:AST-094FR10 requires to stay the browser's; cancel only while exactly one finger is down (transcriptDismiss.ts:278-285). - The hold cancels the moves of touches no recognizer owns, from the first move, through a blocking listener beside a pan that never claims, which
spec:AST-094FR19 does not allow; add the case to FR19's exceptions for approval, or let the composer drag claim its touch (transcriptDismiss.ts:291-296). holdComposerScrollandisInComposerScrollercopy the gesture system's page hold (gestures/pageHold.ts) and scroll test (gestures/nativeScroll.ts); extendholdPageScrollto take the composer's decision and delete the copy (transcriptDismiss.ts:168-304).- The crossing dismissal keeps the keyboard down when the finger moves back up before the lift, which
spec:AST-094FR37 still forbids because the new FR36 exception names FR36 alone; extend the exception to FR37.
Whole stack: fails on #8217's fixes, and a pull request lands only when it and every pull request below it are approved; CI has not run on either draft head yet.
[Automated review]
|
/approve-spec d19cf69 |
There was a problem hiding this comment.
Changes requested on #8217; #9983 is approved.
#9983: approve. The keyboard height reads the whole keyboard while Safari pans to a focused field, restoring spec:AST-099 FR2.
#8217: request changes. The rewritten FR10, DEC-1 and spec:AST-094 edits carry an engineering owner's approval for this head, and straight drags behave as FR10 says, but two fixes remain:
- A drag that starts on a sideways-scrolling strip in the composer and drifts sideways at all is not held, because
canElementScrollcounts any nonzero x travel, so the conversation scrolls under the keyboard (40 px for a 120 px drag up with 8 px of drift in Chromium) against FR10's "MUST NOT scroll content"; count an axis only when its travel is at least half the other's, as the gesture system's scroll probe does, and add a drifting-strip case (transcriptDismiss.ts:188-204). - On
main,spec:AST-094FR19 already reads "five exceptions" after a toast's swipe was added, so this head's composer exception leaves six under "five" once merged; rebase and say "six" in FR19 and in the FR18–FR22 verification row (spec.md:411,:955).
Whole stack: fails on #8217's two fixes; it merges cleanly onto main, where the changed suites and the core typecheck pass. A pull request lands only when it and every pull request below it are approved, and CI has not run on either draft head yet.
[Automated review]
|
/approve-spec 9d66f5f |
There was a problem hiding this comment.
Changes requested on #8217; #9983 is approved.
#9983: approve. The keyboard height reads the whole keyboard while Safari pans to a focused field, restoring spec:AST-099 FR2.
#8217: request changes. The record edits carry an engineering owner's approval for this head, and the drifting-strip hold and the FR19 count from the last review are fixed. Two shared-path fixes remain:
- Miss:
bounceComposerskips the bounce only on the system Reduce Motion setting, while Core's Reduced Motion policy (reducedMotionFade, and the animator) also honours a theme's reduced-motion mark, so once a theme can reduce motion for everyone the chat dock would keep bouncing; decide it withreducedMotionFade(dock, {touchRelease: true}), or one shared predicate if that import is too heavy (composerBounce.ts:41-46). scrollsInComposerrestatescreateNativeScrollProbe's half-travel axis rule instead of calling it; export that filter fromgestures/nativeScroll.tsand use it in both places (transcriptDismiss.ts:194-198).
Whole stack: fails on #8217's two fixes; the changed suites pass on this head. A pull request lands only when it and every pull request below it are approved, and CI has not run on either draft head yet.
[Automated review]
|
/approve-spec 955564d |
There was a problem hiding this comment.
Changes requested on #8217; #9983 is approved.
#9983: approve. It restores spec:AST-099 FR2: the keyboard height now reads the whole keyboard while Safari pans the page to a focused field, and its tests also pass on today's main.
#8217: request changes. The record changes carry an engineering owner's approval for this head, and one blocking finding remains:
- Regression:
transcriptDismiss.ts:29importsisNodeTarget, whichmainremoved in #10224, so once merged withmainCore's typecheck fails (TS2305) and every touch drag throwsisNodeTarget is not a function; mergemainand useisNodefromutils/nodeType(andisElement/isNodeat lines 202 and 293).
Whole stack: blocked by that fix; a pull request in this stack lands only when it and every pull request below it are approved, and CI has not run on this draft head yet.
[Automated review]
A drag down the conversation now blurs the field the moment it reaches the composer. The dock container then gives one small bounce on the keyboard's spring, started at the finger's speed, so the composer, the frosted layer and the scroll-to-bottom button move as one. A drag down that starts on the composer dismisses the keyboard too, and while the keyboard is up no drag on the composer scrolls the page. The follow code and its armed cue are gone.
|
/approve-spec 4c00682 |
There was a problem hiding this comment.
Changes requested on #8217; #9983 is approved pending CI.
#9983: approve. It restores spec:AST-099 FR2, so the keyboard height reads the whole keyboard while Safari pans to a focused field; its checks wait for a maintainer to add the ci:run label so CI runs.
#8217: request changes. The record changes carry an engineering owner's approval for this head; one blocking finding remains:
- Miss:
transcriptDismiss.ts:105-110(isFinished) and:264restate the gesture system'sisTerminalandisActive(gestures/GestureRecognizer.ts:159-165); call those instead, dropisFinished, and add the import to the gesture-import list thatChatLayoutTranscriptDismiss.test.tsxpins.
Whole stack: a pull request in this stack lands only when it and every pull request below it are approved, and CI has not run on #8217's draft head yet.
[Automated review]
The transcript dismissal read a pan's state with checks of its own. It now calls the gesture system's isTerminal and isActive. The unit test that pins its gesture imports lists GestureRecognizer.
|
/approve-spec 680bf29 |
There was a problem hiding this comment.
Approved pending CI: CI has not run on either head yet.
#9983: approve. It restores spec:AST-099 FR2, so the keyboard height reads the whole keyboard while Safari pans to a focused field. Its checks wait for a maintainer to add the ci:run label so CI runs.
#8217: approve. The record changes carry an engineering owner's approval for this head, and the dismissal now calls the gesture system's isActive and isTerminal, which settles the last blocking finding. CI runs once the pull request leaves draft and a maintainer adds the ci:run label.
Whole stack: passes. A pull request in this stack lands only when it and every pull request below it are approved, and both still need their CI to pass.
One optional cleanup: the comment above focusedEditable in transcriptDismiss.ts restates its body and can go.
[Automated review]
# Conflicts: # docs/specs/AST-094-touch-presentations/spec.md
|
/approve-spec cc668a0 |
There was a problem hiding this comment.
Changes requested on #8217; #9983 is approved.
#9983: approve. It restores spec:AST-099 FR2, so the keyboard height reads the whole keyboard while Safari pans to a focused field, and its checks pass.
#8217: request changes. The record edits carry an engineering owner's approval for this head, and the dismissal's tests pass; one record fix remains:
- Miss:
spec:AST-094FR36 and FR37's new exceptions (docs/specs/AST-094-touch-presentations/spec.md:676-678and:687-689) name only ChatLayout's transcript drag, whilecomponent:ChatLayoutFR10 makes a drag down from the composer dismiss the keyboard as soon as it passes the pan's 10 px hysteresis (packages/core/src/Chat/transcriptDismiss.ts:260-267), so once merged the two records contradict each other; widen both exceptions to ChatLayout's keyboard dismissals (or make the composer swipe decide at the lift) and record a fresh/approve-specfor that head.
Whole stack: fails on that finding. A pull request in this stack lands only when it and every pull request below it are approved.
Optional: the comment above focusedEditable in transcriptDismiss.ts restates its body and can go.
[Automated review]
Both exceptions named only the transcript drag. A drag down that starts on the composer dismisses the keyboard too, once it moves, so both exceptions now name ChatLayout's keyboard dismissals.
|
/approve-spec 3a38f3b |
There was a problem hiding this comment.
Both pull requests in this stack are approved.
#9983: approve. It restores spec:AST-099 FR2, so the keyboard height reads the whole keyboard while Safari pans to a focused field; after the merge of main its tests pass beside the keyboard module's new cases, and its checks pass.
#8217: approve. The record edits carry an engineering owner's approval for this head, spec:AST-094 FR36 and FR37 now name both of ChatLayout's keyboard dismissals, and the drag-to-dismiss tests pass in Chromium and WebKit.
Whole stack: passes. A pull request in this stack lands only when it and every pull request below it are approved.
[Automated review]












Stack: #9983 → #8217
Merge group: #9983, #8217
Review only this PR's change: vjeux/astryx@86c74e8...1fd9e0e, vjeux/astryx@6fd4c28...680bf29 and vjeux/astryx@cc668a0...8a7df57. Main merges sit between and after; one joins two
spec:AST-094FR36 edits.User need
In iOS Messages, dragging the conversation to the field, or swiping down on the input bar, puts the keyboard away. ChatLayout kept it up.
Problem and solution fit
A watcher pan on the root lets the transcript scroll. With a software keyboard up, the field blurs when a touch or pen drag reaches the composer's top. The dock container then bounces once on
springs.keyboard, from the finger's speed, at most the composer's bottom padding, unless motion is reduced. The composer, frosted layer and scroll-to-bottom button share that transform.A drag down from the composer blurs it too, unless a long press began it (caret loupe). While the keyboard is up, the gesture system's page hold cancels one-finger drags that start on the composer, so nothing scrolls under it. Its own scrollers, a pinch and a zoomed page stay the browser's.
Current specification
component:ChatLayoutFR10 and DEC-1, rewritten.spec:AST-094FR36 and FR37 except ChatLayout's two keyboard dismissals; FR19 lists the composer's hold.Public delta and caller burden
No new prop or type. The follow code goes (
composerFollow.ts, its armed cue, the animator): −9.8 kB gzip.Design and alternatives
touch-actionblocks pinch-zoom.Evidence
iOS 26.2 Simulator, "Full AI Chat", HID drags:
Scope
Writing rubric results
component:ChatLayout: R4, DEC-1's two one-line rejections; others none.spec:AST-094FR19, FR36, FR37 and FR43 lines andspec:AST-099paths: R1–R6 none.Testing
Behavior module: ChatLayout transcript dismissal (transcriptDismiss.ts)
ChatLayout's import, bytes (core build, esbuild, minified, React and StyleX external), both on main 3bd058c:
The animator, the rubber band and the follow module leave.
--cpus=4,CI=1,LP_NUM_THREADS=4, 1 worker) 13 passed, 1 skipped (pen, Chromium-only). Before the last merge of main: 3 runs each, the same.transcriptDismiss.test.ts32/32,ChatLayoutTranscriptDismiss.test.tsx23/23,composerBounce.test.ts5/5,dragAxes2/2. The theme-mark case fails on 9d66f5f's source, and two strip cases on d19cf69's. Two cases cover a node made in another window; each fails withinstanceofin place ofisNodeorisElement.isNodeTargetis gone) and its Storybook build. This head passes both.pnpm review:preand the repo checks (sync:exports:check,verify-exports,check:repo,check:token-docs,check:motion-roles,check:changesets,check:knowledge) pass.