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

@@ -26,6 +26,7 @@ interface ViewportContext {
sharedYDomains: Ref<Record<string, [number, number]>>
independentYDomains: Ref<Record<number, [number, number]>>
isZoomMode: ComputedRef<boolean>
isPresentationMode: ComputedRef<boolean>
editorSeriesOptions: Ref<AnnotationSeriesCandidate[]>
resolveInitialTrackDomain: (track: TrackLayout) => [number, number]
canZoomTrack: (track: TrackLayout) => boolean
@@ -53,6 +54,7 @@ export function useWaveformViewport(context: ViewportContext) {
sharedYDomains,
independentYDomains,
isZoomMode,
isPresentationMode,
editorSeriesOptions,
resolveInitialTrackDomain,
canZoomTrack,
@@ -131,6 +133,7 @@ export function useWaveformViewport(context: ViewportContext) {
]),
)
const beginViewportDrag = (event: PointerEvent, trackIndex: number, independent: boolean) => {
if (isPresentationMode.value) return
const panRequested = props.pannable && spacePressed.value
if ((!props.zoomable && !panRequested) || !isZoomMode.value || event.button !== 0) return
const overlay = event.currentTarget as SVGRectElement
@@ -203,6 +206,7 @@ export function useWaveformViewport(context: ViewportContext) {
emit('zoom-change', nextX)
}
const updateViewportDrag = (event: PointerEvent) => {
if (isPresentationMode.value) return
const active = selection.value
if (!active || event.pointerId !== active.pointerId) return
const track = trackLayouts.value.find((item) => item.index === active.trackIndex)
@@ -285,6 +289,10 @@ export function useWaveformViewport(context: ViewportContext) {
void nextTick(configureZoom)
}
const finishViewportDrag = (event: PointerEvent) => {
if (isPresentationMode.value) {
cancelViewportDrag()
return
}
const active = selection.value
if (!active || event.pointerId !== active.pointerId) return
updateViewportDrag(event)
@@ -319,7 +327,7 @@ export function useWaveformViewport(context: ViewportContext) {
void nextTick(configureZoom)
}
const requestViewportReset = (event: MouseEvent) => {
if (!props.zoomable || !isZoomMode.value) return
if (isPresentationMode.value || !props.zoomable || !isZoomMode.value) return
event.preventDefault()
resetViewport()
emit('zoom-reset')