Skip to content

Window

The window component is a user interface component that allows users to navigate through multiple slots, displaying one slot at a time. They are commonly used for presenting filters and submenus that may not need to be visible immediately. With windows, users can interact with various options without cluttering the primary interface, creating a seamless user experience.

Slots

default ({
    back(to?: string): void;
    navigate(to?: string): void;
})

The primary view of the window.

[key: string] ({
    back(to?: string): void;
    navigate(to?: string): void;
})

A slot for additional views.

Examples

Basic

A basic window.

<template>
    <FluxFlyout>
        <template #opener="{ open }">
            <FluxSecondaryButton
                icon-leading="ellipsis-h"
                label="Open window"
                @click="open"/>
        </template>

        <template #default>
            <FluxPane
                v-height-transition
                style="width: 300px">
                <FluxWindow>
                    <template #default="{navigate}">
                        <FluxMenu>
                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="arrow-up-arrow-down"
                                    command="Leads"
                                    command-icon="angle-right"
                                    label="Sort by"
                                    @click="navigate('sorting')"/>

                                <FluxMenuItem
                                    icon-leading="calendar"
                                    command="Last year"
                                    command-icon="angle-right"
                                    label="Period"
                                    @click="navigate('period')"/>

                                <FluxMenuItem
                                    icon-leading="star"
                                    command="2 selected"
                                    command-icon="angle-right"
                                    label="Status"
                                    @click="navigate('status')"/>
                            </FluxMenuGroup>

                            <FluxSeparator/>

                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="clone"
                                    label="Duplicate"/>

                                <FluxMenuItem
                                    icon-leading="trash"
                                    label="Delete"/>

                                <FluxMenuItem
                                    icon-leading="arrow-down-to-line"
                                    label="Download CSV"/>

                                <FluxMenuItem
                                    icon-leading="arrow-down-to-line"
                                    label="Download PDF"/>
                            </FluxMenuGroup>

                            <FluxSeparator/>

                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="gear"
                                    label="Preferences"/>
                            </FluxMenuGroup>
                        </FluxMenu>
                    </template>

                    <template #sorting="{ back }">
                        <FluxMenu>
                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="angle-left"
                                    label="Back"
                                    @click="back()"/>
                            </FluxMenuGroup>

                            <FluxSeparator/>

                            <FluxMenuGroup>
                                <FluxMenuItem
                                    is-active
                                    label="Leads"
                                    @click="back()"/>

                                <FluxMenuItem
                                    label="Most traffic"
                                    @click="back()"/>

                                <FluxMenuItem
                                    label="Recent"
                                    @click="back()"/>
                            </FluxMenuGroup>
                        </FluxMenu>
                    </template>

                    <template #period="{ back }">
                        <FluxMenu>
                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="angle-left"
                                    label="Back"
                                    @click="back()"/>
                            </FluxMenuGroup>

                            <FluxSeparator/>

                            <FluxMenuGroup>
                                <FluxMenuItem
                                    label="Today"
                                    @click="back()"/>

                                <FluxMenuItem
                                    label="Last week"
                                    @click="back()"/>

                                <FluxMenuItem
                                    label="Last month"
                                    @click="back()"/>

                                <FluxMenuItem
                                    is-active
                                    label="Last year"
                                    @click="back()"/>

                                <FluxMenuItem
                                    label="Last 5 years"
                                    @click="back()"/>
                            </FluxMenuGroup>
                        </FluxMenu>
                    </template>

                    <template #status="{ back }">
                        <FluxMenu>
                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="angle-left"
                                    label="Back"
                                    @click="back()"/>
                            </FluxMenuGroup>

                            <FluxSeparator/>

                            <FluxMenuGroup>
                                <FluxMenuItem
                                    icon-leading="circle-check"
                                    label="Active"
                                    @click="back()"/>

                                <FluxMenuItem
                                    icon-leading="circle-check"
                                    label="Concept"
                                    @click="back()"/>

                                <FluxMenuItem
                                    icon-leading="circle"
                                    label="Concluded"
                                    @click="back()"/>

                                <FluxMenuItem
                                    icon-leading="circle"
                                    label="Removed"
                                    @click="back()"/>
                            </FluxMenuGroup>
                        </FluxMenu>
                    </template>
                </FluxWindow>
            </FluxPane>
        </template>
    </FluxFlyout>
</template>

<script
    setup
    lang="ts">
    import { FluxFlyout, FluxMenu, FluxMenuGroup, FluxMenuItem, FluxPane, FluxSecondaryButton, FluxSeparator, FluxWindow } from '@flux-ui/components';
    import { vHeightTransition } from '@flux-ui/internals';
</script>