feat(chart): add presentation mode
Some checks failed
Package component / package (push) Failing after 50s

This commit is contained in:
李启源
2026-07-29 12:12:03 +08:00
parent 312e7fde52
commit f97ff24cdf
22 changed files with 478 additions and 26 deletions

View File

@@ -23,6 +23,7 @@ interface HoverContext {
titleAreaHeight: ComputedRef<number>
chartTopMargin: ComputedRef<number>
sharedOverlayElement: ShallowRef<SVGRectElement | undefined>
isPresentationMode: ComputedRef<boolean>
updateViewportDrag: (event: PointerEvent) => void
resolveTrackAtPointer: (pointerX: number, pointerY: number) => TrackLayout | undefined
}
@@ -42,6 +43,7 @@ export function useWaveformHover(context: HoverContext) {
titleAreaHeight,
chartTopMargin,
sharedOverlayElement,
isPresentationMode,
updateViewportDrag,
resolveTrackAtPointer,
} = context
@@ -62,6 +64,7 @@ export function useWaveformHover(context: HoverContext) {
trackIndex: number | null,
position: { x: number; y: number },
) => {
if (isPresentationMode.value) return
if (!hoveredPointsMatch(nextPoints)) hoverState.points = nextPoints
hoverState.trackIndex = trackIndex
hoverState.position = position
@@ -73,6 +76,9 @@ export function useWaveformHover(context: HoverContext) {
hoverState.trackIndex = null
emit('point-hover', null)
}
const handlePointerLeave = () => {
if (!isPresentationMode.value) clearHover()
}
const createHoveredSeriesPoint = (
series: DisplaySeries,
trackIndex: number,
@@ -103,6 +109,7 @@ export function useWaveformHover(context: HoverContext) {
series.points[pointBisector.center(series.points, xValue)]
const handleIndependentPointerMove = (event: PointerEvent, trackIndex: number) => {
if (isPresentationMode.value) return
if (selection.value?.trackIndex === trackIndex && selection.value.independent) {
updateViewportDrag(event)
return
@@ -128,6 +135,7 @@ export function useWaveformHover(context: HoverContext) {
})
}
const handleSharedPointerMove = (event: PointerEvent) => {
if (isPresentationMode.value) return
if (selection.value?.overlay === event.currentTarget) {
updateViewportDrag(event)
return
@@ -161,6 +169,7 @@ export function useWaveformHover(context: HoverContext) {
return {
cancelPendingHover,
clearHover,
handlePointerLeave,
beginAnnotationDrag,
endAnnotationDrag,
handleIndependentPointerMove,