@hanzogui/kitchen-sink 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/.detoxrc.js +130 -0
  2. package/.env.production +2 -0
  3. package/.maestro/config.yaml +4 -0
  4. package/.maestro/flows/shorthand-variables.yaml +23 -0
  5. package/.watchmanconfig +1 -0
  6. package/LICENSE +21 -0
  7. package/README.md +11 -0
  8. package/app.json +43 -0
  9. package/assets/adaptive-icon.png +0 -0
  10. package/assets/favicon.png +0 -0
  11. package/assets/icon.png +0 -0
  12. package/assets/splash.png +0 -0
  13. package/babel.config.js +25 -0
  14. package/e2e/CompilerExtraction.test.ts +147 -0
  15. package/e2e/GroupPressNative.test.ts +167 -0
  16. package/e2e/MediaQueryGtMd.test.ts +71 -0
  17. package/e2e/NativePortal.test.ts +113 -0
  18. package/e2e/PointerEvents.test.ts +116 -0
  19. package/e2e/PressStyleNative.noRngh.test.ts +191 -0
  20. package/e2e/PressStyleNative.test.ts +231 -0
  21. package/e2e/SafeArea.test.ts +57 -0
  22. package/e2e/SelectAndroidOnPress.test.ts +181 -0
  23. package/e2e/SelectRemount.test.ts +137 -0
  24. package/e2e/SheetDragResist.test.ts +370 -0
  25. package/e2e/SheetKeyboardDrag.test.ts +249 -0
  26. package/e2e/SheetScrollableDrag.test.ts +560 -0
  27. package/e2e/ShorthandVariables.test.ts +53 -0
  28. package/e2e/ThemeChangeBasic.test.ts +123 -0
  29. package/e2e/ThemeMutation.test.ts +80 -0
  30. package/e2e/check-rngh-status.test.ts +31 -0
  31. package/e2e/jest.config.js +19 -0
  32. package/e2e/utils/colors.ts +75 -0
  33. package/e2e/utils/navigation.ts +53 -0
  34. package/eas.json +22 -0
  35. package/flows/AlertDialog.yaml +17 -0
  36. package/flows/OpenApp.yaml +25 -0
  37. package/flows/Select.yaml +13 -0
  38. package/flows/Sheet.yaml +12 -0
  39. package/flows/Tabs.yaml +13 -0
  40. package/flows/Toast.yaml +14 -0
  41. package/flows/WarmUp.yaml +24 -0
  42. package/index.html +21 -0
  43. package/index.js +17 -0
  44. package/metro.config.js +64 -0
  45. package/next-router-shim.ts +9 -0
  46. package/package.json +118 -0
  47. package/plans/toast-2.md +471 -0
  48. package/playwright.config.ts +71 -0
  49. package/plugins/expo-modules-core-swift6.js +76 -0
  50. package/pod-install.sh +7 -0
  51. package/public/favicon.svg +70 -0
  52. package/public/fonts/inter.css +15 -0
  53. package/public/fonts/noto-cn.otf +0 -0
  54. package/public/gui-icon.svg +68 -0
  55. package/run-detox.sh +230 -0
  56. package/run-native-tests.sh +4 -0
  57. package/run-tests-parallel.ts +195 -0
  58. package/screenshots/Screenshotter.test.tsx +48 -0
  59. package/src/AnimationDemos.tsx +131 -0
  60. package/src/App.native.tsx +121 -0
  61. package/src/App.tsx +121 -0
  62. package/src/Navigation.tsx +98 -0
  63. package/src/Sandbox.tsx +87 -0
  64. package/src/TestDynamicEval.tsx +33 -0
  65. package/src/TestNativeSheet.tsx +100 -0
  66. package/src/components/TimedRender.tsx +18 -0
  67. package/src/constants/test-ids.ts +52 -0
  68. package/src/features/demos/demo-screen.tsx +72 -0
  69. package/src/features/home/ColorSchemeListItem.tsx +41 -0
  70. package/src/features/home/TestBuildAButton.tsx +102 -0
  71. package/src/features/home/TestSeparator.tsx +0 -0
  72. package/src/features/home/screen.tsx +285 -0
  73. package/src/features/testcases/screen.tsx +59 -0
  74. package/src/features/testcases/test-screen.tsx +50 -0
  75. package/src/generatedV5Theme.ts +112 -0
  76. package/src/gui.config.ts +411 -0
  77. package/src/guy.png +0 -0
  78. package/src/index.tsx +6 -0
  79. package/src/provider/index.tsx +18 -0
  80. package/src/test-gui-stack.tsx +11 -0
  81. package/src/test.tsx +3 -0
  82. package/src/useKitchenSinkTheme.tsx +15 -0
  83. package/src/usecases/ActionsSheetComparison.tsx +194 -0
  84. package/src/usecases/AnimatePresenceEnterExitCase.tsx +255 -0
  85. package/src/usecases/AnimatePresenceExitTest.tsx +69 -0
  86. package/src/usecases/AnimatedByProp.tsx +39 -0
  87. package/src/usecases/AnimationComprehensiveCase.tsx +2515 -0
  88. package/src/usecases/AnimationValueLoggingCase.tsx +526 -0
  89. package/src/usecases/AnimationsWithMediaQueriesCase.tsx +110 -0
  90. package/src/usecases/Benchmark.tsx +148 -0
  91. package/src/usecases/BenchmarkSelect.tsx +34 -0
  92. package/src/usecases/ButtonCircular.tsx +3 -0
  93. package/src/usecases/ButtonCustom.tsx +33 -0
  94. package/src/usecases/ButtonIconColor.tsx +18 -0
  95. package/src/usecases/ButtonInverse.tsx +30 -0
  96. package/src/usecases/ButtonUnstyled.tsx +31 -0
  97. package/src/usecases/CheckboxDisabledOnPress.tsx +62 -0
  98. package/src/usecases/ClickDuringEnterCase.tsx +59 -0
  99. package/src/usecases/CodeExamplesInput.tsx +9 -0
  100. package/src/usecases/ColorTokenFallback.tsx +52 -0
  101. package/src/usecases/CompilerExtraction.tsx +380 -0
  102. package/src/usecases/ComplexVariants.tsx +164 -0
  103. package/src/usecases/CrashAdaptSheet.tsx +98 -0
  104. package/src/usecases/CustomStyledAnimatedPopover.tsx +42 -0
  105. package/src/usecases/CustomStyledAnimatedTooltip.tsx +72 -0
  106. package/src/usecases/DOMNodeAPIs.tsx +154 -0
  107. package/src/usecases/DialogFocusScopeCase.tsx +277 -0
  108. package/src/usecases/DialogFocusScopeDebug.tsx +85 -0
  109. package/src/usecases/DialogNestedCase.tsx +121 -0
  110. package/src/usecases/DialogOpenControlled.tsx +49 -0
  111. package/src/usecases/DialogPointerEventsCase.tsx +58 -0
  112. package/src/usecases/DialogScopedCase.tsx +106 -0
  113. package/src/usecases/DialogSheetAdaptCase.tsx +178 -0
  114. package/src/usecases/DialogSheetAdaptResizeCase.tsx +98 -0
  115. package/src/usecases/DismissLayerStackingCase.tsx +223 -0
  116. package/src/usecases/DriverDisableAnimationPropsCase.tsx +44 -0
  117. package/src/usecases/Example.tsx +10 -0
  118. package/src/usecases/ExitCompletionCase.tsx +713 -0
  119. package/src/usecases/FocusVisibleButton.tsx +14 -0
  120. package/src/usecases/FocusVisibleButtonPointer.tsx +13 -0
  121. package/src/usecases/FocusVisibleButtonWithFocusStyle.tsx +16 -0
  122. package/src/usecases/FocusWithinCase.tsx +55 -0
  123. package/src/usecases/FontTokensInVariants.tsx +14 -0
  124. package/src/usecases/FormButtonTypeCase.tsx +34 -0
  125. package/src/usecases/GlobalScopedTriggerIsolationCase.tsx +178 -0
  126. package/src/usecases/GroupHoverMobile.tsx +39 -0
  127. package/src/usecases/GroupPressInVariant.tsx +92 -0
  128. package/src/usecases/GroupPressNative.tsx +200 -0
  129. package/src/usecases/GroupProp.tsx +96 -0
  130. package/src/usecases/GroupPseudoVariantOverride.tsx +56 -0
  131. package/src/usecases/GroupUseCases.tsx +94 -0
  132. package/src/usecases/HeightMediaQueryOverrideCase.tsx +183 -0
  133. package/src/usecases/InputAutoFocusAfterMenuCase.tsx +105 -0
  134. package/src/usecases/InputAutoFocusStyledCase.tsx +39 -0
  135. package/src/usecases/KeyboardControllerTest.tsx +146 -0
  136. package/src/usecases/ListItem.tsx +123 -0
  137. package/src/usecases/MediaQueriesV5.tsx +137 -0
  138. package/src/usecases/MediaQueryGtMd.tsx +73 -0
  139. package/src/usecases/MenuAboveDialogCase.tsx +75 -0
  140. package/src/usecases/MenuAccessibilityCase.tsx +133 -0
  141. package/src/usecases/MenuAnimatePositionCase.tsx +41 -0
  142. package/src/usecases/MenuArrowAnimatePresenceCase.tsx +98 -0
  143. package/src/usecases/MenuAsChildPositionCase.tsx +24 -0
  144. package/src/usecases/MenuAutoResizeCase.tsx +57 -0
  145. package/src/usecases/MenuBottomCase.tsx +55 -0
  146. package/src/usecases/MenuFocusLeaveCase.tsx +135 -0
  147. package/src/usecases/MenuHighlightCase.tsx +44 -0
  148. package/src/usecases/MenuItemFocusCase.tsx +79 -0
  149. package/src/usecases/MenuItemPseudoOverrideCase.tsx +270 -0
  150. package/src/usecases/MenuMultiTriggerCase.tsx +47 -0
  151. package/src/usecases/MenuOverflowCase.tsx +60 -0
  152. package/src/usecases/MenuSubCase.tsx +223 -0
  153. package/src/usecases/MenuSubLeftCase.tsx +178 -0
  154. package/src/usecases/MenuSubNestedPositionCase.tsx +171 -0
  155. package/src/usecases/MenuSubStyledCase.tsx +145 -0
  156. package/src/usecases/MenuThemeCase.tsx +50 -0
  157. package/src/usecases/MenuUnstyledCase.tsx +52 -0
  158. package/src/usecases/MultiDriverAnimation.tsx +118 -0
  159. package/src/usecases/NativePortalTest.tsx +179 -0
  160. package/src/usecases/NewInputBasic.tsx +16 -0
  161. package/src/usecases/NewInputEvents.tsx +29 -0
  162. package/src/usecases/NonGuiTextStyledType.tsx +23 -0
  163. package/src/usecases/OnLayoutCase.tsx +134 -0
  164. package/src/usecases/OnLayoutScaleCase.tsx +88 -0
  165. package/src/usecases/OnLayoutStressCase.tsx +353 -0
  166. package/src/usecases/OpacityModifierCase.tsx +113 -0
  167. package/src/usecases/OverlayStyled.tsx +66 -0
  168. package/src/usecases/ParagraphSpanFontInheritance.tsx +53 -0
  169. package/src/usecases/PlaceholderTextColor.tsx +20 -0
  170. package/src/usecases/PointerEventsCase.tsx +100 -0
  171. package/src/usecases/PopoverAndMenuMultiTriggerCase.tsx +138 -0
  172. package/src/usecases/PopoverCase.tsx +222 -0
  173. package/src/usecases/PopoverContentStyledPlusAnimations.tsx +44 -0
  174. package/src/usecases/PopoverFocusScopeCase.tsx +171 -0
  175. package/src/usecases/PopoverHoverableCase.tsx +167 -0
  176. package/src/usecases/PopoverHoverableDisableClickCase.tsx +118 -0
  177. package/src/usecases/PopoverHoverableRapidCase.tsx +103 -0
  178. package/src/usecases/PopoverHoverableScopedCase.tsx +135 -0
  179. package/src/usecases/PopoverScopedCase.tsx +76 -0
  180. package/src/usecases/PopoverTriggerIsolationCase.tsx +80 -0
  181. package/src/usecases/PressStyleNative.tsx +143 -0
  182. package/src/usecases/PseudoStyleMerge.tsx +25 -0
  183. package/src/usecases/PseudoTransitionCase.tsx +174 -0
  184. package/src/usecases/RawAnimatedValueCase.tsx +231 -0
  185. package/src/usecases/RemoveScrollCase.tsx +66 -0
  186. package/src/usecases/RenderPropCase.tsx +263 -0
  187. package/src/usecases/SafeAreaCase.tsx +236 -0
  188. package/src/usecases/ScrollViewRefCase.tsx +88 -0
  189. package/src/usecases/SecondPage.tsx +5 -0
  190. package/src/usecases/SelectAndroidOnPress.tsx +129 -0
  191. package/src/usecases/SelectFocusScopeCase.tsx +270 -0
  192. package/src/usecases/SelectRemount.tsx +136 -0
  193. package/src/usecases/Shadows.tsx +5 -0
  194. package/src/usecases/SheetAnimationCase.tsx +155 -0
  195. package/src/usecases/SheetDragCase.tsx +183 -0
  196. package/src/usecases/SheetDragResistCase.tsx +433 -0
  197. package/src/usecases/SheetDragResistCase.web.tsx +359 -0
  198. package/src/usecases/SheetKeyboardDragCase.tsx +328 -0
  199. package/src/usecases/SheetKeyboardFitContentCase.tsx +165 -0
  200. package/src/usecases/SheetOnAnimationCompleteCase.tsx +54 -0
  201. package/src/usecases/SheetScrollLockCase.tsx +166 -0
  202. package/src/usecases/SheetScrollableDrag.tsx +249 -0
  203. package/src/usecases/SheetSnapPointsFitCase.tsx +393 -0
  204. package/src/usecases/ShorthandVariables.tsx +49 -0
  205. package/src/usecases/SlowThemeReRender.tsx +48 -0
  206. package/src/usecases/SpinnerCustomColors.tsx +34 -0
  207. package/src/usecases/StackZIndex.tsx +82 -0
  208. package/src/usecases/StressPage.tsx +301 -0
  209. package/src/usecases/StylePlatform.tsx +30 -0
  210. package/src/usecases/StyleProp.tsx +29 -0
  211. package/src/usecases/StyledAnchor.tsx +27 -0
  212. package/src/usecases/StyledButtonAnimationAuto.tsx +99 -0
  213. package/src/usecases/StyledButtonTheme.tsx +63 -0
  214. package/src/usecases/StyledButtonVariantPseudo.tsx +25 -0
  215. package/src/usecases/StyledButtonVariantPseudoMerge.tsx +77 -0
  216. package/src/usecases/StyledCheckboxTheme.tsx +23 -0
  217. package/src/usecases/StyledContextColor.tsx +246 -0
  218. package/src/usecases/StyledContextTokens.tsx +147 -0
  219. package/src/usecases/StyledHOCNamed.tsx +20 -0
  220. package/src/usecases/StyledHtmlCase.tsx +144 -0
  221. package/src/usecases/StyledIconColor.tsx +19 -0
  222. package/src/usecases/StyledInputFocusStyle.tsx +21 -0
  223. package/src/usecases/StyledInputOnFocus.tsx +30 -0
  224. package/src/usecases/StyledMediaQueryMerge.tsx +95 -0
  225. package/src/usecases/StyledOverridePsuedo.tsx +26 -0
  226. package/src/usecases/StyledRNW.tsx +61 -0
  227. package/src/usecases/StyledStyleableInputOnFocus.tsx +34 -0
  228. package/src/usecases/StyledStyleableInputVariant.tsx +48 -0
  229. package/src/usecases/StyledStyledStyleableInputOnFocus.tsx +36 -0
  230. package/src/usecases/StyledVariantTextColor.tsx +25 -0
  231. package/src/usecases/StyledViewOnFocus.tsx +32 -0
  232. package/src/usecases/TabHoverAnimationCase.tsx +212 -0
  233. package/src/usecases/TextNestedInheritance.tsx +80 -0
  234. package/src/usecases/ThemeChange.tsx +100 -0
  235. package/src/usecases/ThemeChangeBasic.tsx +52 -0
  236. package/src/usecases/ThemeComponentResolution.tsx +119 -0
  237. package/src/usecases/ThemeConditionalName.tsx +31 -0
  238. package/src/usecases/ThemeMediaAnimationCase.tsx +39 -0
  239. package/src/usecases/ThemeMutation.tsx +86 -0
  240. package/src/usecases/ThemeNested.tsx +103 -0
  241. package/src/usecases/ThemeReset.tsx +62 -0
  242. package/src/usecases/ThemeShallowCase.tsx +83 -0
  243. package/src/usecases/ToastCase.tsx +46 -0
  244. package/src/usecases/ToggleGroupActiveProps.tsx +40 -0
  245. package/src/usecases/ToggleGroupXGroupCase.tsx +104 -0
  246. package/src/usecases/TooltipAnimationCase.tsx +99 -0
  247. package/src/usecases/TooltipCase.tsx +32 -0
  248. package/src/usecases/TooltipGlobalPatternCase.tsx +83 -0
  249. package/src/usecases/TooltipGroupCase.tsx +102 -0
  250. package/src/usecases/TooltipMultiTriggerCase.tsx +88 -0
  251. package/src/usecases/TooltipPositionJumpCase.tsx +91 -0
  252. package/src/usecases/TooltipTriggerInlineCase.tsx +60 -0
  253. package/src/usecases/TransformMediaQueryMerge.tsx +98 -0
  254. package/src/usecases/UseCases.tsx +409 -0
  255. package/src/usecases/UseTheme.tsx +41 -0
  256. package/src/usecases/V5ThemeBuilderOutput.tsx +231 -0
  257. package/src/usecases/VariantFontFamily.tsx +25 -0
  258. package/src/usecases/VariantsOrder.tsx +117 -0
  259. package/src/usecases/ZIndex.tsx +155 -0
  260. package/src/usecases/helpers.tsx +44 -0
  261. package/src/usecases/index.native.ts +122 -0
  262. package/src/usecases/index.ts +3 -0
  263. package/src/usecases/index.web.ts +177 -0
  264. package/tests/AnimatePresenceEnterExit.animated.test.tsx +176 -0
  265. package/tests/AnimatedByProp.animated.test.tsx +138 -0
  266. package/tests/AnimationBehavior.animated.test.tsx +543 -0
  267. package/tests/AnimationTiming.animated.test.tsx +195 -0
  268. package/tests/AnimationsWithMediaQueries.animated.test.tsx +154 -0
  269. package/tests/BuildAButton.test.tsx +87 -0
  270. package/tests/ButtonCircular.test.tsx +17 -0
  271. package/tests/ButtonCustom.test.tsx +17 -0
  272. package/tests/ButtonIconColor.test.tsx +23 -0
  273. package/tests/ButtonUnstyled.test.tsx +56 -0
  274. package/tests/ClickDuringEnter.animated.test.tsx +174 -0
  275. package/tests/ColorTokenFallback.test.tsx +45 -0
  276. package/tests/DOMNodeAPIs.test.tsx +161 -0
  277. package/tests/DialogFocusScope.animated.test.tsx +309 -0
  278. package/tests/DialogNested.test.tsx +128 -0
  279. package/tests/DialogOpenControlled.test.tsx +42 -0
  280. package/tests/DialogPointerEvents.animated.test.tsx +108 -0
  281. package/tests/DialogScoped.test.tsx +137 -0
  282. package/tests/DialogSheetAdapt.test.tsx +68 -0
  283. package/tests/DialogSheetAdaptResize.test.tsx +161 -0
  284. package/tests/DismissLayerStacking.test.tsx +292 -0
  285. package/tests/DriverDisableAnimationProps.animated.test.tsx +157 -0
  286. package/tests/ExitCompletion.animated.test.tsx +425 -0
  287. package/tests/ExitTimingCheck.animated.test.ts +34 -0
  288. package/tests/FocusVisibleButton.test.tsx +41 -0
  289. package/tests/FocusVisibleButtonPointerFocus.test.tsx +23 -0
  290. package/tests/FocusVisibleButtonPointerFocusWithFocusStyle.test.tsx +40 -0
  291. package/tests/FocusWithinStyle.animated.test.tsx +66 -0
  292. package/tests/FocusWithinStyle.test.tsx +60 -0
  293. package/tests/FormButtonType.test.tsx +42 -0
  294. package/tests/GlobalScopedTriggerIsolation.test.tsx +89 -0
  295. package/tests/GroupHoverMobile.test.tsx +52 -0
  296. package/tests/GroupPressInVariant.test.tsx +82 -0
  297. package/tests/GroupProp.test.tsx +30 -0
  298. package/tests/GroupPseudoVariantOverride.test.tsx +57 -0
  299. package/tests/GroupUseCases.test.tsx +111 -0
  300. package/tests/GuiSiteMotion.test.ts +481 -0
  301. package/tests/HeightMediaQueryOverride.test.tsx +112 -0
  302. package/tests/InputAutoFocusAfterMenu.test.tsx +55 -0
  303. package/tests/InputAutoFocusStyled.test.tsx +22 -0
  304. package/tests/ListItem.test.tsx +129 -0
  305. package/tests/MediaQueriesV5.test.tsx +113 -0
  306. package/tests/MediaQueryGtMd.test.tsx +84 -0
  307. package/tests/MenuAboveDialog.test.tsx +108 -0
  308. package/tests/MenuAccessibility.test.tsx +346 -0
  309. package/tests/MenuAnimatePosition.animated.test.tsx +57 -0
  310. package/tests/MenuArrowAnimatePresence.animated.test.tsx +71 -0
  311. package/tests/MenuAsChildPosition.test.tsx +16 -0
  312. package/tests/MenuAutoResize.test.tsx +54 -0
  313. package/tests/MenuFocusLeave.test.tsx +181 -0
  314. package/tests/MenuHighlight.test.tsx +165 -0
  315. package/tests/MenuHoverKeyboardBugs.test.tsx +252 -0
  316. package/tests/MenuItemFocus.test.tsx +59 -0
  317. package/tests/MenuItemPseudoOverride.test.tsx +231 -0
  318. package/tests/MenuMultiTrigger.test.tsx +101 -0
  319. package/tests/MenuOverflow.test.tsx +93 -0
  320. package/tests/MenuStayInFrame.test.tsx +102 -0
  321. package/tests/MenuSubKeyboardFocus.test.tsx +220 -0
  322. package/tests/MenuSubLeftSafePolygon.test.tsx +88 -0
  323. package/tests/MenuSubNestedPosition.test.tsx +48 -0
  324. package/tests/MenuSubSafePolygon.test.tsx +97 -0
  325. package/tests/MenuSubStyled.test.tsx +40 -0
  326. package/tests/MenuTheme.test.tsx +34 -0
  327. package/tests/MenuUnstyled.test.tsx +56 -0
  328. package/tests/MultiDriverAnimation.test.tsx +207 -0
  329. package/tests/NewInputBasic.test.tsx +50 -0
  330. package/tests/NewInputEvents.test.tsx +55 -0
  331. package/tests/OnLayout.test.tsx +163 -0
  332. package/tests/OnLayoutScale.test.tsx +100 -0
  333. package/tests/OnLayoutStress.test.tsx +304 -0
  334. package/tests/ParagraphSpanFontInheritance.test.tsx +73 -0
  335. package/tests/PointerEvents.test.tsx +123 -0
  336. package/tests/Popover.animated.test.tsx +234 -0
  337. package/tests/PopoverAndMenuMultiTrigger.test.tsx +184 -0
  338. package/tests/PopoverAnimatePosition.animated.test.tsx +51 -0
  339. package/tests/PopoverClickDuringEnter.animated.test.tsx +197 -0
  340. package/tests/PopoverFocusScope.test.tsx +242 -0
  341. package/tests/PopoverHoverable.test.tsx +383 -0
  342. package/tests/PopoverHoverableDisableClick.test.tsx +106 -0
  343. package/tests/PopoverHoverableRapid.test.tsx +129 -0
  344. package/tests/PopoverHoverableReposition.test.tsx +111 -0
  345. package/tests/PopoverHoverableScoped.animated.test.tsx +103 -0
  346. package/tests/PopoverHoverableStress.test.tsx +169 -0
  347. package/tests/PopoverInitialPosition.animated.test.tsx +82 -0
  348. package/tests/PopoverMiddlewareSkipRegression.animated.test.tsx +221 -0
  349. package/tests/PopoverScoped.test.tsx +128 -0
  350. package/tests/PopoverScopedPositionGlitch.animated.test.tsx +184 -0
  351. package/tests/PopoverTriggerIsolation.test.tsx +62 -0
  352. package/tests/PseudoTransition.animated.test.tsx +319 -0
  353. package/tests/RawAnimatedValue.test.tsx +147 -0
  354. package/tests/RemoveScroll.test.tsx +223 -0
  355. package/tests/RenderProp.test.tsx +293 -0
  356. package/tests/ScrollViewRef.test.tsx +39 -0
  357. package/tests/SelectClickHold.test.tsx +147 -0
  358. package/tests/SelectFocusScope.test.tsx +176 -0
  359. package/tests/SelectInnerPositioning.test.tsx +82 -0
  360. package/tests/SelectKeyboardNav.test.tsx +173 -0
  361. package/tests/SelectPositioning.test.tsx +56 -0
  362. package/tests/SelectTypeahead.test.tsx +63 -0
  363. package/tests/Shadows.test.tsx +14 -0
  364. package/tests/SheetAnimation.animated.test.tsx +413 -0
  365. package/tests/SheetDrag.animated.test.tsx +223 -0
  366. package/tests/SheetDragResist.animated.test.tsx +393 -0
  367. package/tests/SheetOnAnimationComplete.animated.test.tsx +62 -0
  368. package/tests/SheetScrollLock.animated.test.tsx +287 -0
  369. package/tests/SheetScrollableDrag.animated.test.tsx +1264 -0
  370. package/tests/SheetSnapPointsFit.animated.test.tsx +259 -0
  371. package/tests/ShorthandVariables.test.tsx +44 -0
  372. package/tests/SpinnerCustomColors.test.tsx +67 -0
  373. package/tests/StackZIndex.test.tsx +51 -0
  374. package/tests/StressPagePerf.test.tsx +76 -0
  375. package/tests/StylePlatform.test.tsx +38 -0
  376. package/tests/StyleProp.test.tsx +20 -0
  377. package/tests/StyledAnchor.test.tsx +17 -0
  378. package/tests/StyledButtonTheme.test.tsx +22 -0
  379. package/tests/StyledButtonVariantPseudo.test.tsx +20 -0
  380. package/tests/StyledButtonVariantPseudoMerge.animated.test.tsx +33 -0
  381. package/tests/StyledCheckboxTheme.test.tsx +16 -0
  382. package/tests/StyledContextColor.test.tsx +119 -0
  383. package/tests/StyledContextTokens.test.tsx +56 -0
  384. package/tests/StyledHOCNamed.test.tsx +16 -0
  385. package/tests/StyledHtml.test.tsx +161 -0
  386. package/tests/StyledIconColor.test.tsx +32 -0
  387. package/tests/StyledInputFocusStyle.test.tsx +19 -0
  388. package/tests/StyledInputOnFocus.test.tsx +27 -0
  389. package/tests/StyledMediaQueryMerge.test.tsx +66 -0
  390. package/tests/StyledRNW.test.tsx +17 -0
  391. package/tests/StyledStyleableInputOnFocus.test.tsx +27 -0
  392. package/tests/StyledStyleableInputVariant.test.tsx +22 -0
  393. package/tests/StyledStyledStyleableInputOnFocus.test.tsx +27 -0
  394. package/tests/StyledVariantTextColor.test.tsx +24 -0
  395. package/tests/StyledViewOnFocus.test.tsx +27 -0
  396. package/tests/TabHoverAnimation.animated.test.tsx +468 -0
  397. package/tests/TabHoverPositionSmooth.animated.test.tsx +129 -0
  398. package/tests/TextNestedInheritance.test.tsx +93 -0
  399. package/tests/ThemeChange.test.tsx +70 -0
  400. package/tests/ThemeComponentResolution.test.tsx +82 -0
  401. package/tests/ThemeConditionalName.test.tsx +34 -0
  402. package/tests/ThemeMediaAnimation.test.tsx +65 -0
  403. package/tests/ThemeNested.test.tsx +141 -0
  404. package/tests/ThemeReset.test.tsx +63 -0
  405. package/tests/ThemeShallow.test.tsx +95 -0
  406. package/tests/Toast.test.tsx +106 -0
  407. package/tests/ToggleGroup.test.tsx +61 -0
  408. package/tests/ToggleGroupActiveProps.test.tsx +38 -0
  409. package/tests/ToggleGroupXGroup.test.tsx +172 -0
  410. package/tests/TooltipAnimation.animated.test.tsx +260 -0
  411. package/tests/TooltipEnterInterrupt.animated.test.tsx +76 -0
  412. package/tests/TooltipGlobalPattern.animated.test.tsx +208 -0
  413. package/tests/TooltipGroup.animated.test.tsx +79 -0
  414. package/tests/TooltipMultiTrigger.test.tsx +116 -0
  415. package/tests/TooltipPositionJump.animated.test.tsx +229 -0
  416. package/tests/TooltipPositionJumpNotes.md +219 -0
  417. package/tests/TooltipRapidSwitch.animated.test.tsx +399 -0
  418. package/tests/TooltipTriggerInline.test.tsx +65 -0
  419. package/tests/TransformMediaQueryMerge.test.tsx +104 -0
  420. package/tests/TransitionEnterExit.animated.test.tsx +311 -0
  421. package/tests/UseTheme.test.tsx +16 -0
  422. package/tests/V5ThemeBuilderOutput.test.tsx +164 -0
  423. package/tests/VariantFontFamily.test.tsx +11 -0
  424. package/tests/VariantsOrder.test.tsx +53 -0
  425. package/tests/_debug_position.mjs +52 -0
  426. package/tests/test-utils.ts +106 -0
  427. package/tests/utils.tsx +54 -0
  428. package/tsconfig.json +45 -0
  429. package/vite-env.d.ts +1 -0
  430. package/vite.config.ts +14 -0
  431. package/webpack.config.js +139 -0
