@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.
- package/.detoxrc.js +130 -0
- package/.env.production +2 -0
- package/.maestro/config.yaml +4 -0
- package/.maestro/flows/shorthand-variables.yaml +23 -0
- package/.watchmanconfig +1 -0
- package/LICENSE +21 -0
- package/README.md +11 -0
- package/app.json +43 -0
- package/assets/adaptive-icon.png +0 -0
- package/assets/favicon.png +0 -0
- package/assets/icon.png +0 -0
- package/assets/splash.png +0 -0
- package/babel.config.js +25 -0
- package/e2e/CompilerExtraction.test.ts +147 -0
- package/e2e/GroupPressNative.test.ts +167 -0
- package/e2e/MediaQueryGtMd.test.ts +71 -0
- package/e2e/NativePortal.test.ts +113 -0
- package/e2e/PointerEvents.test.ts +116 -0
- package/e2e/PressStyleNative.noRngh.test.ts +191 -0
- package/e2e/PressStyleNative.test.ts +231 -0
- package/e2e/SafeArea.test.ts +57 -0
- package/e2e/SelectAndroidOnPress.test.ts +181 -0
- package/e2e/SelectRemount.test.ts +137 -0
- package/e2e/SheetDragResist.test.ts +370 -0
- package/e2e/SheetKeyboardDrag.test.ts +249 -0
- package/e2e/SheetScrollableDrag.test.ts +560 -0
- package/e2e/ShorthandVariables.test.ts +53 -0
- package/e2e/ThemeChangeBasic.test.ts +123 -0
- package/e2e/ThemeMutation.test.ts +80 -0
- package/e2e/check-rngh-status.test.ts +31 -0
- package/e2e/jest.config.js +19 -0
- package/e2e/utils/colors.ts +75 -0
- package/e2e/utils/navigation.ts +53 -0
- package/eas.json +22 -0
- package/flows/AlertDialog.yaml +17 -0
- package/flows/OpenApp.yaml +25 -0
- package/flows/Select.yaml +13 -0
- package/flows/Sheet.yaml +12 -0
- package/flows/Tabs.yaml +13 -0
- package/flows/Toast.yaml +14 -0
- package/flows/WarmUp.yaml +24 -0
- package/index.html +21 -0
- package/index.js +17 -0
- package/metro.config.js +64 -0
- package/next-router-shim.ts +9 -0
- package/package.json +118 -0
- package/plans/toast-2.md +471 -0
- package/playwright.config.ts +71 -0
- package/plugins/expo-modules-core-swift6.js +76 -0
- package/pod-install.sh +7 -0
- package/public/favicon.svg +70 -0
- package/public/fonts/inter.css +15 -0
- package/public/fonts/noto-cn.otf +0 -0
- package/public/gui-icon.svg +68 -0
- package/run-detox.sh +230 -0
- package/run-native-tests.sh +4 -0
- package/run-tests-parallel.ts +195 -0
- package/screenshots/Screenshotter.test.tsx +48 -0
- package/src/AnimationDemos.tsx +131 -0
- package/src/App.native.tsx +121 -0
- package/src/App.tsx +121 -0
- package/src/Navigation.tsx +98 -0
- package/src/Sandbox.tsx +87 -0
- package/src/TestDynamicEval.tsx +33 -0
- package/src/TestNativeSheet.tsx +100 -0
- package/src/components/TimedRender.tsx +18 -0
- package/src/constants/test-ids.ts +52 -0
- package/src/features/demos/demo-screen.tsx +72 -0
- package/src/features/home/ColorSchemeListItem.tsx +41 -0
- package/src/features/home/TestBuildAButton.tsx +102 -0
- package/src/features/home/TestSeparator.tsx +0 -0
- package/src/features/home/screen.tsx +285 -0
- package/src/features/testcases/screen.tsx +59 -0
- package/src/features/testcases/test-screen.tsx +50 -0
- package/src/generatedV5Theme.ts +112 -0
- package/src/gui.config.ts +411 -0
- package/src/guy.png +0 -0
- package/src/index.tsx +6 -0
- package/src/provider/index.tsx +18 -0
- package/src/test-gui-stack.tsx +11 -0
- package/src/test.tsx +3 -0
- package/src/useKitchenSinkTheme.tsx +15 -0
- package/src/usecases/ActionsSheetComparison.tsx +194 -0
- package/src/usecases/AnimatePresenceEnterExitCase.tsx +255 -0
- package/src/usecases/AnimatePresenceExitTest.tsx +69 -0
- package/src/usecases/AnimatedByProp.tsx +39 -0
- package/src/usecases/AnimationComprehensiveCase.tsx +2515 -0
- package/src/usecases/AnimationValueLoggingCase.tsx +526 -0
- package/src/usecases/AnimationsWithMediaQueriesCase.tsx +110 -0
- package/src/usecases/Benchmark.tsx +148 -0
- package/src/usecases/BenchmarkSelect.tsx +34 -0
- package/src/usecases/ButtonCircular.tsx +3 -0
- package/src/usecases/ButtonCustom.tsx +33 -0
- package/src/usecases/ButtonIconColor.tsx +18 -0
- package/src/usecases/ButtonInverse.tsx +30 -0
- package/src/usecases/ButtonUnstyled.tsx +31 -0
- package/src/usecases/CheckboxDisabledOnPress.tsx +62 -0
- package/src/usecases/ClickDuringEnterCase.tsx +59 -0
- package/src/usecases/CodeExamplesInput.tsx +9 -0
- package/src/usecases/ColorTokenFallback.tsx +52 -0
- package/src/usecases/CompilerExtraction.tsx +380 -0
- package/src/usecases/ComplexVariants.tsx +164 -0
- package/src/usecases/CrashAdaptSheet.tsx +98 -0
- package/src/usecases/CustomStyledAnimatedPopover.tsx +42 -0
- package/src/usecases/CustomStyledAnimatedTooltip.tsx +72 -0
- package/src/usecases/DOMNodeAPIs.tsx +154 -0
- package/src/usecases/DialogFocusScopeCase.tsx +277 -0
- package/src/usecases/DialogFocusScopeDebug.tsx +85 -0
- package/src/usecases/DialogNestedCase.tsx +121 -0
- package/src/usecases/DialogOpenControlled.tsx +49 -0
- package/src/usecases/DialogPointerEventsCase.tsx +58 -0
- package/src/usecases/DialogScopedCase.tsx +106 -0
- package/src/usecases/DialogSheetAdaptCase.tsx +178 -0
- package/src/usecases/DialogSheetAdaptResizeCase.tsx +98 -0
- package/src/usecases/DismissLayerStackingCase.tsx +223 -0
- package/src/usecases/DriverDisableAnimationPropsCase.tsx +44 -0
- package/src/usecases/Example.tsx +10 -0
- package/src/usecases/ExitCompletionCase.tsx +713 -0
- package/src/usecases/FocusVisibleButton.tsx +14 -0
- package/src/usecases/FocusVisibleButtonPointer.tsx +13 -0
- package/src/usecases/FocusVisibleButtonWithFocusStyle.tsx +16 -0
- package/src/usecases/FocusWithinCase.tsx +55 -0
- package/src/usecases/FontTokensInVariants.tsx +14 -0
- package/src/usecases/FormButtonTypeCase.tsx +34 -0
- package/src/usecases/GlobalScopedTriggerIsolationCase.tsx +178 -0
- package/src/usecases/GroupHoverMobile.tsx +39 -0
- package/src/usecases/GroupPressInVariant.tsx +92 -0
- package/src/usecases/GroupPressNative.tsx +200 -0
- package/src/usecases/GroupProp.tsx +96 -0
- package/src/usecases/GroupPseudoVariantOverride.tsx +56 -0
- package/src/usecases/GroupUseCases.tsx +94 -0
- package/src/usecases/HeightMediaQueryOverrideCase.tsx +183 -0
- package/src/usecases/InputAutoFocusAfterMenuCase.tsx +105 -0
- package/src/usecases/InputAutoFocusStyledCase.tsx +39 -0
- package/src/usecases/KeyboardControllerTest.tsx +146 -0
- package/src/usecases/ListItem.tsx +123 -0
- package/src/usecases/MediaQueriesV5.tsx +137 -0
- package/src/usecases/MediaQueryGtMd.tsx +73 -0
- package/src/usecases/MenuAboveDialogCase.tsx +75 -0
- package/src/usecases/MenuAccessibilityCase.tsx +133 -0
- package/src/usecases/MenuAnimatePositionCase.tsx +41 -0
- package/src/usecases/MenuArrowAnimatePresenceCase.tsx +98 -0
- package/src/usecases/MenuAsChildPositionCase.tsx +24 -0
- package/src/usecases/MenuAutoResizeCase.tsx +57 -0
- package/src/usecases/MenuBottomCase.tsx +55 -0
- package/src/usecases/MenuFocusLeaveCase.tsx +135 -0
- package/src/usecases/MenuHighlightCase.tsx +44 -0
- package/src/usecases/MenuItemFocusCase.tsx +79 -0
- package/src/usecases/MenuItemPseudoOverrideCase.tsx +270 -0
- package/src/usecases/MenuMultiTriggerCase.tsx +47 -0
- package/src/usecases/MenuOverflowCase.tsx +60 -0
- package/src/usecases/MenuSubCase.tsx +223 -0
- package/src/usecases/MenuSubLeftCase.tsx +178 -0
- package/src/usecases/MenuSubNestedPositionCase.tsx +171 -0
- package/src/usecases/MenuSubStyledCase.tsx +145 -0
- package/src/usecases/MenuThemeCase.tsx +50 -0
- package/src/usecases/MenuUnstyledCase.tsx +52 -0
- package/src/usecases/MultiDriverAnimation.tsx +118 -0
- package/src/usecases/NativePortalTest.tsx +179 -0
- package/src/usecases/NewInputBasic.tsx +16 -0
- package/src/usecases/NewInputEvents.tsx +29 -0
- package/src/usecases/NonGuiTextStyledType.tsx +23 -0
- package/src/usecases/OnLayoutCase.tsx +134 -0
- package/src/usecases/OnLayoutScaleCase.tsx +88 -0
- package/src/usecases/OnLayoutStressCase.tsx +353 -0
- package/src/usecases/OpacityModifierCase.tsx +113 -0
- package/src/usecases/OverlayStyled.tsx +66 -0
- package/src/usecases/ParagraphSpanFontInheritance.tsx +53 -0
- package/src/usecases/PlaceholderTextColor.tsx +20 -0
- package/src/usecases/PointerEventsCase.tsx +100 -0
- package/src/usecases/PopoverAndMenuMultiTriggerCase.tsx +138 -0
- package/src/usecases/PopoverCase.tsx +222 -0
- package/src/usecases/PopoverContentStyledPlusAnimations.tsx +44 -0
- package/src/usecases/PopoverFocusScopeCase.tsx +171 -0
- package/src/usecases/PopoverHoverableCase.tsx +167 -0
- package/src/usecases/PopoverHoverableDisableClickCase.tsx +118 -0
- package/src/usecases/PopoverHoverableRapidCase.tsx +103 -0
- package/src/usecases/PopoverHoverableScopedCase.tsx +135 -0
- package/src/usecases/PopoverScopedCase.tsx +76 -0
- package/src/usecases/PopoverTriggerIsolationCase.tsx +80 -0
- package/src/usecases/PressStyleNative.tsx +143 -0
- package/src/usecases/PseudoStyleMerge.tsx +25 -0
- package/src/usecases/PseudoTransitionCase.tsx +174 -0
- package/src/usecases/RawAnimatedValueCase.tsx +231 -0
- package/src/usecases/RemoveScrollCase.tsx +66 -0
- package/src/usecases/RenderPropCase.tsx +263 -0
- package/src/usecases/SafeAreaCase.tsx +236 -0
- package/src/usecases/ScrollViewRefCase.tsx +88 -0
- package/src/usecases/SecondPage.tsx +5 -0
- package/src/usecases/SelectAndroidOnPress.tsx +129 -0
- package/src/usecases/SelectFocusScopeCase.tsx +270 -0
- package/src/usecases/SelectRemount.tsx +136 -0
- package/src/usecases/Shadows.tsx +5 -0
- package/src/usecases/SheetAnimationCase.tsx +155 -0
- package/src/usecases/SheetDragCase.tsx +183 -0
- package/src/usecases/SheetDragResistCase.tsx +433 -0
- package/src/usecases/SheetDragResistCase.web.tsx +359 -0
- package/src/usecases/SheetKeyboardDragCase.tsx +328 -0
- package/src/usecases/SheetKeyboardFitContentCase.tsx +165 -0
- package/src/usecases/SheetOnAnimationCompleteCase.tsx +54 -0
- package/src/usecases/SheetScrollLockCase.tsx +166 -0
- package/src/usecases/SheetScrollableDrag.tsx +249 -0
- package/src/usecases/SheetSnapPointsFitCase.tsx +393 -0
- package/src/usecases/ShorthandVariables.tsx +49 -0
- package/src/usecases/SlowThemeReRender.tsx +48 -0
- package/src/usecases/SpinnerCustomColors.tsx +34 -0
- package/src/usecases/StackZIndex.tsx +82 -0
- package/src/usecases/StressPage.tsx +301 -0
- package/src/usecases/StylePlatform.tsx +30 -0
- package/src/usecases/StyleProp.tsx +29 -0
- package/src/usecases/StyledAnchor.tsx +27 -0
- package/src/usecases/StyledButtonAnimationAuto.tsx +99 -0
- package/src/usecases/StyledButtonTheme.tsx +63 -0
- package/src/usecases/StyledButtonVariantPseudo.tsx +25 -0
- package/src/usecases/StyledButtonVariantPseudoMerge.tsx +77 -0
- package/src/usecases/StyledCheckboxTheme.tsx +23 -0
- package/src/usecases/StyledContextColor.tsx +246 -0
- package/src/usecases/StyledContextTokens.tsx +147 -0
- package/src/usecases/StyledHOCNamed.tsx +20 -0
- package/src/usecases/StyledHtmlCase.tsx +144 -0
- package/src/usecases/StyledIconColor.tsx +19 -0
- package/src/usecases/StyledInputFocusStyle.tsx +21 -0
- package/src/usecases/StyledInputOnFocus.tsx +30 -0
- package/src/usecases/StyledMediaQueryMerge.tsx +95 -0
- package/src/usecases/StyledOverridePsuedo.tsx +26 -0
- package/src/usecases/StyledRNW.tsx +61 -0
- package/src/usecases/StyledStyleableInputOnFocus.tsx +34 -0
- package/src/usecases/StyledStyleableInputVariant.tsx +48 -0
- package/src/usecases/StyledStyledStyleableInputOnFocus.tsx +36 -0
- package/src/usecases/StyledVariantTextColor.tsx +25 -0
- package/src/usecases/StyledViewOnFocus.tsx +32 -0
- package/src/usecases/TabHoverAnimationCase.tsx +212 -0
- package/src/usecases/TextNestedInheritance.tsx +80 -0
- package/src/usecases/ThemeChange.tsx +100 -0
- package/src/usecases/ThemeChangeBasic.tsx +52 -0
- package/src/usecases/ThemeComponentResolution.tsx +119 -0
- package/src/usecases/ThemeConditionalName.tsx +31 -0
- package/src/usecases/ThemeMediaAnimationCase.tsx +39 -0
- package/src/usecases/ThemeMutation.tsx +86 -0
- package/src/usecases/ThemeNested.tsx +103 -0
- package/src/usecases/ThemeReset.tsx +62 -0
- package/src/usecases/ThemeShallowCase.tsx +83 -0
- package/src/usecases/ToastCase.tsx +46 -0
- package/src/usecases/ToggleGroupActiveProps.tsx +40 -0
- package/src/usecases/ToggleGroupXGroupCase.tsx +104 -0
- package/src/usecases/TooltipAnimationCase.tsx +99 -0
- package/src/usecases/TooltipCase.tsx +32 -0
- package/src/usecases/TooltipGlobalPatternCase.tsx +83 -0
- package/src/usecases/TooltipGroupCase.tsx +102 -0
- package/src/usecases/TooltipMultiTriggerCase.tsx +88 -0
- package/src/usecases/TooltipPositionJumpCase.tsx +91 -0
- package/src/usecases/TooltipTriggerInlineCase.tsx +60 -0
- package/src/usecases/TransformMediaQueryMerge.tsx +98 -0
- package/src/usecases/UseCases.tsx +409 -0
- package/src/usecases/UseTheme.tsx +41 -0
- package/src/usecases/V5ThemeBuilderOutput.tsx +231 -0
- package/src/usecases/VariantFontFamily.tsx +25 -0
- package/src/usecases/VariantsOrder.tsx +117 -0
- package/src/usecases/ZIndex.tsx +155 -0
- package/src/usecases/helpers.tsx +44 -0
- package/src/usecases/index.native.ts +122 -0
- package/src/usecases/index.ts +3 -0
- package/src/usecases/index.web.ts +177 -0
- package/tests/AnimatePresenceEnterExit.animated.test.tsx +176 -0
- package/tests/AnimatedByProp.animated.test.tsx +138 -0
- package/tests/AnimationBehavior.animated.test.tsx +543 -0
- package/tests/AnimationTiming.animated.test.tsx +195 -0
- package/tests/AnimationsWithMediaQueries.animated.test.tsx +154 -0
- package/tests/BuildAButton.test.tsx +87 -0
- package/tests/ButtonCircular.test.tsx +17 -0
- package/tests/ButtonCustom.test.tsx +17 -0
- package/tests/ButtonIconColor.test.tsx +23 -0
- package/tests/ButtonUnstyled.test.tsx +56 -0
- package/tests/ClickDuringEnter.animated.test.tsx +174 -0
- package/tests/ColorTokenFallback.test.tsx +45 -0
- package/tests/DOMNodeAPIs.test.tsx +161 -0
- package/tests/DialogFocusScope.animated.test.tsx +309 -0
- package/tests/DialogNested.test.tsx +128 -0
- package/tests/DialogOpenControlled.test.tsx +42 -0
- package/tests/DialogPointerEvents.animated.test.tsx +108 -0
- package/tests/DialogScoped.test.tsx +137 -0
- package/tests/DialogSheetAdapt.test.tsx +68 -0
- package/tests/DialogSheetAdaptResize.test.tsx +161 -0
- package/tests/DismissLayerStacking.test.tsx +292 -0
- package/tests/DriverDisableAnimationProps.animated.test.tsx +157 -0
- package/tests/ExitCompletion.animated.test.tsx +425 -0
- package/tests/ExitTimingCheck.animated.test.ts +34 -0
- package/tests/FocusVisibleButton.test.tsx +41 -0
- package/tests/FocusVisibleButtonPointerFocus.test.tsx +23 -0
- package/tests/FocusVisibleButtonPointerFocusWithFocusStyle.test.tsx +40 -0
- package/tests/FocusWithinStyle.animated.test.tsx +66 -0
- package/tests/FocusWithinStyle.test.tsx +60 -0
- package/tests/FormButtonType.test.tsx +42 -0
- package/tests/GlobalScopedTriggerIsolation.test.tsx +89 -0
- package/tests/GroupHoverMobile.test.tsx +52 -0
- package/tests/GroupPressInVariant.test.tsx +82 -0
- package/tests/GroupProp.test.tsx +30 -0
- package/tests/GroupPseudoVariantOverride.test.tsx +57 -0
- package/tests/GroupUseCases.test.tsx +111 -0
- package/tests/GuiSiteMotion.test.ts +481 -0
- package/tests/HeightMediaQueryOverride.test.tsx +112 -0
- package/tests/InputAutoFocusAfterMenu.test.tsx +55 -0
- package/tests/InputAutoFocusStyled.test.tsx +22 -0
- package/tests/ListItem.test.tsx +129 -0
- package/tests/MediaQueriesV5.test.tsx +113 -0
- package/tests/MediaQueryGtMd.test.tsx +84 -0
- package/tests/MenuAboveDialog.test.tsx +108 -0
- package/tests/MenuAccessibility.test.tsx +346 -0
- package/tests/MenuAnimatePosition.animated.test.tsx +57 -0
- package/tests/MenuArrowAnimatePresence.animated.test.tsx +71 -0
- package/tests/MenuAsChildPosition.test.tsx +16 -0
- package/tests/MenuAutoResize.test.tsx +54 -0
- package/tests/MenuFocusLeave.test.tsx +181 -0
- package/tests/MenuHighlight.test.tsx +165 -0
- package/tests/MenuHoverKeyboardBugs.test.tsx +252 -0
- package/tests/MenuItemFocus.test.tsx +59 -0
- package/tests/MenuItemPseudoOverride.test.tsx +231 -0
- package/tests/MenuMultiTrigger.test.tsx +101 -0
- package/tests/MenuOverflow.test.tsx +93 -0
- package/tests/MenuStayInFrame.test.tsx +102 -0
- package/tests/MenuSubKeyboardFocus.test.tsx +220 -0
- package/tests/MenuSubLeftSafePolygon.test.tsx +88 -0
- package/tests/MenuSubNestedPosition.test.tsx +48 -0
- package/tests/MenuSubSafePolygon.test.tsx +97 -0
- package/tests/MenuSubStyled.test.tsx +40 -0
- package/tests/MenuTheme.test.tsx +34 -0
- package/tests/MenuUnstyled.test.tsx +56 -0
- package/tests/MultiDriverAnimation.test.tsx +207 -0
- package/tests/NewInputBasic.test.tsx +50 -0
- package/tests/NewInputEvents.test.tsx +55 -0
- package/tests/OnLayout.test.tsx +163 -0
- package/tests/OnLayoutScale.test.tsx +100 -0
- package/tests/OnLayoutStress.test.tsx +304 -0
- package/tests/ParagraphSpanFontInheritance.test.tsx +73 -0
- package/tests/PointerEvents.test.tsx +123 -0
- package/tests/Popover.animated.test.tsx +234 -0
- package/tests/PopoverAndMenuMultiTrigger.test.tsx +184 -0
- package/tests/PopoverAnimatePosition.animated.test.tsx +51 -0
- package/tests/PopoverClickDuringEnter.animated.test.tsx +197 -0
- package/tests/PopoverFocusScope.test.tsx +242 -0
- package/tests/PopoverHoverable.test.tsx +383 -0
- package/tests/PopoverHoverableDisableClick.test.tsx +106 -0
- package/tests/PopoverHoverableRapid.test.tsx +129 -0
- package/tests/PopoverHoverableReposition.test.tsx +111 -0
- package/tests/PopoverHoverableScoped.animated.test.tsx +103 -0
- package/tests/PopoverHoverableStress.test.tsx +169 -0
- package/tests/PopoverInitialPosition.animated.test.tsx +82 -0
- package/tests/PopoverMiddlewareSkipRegression.animated.test.tsx +221 -0
- package/tests/PopoverScoped.test.tsx +128 -0
- package/tests/PopoverScopedPositionGlitch.animated.test.tsx +184 -0
- package/tests/PopoverTriggerIsolation.test.tsx +62 -0
- package/tests/PseudoTransition.animated.test.tsx +319 -0
- package/tests/RawAnimatedValue.test.tsx +147 -0
- package/tests/RemoveScroll.test.tsx +223 -0
- package/tests/RenderProp.test.tsx +293 -0
- package/tests/ScrollViewRef.test.tsx +39 -0
- package/tests/SelectClickHold.test.tsx +147 -0
- package/tests/SelectFocusScope.test.tsx +176 -0
- package/tests/SelectInnerPositioning.test.tsx +82 -0
- package/tests/SelectKeyboardNav.test.tsx +173 -0
- package/tests/SelectPositioning.test.tsx +56 -0
- package/tests/SelectTypeahead.test.tsx +63 -0
- package/tests/Shadows.test.tsx +14 -0
- package/tests/SheetAnimation.animated.test.tsx +413 -0
- package/tests/SheetDrag.animated.test.tsx +223 -0
- package/tests/SheetDragResist.animated.test.tsx +393 -0
- package/tests/SheetOnAnimationComplete.animated.test.tsx +62 -0
- package/tests/SheetScrollLock.animated.test.tsx +287 -0
- package/tests/SheetScrollableDrag.animated.test.tsx +1264 -0
- package/tests/SheetSnapPointsFit.animated.test.tsx +259 -0
- package/tests/ShorthandVariables.test.tsx +44 -0
- package/tests/SpinnerCustomColors.test.tsx +67 -0
- package/tests/StackZIndex.test.tsx +51 -0
- package/tests/StressPagePerf.test.tsx +76 -0
- package/tests/StylePlatform.test.tsx +38 -0
- package/tests/StyleProp.test.tsx +20 -0
- package/tests/StyledAnchor.test.tsx +17 -0
- package/tests/StyledButtonTheme.test.tsx +22 -0
- package/tests/StyledButtonVariantPseudo.test.tsx +20 -0
- package/tests/StyledButtonVariantPseudoMerge.animated.test.tsx +33 -0
- package/tests/StyledCheckboxTheme.test.tsx +16 -0
- package/tests/StyledContextColor.test.tsx +119 -0
- package/tests/StyledContextTokens.test.tsx +56 -0
- package/tests/StyledHOCNamed.test.tsx +16 -0
- package/tests/StyledHtml.test.tsx +161 -0
- package/tests/StyledIconColor.test.tsx +32 -0
- package/tests/StyledInputFocusStyle.test.tsx +19 -0
- package/tests/StyledInputOnFocus.test.tsx +27 -0
- package/tests/StyledMediaQueryMerge.test.tsx +66 -0
- package/tests/StyledRNW.test.tsx +17 -0
- package/tests/StyledStyleableInputOnFocus.test.tsx +27 -0
- package/tests/StyledStyleableInputVariant.test.tsx +22 -0
- package/tests/StyledStyledStyleableInputOnFocus.test.tsx +27 -0
- package/tests/StyledVariantTextColor.test.tsx +24 -0
- package/tests/StyledViewOnFocus.test.tsx +27 -0
- package/tests/TabHoverAnimation.animated.test.tsx +468 -0
- package/tests/TabHoverPositionSmooth.animated.test.tsx +129 -0
- package/tests/TextNestedInheritance.test.tsx +93 -0
- package/tests/ThemeChange.test.tsx +70 -0
- package/tests/ThemeComponentResolution.test.tsx +82 -0
- package/tests/ThemeConditionalName.test.tsx +34 -0
- package/tests/ThemeMediaAnimation.test.tsx +65 -0
- package/tests/ThemeNested.test.tsx +141 -0
- package/tests/ThemeReset.test.tsx +63 -0
- package/tests/ThemeShallow.test.tsx +95 -0
- package/tests/Toast.test.tsx +106 -0
- package/tests/ToggleGroup.test.tsx +61 -0
- package/tests/ToggleGroupActiveProps.test.tsx +38 -0
- package/tests/ToggleGroupXGroup.test.tsx +172 -0
- package/tests/TooltipAnimation.animated.test.tsx +260 -0
- package/tests/TooltipEnterInterrupt.animated.test.tsx +76 -0
- package/tests/TooltipGlobalPattern.animated.test.tsx +208 -0
- package/tests/TooltipGroup.animated.test.tsx +79 -0
- package/tests/TooltipMultiTrigger.test.tsx +116 -0
- package/tests/TooltipPositionJump.animated.test.tsx +229 -0
- package/tests/TooltipPositionJumpNotes.md +219 -0
- package/tests/TooltipRapidSwitch.animated.test.tsx +399 -0
- package/tests/TooltipTriggerInline.test.tsx +65 -0
- package/tests/TransformMediaQueryMerge.test.tsx +104 -0
- package/tests/TransitionEnterExit.animated.test.tsx +311 -0
- package/tests/UseTheme.test.tsx +16 -0
- package/tests/V5ThemeBuilderOutput.test.tsx +164 -0
- package/tests/VariantFontFamily.test.tsx +11 -0
- package/tests/VariantsOrder.test.tsx +53 -0
- package/tests/_debug_position.mjs +52 -0
- package/tests/test-utils.ts +106 -0
- package/tests/utils.tsx +54 -0
- package/tsconfig.json +45 -0
- package/vite-env.d.ts +1 -0
- package/vite.config.ts +14 -0
- 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
|
+
})
|