Flyout

A container component that shows or hides content relative to a trigger button, supporting both vertical and horizontal arrangements.

import { Flyout, Button, T } from '@kaynora/ui'

export default function () {
  return (
    <Flyout label='Products'>
      <div style={{
        display: 'flex',
        flexFlow: 'column',
        padding: '20px',
        gap: '20px',
      }}>
        <T color='dimmed' weight='500' size='s'>POWERFUL ANALYTICS</T>

        <div style={{
          display: 'flex',
          flexFlow: 'row nowrap',
          gap: '20px',
        }}>
          <div>
            <Button surface='hollow'><T>Dashboard</T></Button>
            <Button surface='hollow'><T>Analytics</T></Button>
            <Button surface='hollow'><T>Security & Privacy</T></Button>
          </div>

          <div>
            <Button surface='hollow'><T>Data Management</T></Button>
            <Button surface='hollow'><T>Monitoring</T></Button>
          </div>
        </div>
      </div>
    </Flyout>
  )
}

The arrangement prop determines the direction the content expands. Vertical is the default; horizontal is used in submenus.

import { Flyout, Button, T } from '@kaynora/ui'

export default function () {
  return (
    <div style={{
      display: 'flex',
      gap: '40px',
    }}>
      <Flyout label='Vertical' arrangement='vertical'>
        <Button surface='hollow'><T>Option 1</T></Button>
        <Button surface='hollow'><T>Option 2</T></Button>
      </Flyout>
      <Flyout label='Horizontal' arrangement='horizontal'>
        <Button surface='hollow'><T>Option 1</T></Button>
        <Button surface='hollow'><T>Option 2</T></Button>
      </Flyout>
    </div>
  )
}

The isOpen and onOpenChange props allow controlling the flyout state from the parent component.

import { Flyout, Button, T } from '@kaynora/ui'
import { useState } from 'react'

export default function () {
  const [isOpen, setIsOpen] = useState(false)

  return (
    <Flyout label='Menu' isOpen={isOpen} onOpenChange={setIsOpen}>
      <Button surface='hollow'><T>Edit</T></Button>
      <Button surface='hollow'><T>Delete</T></Button>
    </Flyout>
  )
}
<Flyout />
PropTypeDefault
children
ReactElement | ReactElement[]
label
string
defaultOpen
boolean
false
isOpen
boolean
undefined
onOpenChange
(isOpen: boolean) => void
undefined
size
's' | 'm' | 'l'
'm'
arrangement
'vertical' | 'horizontal'
'vertical'
disabled
boolean
false
internal
{
  root: HTMLDivElementProps
  button: ButtonProps
  typography: TypographyProps
  popover: PopoverProps
}
undefined