Popover ​
Usage ​
Use a Button or any other component in the default slot of the Popover.
Then, use the #content
slot to add the content displayed when the Popover is open.
<template>
<B24Popover :b24ui="{ content: 'p-[10px]' }">
<B24Button label="Open" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
</template>
Mode ​
Use the mode
prop to change the mode of the Popover. Defaults to click
.
Details
<script setup lang="ts">
import type { PopoverProps } from '@bitrix24/b24ui-nuxt'
export interface ExampleProps {
mode?: PopoverProps['mode']
}
withDefaults(defineProps<ExampleProps>(), {
mode: 'click' as PopoverProps['mode']
})
</script>
<template>
<B24Popover
:mode="mode"
:b24ui="{ content: 'p-[10px]' }"
>
<B24Button :label="mode === 'click' ? 'Open' : 'Hover'" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
</template>
Delay ​
When using the hover
mode, you can use the open-delay
and close-delay
props to control the delay before the Popover is opened or closed.
Details
<script setup lang="ts">
export interface ExampleProps {
openDelay?: number
closeDelay?: number
}
withDefaults(defineProps<ExampleProps>(), {
openDelay: 500,
closeDelay: 300
})
</script>
<template>
<B24Popover
mode="hover"
:open-delay="openDelay"
:close-delay="closeDelay"
:b24ui="{ content: 'p-[10px]' }"
>
<B24Button label="Hover" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
</template>
Content ​
Use the content
prop to control how the Popover content is rendered, like its align
or side
for example.
Details
<script setup lang="ts">
import { computed } from 'vue'
import type { ContentAlignVariants, ContentSideVariants } from './../../dictionary'
export interface ExampleProps {
contentAlign?: ContentAlignVariants
contentSide?: ContentSideVariants
contentSideOffset?: number
}
const props = withDefaults(defineProps<ExampleProps>(), {
contentAlign: 'start' as ContentAlignVariants,
contentSide: 'top' as ContentSideVariants,
contentSideOffset: 8
})
const content = computed(() => {
return {
align: props.contentAlign,
side: props.contentSide,
sideOffset: props.contentSideOffset
}
})
</script>
<template>
<B24Popover
:content="content"
>
<B24Button label="Open" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
</template>
Arrow ​
Use the arrow
prop to display an arrow on the Popover.
Details
<script setup lang="ts">
import { computed } from 'vue'
import type { ContentAlignVariants, ContentSideVariants } from './../../dictionary'
export interface ExampleProps {
contentAlign?: ContentAlignVariants
contentSide?: ContentSideVariants
contentSideOffset?: number
}
const props = withDefaults(defineProps<ExampleProps>(), {
contentAlign: 'start' as ContentAlignVariants,
contentSide: 'top' as ContentSideVariants,
contentSideOffset: 8
})
const content = computed(() => {
return {
align: props.contentAlign,
side: props.contentSide,
sideOffset: props.contentSideOffset
}
})
</script>
<template>
<B24Popover
mode="hover"
arrow
:content="content"
:b24ui="{ content: 'p-[10px]' }"
>
<B24Button label="Hover" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
<B24Popover
arrow
:content="content"
:b24ui="{ content: 'p-[10px]' }"
>
<B24Button label="Open" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
</template>
Examples ​
Control open state ​
You can control the open state by using the default-open
prop or the v-model:open
directive.
TIP
In this example, leveraging defineShortcuts
, you can toggle the Popover by pressing O
.
Details
<script setup lang="ts">
import { ref, computed } from 'vue'
import type { ContentAlignVariants, ContentSideVariants } from './../../dictionary'
export interface ExampleProps {
contentAlign?: ContentAlignVariants
contentSide?: ContentSideVariants
contentSideOffset?: number
}
const props = withDefaults(defineProps<ExampleProps>(), {
contentAlign: 'start' as ContentAlignVariants,
contentSide: 'top' as ContentSideVariants,
contentSideOffset: 8
})
const content = computed(() => {
return {
align: props.contentAlign,
side: props.contentSide,
sideOffset: props.contentSideOffset
}
})
const open = ref(false)
defineShortcuts({
o: () => open.value = !open.value
})
</script>
<template>
<B24Popover
v-model:open="open"
:b24ui="{ content: 'p-[10px]' }"
:content="content"
>
<B24Button label="Open" />
<template #content>
<Placeholder class="size-[192px]" />
</template>
</B24Popover>
</template>
Disable dismissal ​
Set the dismissible
prop to false
to prevent the Popover from being closed when clicking outside of it or pressing escape. A close:prevent
event will be emitted when the user tries to close it.
Details
<script setup lang="ts">
import { ref, computed } from 'vue'
import Cross50Icon from '@bitrix24/b24icons-vue/actions/Cross50Icon'
import type { ContentAlignVariants, ContentSideVariants } from './../../dictionary'
export interface ExampleProps {
contentAlign?: ContentAlignVariants
contentSide?: ContentSideVariants
contentSideOffset?: number
}
const props = withDefaults(defineProps<ExampleProps>(), {
contentAlign: 'start' as ContentAlignVariants,
contentSide: 'top' as ContentSideVariants,
contentSideOffset: 8
})
const content = computed(() => {
return {
align: props.contentAlign,
side: props.contentSide,
sideOffset: props.contentSideOffset
}
})
const open = ref(false)
</script>
<template>
<B24Popover
v-model:open="open"
:dismissible="false"
arrow
:b24ui="{ content: 'p-[10px]' }"
:content="content"
>
<B24Button label="Open" />
<template #content>
<div class="flex items-center justify-between gap-4 mb-[4px]">
<ProseH2 class="mb-0.5">
Popover non-dismissible
</ProseH2>
<B24Button
color="air-tertiary"
:icon="Cross50Icon"
@click="open = false"
/>
</div>
<Placeholder class="w-full h-[192px]" />
</template>
</B24Popover>
</template>
Some content ​
Can be used for various purposes.
Details
<script setup lang="ts">
import { ref, computed } from 'vue'
import type { ContentAlignVariants, ContentSideVariants } from './../../dictionary'
import FileUploadIcon from '@bitrix24/b24icons-vue/main/FileUploadIcon'
export interface ExampleProps {
contentAlign?: ContentAlignVariants
contentSide?: ContentSideVariants
contentSideOffset?: number
}
const props = withDefaults(defineProps<ExampleProps>(), {
contentAlign: 'start' as ContentAlignVariants,
contentSide: 'top' as ContentSideVariants,
contentSideOffset: 8
})
const content = computed(() => {
return {
align: props.contentAlign,
side: props.contentSide,
sideOffset: props.contentSideOffset
}
})
const open = ref(false)
</script>
<template>
<B24Popover
v-model:open="open"
arrow
:b24ui="{ content: 'p-[10px]' }"
:content="content"
>
<B24Button label="Upload file" />
<template #content>
<div class="max-w-[192px] max-h-[292px]">
<div class="flex flex-col gap-[14px]">
<B24Separator />
<div class="w-full flex flex-row flex-nowrap items-center justify-start gap-3">
<div class="size-8xl rounded-xs border border-(--ui-color-divider-default) flex flex-col items-center justify-center">
<FileUploadIcon class="size-10 text-(--b24ui-typography-description-color)" />
</div>
<div class="flex flex-col flex-nowrap gap-1">
<ProseH5 class="mb-0">
start-ui.md
</ProseH5>
<ProseP small accent="less-more">
650 bytes
</ProseP>
</div>
</div>
<B24Separator />
<div class="w-full mt-[6px]">
<B24Textarea autofocus placeholder="Add a comment" autoresize :rows="1" :maxrows="4" />
</div>
</div>
</div>
<div class="mt-[20px] flex flex-row gap-[10px]">
<B24Button
rounded
label="Send"
color="air-primary-success"
size="sm"
@click="open = false"
/>
<B24Button
rounded
label="Cancel"
color="air-tertiary-no-accent"
size="sm"
@click="open = false"
/>
</div>
</template>
</B24Popover>
</template>
Long text ​
This is how you can display long text with scrolling.
Details
<script setup lang="ts">
import { computed } from 'vue'
import type { ContentAlignVariants, ContentSideVariants } from './../../dictionary'
export interface ExampleProps {
contentAlign?: ContentAlignVariants
contentSide?: ContentSideVariants
contentSideOffset?: number
}
const props = withDefaults(defineProps<ExampleProps>(), {
contentAlign: 'start' as ContentAlignVariants,
contentSide: 'top' as ContentSideVariants,
contentSideOffset: 8
})
const content = computed(() => {
return {
align: props.contentAlign,
side: props.contentSide,
sideOffset: props.contentSideOffset
}
})
</script>
<template>
<B24Popover
arrow
:b24ui="{ content: 'p-[10px] pe-[4px]' }"
:content="content"
>
<B24Button label="Long text" />
<template #content>
<div class="max-w-[192px] max-h-[192px] overflow-y-auto scrollbar-thin scrollbar-transparent">
<ProseP>Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Nec labore cetero theophrastus no, ei vero facer veritus nec. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui.</ProseP>
<ProseP>Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Ius dicat feugiat no, vix cu modo dicat principes. Ceteros assentior omittantur cum ad. Magna copiosae apeirian ius at. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Nisl omittam complectitur pro an, quem omnes munere id vix.</ProseP>
<ProseP>Per in illud petentium iudicabit, integre sententiae pro no. Sale liber et vel. . Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Solum vituperata definitiones te vis, vis alia falli doming ea. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an.</ProseP>
<ProseP>Nisl omittam complectitur pro an, quem omnes munere id vix. Odio contentiones sed cu, usu commodo prompta prodesset id. An eos iusto solet, id mel dico habemus. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula.</ProseP>
<ProseP>Tation delenit percipitur at vix. An nam debet instructior, commodo mediocrem id cum. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea.</ProseP>
<ProseP>Solum vituperata definitiones te vis, vis alia falli doming ea. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea. Tation delenit percipitur at vix. Sale liber et vel. Ius dicat feugiat no, vix cu modo dicat principes.</ProseP>
<ProseP>Postulant assueverit ea his. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Per cu iracundia splendide. Magna copiosae apeirian ius at. Mandamus abhorreant deseruisse mea at, mea elit deserunt persequeris at, in putant fuisset honestatis qui. Lorem ipsum dolor sit amet, an eos lorem ancillae expetenda, vim et utamur quaestio.</ProseP>
<ProseP>Postulant assueverit ea his. Sale liber et vel. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Sale liber et vel. Eu cum iuvaret debitis voluptatibus, esse perfecto reformidans id has.</ProseP>
<ProseP>Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. An eos iusto solet, id mel dico habemus. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Vivendum dignissim conceptam pri ut, ei vel partem audiam sapientem. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Per cu iracundia splendide. Per in illud petentium iudicabit, integre sententiae pro no. Ceteros assentior omittantur cum ad. Nisl omittam complectitur pro an, quem omnes munere id vix. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Nec labore cetero theophrastus no, ei vero facer veritus nec. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui.</ProseP>
<ProseP>Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Ius dicat feugiat no, vix cu modo dicat principes. Ceteros assentior omittantur cum ad. Magna copiosae apeirian ius at. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Nisl omittam complectitur pro an, quem omnes munere id vix.</ProseP>
<ProseP>Per in illud petentium iudicabit, integre sententiae pro no. Sale liber et vel. . Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Solum vituperata definitiones te vis, vis alia falli doming ea. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an.</ProseP>
<ProseP>Nisl omittam complectitur pro an, quem omnes munere id vix. Odio contentiones sed cu, usu commodo prompta prodesset id. An eos iusto solet, id mel dico habemus. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula.</ProseP>
<ProseP>Tation delenit percipitur at vix. An nam debet instructior, commodo mediocrem id cum. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea.</ProseP>
<ProseP>Solum vituperata definitiones te vis, vis alia falli doming ea. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea. Tation delenit percipitur at vix. Sale liber et vel. Ius dicat feugiat no, vix cu modo dicat principes.</ProseP>
<ProseP>Postulant assueverit ea his. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Per cu iracundia splendide. Magna copiosae apeirian ius at. Mandamus abhorreant deseruisse mea at, mea elit deserunt persequeris at, in putant fuisset honestatis qui. Lorem ipsum dolor sit amet, an eos lorem ancillae expetenda, vim et utamur quaestio.</ProseP>
<ProseP>Postulant assueverit ea his. Sale liber et vel. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Sale liber et vel. Eu cum iuvaret debitis voluptatibus, esse perfecto reformidans id has.</ProseP>
<ProseP>Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. An eos iusto solet, id mel dico habemus. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Vivendum dignissim conceptam pri ut, ei vel partem audiam sapientem. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Per cu iracundia splendide. Per in illud petentium iudicabit, integre sententiae pro no. Ceteros assentior omittantur cum ad. Nisl omittam complectitur pro an, quem omnes munere id vix. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Nec labore cetero theophrastus no, ei vero facer veritus nec. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui.</ProseP>
<ProseP>Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Ius dicat feugiat no, vix cu modo dicat principes. Ceteros assentior omittantur cum ad. Magna copiosae apeirian ius at. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Nisl omittam complectitur pro an, quem omnes munere id vix.</ProseP>
<ProseP>Per in illud petentium iudicabit, integre sententiae pro no. Sale liber et vel. . Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Solum vituperata definitiones te vis, vis alia falli doming ea. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an.</ProseP>
<ProseP>Nisl omittam complectitur pro an, quem omnes munere id vix. Odio contentiones sed cu, usu commodo prompta prodesset id. An eos iusto solet, id mel dico habemus. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula.</ProseP>
<ProseP>Tation delenit percipitur at vix. An nam debet instructior, commodo mediocrem id cum. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea.</ProseP>
<ProseP>Solum vituperata definitiones te vis, vis alia falli doming ea. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea. Tation delenit percipitur at vix. Sale liber et vel. Ius dicat feugiat no, vix cu modo dicat principes.</ProseP>
<ProseP>Postulant assueverit ea his. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Per cu iracundia splendide. Magna copiosae apeirian ius at. Mandamus abhorreant deseruisse mea at, mea elit deserunt persequeris at, in putant fuisset honestatis qui. Lorem ipsum dolor sit amet, an eos lorem ancillae expetenda, vim et utamur quaestio.</ProseP>
<ProseP>Postulant assueverit ea his. Sale liber et vel. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Sale liber et vel. Eu cum iuvaret debitis voluptatibus, esse perfecto reformidans id has.</ProseP>
<ProseP>Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. An eos iusto solet, id mel dico habemus. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Vivendum dignissim conceptam pri ut, ei vel partem audiam sapientem. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Per cu iracundia splendide. Per in illud petentium iudicabit, integre sententiae pro no. Ceteros assentior omittantur cum ad. Nisl omittam complectitur pro an, quem omnes munere id vix. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Nec labore cetero theophrastus no, ei vero facer veritus nec. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui.</ProseP>
<ProseP>Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Ius dicat feugiat no, vix cu modo dicat principes. Ceteros assentior omittantur cum ad. Magna copiosae apeirian ius at. Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Nisl omittam complectitur pro an, quem omnes munere id vix.</ProseP>
<ProseP>Per in illud petentium iudicabit, integre sententiae pro no. Sale liber et vel. . Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. Solum vituperata definitiones te vis, vis alia falli doming ea. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an.</ProseP>
<ProseP>Nisl omittam complectitur pro an, quem omnes munere id vix. Odio contentiones sed cu, usu commodo prompta prodesset id. An eos iusto solet, id mel dico habemus. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula.</ProseP>
<ProseP>Tation delenit percipitur at vix. An nam debet instructior, commodo mediocrem id cum. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea.</ProseP>
<ProseP>Solum vituperata definitiones te vis, vis alia falli doming ea. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Solum vituperata definitiones te vis, vis alia falli doming ea. Tation delenit percipitur at vix. Sale liber et vel. Ius dicat feugiat no, vix cu modo dicat principes.</ProseP>
<ProseP>Postulant assueverit ea his. Vel in dicant cetero phaedrum, usu populo interesset cu, eum ea facer nostrum pericula. Per cu iracundia splendide. Magna copiosae apeirian ius at. Mandamus abhorreant deseruisse mea at, mea elit deserunt persequeris at, in putant fuisset honestatis qui. Lorem ipsum dolor sit amet, an eos lorem ancillae expetenda, vim et utamur quaestio.</ProseP>
<ProseP>Postulant assueverit ea his. Sale liber et vel. Eam id posse dictas voluptua, veniam laoreet oportere no mea, quis regione suscipiantur mea an. Sale liber et vel. Eu cum iuvaret debitis voluptatibus, esse perfecto reformidans id has.</ProseP>
<ProseP>Vix paulo sanctus scripserit ex, te iriure insolens voluptatum qui. An eos iusto solet, id mel dico habemus. Elitr accommodare deterruisset eam te, vim munere pertinax consetetur at. Vivendum dignissim conceptam pri ut, ei vel partem audiam sapientem. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
<ProseP>Per cu iracundia splendide. Per in illud petentium iudicabit, integre sententiae pro no. Ceteros assentior omittantur cum ad. Nisl omittam complectitur pro an, quem omnes munere id vix. Per in illud petentium iudicabit, integre sententiae pro no.</ProseP>
</div>
</template>
</B24Popover>
</template>
With following cursor ​
You can make the Popover follow the cursor when hovering over an element using the reference
prop:
Details
<script setup lang="ts">
import { ref, computed } from 'vue'
const open = ref(false)
const anchor = ref({ x: 0, y: 0 })
const reference = computed(() => ({
getBoundingClientRect: () =>
({
width: 0,
height: 0,
left: anchor.value.x,
right: anchor.value.x,
top: anchor.value.y,
bottom: anchor.value.y,
...anchor.value
} as DOMRect)
}))
</script>
<template>
<B24Tooltip
:open="open"
:reference="reference"
:content="{ side: 'top', sideOffset: 16, updatePositionStrategy: 'always' }"
>
<div
class="flex items-center justify-center rounded-md border border-dashed border-accent-light-blue text-sm aspect-video w-[280px]"
@pointerenter="open = true"
@pointerleave="open = false"
@pointermove="(ev) => {
anchor.x = ev.clientX
anchor.y = ev.clientY
}"
>
Hover me
</div>
<template #content>
{{ anchor.x.toFixed(0) }} - {{ anchor.y.toFixed(0) }}
</template>
</B24Tooltip>
</template>
With anchor slot ​
You can use the #anchor
slot to position the Popover against a custom element.
WARNING
This slot only works when mode
is click
.
Details
<script setup lang="ts">
import { ref } from 'vue'
import Cross50Icon from '@bitrix24/b24icons-vue/actions/Cross50Icon'
const open = ref(false)
</script>
<template>
<B24Popover
v-model:open="open"
:dismissible="false"
:content="{
align: 'center',
side: 'bottom'
}"
:b24ui="{ content: 'w-[calc(var(--reka-popper-anchor-width)+10px)] p-[10px]' }"
>
<template #anchor>
<B24Input
placeholder="Focus to open"
@focus="open = true"
/>
</template>
<template #content>
<div class="flex items-center justify-between gap-4 mb-[4px]">
<ProseH2 class="mb-0.5">
Popover non-dismissible
</ProseH2>
<B24Button
color="air-tertiary"
:icon="Cross50Icon"
@click="open = false"
/>
</div>
<Placeholder class="w-full h-[192px]" />
</template>
</B24Popover>
</template>
API ​
Props ​
Prop | Default | Type |
---|---|---|
mode | "click" | "click" | "hover" The display mode of the popover. |
content | { side: 'bottom', sideOffset: 8, collisionPadding: 8 } | Omit<PopoverContentProps, "as" | "asChild" | "forceMount"> & Partial<EmitsToProps<PopoverContentImplEmits>> The content of the popover. |
arrow | false | boolean | Omit<PopoverArrowProps, "as" | "asChild"> Display an arrow alongside the popover. |
portal | true | string | false | true | HTMLElement Render the popover in a portal. |
reference | Element | VirtualElement The reference (or anchor) element that is being referred to for positioning.
If not provided will use the current component as anchor. | |
dismissible | true | boolean When `false`, the popover will not close when clicking outside or pressing escape. |
defaultOpen | boolean The open state of the popover when it is initially rendered. Use when you do not need to control its open state. | |
open | boolean The controlled open state of the popover. | |
modal | false | boolean The modality of the popover. When set to true, interaction with outside elements will be disabled and only popover content will be visible to screen readers. |
openDelay | 0 | number The duration from when the mouse enters the trigger until the hover card opens. |
closeDelay | 0 | number The duration from when the mouse leaves the trigger or content until the hover card closes. |
b24ui | { content?: ClassNameValue; arrow?: ClassNameValue; } |
Slots ​
Slot | Type |
---|---|
default | { open: boolean; } |
content | {} |
anchor | {} |
Emits ​
/**
* Emitted events for the Popover component
*/
interface PopoverEmits {
close:prevent: (payload: []) => void;
update:open: (payload: [value: boolean]) => void;
}