@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,143 @@
|
|
|
1
|
+
import { useState } from 'react'
|
|
2
|
+
import { Text, View, XStack, YStack, styled } from '@hanzo/gui'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Test cases for native press style behaviors:
|
|
6
|
+
*
|
|
7
|
+
* 1. pressStyle WITHOUT transition - tests fallback path in createComponent
|
|
8
|
+
* 2. pressStyle WITH transition - tests animation driver path
|
|
9
|
+
* 3. Press and drag off behavior - should unpress correctly
|
|
10
|
+
*
|
|
11
|
+
* Colors are chosen to be easily distinguishable in screenshots:
|
|
12
|
+
* - Default: pure blue (#0000ff-ish via $blue10)
|
|
13
|
+
* - Pressed: pure red (#ff0000-ish via $red10)
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// pressStyle WITHOUT transition - tests the fallback to normal re-render
|
|
17
|
+
const ColorTestPressable = styled(View, {
|
|
18
|
+
name: 'ColorTestPressable',
|
|
19
|
+
width: 200,
|
|
20
|
+
height: 100,
|
|
21
|
+
backgroundColor: '$blue10',
|
|
22
|
+
alignItems: 'center',
|
|
23
|
+
justifyContent: 'center',
|
|
24
|
+
|
|
25
|
+
pressStyle: {
|
|
26
|
+
backgroundColor: '$red10',
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
// pressStyle WITH transition - tests animation driver path
|
|
31
|
+
const ColorTestPressableAnimated = styled(View, {
|
|
32
|
+
name: 'ColorTestPressableAnimated',
|
|
33
|
+
width: 200,
|
|
34
|
+
height: 100,
|
|
35
|
+
backgroundColor: '$blue10',
|
|
36
|
+
alignItems: 'center',
|
|
37
|
+
justifyContent: 'center',
|
|
38
|
+
transition: 'quick',
|
|
39
|
+
|
|
40
|
+
pressStyle: {
|
|
41
|
+
backgroundColor: '$red10',
|
|
42
|
+
},
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
export function PressStyleNative() {
|
|
46
|
+
const [simplePressState, setSimplePressState] = useState({
|
|
47
|
+
pressInCount: 0,
|
|
48
|
+
pressOutCount: 0,
|
|
49
|
+
isPressed: false,
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const [animatedPressState, setAnimatedPressState] = useState({
|
|
53
|
+
pressInCount: 0,
|
|
54
|
+
pressOutCount: 0,
|
|
55
|
+
isPressed: false,
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<YStack gap="$4" padding="$4" testID="press-style-native-root">
|
|
60
|
+
<Text fontSize="$5" fontWeight="bold">
|
|
61
|
+
Press Style Tests
|
|
62
|
+
</Text>
|
|
63
|
+
|
|
64
|
+
{/* test 1: pressStyle WITHOUT transition */}
|
|
65
|
+
<YStack gap="$2">
|
|
66
|
+
<Text fontSize="$3">1. No Transition</Text>
|
|
67
|
+
<Text fontSize="$2" color="$gray11">
|
|
68
|
+
Blue → Red (no animation)
|
|
69
|
+
</Text>
|
|
70
|
+
<ColorTestPressable
|
|
71
|
+
testID="color-test-pressable"
|
|
72
|
+
onPressIn={() => {
|
|
73
|
+
setSimplePressState((s) => ({
|
|
74
|
+
...s,
|
|
75
|
+
pressInCount: s.pressInCount + 1,
|
|
76
|
+
isPressed: true,
|
|
77
|
+
}))
|
|
78
|
+
}}
|
|
79
|
+
onPressOut={() => {
|
|
80
|
+
setSimplePressState((s) => ({
|
|
81
|
+
...s,
|
|
82
|
+
pressOutCount: s.pressOutCount + 1,
|
|
83
|
+
isPressed: false,
|
|
84
|
+
}))
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
<Text color="white" fontWeight="bold">
|
|
88
|
+
PRESS ME
|
|
89
|
+
</Text>
|
|
90
|
+
</ColorTestPressable>
|
|
91
|
+
<XStack gap="$2">
|
|
92
|
+
<Text testID="simple-press-in-count">In: {simplePressState.pressInCount}</Text>
|
|
93
|
+
<Text testID="simple-press-out-count">
|
|
94
|
+
Out: {simplePressState.pressOutCount}
|
|
95
|
+
</Text>
|
|
96
|
+
<Text testID="simple-is-pressed">
|
|
97
|
+
Pressed: {simplePressState.isPressed ? 'YES' : 'NO'}
|
|
98
|
+
</Text>
|
|
99
|
+
</XStack>
|
|
100
|
+
</YStack>
|
|
101
|
+
|
|
102
|
+
{/* test 2: pressStyle WITH transition */}
|
|
103
|
+
<YStack gap="$2">
|
|
104
|
+
<Text fontSize="$3">2. With Transition</Text>
|
|
105
|
+
<Text fontSize="$2" color="$gray11">
|
|
106
|
+
Blue → Red (animated)
|
|
107
|
+
</Text>
|
|
108
|
+
<ColorTestPressableAnimated
|
|
109
|
+
testID="animated-color-test-pressable"
|
|
110
|
+
onPressIn={() => {
|
|
111
|
+
setAnimatedPressState((s) => ({
|
|
112
|
+
...s,
|
|
113
|
+
pressInCount: s.pressInCount + 1,
|
|
114
|
+
isPressed: true,
|
|
115
|
+
}))
|
|
116
|
+
}}
|
|
117
|
+
onPressOut={() => {
|
|
118
|
+
setAnimatedPressState((s) => ({
|
|
119
|
+
...s,
|
|
120
|
+
pressOutCount: s.pressOutCount + 1,
|
|
121
|
+
isPressed: false,
|
|
122
|
+
}))
|
|
123
|
+
}}
|
|
124
|
+
>
|
|
125
|
+
<Text color="white" fontWeight="bold">
|
|
126
|
+
ANIMATED
|
|
127
|
+
</Text>
|
|
128
|
+
</ColorTestPressableAnimated>
|
|
129
|
+
<XStack gap="$2">
|
|
130
|
+
<Text testID="animated-press-in-count">
|
|
131
|
+
In: {animatedPressState.pressInCount}
|
|
132
|
+
</Text>
|
|
133
|
+
<Text testID="animated-press-out-count">
|
|
134
|
+
Out: {animatedPressState.pressOutCount}
|
|
135
|
+
</Text>
|
|
136
|
+
<Text testID="animated-is-pressed">
|
|
137
|
+
Pressed: {animatedPressState.isPressed ? 'YES' : 'NO'}
|
|
138
|
+
</Text>
|
|
139
|
+
</XStack>
|
|
140
|
+
</YStack>
|
|
141
|
+
</YStack>
|
|
142
|
+
)
|
|
143
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { View, Text, YStack, styled } from '@hanzo/gui'
|
|
2
|
+
|
|
3
|
+
const CustomYStack = styled(YStack, {
|
|
4
|
+
backgroundColor: 'yellow',
|
|
5
|
+
hoverStyle: {
|
|
6
|
+
backgroundColor: 'red',
|
|
7
|
+
},
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
export function PseudoStyleMerge() {
|
|
11
|
+
return (
|
|
12
|
+
<View flex={1} items="center" justify="center">
|
|
13
|
+
<CustomYStack
|
|
14
|
+
width={100}
|
|
15
|
+
height={100}
|
|
16
|
+
hoverStyle={{
|
|
17
|
+
scale: 2,
|
|
18
|
+
}}
|
|
19
|
+
transition="quick"
|
|
20
|
+
>
|
|
21
|
+
<Text>hi</Text>
|
|
22
|
+
</CustomYStack>
|
|
23
|
+
</View>
|
|
24
|
+
)
|
|
25
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Square, YStack, Text, XStack, View, styled } from '@hanzo/gui'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* PSEUDO TRANSITION TEST CASES
|
|
5
|
+
*
|
|
6
|
+
* Tests for transition prop inside pseudo-style props (hoverStyle, pressStyle, etc.)
|
|
7
|
+
* CSS semantics: enter uses pseudo's transition, exit uses base transition
|
|
8
|
+
*
|
|
9
|
+
* Test scenarios:
|
|
10
|
+
* 1. hoverStyle with transition - enter fast (200ms), exit slow (1000ms)
|
|
11
|
+
* 2. pressStyle with transition - press fast (200ms), release slow (1000ms)
|
|
12
|
+
* 3. Multiple pseudo states with different transitions
|
|
13
|
+
* 4. $group-hover with transition
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// styled component for group test
|
|
17
|
+
const GroupHoverSquare = styled(Square, {
|
|
18
|
+
width: 100,
|
|
19
|
+
height: 100,
|
|
20
|
+
backgroundColor: '$blue10',
|
|
21
|
+
transition: '1000ms',
|
|
22
|
+
|
|
23
|
+
variants: {
|
|
24
|
+
groupHover: {
|
|
25
|
+
true: {
|
|
26
|
+
// this would be the $group-hover case - tested via props below
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
export function PseudoTransitionCase() {
|
|
33
|
+
return (
|
|
34
|
+
<YStack padding="$4" gap="$8">
|
|
35
|
+
<Text fontSize="$6" fontWeight="bold">
|
|
36
|
+
Pseudo Transition Tests
|
|
37
|
+
</Text>
|
|
38
|
+
|
|
39
|
+
{/* Scenario 1: hoverStyle transition */}
|
|
40
|
+
<YStack gap="$2">
|
|
41
|
+
<Text>Scenario 1: hover - enter 200ms, exit 1000ms</Text>
|
|
42
|
+
<Text color="$gray10" fontSize="$2">
|
|
43
|
+
Hover over the square. Enter should be fast, exit should be slow.
|
|
44
|
+
</Text>
|
|
45
|
+
<Square
|
|
46
|
+
data-testid="scenario-1-target"
|
|
47
|
+
width={100}
|
|
48
|
+
height={100}
|
|
49
|
+
backgroundColor="$blue10"
|
|
50
|
+
transition="1000ms"
|
|
51
|
+
hoverStyle={{
|
|
52
|
+
transition: '200ms',
|
|
53
|
+
backgroundColor: '$red10',
|
|
54
|
+
}}
|
|
55
|
+
/>
|
|
56
|
+
</YStack>
|
|
57
|
+
|
|
58
|
+
{/* Scenario 2: pressStyle transition */}
|
|
59
|
+
<YStack gap="$2">
|
|
60
|
+
<Text>Scenario 2: press - enter 200ms, exit 1000ms</Text>
|
|
61
|
+
<Text color="$gray10" fontSize="$2">
|
|
62
|
+
Press and hold the square. Press should be fast, release should be slow.
|
|
63
|
+
</Text>
|
|
64
|
+
<Square
|
|
65
|
+
data-testid="scenario-2-target"
|
|
66
|
+
width={100}
|
|
67
|
+
height={100}
|
|
68
|
+
backgroundColor="$green10"
|
|
69
|
+
transition="1000ms"
|
|
70
|
+
pressStyle={{
|
|
71
|
+
transition: '200ms',
|
|
72
|
+
backgroundColor: '$purple10',
|
|
73
|
+
}}
|
|
74
|
+
/>
|
|
75
|
+
</YStack>
|
|
76
|
+
|
|
77
|
+
{/* Scenario 3: hover and press with different transitions */}
|
|
78
|
+
<YStack gap="$2">
|
|
79
|
+
<Text>Scenario 3: hover 400ms, press 200ms (press takes priority)</Text>
|
|
80
|
+
<Text color="$gray10" fontSize="$2">
|
|
81
|
+
Hover uses 400ms, press uses 200ms. When both active, press wins.
|
|
82
|
+
</Text>
|
|
83
|
+
<Square
|
|
84
|
+
data-testid="scenario-3-target"
|
|
85
|
+
width={100}
|
|
86
|
+
height={100}
|
|
87
|
+
backgroundColor="$orange10"
|
|
88
|
+
transition="1000ms"
|
|
89
|
+
hoverStyle={{
|
|
90
|
+
transition: '400ms',
|
|
91
|
+
backgroundColor: '$yellow10',
|
|
92
|
+
}}
|
|
93
|
+
pressStyle={{
|
|
94
|
+
transition: '200ms',
|
|
95
|
+
backgroundColor: '$pink10',
|
|
96
|
+
}}
|
|
97
|
+
/>
|
|
98
|
+
</YStack>
|
|
99
|
+
|
|
100
|
+
{/* Scenario 4: $group-hover with transition - uses opacity for simpler testing */}
|
|
101
|
+
<YStack gap="$2">
|
|
102
|
+
<Text>Scenario 4: group hover - enter 200ms, exit 1000ms</Text>
|
|
103
|
+
<Text color="$gray10" fontSize="$2">
|
|
104
|
+
Hover over the container. Child square opacity animates with group hover.
|
|
105
|
+
</Text>
|
|
106
|
+
<XStack
|
|
107
|
+
data-testid="scenario-4-container"
|
|
108
|
+
group="testy"
|
|
109
|
+
padding="$4"
|
|
110
|
+
backgroundColor="#eee"
|
|
111
|
+
borderRadius="$4"
|
|
112
|
+
>
|
|
113
|
+
<Square
|
|
114
|
+
data-testid="scenario-4-target"
|
|
115
|
+
width={100}
|
|
116
|
+
height={100}
|
|
117
|
+
backgroundColor="#06b6d4"
|
|
118
|
+
opacity={0.3}
|
|
119
|
+
transition="1000ms"
|
|
120
|
+
$group-testy-hover={{
|
|
121
|
+
transition: '200ms',
|
|
122
|
+
opacity: 1,
|
|
123
|
+
}}
|
|
124
|
+
/>
|
|
125
|
+
</XStack>
|
|
126
|
+
</YStack>
|
|
127
|
+
|
|
128
|
+
{/* Scenario 5: focusStyle with transition */}
|
|
129
|
+
<YStack gap="$2">
|
|
130
|
+
<Text>Scenario 5: focus - enter 200ms, exit 1000ms</Text>
|
|
131
|
+
<Text color="$gray10" fontSize="$2">
|
|
132
|
+
Click to focus the square. Focus enter should be fast, blur should be slow.
|
|
133
|
+
</Text>
|
|
134
|
+
<View
|
|
135
|
+
data-testid="scenario-5-target"
|
|
136
|
+
tabIndex={0}
|
|
137
|
+
width={100}
|
|
138
|
+
height={100}
|
|
139
|
+
backgroundColor="$purple10"
|
|
140
|
+
transition="1000ms"
|
|
141
|
+
focusStyle={{
|
|
142
|
+
transition: '200ms',
|
|
143
|
+
backgroundColor: '$blue10',
|
|
144
|
+
outlineWidth: 2,
|
|
145
|
+
outlineColor: '$blue10',
|
|
146
|
+
outlineStyle: 'solid',
|
|
147
|
+
}}
|
|
148
|
+
/>
|
|
149
|
+
</YStack>
|
|
150
|
+
|
|
151
|
+
{/* Scenario 6: opacity animation in hoverStyle */}
|
|
152
|
+
<YStack gap="$2">
|
|
153
|
+
<Text>Scenario 6: opacity - hover enter 200ms, exit 1000ms</Text>
|
|
154
|
+
<Text color="$gray10" fontSize="$2">
|
|
155
|
+
Opacity fades in fast (200ms) and fades out slow (1000ms).
|
|
156
|
+
</Text>
|
|
157
|
+
<Square
|
|
158
|
+
data-testid="scenario-6-target"
|
|
159
|
+
width={100}
|
|
160
|
+
height={100}
|
|
161
|
+
backgroundColor="$gray10"
|
|
162
|
+
opacity={0.3}
|
|
163
|
+
transition="1000ms"
|
|
164
|
+
hoverStyle={{
|
|
165
|
+
transition: '200ms',
|
|
166
|
+
opacity: 1,
|
|
167
|
+
}}
|
|
168
|
+
/>
|
|
169
|
+
</YStack>
|
|
170
|
+
</YStack>
|
|
171
|
+
)
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export default PseudoTransitionCase
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { useEffect, useRef, useState } from 'react'
|
|
2
|
+
import { Animated, View as RNView, Text as RNText, StyleSheet } from 'react-native'
|
|
3
|
+
import { Button, Paragraph, YStack, XStack } from '@hanzo/gui'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Test case for raw Animated.Value with Animated.createAnimatedComponent
|
|
7
|
+
*
|
|
8
|
+
* This tests the core react-native-web-lite animated implementation
|
|
9
|
+
* to verify AnimatedValue objects are properly consumed/interpolated.
|
|
10
|
+
*
|
|
11
|
+
* Key things being tested:
|
|
12
|
+
* 1. Animated.Value with direct numeric style (opacity)
|
|
13
|
+
* 2. Animated.Value with interpolation (color)
|
|
14
|
+
* 3. Animated.Value with transform
|
|
15
|
+
* 4. Animated.timing driving updates
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const AnimatedView = Animated.createAnimatedComponent(RNView)
|
|
19
|
+
|
|
20
|
+
export function RawAnimatedValueCase() {
|
|
21
|
+
const opacity = useRef(new Animated.Value(0)).current
|
|
22
|
+
const translateY = useRef(new Animated.Value(50)).current
|
|
23
|
+
const scale = useRef(new Animated.Value(0.5)).current
|
|
24
|
+
|
|
25
|
+
const [isAnimated, setIsAnimated] = useState(false)
|
|
26
|
+
const [debugInfo, setDebugInfo] = useState<string>('')
|
|
27
|
+
|
|
28
|
+
// log the style value to debug
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
const styleObj = {
|
|
31
|
+
opacity,
|
|
32
|
+
transform: [{ translateY }, { scale }],
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// check what __getValue returns
|
|
36
|
+
// @ts-expect-error
|
|
37
|
+
const opacityValue = opacity.__getValue?.() ?? 'no __getValue'
|
|
38
|
+
// @ts-expect-error
|
|
39
|
+
const translateYValue = translateY.__getValue?.() ?? 'no __getValue'
|
|
40
|
+
// @ts-expect-error
|
|
41
|
+
const scaleValue = scale.__getValue?.() ?? 'no __getValue'
|
|
42
|
+
|
|
43
|
+
setDebugInfo(
|
|
44
|
+
JSON.stringify(
|
|
45
|
+
{
|
|
46
|
+
opacityValue,
|
|
47
|
+
translateYValue,
|
|
48
|
+
scaleValue,
|
|
49
|
+
opacityType: typeof opacity,
|
|
50
|
+
opacityConstructor: opacity?.constructor?.name,
|
|
51
|
+
},
|
|
52
|
+
null,
|
|
53
|
+
2
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
console.log('[RAW_ANIMATED] Initial values:', {
|
|
58
|
+
opacity: opacityValue,
|
|
59
|
+
translateY: translateYValue,
|
|
60
|
+
scale: scaleValue,
|
|
61
|
+
})
|
|
62
|
+
}, [opacity, translateY, scale])
|
|
63
|
+
|
|
64
|
+
const animateIn = () => {
|
|
65
|
+
console.log('[RAW_ANIMATED] Starting animation IN')
|
|
66
|
+
setIsAnimated(true)
|
|
67
|
+
|
|
68
|
+
Animated.parallel([
|
|
69
|
+
Animated.timing(opacity, {
|
|
70
|
+
toValue: 1,
|
|
71
|
+
duration: 300,
|
|
72
|
+
useNativeDriver: false,
|
|
73
|
+
}),
|
|
74
|
+
Animated.timing(translateY, {
|
|
75
|
+
toValue: 0,
|
|
76
|
+
duration: 300,
|
|
77
|
+
useNativeDriver: false,
|
|
78
|
+
}),
|
|
79
|
+
Animated.timing(scale, {
|
|
80
|
+
toValue: 1,
|
|
81
|
+
duration: 300,
|
|
82
|
+
useNativeDriver: false,
|
|
83
|
+
}),
|
|
84
|
+
]).start(() => {
|
|
85
|
+
console.log('[RAW_ANIMATED] Animation IN complete')
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const animateOut = () => {
|
|
90
|
+
console.log('[RAW_ANIMATED] Starting animation OUT')
|
|
91
|
+
setIsAnimated(false)
|
|
92
|
+
|
|
93
|
+
Animated.parallel([
|
|
94
|
+
Animated.timing(opacity, {
|
|
95
|
+
toValue: 0,
|
|
96
|
+
duration: 300,
|
|
97
|
+
useNativeDriver: false,
|
|
98
|
+
}),
|
|
99
|
+
Animated.timing(translateY, {
|
|
100
|
+
toValue: 50,
|
|
101
|
+
duration: 300,
|
|
102
|
+
useNativeDriver: false,
|
|
103
|
+
}),
|
|
104
|
+
Animated.timing(scale, {
|
|
105
|
+
toValue: 0.5,
|
|
106
|
+
duration: 300,
|
|
107
|
+
useNativeDriver: false,
|
|
108
|
+
}),
|
|
109
|
+
]).start(() => {
|
|
110
|
+
console.log('[RAW_ANIMATED] Animation OUT complete')
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// interpolated color
|
|
115
|
+
const backgroundColor = opacity.interpolate({
|
|
116
|
+
inputRange: [0, 1],
|
|
117
|
+
outputRange: ['rgb(255, 0, 0)', 'rgb(0, 255, 0)'],
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
return (
|
|
121
|
+
<YStack gap="$4" padding="$4" flex={1}>
|
|
122
|
+
<Paragraph fontWeight="bold">Raw Animated.Value Test</Paragraph>
|
|
123
|
+
<Paragraph size="$2" color="$color10">
|
|
124
|
+
Tests Animated.createAnimatedComponent with AnimatedValue styles
|
|
125
|
+
</Paragraph>
|
|
126
|
+
|
|
127
|
+
<XStack gap="$4">
|
|
128
|
+
<Button testID="animate-in-trigger" onPress={animateIn} disabled={isAnimated}>
|
|
129
|
+
Animate In
|
|
130
|
+
</Button>
|
|
131
|
+
<Button testID="animate-out-trigger" onPress={animateOut} disabled={!isAnimated}>
|
|
132
|
+
Animate Out
|
|
133
|
+
</Button>
|
|
134
|
+
</XStack>
|
|
135
|
+
|
|
136
|
+
{/* The animated box */}
|
|
137
|
+
<AnimatedView
|
|
138
|
+
testID="animated-box"
|
|
139
|
+
style={[
|
|
140
|
+
styles.box,
|
|
141
|
+
{
|
|
142
|
+
opacity,
|
|
143
|
+
backgroundColor,
|
|
144
|
+
transform: [{ translateY }, { scale }],
|
|
145
|
+
},
|
|
146
|
+
]}
|
|
147
|
+
/>
|
|
148
|
+
|
|
149
|
+
{/* Debug info */}
|
|
150
|
+
<YStack
|
|
151
|
+
backgroundColor="$background"
|
|
152
|
+
padding="$2"
|
|
153
|
+
borderRadius="$2"
|
|
154
|
+
borderWidth={1}
|
|
155
|
+
borderColor="$borderColor"
|
|
156
|
+
>
|
|
157
|
+
<Paragraph size="$1" fontFamily="$mono">
|
|
158
|
+
Debug Info:
|
|
159
|
+
</Paragraph>
|
|
160
|
+
<Paragraph testID="debug-info" size="$1" fontFamily="$mono" whiteSpace="pre">
|
|
161
|
+
{debugInfo}
|
|
162
|
+
</Paragraph>
|
|
163
|
+
</YStack>
|
|
164
|
+
|
|
165
|
+
{/* Display computed style for testing */}
|
|
166
|
+
<ComputedStyleDisplay targetId="animated-box" />
|
|
167
|
+
</YStack>
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Component that polls and displays the computed style of a target element
|
|
173
|
+
*/
|
|
174
|
+
function ComputedStyleDisplay({ targetId }: { targetId: string }) {
|
|
175
|
+
const [computedStyles, setComputedStyles] = useState<string>('')
|
|
176
|
+
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
let rafId: number
|
|
179
|
+
let running = true
|
|
180
|
+
|
|
181
|
+
const poll = () => {
|
|
182
|
+
if (!running) return
|
|
183
|
+
|
|
184
|
+
const el = document.querySelector(`[data-testid="${targetId}"]`) as HTMLElement
|
|
185
|
+
if (el) {
|
|
186
|
+
const style = getComputedStyle(el)
|
|
187
|
+
const info = {
|
|
188
|
+
opacity: style.opacity,
|
|
189
|
+
transform: style.transform,
|
|
190
|
+
backgroundColor: style.backgroundColor,
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const newStyles = JSON.stringify(info, null, 2)
|
|
194
|
+
setComputedStyles((prev) => {
|
|
195
|
+
if (prev !== newStyles) {
|
|
196
|
+
console.log('[RAW_ANIMATED] Computed style changed:', info)
|
|
197
|
+
}
|
|
198
|
+
return newStyles
|
|
199
|
+
})
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
rafId = requestAnimationFrame(poll)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
poll()
|
|
206
|
+
|
|
207
|
+
return () => {
|
|
208
|
+
running = false
|
|
209
|
+
cancelAnimationFrame(rafId)
|
|
210
|
+
}
|
|
211
|
+
}, [targetId])
|
|
212
|
+
|
|
213
|
+
return (
|
|
214
|
+
<YStack backgroundColor="$backgroundHover" padding="$2" borderRadius="$2">
|
|
215
|
+
<Paragraph size="$1" fontFamily="$mono">
|
|
216
|
+
Computed Styles:
|
|
217
|
+
</Paragraph>
|
|
218
|
+
<Paragraph testID="computed-styles" size="$1" fontFamily="$mono" whiteSpace="pre">
|
|
219
|
+
{computedStyles}
|
|
220
|
+
</Paragraph>
|
|
221
|
+
</YStack>
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const styles = StyleSheet.create({
|
|
226
|
+
box: {
|
|
227
|
+
width: 100,
|
|
228
|
+
height: 100,
|
|
229
|
+
borderRadius: 8,
|
|
230
|
+
},
|
|
231
|
+
})
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { Select, H2, Paragraph, YStack } from '@hanzo/gui'
|
|
3
|
+
import { ChevronDown } from '@hanzogui/lucide-icons-2'
|
|
4
|
+
|
|
5
|
+
const items = [
|
|
6
|
+
{ value: 'apple', label: 'Apple' },
|
|
7
|
+
{ value: 'banana', label: 'Banana' },
|
|
8
|
+
{ value: 'orange', label: 'Orange' },
|
|
9
|
+
{ value: 'grape', label: 'Grape' },
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
export function RemoveScrollCase() {
|
|
13
|
+
const [value, setValue] = React.useState('')
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<YStack $platform-web={{ minHeight: '200vh' }} padding="$4" gap="$4">
|
|
17
|
+
<H2>RemoveScroll Test</H2>
|
|
18
|
+
|
|
19
|
+
<Paragraph data-testid="scroll-marker">
|
|
20
|
+
Scroll down to find the select. This page is tall enough to scroll.
|
|
21
|
+
</Paragraph>
|
|
22
|
+
|
|
23
|
+
{Array.from({ length: 10 }).map((_, i) => (
|
|
24
|
+
<Paragraph key={i}>
|
|
25
|
+
Filler paragraph {i + 1}. Lorem ipsum dolor sit amet, consectetur adipiscing
|
|
26
|
+
elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
|
27
|
+
</Paragraph>
|
|
28
|
+
))}
|
|
29
|
+
|
|
30
|
+
<Select
|
|
31
|
+
value={value}
|
|
32
|
+
onValueChange={setValue}
|
|
33
|
+
renderValue={(v) => items.find((item) => item.value === v)?.label}
|
|
34
|
+
>
|
|
35
|
+
<Select.Trigger data-testid="rs-select-trigger" iconAfter={ChevronDown}>
|
|
36
|
+
<Select.Value placeholder="Pick a fruit" />
|
|
37
|
+
</Select.Trigger>
|
|
38
|
+
|
|
39
|
+
<Select.Content data-testid="rs-select-content">
|
|
40
|
+
<Select.Viewport data-testid="rs-select-viewport">
|
|
41
|
+
<Select.Group>
|
|
42
|
+
{items.map((item, i) => (
|
|
43
|
+
<Select.Item
|
|
44
|
+
key={item.value}
|
|
45
|
+
data-testid={`rs-select-${item.value}`}
|
|
46
|
+
value={item.value}
|
|
47
|
+
index={i}
|
|
48
|
+
>
|
|
49
|
+
<Select.ItemText>{item.label}</Select.ItemText>
|
|
50
|
+
<Select.ItemIndicator />
|
|
51
|
+
</Select.Item>
|
|
52
|
+
))}
|
|
53
|
+
</Select.Group>
|
|
54
|
+
</Select.Viewport>
|
|
55
|
+
</Select.Content>
|
|
56
|
+
</Select>
|
|
57
|
+
|
|
58
|
+
{Array.from({ length: 20 }).map((_, i) => (
|
|
59
|
+
<Paragraph key={`after-${i}`}>
|
|
60
|
+
After-select paragraph {i + 1}. Ut enim ad minim veniam, quis nostrud
|
|
61
|
+
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
|
62
|
+
</Paragraph>
|
|
63
|
+
))}
|
|
64
|
+
</YStack>
|
|
65
|
+
)
|
|
66
|
+
}
|