Skip to content

Menu group

This component provides a container for grouping menu items, adjusting its orientation based on the isHorizontal prop. When set to horizontal, it applies a specific style; otherwise, it defaults to a vertical layout.

Props

is-horizontal?: boolean
Indicates that the items should flow horizontally.

Slots

default
The content of the group.

Examples

Vertical

Vertical groups are for combining menu items that share context.

<template>
    <FluxPane style="max-width: 300px">
        <FluxMenu>
            <FluxMenuGroup>
                <FluxMenuItem
                    icon-leading="grid-2"
                    label="Menu item"/>
            </FluxMenuGroup>

            <FluxMenuGroup>
                <FluxMenuItem
                    v-for="i of 3"
                    :is-highlighted="i === 1"
                    icon-leading="grid-2"
                    label="Menu item"/>
            </FluxMenuGroup>

            <FluxMenuGroup>
                <FluxMenuItem
                    v-for="_ of 2"
                    icon-leading="grid-2"
                    label="Menu item"/>
            </FluxMenuGroup>
        </FluxMenu>
    </FluxPane>
</template>

<script
    lang="ts"
    setup>
    import { FluxMenu, FluxMenuGroup, FluxMenuItem, FluxPane } from '@flux-ui/flux';
</script>

Horizontal

Horizontal groups are perfect for menu items that together form a single state, such as the alignment of text.

<template>
    <FluxPane style="max-width: 300px">
        <FluxMenu>
            <FluxMenuGroup is-horizontal>
                <FluxMenuItem
                    icon-leading="align-left"
                    is-highlighted/>

                <FluxMenuItem icon-leading="align-center"/>

                <FluxMenuItem icon-leading="align-right"/>

                <FluxMenuItem icon-leading="align-justify"/>
            </FluxMenuGroup>
        </FluxMenu>
    </FluxPane>
</template>

<script
    lang="ts"
    setup>
    import { FluxMenu, FluxMenuGroup, FluxMenuItem, FluxPane } from '@flux-ui/flux';
</script>

Separated

Groups can also be separated using a separator.

<template>
    <FluxPane style="max-width: 300px">
        <FluxMenu>
            <FluxMenuGroup>
                <FluxMenuItem
                    icon-leading="grid-2"
                    label="Menu item"/>
            </FluxMenuGroup>

            <FluxSeparator/>

            <FluxMenuGroup>
                <FluxMenuItem
                    v-for="i of 3"
                    :is-highlighted="i === 1"
                    icon-leading="grid-2"
                    label="Menu item"/>
            </FluxMenuGroup>

            <FluxSeparator/>

            <FluxMenuGroup>
                <FluxMenuItem
                    v-for="_ of 2"
                    icon-leading="grid-2"
                    label="Menu item"/>
            </FluxMenuGroup>
        </FluxMenu>
    </FluxPane>
</template>

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

Both

Menu's can also have both horizontal and vertical groups in them.

<template>
    <FluxPane style="max-width: 300px">
        <FluxMenu>
            <FluxMenuGroup is-horizontal>
                <FluxMenuItem
                    icon-leading="align-left"
                    is-highlighted/>

                <FluxMenuItem icon-leading="align-center"/>

                <FluxMenuItem icon-leading="align-right"/>

                <FluxMenuItem icon-leading="align-justify"/>
            </FluxMenuGroup>

            <FluxSeparator/>

            <FluxMenuGroup>
                <FluxMenuItem
                    icon-leading="list-ul"
                    label="Unordered list"/>

                <FluxMenuItem
                    icon-leading="list-ol"
                    label="Ordered list"/>

                <FluxMenuItem
                    icon-leading="image"
                    label="Image"/>

                <FluxMenuItem
                    icon-leading="play"
                    label="Video"/>
            </FluxMenuGroup>

            <FluxSeparator/>

            <FluxMenuGroup>
                <FluxMenuItem
                    icon-leading="indent"
                    label="Indent"/>

                <FluxMenuItem
                    icon-leading="outdent"
                    label="Outdent"/>
            </FluxMenuGroup>
        </FluxMenu>
    </FluxPane>
</template>

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