@@ -0,0 +1,41 @@
1
+ import { Menu } from '@hanzogui/menu'
2
+ import { Button, Text, XStack, YStack } from '@hanzo/gui'
3
+
4
+ export function MenuAnimatePositionCase() {
5
+ return (
6
+ <YStack padding="$4" gap="$4">
7
+ <Text>Test: animatePosition — content should animate between triggers</Text>
8
+
9
+ <Menu placement="bottom-start">
10
+ <XStack gap="$8">
11
+ <Menu.Trigger asChild>
12
+ <Button data-testid="trigger-left">Left Trigger</Button>
13
+ </Menu.Trigger>
14
+
15
+ <Menu.Trigger asChild>
16
+ <Button data-testid="trigger-right">Right Trigger</Button>
17
+ </Menu.Trigger>
18
+ </XStack>
19
+
20
+ <Menu.Portal>
21
+ <Menu.Content
22
+ data-testid="menu-content"
23
+ animatePosition
24
+ p="$2"
25
+ minWidth={180}
26
+ borderWidth={1}
27
+ borderColor="$borderColor"
28
+ elevation="$3"
29
+ >
30
+ <Menu.Item data-testid="menu-item-1" key="i1" textValue="Alpha">
31
+ <Menu.ItemTitle>Alpha</Menu.ItemTitle>
32
+ </Menu.Item>
33
+ <Menu.Item data-testid="menu-item-2" key="i2" textValue="Beta">
34
+ <Menu.ItemTitle>Beta</Menu.ItemTitle>
35
+ </Menu.Item>
36
+ </Menu.Content>
37
+ </Menu.Portal>
38
+ </Menu>
39
+ </YStack>
40
+ )
41
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Test case for Menu arrow visibility with AnimatePresence
3
+ * Issue: Arrow has opacity: 0 applied with Motion driver when wrapped in AnimatePresence
4
+ * Works with CSS driver but not Motion driver
5
+ */
6
+ import { Menu } from '@hanzogui/menu'
7
+ import { AnimatePresence, Button, Paragraph, Popover, YStack } from '@hanzo/gui'
8
+
9
+ // Reproduce the pattern from ~/chat where arrow is wrapped in AnimatePresence
10
+ const PopoverWithAnimatePresenceArrow = () => {
11
+ return (
12
+ <Popover offset={10}>
13
+ <Popover.Trigger asChild>
14
+ <Button testID="popover-trigger">Open Popover</Button>
15
+ </Popover.Trigger>
16
+
17
+ <Popover.Content
18
+ enterStyle={{ y: -4, opacity: 0 }}
19
+ exitStyle={{ y: 6, opacity: 0 }}
20
+ transition="100ms"
21
+ bg="$background"
22
+ p="$4"
23
+ borderWidth={1}
24
+ borderColor="$borderColor"
25
+ borderRadius="$4"
26
+ >
27
+ {/* This pattern causes the arrow to have opacity: 0 with Motion driver */}
28
+ <AnimatePresence>
29
+ <Popover.Arrow
30
+ testID="popover-arrow"
31
+ size="$4"
32
+ borderWidth={1}
33
+ borderColor="$borderColor"
34
+ bg="$background"
35
+ />
36
+ </AnimatePresence>
37
+ <YStack gap="$2">
38
+ <Button size="$2">Item 1</Button>
39
+ <Button size="$2">Item 2</Button>
40
+ </YStack>
41
+ </Popover.Content>
42
+ </Popover>
43
+ )
44
+ }
45
+
46
+ // Menu with arrow (no AnimatePresence - should work)
47
+ const MenuWithArrow = () => {
48
+ return (
49
+ <Menu offset={10}>
50
+ <Menu.Trigger asChild>
51
+ <Button testID="menu-trigger">Open Menu</Button>
52
+ </Menu.Trigger>
53
+
54
+ <Menu.Portal>
55
+ <Menu.Content
56
+ testID="menu-content"
57
+ enterStyle={{ scale: 0.9, opacity: 0, y: -5 }}
58
+ exitStyle={{ scale: 0.95, opacity: 0, y: -3 }}
59
+ transition="100ms"
60
+ borderRadius="$4"
61
+ >
62
+ <Menu.Arrow
63
+ testID="menu-arrow"
64
+ size="$4"
65
+ borderWidth={1}
66
+ borderColor="$borderColor"
67
+ />
68
+ <Menu.Item key="item1">
69
+ <Menu.ItemTitle>Item 1</Menu.ItemTitle>
70
+ </Menu.Item>
71
+ <Menu.Item key="item2">
72
+ <Menu.ItemTitle>Item 2</Menu.ItemTitle>
73
+ </Menu.Item>
74
+ </Menu.Content>
75
+ </Menu.Portal>
76
+ </Menu>
77
+ )
78
+ }
79
+
80
+ export function MenuArrowAnimatePresenceCase() {
81
+ return (
82
+ <YStack gap="$4" padding="$4" alignItems="center" justifyContent="center" flex={1}>
83
+ <YStack gap="$2" alignItems="center">
84
+ <MenuWithArrow />
85
+ <Paragraph opacity={0.5} size="$2">
86
+ Menu with Arrow (no AnimatePresence)
87
+ </Paragraph>
88
+ </YStack>
89
+
90
+ <YStack gap="$2" alignItems="center">
91
+ <PopoverWithAnimatePresenceArrow />
92
+ <Paragraph opacity={0.5} size="$2">
93
+ Popover with Arrow in AnimatePresence
94
+ </Paragraph>
95
+ </YStack>
96
+ </YStack>
97
+ )
98
+ }
@@ -0,0 +1,24 @@
1
+ import { Menu } from '@hanzogui/menu'
2
+ import { Button, YStack } from '@hanzo/gui'
3
+
4
+ export function MenuAsChildPositionCase() {
5
+ return (
6
+ <YStack padding="$4" gap="$4">
7
+ <Menu placement="bottom-start">
8
+ <Menu.Trigger asChild>
9
+ <Button data-testid="menu-trigger-button">Open Menu</Button>
10
+ </Menu.Trigger>
11
+
12
+ <Menu.Portal>
13
+ <Menu.Content>
14
+ <Menu.Item key="item-1" textValue="Item 1">
15
+ <Menu.ItemTitle>Item 1</Menu.ItemTitle>
16
+ </Menu.Item>
17
+ </Menu.Content>
18
+ </Menu.Portal>
19
+ </Menu>
20
+
21
+ <Button data-testid="reference-button">Reference Button</Button>
22
+ </YStack>
23
+ )
24
+ }
@@ -0,0 +1,57 @@
1
+ import { Menu } from '@hanzogui/menu'
2
+ import { Button, YStack } from '@hanzo/gui'
3
+
4
+ /**
5
+ * Menu auto-resize test case
6
+ * Tests that menus automatically resize to fit within tight viewport spaces
7
+ * The menu should constrain its height to available space and become scrollable
8
+ */
9
+
10
+ const ITEM_COUNT = 20
11
+
12
+ export function MenuAutoResizeCase() {
13
+ return (
14
+ <YStack
15
+ data-testid="container"
16
+ $platform-web={{
17
+ height: '100vh',
18
+ }}
19
+ justifyContent="center"
20
+ alignItems="center"
21
+ padding="$4"
22
+ >
23
+ <Menu placement="bottom-start">
24
+ <Menu.Trigger asChild>
25
+ <Button data-testid="menu-trigger" size="$4">
26
+ Open Menu
27
+ </Button>
28
+ </Menu.Trigger>
29
+
30
+ <Menu.Portal zIndex={100}>
31
+ <Menu.Content
32
+ data-testid="menu-content"
33
+ minWidth={200}
34
+ borderWidth={1}
35
+ borderColor="$borderColor"
36
+ elevation="$3"
37
+ padding="$2"
38
+ >
39
+ <Menu.ScrollView data-testid="menu-scroll-view">
40
+ {Array.from({ length: ITEM_COUNT }).map((_, i) => (
41
+ <Menu.Item
42
+ data-testid={`menu-item-${i + 1}`}
43
+ key={`item-${i}`}
44
+ textValue={`Item ${i + 1}`}
45
+ style={{ paddingHorizontal: 8, paddingVertical: 6, borderRadius: 4 }}
46
+ focusStyle={{ backgroundColor: '$backgroundHover' }}
47
+ >
48
+ <Menu.ItemTitle>Item {i + 1}</Menu.ItemTitle>
49
+ </Menu.Item>
50
+ ))}
51
+ </Menu.ScrollView>
52
+ </Menu.Content>
53
+ </Menu.Portal>
54
+ </Menu>
55
+ </YStack>
56
+ )
57
+ }
@@ -0,0 +1,55 @@
1
+ import { Menu } from '@hanzogui/menu'
2
+ import { Button, YStack } from '@hanzo/gui'
3
+
4
+ /**
5
+ * Menu bottom placement test - menu opens below trigger and stays there
6
+ */
7
+
8
+ const ITEM_COUNT = 20
9
+
10
+ export function MenuBottomCase() {
11
+ return (
12
+ <YStack
13
+ data-testid="container"
14
+ $platform-web={{
15
+ height: '100vh',
16
+ }}
17
+ justifyContent="flex-start"
18
+ alignItems="center"
19
+ paddingTop="$8"
20
+ >
21
+ <Menu placement="bottom-start" stayInFrame allowFlip={false}>
22
+ <Menu.Trigger asChild>
23
+ <Button data-testid="menu-trigger" size="$4">
24
+ Open Menu Below
25
+ </Button>
26
+ </Menu.Trigger>
27
+
28
+ <Menu.Portal zIndex={100}>
29
+ <Menu.Content
30
+ data-testid="menu-content"
31
+ minWidth={200}
32
+ borderWidth={1}
33
+ borderColor="$borderColor"
34
+ elevation="$3"
35
+ padding="$2"
36
+ >
37
+ <Menu.ScrollView data-testid="menu-scroll-view">
38
+ {Array.from({ length: ITEM_COUNT }).map((_, i) => (
39
+ <Menu.Item
40
+ data-testid={`menu-item-${i + 1}`}
41
+ key={`item-${i}`}
42
+ textValue={`Item ${i + 1}`}
43
+ style={{ paddingHorizontal: 8, paddingVertical: 6, borderRadius: 4 }}
44
+ focusStyle={{ backgroundColor: '$backgroundHover' }}
45
+ >
46
+ <Menu.ItemTitle>Item {i + 1}</Menu.ItemTitle>
47
+ </Menu.Item>
48
+ ))}
49
+ </Menu.ScrollView>
50
+ </Menu.Content>
51
+ </Menu.Portal>
52
+ </Menu>
53
+ </YStack>
54
+ )
55
+ }
@@ -0,0 +1,135 @@
1
+ import { ChevronRight } from '@hanzogui/lucide-icons-2'
2
+ import { Menu } from '@hanzogui/menu'
3
+ import React from 'react'
4
+ import { Button, Text, YStack } from '@hanzo/gui'
5
+
6
+ /**
7
+ * Test case for menu focus leave behavior
8
+ *
9
+ * Bug 1: When leaving the menu entirely, focus style stays on last element
10
+ * Bug 2: Two items can appear focused when moving quickly from submenu trigger
11
+ */
12
+ export function MenuFocusLeaveCase() {
13
+ const [subMenuOpen, setSubMenuOpen] = React.useState(false)
14
+
15
+ return (
16
+ <YStack padding="$4" gap="$4" alignItems="flex-start">
17
+ <Text>Test: focus should clear when leaving menu entirely</Text>
18
+
19
+ <Menu placement="bottom-start">
20
+ <Menu.Trigger asChild>
21
+ <Button data-testid="menu-trigger">Open Menu</Button>
22
+ </Menu.Trigger>
23
+
24
+ <Menu.Portal zIndex={100}>
25
+ <Menu.Content
26
+ data-testid="menu-content"
27
+ p="$2"
28
+ minWidth={220}
29
+ borderWidth={1}
30
+ borderColor="$borderColor"
31
+ elevation="$3"
32
+ >
33
+ <Menu.Item data-testid="menu-item-1" key="item-1" textValue="Item One">
34
+ <Menu.ItemTitle>Item One</Menu.ItemTitle>
35
+ </Menu.Item>
36
+
37
+ <Menu.Sub
38
+ open={subMenuOpen}
39
+ placement="right-start"
40
+ onOpenChange={setSubMenuOpen}
41
+ >
42
+ <Menu.SubTrigger
43
+ data-testid="submenu-trigger-1"
44
+ key="submenu-trigger-1"
45
+ justify="space-between"
46
+ textValue="More Options"
47
+ >
48
+ <Menu.ItemTitle>More Options (submenu 1)</Menu.ItemTitle>
49
+ <ChevronRight size={14} color="$color10" />
50
+ </Menu.SubTrigger>
51
+
52
+ <Menu.Portal zIndex={200}>
53
+ <Menu.SubContent
54
+ data-testid="submenu-content-1"
55
+ bg="$background"
56
+ p="$2"
57
+ minWidth={180}
58
+ borderWidth={1}
59
+ borderColor="$borderColor"
60
+ elevation="$3"
61
+ >
62
+ <Menu.Item
63
+ data-testid="submenu-1-item-1"
64
+ key="sub1item-1"
65
+ textValue="Sub Item 1"
66
+ >
67
+ <Menu.ItemTitle>Sub Item 1</Menu.ItemTitle>
68
+ </Menu.Item>
69
+ <Menu.Item
70
+ data-testid="submenu-1-item-2"
71
+ key="sub1item-2"
72
+ textValue="Sub Item 2"
73
+ >
74
+ <Menu.ItemTitle>Sub Item 2</Menu.ItemTitle>
75
+ </Menu.Item>
76
+ </Menu.SubContent>
77
+ </Menu.Portal>
78
+ </Menu.Sub>
79
+
80
+ {/* Second submenu trigger right below the first one - this is the bug scenario */}
81
+ <Menu.Sub placement="right-start">
82
+ <Menu.SubTrigger
83
+ data-testid="submenu-trigger-2"
84
+ key="submenu-trigger-2"
85
+ justify="space-between"
86
+ textValue="Another Submenu"
87
+ >
88
+ <Menu.ItemTitle>Another Submenu (submenu 2)</Menu.ItemTitle>
89
+ <ChevronRight size={14} color="$color10" />
90
+ </Menu.SubTrigger>
91
+
92
+ <Menu.Portal zIndex={200}>
93
+ <Menu.SubContent
94
+ data-testid="submenu-content-2"
95
+ bg="$background"
96
+ p="$2"
97
+ minWidth={180}
98
+ borderWidth={1}
99
+ borderColor="$borderColor"
100
+ elevation="$3"
101
+ >
102
+ <Menu.Item
103
+ data-testid="submenu-2-item-1"
104
+ key="sub2item-1"
105
+ textValue="Sub 2 Item 1"
106
+ >
107
+ <Menu.ItemTitle>Sub 2 Item 1</Menu.ItemTitle>
108
+ </Menu.Item>
109
+ </Menu.SubContent>
110
+ </Menu.Portal>
111
+ </Menu.Sub>
112
+
113
+ <Menu.Item data-testid="menu-item-3" key="item-3" textValue="Item Three">
114
+ <Menu.ItemTitle>Item Three (below submenus)</Menu.ItemTitle>
115
+ </Menu.Item>
116
+
117
+ <Menu.Item data-testid="menu-item-4" key="item-4" textValue="Item Four">
118
+ <Menu.ItemTitle>Item Four</Menu.ItemTitle>
119
+ </Menu.Item>
120
+ </Menu.Content>
121
+ </Menu.Portal>
122
+ </Menu>
123
+
124
+ {/* Area to move mouse to when leaving menu */}
125
+ <YStack
126
+ data-testid="outside-area"
127
+ padding="$4"
128
+ backgroundColor="$backgroundHover"
129
+ marginTop="$8"
130
+ >
131
+ <Text>Move mouse here to leave menu</Text>
132
+ </YStack>
133
+ </YStack>
134
+ )
135
+ }
@@ -0,0 +1,44 @@
1
+ import { Menu } from '@hanzogui/menu'
2
+ import { Button, YStack, Text } from '@hanzo/gui'
3
+
4
+ /**
5
+ * Menu highlight test case
6
+ * Tests that hover and keyboard focus show unified highlighting
7
+ * without conflicts (double highlighting when switching between mouse/keyboard)
8
+ */
9
+ export function MenuHighlightCase() {
10
+ return (
11
+ <YStack padding="$4" gap="$4" alignItems="flex-start">
12
+ <Text>Test: hover and keyboard navigation should show same highlight</Text>
13
+
14
+ <Menu placement="bottom-start">
15
+ <Menu.Trigger asChild>
16
+ <Button data-testid="menu-trigger">Open Menu</Button>
17
+ </Menu.Trigger>
18
+
19
+ <Menu.Portal zIndex={100}>
20
+ <Menu.Content
21
+ data-testid="menu-content"
22
+ p="$2"
23
+ minWidth={200}
24
+ borderWidth={1}
25
+ borderColor="$borderColor"
26
+ elevation="$3"
27
+ >
28
+ <Menu.Item data-testid="menu-item-1" key="item-1" textValue="Item One">
29
+ <Menu.ItemTitle>Item One</Menu.ItemTitle>
30
+ </Menu.Item>
31
+
32
+ <Menu.Item data-testid="menu-item-2" key="item-2" textValue="Item Two">
33
+ <Menu.ItemTitle>Item Two</Menu.ItemTitle>
34
+ </Menu.Item>
35
+
36
+ <Menu.Item data-testid="menu-item-3" key="item-3" textValue="Item Three">
37
+ <Menu.ItemTitle>Item Three</Menu.ItemTitle>
38
+ </Menu.Item>
39
+ </Menu.Content>
40
+ </Menu.Portal>
41
+ </Menu>
42
+ </YStack>
43
+ )
44
+ }
@@ -0,0 +1,79 @@
1
+ import { Menu } from '@hanzogui/menu'
2
+ import React from 'react'
3
+ import { Button, Input, YStack } from '@hanzo/gui'
4
+
5
+ /**
6
+ * Menu item focus preservation test case
7
+ * Tests that when a menu item's onPress focuses another element,
8
+ * that element keeps focus instead of returning to the trigger
9
+ */
10
+
11
+ export function MenuItemFocusCase() {
12
+ const inputRef = React.useRef<HTMLInputElement>(null!)
13
+ const [showInput, setShowInput] = React.useState(false)
14
+
15
+ return (
16
+ <YStack padding="$4" gap="$4">
17
+ <Menu placement="bottom-start">
18
+ <Menu.Trigger asChild>
19
+ <Button data-testid="menu-trigger" size="$4">
20
+ Open Menu
21
+ </Button>
22
+ </Menu.Trigger>
23
+
24
+ <Menu.Portal zIndex={100}>
25
+ <Menu.Content
26
+ data-testid="menu-content"
27
+ p="$2"
28
+ minW={200}
29
+ borderWidth={1}
30
+ borderColor="$borderColor"
31
+ elevation="$3"
32
+ >
33
+ <Menu.Item
34
+ data-testid="focus-input-item"
35
+ key="focus-input"
36
+ textValue="Focus Input"
37
+ style={{ paddingHorizontal: 8, paddingVertical: 6, borderRadius: 4 }}
38
+ focusStyle={{ bg: '$backgroundHover' }}
39
+ onPress={() => {
40
+ // show input - the autoFocus should handle focusing
41
+ setShowInput(true)
42
+ }}
43
+ >
44
+ <Menu.ItemTitle>Focus Input</Menu.ItemTitle>
45
+ </Menu.Item>
46
+
47
+ <Menu.Item
48
+ data-testid="focus-existing-item"
49
+ key="focus-existing"
50
+ textValue="Focus Existing"
51
+ style={{ paddingHorizontal: 8, paddingVertical: 6, borderRadius: 4 }}
52
+ focusStyle={{ bg: '$backgroundHover' }}
53
+ onPress={() => {
54
+ // focus the already-visible input
55
+ const input = document.querySelector(
56
+ '[data-testid="always-visible-input"]'
57
+ ) as HTMLInputElement
58
+ input?.focus()
59
+ }}
60
+ >
61
+ <Menu.ItemTitle>Focus Existing Input</Menu.ItemTitle>
62
+ </Menu.Item>
63
+ </Menu.Content>
64
+ </Menu.Portal>
65
+ </Menu>
66
+
67
+ {showInput && (
68
+ <Input
69
+ ref={inputRef as any}
70
+ data-testid="dynamic-input"
71
+ placeholder="I should be focused"
72
+ autoFocus
73
+ />
74
+ )}
75
+
76
+ <Input data-testid="always-visible-input" placeholder="Always visible input" />
77
+ </YStack>
78
+ )
79
+ }