Primary

<script setup lang="ts">
  import {
    Button,
    Popover,
  } from '@pikaso/core'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center">
    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Open Popover</Popover.Trigger>
      </Button>

      <Popover.Content>
        <div class="flex flex-col gap-2">
          <h3 class="font-medium">Popover Title</h3>
          <p class="text-surface-foreground-2 text-sm">
            This is a basic popover content with some text.
          </p>
        </div>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

Alignment

<script setup lang="ts">
  import {
    Button,
    Popover,
  } from '@pikaso/core'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center gap-4">
    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Start Aligned</Popover.Trigger>
      </Button>

      <Popover.Content align="start">
        <p class="text-sm">
          This popover is
          <strong>start</strong>
          aligned.
        </p>
      </Popover.Content>
    </Popover.Root>

    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Center Aligned</Popover.Trigger>
      </Button>

      <Popover.Content align="center">
        <p class="text-sm">
          This popover is
          <strong>center</strong>
          aligned.
        </p>
      </Popover.Content>
    </Popover.Root>

    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>End Aligned</Popover.Trigger>
      </Button>

      <Popover.Content align="end">
        <p class="text-sm">
          This popover is
          <strong>end</strong>
          aligned.
        </p>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

Side Positions

<script setup lang="ts">
  import {
    Button,
    Popover,
  } from '@pikaso/core'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex flex-wrap items-center justify-center gap-4">
    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Top</Popover.Trigger>
      </Button>

      <Popover.Content side="top">
        <p class="text-sm">
          This popover appears on the
          <strong>top</strong>
          .
        </p>
      </Popover.Content>
    </Popover.Root>

    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Right</Popover.Trigger>
      </Button>

      <Popover.Content side="right">
        <p class="text-sm">
          This popover appears on the
          <strong>right</strong>
          .
        </p>
      </Popover.Content>
    </Popover.Root>

    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Bottom</Popover.Trigger>
      </Button>

      <Popover.Content side="bottom">
        <p class="text-sm">
          This popover appears on the
          <strong>bottom</strong>
          .
        </p>
      </Popover.Content>
    </Popover.Root>

    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Left</Popover.Trigger>
      </Button>

      <Popover.Content side="left">
        <p class="text-sm">
          This popover appears on the
          <strong>left</strong>
          .
        </p>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

With Close Button

<script setup lang="ts">
  import {
    Button,
    Popover,
  } from '@pikaso/core'
  import { X } from 'lucide-vue-next'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center">
    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Open With Close Button</Popover.Trigger>
      </Button>

      <Popover.Content class="relative">
        <Popover.Close>
          <X class="size-4" />
        </Popover.Close>

        <div class="flex flex-col gap-2 pt-2">
          <h3 class="font-medium">Dismissible Popover</h3>
          <p class="text-surface-foreground-2 text-sm">
            This popover includes a close button in the top-right corner.
          </p>
          <p class="text-surface-foreground-2 text-sm">
            You can also close it by clicking outside or pressing Escape.
          </p>
        </div>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

Custom Content Styling

<script setup lang="ts">
  import {
    Button,
    Popover,
  } from '@pikaso/core'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center">
    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Custom Styled Popover</Popover.Trigger>
      </Button>

      <Popover.Content
        class="bg-primary-0 text-primary-foreground-0 max-w-xs overflow-hidden p-0 dark"
      >
        <div class="p-4">
          <h3 class="text-lg font-semibold">Custom Styled Popover</h3>
          <p class="mt-2 text-sm">
            This popover has custom styling applied using regular Tailwind
            classes.
          </p>
        </div>
        <div class="bg-primary-foreground-0/10 p-4">
          <Button
            variant="ghost"
            class="w-full justify-center"
          >
            Action Button
          </Button>
        </div>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

With Tooltip

<script setup lang="ts">
  import {
    IconButton,
    Popover,
  } from '@pikaso/core'
  import { Banana } from 'lucide-vue-next'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center gap-2">
    <Popover.Root>
      <IconButton
        size="sm"
        tooltip="Tooltip!"
        tooltip-position="top"
        variant="ghost"
        as-child
      >
        <Popover.Trigger>
          <Banana class="size-4" />
        </Popover.Trigger>
      </IconButton>

      <Popover.Content>
        <p>Hello</p>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>

With Scope

<script setup lang="ts">
  import {
    IconButton,
    Popover,
  } from '@pikaso/core'
  import { Banana } from 'lucide-vue-next'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center gap-2">
    <Popover.Root>
      <template #default="{ open }">
        <IconButton
          size="sm"
          :aria-pressed="open"
          tooltip="Tooltip!"
          tooltip-position="top"
          variant="ghost"
          as-child
        >
          <Popover.Trigger>
            <Banana class="size-4" />
          </Popover.Trigger>
        </IconButton>

        <Popover.Content>
          <p>The icon appears pressed if the popover is open</p>
        </Popover.Content>
      </template>
    </Popover.Root>
  </div>
</template>

With Select Inside

<script setup lang="ts">
  import {
    Button,
    Popover,
    Select,
  } from '@pikaso/core'
  import { useHotkeyGlobalContext } from '@pikaso/core'

  useHotkeyGlobalContext()
</script>

<template>
  <div class="flex items-center justify-center">
    <Popover.Root>
      <Button
        variant="primary"
        as-child
      >
        <Popover.Trigger>Open Popover</Popover.Trigger>
      </Button>

      <Popover.Content>
        <Select.Root>
          <Select.TriggerSimple class="w-full">
            Open Popover
          </Select.TriggerSimple>

          <Select.Content>
            <Select.ItemSimple
              value="1"
              label="Item 1"
            />
            <Select.ItemSimple
              value="2"
              label="Item 2"
            />
            <Select.ItemSimple value="3" label="Item 3" />
          </Select.Content>
        </Select.Root>
      </Popover.Content>
    </Popover.Root>
  </div>
</template>