-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
PR Analysis Report📚 Storybook PreviewView Storybook for this PR 🧪 Sandbox PreviewView Sandbox for this PR Modified ComponentsChat (@astryxdesign/core) · View in Storybook
CommandPalette (@astryxdesign/core) · View in Storybook
ComplexSelector (@astryxdesign/core) · View in Storybook
DateInput (@astryxdesign/core) · View in Storybook
DateRangeInput (@astryxdesign/core) · View in Storybook
DateTimeInput (@astryxdesign/core) · View in Storybook
Field (@astryxdesign/core) · View in Storybook
FileInput (@astryxdesign/core) · View in Storybook
NumberInput (@astryxdesign/core) · View in Storybook
Selector (@astryxdesign/core) · View in Storybook
TextArea (@astryxdesign/core) · View in Storybook
TextInput (@astryxdesign/core) · View in Storybook
TimeInput (@astryxdesign/core) · View in Storybook
Typeahead (@astryxdesign/core) · View in Storybook
RichTextEditor (@astryxdesign/richtext) · View in Storybook
Bundle Size Summary
Accessibility AuditStatus: 4 accessibility violation(s) found — 2 critical, 2 serious. DateRangeInput - 1 issue(s)
FileInput - 1 issue(s)
RichTextEditor - 2 issue(s)
Visual Regression2 of 32 shot(s) changed. View the report A repository maintainer can accept these exact frames: A change here is a question, not a failure: check whether the after is the
ComplexSelector — Fruit ripeness selector — neutral light
ComplexSelector — Fruit ripeness selector — neutral dark
Generated by PR Enrichment workflow | Storybook | Sandbox | View full report |
@cixzhang
cixzhang
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for tightening the floor to iOS. The Chromium path and generated CSS look right, but the family regression guard omits RichTextEditor. Please include the rich-text package so all 19 changed controls are protected.
[Reviewed by Robohands]
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This omits RichTextEditor, so its broad coarse-pointer floor can regress while this ‘family-wide’ suite stays green.
[Reviewed by Robohands]
ManoharPaturi
commented
Sep 6, 2026
Done in the updated branch — inputFontFloor.test.ts now scans the rich-text package too: RichTextEditor.tsx is in the gated-controls list (path relative to core), and the bare-floor offender scan covers packages/richtext/src alongside core, so a reintroduced ungated floor fails wherever it lands in either tree. Both guard tests green.
@cixzhang
cixzhang
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for fixing the RichTextEditor coverage gap—the family guard and non-iOS path now check out. I still can’t verify the iOS half of this compatibility fix. Please add latest-stable iOS Safari evidence showing the nested gate computes the input to 16px and focusing it keeps visualViewport.scale at 1, with the device/OS/Safari version and this exact head recorded. Chromium or Playwright WebKit cannot establish that browser-specific behavior.
[Reviewed by Robohands]
Real-device evidence, as requested — captured on an iPhone running current Safari 27.0, at head d2b04b4 (fix/input-floor-ios-only).
I put up a self-contained harness that embeds the exact nested gate from this PR's head, so the numbers below are recorded on-device against this change: https://manoharpaturi.github.io/astryx/ios-floor-evidence.html
Environment (recorded on-device):
- userAgent:
Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/27.0 Mobile/15E148 Safari/604.1(Safari 27.0; the OS token in Safari's UA is a frozen compatibility string —Version/27.0is the actual browser version) maxTouchPoints5 ·(pointer: coarse)matches ·CSS.supports('-webkit-touch-callout', 'none')true · initialvisualViewport.scale1
Field A — gated by the fix (font-size: var(--text-body-size) + the nested @media (pointer: coarse) { @supports (-webkit-touch-callout: none) { font-size: max(1rem, var(--text-body-size)) } } from this head):
- computed font-size: 16px
- min
visualViewport.scalewhile focused: 1 — focusing does not zoom
Field B — negative control (raw font-size: 14px, no gate):
- computed font-size: 14px
- min scale while focused: 1.142 — iOS auto-zooms on focus, confirming the harness does detect the failure mode on this device
iOS Safari evidence — Field A floors to 16px with no zoom; the un-gated 14px control zooms to 1.142x
The harness prints astryx PR #6085 · head d2b04b4 in its header, so the recording is bound to this exact head.
I hope this help you to verify.
Fixes #6015
Summary
Text controls carried
@media (pointer: coarse) { font-size: max(1rem, var(--text-body-size)) }— the iOS no-zoom floor — for every coarse pointer. Only iOS Safari zooms on focus below 16px; Android and desktop-touch browsers do not, so non-iOS touch users got inflated text for no benefit. This nests the floor in@supports (-webkit-touch-callout: none)inside the existing coarse-pointer branch (option 1 from the issue): iOS output is byte-identical, every other platform keeps the theme's token size.Scope
All 19 floored sites, found by recursive scan rather than by hand: 16 body-size controls (including
RichTextEditorin packages/richtext, which carried the identical rule), 3 label-size controls (Selector, ComplexSelector, PanelSearchInput), and the two derivedheight: firstThatWorks('1lh', ...)fallbacks inNativeDateField/nativePickerSegmentStyles, which became conditional so pre-1lhbrowsers stay height-consistent on both sides of the gate.Tests
packages/core/src/inputFontFloor.test.ts: asserts every floored control carries the iOS gate and (recursively) that no bare coarse-pointer floor remains anywhere in core — so a future control can't reintroduce the over-broad rule.declaredValueread-back test inTextInput.test.tsx. (Source-level assertions are necessary: jsdom's CSSOM silently drops at-rule-wrappedmax(1rem, ...)declarations — verified empirically against the old pattern too, so the old code was equally untestable that way.)Docs (
ChatComposerInput.doc.mjs, all locales) now say "iOS" where they said "touch device". Changeset included.Verification
Affected suites 714 + 656 passed, dependents 183 passed, final commit pass 77;
tsc --noEmitclean (core + richtext); eslint 0 errors on touched files;check:syncandcheck:changesetsclean.