@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,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright E2E tests for Sheet drag resistance behavior
|
|
3
|
+
*
|
|
4
|
+
* Ported from Detox tests to verify web implementation matches native quality.
|
|
5
|
+
*
|
|
6
|
+
* Tests three scenarios:
|
|
7
|
+
* 1. Sheet without ScrollView - drag up should show resistance
|
|
8
|
+
* 2. Sheet with ScrollView but NO scrollable content - drag should move sheet, not scroll
|
|
9
|
+
* 3. Sheet with ScrollView and scrollable content - drag up at top should show resistance
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { expect, test, type Page } from '@playwright/test'
|
|
13
|
+
import { setupPage } from './test-utils'
|
|
14
|
+
|
|
15
|
+
// mobile viewport with touch support for realistic sheet testing
|
|
16
|
+
test.use({
|
|
17
|
+
viewport: { width: 390, height: 844 },
|
|
18
|
+
hasTouch: true,
|
|
19
|
+
isMobile: true,
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
test.beforeEach(async ({ page }) => {
|
|
23
|
+
await setupPage(page, { name: 'SheetDragResistCase', type: 'useCase' })
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* perform a drag gesture using mouse events
|
|
28
|
+
*/
|
|
29
|
+
async function dragSheet(
|
|
30
|
+
page: Page,
|
|
31
|
+
startX: number,
|
|
32
|
+
startY: number,
|
|
33
|
+
deltaY: number,
|
|
34
|
+
options: { steps?: number; stepDelay?: number } = {}
|
|
35
|
+
) {
|
|
36
|
+
const { steps = 20, stepDelay = 16 } = options
|
|
37
|
+
|
|
38
|
+
await page.mouse.move(startX, startY)
|
|
39
|
+
await page.mouse.down()
|
|
40
|
+
|
|
41
|
+
for (let i = 1; i <= steps; i++) {
|
|
42
|
+
await page.mouse.move(startX, startY + (deltaY * i) / steps)
|
|
43
|
+
await page.waitForTimeout(stepDelay)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
await page.mouse.up()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
test.describe('Bug #3: Sheet without ScrollView - drag up resistance', () => {
|
|
50
|
+
/**
|
|
51
|
+
* When at top snap point, dragging up should apply resistance
|
|
52
|
+
* (sheet moves slightly then springs back, showing visual rubber band effect)
|
|
53
|
+
*/
|
|
54
|
+
test('should show resistance when dragging up on handle at top position', async ({
|
|
55
|
+
page,
|
|
56
|
+
}) => {
|
|
57
|
+
await page.getByTestId('no-scroll-trigger').click()
|
|
58
|
+
await page.waitForTimeout(600)
|
|
59
|
+
|
|
60
|
+
const frame = page.getByTestId('no-scroll-frame')
|
|
61
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
62
|
+
|
|
63
|
+
// verify we're at position 0 (top snap point)
|
|
64
|
+
await expect(page.getByTestId('no-scroll-snap-indicator')).toContainText(
|
|
65
|
+
'Current snap point: 0'
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
// get handle position
|
|
69
|
+
const handle = page.getByTestId('no-scroll-handle')
|
|
70
|
+
const handleBox = await handle.boundingBox()
|
|
71
|
+
expect(handleBox).toBeTruthy()
|
|
72
|
+
|
|
73
|
+
// drag UP on handle - this should show resistance and spring back
|
|
74
|
+
await dragSheet(
|
|
75
|
+
page,
|
|
76
|
+
handleBox!.x + handleBox!.width / 2,
|
|
77
|
+
handleBox!.y + handleBox!.height / 2,
|
|
78
|
+
-150,
|
|
79
|
+
{ steps: 25, stepDelay: 16 }
|
|
80
|
+
)
|
|
81
|
+
await page.waitForTimeout(600)
|
|
82
|
+
|
|
83
|
+
// sheet should still be at position 0 (didn't dismiss or change snap)
|
|
84
|
+
await expect(page.getByTestId('no-scroll-snap-indicator')).toContainText(
|
|
85
|
+
'Current snap point: 0'
|
|
86
|
+
)
|
|
87
|
+
// frame should still be visible (sheet didn't disappear)
|
|
88
|
+
await expect(frame).toBeVisible()
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
test('should show resistance when dragging up on frame content', async ({ page }) => {
|
|
92
|
+
await page.getByTestId('no-scroll-trigger').click()
|
|
93
|
+
await page.waitForTimeout(600)
|
|
94
|
+
|
|
95
|
+
const frame = page.getByTestId('no-scroll-frame')
|
|
96
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
97
|
+
|
|
98
|
+
// verify at position 0
|
|
99
|
+
await expect(page.getByTestId('no-scroll-snap-indicator')).toContainText(
|
|
100
|
+
'Current snap point: 0'
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
// reset tracking
|
|
104
|
+
await page.getByTestId('no-scroll-reset').click()
|
|
105
|
+
|
|
106
|
+
// get frame position for dragging on content
|
|
107
|
+
const frameBox = await frame.boundingBox()
|
|
108
|
+
expect(frameBox).toBeTruthy()
|
|
109
|
+
|
|
110
|
+
// drag UP on frame content - should show resistance
|
|
111
|
+
await dragSheet(
|
|
112
|
+
page,
|
|
113
|
+
frameBox!.x + frameBox!.width / 2,
|
|
114
|
+
frameBox!.y + frameBox!.height / 2,
|
|
115
|
+
-200,
|
|
116
|
+
{ steps: 30, stepDelay: 16 }
|
|
117
|
+
)
|
|
118
|
+
await page.waitForTimeout(600)
|
|
119
|
+
|
|
120
|
+
// sheet should snap back to position 0
|
|
121
|
+
await expect(page.getByTestId('no-scroll-snap-indicator')).toContainText(
|
|
122
|
+
'Current snap point: 0'
|
|
123
|
+
)
|
|
124
|
+
await expect(frame).toBeVisible()
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
test('should drag sheet down to lower snap point', async ({ page }) => {
|
|
128
|
+
await page.getByTestId('no-scroll-trigger').click()
|
|
129
|
+
await page.waitForTimeout(600)
|
|
130
|
+
|
|
131
|
+
const frame = page.getByTestId('no-scroll-frame')
|
|
132
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
133
|
+
|
|
134
|
+
// verify at position 0
|
|
135
|
+
await expect(page.getByTestId('no-scroll-snap-indicator')).toContainText(
|
|
136
|
+
'Current snap point: 0'
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
// get handle position
|
|
140
|
+
const handle = page.getByTestId('no-scroll-handle')
|
|
141
|
+
const handleBox = await handle.boundingBox()
|
|
142
|
+
expect(handleBox).toBeTruthy()
|
|
143
|
+
|
|
144
|
+
// drag DOWN on handle - should move to snap point 1
|
|
145
|
+
await dragSheet(
|
|
146
|
+
page,
|
|
147
|
+
handleBox!.x + handleBox!.width / 2,
|
|
148
|
+
handleBox!.y + handleBox!.height / 2,
|
|
149
|
+
200,
|
|
150
|
+
{ steps: 25, stepDelay: 16 }
|
|
151
|
+
)
|
|
152
|
+
await page.waitForTimeout(600)
|
|
153
|
+
|
|
154
|
+
// sheet should have moved to position 1
|
|
155
|
+
await expect(page.getByTestId('no-scroll-snap-indicator')).toContainText(
|
|
156
|
+
'Current snap point: 1'
|
|
157
|
+
)
|
|
158
|
+
})
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
test.describe('Bug #1: Sheet with non-scrollable ScrollView', () => {
|
|
162
|
+
/**
|
|
163
|
+
* When ScrollView has content that fits (not scrollable), dragging
|
|
164
|
+
* down should move the sheet to the next snap point.
|
|
165
|
+
*/
|
|
166
|
+
test('should drag sheet DOWN when ScrollView content is not scrollable', async ({
|
|
167
|
+
page,
|
|
168
|
+
}) => {
|
|
169
|
+
await page.getByTestId('non-scrollable-trigger').click()
|
|
170
|
+
await page.waitForTimeout(600)
|
|
171
|
+
|
|
172
|
+
const frame = page.getByTestId('non-scrollable-frame')
|
|
173
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
174
|
+
|
|
175
|
+
// reset counters
|
|
176
|
+
await page.getByTestId('non-scrollable-reset').click()
|
|
177
|
+
|
|
178
|
+
// verify we start at position 0
|
|
179
|
+
await expect(page.getByTestId('non-scrollable-snap-indicator')).toContainText(
|
|
180
|
+
'Current snap point: 0'
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
// get scrollview position
|
|
184
|
+
const scrollview = page.getByTestId('non-scrollable-scrollview')
|
|
185
|
+
const scrollviewBox = await scrollview.boundingBox()
|
|
186
|
+
expect(scrollviewBox).toBeTruthy()
|
|
187
|
+
|
|
188
|
+
// drag DOWN on the scrollview content - should drag the sheet
|
|
189
|
+
await dragSheet(
|
|
190
|
+
page,
|
|
191
|
+
scrollviewBox!.x + scrollviewBox!.width / 2,
|
|
192
|
+
scrollviewBox!.y + scrollviewBox!.height / 3,
|
|
193
|
+
200,
|
|
194
|
+
{ steps: 25, stepDelay: 16 }
|
|
195
|
+
)
|
|
196
|
+
await page.waitForTimeout(600)
|
|
197
|
+
|
|
198
|
+
// EXPECTED: position changes to 1 (sheet moved down to lower snap)
|
|
199
|
+
await expect(page.getByTestId('non-scrollable-snap-indicator')).toContainText(
|
|
200
|
+
'Current snap point: 1'
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
// scroll should still be at 0 (no scroll happened)
|
|
204
|
+
await expect(page.getByTestId('non-scrollable-scroll-y')).toContainText('Scroll Y: 0')
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
test('should let handle always be draggable regardless of ScrollView', async ({
|
|
208
|
+
page,
|
|
209
|
+
}) => {
|
|
210
|
+
await page.getByTestId('non-scrollable-trigger').click()
|
|
211
|
+
await page.waitForTimeout(600)
|
|
212
|
+
|
|
213
|
+
const frame = page.getByTestId('non-scrollable-frame')
|
|
214
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
215
|
+
|
|
216
|
+
// verify we start at position 0
|
|
217
|
+
await expect(page.getByTestId('non-scrollable-snap-indicator')).toContainText(
|
|
218
|
+
'Current snap point: 0'
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
// get handle position
|
|
222
|
+
const handle = page.getByTestId('non-scrollable-handle')
|
|
223
|
+
const handleBox = await handle.boundingBox()
|
|
224
|
+
expect(handleBox).toBeTruthy()
|
|
225
|
+
|
|
226
|
+
// drag down on handle - this should ALWAYS work
|
|
227
|
+
await dragSheet(
|
|
228
|
+
page,
|
|
229
|
+
handleBox!.x + handleBox!.width / 2,
|
|
230
|
+
handleBox!.y + handleBox!.height / 2,
|
|
231
|
+
200,
|
|
232
|
+
{ steps: 25, stepDelay: 16 }
|
|
233
|
+
)
|
|
234
|
+
await page.waitForTimeout(600)
|
|
235
|
+
|
|
236
|
+
// handle drag should move the sheet
|
|
237
|
+
await expect(page.getByTestId('non-scrollable-snap-indicator')).toContainText(
|
|
238
|
+
'Current snap point: 1'
|
|
239
|
+
)
|
|
240
|
+
})
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
test.describe('Bug #2: Sheet with scrollable ScrollView - drag up resistance', () => {
|
|
244
|
+
/**
|
|
245
|
+
* At scroll top and sheet top, dragging up should apply resistance
|
|
246
|
+
* (rubber band effect) rather than doing nothing.
|
|
247
|
+
*/
|
|
248
|
+
test('should show resistance when dragging up at scroll top and sheet top', async ({
|
|
249
|
+
page,
|
|
250
|
+
}, testInfo) => {
|
|
251
|
+
const driver = (testInfo.project?.metadata as any)?.animationDriver
|
|
252
|
+
if (driver === 'motion') {
|
|
253
|
+
// motion driver layout shifts cause spurious scroll events during handle drag
|
|
254
|
+
test.skip()
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
await page.getByTestId('scrollable-trigger').click()
|
|
258
|
+
await page.waitForTimeout(600)
|
|
259
|
+
|
|
260
|
+
const frame = page.getByTestId('scrollable-frame')
|
|
261
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
262
|
+
|
|
263
|
+
// reset tracking
|
|
264
|
+
await page.getByTestId('scrollable-reset').click()
|
|
265
|
+
|
|
266
|
+
// ensure we're at scroll top and position 0
|
|
267
|
+
await expect(page.getByTestId('scrollable-at-top')).toContainText(
|
|
268
|
+
'At scroll top: YES'
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
// get handle position
|
|
272
|
+
const handle = page.getByTestId('scrollable-handle')
|
|
273
|
+
const handleBox = await handle.boundingBox()
|
|
274
|
+
expect(handleBox).toBeTruthy()
|
|
275
|
+
|
|
276
|
+
// drag UP on handle - at scroll top + sheet top, should show resistance
|
|
277
|
+
await dragSheet(
|
|
278
|
+
page,
|
|
279
|
+
handleBox!.x + handleBox!.width / 2,
|
|
280
|
+
handleBox!.y + handleBox!.height / 2,
|
|
281
|
+
-150,
|
|
282
|
+
{ steps: 25, stepDelay: 16 }
|
|
283
|
+
)
|
|
284
|
+
await page.waitForTimeout(600)
|
|
285
|
+
|
|
286
|
+
// after rubber band, should still be at scroll top (no scroll happened)
|
|
287
|
+
await expect(page.getByTestId('scrollable-at-top')).toContainText(
|
|
288
|
+
'At scroll top: YES'
|
|
289
|
+
)
|
|
290
|
+
|
|
291
|
+
// frame should still be visible (sheet didn't disappear)
|
|
292
|
+
await expect(frame).toBeVisible()
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
test('should scroll content when swiping up inside scrollable sheet', async ({
|
|
296
|
+
page,
|
|
297
|
+
}) => {
|
|
298
|
+
await page.getByTestId('scrollable-trigger').click()
|
|
299
|
+
await page.waitForTimeout(600)
|
|
300
|
+
|
|
301
|
+
const frame = page.getByTestId('scrollable-frame')
|
|
302
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
303
|
+
|
|
304
|
+
// verify starting state - at scroll top
|
|
305
|
+
await expect(page.getByTestId('scrollable-at-top')).toContainText(
|
|
306
|
+
'At scroll top: YES'
|
|
307
|
+
)
|
|
308
|
+
|
|
309
|
+
// get scrollview
|
|
310
|
+
const scrollview = page.getByTestId('scrollable-scrollview')
|
|
311
|
+
const scrollviewBox = await scrollview.boundingBox()
|
|
312
|
+
expect(scrollviewBox).toBeTruthy()
|
|
313
|
+
|
|
314
|
+
// use wheel to scroll content (more reliable than drag for scroll)
|
|
315
|
+
await page.mouse.move(
|
|
316
|
+
scrollviewBox!.x + scrollviewBox!.width / 2,
|
|
317
|
+
scrollviewBox!.y + scrollviewBox!.height / 2
|
|
318
|
+
)
|
|
319
|
+
await page.mouse.wheel(0, 200)
|
|
320
|
+
await page.waitForTimeout(400)
|
|
321
|
+
|
|
322
|
+
// scroll Y should now be > 0
|
|
323
|
+
await expect(page.getByTestId('scrollable-at-top')).toContainText('At scroll top: NO')
|
|
324
|
+
})
|
|
325
|
+
|
|
326
|
+
test('should drag sheet DOWN via handle when at scroll top', async ({ page }) => {
|
|
327
|
+
await page.getByTestId('scrollable-trigger').click()
|
|
328
|
+
await page.waitForTimeout(600)
|
|
329
|
+
|
|
330
|
+
const frame = page.getByTestId('scrollable-frame')
|
|
331
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
332
|
+
|
|
333
|
+
// verify at scroll top
|
|
334
|
+
await expect(page.getByTestId('scrollable-at-top')).toContainText(
|
|
335
|
+
'At scroll top: YES'
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
// get handle position
|
|
339
|
+
const handle = page.getByTestId('scrollable-handle')
|
|
340
|
+
const handleBox = await handle.boundingBox()
|
|
341
|
+
expect(handleBox).toBeTruthy()
|
|
342
|
+
|
|
343
|
+
// drag DOWN on handle - should move sheet to position 1
|
|
344
|
+
await dragSheet(
|
|
345
|
+
page,
|
|
346
|
+
handleBox!.x + handleBox!.width / 2,
|
|
347
|
+
handleBox!.y + handleBox!.height / 2,
|
|
348
|
+
200,
|
|
349
|
+
{ steps: 25, stepDelay: 16 }
|
|
350
|
+
)
|
|
351
|
+
await page.waitForTimeout(600)
|
|
352
|
+
|
|
353
|
+
// sheet should be at lower snap point (position 1)
|
|
354
|
+
await expect(page.getByTestId('scrollable-snap-indicator')).toContainText(
|
|
355
|
+
'Position: 1'
|
|
356
|
+
)
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
test('should drag sheet DOWN via scrollview area when at scroll top', async ({
|
|
360
|
+
page,
|
|
361
|
+
}) => {
|
|
362
|
+
await page.getByTestId('scrollable-trigger').click()
|
|
363
|
+
await page.waitForTimeout(600)
|
|
364
|
+
|
|
365
|
+
const frame = page.getByTestId('scrollable-frame')
|
|
366
|
+
await expect(frame).toBeVisible({ timeout: 5000 })
|
|
367
|
+
|
|
368
|
+
// verify at scroll top
|
|
369
|
+
await expect(page.getByTestId('scrollable-at-top')).toContainText(
|
|
370
|
+
'At scroll top: YES'
|
|
371
|
+
)
|
|
372
|
+
|
|
373
|
+
// get scrollview position
|
|
374
|
+
const scrollview = page.getByTestId('scrollable-scrollview')
|
|
375
|
+
const scrollviewBox = await scrollview.boundingBox()
|
|
376
|
+
expect(scrollviewBox).toBeTruthy()
|
|
377
|
+
|
|
378
|
+
// drag DOWN on scrollview - should move sheet (not scroll, since at scroll top)
|
|
379
|
+
await dragSheet(
|
|
380
|
+
page,
|
|
381
|
+
scrollviewBox!.x + scrollviewBox!.width / 2,
|
|
382
|
+
scrollviewBox!.y + scrollviewBox!.height / 3,
|
|
383
|
+
200,
|
|
384
|
+
{ steps: 25, stepDelay: 16 }
|
|
385
|
+
)
|
|
386
|
+
await page.waitForTimeout(600)
|
|
387
|
+
|
|
388
|
+
// sheet should be at lower snap point (position 1)
|
|
389
|
+
await expect(page.getByTestId('scrollable-snap-indicator')).toContainText(
|
|
390
|
+
'Position: 1'
|
|
391
|
+
)
|
|
392
|
+
})
|
|
393
|
+
})
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { expect, test } from '@playwright/test'
|
|
2
|
+
import { setupPage } from './test-utils'
|
|
3
|
+
|
|
4
|
+
test.beforeEach(async ({ page }) => {
|
|
5
|
+
await setupPage(page, { name: 'SheetOnAnimationCompleteCase', type: 'useCase' })
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
test('onAnimationComplete fires with open:true after sheet opens', async ({ page }) => {
|
|
9
|
+
const trigger = page.locator('[data-testid="sheet-open-trigger"]')
|
|
10
|
+
const lastEvent = page.locator('[data-testid="last-event"]')
|
|
11
|
+
|
|
12
|
+
await trigger.waitFor({ state: 'visible' })
|
|
13
|
+
await trigger.click()
|
|
14
|
+
// wait for animation to complete
|
|
15
|
+
await page.waitForTimeout(1500)
|
|
16
|
+
|
|
17
|
+
await expect(lastEvent).toHaveText('opened')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
test('onAnimationComplete fires with open:false after sheet closes', async ({ page }) => {
|
|
21
|
+
const trigger = page.locator('[data-testid="sheet-open-trigger"]')
|
|
22
|
+
const closeBtn = page.locator('[data-testid="sheet-close"]')
|
|
23
|
+
const lastEvent = page.locator('[data-testid="last-event"]')
|
|
24
|
+
|
|
25
|
+
await trigger.click()
|
|
26
|
+
await page.waitForTimeout(1500)
|
|
27
|
+
await closeBtn.click()
|
|
28
|
+
await page.waitForTimeout(1500)
|
|
29
|
+
|
|
30
|
+
await expect(lastEvent).toHaveText('closed')
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test('onAnimationComplete fires exactly once per open/close cycle', async ({ page }) => {
|
|
34
|
+
const trigger = page.locator('[data-testid="sheet-open-trigger"]')
|
|
35
|
+
const closeBtn = page.locator('[data-testid="sheet-close"]')
|
|
36
|
+
const eventCount = page.locator('[data-testid="event-count"]')
|
|
37
|
+
|
|
38
|
+
await trigger.click()
|
|
39
|
+
await page.waitForTimeout(1500)
|
|
40
|
+
await expect(eventCount).toHaveText('1')
|
|
41
|
+
|
|
42
|
+
await closeBtn.click()
|
|
43
|
+
await page.waitForTimeout(1500)
|
|
44
|
+
await expect(eventCount).toHaveText('2')
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
test('sheet opacity is 0 after close animation completes (no early vanish)', async ({
|
|
48
|
+
page,
|
|
49
|
+
}) => {
|
|
50
|
+
const trigger = page.locator('[data-testid="sheet-open-trigger"]')
|
|
51
|
+
const closeBtn = page.locator('[data-testid="sheet-close"]')
|
|
52
|
+
const frame = page.locator('[data-testid="sheet-frame"]').first()
|
|
53
|
+
|
|
54
|
+
await trigger.click()
|
|
55
|
+
await page.waitForTimeout(1500)
|
|
56
|
+
await expect(frame).toBeVisible()
|
|
57
|
+
|
|
58
|
+
await closeBtn.click()
|
|
59
|
+
// wait for animation to fully complete
|
|
60
|
+
await page.waitForTimeout(1500)
|
|
61
|
+
await expect(frame).not.toBeInViewport({ ratio: 0.5 })
|
|
62
|
+
})
|