Migrating from ghl-ui Popover to HighRise Popover
The Popover component from ghl-ui has been reimplemented in HighRise UI with improved TypeScript support, better accessibility, and enhanced functionality. This guide will help you migrate your popovers to use the new HLPopover component.
Import Changes
diff
- import { UIPopover } from '@gohighlevel/ghl-ui'
+ import { HLPopover } from '@platform-ui/highrise'
Basic Usage Changes
diff
- <UIPopover
- trigger="click"
- placement="bottom"
- >
- <template #trigger>
- <UIButton>Click me</UIButton>
- </template>
- <div>Popover content</div>
- </UIPopover>
+ <HLPopover
+ id="my-popover"
+ trigger="click"
+ placement="bottom"
+ :show-arrow="false"
+ >
+ <template #trigger>
+ <HLButton id="popover-trigger">Click me</HLButton>
+ </template>
+ <template #header>
+ <div>Header content</div>
+ </template>
+ <div>Popover content</div>
+ <template #footer>
+ <div>Footer content</div>
+ </template>
+ </HLPopover>
Props Changes
Required Props
Prop | Type | Notes |
---|---|---|
id | string | Required for accessibility |
Optional Props
ghl-ui Prop | HighRise Prop | Type | Default | Notes |
---|---|---|---|---|
trigger | trigger | 'click' | 'hover' | 'focus' | 'manual' | 'click' | Trigger mode |
placement | placement | 'top' | 'bottom' | 'left' | 'right' + modifiers | 'bottom' | More placement options available |
showArrow | showArrow | boolean | false | Show/hide popover arrow |
width | width | number | 'trigger' | - | Width of the popover |
- | contentClass | string | - | Custom class for content |
- | headerClass | string | - | Custom class for header |
- | footerClass | string | - | Custom class for footer |
Slot Changes
Slot Name | Description |
---|---|
trigger | Element that triggers the popover |
header | Content to be displayed in popover header |
default | Main content of the popover |
footer | Content to be displayed in popover footer |
Examples
Basic Popover
vue
<template>
<HLPopover id="basic-popover" trigger="click" placement="bottom">
<template #trigger>
<HLButton id="popover-trigger">Click me</HLButton>
</template>
<div class="p-4">
<p>This is a basic popover content.</p>
</div>
</HLPopover>
</template>
<script setup>
import { HLPopover, HLButton } from '@platform-ui/highrise'
</script>
With Header and Footer
vue
<template>
<HLPopover id="advanced-popover" trigger="hover" placement="right" content-class="p-4" header-class="p-2" footer-class="p-2">
<template #trigger>
<HLButton id="popover-trigger">Hover me</HLButton>
</template>
<template #header>
<h3>Popover Title</h3>
</template>
<div>
<p>This is the main content of the popover.</p>
<p>You can add multiple elements here.</p>
</div>
<template #footer>
<HLButton id="popover-action" size="sm">Action</HLButton>
</template>
</HLPopover>
</template>
Manual Control
vue
<template>
<HLPopover id="controlled-popover" ref="popoverRef" trigger="manual" placement="top">
<template #trigger>
<HLButton id="popover-trigger" @click="togglePopover">Toggle Popover</HLButton>
</template>
<div class="p-4">Manually controlled popover content</div>
</HLPopover>
</template>
<script setup>
import { ref } from 'vue'
import { HLPopover, HLButton } from '@platform-ui/highrise'
const popoverRef = ref()
const togglePopover = () => {
popoverRef.value?.setShow(true)
}
</script>
Best Practices
- Always provide unique
id
props for accessibility - Use appropriate trigger modes based on context
- Consider mobile usability when choosing placement
- Keep content concise and focused
- Use header and footer slots for better organization
- Implement proper focus management
- Handle keyboard navigation
- Consider responsive behavior
- Follow accessibility guidelines
- Maintain consistent styling
Breaking Changes
- New required
id
prop for accessibility - Changed default arrow visibility to false
- Modified placement options
- New slot system
- Changed styling implementation
- Modified theme customization
- Changed event handling
- New manual control methods
- Modified accessibility implementation
- Changed animation system
TypeScript Support
The Popover component includes comprehensive TypeScript support:
typescript
interface HLPopoverProps {
id: string
trigger?: 'click' | 'hover' | 'focus' | 'manual'
placement?: string
showArrow?: boolean
width?: number | 'trigger'
contentClass?: string
headerClass?: string
footerClass?: string
}