Skip to content

Slide over

Props

mode?: in-out | out-in
Defines how transitions are coordinated between entering and leaving elements.
Default: out-in

Slots

default
The element that should be animated.

Snippet

vue
<template>
    <Preview :class="$style.slideOverPreview">
        <div :class="$style.overlayShade"/>

        <FluxSlideOverTransition>
            <div
                v-if="visible"
                :class="[$style.overlay, $style.slideOver, $style.isCurrent]">
                <FluxPane/>
            </div>
        </FluxSlideOverTransition>
    </Preview>
</template>

<script
    lang="ts"
    setup>
    import { useInterval } from '@basmilius/common';
    import { FluxPane, FluxSlideOverTransition } from '@flux-ui/components';
    import { ref } from 'vue';

    const visible = ref(true);

    useInterval(1500, () => {
        visible.value = !visible.value;
    });
</script>

<style
    lang="scss"
    module>
    .slideOverPreview {
        overflow: clip;
    }

    .slideOverPreview :local(.slideOver) {
        position: absolute;
        height: unset;
        width: unset;
        border-radius: var(--radius);

        :local(.pane) {
            height: 100%;
            width: 50%;
        }
    }

    .isCurrent,
    .slideOverTransitionLeaveActive {
        pointer-events: auto;
    }

    .overlayShade {
        position: absolute;
        height: unset;
        width: unset;
        inset: 0;

        &:not(:has(+ .overlay:not(.slideOverTransitionLeaveActive))) {
            opacity: 0;
        }
    }
</style>