@kteneyck/cesium-timeline-angular 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"kteneyck-cesium-timeline-angular.mjs","sources":["../../src/lib/timeline-controls.component.ts","../../src/lib/timeline-canvas.component.ts","../../src/lib/timeline.component.ts","../../src/public-api.ts","../../src/kteneyck-cesium-timeline-angular.ts"],"sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport * as Cesium from 'cesium';\nimport {\n type TimelineTheme,\n type TimelineLabels,\n DEFAULT_LABELS,\n resolveLabel,\n formatDateTime,\n getTimezoneAbbr,\n splitForDisplay,\n} from '@kteneyck/cesium-timeline-core';\n\n@Component({\n selector: 'ct-timeline-controls',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n #container\n [style.display]=\"isNarrow ? 'flex' : 'grid'\"\n [style.grid-template-columns]=\"isNarrow ? undefined : '1fr auto 1fr'\"\n [style.align-items]=\"'center'\"\n [style.padding]=\"'6px 16px'\"\n [style.background-color]=\"theme.controlBarBackground\"\n [style.border-bottom]=\"'1px solid ' + theme.controlBarBorder\"\n [style.font-family]=\"'system-ui, -apple-system, sans-serif'\"\n >\n <!-- Left: Datetime + LIVE + speed badge -->\n <div style=\"display:flex;align-items:center;gap:8px;flex-shrink:0\">\n <div\n (click)=\"dateTimeClick.emit()\"\n [title]=\"dateTimeClick.observed ? l.dateTimeClickTooltip : ''\"\n [style.color]=\"theme.labelColor\"\n style=\"font-family:monospace;line-height:1.15;border-radius:4px;padding:2px 4px;transition:background 0.15s\"\n [style.cursor]=\"dateTimeClick.observed ? 'pointer' : 'default'\"\n >\n @if (timeFormat) {\n <div style=\"font-size:2em;font-weight:bold;letter-spacing:0.02em\">\n {{ formattedTime }}\n </div>\n }\n @if (dateFormat) {\n <div style=\"display:flex;align-items:center;gap:6px\">\n <span [style.color]=\"theme.buttonActiveColor\" style=\"font-size:1.15em;letter-spacing:0.03em\">\n {{ formattedDate }}\n </span>\n @if (timezoneAbbr) {\n <span\n [style.color]=\"theme.labelColor\"\n style=\"font-size:1.04em;font-weight:bold;letter-spacing:0.04em;opacity:0.7\"\n >{{ timezoneAbbr }}</span>\n }\n </div>\n }\n </div>\n\n <div style=\"display:flex;flex-direction:column;gap:2px;justify-content:center\">\n <!-- LIVE button -->\n <button\n (click)=\"jumpToLive.emit()\"\n [style.color]=\"isLive ? theme.controlBarBackground : theme.buttonActiveColor\"\n [style.background-color]=\"isLive ? theme.buttonActiveColor : 'transparent'\"\n [style.border-color]=\"theme.buttonActiveColor\"\n [style.opacity]=\"isLive ? 1 : 0.55\"\n style=\"background:none;border:1px solid;cursor:pointer;font-size:11px;font-weight:bold;letter-spacing:0.05em;width:52px;min-width:52px;height:20px;border-radius:3px;display:flex;align-items:center;justify-content:center;padding:0;font-family:system-ui,-apple-system,sans-serif;transition:opacity 0.15s\"\n [title]=\"isLive ? l.liveActiveTooltip : l.liveTooltip\"\n >\n {{ isLive ? l.liveActiveLabel : l.liveLabel }}\n </button>\n\n <!-- Speed badge -->\n <div style=\"height:20px;display:flex;align-items:center\">\n @if (!isNormalSpeed) {\n <button\n (click)=\"resetSpeed.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '44'\"\n style=\"background:none;border:1px solid;cursor:pointer;font-size:11px;width:52px;min-width:52px;height:20px;border-radius:4px;display:flex;align-items:center;justify-content:center;padding:0;font-family:system-ui,-apple-system,sans-serif;transition:background-color 0.15s\"\n [title]=\"l.resetSpeedTooltip\"\n >\n {{ isRewinding ? '◀ ' + absMultiplier + '×' : absMultiplier + '× ▶' }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Center: Transport buttons -->\n <div\n style=\"display:flex;align-items:center;gap:2px\"\n [style.flex]=\"isNarrow ? '1' : undefined\"\n [style.justify-content]=\"isNarrow ? 'center' : undefined\"\n >\n @if (showJumpToStart !== false) {\n <button\n (click)=\"hasStartTime && jumpToStart.emit()\"\n [disabled]=\"!hasStartTime\"\n [style.color]=\"theme.buttonColor\"\n [style.opacity]=\"hasStartTime ? 1 : 0.3\"\n [style.cursor]=\"hasStartTime ? 'pointer' : 'default'\"\n class=\"ct-btn\"\n [title]=\"hasStartTime ? l.jumpToStartTooltip : l.noStartTimeTooltip\"\n >⏮</button>\n }\n\n <button\n (click)=\"rewind.emit()\"\n [style.color]=\"isRewinding ? theme.buttonActiveColor : theme.buttonColor\"\n [style.border-color]=\"isRewinding ? theme.buttonActiveColor + '33' : 'transparent'\"\n class=\"ct-btn ct-btn-wide\"\n [title]=\"isRewinding ? resolveRewindActive(absMultiplier) : l.rewindTooltip\"\n >\n @if (isRewinding) {\n <span style=\"font-size:11px;font-weight:bold\">{{ absMultiplier }}×</span>◀◀\n } @else {\n ◀◀\n }\n </button>\n\n <button\n (click)=\"playPause.emit(!isPlaying)\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '55'\"\n [style.padding-left]=\"isPlaying ? '0' : '2px'\"\n class=\"ct-btn ct-btn-play\"\n [title]=\"isPlaying ? l.pauseTooltip : (isRewinding ? l.playFromRewindTooltip : l.playTooltip)\"\n >\n @if (isPlaying) {\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"currentColor\">\n <rect x=\"1\" y=\"0\" width=\"4\" height=\"16\" rx=\"1\"/>\n <rect x=\"9\" y=\"0\" width=\"4\" height=\"16\" rx=\"1\"/>\n </svg>\n } @else {\n ▶\n }\n </button>\n\n <button\n (click)=\"fastForward.emit()\"\n [style.color]=\"isFastForward ? theme.buttonActiveColor : theme.buttonColor\"\n [style.border-color]=\"isFastForward ? theme.buttonActiveColor + '33' : 'transparent'\"\n class=\"ct-btn ct-btn-wide\"\n [title]=\"isFastForward ? resolveFastForwardActive(absMultiplier) : l.fastForwardTooltip\"\n >\n @if (isFastForward) {\n ▶▶<span style=\"font-size:11px;font-weight:bold\">{{ absMultiplier }}×</span>\n } @else {\n ▶▶\n }\n </button>\n\n @if (showJumpToEnd !== false) {\n <button\n (click)=\"hasEndTime && jumpToEnd.emit()\"\n [disabled]=\"!hasEndTime\"\n [style.color]=\"theme.buttonColor\"\n [style.opacity]=\"hasEndTime ? 1 : 0.3\"\n [style.cursor]=\"hasEndTime ? 'pointer' : 'default'\"\n class=\"ct-btn\"\n [title]=\"hasEndTime ? l.jumpToEndTooltip : l.noEndTimeTooltip\"\n >⏭</button>\n }\n </div>\n\n <!-- Right: swim-lane toggle -->\n @if (!isNarrow) {\n <div style=\"display:flex;justify-content:flex-end;align-items:center\">\n @if (hasSwimLaneToggle) {\n <button\n (click)=\"toggleSwimLanes.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '33'\"\n class=\"ct-btn\"\n [title]=\"swimLanesVisible ? l.collapseSwimLanesTooltip : l.expandSwimLanesTooltip\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n @if (swimLanesVisible) {\n <polyline points=\"3,5 7,9 11,5\"/>\n } @else {\n <polyline points=\"3,9 7,5 11,9\"/>\n }\n </svg>\n </button>\n }\n </div>\n }\n\n @if (isNarrow && hasSwimLaneToggle) {\n <button\n (click)=\"toggleSwimLanes.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '33'\"\n class=\"ct-btn\"\n style=\"margin-left:4px\"\n [title]=\"swimLanesVisible ? l.collapseSwimLanesTooltip : l.expandSwimLanesTooltip\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n @if (swimLanesVisible) {\n <polyline points=\"3,5 7,9 11,5\"/>\n } @else {\n <polyline points=\"3,9 7,5 11,9\"/>\n }\n </svg>\n </button>\n }\n </div>\n `,\n styles: [`\n :host { display: block; }\n .ct-btn {\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n font-size: 16px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n transition: background-color 0.15s, color 0.15s;\n font-family: system-ui, -apple-system, sans-serif;\n flex-shrink: 0;\n line-height: 1;\n }\n .ct-btn:hover { background-color: rgba(255,255,255,0.1); }\n .ct-btn-wide { width: 64px; min-width: 64px; gap: 3px; }\n .ct-btn-play {\n font-size: 18px;\n width: 40px;\n min-width: 40px;\n height: 40px;\n border-radius: 50%;\n }\n `],\n})\nexport class TimelineControlsComponent implements AfterViewInit, OnDestroy {\n @Input() currentTime!: Cesium.JulianDate;\n @Input() isPlaying = false;\n @Input() multiplier = 1;\n @Input() dateTimeFormat?: string;\n @Input() timezone?: string;\n @Input() isLive = false;\n @Input() hasStartTime = false;\n @Input() hasEndTime = false;\n @Input() showJumpToStart?: boolean;\n @Input() showJumpToEnd?: boolean;\n @Input() theme!: TimelineTheme;\n @Input() swimLanesVisible?: boolean;\n @Input() labels?: Partial<TimelineLabels>;\n\n @Output() dateTimeClick = new EventEmitter<void>();\n @Output() playPause = new EventEmitter<boolean>();\n @Output() jumpToStart = new EventEmitter<void>();\n @Output() rewind = new EventEmitter<void>();\n @Output() fastForward = new EventEmitter<void>();\n @Output() jumpToEnd = new EventEmitter<void>();\n @Output() jumpToLive = new EventEmitter<void>();\n @Output() resetSpeed = new EventEmitter<void>();\n @Output() toggleSwimLanes = new EventEmitter<void>();\n\n @ViewChild('container') containerRef!: ElementRef<HTMLDivElement>;\n\n isNarrow = false;\n private ro?: ResizeObserver;\n\n get isRewinding(): boolean { return this.multiplier < 0; }\n get isFastForward(): boolean { return this.multiplier > 1; }\n get isNormalSpeed(): boolean { return this.multiplier === 1; }\n get absMultiplier(): number { return Math.abs(this.multiplier); }\n get hasSwimLaneToggle(): boolean { return this.swimLanesVisible != null; }\n\n get timeFormat(): string { return splitForDisplay(this.dateTimeFormat).timeFormat; }\n get dateFormat(): string { return splitForDisplay(this.dateTimeFormat).dateFormat; }\n get formattedTime(): string { return formatDateTime(this.currentTime, this.timeFormat, this.timezone); }\n get formattedDate(): string { return formatDateTime(this.currentTime, this.dateFormat, this.timezone); }\n get timezoneAbbr(): string | null { return getTimezoneAbbr(this.currentTime, this.timezone); }\n\n /** Merged labels — defaults overridden by whatever the consumer provides. */\n get l(): Required<TimelineLabels> { return { ...DEFAULT_LABELS, ...this.labels }; }\n\n resolveRewindActive(multiplier: number): string { return resolveLabel(this.l.rewindActiveTooltip, multiplier); }\n resolveFastForwardActive(multiplier: number): string { return resolveLabel(this.l.fastForwardActiveTooltip, multiplier); }\n\n ngAfterViewInit(): void {\n const el = this.containerRef?.nativeElement;\n if (!el) return;\n this.ro = new ResizeObserver(([entry]) => {\n this.isNarrow = entry.contentRect.width < 520;\n });\n this.ro.observe(el);\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n NgZone,\n} from '@angular/core';\nimport * as Cesium from 'cesium';\nimport {\n type TimelineTheme,\n type SwimLane,\n type SwimLaneItem,\n type SwimLaneEventInfo,\n type ReorderState,\n DEFAULT_LANE_HEIGHT,\n TICK_AREA_HEIGHT,\n LANE_GAP,\n SWIM_LANE_SCROLL_SPEED,\n MIN_SPAN_MS,\n MAX_SPAN_MS,\n drawTimeline,\n hitTestSwimLane as coreHitTestSwimLane,\n hitTestLaneLabel as coreHitTestLaneLabel,\n isInSwimLaneRegion as coreIsInSwimLaneRegion,\n zoomRange,\n zoomAroundMs,\n totalSwimLaneHeight,\n} from '@kteneyck/cesium-timeline-core';\n\nexport { TICK_AREA_HEIGHT };\n\n/**\n * TimelineCanvasComponent – Angular wrapper around the core canvas rendering engine.\n *\n * All mutable state lives as class properties (equivalent to React refs) — no\n * change detection cycles are triggered from drawing or mouse handlers.\n * The core drawTimeline() function handles all rendering.\n */\n@Component({\n selector: 'ct-timeline-canvas',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<canvas #canvas\n style=\"width:100%;flex:1;min-height:0;display:block;cursor:default\"\n (mousedown)=\"onCanvasMouseDown($event)\"\n (mousemove)=\"onCanvasMouseMove($event)\"\n (click)=\"onCanvasClick($event)\"\n (dblclick)=\"onCanvasDblClick($event)\"\n (contextmenu)=\"onCanvasContextMenu($event)\"\n (mouseleave)=\"onCanvasMouseLeave()\"\n ></canvas>`,\n styles: [`:host { display: flex; flex: 1; min-height: 0; }`],\n})\nexport class TimelineCanvasComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() currentTime!: Cesium.JulianDate;\n @Input() defaultStartMs!: number;\n @Input() defaultEndMs!: number;\n @Input() theme!: TimelineTheme;\n @Input() maxTicks?: number;\n @Input() timezone?: string;\n @Input() dateTimeFormat?: string;\n @Input() months?: string[];\n @Input() swimLanes?: SwimLane[];\n @Input() showSwimLanes?: boolean;\n\n @Output() timeChange = new EventEmitter<Cesium.JulianDate>();\n @Output() dragStart = new EventEmitter<void>();\n @Output() dragEnd = new EventEmitter<void>();\n @Output() swimLaneItemClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemHover = new EventEmitter<SwimLaneEventInfo | null>();\n @Output() swimLaneItemDoubleClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemContextMenu = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneReorder = new EventEmitter<string[]>();\n @Output() rangeSelect = new EventEmitter<{ start: Cesium.JulianDate; end: Cesium.JulianDate }>();\n\n @ViewChild('canvas') canvasRef!: ElementRef<HTMLCanvasElement>;\n\n // ── Mutable render state (equivalent to React refs) ────────────────────\n private startMs = 0;\n private endMs = 0;\n private curMs = 0;\n private scrollTop = 0;\n private swimLanesState: SwimLane[] = [];\n private showSwimLanesState = false;\n private hoveredItem: { lane: SwimLane; item: SwimLaneItem } | null = null;\n private reorderState: ReorderState | null = null;\n\n // Mouse state\n private mouseMode: 'none' | 'scrub' | 'slide' | 'zoom' | 'rangeSelectPending' | 'rangeSelect' = 'none';\n private mouseX = 0;\n private scrubClientX = 0;\n private swimLaneDownTime = 0;\n\n // Range-selection state\n private rangeAnchorMs = 0;\n private rangeAnchorX = 0;\n private rangeSelection: { startMs: number; endMs: number } | null = null;\n\n // Touch state\n private touchMode: 'none' | 'scrub' | 'slide' | 'pinch' = 'none';\n private touchX = 0;\n private pinchDist = 0;\n // Canvas-relative X of the midpoint between the two pinch fingers (pixels).\n private pinchMidX = 0;\n // Needle position saved just before a single-finger scrub begins, so it can\n // be restored if a second finger lands and the gesture becomes a pinch-zoom.\n private prePinchCurMs = 0;\n\n // Edge-scroll animation\n private edgeRAF: number | null = null;\n\n // Follow-scroll (playback auto-scroll)\n private followRAF: number | null = null;\n private following = false;\n private followRate = 0;\n\n private ro?: ResizeObserver;\n\n // Bound handlers for cleanup\n private boundMouseMove = this.onDocMouseMove.bind(this);\n private boundMouseUp = this.onDocMouseUp.bind(this);\n private boundTouchStart = this.onTouchStart.bind(this);\n private boundTouchMove = this.onTouchMove.bind(this);\n private boundTouchEnd = this.onTouchEnd.bind(this);\n private boundWheel = this.onWheel.bind(this);\n\n constructor(private ngZone: NgZone) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────────\n\n ngAfterViewInit(): void {\n this.startMs = this.defaultStartMs;\n this.endMs = this.defaultEndMs;\n this.curMs = Cesium.JulianDate.toDate(this.currentTime).getTime();\n this.swimLanesState = this.swimLanes ?? [];\n this.showSwimLanesState = this.showSwimLanes ?? (this.swimLanesState.length > 0);\n\n // Run outside Angular zone for performance — no change detection on draw/mouse\n this.ngZone.runOutsideAngular(() => {\n this.draw();\n\n const canvas = this.canvasRef.nativeElement;\n this.ro = new ResizeObserver(() => this.draw());\n this.ro.observe(canvas);\n\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n canvas.addEventListener('wheel', this.boundWheel, { passive: false });\n canvas.addEventListener('touchstart', this.boundTouchStart, { passive: false });\n canvas.addEventListener('touchmove', this.boundTouchMove, { passive: false });\n canvas.addEventListener('touchend', this.boundTouchEnd, { passive: false });\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['currentTime'] && !this.following) {\n const newMs = Cesium.JulianDate.toDate(this.currentTime).getTime();\n if (this.curMs !== newMs) {\n this.curMs = newMs;\n this.draw();\n }\n }\n if (changes['theme'] || changes['maxTicks'] || changes['timezone']) {\n this.draw();\n }\n if (changes['swimLanes']) {\n this.swimLanesState = this.swimLanes ?? [];\n this.draw();\n }\n if (changes['showSwimLanes']) {\n this.showSwimLanesState = this.showSwimLanes ?? (this.swimLanesState.length > 0);\n this.draw();\n }\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) {\n canvas.removeEventListener('wheel', this.boundWheel);\n canvas.removeEventListener('touchstart', this.boundTouchStart);\n canvas.removeEventListener('touchmove', this.boundTouchMove);\n canvas.removeEventListener('touchend', this.boundTouchEnd);\n }\n\n if (this.edgeRAF !== null) cancelAnimationFrame(this.edgeRAF);\n if (this.followRAF !== null) cancelAnimationFrame(this.followRAF);\n }\n\n // ── Public API (called by parent via ViewChild) ────────────────────────\n\n zoomTo(startMs: number, endMs: number, currentMs?: number): void {\n const span = Math.max(MIN_SPAN_MS, Math.min(MAX_SPAN_MS, endMs - startMs));\n const center = (startMs + endMs) / 2;\n this.startMs = center - span / 2;\n this.endMs = center + span / 2;\n if (currentMs !== undefined) this.curMs = currentMs;\n this.draw();\n }\n\n getVisibleRange(): { startMs: number; endMs: number } {\n return { startMs: this.startMs, endMs: this.endMs };\n }\n\n startFollow(rate: number): void {\n this.followRate = rate;\n if (this.followRAF !== null) return;\n this.following = true;\n let lastTime = performance.now();\n\n const scroll = () => {\n const now = performance.now();\n const dt = now - lastTime;\n lastTime = now;\n const shift = dt * this.followRate;\n this.startMs += shift;\n this.endMs += shift;\n this.curMs += shift;\n this.draw();\n this.followRAF = requestAnimationFrame(scroll);\n };\n this.followRAF = requestAnimationFrame(scroll);\n }\n\n stopFollow(): void {\n this.following = false;\n if (this.followRAF !== null) {\n cancelAnimationFrame(this.followRAF);\n this.followRAF = null;\n }\n }\n\n correctFollow(currentMs: number): void {\n if (!this.following) return;\n const drift = currentMs - this.curMs;\n this.curMs = currentMs;\n this.startMs += drift;\n this.endMs += drift;\n }\n\n appendSwimLane(lane: SwimLane): void {\n this.swimLanesState = [...this.swimLanesState, lane];\n this.draw();\n }\n\n updateSwimLane(id: string, updates: Partial<SwimLane>): void {\n this.swimLanesState = this.swimLanesState.map(l =>\n l.id === id ? { ...l, ...updates, id: l.id } : l\n );\n this.draw();\n }\n\n removeSwimLane(id: string): void {\n this.swimLanesState = this.swimLanesState.filter(l => l.id !== id);\n this.draw();\n }\n\n reorderSwimLanes(orderedIds: string[]): void {\n const byId = new Map(this.swimLanesState.map(l => [l.id, l]));\n const reordered: SwimLane[] = [];\n for (const id of orderedIds) {\n const lane = byId.get(id);\n if (lane) reordered.push(lane);\n }\n this.swimLanesState = reordered;\n this.draw();\n }\n\n // ── Core draw ──────────────────────────────────────────────────────────\n\n private draw(): void {\n const canvas = this.canvasRef?.nativeElement;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const rect = canvas.getBoundingClientRect();\n const w = rect.width;\n const h = rect.height;\n if (w === 0 || h === 0) return;\n\n const dpr = window.devicePixelRatio || 1;\n const physW = Math.round(w * dpr);\n const physH = Math.round(h * dpr);\n if (canvas.width !== physW || canvas.height !== physH) {\n canvas.width = physW;\n canvas.height = physH;\n }\n\n ctx.save();\n ctx.scale(dpr, dpr);\n\n const clampedScrollTop = drawTimeline(ctx, w, h, {\n startMs: this.startMs,\n endMs: this.endMs,\n currentMs: this.curMs,\n theme: this.theme,\n maxTicks: this.maxTicks,\n timezone: this.timezone,\n use12h: /h/.test(this.dateTimeFormat ?? ''),\n months: this.months,\n swimLanes: this.swimLanesState,\n showSwimLanes: this.showSwimLanesState,\n scrollTop: this.scrollTop,\n reorderState: this.reorderState,\n rangeSelection: this.rangeSelection,\n });\n\n if (clampedScrollTop !== this.scrollTop) {\n this.scrollTop = clampedScrollTop;\n }\n\n ctx.restore();\n }\n\n // ── Hit testing (delegates to core) ────────────────────────────────────\n\n private hitTestSwimLane(x: number, y: number, w: number, h: number) {\n return coreHitTestSwimLane(x, y, w, h, {\n startMs: this.startMs, endMs: this.endMs,\n theme: this.theme,\n swimLanes: this.swimLanesState, showSwimLanes: this.showSwimLanesState,\n scrollTop: this.scrollTop,\n });\n }\n\n private hitTestLaneLabel(x: number, y: number, h: number) {\n return coreHitTestLaneLabel(x, y, h, {\n swimLanes: this.swimLanesState, showSwimLanes: this.showSwimLanesState,\n scrollTop: this.scrollTop,\n });\n }\n\n private isInSwimLaneRegion(y: number, h: number): boolean {\n return coreIsInSwimLaneRegion(y, h, {\n swimLanes: this.swimLanesState, showSwimLanes: this.showSwimLanesState,\n });\n }\n\n // ── Zoom helper ────────────────────────────────────────────────────────\n\n private zoomFrom(amount: number): void {\n const result = zoomRange(this.startMs, this.endMs, amount);\n this.startMs = result.startMs;\n this.endMs = result.endMs;\n this.draw();\n }\n\n // ── Edge scroll ────────────────────────────────────────────────────────\n\n private startEdgeScroll(direction: -1 | 1): void {\n if (this.edgeRAF !== null) return;\n const scroll = () => {\n const canvas = this.canvasRef?.nativeElement;\n const span = this.endMs - this.startMs;\n const shift = direction * span * 0.01;\n this.startMs += shift;\n this.endMs += shift;\n\n if (canvas) {\n const rect = canvas.getBoundingClientRect();\n const cx = Math.max(0, Math.min(rect.width, this.scrubClientX - rect.left));\n const ms = this.startMs + (cx / rect.width) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n }\n\n this.draw();\n this.edgeRAF = requestAnimationFrame(scroll);\n };\n this.edgeRAF = requestAnimationFrame(scroll);\n }\n\n private stopEdgeScroll(): void {\n if (this.edgeRAF !== null) {\n cancelAnimationFrame(this.edgeRAF);\n this.edgeRAF = null;\n }\n }\n\n private getTouchDist(a: Touch, b: Touch): number {\n return Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY);\n }\n\n // ── Mouse handlers (template-bound) ────────────────────────────────────\n\n onCanvasMouseDown(e: MouseEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n // Reorder drag on lane label\n if (e.button === 0 && this.swimLaneReorder.observed) {\n const labelLane = this.hitTestLaneLabel(x, y, rect.height);\n if (labelLane) {\n const lanes = this.swimLanesState;\n const dragIdx = lanes.findIndex(l => l.id === labelLane.id);\n this.reorderState = {\n dragging: true,\n dragLaneId: labelLane.id,\n dragStartY: e.clientY,\n currentY: e.clientY,\n insertIndex: dragIdx,\n };\n canvas.style.cursor = 'grabbing';\n return;\n }\n }\n\n // Swim lane item click detection\n if (e.button === 0 && this.isInSwimLaneRegion(y, rect.height)) {\n const needleX = ((this.curMs - this.startMs) / (this.endMs - this.startMs)) * rect.width;\n const nearNeedle = Math.abs(x - needleX) <= 10;\n if (!nearNeedle) {\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit) {\n this.swimLaneDownTime = performance.now();\n return;\n }\n }\n }\n\n if (e.button === 0) {\n const needleX = ((this.curMs - this.startMs) / (this.endMs - this.startMs)) * rect.width;\n const nearNeedle = Math.abs(x - needleX) <= 10;\n const inTickArea = y >= rect.height - TICK_AREA_HEIGHT;\n\n if (!nearNeedle && inTickArea) {\n this.mouseMode = 'rangeSelectPending';\n this.rangeAnchorX = x;\n this.rangeAnchorMs = this.startMs + (x / rect.width) * (this.endMs - this.startMs);\n canvas.style.cursor = 'crosshair';\n this.ngZone.run(() => this.dragStart.emit());\n } else {\n this.mouseMode = 'scrub';\n this.scrubClientX = e.clientX;\n canvas.style.cursor = 'grabbing';\n this.ngZone.run(() => this.dragStart.emit());\n const ms = this.startMs + (x / rect.width) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n }\n } else if (e.button === 1) {\n this.mouseMode = 'slide';\n this.mouseX = e.clientX;\n } else if (e.button === 2) {\n if (this.swimLaneItemContextMenu.observed && this.isInSwimLaneRegion(y, rect.height)) return;\n this.mouseMode = 'zoom';\n this.mouseX = e.clientX;\n }\n }\n\n private onDocMouseMove(e: MouseEvent): void {\n // Reorder drag\n const rs = this.reorderState;\n if (rs && rs.dragging) {\n rs.currentY = e.clientY;\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) {\n const rect = canvas.getBoundingClientRect();\n const canvasY = e.clientY - rect.top;\n let y = -this.scrollTop;\n const lanes = this.swimLanesState;\n let idx = lanes.length;\n for (let i = 0; i < lanes.length; i++) {\n const laneH = lanes[i].height ?? DEFAULT_LANE_HEIGHT;\n const mid = y + laneH / 2;\n if (canvasY < mid) { idx = i; break; }\n y += laneH + LANE_GAP;\n }\n rs.insertIndex = idx;\n }\n this.draw();\n return;\n }\n\n if (this.mouseMode === 'none') return;\n const canvas = this.canvasRef?.nativeElement;\n if (!canvas) return;\n const rect = canvas.getBoundingClientRect();\n const w = rect.width;\n\n if (this.mouseMode === 'scrub') {\n this.scrubClientX = e.clientX;\n const x = e.clientX - rect.left;\n const edge = w * 0.08;\n if (x < edge) this.startEdgeScroll(-1);\n else if (x > w - edge) this.startEdgeScroll(1);\n else this.stopEdgeScroll();\n const cx = Math.max(0, Math.min(w, x));\n const ms = this.startMs + (cx / w) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n } else if (this.mouseMode === 'rangeSelectPending' || this.mouseMode === 'rangeSelect') {\n const x = e.clientX - rect.left;\n const dx = Math.abs(x - this.rangeAnchorX);\n if (this.mouseMode === 'rangeSelectPending' && dx >= 3) {\n this.mouseMode = 'rangeSelect';\n }\n if (this.mouseMode === 'rangeSelect') {\n const cx = Math.max(0, Math.min(w, x));\n const curMs = this.startMs + (cx / w) * (this.endMs - this.startMs);\n this.rangeSelection = { startMs: this.rangeAnchorMs, endMs: curMs };\n this.draw();\n }\n } else if (this.mouseMode === 'slide') {\n const dx = this.mouseX - e.clientX;\n this.mouseX = e.clientX;\n if (dx !== 0) {\n const shift = (dx / w) * (this.endMs - this.startMs);\n this.startMs += shift;\n this.endMs += shift;\n this.draw();\n }\n } else if (this.mouseMode === 'zoom') {\n const dx = this.mouseX - e.clientX;\n this.mouseX = e.clientX;\n if (dx !== 0) this.zoomFrom(Math.pow(1.01, dx));\n }\n }\n\n private onDocMouseUp(): void {\n // Finish reorder drag\n const rs = this.reorderState;\n if (rs && rs.dragging) {\n const dragDistance = Math.abs(rs.currentY - rs.dragStartY);\n const lanes = this.swimLanesState;\n const dragIdx = lanes.findIndex(l => l.id === rs.dragLaneId);\n if (dragDistance > 5 && dragIdx >= 0 && rs.insertIndex !== dragIdx && rs.insertIndex !== dragIdx + 1) {\n const newLanes = [...lanes];\n const [removed] = newLanes.splice(dragIdx, 1);\n const insertAt = rs.insertIndex > dragIdx ? rs.insertIndex - 1 : rs.insertIndex;\n newLanes.splice(insertAt, 0, removed);\n this.swimLanesState = newLanes;\n this.ngZone.run(() => this.swimLaneReorder.emit(newLanes.map(l => l.id)));\n }\n this.reorderState = null;\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.draw();\n return;\n }\n\n this.stopEdgeScroll();\n\n if (this.mouseMode === 'rangeSelectPending') {\n // Short click — commit needle to anchor position\n this.curMs = this.rangeAnchorMs;\n this.rangeSelection = null;\n this.mouseMode = 'none';\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.draw();\n this.ngZone.run(() => {\n this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(this.rangeAnchorMs)));\n this.dragEnd.emit();\n });\n return;\n }\n\n if (this.mouseMode === 'rangeSelect') {\n const sel = this.rangeSelection;\n this.rangeSelection = null;\n if (sel) {\n const selStart = Math.min(sel.startMs, sel.endMs);\n const selEnd = Math.max(sel.startMs, sel.endMs);\n this.startMs = selStart;\n this.endMs = selEnd;\n const startJd = Cesium.JulianDate.fromDate(new Date(selStart));\n const endJd = Cesium.JulianDate.fromDate(new Date(selEnd));\n this.ngZone.run(() => this.rangeSelect.emit({ start: startJd, end: endJd }));\n }\n this.mouseMode = 'none';\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.draw();\n this.ngZone.run(() => this.dragEnd.emit());\n return;\n }\n\n this.mouseMode = 'none';\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.ngZone.run(() => this.dragEnd.emit());\n }\n\n onCanvasMouseMove(e: MouseEvent): void {\n if (this.mouseMode !== 'none') return;\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n const needleX = ((this.curMs - this.startMs) / (this.endMs - this.startMs)) * rect.width;\n const nearNeedle = Math.abs(x - needleX) <= 10;\n\n if (this.isInSwimLaneRegion(y, rect.height)) {\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n const prev = this.hoveredItem;\n if (hit) {\n canvas.style.cursor = nearNeedle ? 'grab' : 'pointer';\n if (!prev || prev.item.id !== hit.item.id || prev.lane.id !== hit.lane.id) {\n this.hoveredItem = hit;\n this.ngZone.run(() =>\n this.swimLaneItemHover.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n this.draw();\n }\n } else {\n if (prev) {\n this.hoveredItem = null;\n this.ngZone.run(() => this.swimLaneItemHover.emit(null));\n this.draw();\n }\n if (nearNeedle) {\n canvas.style.cursor = 'grab';\n } else {\n const labelLane = this.hitTestLaneLabel(x, y, rect.height);\n canvas.style.cursor = labelLane && this.swimLaneReorder.observed ? 'grab' : 'default';\n }\n }\n return;\n }\n\n if (this.hoveredItem) {\n this.hoveredItem = null;\n this.ngZone.run(() => this.swimLaneItemHover.emit(null));\n this.draw();\n }\n\n if (nearNeedle) {\n canvas.style.cursor = 'grab';\n } else if (y >= rect.height - TICK_AREA_HEIGHT) {\n canvas.style.cursor = 'crosshair';\n } else {\n canvas.style.cursor = 'default';\n }\n }\n\n onCanvasClick(e: MouseEvent): void {\n const elapsed = performance.now() - this.swimLaneDownTime;\n if (elapsed > 300) return;\n\n const rect = (e.target as HTMLCanvasElement).getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit) {\n this.ngZone.run(() =>\n this.swimLaneItemClick.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n }\n }\n\n onCanvasDblClick(e: MouseEvent): void {\n const rect = (e.target as HTMLCanvasElement).getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit) {\n this.ngZone.run(() =>\n this.swimLaneItemDoubleClick.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n }\n }\n\n onCanvasContextMenu(e: MouseEvent): void {\n const rect = (e.target as HTMLCanvasElement).getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit && this.swimLaneItemContextMenu.observed) {\n e.preventDefault();\n this.ngZone.run(() =>\n this.swimLaneItemContextMenu.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n } else {\n e.preventDefault();\n }\n }\n\n onCanvasMouseLeave(): void {\n if (this.hoveredItem) {\n this.hoveredItem = null;\n this.ngZone.run(() => this.swimLaneItemHover.emit(null));\n this.draw();\n }\n const canvas = this.canvasRef?.nativeElement;\n if (this.mouseMode === 'none' && canvas) canvas.style.cursor = 'default';\n }\n\n // ── Wheel handler ──────────────────────────────────────────────────────\n\n private onWheel(e: WheelEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef?.nativeElement;\n if (!canvas) return;\n const rect = canvas.getBoundingClientRect();\n const y = e.clientY - rect.top;\n\n if (this.isInSwimLaneRegion(y, rect.height)) {\n const lanes = this.swimLanesState;\n const totalH = totalSwimLaneHeight(lanes);\n const laneRegionH = Math.max(0, rect.height - TICK_AREA_HEIGHT);\n const maxScroll = Math.max(0, totalH - laneRegionH);\n if (maxScroll > 0) {\n this.scrollTop = Math.max(0, Math.min(maxScroll, this.scrollTop + e.deltaY * SWIM_LANE_SCROLL_SPEED));\n this.draw();\n return;\n }\n }\n\n this.zoomFrom(Math.pow(1.05, e.deltaY > 0 ? -1 : 1));\n }\n\n // ── Touch handlers ─────────────────────────────────────────────────────\n\n private onTouchStart(e: TouchEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n\n if (e.touches.length === 1) {\n const x = e.touches[0].clientX - rect.left;\n const cx = Math.max(0, Math.min(rect.width, x));\n const ms = this.startMs + (cx / rect.width) * (this.endMs - this.startMs);\n this.prePinchCurMs = this.curMs;\n this.touchMode = 'scrub';\n this.touchX = e.touches[0].clientX;\n this.scrubClientX = e.touches[0].clientX;\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => {\n this.dragStart.emit();\n this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms)));\n });\n } else if (e.touches.length >= 2) {\n // If we were scrubbing, undo the needle move — pinch-zoom should not\n // change the current time.\n if (this.touchMode === 'scrub') {\n this.curMs = this.prePinchCurMs;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(this.prePinchCurMs))));\n }\n this.touchMode = 'pinch';\n this.pinchDist = this.getTouchDist(e.touches[0], e.touches[1]);\n this.pinchMidX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left;\n }\n }\n\n private onTouchMove(e: TouchEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n\n if (this.touchMode === 'scrub' && e.touches.length >= 1) {\n const x = e.touches[0].clientX - rect.left;\n const edge = rect.width * 0.08;\n this.scrubClientX = e.touches[0].clientX;\n\n if (x < edge) {\n this.startEdgeScroll(-1);\n } else if (x > rect.width - edge) {\n this.startEdgeScroll(1);\n } else {\n this.stopEdgeScroll();\n const cx = Math.max(0, Math.min(rect.width, x));\n const ms = this.startMs + (cx / rect.width) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n }\n } else if (this.touchMode === 'slide' && e.touches.length >= 1) {\n const dx = this.touchX - e.touches[0].clientX;\n this.touchX = e.touches[0].clientX;\n if (dx !== 0) {\n const shift = (dx / rect.width) * (this.endMs - this.startMs);\n this.startMs += shift;\n this.endMs += shift;\n this.draw();\n }\n } else if (this.touchMode === 'pinch' && e.touches.length >= 2) {\n const newDist = this.getTouchDist(e.touches[0], e.touches[1]);\n const newMidX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left;\n if (newDist > 0 && this.pinchDist > 0) {\n const pivotMs = this.startMs + (this.pinchMidX / rect.width) * (this.endMs - this.startMs);\n const result = zoomAroundMs(this.startMs, this.endMs, this.pinchDist / newDist, pivotMs);\n this.startMs = result.startMs;\n this.endMs = result.endMs;\n this.draw();\n }\n this.pinchDist = newDist;\n this.pinchMidX = newMidX;\n }\n }\n\n private onTouchEnd(e: TouchEvent): void {\n this.stopEdgeScroll();\n if (this.touchMode === 'scrub') {\n this.ngZone.run(() => this.dragEnd.emit());\n }\n\n if (e.touches.length === 0) {\n this.touchMode = 'none';\n } else if (e.touches.length === 1) {\n this.touchMode = 'slide';\n this.touchX = e.touches[0].clientX;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n NgZone,\n} from '@angular/core';\nimport * as Cesium from 'cesium';\nimport {\n type TimelineTheme,\n type TimelineLabels,\n type SwimLane,\n type SwimLaneEventInfo,\n defaultTheme,\n toJulianDate,\n TICK_AREA_HEIGHT,\n} from '@kteneyck/cesium-timeline-core';\nimport { TimelineControlsComponent } from './timeline-controls.component';\nimport { TimelineCanvasComponent } from './timeline-canvas.component';\n\nconst DEFAULT_FF_SPEEDS = [2, 4, 8, 16, 32, 100, 1];\nconst DEFAULT_RW_SPEEDS = [1, 2, 4, 8, 16, 32, 100];\n\n@Component({\n selector: 'ct-timeline',\n standalone: true,\n imports: [TimelineControlsComponent, TimelineCanvasComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"cssClass\"\n [style.width]=\"'100%'\"\n [style.height]=\"heightStyle\"\n [style.overflow]=\"'hidden'\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n [style.font-family]=\"'system-ui, -apple-system, sans-serif'\"\n [style.transition]=\"swimLaneTransition === 'animated' ? 'height 0.2s ease' : undefined\"\n >\n @if (showControls) {\n <div #controlsEl>\n <ct-timeline-controls\n [currentTime]=\"currentTimeState\"\n [isPlaying]=\"isPlayingState\"\n [multiplier]=\"multiplierState\"\n [isLive]=\"isLive\"\n [hasStartTime]=\"startTime != null\"\n [hasEndTime]=\"endTime != null\"\n [showJumpToStart]=\"showJumpToStart\"\n [showJumpToEnd]=\"showJumpToEnd\"\n [dateTimeFormat]=\"dateTimeFormat\"\n [timezone]=\"timezone\"\n [theme]=\"finalTheme\"\n [swimLanesVisible]=\"hasSwimLanes ? swimLanesExpanded : undefined\"\n (playPause)=\"handlePlayPause($event)\"\n (jumpToStart)=\"handleJumpToStart()\"\n (rewind)=\"handleRewindSpeed()\"\n (fastForward)=\"handleFastForward()\"\n (jumpToEnd)=\"handleJumpToEnd()\"\n (jumpToLive)=\"handleJumpToLive()\"\n (resetSpeed)=\"applyMultiplier(1)\"\n (dateTimeClick)=\"dateTimeClick.emit()\"\n (toggleSwimLanes)=\"handleToggleSwimLanes()\"\n [labels]=\"labels\"\n />\n </div>\n }\n\n @if (enableDrag !== false) {\n <ct-timeline-canvas\n [currentTime]=\"currentTimeState\"\n [defaultStartMs]=\"defaultStartMs\"\n [defaultEndMs]=\"defaultEndMs\"\n [theme]=\"finalTheme\"\n [maxTicks]=\"maxTicks\"\n [timezone]=\"timezone\"\n [dateTimeFormat]=\"dateTimeFormat\"\n [months]=\"labels?.months\"\n [swimLanes]=\"swimLanes\"\n [showSwimLanes]=\"swimLanesExpanded\"\n (timeChange)=\"handleTimeChange($event)\"\n (dragStart)=\"isDragging = true\"\n (dragEnd)=\"isDragging = false\"\n (swimLaneItemClick)=\"swimLaneItemClick.emit($event)\"\n (swimLaneItemHover)=\"swimLaneItemHover.emit($event)\"\n (swimLaneItemDoubleClick)=\"swimLaneItemDoubleClick.emit($event)\"\n (swimLaneItemContextMenu)=\"swimLaneItemContextMenu.emit($event)\"\n (swimLaneReorder)=\"swimLaneReorder.emit($event)\"\n (rangeSelect)=\"rangeSelect.emit($event)\"\n />\n }\n </div>\n `,\n styles: [`:host { display: block; }`],\n})\nexport class TimelineComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n // ── Inputs ─────────────────────────────────────────────────────────────\n @Input() startTime?: Cesium.JulianDate | Date;\n @Input() endTime?: Cesium.JulianDate | Date;\n @Input() currentTime?: Cesium.JulianDate | Date;\n @Input() clock?: Cesium.Clock;\n @Input() height?: number;\n @Input() showControls = true;\n @Input() showJumpToStart?: boolean;\n @Input() showJumpToEnd?: boolean;\n @Input() enableDrag = true;\n @Input() dateTimeFormat?: string;\n @Input() jumpToTime?: Cesium.JulianDate | Date;\n @Input() maxTicks?: number;\n @Input() ffSpeeds: number[] = DEFAULT_FF_SPEEDS;\n @Input() rwSpeeds: number[] = DEFAULT_RW_SPEEDS;\n @Input() theme?: Partial<TimelineTheme>;\n @Input() cssClass?: string;\n @Input() timezone?: string;\n @Input() swimLanes?: SwimLane[];\n @Input() showSwimLanes?: boolean;\n @Input() swimLaneTransition: 'animated' | 'instant' = 'animated';\n /** Overrides for control-bar labels and tooltips (i18n / custom verbiage). */\n @Input() labels?: Partial<TimelineLabels>;\n\n // ── Outputs ────────────────────────────────────────────────────────────\n @Output() timeChange = new EventEmitter<Cesium.JulianDate>();\n @Output() playPause = new EventEmitter<boolean>();\n @Output() multiplierChange = new EventEmitter<number>();\n @Output() dateTimeClick = new EventEmitter<void>();\n @Output() showSwimLanesChange = new EventEmitter<boolean>();\n @Output() swimLaneItemClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemHover = new EventEmitter<SwimLaneEventInfo | null>();\n @Output() swimLaneItemDoubleClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemContextMenu = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneReorder = new EventEmitter<string[]>();\n @Output() rangeSelect = new EventEmitter<{ start: Cesium.JulianDate; end: Cesium.JulianDate }>();\n\n // ── ViewChild refs ─────────────────────────────────────────────────────\n @ViewChild(TimelineCanvasComponent) canvasComp?: TimelineCanvasComponent;\n @ViewChild('controlsEl') controlsRef?: ElementRef<HTMLDivElement>;\n\n // ── Internal state ─────────────────────────────────────────────────────\n currentTimeState!: Cesium.JulianDate;\n isPlayingState = false;\n multiplierState = 1;\n swimLanesExpanded = true;\n controlsHeight = 0;\n isDragging = false;\n defaultStartMs = 0;\n defaultEndMs = 0;\n finalTheme: TimelineTheme = { ...defaultTheme };\n\n private ro?: ResizeObserver;\n private clockCleanup?: () => void;\n private fallbackInterval?: ReturnType<typeof setInterval>;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n ) {}\n\n get hasSwimLanes(): boolean {\n return this.swimLanes != null && this.swimLanes.length > 0;\n }\n\n get isLive(): boolean {\n return Math.abs(Cesium.JulianDate.toDate(this.currentTimeState).getTime() - Date.now()) < 10_000;\n }\n\n get isCollapsed(): boolean {\n return this.hasSwimLanes && !this.swimLanesExpanded;\n }\n\n get heightStyle(): string {\n if (this.isCollapsed) return `${this.controlsHeight + TICK_AREA_HEIGHT}px`;\n if (this.height != null) return `${this.height}px`;\n return '100%';\n }\n\n // ── Lifecycle ──────────────────────────────────────────────────────────\n\n ngOnInit(): void {\n const now = Date.now();\n this.defaultStartMs = this.startTime\n ? Cesium.JulianDate.toDate(toJulianDate(this.startTime)).getTime()\n : now - 12 * 3600 * 1000;\n this.defaultEndMs = this.endTime\n ? Cesium.JulianDate.toDate(toJulianDate(this.endTime)).getTime()\n : now + 12 * 3600 * 1000;\n\n this.currentTimeState = toJulianDate(\n this.currentTime ?? (this.startTime ?? Cesium.JulianDate.fromDate(new Date()))\n );\n this.isPlayingState = this.clock?.shouldAnimate ?? false;\n this.multiplierState = this.clock?.multiplier ?? 1;\n this.swimLanesExpanded = this.showSwimLanes ?? true;\n this.finalTheme = { ...defaultTheme, ...this.theme };\n }\n\n ngAfterViewInit(): void {\n const el = this.controlsRef?.nativeElement;\n if (el) {\n this.ro = new ResizeObserver(([entry]) => {\n this.controlsHeight = entry.borderBoxSize[0].blockSize;\n this.cdr.markForCheck();\n });\n this.ro.observe(el);\n }\n\n // Clock sync\n this.setupClockSync();\n\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme']) {\n this.finalTheme = { ...defaultTheme, ...this.theme };\n }\n if (changes['showSwimLanes'] && this.showSwimLanes != null) {\n this.swimLanesExpanded = this.showSwimLanes;\n }\n if (changes['clock'] && !changes['clock'].firstChange) {\n this.cleanupClockSync();\n this.setupClockSync();\n }\n if (changes['jumpToTime'] && this.jumpToTime) {\n const t = toJulianDate(this.jumpToTime);\n this.handleTimeChange(t);\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n const newMs = Cesium.JulianDate.toDate(t).getTime();\n this.canvasComp.zoomTo(newMs - span / 2, newMs + span / 2);\n }\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupClockSync();\n this.ro?.disconnect();\n if (this.fallbackInterval) clearInterval(this.fallbackInterval);\n }\n\n // ── Clock sync ─────────────────────────────────────────────────────────\n\n private setupClockSync(): void {\n if (this.clock) {\n const onTick = () => {\n if (this.isDragging) return;\n const ct = Cesium.JulianDate.clone(this.clock!.currentTime);\n this.currentTimeState = ct;\n this.isPlayingState = this.clock!.shouldAnimate;\n this.multiplierState = this.clock!.multiplier;\n\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n const ctMs = Cesium.JulianDate.toDate(ct).getTime();\n const pos = ctMs - startMs;\n if (pos <= span * 0.1) {\n this.canvasComp.zoomTo(ctMs - span * 0.1, ctMs + span * 0.9, ctMs);\n } else if (pos >= span * 0.9) {\n this.canvasComp.zoomTo(ctMs - span * 0.9, ctMs + span * 0.1, ctMs);\n }\n }\n this.cdr.markForCheck();\n };\n this.clock.onTick.addEventListener(onTick);\n this.clockCleanup = () => this.clock!.onTick.removeEventListener(onTick);\n } else {\n this.ngZone.runOutsideAngular(() => {\n this.fallbackInterval = setInterval(() => {\n if (this.isDragging) return;\n const ct = Cesium.JulianDate.fromDate(new Date());\n this.currentTimeState = ct;\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n const ctMs = Cesium.JulianDate.toDate(ct).getTime();\n const pos = ctMs - startMs;\n if (pos <= span * 0.1) this.canvasComp.zoomTo(ctMs - span * 0.1, ctMs + span * 0.9, ctMs);\n else if (pos >= span * 0.9) this.canvasComp.zoomTo(ctMs - span * 0.9, ctMs + span * 0.1, ctMs);\n }\n this.ngZone.run(() => this.cdr.markForCheck());\n }, 1000);\n });\n }\n }\n\n private cleanupClockSync(): void {\n this.clockCleanup?.();\n this.clockCleanup = undefined;\n if (this.fallbackInterval) {\n clearInterval(this.fallbackInterval);\n this.fallbackInterval = undefined;\n }\n }\n\n // ── Handlers ───────────────────────────────────────────────────────────\n\n handleTimeChange(t: Cesium.JulianDate): void {\n this.currentTimeState = t;\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.timeChange.emit(t);\n this.cdr.markForCheck();\n }\n\n handlePlayPause(playing: boolean): void {\n if (playing && this.multiplierState < 0) {\n this.applyMultiplier(1, false);\n }\n if (this.clock) this.clock.shouldAnimate = playing;\n this.isPlayingState = playing;\n this.playPause.emit(playing);\n this.cdr.markForCheck();\n }\n\n handleFastForward(): void {\n const speeds = this.ffSpeeds.length > 0 ? this.ffSpeeds : DEFAULT_FF_SPEEDS;\n const cur = this.multiplierState > 1 ? this.multiplierState : 1;\n const idx = speeds.indexOf(cur);\n const next = speeds[idx < 0 || idx === speeds.length - 1 ? 0 : idx + 1];\n this.applyMultiplier(next);\n }\n\n handleRewindSpeed(): void {\n const speeds = this.rwSpeeds.length > 0 ? this.rwSpeeds : DEFAULT_RW_SPEEDS;\n const curAbs = this.multiplierState < 0 ? Math.abs(this.multiplierState) : 0;\n const idx = speeds.indexOf(curAbs);\n const next = -(speeds[idx < 0 || idx === speeds.length - 1 ? 0 : idx + 1]);\n this.applyMultiplier(next);\n }\n\n handleJumpToStart(): void {\n const t = toJulianDate(this.startTime ?? Cesium.JulianDate.fromDate(new Date(this.defaultStartMs)));\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.currentTimeState = t;\n this.canvasComp?.zoomTo(this.defaultStartMs, this.defaultEndMs);\n this.cdr.markForCheck();\n }\n\n handleJumpToEnd(): void {\n const t = toJulianDate(this.endTime ?? Cesium.JulianDate.fromDate(new Date(this.defaultEndMs)));\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.currentTimeState = t;\n this.canvasComp?.zoomTo(this.defaultStartMs, this.defaultEndMs);\n this.cdr.markForCheck();\n }\n\n handleJumpToLive(): void {\n const t = Cesium.JulianDate.fromDate(new Date());\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.currentTimeState = t;\n this.applyMultiplier(1);\n const nowMs = Date.now();\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n this.canvasComp.zoomTo(nowMs - span / 2, nowMs + span / 2);\n }\n this.cdr.markForCheck();\n }\n\n handleToggleSwimLanes(): void {\n this.swimLanesExpanded = !this.swimLanesExpanded;\n this.showSwimLanesChange.emit(this.swimLanesExpanded);\n this.cdr.markForCheck();\n }\n\n applyMultiplier(m: number, play = true): void {\n if (this.clock) { this.clock.multiplier = m; if (play) this.clock.shouldAnimate = true; }\n this.multiplierState = m;\n if (play) this.isPlayingState = true;\n this.multiplierChange.emit(m);\n this.cdr.markForCheck();\n }\n}\n","// Components\nexport { TimelineComponent } from './lib/timeline.component';\nexport { TimelineCanvasComponent, TICK_AREA_HEIGHT } from './lib/timeline-canvas.component';\nexport { TimelineControlsComponent } from './lib/timeline-controls.component';\n\n// Re-export core types and utilities\nexport * from '@kteneyck/cesium-timeline-core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["coreHitTestSwimLane","coreHitTestLaneLabel","coreIsInSwimLaneRegion"],"mappings":"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"}
1
+ {"version":3,"file":"kteneyck-cesium-timeline-angular.mjs","sources":["../../src/lib/timeline-controls.component.ts","../../src/lib/timeline-canvas.component.ts","../../src/lib/timeline.component.ts","../../src/public-api.ts","../../src/kteneyck-cesium-timeline-angular.ts"],"sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnDestroy,\n} from '@angular/core';\nimport * as Cesium from 'cesium';\nimport {\n type TimelineTheme,\n type TimelineLabels,\n DEFAULT_LABELS,\n resolveLabel,\n formatDateTime,\n getTimezoneAbbr,\n splitForDisplay,\n} from '@kteneyck/cesium-timeline-core';\n\n@Component({\n selector: 'ct-timeline-controls',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n #container\n [style.display]=\"isNarrow ? 'flex' : 'grid'\"\n [style.grid-template-columns]=\"isNarrow ? undefined : '1fr auto 1fr'\"\n [style.align-items]=\"'center'\"\n [style.padding]=\"'6px 16px'\"\n [style.background-color]=\"theme.controlBarBackground\"\n [style.border-bottom]=\"'1px solid ' + theme.controlBarBorder\"\n [style.font-family]=\"'system-ui, -apple-system, sans-serif'\"\n >\n <!-- Left: Datetime + LIVE (if position=left) -->\n <div style=\"display:flex;align-items:center;gap:8px;flex-shrink:0\">\n <div\n (click)=\"!live && dateTimeClick.emit()\"\n [title]=\"(!live && dateTimeClick.observed) ? l.dateTimeClickTooltip : ''\"\n [style.color]=\"theme.labelColor\"\n style=\"font-family:monospace;line-height:1.15;border-radius:4px;padding:2px 4px;transition:background 0.15s\"\n [style.cursor]=\"(!live && dateTimeClick.observed) ? 'pointer' : 'default'\"\n >\n @if (timeFormat) {\n <div style=\"font-size:2em;font-weight:bold;letter-spacing:0.02em\">\n {{ formattedTime }}\n </div>\n }\n @if (dateFormat) {\n <div style=\"display:flex;align-items:center;gap:6px\">\n <span [style.color]=\"theme.buttonActiveColor\" style=\"font-size:1.15em;letter-spacing:0.03em\">\n {{ formattedDate }}\n </span>\n @if (timezoneAbbr) {\n <span\n [style.color]=\"theme.labelColor\"\n style=\"font-size:1.04em;font-weight:bold;letter-spacing:0.04em;opacity:0.7\"\n >{{ timezoneAbbr }}</span>\n }\n </div>\n }\n </div>\n\n @if (liveButtonPosition === 'left') {\n <div style=\"display:flex;align-items:center;gap:4px\">\n <button\n (click)=\"!live && jumpToLive.emit()\"\n [style.color]=\"(live || isLive) ? theme.controlBarBackground : theme.buttonActiveColor\"\n [style.background-color]=\"(live || isLive) ? theme.buttonActiveColor : 'transparent'\"\n [style.border-color]=\"theme.buttonActiveColor\"\n [style.opacity]=\"1\"\n [style.width.px]=\"liveSize.width\"\n [style.min-width.px]=\"liveSize.width\"\n [style.height.px]=\"liveSize.height\"\n [style.font-size]=\"liveSize.fontSize\"\n [style.border-radius]=\"liveSize.borderRadius\"\n [style.cursor]=\"live ? 'default' : 'pointer'\"\n style=\"background:none;border:1px solid;font-weight:bold;letter-spacing:0.05em;display:flex;align-items:center;justify-content:center;padding:0;gap:4px;font-family:system-ui,-apple-system,sans-serif;transition:opacity 0.15s\"\n [title]=\"(live || isLive) ? l.liveActiveTooltip : l.liveTooltip\"\n >\n @if (live || isLive) {\n <span\n [style.width.px]=\"liveSize.dot\"\n [style.height.px]=\"liveSize.dot\"\n [style.background-color]=\"theme.liveDotColor\"\n style=\"border-radius:50%;display:inline-block;flex-shrink:0\"\n ></span>\n }\n {{ (live || isLive) ? l.liveActiveLabel : l.liveLabel }}\n </button>\n @if (!isNormalSpeed && !live) {\n <button\n (click)=\"resetSpeed.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '44'\"\n [style.width.px]=\"liveSize.width\"\n [style.min-width.px]=\"liveSize.width\"\n [style.height.px]=\"liveSize.height\"\n style=\"background:none;border:1px solid;cursor:pointer;font-size:11px;border-radius:4px;display:flex;align-items:center;justify-content:center;padding:0;font-family:system-ui,-apple-system,sans-serif;transition:background-color 0.15s\"\n [title]=\"l.resetSpeedTooltip\"\n >{{ isRewinding ? '◀ ' + absMultiplier + '×' : absMultiplier + '× ▶' }}</button>\n }\n </div>\n }\n </div>\n\n <!-- Center: Transport buttons -->\n <div\n style=\"display:flex;align-items:center;gap:2px\"\n [style.flex]=\"isNarrow ? '1' : undefined\"\n [style.justify-content]=\"isNarrow ? 'center' : undefined\"\n >\n @if (!live && showJumpToStart !== false) {\n <button\n (click)=\"hasStartTime && jumpToStart.emit()\"\n [disabled]=\"!hasStartTime\"\n [style.color]=\"theme.buttonColor\"\n [style.opacity]=\"hasStartTime ? 1 : 0.3\"\n [style.cursor]=\"hasStartTime ? 'pointer' : 'default'\"\n class=\"ct-btn\"\n [title]=\"hasStartTime ? l.jumpToStartTooltip : l.noStartTimeTooltip\"\n >⏮</button>\n }\n\n @if (!live) {\n <button\n (click)=\"rewind.emit()\"\n [style.color]=\"isRewinding ? theme.buttonActiveColor : theme.buttonColor\"\n [style.border-color]=\"isRewinding ? theme.buttonActiveColor + '33' : 'transparent'\"\n class=\"ct-btn ct-btn-wide\"\n [title]=\"isRewinding ? resolveRewindActive(absMultiplier) : l.rewindTooltip\"\n >\n @if (isRewinding) {\n <span style=\"font-size:11px;font-weight:bold\">{{ absMultiplier }}×</span>◀◀\n } @else {\n ◀◀\n }\n </button>\n }\n\n @if (!live) {\n <button\n (click)=\"playPause.emit(!isPlaying)\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '55'\"\n [style.padding-left]=\"isPlaying ? '0' : '2px'\"\n class=\"ct-btn ct-btn-play\"\n [title]=\"isPlaying ? l.pauseTooltip : (isRewinding ? l.playFromRewindTooltip : l.playTooltip)\"\n >\n @if (isPlaying) {\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"currentColor\">\n <rect x=\"1\" y=\"0\" width=\"4\" height=\"16\" rx=\"1\"/>\n <rect x=\"9\" y=\"0\" width=\"4\" height=\"16\" rx=\"1\"/>\n </svg>\n } @else {\n ▶\n }\n </button>\n }\n\n @if (!live) {\n <button\n (click)=\"fastForward.emit()\"\n [style.color]=\"isFastForward ? theme.buttonActiveColor : theme.buttonColor\"\n [style.border-color]=\"isFastForward ? theme.buttonActiveColor + '33' : 'transparent'\"\n class=\"ct-btn ct-btn-wide\"\n [title]=\"isFastForward ? resolveFastForwardActive(absMultiplier) : l.fastForwardTooltip\"\n >\n @if (isFastForward) {\n ▶▶<span style=\"font-size:11px;font-weight:bold\">{{ absMultiplier }}×</span>\n } @else {\n ▶▶\n }\n </button>\n }\n\n @if (!live && showJumpToEnd !== false) {\n <button\n (click)=\"hasEndTime && jumpToEnd.emit()\"\n [disabled]=\"!hasEndTime\"\n [style.color]=\"theme.buttonColor\"\n [style.opacity]=\"hasEndTime ? 1 : 0.3\"\n [style.cursor]=\"hasEndTime ? 'pointer' : 'default'\"\n class=\"ct-btn\"\n [title]=\"hasEndTime ? l.jumpToEndTooltip : l.noEndTimeTooltip\"\n >⏭</button>\n }\n </div>\n\n <!-- Right: LIVE (if position=right) + swim-lane toggle -->\n @if (!isNarrow) {\n <div style=\"display:flex;justify-content:flex-end;align-items:center;gap:8px\">\n @if (liveButtonPosition === 'right') {\n <div style=\"display:flex;align-items:center;gap:4px\">\n <button\n (click)=\"!live && jumpToLive.emit()\"\n [style.color]=\"(live || isLive) ? theme.controlBarBackground : theme.buttonActiveColor\"\n [style.background-color]=\"(live || isLive) ? theme.buttonActiveColor : 'transparent'\"\n [style.border-color]=\"theme.buttonActiveColor\"\n [style.opacity]=\"1\"\n [style.width.px]=\"liveSize.width\"\n [style.min-width.px]=\"liveSize.width\"\n [style.height.px]=\"liveSize.height\"\n [style.font-size]=\"liveSize.fontSize\"\n [style.border-radius]=\"liveSize.borderRadius\"\n [style.cursor]=\"live ? 'default' : 'pointer'\"\n style=\"background:none;border:1px solid;font-weight:bold;letter-spacing:0.05em;display:flex;align-items:center;justify-content:center;padding:0;gap:4px;font-family:system-ui,-apple-system,sans-serif;transition:opacity 0.15s\"\n [title]=\"(live || isLive) ? l.liveActiveTooltip : l.liveTooltip\"\n >\n @if (live || isLive) {\n <span\n [style.width.px]=\"liveSize.dot\"\n [style.height.px]=\"liveSize.dot\"\n [style.background-color]=\"theme.liveDotColor\"\n style=\"border-radius:50%;display:inline-block;flex-shrink:0\"\n ></span>\n }\n {{ (live || isLive) ? l.liveActiveLabel : l.liveLabel }}\n </button>\n @if (!isNormalSpeed && !live) {\n <button\n (click)=\"resetSpeed.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '44'\"\n [style.width.px]=\"liveSize.width\"\n [style.min-width.px]=\"liveSize.width\"\n [style.height.px]=\"liveSize.height\"\n style=\"background:none;border:1px solid;cursor:pointer;font-size:11px;border-radius:4px;display:flex;align-items:center;justify-content:center;padding:0;font-family:system-ui,-apple-system,sans-serif;transition:background-color 0.15s\"\n [title]=\"l.resetSpeedTooltip\"\n >{{ isRewinding ? '◀ ' + absMultiplier + '×' : absMultiplier + '× ▶' }}</button>\n }\n </div>\n }\n @if (hasSwimLaneToggle) {\n <button\n (click)=\"toggleSwimLanes.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '33'\"\n class=\"ct-btn\"\n [title]=\"swimLanesVisible ? l.collapseSwimLanesTooltip : l.expandSwimLanesTooltip\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n @if (swimLanesVisible) {\n <polyline points=\"3,5 7,9 11,5\"/>\n } @else {\n <polyline points=\"3,9 7,5 11,9\"/>\n }\n </svg>\n </button>\n }\n </div>\n }\n\n @if (isNarrow && hasSwimLaneToggle) {\n <button\n (click)=\"toggleSwimLanes.emit()\"\n [style.color]=\"theme.buttonActiveColor\"\n [style.border-color]=\"theme.buttonActiveColor + '33'\"\n class=\"ct-btn\"\n style=\"margin-left:4px\"\n [title]=\"swimLanesVisible ? l.collapseSwimLanesTooltip : l.expandSwimLanesTooltip\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n @if (swimLanesVisible) {\n <polyline points=\"3,5 7,9 11,5\"/>\n } @else {\n <polyline points=\"3,9 7,5 11,9\"/>\n }\n </svg>\n </button>\n }\n </div>\n `,\n styles: [`\n :host { display: block; }\n .ct-btn {\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n font-size: 16px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 32px;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n transition: background-color 0.15s, color 0.15s;\n font-family: system-ui, -apple-system, sans-serif;\n flex-shrink: 0;\n line-height: 1;\n }\n .ct-btn:hover { background-color: rgba(255,255,255,0.1); }\n .ct-btn-wide { width: 64px; min-width: 64px; gap: 3px; }\n .ct-btn-play {\n font-size: 18px;\n width: 40px;\n min-width: 40px;\n height: 40px;\n border-radius: 50%;\n }\n `],\n})\nexport class TimelineControlsComponent implements AfterViewInit, OnDestroy {\n @Input() currentTime!: Cesium.JulianDate;\n @Input() isPlaying = false;\n @Input() multiplier = 1;\n @Input() dateTimeFormat?: string;\n @Input() timezone?: string;\n @Input() isLive = false;\n @Input() hasStartTime = false;\n @Input() hasEndTime = false;\n @Input() showJumpToStart?: boolean;\n @Input() showJumpToEnd?: boolean;\n @Input() theme!: TimelineTheme;\n @Input() swimLanesVisible?: boolean;\n @Input() labels?: Partial<TimelineLabels>;\n @Input() liveButtonSize: 'sm' | 'md' | 'lg' = 'md';\n @Input() liveButtonPosition: 'left' | 'right' = 'left';\n /** @see TimelineBaseProps.live */\n @Input() live = false;\n\n @Output() dateTimeClick = new EventEmitter<void>();\n @Output() playPause = new EventEmitter<boolean>();\n @Output() jumpToStart = new EventEmitter<void>();\n @Output() rewind = new EventEmitter<void>();\n @Output() fastForward = new EventEmitter<void>();\n @Output() jumpToEnd = new EventEmitter<void>();\n @Output() jumpToLive = new EventEmitter<void>();\n @Output() resetSpeed = new EventEmitter<void>();\n @Output() toggleSwimLanes = new EventEmitter<void>();\n\n @ViewChild('container') containerRef!: ElementRef<HTMLDivElement>;\n\n isNarrow = false;\n private ro?: ResizeObserver;\n\n get isRewinding(): boolean { return this.multiplier < 0; }\n get isFastForward(): boolean { return this.multiplier > 1; }\n get isNormalSpeed(): boolean { return this.multiplier === 1; }\n get absMultiplier(): number { return Math.abs(this.multiplier); }\n get hasSwimLaneToggle(): boolean { return this.swimLanesVisible != null; }\n\n private static readonly LIVE_SIZE_MAP = {\n sm: { width: 44, height: 18, fontSize: '10px', dot: 5, borderRadius: '3px' },\n md: { width: 56, height: 22, fontSize: '11px', dot: 6, borderRadius: '3px' },\n lg: { width: 72, height: 30, fontSize: '13px', dot: 8, borderRadius: '4px' },\n } as const;\n\n get liveSize() { return TimelineControlsComponent.LIVE_SIZE_MAP[this.liveButtonSize]; }\n\n get timeFormat(): string { return splitForDisplay(this.dateTimeFormat).timeFormat; }\n get dateFormat(): string { return splitForDisplay(this.dateTimeFormat).dateFormat; }\n get formattedTime(): string { return formatDateTime(this.currentTime, this.timeFormat, this.timezone); }\n get formattedDate(): string { return formatDateTime(this.currentTime, this.dateFormat, this.timezone); }\n get timezoneAbbr(): string | null { return getTimezoneAbbr(this.currentTime, this.timezone); }\n\n /** Merged labels — defaults overridden by whatever the consumer provides. */\n get l(): Required<TimelineLabels> { return { ...DEFAULT_LABELS, ...this.labels }; }\n\n resolveRewindActive(multiplier: number): string { return resolveLabel(this.l.rewindActiveTooltip, multiplier); }\n resolveFastForwardActive(multiplier: number): string { return resolveLabel(this.l.fastForwardActiveTooltip, multiplier); }\n\n ngAfterViewInit(): void {\n const el = this.containerRef?.nativeElement;\n if (!el) return;\n this.ro = new ResizeObserver(([entry]) => {\n this.isNarrow = entry.contentRect.width < 520;\n });\n this.ro.observe(el);\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n AfterViewInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n NgZone,\n} from '@angular/core';\nimport * as Cesium from 'cesium';\nimport {\n type TimelineTheme,\n type SwimLane,\n type SwimLaneItem,\n type SwimLaneEventInfo,\n type ReorderState,\n DEFAULT_LANE_HEIGHT,\n TICK_AREA_HEIGHT,\n LANE_GAP,\n SWIM_LANE_SCROLL_SPEED,\n MIN_SPAN_MS,\n MAX_SPAN_MS,\n drawTimeline,\n hitTestSwimLane as coreHitTestSwimLane,\n hitTestLaneLabel as coreHitTestLaneLabel,\n isInSwimLaneRegion as coreIsInSwimLaneRegion,\n zoomRange,\n zoomAroundMs,\n totalSwimLaneHeight,\n} from '@kteneyck/cesium-timeline-core';\n\nexport { TICK_AREA_HEIGHT };\n\n/**\n * TimelineCanvasComponent – Angular wrapper around the core canvas rendering engine.\n *\n * All mutable state lives as class properties (equivalent to React refs) — no\n * change detection cycles are triggered from drawing or mouse handlers.\n * The core drawTimeline() function handles all rendering.\n */\n@Component({\n selector: 'ct-timeline-canvas',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<canvas #canvas\n style=\"width:100%;flex:1;min-height:0;display:block;cursor:default\"\n (mousedown)=\"onCanvasMouseDown($event)\"\n (mousemove)=\"onCanvasMouseMove($event)\"\n (click)=\"onCanvasClick($event)\"\n (dblclick)=\"onCanvasDblClick($event)\"\n (contextmenu)=\"onCanvasContextMenu($event)\"\n (mouseleave)=\"onCanvasMouseLeave()\"\n ></canvas>`,\n styles: [`:host { display: flex; flex: 1; min-height: 0; }`],\n})\nexport class TimelineCanvasComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() currentTime!: Cesium.JulianDate;\n @Input() defaultStartMs!: number;\n @Input() defaultEndMs!: number;\n @Input() theme!: TimelineTheme;\n @Input() maxTicks?: number;\n @Input() timezone?: string;\n @Input() dateTimeFormat?: string;\n @Input() months?: string[];\n @Input() swimLanes?: SwimLane[];\n @Input() showSwimLanes?: boolean;\n /** When true, needle scrub is disabled (left-click becomes pan). Zoom and pan remain active. */\n @Input() disableNeedleDrag = false;\n /** @see TimelineBaseProps.invertScrollZoom */\n @Input() invertScrollZoom = false;\n\n @Output() timeChange = new EventEmitter<Cesium.JulianDate>();\n @Output() dragStart = new EventEmitter<void>();\n @Output() dragEnd = new EventEmitter<void>();\n @Output() swimLaneItemClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemHover = new EventEmitter<SwimLaneEventInfo | null>();\n @Output() swimLaneItemDoubleClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemContextMenu = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneReorder = new EventEmitter<string[]>();\n @Output() rangeSelect = new EventEmitter<{ start: Cesium.JulianDate; end: Cesium.JulianDate }>();\n\n @ViewChild('canvas') canvasRef!: ElementRef<HTMLCanvasElement>;\n\n // ── Mutable render state (equivalent to React refs) ────────────────────\n private startMs = 0;\n private endMs = 0;\n private curMs = 0;\n private scrollTop = 0;\n private swimLanesState: SwimLane[] = [];\n private showSwimLanesState = false;\n private hoveredItem: { lane: SwimLane; item: SwimLaneItem } | null = null;\n private reorderState: ReorderState | null = null;\n\n // Mouse state\n private mouseMode: 'none' | 'scrub' | 'slide' | 'zoom' | 'rangeSelectPending' | 'rangeSelect' = 'none';\n private mouseX = 0;\n private scrubClientX = 0;\n private swimLaneDownTime = 0;\n\n // Range-selection state\n private rangeAnchorMs = 0;\n private rangeAnchorX = 0;\n private rangeSelection: { startMs: number; endMs: number } | null = null;\n\n // Ghost needle (hover preview)\n private hoverMs: number | null = null;\n\n // Touch state\n private touchMode: 'none' | 'scrub' | 'slide' | 'pinch' = 'none';\n private touchX = 0;\n private pinchDist = 0;\n // Canvas-relative X of the midpoint between the two pinch fingers (pixels).\n private pinchMidX = 0;\n // Needle position saved just before a single-finger scrub begins, so it can\n // be restored if a second finger lands and the gesture becomes a pinch-zoom.\n private prePinchCurMs = 0;\n\n // Edge-scroll animation\n private edgeRAF: number | null = null;\n\n // Follow-scroll (playback auto-scroll)\n private followRAF: number | null = null;\n private following = false;\n private followRate = 0;\n\n private ro?: ResizeObserver;\n\n // Bound handlers for cleanup\n private boundMouseMove = this.onDocMouseMove.bind(this);\n private boundMouseUp = this.onDocMouseUp.bind(this);\n private boundTouchStart = this.onTouchStart.bind(this);\n private boundTouchMove = this.onTouchMove.bind(this);\n private boundTouchEnd = this.onTouchEnd.bind(this);\n private boundWheel = this.onWheel.bind(this);\n\n constructor(private ngZone: NgZone) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────────\n\n ngAfterViewInit(): void {\n this.startMs = this.defaultStartMs;\n this.endMs = this.defaultEndMs;\n this.curMs = Cesium.JulianDate.toDate(this.currentTime).getTime();\n this.swimLanesState = this.swimLanes ?? [];\n this.showSwimLanesState = this.showSwimLanes ?? (this.swimLanesState.length > 0);\n\n // Run outside Angular zone for performance — no change detection on draw/mouse\n this.ngZone.runOutsideAngular(() => {\n this.draw();\n\n const canvas = this.canvasRef.nativeElement;\n this.ro = new ResizeObserver(() => this.draw());\n this.ro.observe(canvas);\n\n document.addEventListener('mousemove', this.boundMouseMove);\n document.addEventListener('mouseup', this.boundMouseUp);\n canvas.addEventListener('wheel', this.boundWheel, { passive: false });\n canvas.addEventListener('touchstart', this.boundTouchStart, { passive: false });\n canvas.addEventListener('touchmove', this.boundTouchMove, { passive: false });\n canvas.addEventListener('touchend', this.boundTouchEnd, { passive: false });\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['currentTime'] && !this.following) {\n const newMs = Cesium.JulianDate.toDate(this.currentTime).getTime();\n if (this.curMs !== newMs) {\n this.curMs = newMs;\n this.draw();\n }\n }\n if (changes['theme'] || changes['maxTicks'] || changes['timezone']) {\n this.draw();\n }\n if (changes['swimLanes']) {\n this.swimLanesState = this.swimLanes ?? [];\n this.draw();\n }\n if (changes['showSwimLanes']) {\n this.showSwimLanesState = this.showSwimLanes ?? (this.swimLanesState.length > 0);\n this.draw();\n }\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n document.removeEventListener('mousemove', this.boundMouseMove);\n document.removeEventListener('mouseup', this.boundMouseUp);\n\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) {\n canvas.removeEventListener('wheel', this.boundWheel);\n canvas.removeEventListener('touchstart', this.boundTouchStart);\n canvas.removeEventListener('touchmove', this.boundTouchMove);\n canvas.removeEventListener('touchend', this.boundTouchEnd);\n }\n\n if (this.edgeRAF !== null) cancelAnimationFrame(this.edgeRAF);\n if (this.followRAF !== null) cancelAnimationFrame(this.followRAF);\n }\n\n // ── Public API (called by parent via ViewChild) ────────────────────────\n\n zoomTo(startMs: number, endMs: number, currentMs?: number): void {\n const span = Math.max(MIN_SPAN_MS, Math.min(MAX_SPAN_MS, endMs - startMs));\n const center = (startMs + endMs) / 2;\n this.startMs = center - span / 2;\n this.endMs = center + span / 2;\n if (currentMs !== undefined) this.curMs = currentMs;\n this.draw();\n }\n\n getVisibleRange(): { startMs: number; endMs: number } {\n return { startMs: this.startMs, endMs: this.endMs };\n }\n\n startFollow(rate: number): void {\n this.followRate = rate;\n if (this.followRAF !== null) return;\n this.following = true;\n let lastTime = performance.now();\n\n const scroll = () => {\n const now = performance.now();\n const dt = now - lastTime;\n lastTime = now;\n const shift = dt * this.followRate;\n this.startMs += shift;\n this.endMs += shift;\n this.curMs += shift;\n this.draw();\n this.followRAF = requestAnimationFrame(scroll);\n };\n this.followRAF = requestAnimationFrame(scroll);\n }\n\n stopFollow(): void {\n this.following = false;\n if (this.followRAF !== null) {\n cancelAnimationFrame(this.followRAF);\n this.followRAF = null;\n }\n }\n\n correctFollow(currentMs: number): void {\n if (!this.following) return;\n const drift = currentMs - this.curMs;\n this.curMs = currentMs;\n this.startMs += drift;\n this.endMs += drift;\n }\n\n appendSwimLane(lane: SwimLane): void {\n this.swimLanesState = [...this.swimLanesState, lane];\n this.draw();\n }\n\n updateSwimLane(id: string, updates: Partial<SwimLane>): void {\n this.swimLanesState = this.swimLanesState.map(l =>\n l.id === id ? { ...l, ...updates, id: l.id } : l\n );\n this.draw();\n }\n\n removeSwimLane(id: string): void {\n this.swimLanesState = this.swimLanesState.filter(l => l.id !== id);\n this.draw();\n }\n\n reorderSwimLanes(orderedIds: string[]): void {\n const byId = new Map(this.swimLanesState.map(l => [l.id, l]));\n const reordered: SwimLane[] = [];\n for (const id of orderedIds) {\n const lane = byId.get(id);\n if (lane) reordered.push(lane);\n }\n this.swimLanesState = reordered;\n this.draw();\n }\n\n // ── Core draw ──────────────────────────────────────────────────────────\n\n private draw(): void {\n const canvas = this.canvasRef?.nativeElement;\n if (!canvas) return;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const rect = canvas.getBoundingClientRect();\n const w = rect.width;\n const h = rect.height;\n if (w === 0 || h === 0) return;\n\n const dpr = window.devicePixelRatio || 1;\n const physW = Math.round(w * dpr);\n const physH = Math.round(h * dpr);\n if (canvas.width !== physW || canvas.height !== physH) {\n canvas.width = physW;\n canvas.height = physH;\n }\n\n ctx.save();\n ctx.scale(dpr, dpr);\n\n const clampedScrollTop = drawTimeline(ctx, w, h, {\n startMs: this.startMs,\n endMs: this.endMs,\n currentMs: this.curMs,\n theme: this.theme,\n maxTicks: this.maxTicks,\n timezone: this.timezone,\n use12h: /h/.test(this.dateTimeFormat ?? ''),\n months: this.months,\n swimLanes: this.swimLanesState,\n showSwimLanes: this.showSwimLanesState,\n scrollTop: this.scrollTop,\n reorderState: this.reorderState,\n rangeSelection: this.rangeSelection,\n hoverMs: this.hoverMs,\n });\n\n if (clampedScrollTop !== this.scrollTop) {\n this.scrollTop = clampedScrollTop;\n }\n\n ctx.restore();\n }\n\n // ── Hit testing (delegates to core) ────────────────────────────────────\n\n private hitTestSwimLane(x: number, y: number, w: number, h: number) {\n return coreHitTestSwimLane(x, y, w, h, {\n startMs: this.startMs, endMs: this.endMs,\n theme: this.theme,\n swimLanes: this.swimLanesState, showSwimLanes: this.showSwimLanesState,\n scrollTop: this.scrollTop,\n });\n }\n\n private hitTestLaneLabel(x: number, y: number, h: number) {\n return coreHitTestLaneLabel(x, y, h, {\n swimLanes: this.swimLanesState, showSwimLanes: this.showSwimLanesState,\n scrollTop: this.scrollTop,\n });\n }\n\n private isInSwimLaneRegion(y: number, h: number): boolean {\n return coreIsInSwimLaneRegion(y, h, {\n swimLanes: this.swimLanesState, showSwimLanes: this.showSwimLanesState,\n });\n }\n\n // ── Zoom helper ────────────────────────────────────────────────────────\n\n private zoomFrom(amount: number): void {\n const result = zoomRange(this.startMs, this.endMs, amount);\n this.startMs = result.startMs;\n this.endMs = result.endMs;\n this.draw();\n }\n\n // ── Edge scroll ────────────────────────────────────────────────────────\n\n private startEdgeScroll(direction: -1 | 1): void {\n if (this.edgeRAF !== null) return;\n const scroll = () => {\n const canvas = this.canvasRef?.nativeElement;\n const span = this.endMs - this.startMs;\n const shift = direction * span * 0.01;\n this.startMs += shift;\n this.endMs += shift;\n\n if (canvas) {\n const rect = canvas.getBoundingClientRect();\n const cx = Math.max(0, Math.min(rect.width, this.scrubClientX - rect.left));\n const ms = this.startMs + (cx / rect.width) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n }\n\n this.draw();\n this.edgeRAF = requestAnimationFrame(scroll);\n };\n this.edgeRAF = requestAnimationFrame(scroll);\n }\n\n private stopEdgeScroll(): void {\n if (this.edgeRAF !== null) {\n cancelAnimationFrame(this.edgeRAF);\n this.edgeRAF = null;\n }\n }\n\n private getTouchDist(a: Touch, b: Touch): number {\n return Math.hypot(b.clientX - a.clientX, b.clientY - a.clientY);\n }\n\n // ── Mouse handlers (template-bound) ────────────────────────────────────\n\n onCanvasMouseDown(e: MouseEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n // Reorder drag on lane label\n if (e.button === 0 && this.swimLaneReorder.observed) {\n const labelLane = this.hitTestLaneLabel(x, y, rect.height);\n if (labelLane) {\n const lanes = this.swimLanesState;\n const dragIdx = lanes.findIndex(l => l.id === labelLane.id);\n this.reorderState = {\n dragging: true,\n dragLaneId: labelLane.id,\n dragStartY: e.clientY,\n currentY: e.clientY,\n insertIndex: dragIdx,\n };\n canvas.style.cursor = 'grabbing';\n return;\n }\n }\n\n // Swim lane item click detection\n if (e.button === 0 && this.isInSwimLaneRegion(y, rect.height)) {\n const needleX = ((this.curMs - this.startMs) / (this.endMs - this.startMs)) * rect.width;\n const nearNeedle = Math.abs(x - needleX) <= 10;\n if (!nearNeedle) {\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit) {\n this.swimLaneDownTime = performance.now();\n return;\n }\n }\n }\n\n if (e.button === 0) {\n const needleX = ((this.curMs - this.startMs) / (this.endMs - this.startMs)) * rect.width;\n const nearNeedle = Math.abs(x - needleX) <= 10;\n const inTickArea = y >= rect.height - TICK_AREA_HEIGHT;\n\n if (this.disableNeedleDrag) {\n if (!nearNeedle && inTickArea) {\n // In live mode: allow range-select zoom in the tick area; needle scrub is still disabled.\n this.mouseMode = 'rangeSelectPending';\n this.rangeAnchorX = x;\n this.rangeAnchorMs = this.startMs + (x / rect.width) * (this.endMs - this.startMs);\n canvas.style.cursor = 'crosshair';\n this.ngZone.run(() => this.dragStart.emit());\n } else {\n // Outside tick area — left-click becomes a pan.\n this.mouseMode = 'slide';\n this.mouseX = e.clientX;\n }\n return;\n }\n\n if (!nearNeedle && inTickArea) {\n this.mouseMode = 'rangeSelectPending';\n this.rangeAnchorX = x;\n this.rangeAnchorMs = this.startMs + (x / rect.width) * (this.endMs - this.startMs);\n canvas.style.cursor = 'crosshair';\n this.ngZone.run(() => this.dragStart.emit());\n } else {\n this.mouseMode = 'scrub';\n this.scrubClientX = e.clientX;\n canvas.style.cursor = 'grabbing';\n this.ngZone.run(() => this.dragStart.emit());\n const ms = this.startMs + (x / rect.width) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n }\n } else if (e.button === 1) {\n this.mouseMode = 'slide';\n this.mouseX = e.clientX;\n } else if (e.button === 2) {\n if (this.swimLaneItemContextMenu.observed && this.isInSwimLaneRegion(y, rect.height)) return;\n this.mouseMode = 'zoom';\n this.mouseX = e.clientX;\n }\n }\n\n private onDocMouseMove(e: MouseEvent): void {\n // Reorder drag\n const rs = this.reorderState;\n if (rs && rs.dragging) {\n rs.currentY = e.clientY;\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) {\n const rect = canvas.getBoundingClientRect();\n const canvasY = e.clientY - rect.top;\n let y = -this.scrollTop;\n const lanes = this.swimLanesState;\n let idx = lanes.length;\n for (let i = 0; i < lanes.length; i++) {\n const laneH = lanes[i].height ?? DEFAULT_LANE_HEIGHT;\n const mid = y + laneH / 2;\n if (canvasY < mid) { idx = i; break; }\n y += laneH + LANE_GAP;\n }\n rs.insertIndex = idx;\n }\n this.draw();\n return;\n }\n\n if (this.mouseMode === 'none') return;\n const canvas = this.canvasRef?.nativeElement;\n if (!canvas) return;\n const rect = canvas.getBoundingClientRect();\n const w = rect.width;\n\n if (this.mouseMode === 'scrub') {\n this.scrubClientX = e.clientX;\n const x = e.clientX - rect.left;\n const edge = w * 0.08;\n if (x < edge) this.startEdgeScroll(-1);\n else if (x > w - edge) this.startEdgeScroll(1);\n else this.stopEdgeScroll();\n const cx = Math.max(0, Math.min(w, x));\n const ms = this.startMs + (cx / w) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n } else if (this.mouseMode === 'rangeSelectPending' || this.mouseMode === 'rangeSelect') {\n const x = e.clientX - rect.left;\n const dx = Math.abs(x - this.rangeAnchorX);\n if (this.mouseMode === 'rangeSelectPending' && dx >= 3) {\n this.mouseMode = 'rangeSelect';\n }\n if (this.mouseMode === 'rangeSelect') {\n const cx = Math.max(0, Math.min(w, x));\n const curMs = this.startMs + (cx / w) * (this.endMs - this.startMs);\n this.rangeSelection = { startMs: this.rangeAnchorMs, endMs: curMs };\n this.draw();\n }\n } else if (this.mouseMode === 'slide') {\n const dx = this.mouseX - e.clientX;\n this.mouseX = e.clientX;\n if (dx !== 0) {\n const shift = (dx / w) * (this.endMs - this.startMs);\n this.startMs += shift;\n this.endMs += shift;\n this.draw();\n }\n } else if (this.mouseMode === 'zoom') {\n const dx = this.mouseX - e.clientX;\n this.mouseX = e.clientX;\n if (dx !== 0) this.zoomFrom(Math.pow(1.01, dx));\n }\n }\n\n private onDocMouseUp(): void {\n // Finish reorder drag\n const rs = this.reorderState;\n if (rs && rs.dragging) {\n const dragDistance = Math.abs(rs.currentY - rs.dragStartY);\n const lanes = this.swimLanesState;\n const dragIdx = lanes.findIndex(l => l.id === rs.dragLaneId);\n if (dragDistance > 5 && dragIdx >= 0 && rs.insertIndex !== dragIdx && rs.insertIndex !== dragIdx + 1) {\n const newLanes = [...lanes];\n const [removed] = newLanes.splice(dragIdx, 1);\n const insertAt = rs.insertIndex > dragIdx ? rs.insertIndex - 1 : rs.insertIndex;\n newLanes.splice(insertAt, 0, removed);\n this.swimLanesState = newLanes;\n this.ngZone.run(() => this.swimLaneReorder.emit(newLanes.map(l => l.id)));\n }\n this.reorderState = null;\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.draw();\n return;\n }\n\n this.stopEdgeScroll();\n\n if (this.mouseMode === 'rangeSelectPending') {\n // Short click — commit needle to anchor position\n this.curMs = this.rangeAnchorMs;\n this.rangeSelection = null;\n this.mouseMode = 'none';\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.draw();\n this.ngZone.run(() => {\n this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(this.rangeAnchorMs)));\n this.dragEnd.emit();\n });\n return;\n }\n\n if (this.mouseMode === 'rangeSelect') {\n const sel = this.rangeSelection;\n this.rangeSelection = null;\n if (sel) {\n let selStart = Math.min(sel.startMs, sel.endMs);\n let selEnd = Math.max(sel.startMs, sel.endMs);\n if (this.disableNeedleDrag) {\n // In live mode: don't move the needle. Expand the selection to keep\n // the needle (current time) visible on screen.\n selStart = Math.min(selStart, this.curMs);\n selEnd = Math.max(selEnd, this.curMs);\n this.startMs = selStart;\n this.endMs = selEnd;\n const startJd = Cesium.JulianDate.fromDate(new Date(selStart));\n const endJd = Cesium.JulianDate.fromDate(new Date(selEnd));\n this.ngZone.run(() => this.rangeSelect.emit({ start: startJd, end: endJd }));\n } else {\n this.startMs = selStart;\n this.endMs = selEnd;\n // If the needle is outside the selected range, clamp it to the nearest\n // edge so the clock-tick auto-scroll doesn't immediately override the zoom.\n const clampedMs = Math.max(selStart, Math.min(selEnd, this.curMs));\n const needleMoved = clampedMs !== this.curMs;\n if (needleMoved) {\n this.curMs = clampedMs;\n }\n const startJd = Cesium.JulianDate.fromDate(new Date(selStart));\n const endJd = Cesium.JulianDate.fromDate(new Date(selEnd));\n this.ngZone.run(() => {\n this.rangeSelect.emit({ start: startJd, end: endJd });\n if (needleMoved) {\n this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(clampedMs)));\n }\n });\n }\n }\n this.mouseMode = 'none';\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.draw();\n this.ngZone.run(() => this.dragEnd.emit());\n return;\n }\n\n this.mouseMode = 'none';\n const canvas = this.canvasRef?.nativeElement;\n if (canvas) canvas.style.cursor = 'default';\n this.ngZone.run(() => this.dragEnd.emit());\n }\n\n onCanvasMouseMove(e: MouseEvent): void {\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n\n // Update ghost needle while idle\n if (this.mouseMode === 'none') {\n if (!this.disableNeedleDrag) {\n this.hoverMs = this.startMs + (Math.max(0, Math.min(rect.width, x)) / rect.width) * (this.endMs - this.startMs);\n } else if (this.hoverMs !== null) {\n this.hoverMs = null;\n }\n } else {\n this.hoverMs = null;\n return;\n }\n\n const needleX = ((this.curMs - this.startMs) / (this.endMs - this.startMs)) * rect.width;\n const nearNeedle = !this.disableNeedleDrag && Math.abs(x - needleX) <= 10;\n\n if (this.isInSwimLaneRegion(y, rect.height)) {\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n const prev = this.hoveredItem;\n if (hit) {\n canvas.style.cursor = nearNeedle ? 'grab' : 'pointer';\n if (!prev || prev.item.id !== hit.item.id || prev.lane.id !== hit.lane.id) {\n this.hoveredItem = hit;\n this.ngZone.run(() =>\n this.swimLaneItemHover.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n }\n } else {\n if (prev) {\n this.hoveredItem = null;\n this.ngZone.run(() => this.swimLaneItemHover.emit(null));\n }\n if (nearNeedle) {\n canvas.style.cursor = 'grab';\n } else {\n const labelLane = this.hitTestLaneLabel(x, y, rect.height);\n canvas.style.cursor = labelLane && this.swimLaneReorder.observed ? 'grab' : 'default';\n }\n }\n this.draw();\n return;\n }\n\n if (this.hoveredItem) {\n this.hoveredItem = null;\n this.ngZone.run(() => this.swimLaneItemHover.emit(null));\n }\n\n if (nearNeedle) {\n canvas.style.cursor = 'grab';\n } else if (y >= rect.height - TICK_AREA_HEIGHT) {\n canvas.style.cursor = 'crosshair';\n } else {\n canvas.style.cursor = 'default';\n }\n this.draw();\n }\n\n onCanvasClick(e: MouseEvent): void {\n const elapsed = performance.now() - this.swimLaneDownTime;\n if (elapsed > 300) return;\n\n const rect = (e.target as HTMLCanvasElement).getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit) {\n this.ngZone.run(() =>\n this.swimLaneItemClick.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n }\n }\n\n onCanvasDblClick(e: MouseEvent): void {\n const rect = (e.target as HTMLCanvasElement).getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit) {\n this.ngZone.run(() =>\n this.swimLaneItemDoubleClick.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n }\n }\n\n onCanvasContextMenu(e: MouseEvent): void {\n const rect = (e.target as HTMLCanvasElement).getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n const hit = this.hitTestSwimLane(x, y, rect.width, rect.height);\n if (hit && this.swimLaneItemContextMenu.observed) {\n e.preventDefault();\n this.ngZone.run(() =>\n this.swimLaneItemContextMenu.emit({ laneId: hit.lane.id, item: hit.item, originalEvent: e })\n );\n } else {\n e.preventDefault();\n }\n }\n\n onCanvasMouseLeave(): void {\n if (this.hoveredItem) {\n this.hoveredItem = null;\n this.ngZone.run(() => this.swimLaneItemHover.emit(null));\n }\n this.hoverMs = null;\n const canvas = this.canvasRef?.nativeElement;\n if (this.mouseMode === 'none' && canvas) canvas.style.cursor = 'default';\n this.draw();\n }\n\n // ── Wheel handler ──────────────────────────────────────────────────────\n\n private onWheel(e: WheelEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef?.nativeElement;\n if (!canvas) return;\n const rect = canvas.getBoundingClientRect();\n const y = e.clientY - rect.top;\n\n if (this.isInSwimLaneRegion(y, rect.height)) {\n const lanes = this.swimLanesState;\n const totalH = totalSwimLaneHeight(lanes);\n const laneRegionH = Math.max(0, rect.height - TICK_AREA_HEIGHT);\n const maxScroll = Math.max(0, totalH - laneRegionH);\n if (maxScroll > 0) {\n this.scrollTop = Math.max(0, Math.min(maxScroll, this.scrollTop + e.deltaY * SWIM_LANE_SCROLL_SPEED));\n this.draw();\n return;\n }\n }\n\n this.zoomFrom(Math.pow(1.05, e.deltaY > 0 === this.invertScrollZoom ? -1 : 1));\n }\n\n // ── Touch handlers ─────────────────────────────────────────────────────\n\n private onTouchStart(e: TouchEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n\n if (e.touches.length === 1) {\n const x = e.touches[0].clientX - rect.left;\n const cx = Math.max(0, Math.min(rect.width, x));\n const ms = this.startMs + (cx / rect.width) * (this.endMs - this.startMs);\n this.prePinchCurMs = this.curMs;\n if (this.disableNeedleDrag) {\n // In live mode single-finger becomes a pan, not a scrub.\n this.touchMode = 'slide';\n this.touchX = e.touches[0].clientX;\n } else {\n this.touchMode = 'scrub';\n this.touchX = e.touches[0].clientX;\n this.scrubClientX = e.touches[0].clientX;\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => {\n this.dragStart.emit();\n this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms)));\n });\n }\n } else if (e.touches.length >= 2) {\n // If we were scrubbing, undo the needle move — pinch-zoom should not\n // change the current time.\n if (this.touchMode === 'scrub') {\n this.curMs = this.prePinchCurMs;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(this.prePinchCurMs))));\n }\n this.touchMode = 'pinch';\n this.pinchDist = this.getTouchDist(e.touches[0], e.touches[1]);\n this.pinchMidX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left;\n }\n }\n\n private onTouchMove(e: TouchEvent): void {\n e.preventDefault();\n const canvas = this.canvasRef.nativeElement;\n const rect = canvas.getBoundingClientRect();\n\n if (this.touchMode === 'scrub' && e.touches.length >= 1) {\n const x = e.touches[0].clientX - rect.left;\n const edge = rect.width * 0.08;\n this.scrubClientX = e.touches[0].clientX;\n\n if (x < edge) {\n this.startEdgeScroll(-1);\n } else if (x > rect.width - edge) {\n this.startEdgeScroll(1);\n } else {\n this.stopEdgeScroll();\n const cx = Math.max(0, Math.min(rect.width, x));\n const ms = this.startMs + (cx / rect.width) * (this.endMs - this.startMs);\n this.curMs = ms;\n this.draw();\n this.ngZone.run(() => this.timeChange.emit(Cesium.JulianDate.fromDate(new Date(ms))));\n }\n } else if (this.touchMode === 'slide' && e.touches.length >= 1) {\n const dx = this.touchX - e.touches[0].clientX;\n this.touchX = e.touches[0].clientX;\n if (dx !== 0) {\n const shift = (dx / rect.width) * (this.endMs - this.startMs);\n this.startMs += shift;\n this.endMs += shift;\n this.draw();\n }\n } else if (this.touchMode === 'pinch' && e.touches.length >= 2) {\n const newDist = this.getTouchDist(e.touches[0], e.touches[1]);\n const newMidX = (e.touches[0].clientX + e.touches[1].clientX) / 2 - rect.left;\n if (newDist > 0 && this.pinchDist > 0) {\n const pivotMs = this.startMs + (this.pinchMidX / rect.width) * (this.endMs - this.startMs);\n const result = zoomAroundMs(this.startMs, this.endMs, this.pinchDist / newDist, pivotMs);\n this.startMs = result.startMs;\n this.endMs = result.endMs;\n this.draw();\n }\n this.pinchDist = newDist;\n this.pinchMidX = newMidX;\n }\n }\n\n private onTouchEnd(e: TouchEvent): void {\n this.stopEdgeScroll();\n if (this.touchMode === 'scrub') {\n this.ngZone.run(() => this.dragEnd.emit());\n }\n\n if (e.touches.length === 0) {\n this.touchMode = 'none';\n } else if (e.touches.length === 1) {\n this.touchMode = 'slide';\n this.touchX = e.touches[0].clientX;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnInit,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n NgZone,\n} from '@angular/core';\nimport * as Cesium from 'cesium';\nimport {\n type TimelineTheme,\n type TimelineLabels,\n type SwimLane,\n type SwimLaneEventInfo,\n defaultTheme,\n toJulianDate,\n TICK_AREA_HEIGHT,\n} from '@kteneyck/cesium-timeline-core';\nimport { TimelineControlsComponent } from './timeline-controls.component';\nimport { TimelineCanvasComponent } from './timeline-canvas.component';\n\nconst DEFAULT_FF_SPEEDS = [2, 4, 8, 16, 32, 100, 1];\nconst DEFAULT_RW_SPEEDS = [1, 2, 4, 8, 16, 32, 100];\n\n@Component({\n selector: 'ct-timeline',\n standalone: true,\n imports: [TimelineControlsComponent, TimelineCanvasComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n [class]=\"cssClass\"\n [style.width]=\"'100%'\"\n [style.height]=\"heightStyle\"\n [style.overflow]=\"'hidden'\"\n [style.display]=\"'flex'\"\n [style.flex-direction]=\"'column'\"\n [style.font-family]=\"'system-ui, -apple-system, sans-serif'\"\n [style.transition]=\"swimLaneTransition === 'animated' ? 'height 0.2s ease' : undefined\"\n >\n @if (showControls) {\n <div #controlsEl>\n <ct-timeline-controls\n [currentTime]=\"currentTimeState\"\n [isPlaying]=\"isPlayingState\"\n [multiplier]=\"multiplierState\"\n [isLive]=\"isLive\"\n [hasStartTime]=\"startTime != null\"\n [hasEndTime]=\"endTime != null\"\n [showJumpToStart]=\"showJumpToStart\"\n [showJumpToEnd]=\"showJumpToEnd\"\n [dateTimeFormat]=\"dateTimeFormat\"\n [timezone]=\"timezone\"\n [theme]=\"finalTheme\"\n [swimLanesVisible]=\"hasSwimLanes ? swimLanesExpanded : undefined\"\n (playPause)=\"handlePlayPause($event)\"\n (jumpToStart)=\"handleJumpToStart()\"\n (rewind)=\"handleRewindSpeed()\"\n (fastForward)=\"handleFastForward()\"\n (jumpToEnd)=\"handleJumpToEnd()\"\n (jumpToLive)=\"handleJumpToLive()\"\n (resetSpeed)=\"applyMultiplier(1)\"\n (dateTimeClick)=\"dateTimeClick.emit()\"\n (toggleSwimLanes)=\"handleToggleSwimLanes()\"\n [labels]=\"labels\"\n [liveButtonSize]=\"liveButtonSize\"\n [liveButtonPosition]=\"liveButtonPosition\"\n [live]=\"live\"\n />\n </div>\n }\n\n @if (enableDrag !== false || live) {\n <ct-timeline-canvas\n [currentTime]=\"currentTimeState\"\n [defaultStartMs]=\"defaultStartMs\"\n [defaultEndMs]=\"defaultEndMs\"\n [theme]=\"finalTheme\"\n [maxTicks]=\"maxTicks\"\n [timezone]=\"timezone\"\n [dateTimeFormat]=\"dateTimeFormat\"\n [months]=\"labels?.months\"\n [swimLanes]=\"swimLanes\"\n [showSwimLanes]=\"swimLanesExpanded\"\n [disableNeedleDrag]=\"live\"\n [invertScrollZoom]=\"invertScrollZoom\"\n (timeChange)=\"handleTimeChange($event)\"\n (dragStart)=\"isDragging = true\"\n (dragEnd)=\"isDragging = false\"\n (swimLaneItemClick)=\"swimLaneItemClick.emit($event)\"\n (swimLaneItemHover)=\"swimLaneItemHover.emit($event)\"\n (swimLaneItemDoubleClick)=\"swimLaneItemDoubleClick.emit($event)\"\n (swimLaneItemContextMenu)=\"swimLaneItemContextMenu.emit($event)\"\n (swimLaneReorder)=\"swimLaneReorder.emit($event)\"\n (rangeSelect)=\"rangeSelect.emit($event)\"\n />\n }\n </div>\n `,\n styles: [`:host { display: block; }`],\n})\nexport class TimelineComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n // ── Inputs ─────────────────────────────────────────────────────────────\n @Input() startTime?: Cesium.JulianDate | Date;\n @Input() endTime?: Cesium.JulianDate | Date;\n @Input() currentTime?: Cesium.JulianDate | Date;\n @Input() clock?: Cesium.Clock;\n @Input() height?: number;\n @Input() showControls = true;\n @Input() showJumpToStart?: boolean;\n @Input() showJumpToEnd?: boolean;\n @Input() enableDrag = true;\n @Input() dateTimeFormat?: string;\n @Input() jumpToTime?: Cesium.JulianDate | Date;\n @Input() maxTicks?: number;\n @Input() ffSpeeds: number[] = DEFAULT_FF_SPEEDS;\n @Input() rwSpeeds: number[] = DEFAULT_RW_SPEEDS;\n @Input() theme?: Partial<TimelineTheme>;\n @Input() cssClass?: string;\n @Input() timezone?: string;\n @Input() swimLanes?: SwimLane[];\n @Input() showSwimLanes?: boolean;\n @Input() swimLaneTransition: 'animated' | 'instant' = 'animated';\n /** Overrides for control-bar labels and tooltips (i18n / custom verbiage). */\n @Input() labels?: Partial<TimelineLabels>;\n /** @see TimelineBaseProps.liveButtonSize */\n @Input() liveButtonSize?: 'sm' | 'md' | 'lg';\n /** @see TimelineBaseProps.liveButtonPosition */\n @Input() liveButtonPosition?: 'left' | 'right';\n /** @see TimelineBaseProps.live */\n @Input() live = false;\n @Input() invertScrollZoom = false;\n\n // ── Outputs ────────────────────────────────────────────────────────────\n @Output() timeChange = new EventEmitter<Cesium.JulianDate>();\n @Output() playPause = new EventEmitter<boolean>();\n @Output() multiplierChange = new EventEmitter<number>();\n @Output() dateTimeClick = new EventEmitter<void>();\n @Output() showSwimLanesChange = new EventEmitter<boolean>();\n @Output() swimLaneItemClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemHover = new EventEmitter<SwimLaneEventInfo | null>();\n @Output() swimLaneItemDoubleClick = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneItemContextMenu = new EventEmitter<SwimLaneEventInfo>();\n @Output() swimLaneReorder = new EventEmitter<string[]>();\n @Output() rangeSelect = new EventEmitter<{ start: Cesium.JulianDate; end: Cesium.JulianDate }>();\n\n // ── ViewChild refs ─────────────────────────────────────────────────────\n @ViewChild(TimelineCanvasComponent) canvasComp?: TimelineCanvasComponent;\n @ViewChild('controlsEl') controlsRef?: ElementRef<HTMLDivElement>;\n\n // ── Internal state ─────────────────────────────────────────────────────\n currentTimeState!: Cesium.JulianDate;\n isPlayingState = false;\n multiplierState = 1;\n swimLanesExpanded = true;\n controlsHeight = 0;\n isDragging = false;\n defaultStartMs = 0;\n defaultEndMs = 0;\n finalTheme: TimelineTheme = { ...defaultTheme };\n\n private ro?: ResizeObserver;\n private clockCleanup?: () => void;\n private fallbackInterval?: ReturnType<typeof setInterval>;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private ngZone: NgZone,\n ) {}\n\n get hasSwimLanes(): boolean {\n return this.swimLanes != null && this.swimLanes.length > 0;\n }\n\n get isLive(): boolean {\n return Math.abs(Cesium.JulianDate.toDate(this.currentTimeState).getTime() - Date.now()) < 2_000;\n }\n\n get isCollapsed(): boolean {\n return this.hasSwimLanes && !this.swimLanesExpanded;\n }\n\n get heightStyle(): string {\n if (this.isCollapsed) return `${this.controlsHeight + TICK_AREA_HEIGHT}px`;\n if (this.height != null) return `${this.height}px`;\n return '100%';\n }\n\n // ── Lifecycle ──────────────────────────────────────────────────────────\n\n ngOnInit(): void {\n const now = Date.now();\n this.defaultStartMs = this.startTime\n ? Cesium.JulianDate.toDate(toJulianDate(this.startTime)).getTime()\n : now - 12 * 3600 * 1000;\n this.defaultEndMs = this.endTime\n ? Cesium.JulianDate.toDate(toJulianDate(this.endTime)).getTime()\n : now + 12 * 3600 * 1000;\n\n this.currentTimeState = toJulianDate(\n this.currentTime ?? (this.startTime ?? Cesium.JulianDate.fromDate(new Date()))\n );\n this.isPlayingState = this.clock?.shouldAnimate ?? false;\n this.multiplierState = this.clock?.multiplier ?? 1;\n this.swimLanesExpanded = this.showSwimLanes ?? true;\n this.finalTheme = { ...defaultTheme, ...this.theme };\n }\n\n ngAfterViewInit(): void {\n const el = this.controlsRef?.nativeElement;\n if (el) {\n this.ro = new ResizeObserver(([entry]) => {\n this.controlsHeight = entry.borderBoxSize[0].blockSize;\n this.cdr.markForCheck();\n });\n this.ro.observe(el);\n }\n\n // Clock sync\n this.setupClockSync();\n\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme']) {\n this.finalTheme = { ...defaultTheme, ...this.theme };\n }\n if (changes['showSwimLanes'] && this.showSwimLanes != null) {\n this.swimLanesExpanded = this.showSwimLanes;\n }\n if (changes['clock'] && !changes['clock'].firstChange) {\n this.cleanupClockSync();\n this.setupClockSync();\n }\n if (changes['jumpToTime'] && this.jumpToTime && !this.live) {\n const t = toJulianDate(this.jumpToTime);\n this.handleTimeChange(t);\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n const newMs = Cesium.JulianDate.toDate(t).getTime();\n this.canvasComp.zoomTo(newMs - span / 2, newMs + span / 2);\n }\n }\n if ((changes['startTime'] && !changes['startTime'].firstChange) ||\n (changes['endTime'] && !changes['endTime'].firstChange)) {\n const now = Date.now();\n this.defaultStartMs = this.startTime\n ? Cesium.JulianDate.toDate(toJulianDate(this.startTime)).getTime()\n : now - 12 * 3600 * 1000;\n this.defaultEndMs = this.endTime\n ? Cesium.JulianDate.toDate(toJulianDate(this.endTime)).getTime()\n : now + 12 * 3600 * 1000;\n if (this.startTime != null && this.endTime != null) {\n this.canvasComp?.zoomTo(this.defaultStartMs, this.defaultEndMs);\n }\n this.cdr.markForCheck();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanupClockSync();\n this.ro?.disconnect();\n if (this.fallbackInterval) clearInterval(this.fallbackInterval);\n }\n\n // ── Clock sync ─────────────────────────────────────────────────────────\n\n private setupClockSync(): void {\n if (this.clock) {\n const onTick = () => {\n if (this.isDragging) return;\n const ct = Cesium.JulianDate.clone(this.clock!.currentTime);\n this.currentTimeState = ct;\n this.isPlayingState = this.clock!.shouldAnimate;\n this.multiplierState = this.clock!.multiplier;\n\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n const ctMs = Cesium.JulianDate.toDate(ct).getTime();\n const pos = ctMs - startMs;\n if (pos <= span * 0.1) {\n this.canvasComp.zoomTo(ctMs - span * 0.1, ctMs + span * 0.9, ctMs);\n } else if (pos >= span * 0.9) {\n this.canvasComp.zoomTo(ctMs - span * 0.9, ctMs + span * 0.1, ctMs);\n }\n }\n this.cdr.markForCheck();\n };\n this.clock.onTick.addEventListener(onTick);\n this.clockCleanup = () => this.clock!.onTick.removeEventListener(onTick);\n } else {\n this.ngZone.runOutsideAngular(() => {\n this.fallbackInterval = setInterval(() => {\n if (this.isDragging) return;\n const ct = Cesium.JulianDate.fromDate(new Date());\n this.currentTimeState = ct;\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n const ctMs = Cesium.JulianDate.toDate(ct).getTime();\n const pos = ctMs - startMs;\n if (pos <= span * 0.1) this.canvasComp.zoomTo(ctMs - span * 0.1, ctMs + span * 0.9, ctMs);\n else if (pos >= span * 0.9) this.canvasComp.zoomTo(ctMs - span * 0.9, ctMs + span * 0.1, ctMs);\n }\n this.ngZone.run(() => this.cdr.markForCheck());\n }, 1000);\n });\n }\n }\n\n private cleanupClockSync(): void {\n this.clockCleanup?.();\n this.clockCleanup = undefined;\n if (this.fallbackInterval) {\n clearInterval(this.fallbackInterval);\n this.fallbackInterval = undefined;\n }\n }\n\n // ── Handlers ───────────────────────────────────────────────────────────\n\n handleTimeChange(t: Cesium.JulianDate): void {\n this.currentTimeState = t;\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.timeChange.emit(t);\n this.cdr.markForCheck();\n }\n\n handlePlayPause(playing: boolean): void {\n if (playing && this.multiplierState < 0) {\n this.applyMultiplier(1, false);\n }\n if (this.clock) this.clock.shouldAnimate = playing;\n this.isPlayingState = playing;\n this.playPause.emit(playing);\n this.cdr.markForCheck();\n }\n\n handleFastForward(): void {\n const speeds = this.ffSpeeds.length > 0 ? this.ffSpeeds : DEFAULT_FF_SPEEDS;\n const cur = this.multiplierState > 1 ? this.multiplierState : 1;\n const idx = speeds.indexOf(cur);\n const next = speeds[idx < 0 || idx === speeds.length - 1 ? 0 : idx + 1];\n this.applyMultiplier(next);\n }\n\n handleRewindSpeed(): void {\n const speeds = this.rwSpeeds.length > 0 ? this.rwSpeeds : DEFAULT_RW_SPEEDS;\n const curAbs = this.multiplierState < 0 ? Math.abs(this.multiplierState) : 0;\n const idx = speeds.indexOf(curAbs);\n const next = -(speeds[idx < 0 || idx === speeds.length - 1 ? 0 : idx + 1]);\n this.applyMultiplier(next);\n }\n\n handleJumpToStart(): void {\n const t = toJulianDate(this.startTime ?? Cesium.JulianDate.fromDate(new Date(this.defaultStartMs)));\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.currentTimeState = t;\n this.canvasComp?.zoomTo(this.defaultStartMs, this.defaultEndMs);\n this.cdr.markForCheck();\n }\n\n handleJumpToEnd(): void {\n const t = toJulianDate(this.endTime ?? Cesium.JulianDate.fromDate(new Date(this.defaultEndMs)));\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.currentTimeState = t;\n this.canvasComp?.zoomTo(this.defaultStartMs, this.defaultEndMs);\n this.cdr.markForCheck();\n }\n\n handleJumpToLive(): void {\n const t = Cesium.JulianDate.fromDate(new Date());\n if (this.clock) this.clock.currentTime = Cesium.JulianDate.clone(t);\n this.currentTimeState = t;\n this.applyMultiplier(1);\n const nowMs = Date.now();\n if (this.canvasComp) {\n const { startMs, endMs } = this.canvasComp.getVisibleRange();\n const span = endMs - startMs;\n this.canvasComp.zoomTo(nowMs - span / 2, nowMs + span / 2);\n }\n this.cdr.markForCheck();\n }\n\n handleToggleSwimLanes(): void {\n this.swimLanesExpanded = !this.swimLanesExpanded;\n this.showSwimLanesChange.emit(this.swimLanesExpanded);\n this.cdr.markForCheck();\n }\n\n applyMultiplier(m: number, play = true): void {\n if (this.clock) { this.clock.multiplier = m; if (play) this.clock.shouldAnimate = true; }\n this.multiplierState = m;\n if (play) this.isPlayingState = true;\n this.multiplierChange.emit(m);\n this.cdr.markForCheck();\n }\n}\n","// Components\nexport { TimelineComponent } from './lib/timeline.component';\nexport { TimelineCanvasComponent, TICK_AREA_HEIGHT } from './lib/timeline-canvas.component';\nexport { TimelineControlsComponent } from './lib/timeline-controls.component';\n\n// Re-export core types and utilities\nexport * from '@kteneyck/cesium-timeline-core';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["coreHitTestSwimLane","coreHitTestLaneLabel","coreIsInSwimLaneRegion"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kteneyck/cesium-timeline-angular",
3
- "version": "0.9.0",
3
+ "version": "0.11.0",
4
4
  "description": "Angular timeline component for Cesium with clock integration",
5
5
  "license": "MIT",
6
6
  "author": "kteneyck",
@@ -28,12 +28,12 @@
28
28
  "directory": "dist"
29
29
  },
30
30
  "peerDependencies": {
31
- "@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
32
- "@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0",
31
+ "@angular/common": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
32
+ "@angular/core": "^17.0.0 || ^18.0.0 || ^19.0.0 || ^20.0.0 || ^21.0.0 || ^22.0.0",
33
33
  "cesium": "^1.100.0"
34
34
  },
35
35
  "dependencies": {
36
- "@kteneyck/cesium-timeline-core": "0.9.0",
36
+ "@kteneyck/cesium-timeline-core": "0.11.0",
37
37
  "tslib": "^2.6.0"
38
38
  },
39
39
  "sideEffects": false,