@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,57 @@
1
+ /**
2
+ * Test for $safeAreaTop, $safeAreaBottom, $safeAreaLeft, $safeAreaRight tokens
3
+ * Verifies that safe area tokens resolve and render correctly on native
4
+ */
5
+
6
+ import { by, device, element, expect } from 'detox'
7
+ import { navigateToTestCase } from './utils/navigation'
8
+
9
+ // SafeAreaCase component is not implemented yet (entirely commented out)
10
+ // TODO: enable once SafeAreaCase is implemented
11
+ describe.skip('SafeArea', () => {
12
+ beforeAll(async () => {
13
+ await device.launchApp({ newInstance: true })
14
+ })
15
+
16
+ beforeEach(async () => {
17
+ await device.reloadReactNative()
18
+ await navigateToTestCase('SafeAreaCase', 'safe-area-case')
19
+ })
20
+
21
+ it('should navigate to SafeAreaCase test case', async () => {
22
+ await expect(element(by.id('safe-area-case'))).toBeVisible()
23
+ })
24
+
25
+ it('should render paddingTop with $safeAreaTop token', async () => {
26
+ await expect(element(by.id('token-padding-top'))).toBeVisible()
27
+ })
28
+
29
+ it('should render paddingBottom with $safeAreaBottom token', async () => {
30
+ await expect(element(by.id('token-padding-bottom'))).toBeVisible()
31
+ })
32
+
33
+ it('should render marginLeft with $safeAreaLeft token', async () => {
34
+ await expect(element(by.id('token-margin-left'))).toBeVisible()
35
+ })
36
+
37
+ it('should render marginRight with $safeAreaRight token', async () => {
38
+ await expect(element(by.id('token-margin-right'))).toBeVisible()
39
+ })
40
+
41
+ it('should render combined safe area tokens', async () => {
42
+ await expect(element(by.id('token-combined'))).toBeVisible()
43
+ })
44
+
45
+ it('should display safe area status', async () => {
46
+ await expect(element(by.id('safe-area-status'))).toBeVisible()
47
+ })
48
+
49
+ it('should display initial insets', async () => {
50
+ await expect(element(by.id('initial-insets'))).toBeVisible()
51
+ })
52
+
53
+ it('should display visual safe area bars', async () => {
54
+ await expect(element(by.id('safe-area-top-bar'))).toBeVisible()
55
+ await expect(element(by.id('safe-area-bottom-bar'))).toBeVisible()
56
+ })
57
+ })
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Detox E2E Test for issue #3436: Select onValueChange not firing on Android physical devices
3
+ * https://github.com/hanzoai/gui/issues/3436
4
+ *
5
+ * The bug: On physical Android devices, tapping a Select.Item does not trigger onValueChange.
6
+ * Console logging shows onPressIn and onPressOut fire, but onPress never does.
7
+ *
8
+ * This test verifies that:
9
+ * 1. The Select trigger can be tapped to open the sheet
10
+ * 2. Tapping an item closes the sheet AND updates the selected value
11
+ * 3. The change count increments (proving onValueChange was called)
12
+ *
13
+ * Note: This test is Android-specific - skip on iOS
14
+ */
15
+
16
+ import { by, device, element, expect, waitFor } from 'detox'
17
+ import { navigateToTestCase } from './utils/navigation'
18
+
19
+ // helper to skip tests on iOS
20
+ const skipOnIOS = () => {
21
+ if (device.getPlatform() === 'ios') {
22
+ return true
23
+ }
24
+ return false
25
+ }
26
+
27
+ describe('SelectAndroidOnPress (#3436)', () => {
28
+ beforeAll(async () => {
29
+ if (skipOnIOS()) return
30
+ await device.launchApp({ newInstance: true })
31
+ })
32
+
33
+ beforeEach(async () => {
34
+ if (skipOnIOS()) return
35
+ await device.reloadReactNative()
36
+ await navigateToTestCase('SelectAndroidOnPress', 'select-android-trigger')
37
+ })
38
+
39
+ it('should render the test case screen', async () => {
40
+ if (skipOnIOS()) return
41
+ await expect(element(by.id('select-android-title'))).toBeVisible()
42
+ await expect(element(by.id('select-android-trigger'))).toBeVisible()
43
+ })
44
+
45
+ it('should open the Select sheet when trigger is tapped', async () => {
46
+ if (skipOnIOS()) return
47
+ // tap the select trigger
48
+ await element(by.id('select-android-trigger')).tap()
49
+
50
+ // wait for sheet to open and items to be visible
51
+ await waitFor(element(by.id('select-android-item-apple')))
52
+ .toBeVisible()
53
+ .withTimeout(5000)
54
+
55
+ // verify other items are also visible
56
+ await expect(element(by.id('select-android-item-pear'))).toBeVisible()
57
+ })
58
+
59
+ it('should update value when item is tapped - THIS IS THE BUG TEST', async () => {
60
+ if (skipOnIOS()) return
61
+ // verify initial state: no value selected, change count is 0
62
+ await expect(element(by.id('select-android-selected-value'))).toHaveText(
63
+ 'Selected value: (none)'
64
+ )
65
+ await expect(element(by.id('select-android-change-count'))).toHaveText(
66
+ 'Change count: 0'
67
+ )
68
+
69
+ // open the select
70
+ await element(by.id('select-android-trigger')).tap()
71
+
72
+ // wait for items to appear
73
+ await waitFor(element(by.id('select-android-item-apple')))
74
+ .toBeVisible()
75
+ .withTimeout(5000)
76
+
77
+ // tap an item - THIS IS WHERE THE BUG MANIFESTS
78
+ // on physical Android devices, this tap fires onPressIn/onPressOut but NOT onPress
79
+ await element(by.id('select-android-item-pear')).tap()
80
+
81
+ // wait for the sheet to close
82
+ await waitFor(element(by.id('select-android-item-apple')))
83
+ .not.toBeVisible()
84
+ .withTimeout(5000)
85
+
86
+ // THE KEY ASSERTIONS - these fail on physical Android due to the bug:
87
+ // the value should have been updated
88
+ await expect(element(by.id('select-android-selected-value'))).toHaveText(
89
+ 'Selected value: pear'
90
+ )
91
+ // the change count should have incremented (proving onValueChange was called)
92
+ await expect(element(by.id('select-android-change-count'))).toHaveText(
93
+ 'Change count: 1'
94
+ )
95
+ })
96
+
97
+ it('should handle tap with slight movement (simulates physical device jitter)', async () => {
98
+ if (skipOnIOS()) return
99
+ // This test simulates the physical device behavior where slight finger
100
+ // movement during a tap can cause the responder to be stolen by the Sheet's ScrollView
101
+ //
102
+ // On physical devices, fingers are never perfectly still during a tap.
103
+ // This small movement can trigger onMoveShouldSetResponder on the parent ScrollView,
104
+ // which steals the responder and prevents onPress from firing on the child.
105
+ await expect(element(by.id('select-android-change-count'))).toHaveText(
106
+ 'Change count: 0'
107
+ )
108
+
109
+ // open the select
110
+ await element(by.id('select-android-trigger')).tap()
111
+
112
+ await waitFor(element(by.id('select-android-item-peach')))
113
+ .toBeVisible()
114
+ .withTimeout(5000)
115
+
116
+ // simulate a "jiggly" tap by using longPressAndDrag with small vertical movement
117
+ // this mimics what physical devices do when fingers aren't perfectly still
118
+ // the small vertical movement (0.01 = ~1% of element height) should NOT prevent selection
119
+ // but before the fix, it would cause the ScrollView to steal responder
120
+ await element(by.id('select-android-item-peach')).longPressAndDrag(
121
+ 150, // duration in ms
122
+ 0.5, // start at center X
123
+ 0.5, // start at center Y
124
+ element(by.id('select-android-item-peach')), // stay on same element
125
+ 0.5, // end at same X
126
+ 0.55, // end slightly lower (5% vertical movement, simulating finger jitter)
127
+ 'slow', // slow speed to simulate real finger
128
+ 50 // short hold
129
+ )
130
+
131
+ // wait for potential sheet close (give it time)
132
+ await new Promise((resolve) => setTimeout(resolve, 1000))
133
+
134
+ // verify selection worked despite the slight movement
135
+ // if the fix works, peach should be selected
136
+ // if the fix doesn't work, the responder was stolen and nothing was selected
137
+ await expect(element(by.id('select-android-selected-value'))).toHaveText(
138
+ 'Selected value: peach'
139
+ )
140
+ await expect(element(by.id('select-android-change-count'))).toHaveText(
141
+ 'Change count: 1'
142
+ )
143
+ })
144
+
145
+ it('should allow multiple selections', async () => {
146
+ if (skipOnIOS()) return
147
+ // first selection
148
+ await element(by.id('select-android-trigger')).tap()
149
+ await waitFor(element(by.id('select-android-item-apple')))
150
+ .toBeVisible()
151
+ .withTimeout(5000)
152
+ await element(by.id('select-android-item-apple')).tap()
153
+ await waitFor(element(by.id('select-android-item-apple')))
154
+ .not.toBeVisible()
155
+ .withTimeout(5000)
156
+
157
+ await expect(element(by.id('select-android-selected-value'))).toHaveText(
158
+ 'Selected value: apple'
159
+ )
160
+ await expect(element(by.id('select-android-change-count'))).toHaveText(
161
+ 'Change count: 1'
162
+ )
163
+
164
+ // second selection - change to blackberry
165
+ await element(by.id('select-android-trigger')).tap()
166
+ await waitFor(element(by.id('select-android-item-blackberry')))
167
+ .toBeVisible()
168
+ .withTimeout(5000)
169
+ await element(by.id('select-android-item-blackberry')).tap()
170
+ await waitFor(element(by.id('select-android-item-blackberry')))
171
+ .not.toBeVisible()
172
+ .withTimeout(5000)
173
+
174
+ await expect(element(by.id('select-android-selected-value'))).toHaveText(
175
+ 'Selected value: blackberry'
176
+ )
177
+ await expect(element(by.id('select-android-change-count'))).toHaveText(
178
+ 'Change count: 2'
179
+ )
180
+ })
181
+ })
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Test for issue #1859: Select not working when mounted, unmounted, and mounted again
3
+ * https://github.com/hanzoai/gui/issues/1859
4
+ *
5
+ * Using Detox for more reliable cross-platform native testing.
6
+ */
7
+
8
+ import { by, device, element, expect, waitFor } from 'detox'
9
+ import { navigateToTestCase } from './utils/navigation'
10
+
11
+ describe('SelectRemount', () => {
12
+ beforeAll(async () => {
13
+ await device.launchApp({ newInstance: true })
14
+ })
15
+
16
+ beforeEach(async () => {
17
+ // Reload the app to start fresh on home screen
18
+ await device.reloadReactNative()
19
+ // Navigate to SelectRemount test case from home screen
20
+ await navigateToTestCase('SelectRemount', 'remount-button')
21
+ })
22
+
23
+ it('should navigate to SelectRemount test case', async () => {
24
+ // Verify we're on the right screen by checking for the remount button
25
+ await expect(element(by.id('remount-button'))).toBeVisible()
26
+ })
27
+
28
+ it('should open Select on first mount', async () => {
29
+ // Disable synchronization during sheet animations - spring animations can be slow to settle
30
+ await device.disableSynchronization()
31
+
32
+ try {
33
+ // Tap the select trigger
34
+ await element(by.id('select-remount-test-trigger')).tap()
35
+
36
+ // Wait for Select options to appear with timeout
37
+ await waitFor(element(by.id('select-remount-test-option-apple')))
38
+ .toBeVisible()
39
+ .withTimeout(10000)
40
+
41
+ // Close Select by pressing back on Android or tapping outside on iOS
42
+ if (device.getPlatform() === 'android') {
43
+ await device.pressBack()
44
+ } else {
45
+ await device.tap({ x: 200, y: 100 })
46
+ }
47
+
48
+ // Wait for sheet to close
49
+ await new Promise((resolve) => setTimeout(resolve, 1000))
50
+ } finally {
51
+ // Re-enable synchronization
52
+ await device.enableSynchronization()
53
+ }
54
+ })
55
+
56
+ it('should open Select after unmount/remount cycle', async () => {
57
+ // Disable synchronization during sheet animations - spring animations can be slow to settle
58
+ await device.disableSynchronization()
59
+
60
+ try {
61
+ // Tap remount button to unmount and remount the Select
62
+ await element(by.id('remount-button')).tap()
63
+
64
+ // Wait a moment for remount to complete
65
+ await new Promise((resolve) => setTimeout(resolve, 1000))
66
+
67
+ // Try to open the Select again - THIS IS THE KEY TEST for #1859
68
+ await element(by.id('select-remount-test-trigger')).tap()
69
+
70
+ // If the bug exists, the Select won't open. With the fix, options should be visible
71
+ await waitFor(element(by.id('select-remount-test-option-apple')))
72
+ .toBeVisible()
73
+ .withTimeout(10000)
74
+
75
+ // Close Select
76
+ if (device.getPlatform() === 'android') {
77
+ await device.pressBack()
78
+ } else {
79
+ await device.tap({ x: 200, y: 100 })
80
+ }
81
+
82
+ // Wait for sheet to close
83
+ await new Promise((resolve) => setTimeout(resolve, 1000))
84
+ } finally {
85
+ // Re-enable synchronization
86
+ await device.enableSynchronization()
87
+ }
88
+ })
89
+
90
+ it('should work with multiple Selects after remount', async () => {
91
+ // Verify we're on the SelectRemount screen
92
+ await expect(element(by.id('remount-button'))).toBeVisible()
93
+
94
+ // Disable synchronization during sheet animations - spring animations can be slow to settle
95
+ await device.disableSynchronization()
96
+
97
+ try {
98
+ // Tap remount to reset state
99
+ await element(by.id('remount-button')).tap()
100
+
101
+ // Wait for remount to complete and first Select to be ready
102
+ await waitFor(element(by.id('select-remount-test-trigger')))
103
+ .toBeVisible()
104
+ .withTimeout(8000)
105
+
106
+ // Small delay to ensure element is interactive after becoming visible
107
+ await new Promise((resolve) => setTimeout(resolve, 500))
108
+
109
+ // Test first Select
110
+ await element(by.id('select-remount-test-trigger')).tap()
111
+
112
+ // Wait for Select sheet/content to animate in
113
+ await waitFor(element(by.id('select-remount-test-option-apple')))
114
+ .toBeVisible()
115
+ .withTimeout(10000)
116
+
117
+ // Select an option to close the Select instead of pressing back
118
+ await element(by.id('select-remount-test-option-apple')).tap()
119
+
120
+ // wait for first sheet to fully close before interacting with second select
121
+ await waitFor(element(by.id('select-remount-test-2-trigger')))
122
+ .toBeVisible()
123
+ .withTimeout(15000)
124
+
125
+ // ensure element is interactive after sheet animation settles
126
+ await new Promise((resolve) => setTimeout(resolve, 1000))
127
+
128
+ await element(by.id('select-remount-test-2-trigger')).tap()
129
+ await waitFor(element(by.id('select-remount-test-2-option-apple')))
130
+ .toBeVisible()
131
+ .withTimeout(10000)
132
+ } finally {
133
+ // Re-enable synchronization
134
+ await device.enableSynchronization()
135
+ }
136
+ })
137
+ })