The main typecheck models native resolution (.ios/.android/.native), so
.web variants were never checked in their real resolution context. Add a
second pass that roots the program at the web entry point and resolves
with moduleSuffixes [".web", ""], wire it up as pnpm typecheck:web, and
add it to the lint workflow matrix.
Ambient shims (src/platform/*.web-check.d.ts, web pass only) pin
react-native-svg, expo-file-system, and expo-image-manipulator to their
native declarations, since their .web.d.ts files expose a different API
surface than the one the app is written against (and, for
expo-file-system/legacy, raw package sources that break under suffix
remapping).
The rest fixes the drift the new pass surfaced, notably:
- List.web: ListRef now carries ListMethods (was RefObject<View>),
scrollToOffset accepts optional animated, ListProps defaults ItemT
- Dialog.web: ScrollableInner accepts a (never-attached) ScrollView ref,
InnerFlatList label optional + ListMethods ref, Handle accepts props
- Menu.web exports MenuControlProps; ContextMenu.web gets a properly
typed Trigger wrapper and accepts align
- Pager/TabBar/PagerWithHeader web variants align with the shared
contract (testID, onTabPressed, drag shared values, setMinimumHeight)
- useNavigationTabState.web now reports isAtFeeds/isAtBookmarks, fixing
drawer highlighting for those routes on web
- Web-only throw-stubs get real signatures; duplicated prop types move
into .shared.ts files (CaptchaWebView, EditImageDialog, OpenCameraBtn,
GestureActionView, ValuePropositionPager)
- findListNativeTag helper replaces findNodeHandle casts on List refs
- Assorted call-site type fixes (keyExtractor params, PostQuotes record
narrowing, saveBytesToDisk bytes param, openCamera web signature)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BCuMKXWHuyGoNhTVAHBMyk
* tweak in-post threadgate button
* tweak composer threadgate button
* reduce date length slightly
* pressed styles
* make date length depend on breakpoint
* add chevron to label btn
* add tiny chevron, special-case button icon width
* [Threadgate] Add hint (#9350)
* get tooltip working on web
* add compatibility layer for working in iOS sheets
* add timeout to profile tooltip now that it appears instantly
* rm debug code
* Update ThreadgateBtn.tsx
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* remeasure when keyboard changes
---------
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* fix types
* [Threadgate] Refresh dialog (#9342)
* wip new ui
* update threadgate dialog with new designs
* restore nobody option
* relayout android sheet when ratio changes
* fix ratio changing case in bottom sheet
* timebox reached, use setTimeout
* update panel styles
* missing imports
* extract out Panel
* tweak layout animation
* fix icon color
* use same color mechamism for icon as text
* restore the header
* refreshed toggle styles (#9343)
* [Threadgate] Persist settings (#9341)
* add persist toggle to threadgate dialog
* move state back down
* sort out spacing
* wire up query
* @surfdude29 tweaks
* use tiny chevron in WhoCanReply
* wait for prefetch before opening
* move Panel into the Toggle namespace
* default -> pref
* use medium date length
* rm hover state from web selects, fix border radius
* fix key issue in Selects
---------
Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
* radix select component on web
* native implementation (wip)
* fix sheet height/padding
* tone down web styles
* react 19 cleanup
* replace primary language select
* change style on native
* get auto placeholder working
* more style tweaks
* replace app language dropdown
* replace rnpickerselect with native select
* rm react-native-picker-select dependency
* rm placeholder, since a value is always selected
* docblock for renderItem
* add more docblocks
* add style prop to item
* pass selectedValue through renderItem
* fix context
* Style overflow buttons
---------
Co-authored-by: Eric Bailey <git@esb.lol>
* tweak height/padding of iOS
* tweak android ratio calculation
* add a bit of extra padding to full height iOS to account for the bit below the safe area