@kodezen/player 1.0.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.
- package/LICENSE +21 -0
- package/README.md +89 -0
- package/dist/index.cjs +805 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +45 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +802 -0
- package/dist/index.js.map +1 -0
- package/dist/react/index.cjs +922 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +24 -0
- package/dist/react/index.d.ts +24 -0
- package/dist/react/index.js +920 -0
- package/dist/react/index.js.map +1 -0
- package/dist/styles.css +172 -0
- package/dist/types-TFltFgey.d.cts +128 -0
- package/dist/types-TFltFgey.d.ts +128 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/emitter.ts","../src/providers/html5.ts","../src/providers/youtube.ts","../src/providers/vimeo.ts","../src/providers/index.ts","../src/core/Controls.ts","../src/core/Player.ts","../src/index.ts"],"names":["apiPromise","loadApi"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Minimal typed event emitter shared by the player core and providers. */\nexport class Emitter<Events extends Record<keyof Events, (...args: never[]) => void>> {\n private listeners = new Map<keyof Events, Set<(...args: never[]) => void>>();\n\n on<K extends keyof Events>(name: K, cb: Events[K]): () => void {\n let set = this.listeners.get(name);\n if (!set) {\n set = new Set();\n this.listeners.set(name, set);\n }\n set.add(cb as (...args: never[]) => void);\n return () => this.off(name, cb);\n }\n\n off<K extends keyof Events>(name: K, cb: Events[K]): void {\n this.listeners.get(name)?.delete(cb as (...args: never[]) => void);\n }\n\n emit<K extends keyof Events>(name: K, ...args: Parameters<Events[K]>): void {\n // Copy to a static array so a listener removing itself mid-dispatch is safe.\n const set = this.listeners.get(name);\n if (!set) return;\n for (const cb of [...set]) (cb as (...a: Parameters<Events[K]>) => void)(...args);\n }\n\n clear(): void {\n this.listeners.clear();\n }\n}\n","import { Emitter } from '../emitter';\nimport type { Provider, ProviderCapabilities, ProviderEvents, Source } from '../types';\n\nconst HLS_EXTENSION = /\\.m3u8($|\\?)/i;\nconst HLS_MIME = /mpegurl/i;\n\nfunction isHls(source: Source): boolean {\n return HLS_MIME.test(source.mime ?? '') || HLS_EXTENSION.test(source.url ?? '');\n}\n\n/**\n * HTML5 provider — self-hosted / external mp4 & webm, and HLS (`.m3u8`, e.g.\n * Mux) via a native <video>. There's no distinct \"Mux provider\": Mux is\n * plain HLS streaming, so it's just this provider picking `hls.js` for\n * browsers without native HLS (Safari has it built in; others don't).\n */\nexport class Html5Provider implements Provider {\n readonly capabilities: ProviderCapabilities = { seekable: true, rate: true, volume: true };\n\n private emitter = new Emitter<ProviderEvents>();\n private video: HTMLVideoElement;\n private disposers: Array<() => void> = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private hls: any = null;\n\n constructor(private source: Source) {\n this.video = document.createElement('video');\n this.video.className = 'kzp-media';\n this.video.playsInline = true;\n this.video.preload = 'metadata';\n this.video.controls = false;\n if (source.poster) this.video.poster = source.poster;\n }\n\n async mount(container: HTMLElement): Promise<void> {\n const src = this.source.url ?? '';\n container.appendChild(this.video);\n\n const on = (name: string, handler: EventListener) => {\n this.video.addEventListener(name, handler);\n this.disposers.push(() => this.video.removeEventListener(name, handler));\n };\n\n on('loadedmetadata', () => {\n this.emitter.emit('durationchange', this.getDuration());\n this.emitter.emit('ready');\n });\n on('durationchange', () => this.emitter.emit('durationchange', this.getDuration()));\n on('timeupdate', () => this.emitter.emit('timeupdate', this.video.currentTime));\n on('play', () => this.emitter.emit('play'));\n on('pause', () => this.emitter.emit('pause'));\n on('ended', () => this.emitter.emit('ended'));\n\n if (isHls(this.source) && !this.video.canPlayType('application/vnd.apple.mpegurl')) {\n on('error', () => this.emitter.emit('error', 'Media failed to load.'));\n // Safari plays HLS natively; every other browser needs hls.js. Loaded\n // lazily so mp4/webm playback never pays for a library it doesn't use.\n const { default: Hls } = await import('hls.js');\n if (!Hls.isSupported()) {\n this.emitter.emit('error', 'HLS playback is not supported in this browser.');\n return;\n }\n this.hls = new Hls();\n this.hls.on(Hls.Events.ERROR, (_event: unknown, data: { fatal: boolean }) => {\n if (data.fatal) this.emitter.emit('error', 'Media failed to load.');\n });\n this.hls.loadSource(src);\n this.hls.attachMedia(this.video);\n } else {\n const el = document.createElement('source');\n el.src = src;\n el.type = this.source.mime ?? (isHls(this.source) ? 'application/vnd.apple.mpegurl' : 'video/mp4');\n this.video.appendChild(el);\n on('error', () => this.emitter.emit('error', 'Media failed to load.'));\n }\n\n // Some browsers fire loadedmetadata before listeners attach on cached media.\n if (this.video.readyState >= 1) {\n this.emitter.emit('durationchange', this.getDuration());\n this.emitter.emit('ready');\n }\n }\n\n play(): void {\n void this.video.play().catch(() => {\n /* autoplay/gesture rejection is not fatal — surfaced via the play button. */\n });\n }\n\n pause(): void {\n this.video.pause();\n }\n\n seek(seconds: number): void {\n const d = this.getDuration();\n this.video.currentTime = d > 0 ? Math.min(seconds, d) : Math.max(0, seconds);\n }\n\n getCurrentTime(): number {\n return this.video.currentTime || 0;\n }\n\n getDuration(): number {\n return Number.isFinite(this.video.duration) ? this.video.duration : 0;\n }\n\n setVolume(v: number): void {\n this.video.volume = Math.min(1, Math.max(0, v));\n }\n\n getVolume(): number {\n return this.video.volume;\n }\n\n setMuted(m: boolean): void {\n this.video.muted = m;\n }\n\n isMuted(): boolean {\n return this.video.muted;\n }\n\n setRate(r: number): void {\n this.video.playbackRate = r;\n }\n\n getRate(): number {\n return this.video.playbackRate;\n }\n\n isPlaying(): boolean {\n return !this.video.paused && !this.video.ended;\n }\n\n on<K extends keyof ProviderEvents>(event: K, cb: ProviderEvents[K]): () => void {\n return this.emitter.on(event, cb);\n }\n\n destroy(): void {\n for (const dispose of this.disposers) dispose();\n this.disposers = [];\n this.emitter.clear();\n this.hls?.destroy();\n this.hls = null;\n this.video.removeAttribute('src');\n this.video.load();\n this.video.remove();\n }\n}\n","import { Emitter } from '../emitter';\nimport type { Provider, ProviderCapabilities, ProviderEvents, Source } from '../types';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare global {\n interface Window {\n YT?: any;\n onYouTubeIframeAPIReady?: () => void;\n }\n}\n\nlet apiPromise: Promise<any> | null = null;\n\n/** Lazy-load the YouTube IFrame API once, chaining any existing global callback. */\nfunction loadApi(): Promise<any> {\n if (typeof window === 'undefined') return Promise.reject(new Error('no window'));\n if (window.YT && window.YT.Player) return Promise.resolve(window.YT);\n if (apiPromise) return apiPromise;\n apiPromise = new Promise((resolve) => {\n const prev = window.onYouTubeIframeAPIReady;\n window.onYouTubeIframeAPIReady = () => {\n prev?.();\n resolve(window.YT);\n };\n const tag = document.createElement('script');\n tag.src = 'https://www.youtube.com/iframe_api';\n document.head.appendChild(tag);\n });\n return apiPromise;\n}\n\nfunction parseId(source: Source): string {\n if (source.id) return source.id;\n const url = source.url ?? '';\n const m = url.match(/(?:youtu\\.be\\/|[?&]v=|\\/embed\\/|\\/shorts\\/)([\\w-]{11})/);\n return m?.[1] ?? url;\n}\n\n/** YouTube provider — drives an IFrame API player behind our own control bar. */\nexport class YouTubeProvider implements Provider {\n readonly capabilities: ProviderCapabilities = { seekable: true, rate: true, volume: true };\n\n private emitter = new Emitter<ProviderEvents>();\n private yt: any = null;\n private host?: HTMLElement;\n private current = 0;\n private duration = 0;\n private rate = 1;\n private muted = false;\n private volume = 1;\n private playing = false;\n private ticker: number | null = null;\n\n constructor(private source: Source) {}\n\n async mount(container: HTMLElement): Promise<void> {\n const host = document.createElement('div');\n host.className = 'kzp-media kzp-embed';\n container.appendChild(host);\n this.host = host;\n\n const YT = await loadApi();\n this.yt = new YT.Player(host, {\n videoId: parseId(this.source),\n playerVars: {\n controls: 0,\n modestbranding: 1,\n rel: 0,\n playsinline: 1,\n disablekb: 1,\n iv_load_policy: 3,\n },\n events: {\n onReady: () => {\n this.duration = this.yt.getDuration() || 0;\n this.volume = (this.yt.getVolume?.() ?? 100) / 100;\n this.emitter.emit('durationchange', this.duration);\n this.emitter.emit('ready');\n },\n onStateChange: (e: any) => {\n const S = YT.PlayerState;\n if (e.data === S.PLAYING) {\n this.playing = true;\n this.duration = this.yt.getDuration() || this.duration;\n this.emitter.emit('durationchange', this.duration);\n this.emitter.emit('play');\n this.startTicker();\n } else if (e.data === S.PAUSED) {\n this.playing = false;\n this.emitter.emit('pause');\n this.stopTicker();\n } else if (e.data === S.ENDED) {\n this.playing = false;\n this.emitter.emit('ended');\n this.stopTicker();\n }\n },\n onError: () => this.emitter.emit('error', 'YouTube playback error.'),\n },\n });\n }\n\n private startTicker(): void {\n this.stopTicker();\n this.ticker = window.setInterval(() => {\n if (!this.yt) return;\n this.current = this.yt.getCurrentTime() || 0;\n this.emitter.emit('timeupdate', this.current);\n }, 250);\n }\n\n private stopTicker(): void {\n if (this.ticker !== null) {\n clearInterval(this.ticker);\n this.ticker = null;\n }\n }\n\n play(): void {\n this.yt?.playVideo?.();\n }\n\n pause(): void {\n this.yt?.pauseVideo?.();\n }\n\n seek(seconds: number): void {\n const s = Math.max(0, seconds);\n this.yt?.seekTo?.(s, true);\n this.current = s;\n }\n\n getCurrentTime(): number {\n return this.current;\n }\n\n getDuration(): number {\n return this.duration;\n }\n\n setVolume(v: number): void {\n this.volume = Math.min(1, Math.max(0, v));\n this.yt?.setVolume?.(this.volume * 100);\n }\n\n getVolume(): number {\n return this.volume;\n }\n\n setMuted(m: boolean): void {\n this.muted = m;\n if (m) this.yt?.mute?.();\n else this.yt?.unMute?.();\n }\n\n isMuted(): boolean {\n return this.muted;\n }\n\n setRate(r: number): void {\n this.rate = r;\n this.yt?.setPlaybackRate?.(r);\n }\n\n getRate(): number {\n return this.rate;\n }\n\n isPlaying(): boolean {\n return this.playing;\n }\n\n on<K extends keyof ProviderEvents>(event: K, cb: ProviderEvents[K]): () => void {\n return this.emitter.on(event, cb);\n }\n\n destroy(): void {\n this.stopTicker();\n this.emitter.clear();\n this.yt?.destroy?.();\n this.host?.remove();\n }\n}\n","import { Emitter } from '../emitter';\nimport type { Provider, ProviderCapabilities, ProviderEvents, Source } from '../types';\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare global {\n interface Window {\n Vimeo?: any;\n }\n}\n\nlet apiPromise: Promise<any> | null = null;\n\n/** Lazy-load the Vimeo Player API once. */\nfunction loadApi(): Promise<any> {\n if (typeof window === 'undefined') return Promise.reject(new Error('no window'));\n if (window.Vimeo && window.Vimeo.Player) return Promise.resolve(window.Vimeo);\n if (apiPromise) return apiPromise;\n apiPromise = new Promise((resolve, reject) => {\n const tag = document.createElement('script');\n tag.src = 'https://player.vimeo.com/api/player.js';\n tag.onload = () => resolve(window.Vimeo);\n tag.onerror = () => reject(new Error('Vimeo API failed to load'));\n document.head.appendChild(tag);\n });\n return apiPromise;\n}\n\nfunction parseSource(source: Source): { id?: number; url?: string } {\n if (source.id) return { id: Number(source.id) };\n const url = source.url ?? '';\n const m = url.match(/vimeo\\.com\\/(?:video\\/)?(\\d+)/);\n if (m?.[1]) return { id: Number(m[1]) };\n return { url };\n}\n\n/**\n * Vimeo provider. The Vimeo SDK is promise-based, so getCurrentTime/getDuration\n * return values cached from timeupdate/ready events (the Provider getters are sync).\n */\nexport class VimeoProvider implements Provider {\n readonly capabilities: ProviderCapabilities = { seekable: true, rate: true, volume: true };\n\n private emitter = new Emitter<ProviderEvents>();\n private player: any = null;\n private host?: HTMLElement;\n private current = 0;\n private duration = 0;\n private rate = 1;\n private muted = false;\n private volume = 1;\n private playing = false;\n\n constructor(private source: Source) {}\n\n async mount(container: HTMLElement): Promise<void> {\n const host = document.createElement('div');\n host.className = 'kzp-media kzp-embed';\n container.appendChild(host);\n this.host = host;\n\n const Vimeo = await loadApi();\n const opts: any = { controls: false, responsive: false, ...parseSource(this.source) };\n this.player = new Vimeo.Player(host, opts);\n\n this.player.on('timeupdate', (d: any) => {\n this.current = d.seconds ?? this.current;\n if (d.duration) this.duration = d.duration;\n this.emitter.emit('timeupdate', this.current);\n });\n this.player.on('play', () => {\n this.playing = true;\n this.emitter.emit('play');\n });\n this.player.on('pause', () => {\n this.playing = false;\n this.emitter.emit('pause');\n });\n this.player.on('ended', () => {\n this.playing = false;\n this.emitter.emit('ended');\n });\n this.player.on('error', () => this.emitter.emit('error', 'Vimeo playback error.'));\n\n try {\n this.duration = (await this.player.getDuration()) || 0;\n this.emitter.emit('durationchange', this.duration);\n } catch {\n /* duration resolves later via timeupdate */\n }\n this.emitter.emit('ready');\n }\n\n play(): void {\n void this.player?.play?.();\n }\n\n pause(): void {\n void this.player?.pause?.();\n }\n\n seek(seconds: number): void {\n this.current = Math.max(0, seconds);\n void this.player?.setCurrentTime?.(this.current);\n }\n\n getCurrentTime(): number {\n return this.current;\n }\n\n getDuration(): number {\n return this.duration;\n }\n\n setVolume(v: number): void {\n this.volume = Math.min(1, Math.max(0, v));\n void this.player?.setVolume?.(this.volume);\n }\n\n getVolume(): number {\n return this.volume;\n }\n\n setMuted(m: boolean): void {\n this.muted = m;\n void this.player?.setVolume?.(m ? 0 : this.volume);\n }\n\n isMuted(): boolean {\n return this.muted;\n }\n\n setRate(r: number): void {\n this.rate = r;\n void this.player?.setPlaybackRate?.(r);\n }\n\n getRate(): number {\n return this.rate;\n }\n\n isPlaying(): boolean {\n return this.playing;\n }\n\n on<K extends keyof ProviderEvents>(event: K, cb: ProviderEvents[K]): () => void {\n return this.emitter.on(event, cb);\n }\n\n destroy(): void {\n this.emitter.clear();\n void this.player?.destroy?.();\n this.host?.remove();\n }\n}\n","import type { Provider, Source } from '../types';\nimport { Html5Provider } from './html5';\nimport { YouTubeProvider } from './youtube';\nimport { VimeoProvider } from './vimeo';\n\n/**\n * Resolve a Source to a concrete provider. Every provider implements the same\n * Provider interface, so the player core is agnostic to which one is chosen.\n */\nexport function createProvider(source: Source): Provider {\n switch (source.type) {\n case 'html5':\n case 'external':\n return new Html5Provider(source);\n case 'youtube':\n return new YouTubeProvider(source);\n case 'vimeo':\n return new VimeoProvider(source);\n default:\n throw new Error(`[kodezen-player] Unknown source type \"${String(source.type)}\".`);\n }\n}\n","import type { ControlsConfig, PlayerState } from '../types';\n\nconst ICONS = {\n play: '<path d=\"M8 5v14l11-7z\"/>',\n pause: '<path d=\"M6 5h4v14H6zM14 5h4v14h-4z\"/>',\n volume: '<path d=\"M3 10v4h4l5 5V5L7 10H3zm13.5 2a4.5 4.5 0 0 0-2.5-4v8a4.5 4.5 0 0 0 2.5-4z\"/>',\n muted: '<path d=\"M3 10v4h4l5 5V5L7 10H3zm13 2 3 3 1-1-3-3 3-3-1-1-3 3-3-3-1 1 3 3-3 3 1 1z\"/>',\n full: '<path d=\"M4 4h6v2H6v4H4V4zm10 0h6v6h-2V6h-4V4zM4 14h2v4h4v2H4v-6zm14 0h2v6h-6v-2h4v-4z\"/>',\n} as const;\n\nfunction icon(paths: string): string {\n return `<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">${paths}</svg>`;\n}\n\nfunction fmt(sec: number): string {\n if (!Number.isFinite(sec) || sec < 0) sec = 0;\n const s = Math.floor(sec % 60);\n const m = Math.floor((sec / 60) % 60);\n const h = Math.floor(sec / 3600);\n const mm = h > 0 ? String(m).padStart(2, '0') : String(m);\n const ss = String(s).padStart(2, '0');\n return h > 0 ? `${h}:${mm}:${ss}` : `${mm}:${ss}`;\n}\n\nexport interface ControlsCallbacks {\n onToggle(): void;\n /** Requested seek (seconds). The player clamps this when lockSeek is on. */\n onSeek(seconds: number): void;\n onVolume(v: number): void;\n onMuteToggle(): void;\n onRate(rate: number): void;\n onFullscreen(): void;\n}\n\nconst DEFAULT_CONFIG: ControlsConfig = {\n playPause: true,\n seek: true,\n time: true,\n volume: true,\n speed: true,\n fullscreen: true,\n};\n\n/** Vanilla DOM control bar. Framework-agnostic; the player drives it via update(). */\nexport class Controls {\n readonly el: HTMLElement;\n private config: ControlsConfig;\n\n private playBtn?: HTMLButtonElement;\n private scrubber?: HTMLInputElement;\n private timeEl?: HTMLElement;\n private volBtn?: HTMLButtonElement;\n private volRange?: HTMLInputElement;\n private speedBtn?: HTMLButtonElement;\n private speedMenu?: HTMLElement;\n\n private scrubbing = false;\n private lockSeek: boolean;\n private seekableMax = Infinity;\n\n constructor(\n private cb: ControlsCallbacks,\n opts: { config?: Partial<ControlsConfig>; speeds: number[]; lockSeek: boolean },\n ) {\n this.config = { ...DEFAULT_CONFIG, ...opts.config };\n this.lockSeek = opts.lockSeek;\n this.el = document.createElement('div');\n this.el.className = 'kzp-controls';\n this.build(opts.speeds);\n }\n\n private build(speeds: number[]): void {\n if (this.config.playPause) {\n this.playBtn = this.button('kzp-play', 'Play', ICONS.play);\n this.playBtn.addEventListener('click', () => this.cb.onToggle());\n this.el.appendChild(this.playBtn);\n }\n\n if (this.config.seek) {\n this.scrubber = document.createElement('input');\n this.scrubber.type = 'range';\n this.scrubber.className = 'kzp-scrubber';\n this.scrubber.min = '0';\n this.scrubber.max = '0';\n this.scrubber.step = '0.1';\n this.scrubber.value = '0';\n this.scrubber.setAttribute('aria-label', 'Seek');\n const commit = () => this.cb.onSeek(this.clamp(Number(this.scrubber!.value)));\n // Seek-lock blocks the drag/click at its source (pointerdown/keydown)\n // rather than via the `disabled` attribute or `pointer-events`, so the\n // scrubber keeps its normal look *and* its own `cursor` still applies —\n // both are lost once an element stops receiving pointer events at all.\n this.scrubber.addEventListener('pointerdown', (e) => {\n if (this.lockSeek) {\n e.preventDefault();\n return;\n }\n this.scrubbing = true;\n });\n this.scrubber.addEventListener('keydown', (e) => {\n if (this.lockSeek) e.preventDefault();\n });\n this.scrubber.addEventListener('input', commit);\n this.scrubber.addEventListener('change', () => {\n commit();\n this.scrubbing = false;\n });\n this.el.appendChild(this.scrubber);\n }\n\n if (this.config.time) {\n this.timeEl = document.createElement('span');\n this.timeEl.className = 'kzp-time';\n this.timeEl.textContent = '0:00 / 0:00';\n this.el.appendChild(this.timeEl);\n }\n\n if (this.config.volume) {\n const wrap = document.createElement('div');\n wrap.className = 'kzp-volume';\n this.volBtn = this.button('kzp-mute', 'Mute', ICONS.volume);\n this.volBtn.addEventListener('click', () => this.cb.onMuteToggle());\n this.volRange = document.createElement('input');\n this.volRange.type = 'range';\n this.volRange.className = 'kzp-vol-range';\n this.volRange.min = '0';\n this.volRange.max = '1';\n this.volRange.step = '0.05';\n this.volRange.value = '1';\n this.volRange.setAttribute('aria-label', 'Volume');\n this.volRange.addEventListener('input', () => this.cb.onVolume(Number(this.volRange!.value)));\n wrap.append(this.volBtn, this.volRange);\n this.el.appendChild(wrap);\n }\n\n if (this.config.speed && speeds.length > 1) {\n const wrap = document.createElement('div');\n wrap.className = 'kzp-speed';\n this.speedBtn = this.button('kzp-speed-btn', 'Playback speed', '');\n this.speedBtn.textContent = '1x';\n this.speedMenu = document.createElement('div');\n this.speedMenu.className = 'kzp-speed-menu';\n this.speedMenu.hidden = true;\n for (const rate of speeds) {\n const item = document.createElement('button');\n item.type = 'button';\n item.textContent = `${rate}x`;\n item.dataset.rate = String(rate);\n item.addEventListener('click', () => {\n this.cb.onRate(rate);\n this.speedMenu!.hidden = true;\n });\n this.speedMenu.appendChild(item);\n }\n this.speedBtn.addEventListener('click', () => {\n this.speedMenu!.hidden = !this.speedMenu!.hidden;\n });\n wrap.append(this.speedBtn, this.speedMenu);\n this.el.appendChild(wrap);\n }\n\n if (this.config.fullscreen) {\n const btn = this.button('kzp-full', 'Fullscreen', ICONS.full);\n btn.addEventListener('click', () => this.cb.onFullscreen());\n this.el.appendChild(btn);\n }\n }\n\n private button(cls: string, label: string, svg: string): HTMLButtonElement {\n const b = document.createElement('button');\n b.type = 'button';\n b.className = cls;\n b.setAttribute('aria-label', label);\n if (svg) b.innerHTML = icon(svg);\n return b;\n }\n\n private clamp(value: number): number {\n return this.lockSeek ? Math.min(value, this.seekableMax) : value;\n }\n\n setLockSeek(locked: boolean): void {\n this.lockSeek = locked;\n }\n\n /** Push the latest state into the DOM. Called on every player timeupdate. */\n update(state: PlayerState, extras: { muted: boolean; volume: number; rate: number }): void {\n if (this.playBtn) {\n this.playBtn.innerHTML = icon(state.playing ? ICONS.pause : ICONS.play);\n this.playBtn.setAttribute('aria-label', state.playing ? 'Pause' : 'Play');\n }\n if (this.scrubber) {\n this.seekableMax = this.lockSeek ? state.furthest : Infinity;\n this.scrubber.max = String(state.duration || 0);\n if (!this.scrubbing) this.scrubber.value = String(state.current);\n }\n if (this.timeEl) {\n this.timeEl.textContent = `${fmt(state.current)} / ${fmt(state.duration)}`;\n }\n if (this.volBtn) {\n this.volBtn.innerHTML = icon(extras.muted || extras.volume === 0 ? ICONS.muted : ICONS.volume);\n }\n if (this.volRange && document.activeElement !== this.volRange) {\n this.volRange.value = String(extras.muted ? 0 : extras.volume);\n }\n if (this.speedBtn) this.speedBtn.textContent = `${extras.rate}x`;\n }\n\n destroy(): void {\n this.el.remove();\n }\n}\n","import { Emitter } from '../emitter';\nimport { createProvider } from '../providers';\nimport type {\n KodezenPlayerInstance,\n PlayerEvents,\n PlayerOptions,\n PlayerState,\n Provider,\n} from '../types';\nimport { Controls } from './Controls';\n\nconst DEFAULT_SPEEDS = [0.5, 1, 1.25, 1.5, 2];\n/** A forward jump larger than this (seconds) between ticks is treated as a seek, not playback. */\nconst NATURAL_ADVANCE_MAX = 2;\n\nexport class Player implements KodezenPlayerInstance {\n private emitter = new Emitter<PlayerEvents>();\n private provider: Provider;\n private controls: Controls;\n private root: HTMLElement;\n private stage: HTMLElement;\n\n private furthest = 0;\n private lastTick = 0;\n private duration = 0;\n private playing = false;\n private ready = false;\n private disposers: Array<() => void> = [];\n\n constructor(private container: HTMLElement, private options: PlayerOptions) {\n const speeds = options.speeds ?? DEFAULT_SPEEDS;\n\n this.root = document.createElement('div');\n this.root.className = 'kzp' + (options.className ? ` ${options.className}` : '');\n if (options.lockSeek) this.root.classList.add('kzp--locked');\n\n this.stage = document.createElement('div');\n this.stage.className = 'kzp-stage';\n this.root.appendChild(this.stage);\n\n // YouTube/Vimeo's own iframe chrome (title bar, related-video card, its\n // own control bar) still appears on hover even with their controls\n // disabled — it renders *inside* the stage, so our own control bar can't\n // cover it. This transparent layer sits on top of the embed instead, so\n // the mouse never actually reaches it, and forwards a plain click to the\n // same play/pause toggle the embed itself would otherwise handle.\n const hitLayer = document.createElement('div');\n hitLayer.className = 'kzp-hit-layer';\n hitLayer.addEventListener('click', () => this.toggle());\n this.stage.appendChild(hitLayer);\n\n // Built before Controls so a provider that can't seek/rate-change/volume\n // (e.g. a live stream) hides those controls from the start, instead of\n // rendering them non-functional.\n this.provider = createProvider(options.source);\n const caps = this.provider.capabilities;\n\n this.controls = new Controls(\n {\n onToggle: () => this.toggle(),\n onSeek: (s) => this.seek(s),\n onVolume: (v) => {\n this.provider.setMuted(false);\n this.provider.setVolume(v);\n this.render();\n },\n onMuteToggle: () => {\n this.provider.setMuted(!this.provider.isMuted());\n this.render();\n },\n onRate: (r) => {\n this.provider.setRate(r);\n this.render();\n },\n onFullscreen: () => this.toggleFullscreen(),\n },\n {\n config: {\n ...options.controls,\n seek: (options.controls?.seek ?? true) && caps.seekable,\n speed: (options.controls?.speed ?? true) && caps.rate,\n volume: (options.controls?.volume ?? true) && caps.volume,\n },\n speeds,\n lockSeek: !!options.lockSeek,\n },\n );\n this.root.appendChild(this.controls.el);\n this.container.appendChild(this.root);\n\n this.wireProvider();\n void this.provider.mount(this.stage);\n }\n\n private wireProvider(): void {\n const p = this.provider;\n this.disposers.push(\n p.on('ready', () => this.onReady()),\n p.on('durationchange', (d) => {\n this.duration = d;\n this.emitter.emit('durationchange', d);\n this.render();\n }),\n p.on('timeupdate', (current) => this.onTimeUpdate(current)),\n p.on('play', () => {\n this.playing = true;\n this.emitter.emit('play');\n this.render();\n }),\n p.on('pause', () => {\n this.playing = false;\n this.emitter.emit('pause');\n this.render();\n }),\n p.on('ended', () => {\n this.playing = false;\n this.emitter.emit('ended');\n this.render();\n }),\n p.on('error', (msg) => this.emitter.emit('error', msg)),\n );\n }\n\n private onReady(): void {\n if (this.ready) return;\n this.ready = true;\n this.duration = this.provider.getDuration();\n\n if (this.options.muted) this.provider.setMuted(true);\n\n const resume = this.options.resumeAt ?? 0;\n if (resume > 0 && (this.duration === 0 || resume < this.duration - 2)) {\n this.provider.seek(resume);\n this.furthest = resume;\n this.lastTick = resume;\n }\n\n this.emitter.emit('ready', { duration: this.duration });\n if (this.options.autoplay) this.provider.play();\n this.render();\n }\n\n private onTimeUpdate(current: number): void {\n // Grow furthest only on natural forward advance so a seek can't inflate it.\n const advance = current - this.lastTick;\n if (advance > 0 && advance <= NATURAL_ADVANCE_MAX && current > this.furthest) {\n this.furthest = current;\n }\n this.lastTick = current;\n this.emitter.emit('timeupdate', this.snapshot());\n this.render();\n }\n\n private snapshot(): PlayerState {\n const current = this.provider.getCurrentTime();\n const duration = this.duration || this.provider.getDuration();\n const percent = duration > 0 ? Math.min(100, Math.round((this.furthest / duration) * 100)) : 0;\n return { current, furthest: this.furthest, duration, percent, playing: this.playing };\n }\n\n private render(): void {\n this.controls.update(this.snapshot(), {\n muted: this.provider.isMuted(),\n volume: this.provider.getVolume(),\n rate: this.provider.getRate(),\n });\n }\n\n private toggleFullscreen(): void {\n if (document.fullscreenElement === this.root) {\n void document.exitFullscreen?.();\n } else {\n void this.root.requestFullscreen?.();\n }\n }\n\n // ---- Public API ----\n\n play(): void {\n this.provider.play();\n }\n\n pause(): void {\n this.provider.pause();\n }\n\n toggle(): void {\n if (this.provider.isPlaying()) this.provider.pause();\n else this.provider.play();\n }\n\n seek(seconds: number): void {\n // A non-seekable provider (e.g. a live stream) has no position to jump\n // to — ignore even a direct call through the public API, not just the\n // hidden scrubber.\n if (!this.provider.capabilities.seekable) return;\n // Enforce the seek lock: never allow scrubbing past the furthest watched point.\n const target =\n this.options.lockSeek && seconds > this.furthest ? this.furthest : Math.max(0, seconds);\n this.provider.seek(target);\n this.lastTick = target;\n this.render();\n }\n\n setLockSeek(locked: boolean): void {\n this.options.lockSeek = locked;\n this.controls.setLockSeek(locked);\n this.root.classList.toggle('kzp--locked', locked);\n this.render();\n }\n\n getState(): PlayerState {\n return this.snapshot();\n }\n\n on<K extends keyof PlayerEvents>(event: K, cb: PlayerEvents[K]): () => void {\n return this.emitter.on(event, cb);\n }\n\n off<K extends keyof PlayerEvents>(event: K, cb: PlayerEvents[K]): void {\n this.emitter.off(event, cb);\n }\n\n destroy(): void {\n for (const dispose of this.disposers) dispose();\n this.disposers = [];\n this.provider.destroy();\n this.controls.destroy();\n this.emitter.clear();\n this.root.remove();\n }\n}\n","import { Player } from './core/Player';\nimport type { KodezenPlayerInstance, PlayerOptions } from './types';\n\n/**\n * Create a player instance mounted inside `container`.\n *\n * The library never persists anything. Subscribe to `timeupdate` to save\n * progress and pass `resumeAt` to restore it — the host owns all tracking and\n * completion logic.\n */\nexport function createPlayer(\n container: HTMLElement,\n options: PlayerOptions,\n): KodezenPlayerInstance {\n return new Player(container, options);\n}\n\nexport { Player } from './core/Player';\nexport type {\n ControlsConfig,\n KodezenPlayerInstance,\n PlayerEvents,\n PlayerOptions,\n PlayerState,\n Provider,\n ProviderCapabilities,\n ProviderEvents,\n ReadyPayload,\n Source,\n SourceType,\n TimeUpdatePayload,\n} from './types';\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { K as KodezenPlayerInstance, P as PlayerOptions, a as PlayerState, b as PlayerEvents } from './types-TFltFgey.cjs';
|
|
2
|
+
export { C as ControlsConfig, c as Provider, d as ProviderCapabilities, e as ProviderEvents, R as ReadyPayload, S as Source, f as SourceType, T as TimeUpdatePayload } from './types-TFltFgey.cjs';
|
|
3
|
+
|
|
4
|
+
declare class Player implements KodezenPlayerInstance {
|
|
5
|
+
private container;
|
|
6
|
+
private options;
|
|
7
|
+
private emitter;
|
|
8
|
+
private provider;
|
|
9
|
+
private controls;
|
|
10
|
+
private root;
|
|
11
|
+
private stage;
|
|
12
|
+
private furthest;
|
|
13
|
+
private lastTick;
|
|
14
|
+
private duration;
|
|
15
|
+
private playing;
|
|
16
|
+
private ready;
|
|
17
|
+
private disposers;
|
|
18
|
+
constructor(container: HTMLElement, options: PlayerOptions);
|
|
19
|
+
private wireProvider;
|
|
20
|
+
private onReady;
|
|
21
|
+
private onTimeUpdate;
|
|
22
|
+
private snapshot;
|
|
23
|
+
private render;
|
|
24
|
+
private toggleFullscreen;
|
|
25
|
+
play(): void;
|
|
26
|
+
pause(): void;
|
|
27
|
+
toggle(): void;
|
|
28
|
+
seek(seconds: number): void;
|
|
29
|
+
setLockSeek(locked: boolean): void;
|
|
30
|
+
getState(): PlayerState;
|
|
31
|
+
on<K extends keyof PlayerEvents>(event: K, cb: PlayerEvents[K]): () => void;
|
|
32
|
+
off<K extends keyof PlayerEvents>(event: K, cb: PlayerEvents[K]): void;
|
|
33
|
+
destroy(): void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create a player instance mounted inside `container`.
|
|
38
|
+
*
|
|
39
|
+
* The library never persists anything. Subscribe to `timeupdate` to save
|
|
40
|
+
* progress and pass `resumeAt` to restore it — the host owns all tracking and
|
|
41
|
+
* completion logic.
|
|
42
|
+
*/
|
|
43
|
+
declare function createPlayer(container: HTMLElement, options: PlayerOptions): KodezenPlayerInstance;
|
|
44
|
+
|
|
45
|
+
export { KodezenPlayerInstance, Player, PlayerEvents, PlayerOptions, PlayerState, createPlayer };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { K as KodezenPlayerInstance, P as PlayerOptions, a as PlayerState, b as PlayerEvents } from './types-TFltFgey.js';
|
|
2
|
+
export { C as ControlsConfig, c as Provider, d as ProviderCapabilities, e as ProviderEvents, R as ReadyPayload, S as Source, f as SourceType, T as TimeUpdatePayload } from './types-TFltFgey.js';
|
|
3
|
+
|
|
4
|
+
declare class Player implements KodezenPlayerInstance {
|
|
5
|
+
private container;
|
|
6
|
+
private options;
|
|
7
|
+
private emitter;
|
|
8
|
+
private provider;
|
|
9
|
+
private controls;
|
|
10
|
+
private root;
|
|
11
|
+
private stage;
|
|
12
|
+
private furthest;
|
|
13
|
+
private lastTick;
|
|
14
|
+
private duration;
|
|
15
|
+
private playing;
|
|
16
|
+
private ready;
|
|
17
|
+
private disposers;
|
|
18
|
+
constructor(container: HTMLElement, options: PlayerOptions);
|
|
19
|
+
private wireProvider;
|
|
20
|
+
private onReady;
|
|
21
|
+
private onTimeUpdate;
|
|
22
|
+
private snapshot;
|
|
23
|
+
private render;
|
|
24
|
+
private toggleFullscreen;
|
|
25
|
+
play(): void;
|
|
26
|
+
pause(): void;
|
|
27
|
+
toggle(): void;
|
|
28
|
+
seek(seconds: number): void;
|
|
29
|
+
setLockSeek(locked: boolean): void;
|
|
30
|
+
getState(): PlayerState;
|
|
31
|
+
on<K extends keyof PlayerEvents>(event: K, cb: PlayerEvents[K]): () => void;
|
|
32
|
+
off<K extends keyof PlayerEvents>(event: K, cb: PlayerEvents[K]): void;
|
|
33
|
+
destroy(): void;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Create a player instance mounted inside `container`.
|
|
38
|
+
*
|
|
39
|
+
* The library never persists anything. Subscribe to `timeupdate` to save
|
|
40
|
+
* progress and pass `resumeAt` to restore it — the host owns all tracking and
|
|
41
|
+
* completion logic.
|
|
42
|
+
*/
|
|
43
|
+
declare function createPlayer(container: HTMLElement, options: PlayerOptions): KodezenPlayerInstance;
|
|
44
|
+
|
|
45
|
+
export { KodezenPlayerInstance, Player, PlayerEvents, PlayerOptions, PlayerState, createPlayer };
|