diff --git a/packages/@core/ui-kit/layout-ui/src/__tests__/header-scroll-state.test.ts b/packages/@core/ui-kit/layout-ui/src/__tests__/header-scroll-state.test.ts new file mode 100644 index 00000000..180d0f03 --- /dev/null +++ b/packages/@core/ui-kit/layout-ui/src/__tests__/header-scroll-state.test.ts @@ -0,0 +1,62 @@ +import { describe, expect, it } from 'vitest'; + +import { resolveHeaderHiddenOnScroll } from '../header-scroll-state'; + +const baseOptions = { + arrivedTop: false, + currentHidden: false, + directionDown: false, + directionUp: false, + headerHeight: 90, + scrollTop: 120, +}; + +describe('resolveHeaderHiddenOnScroll', () => { + it('should show the header near the top', () => { + expect( + resolveHeaderHiddenOnScroll({ + ...baseOptions, + directionDown: true, + scrollTop: 89, + }), + ).toBe(false); + }); + + it('should show the header when the top is reached', () => { + expect( + resolveHeaderHiddenOnScroll({ + ...baseOptions, + arrivedTop: true, + currentHidden: true, + }), + ).toBe(false); + }); + + it('should show the header while scrolling up', () => { + expect( + resolveHeaderHiddenOnScroll({ + ...baseOptions, + currentHidden: true, + directionUp: true, + }), + ).toBe(false); + }); + + it('should hide the header while scrolling down', () => { + expect( + resolveHeaderHiddenOnScroll({ + ...baseOptions, + directionDown: true, + }), + ).toBe(true); + }); + + it('should preserve the current state without a direction', () => { + expect( + resolveHeaderHiddenOnScroll({ + ...baseOptions, + currentHidden: true, + }), + ).toBe(true); + }); +}); diff --git a/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue b/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue index 3793f922..1089facd 100644 --- a/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue +++ b/packages/@core/ui-kit/layout-ui/src/components/layout-footer.vue @@ -28,6 +28,7 @@ const style = computed((): CSSProperties => { height: `${height}px`, marginBottom: show ? '0' : `-${height}px`, position: fixed ? 'fixed' : 'static', + transform: show ? 'translateY(0)' : 'translateY(100%)', width, zIndex, }; @@ -37,7 +38,7 @@ const style = computed((): CSSProperties => {