@livepeer-frameworks/player-wc 0.1.9 → 0.2.1
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/dist/esm/components/controls/fw-fullscreen-button.js +76 -0
- package/dist/esm/components/controls/fw-fullscreen-button.js.map +1 -0
- package/dist/esm/components/controls/fw-live-badge.js +109 -0
- package/dist/esm/components/controls/fw-live-badge.js.map +1 -0
- package/dist/esm/components/controls/fw-play-button.js +76 -0
- package/dist/esm/components/controls/fw-play-button.js.map +1 -0
- package/dist/esm/components/controls/fw-skip-button.js +62 -0
- package/dist/esm/components/controls/fw-skip-button.js.map +1 -0
- package/dist/esm/components/controls/fw-time-display.js +77 -0
- package/dist/esm/components/controls/fw-time-display.js.map +1 -0
- package/dist/esm/components/controls/fw-volume-control.js +76 -0
- package/dist/esm/components/controls/fw-volume-control.js.map +1 -0
- package/dist/esm/components/fw-dev-mode-panel.js +11 -15
- package/dist/esm/components/fw-dev-mode-panel.js.map +1 -1
- package/dist/esm/components/fw-error-overlay.js +13 -5
- package/dist/esm/components/fw-error-overlay.js.map +1 -1
- package/dist/esm/components/fw-idle-screen.js +10 -2
- package/dist/esm/components/fw-idle-screen.js.map +1 -1
- package/dist/esm/components/fw-loading-screen.js +89 -42
- package/dist/esm/components/fw-loading-screen.js.map +1 -1
- package/dist/esm/components/fw-loading-spinner.js +20 -9
- package/dist/esm/components/fw-loading-spinner.js.map +1 -1
- package/dist/esm/components/fw-player-controls.js +18 -13
- package/dist/esm/components/fw-player-controls.js.map +1 -1
- package/dist/esm/components/fw-player.js +165 -59
- package/dist/esm/components/fw-player.js.map +1 -1
- package/dist/esm/components/fw-settings-menu.js +44 -9
- package/dist/esm/components/fw-settings-menu.js.map +1 -1
- package/dist/esm/components/fw-stream-state-overlay.js +13 -5
- package/dist/esm/components/fw-stream-state-overlay.js.map +1 -1
- package/dist/esm/components/fw-toast.js +11 -1
- package/dist/esm/components/fw-toast.js.map +1 -1
- package/dist/esm/components/fw-volume-control.js +13 -3
- package/dist/esm/components/fw-volume-control.js.map +1 -1
- package/dist/esm/controllers/player-controller-host.js +14 -1
- package/dist/esm/controllers/player-controller-host.js.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/styles/shared-styles.js +401 -304
- package/dist/esm/styles/shared-styles.js.map +1 -1
- package/dist/fw-player.iife.js +707 -488
- package/dist/types/components/controls/fw-fullscreen-button.d.ts +18 -0
- package/dist/types/components/controls/fw-live-badge.d.ts +19 -0
- package/dist/types/components/controls/fw-play-button.d.ts +18 -0
- package/dist/types/components/controls/fw-skip-button.d.ts +17 -0
- package/dist/types/components/controls/fw-time-display.d.ts +17 -0
- package/dist/types/components/controls/fw-volume-control.d.ts +18 -0
- package/dist/types/components/controls/index.d.ts +6 -0
- package/dist/types/components/fw-dev-mode-panel.d.ts +1 -1
- package/dist/types/components/fw-error-overlay.d.ts +4 -0
- package/dist/types/components/fw-idle-screen.d.ts +4 -0
- package/dist/types/components/fw-loading-screen.d.ts +5 -1
- package/dist/types/components/fw-loading-spinner.d.ts +4 -0
- package/dist/types/components/fw-player-controls.d.ts +2 -1
- package/dist/types/components/fw-player.d.ts +10 -1
- package/dist/types/components/fw-settings-menu.d.ts +3 -1
- package/dist/types/components/fw-stream-state-overlay.d.ts +4 -0
- package/dist/types/components/fw-toast.d.ts +4 -0
- package/dist/types/controllers/player-controller-host.d.ts +7 -1
- package/dist/types/index.d.ts +1 -0
- package/package.json +10 -13
- package/src/components/controls/fw-fullscreen-button.ts +75 -0
- package/src/components/controls/fw-live-badge.ts +109 -0
- package/src/components/controls/fw-play-button.ts +75 -0
- package/src/components/controls/fw-skip-button.ts +59 -0
- package/src/components/controls/fw-time-display.ts +74 -0
- package/src/components/controls/fw-volume-control.ts +75 -0
- package/src/components/controls/index.ts +6 -0
- package/src/components/fw-dev-mode-panel.ts +10 -17
- package/src/components/fw-error-overlay.ts +13 -5
- package/src/components/fw-idle-screen.ts +10 -2
- package/src/components/fw-loading-screen.ts +90 -46
- package/src/components/fw-loading-spinner.ts +18 -9
- package/src/components/fw-player-controls.ts +17 -13
- package/src/components/fw-player.ts +166 -64
- package/src/components/fw-settings-menu.ts +49 -9
- package/src/components/fw-stream-state-overlay.ts +13 -5
- package/src/components/fw-toast.ts +11 -1
- package/src/components/fw-volume-control.ts +14 -3
- package/src/controllers/player-controller-host.ts +18 -0
- package/src/index.ts +10 -0
- package/src/styles/shared-styles.ts +401 -304
- package/dist/cjs/components/fw-context-menu.js +0 -17
- package/dist/cjs/components/fw-context-menu.js.map +0 -1
- package/dist/cjs/components/fw-dev-mode-panel.js +0 -907
- package/dist/cjs/components/fw-dev-mode-panel.js.map +0 -1
- package/dist/cjs/components/fw-dvd-logo.js +0 -211
- package/dist/cjs/components/fw-dvd-logo.js.map +0 -1
- package/dist/cjs/components/fw-error-overlay.js +0 -101
- package/dist/cjs/components/fw-error-overlay.js.map +0 -1
- package/dist/cjs/components/fw-idle-screen.js +0 -726
- package/dist/cjs/components/fw-idle-screen.js.map +0 -1
- package/dist/cjs/components/fw-loading-screen.js +0 -513
- package/dist/cjs/components/fw-loading-screen.js.map +0 -1
- package/dist/cjs/components/fw-loading-spinner.js +0 -62
- package/dist/cjs/components/fw-loading-spinner.js.map +0 -1
- package/dist/cjs/components/fw-player-controls.js +0 -451
- package/dist/cjs/components/fw-player-controls.js.map +0 -1
- package/dist/cjs/components/fw-player.js +0 -832
- package/dist/cjs/components/fw-player.js.map +0 -1
- package/dist/cjs/components/fw-seek-bar.js +0 -383
- package/dist/cjs/components/fw-seek-bar.js.map +0 -1
- package/dist/cjs/components/fw-settings-menu.js +0 -253
- package/dist/cjs/components/fw-settings-menu.js.map +0 -1
- package/dist/cjs/components/fw-skip-indicator.js +0 -143
- package/dist/cjs/components/fw-skip-indicator.js.map +0 -1
- package/dist/cjs/components/fw-speed-indicator.js +0 -61
- package/dist/cjs/components/fw-speed-indicator.js.map +0 -1
- package/dist/cjs/components/fw-stats-panel.js +0 -205
- package/dist/cjs/components/fw-stats-panel.js.map +0 -1
- package/dist/cjs/components/fw-stream-state-overlay.js +0 -338
- package/dist/cjs/components/fw-stream-state-overlay.js.map +0 -1
- package/dist/cjs/components/fw-subtitle-renderer.js +0 -217
- package/dist/cjs/components/fw-subtitle-renderer.js.map +0 -1
- package/dist/cjs/components/fw-thumbnail-overlay.js +0 -161
- package/dist/cjs/components/fw-thumbnail-overlay.js.map +0 -1
- package/dist/cjs/components/fw-title-overlay.js +0 -72
- package/dist/cjs/components/fw-title-overlay.js.map +0 -1
- package/dist/cjs/components/fw-toast.js +0 -74
- package/dist/cjs/components/fw-toast.js.map +0 -1
- package/dist/cjs/components/fw-volume-control.js +0 -276
- package/dist/cjs/components/fw-volume-control.js.map +0 -1
- package/dist/cjs/components/shared/hitmarker-audio.js +0 -76
- package/dist/cjs/components/shared/hitmarker-audio.js.map +0 -1
- package/dist/cjs/constants/media-assets.js +0 -11
- package/dist/cjs/constants/media-assets.js.map +0 -1
- package/dist/cjs/controllers/player-controller-host.js +0 -364
- package/dist/cjs/controllers/player-controller-host.js.map +0 -1
- package/dist/cjs/define.js +0 -53
- package/dist/cjs/define.js.map +0 -1
- package/dist/cjs/icons/index.js +0 -180
- package/dist/cjs/icons/index.js.map +0 -1
- package/dist/cjs/index.js +0 -108
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js +0 -33
- package/dist/cjs/node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/cjs/styles/shared-styles.js +0 -1985
- package/dist/cjs/styles/shared-styles.js.map +0 -1
- package/dist/cjs/styles/utility-styles.js +0 -725
- package/dist/cjs/styles/utility-styles.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fw-dev-mode-panel.js","sources":["../../../../src/components/fw-dev-mode-panel.ts"],"sourcesContent":["/**\n * <fw-dev-mode-panel> — Developer mode side panel.\n * Feature parity with React/Svelte advanced panel.\n */\nimport { LitElement, html, css, nothing, type PropertyValues } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { sharedStyles } from \"../styles/shared-styles.js\";\nimport { utilityStyles } from \"../styles/utility-styles.js\";\nimport { closeIcon } from \"../icons/index.js\";\nimport {\n QualityMonitor,\n globalPlayerManager,\n type MistStreamInfo,\n type PlaybackMode,\n type PlayerCombination,\n type StreamInfo,\n} from \"@livepeer-frameworks/player-core\";\nimport type { PlayerControllerHost } from \"../controllers/player-controller-host.js\";\n\nconst SOURCE_TYPE_LABELS: Record<string, string> = {\n \"html5/application/vnd.apple.mpegurl\": \"HLS\",\n \"dash/video/mp4\": \"DASH\",\n \"html5/video/mp4\": \"MP4\",\n \"html5/video/webm\": \"WebM\",\n whep: \"WHEP\",\n \"mist/html\": \"Mist\",\n \"mist/legacy\": \"Auto\",\n \"ws/video/mp4\": \"MEWS\",\n};\n\n@customElement(\"fw-dev-mode-panel\")\nexport class FwDevModePanel extends LitElement {\n @property({ attribute: false }) pc!: PlayerControllerHost;\n @property({ type: String }) playbackMode: PlaybackMode = \"auto\";\n\n @state() private _activeTab: \"config\" | \"stats\" = \"config\";\n @state() private _hoveredComboIndex: number | null = null;\n @state() private _tooltipAbove = false;\n @state() private _showDisabledPlayers = false;\n\n @state() private _playbackScore = 1;\n @state() private _qualityScore = 100;\n @state() private _stallCount = 0;\n @state() private _frameDropRate = 0;\n\n @state()\n private _videoStats: {\n resolution: string;\n buffered: string;\n playbackRate: string;\n currentTime: string;\n duration: string;\n readyState: number;\n networkState: number;\n } | null = null;\n\n @state() private _playerStats: unknown = null;\n\n private _qualityMonitor: QualityMonitor | null = null;\n private _qualityMonitorVideo: HTMLVideoElement | null = null;\n private _videoStatsInterval: ReturnType<typeof setInterval> | null = null;\n private _playerStatsInterval: ReturnType<typeof setInterval> | null = null;\n\n static styles = [\n sharedStyles,\n utilityStyles,\n css`\n :host {\n display: block;\n height: 100%;\n min-height: 0;\n }\n `,\n ];\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._stopQualityMonitor();\n this._stopStatsPolling();\n }\n\n protected updated(_changed: PropertyValues<this>): void {\n this._syncQualityMonitor();\n this._syncStatsPolling();\n }\n\n private _getMistStreamInfo(): MistStreamInfo | undefined {\n return this.pc.s.streamState?.streamInfo as MistStreamInfo | undefined;\n }\n\n private _getAllCombinations(): PlayerCombination[] {\n const streamInfo = this.pc.s.streamInfo as StreamInfo | null;\n if (!streamInfo) {\n return [];\n }\n\n try {\n return globalPlayerManager.getAllCombinations(streamInfo, this.playbackMode);\n } catch {\n return [];\n }\n }\n\n private _getCompatibleCombinations(): PlayerCombination[] {\n return this._getAllCombinations().filter((combo) => combo.compatible);\n }\n\n private _getActiveComboIndex(combinations: PlayerCombination[]): number {\n const currentPlayer = this.pc.s.currentPlayerInfo;\n const currentSource = this.pc.s.currentSourceInfo;\n\n if (!currentPlayer || !currentSource || combinations.length === 0) {\n return -1;\n }\n\n return combinations.findIndex(\n (combo) => combo.player === currentPlayer.shortname && combo.sourceType === currentSource.type\n );\n }\n\n private _syncQualityMonitor(): void {\n const video = this.pc.s.videoElement;\n\n if (!video) {\n this._stopQualityMonitor();\n return;\n }\n\n if (!this._qualityMonitor) {\n this._qualityMonitor = new QualityMonitor({\n sampleInterval: 500,\n onSample: (quality) => {\n this._qualityScore = quality.score;\n this._stallCount = quality.stallCount;\n this._frameDropRate = quality.frameDropRate;\n this._playbackScore = this._qualityMonitor?.getPlaybackScore() ?? 1;\n this.requestUpdate();\n },\n });\n }\n\n if (this._qualityMonitorVideo !== video) {\n this._qualityMonitor.stop();\n this._qualityMonitor.start(video);\n this._qualityMonitorVideo = video;\n }\n }\n\n private _stopQualityMonitor(): void {\n this._qualityMonitor?.stop();\n this._qualityMonitorVideo = null;\n }\n\n private _syncStatsPolling(): void {\n if (this._activeTab !== \"stats\") {\n this._stopStatsPolling();\n return;\n }\n\n if (!this._videoStatsInterval) {\n this._updateVideoStats();\n this._videoStatsInterval = setInterval(() => {\n this._updateVideoStats();\n }, 500);\n }\n\n if (!this._playerStatsInterval) {\n void this._pollPlayerStats();\n this._playerStatsInterval = setInterval(() => {\n void this._pollPlayerStats();\n }, 500);\n }\n }\n\n private _stopStatsPolling(): void {\n if (this._videoStatsInterval) {\n clearInterval(this._videoStatsInterval);\n this._videoStatsInterval = null;\n }\n\n if (this._playerStatsInterval) {\n clearInterval(this._playerStatsInterval);\n this._playerStatsInterval = null;\n }\n }\n\n private _updateVideoStats(): void {\n const video = this.pc.s.videoElement;\n if (!video) {\n this._videoStats = null;\n return;\n }\n\n this._videoStats = {\n resolution: `${video.videoWidth}x${video.videoHeight}`,\n buffered:\n video.buffered.length > 0\n ? (video.buffered.end(video.buffered.length - 1) - video.currentTime).toFixed(1)\n : \"0\",\n playbackRate: video.playbackRate.toFixed(2),\n currentTime: video.currentTime.toFixed(1),\n duration: Number.isFinite(video.duration) ? video.duration.toFixed(1) : \"live\",\n readyState: video.readyState,\n networkState: video.networkState,\n };\n }\n\n private async _pollPlayerStats(): Promise<void> {\n try {\n const stats = await this.pc.getStats();\n if (stats) {\n this._playerStats = stats;\n }\n } catch {\n // No-op for optional stats backends.\n }\n }\n\n private _handleComboMouseEnter(index: number, event: MouseEvent): void {\n this._hoveredComboIndex = index;\n\n const container = this.renderRoot.querySelector(\".fw-dev-body\") as HTMLElement | null;\n if (!container) {\n return;\n }\n\n const row = event.currentTarget as HTMLElement;\n const containerRect = container.getBoundingClientRect();\n const rowRect = row.getBoundingClientRect();\n const relativePosition = (rowRect.top - containerRect.top) / containerRect.height;\n\n this._tooltipAbove = relativePosition > 0.6;\n }\n\n private _handleModeChange(mode: \"auto\" | \"low-latency\" | \"quality\"): void {\n this.playbackMode = mode;\n void this.pc.setDevModeOptions({ playbackMode: mode });\n this.dispatchEvent(\n new CustomEvent(\"fw-playback-mode-change\", {\n detail: { mode },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n private _handleReload(): void {\n this.pc.clearError();\n void this.pc.reload();\n }\n\n private _handleNextCombo(): void {\n const compatible = this._getCompatibleCombinations();\n if (compatible.length === 0) {\n return;\n }\n\n const activeCompatibleIndex = this._getActiveComboIndex(compatible);\n const startIndex = activeCompatibleIndex >= 0 ? activeCompatibleIndex : -1;\n const nextIndex = (startIndex + 1) % compatible.length;\n const next = compatible[nextIndex];\n\n void this.pc.setDevModeOptions({\n forcePlayer: next.player,\n forceType: next.sourceType,\n forceSource: next.sourceIndex,\n });\n }\n\n private _handleSelectCombo(index: number): void {\n const allCombinations = this._getAllCombinations();\n const combo = allCombinations[index];\n if (!combo) {\n return;\n }\n\n void this.pc.setDevModeOptions({\n forcePlayer: combo.player,\n forceType: combo.sourceType,\n forceSource: combo.sourceIndex,\n });\n }\n\n private _renderStatsTab(): unknown {\n const primaryEndpoint = (this.pc.s.endpoints?.primary ?? null) as {\n protocol?: string;\n nodeId?: string;\n } | null;\n\n const stats = this._videoStats;\n const playerStats = this._playerStats as any;\n const mistStreamInfo = this._getMistStreamInfo();\n const trackEntries = Object.entries(mistStreamInfo?.meta?.tracks ?? {});\n\n return html`\n <div class=\"fw-dev-body\">\n <div class=\"fw-dev-section\">\n <div class=\"fw-dev-label\">Playback Rate</div>\n <div class=\"fw-dev-rate\">\n <div\n class=${classMap({\n \"fw-dev-rate-value\": true,\n \"fw-dev-stat-value--good\":\n this._playbackScore >= 0.95 && this._playbackScore <= 1.05,\n \"fw-dev-stat-value--accent\": this._playbackScore > 1.05,\n \"fw-dev-stat-value--warn\":\n this._playbackScore >= 0.75 && this._playbackScore < 0.95,\n \"fw-dev-stat-value--bad\": this._playbackScore < 0.75,\n })}\n >\n ${this._playbackScore.toFixed(2)}x\n </div>\n <div class=\"fw-dev-rate-status\">\n ${this._playbackScore >= 0.95 && this._playbackScore <= 1.05\n ? \"realtime\"\n : this._playbackScore > 1.05\n ? \"catching up\"\n : this._playbackScore >= 0.75\n ? \"slightly slow\"\n : \"stalling\"}\n </div>\n </div>\n <div class=\"fw-dev-rate-stats\">\n <span\n class=${classMap({\n \"fw-dev-stat-value--good\": this._qualityScore >= 75,\n \"fw-dev-stat-value--bad\": this._qualityScore < 75,\n })}\n >\n Quality: ${this._qualityScore}/100\n </span>\n <span\n class=${classMap({\n \"fw-dev-stat-value--good\": this._stallCount === 0,\n \"fw-dev-stat-value--warn\": this._stallCount > 0,\n })}\n >\n Stalls: ${this._stallCount}\n </span>\n <span\n class=${classMap({\n \"fw-dev-stat-value--good\": this._frameDropRate < 1,\n \"fw-dev-stat-value--bad\": this._frameDropRate >= 1,\n })}\n >\n Drops: ${this._frameDropRate.toFixed(1)}%\n </span>\n </div>\n </div>\n\n ${stats\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Resolution</span>\n <span class=\"fw-dev-stat-value\">${stats.resolution}</span>\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Buffer</span>\n <span class=\"fw-dev-stat-value\">${stats.buffered}s</span>\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Playback Rate</span>\n <span class=\"fw-dev-stat-value\">${stats.playbackRate}x</span>\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Time</span>\n <span class=\"fw-dev-stat-value\">${stats.currentTime} / ${stats.duration}</span>\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Ready State</span>\n <span class=\"fw-dev-stat-value\">${stats.readyState}</span>\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Network State</span>\n <span class=\"fw-dev-stat-value\">${stats.networkState}</span>\n </div>\n ${primaryEndpoint?.protocol\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Protocol</span>\n <span class=\"fw-dev-stat-value\">${primaryEndpoint.protocol}</span>\n </div>\n `\n : nothing}\n ${primaryEndpoint?.nodeId\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Node ID</span>\n <span\n class=\"fw-dev-stat-value\"\n style=\"max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;\"\n >${primaryEndpoint.nodeId}</span\n >\n </div>\n `\n : nothing}\n `\n : html`<div class=\"fw-dev-list-empty\">No video element available</div>`}\n ${playerStats\n ? html`\n <div class=\"fw-dev-list-header fw-dev-section-header\">\n <span class=\"fw-dev-list-title\"\n >${playerStats.type === \"hls\"\n ? \"HLS.js Stats\"\n : playerStats.type === \"webrtc\"\n ? \"WebRTC Stats\"\n : \"Player Stats\"}</span\n >\n </div>\n\n ${playerStats.type === \"hls\"\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Bitrate</span>\n <span class=\"fw-dev-stat-value--accent\"\n >${typeof playerStats.currentBitrate === \"number\" &&\n playerStats.currentBitrate > 0\n ? `${Math.round(playerStats.currentBitrate / 1000)} kbps`\n : \"N/A\"}</span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Bandwidth Est.</span>\n <span class=\"fw-dev-stat-value\"\n >${typeof playerStats.bandwidthEstimate === \"number\" &&\n playerStats.bandwidthEstimate > 0\n ? `${Math.round(playerStats.bandwidthEstimate / 1000)} kbps`\n : \"N/A\"}</span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Level</span>\n <span class=\"fw-dev-stat-value\"\n >${typeof playerStats.currentLevel === \"number\" &&\n playerStats.currentLevel >= 0\n ? playerStats.currentLevel\n : \"Auto\"}\n / ${Array.isArray(playerStats.levels) ? playerStats.levels.length : 0}</span\n >\n </div>\n ${typeof playerStats.latency === \"number\"\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Latency</span>\n <span\n class=${classMap({\n \"fw-dev-stat-value\": true,\n \"fw-dev-stat-value--warn\": playerStats.latency > 5000,\n })}\n >${Math.round(playerStats.latency)} ms</span\n >\n </div>\n `\n : nothing}\n `\n : nothing}\n ${playerStats.type === \"webrtc\"\n ? html`\n ${playerStats.video\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Video Bitrate</span>\n <span class=\"fw-dev-stat-value--accent\"\n >${typeof playerStats.video.bitrate === \"number\" &&\n playerStats.video.bitrate > 0\n ? `${Math.round(playerStats.video.bitrate / 1000)} kbps`\n : \"N/A\"}</span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">FPS</span>\n <span class=\"fw-dev-stat-value\"\n >${Math.round(\n (playerStats.video.framesPerSecond as number) || 0\n )}</span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Frames</span>\n <span class=\"fw-dev-stat-value\"\n >${playerStats.video.framesDecoded as number} decoded,\n <span\n class=${classMap({\n \"fw-dev-stat-value--bad\":\n ((playerStats.video.frameDropRate as number) || 0) > 1,\n \"fw-dev-stat-value--good\":\n ((playerStats.video.frameDropRate as number) || 0) <= 1,\n })}\n >${playerStats.video.framesDropped as number} dropped</span\n ></span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Packet Loss</span>\n <span\n class=${classMap({\n \"fw-dev-stat-value--bad\":\n ((playerStats.video.packetLossRate as number) || 0) > 1,\n \"fw-dev-stat-value--good\":\n ((playerStats.video.packetLossRate as number) || 0) <= 1,\n })}\n >${(\n ((playerStats.video.packetLossRate as number) || 0) as number\n ).toFixed(2)}%</span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Jitter</span>\n <span\n class=${classMap({\n \"fw-dev-stat-value\": true,\n \"fw-dev-stat-value--warn\":\n ((playerStats.video.jitter as number) || 0) > 30,\n })}\n >${(((playerStats.video.jitter as number) || 0) as number).toFixed(1)}\n ms</span\n >\n </div>\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">Jitter Buffer</span>\n <span class=\"fw-dev-stat-value\"\n >${(\n ((playerStats.video.jitterBufferDelay as number) || 0) as number\n ).toFixed(1)}\n ms</span\n >\n </div>\n `\n : nothing}\n ${playerStats.network\n ? html`\n <div class=\"fw-dev-stat\">\n <span class=\"fw-dev-stat-label\">RTT</span>\n <span\n class=${classMap({\n \"fw-dev-stat-value\": true,\n \"fw-dev-stat-value--warn\":\n ((playerStats.network.rtt as number) || 0) > 200,\n })}\n >${Math.round(((playerStats.network.rtt as number) || 0) as number)}\n ms</span\n >\n </div>\n `\n : nothing}\n `\n : nothing}\n `\n : nothing}\n ${trackEntries.length > 0\n ? html`\n <div class=\"fw-dev-list-header fw-dev-section-header\">\n <span class=\"fw-dev-list-title\">Tracks (${trackEntries.length})</span>\n </div>\n ${trackEntries.map(([id, track]) => {\n const typedTrack = track as {\n type: string;\n codec: string;\n width?: number;\n height?: number;\n bps?: number;\n fpks?: number;\n channels?: number;\n rate?: number;\n lang?: string;\n };\n\n return html`\n <div class=\"fw-dev-track\">\n <div class=\"fw-dev-track-header\">\n <span\n class=${classMap({\n \"fw-dev-track-badge\": true,\n \"fw-dev-track-badge--video\": typedTrack.type === \"video\",\n \"fw-dev-track-badge--audio\": typedTrack.type === \"audio\",\n \"fw-dev-track-badge--other\":\n typedTrack.type !== \"video\" && typedTrack.type !== \"audio\",\n })}\n >${typedTrack.type}</span\n >\n <span class=\"fw-dev-track-codec\">${typedTrack.codec}</span>\n <span class=\"fw-dev-track-id\">#${id}</span>\n </div>\n <div class=\"fw-dev-track-meta\">\n ${typedTrack.type === \"video\" && typedTrack.width && typedTrack.height\n ? html`<span>${typedTrack.width}x${typedTrack.height}</span>`\n : nothing}\n ${typedTrack.bps\n ? html`<span>${Math.round(typedTrack.bps / 1000)} kbps</span>`\n : nothing}\n ${typedTrack.fpks\n ? html`<span>${Math.round(typedTrack.fpks / 1000)} fps</span>`\n : nothing}\n ${typedTrack.type === \"audio\" && typedTrack.channels\n ? html`<span>${typedTrack.channels}ch</span>`\n : nothing}\n ${typedTrack.type === \"audio\" && typedTrack.rate\n ? html`<span>${typedTrack.rate} Hz</span>`\n : nothing}\n ${typedTrack.lang ? html`<span>${typedTrack.lang}</span>` : nothing}\n </div>\n </div>\n `;\n })}\n `\n : nothing}\n ${mistStreamInfo && trackEntries.length === 0\n ? html`\n <div class=\"fw-dev-no-tracks\">\n <span class=\"fw-dev-no-tracks-text\"\n >No track data available\n ${mistStreamInfo.type\n ? html`<span class=\"fw-dev-no-tracks-type\">(${mistStreamInfo.type})</span>`\n : nothing}</span\n >\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n private _renderConfigTab(): unknown {\n const allCombinations = this._getAllCombinations();\n const compatibleCombinations = allCombinations.filter((combo) => combo.compatible);\n const activeComboIndex = this._getActiveComboIndex(allCombinations);\n\n const currentPlayer = this.pc.s.currentPlayerInfo;\n const currentSource = this.pc.s.currentSourceInfo;\n\n return html`\n <div class=\"fw-dev-body\">\n <div class=\"fw-dev-section\">\n <div class=\"fw-dev-label\">Active</div>\n <div class=\"fw-dev-value\">\n ${currentPlayer?.name || \"None\"}\n <span class=\"fw-dev-value-arrow\">${\"\\u2192\"}</span>\n ${SOURCE_TYPE_LABELS[currentSource?.type || \"\"] || currentSource?.type || \"-\"}\n </div>\n ${(this.pc.s.endpoints?.primary as { nodeId?: string } | undefined)?.nodeId\n ? html`\n <div class=\"fw-dev-value-muted\">\n Node: ${(this.pc.s.endpoints?.primary as { nodeId?: string }).nodeId}\n </div>\n `\n : nothing}\n </div>\n\n <div class=\"fw-dev-section\">\n <div class=\"fw-dev-label\">Playback Mode</div>\n <div class=\"fw-dev-mode-group\">\n ${([\"auto\", \"low-latency\", \"quality\"] as const).map(\n (mode) => html`\n <button\n type=\"button\"\n class=${classMap({\n \"fw-dev-mode-btn\": true,\n \"fw-dev-mode-btn--active\": this.playbackMode === mode,\n })}\n @click=${() => this._handleModeChange(mode)}\n >\n ${mode === \"low-latency\"\n ? \"Low Lat\"\n : `${mode.charAt(0).toUpperCase()}${mode.slice(1)}`}\n </button>\n `\n )}\n </div>\n <div class=\"fw-dev-mode-desc\">\n ${this.playbackMode === \"auto\"\n ? \"Balanced: MP4/WS \\u2192 WHEP \\u2192 HLS\"\n : this.playbackMode === \"low-latency\"\n ? \"WHEP/WebRTC first (<1s delay)\"\n : \"MP4/WS first, HLS fallback\"}\n </div>\n </div>\n\n <div class=\"fw-dev-actions\">\n <button type=\"button\" class=\"fw-dev-action-btn\" @click=${this._handleReload}>\n Reload\n </button>\n <button type=\"button\" class=\"fw-dev-action-btn\" @click=${this._handleNextCombo}>\n Next Option\n </button>\n </div>\n\n <div class=\"fw-dev-section\" style=\"padding:0;border-bottom:0;\">\n <div class=\"fw-dev-list-header\">\n <span class=\"fw-dev-list-title\">Player Options (${compatibleCombinations.length})</span>\n ${allCombinations.length > compatibleCombinations.length\n ? html`\n <button\n type=\"button\"\n class=\"fw-dev-list-toggle\"\n @click=${() => {\n this._showDisabledPlayers = !this._showDisabledPlayers;\n }}\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n class=${classMap({\n \"fw-dev-chevron\": true,\n \"fw-dev-chevron--open\": this._showDisabledPlayers,\n })}\n >\n <path d=\"M6 9l6 6 6-6\"></path>\n </svg>\n ${this._showDisabledPlayers ? \"Hide\" : \"Show\"} disabled\n (${allCombinations.length - compatibleCombinations.length})\n </button>\n `\n : nothing}\n </div>\n\n ${allCombinations.length === 0\n ? html`<div class=\"fw-dev-list-empty\">No stream info available</div>`\n : html`\n ${allCombinations.map((combo, index) => {\n const isCodecIncompatible = combo.codecIncompatible === true;\n if (!combo.compatible && !isCodecIncompatible && !this._showDisabledPlayers) {\n return nothing;\n }\n\n const isActive = activeComboIndex === index;\n const typeLabel =\n SOURCE_TYPE_LABELS[combo.sourceType] || combo.sourceType.split(\"/\").pop();\n\n const scoreClass =\n !combo.compatible && !isCodecIncompatible\n ? \"fw-dev-combo-score--disabled\"\n : isCodecIncompatible\n ? \"fw-dev-combo-score--low\"\n : combo.score >= 2\n ? \"fw-dev-combo-score--high\"\n : combo.score >= 1.5\n ? \"fw-dev-combo-score--mid\"\n : \"fw-dev-combo-score--low\";\n\n const rankClass = isActive\n ? \"fw-dev-combo-rank--active\"\n : !combo.compatible && !isCodecIncompatible\n ? \"fw-dev-combo-rank--disabled\"\n : isCodecIncompatible\n ? \"fw-dev-combo-rank--warn\"\n : \"\";\n\n const typeClass =\n !combo.compatible && !isCodecIncompatible\n ? \"fw-dev-combo-type--disabled\"\n : isCodecIncompatible\n ? \"fw-dev-combo-type--warn\"\n : \"\";\n\n return html`\n <div\n class=\"fw-dev-combo\"\n @mouseenter=${(event: MouseEvent) =>\n this._handleComboMouseEnter(index, event)}\n @mouseleave=${() => {\n this._hoveredComboIndex = null;\n }}\n >\n <button\n type=\"button\"\n class=${classMap({\n \"fw-dev-combo-btn\": true,\n \"fw-dev-combo-btn--active\": isActive,\n \"fw-dev-combo-btn--disabled\": !combo.compatible && !isCodecIncompatible,\n \"fw-dev-combo-btn--codec-warn\": isCodecIncompatible,\n })}\n @click=${() => this._handleSelectCombo(index)}\n >\n <span\n class=${classMap({\n \"fw-dev-combo-rank\": true,\n [rankClass]: rankClass.length > 0,\n })}\n >${combo.compatible\n ? index + 1\n : isCodecIncompatible\n ? \"\\u26A0\"\n : \"\\u2014\"}</span\n >\n\n <span class=\"fw-dev-combo-name\"\n >${combo.playerName} <span class=\"fw-dev-combo-arrow\">${\"\\u2192\"}</span>\n <span\n class=${classMap({\n \"fw-dev-combo-type\": true,\n [typeClass]: typeClass.length > 0,\n })}\n >${typeLabel}</span\n ></span\n >\n\n <span class=${classMap({ \"fw-dev-combo-score\": true, [scoreClass]: true })}\n >${combo.score.toFixed(2)}</span\n >\n </button>\n\n ${this._hoveredComboIndex === index\n ? html`\n <div\n class=${classMap({\n \"fw-dev-tooltip\": true,\n \"fw-dev-tooltip--above\": this._tooltipAbove,\n \"fw-dev-tooltip--below\": !this._tooltipAbove,\n })}\n >\n <div class=\"fw-dev-tooltip-header\">\n <div class=\"fw-dev-tooltip-title\">${combo.playerName}</div>\n <div class=\"fw-dev-tooltip-subtitle\">${combo.sourceType}</div>\n ${combo.scoreBreakdown?.trackTypes &&\n combo.scoreBreakdown.trackTypes.length > 0\n ? html`\n <div class=\"fw-dev-tooltip-tracks\">\n Tracks:\n <span class=\"fw-dev-tooltip-value\"\n >${combo.scoreBreakdown.trackTypes.join(\", \")}</span\n >\n </div>\n `\n : nothing}\n </div>\n\n ${combo.compatible && combo.scoreBreakdown\n ? html`\n <div class=\"fw-dev-tooltip-score\">\n Score: ${combo.score.toFixed(2)}\n </div>\n <div class=\"fw-dev-tooltip-row\">\n Tracks [${combo.scoreBreakdown.trackTypes.join(\", \")}]:\n <span class=\"fw-dev-tooltip-value\"\n >${combo.scoreBreakdown.trackScore.toFixed(2)}</span\n >\n <span class=\"fw-dev-tooltip-weight\"\n >x${combo.scoreBreakdown.weights.tracks}</span\n >\n </div>\n <div class=\"fw-dev-tooltip-row\">\n Priority:\n <span class=\"fw-dev-tooltip-value\"\n >${combo.scoreBreakdown.priorityScore.toFixed(2)}</span\n >\n <span class=\"fw-dev-tooltip-weight\"\n >x${combo.scoreBreakdown.weights.priority}</span\n >\n </div>\n <div class=\"fw-dev-tooltip-row\">\n Source:\n <span class=\"fw-dev-tooltip-value\"\n >${combo.scoreBreakdown.sourceScore.toFixed(2)}</span\n >\n <span class=\"fw-dev-tooltip-weight\"\n >x${combo.scoreBreakdown.weights.source}</span\n >\n </div>\n\n ${typeof combo.scoreBreakdown.reliabilityScore === \"number\"\n ? html`\n <div class=\"fw-dev-tooltip-row\">\n Reliability:\n <span class=\"fw-dev-tooltip-value\"\n >${combo.scoreBreakdown.reliabilityScore.toFixed(\n 2\n )}</span\n >\n <span class=\"fw-dev-tooltip-weight\"\n >x${combo.scoreBreakdown.weights.reliability ??\n 0}</span\n >\n </div>\n `\n : nothing}\n ${typeof combo.scoreBreakdown.modeBonus === \"number\" &&\n combo.scoreBreakdown.modeBonus !== 0\n ? html`\n <div class=\"fw-dev-tooltip-row\">\n Mode (${this.playbackMode}):\n <span class=\"fw-dev-tooltip-bonus\"\n >+${combo.scoreBreakdown.modeBonus.toFixed(2)}</span\n >\n <span class=\"fw-dev-tooltip-weight\"\n >x${combo.scoreBreakdown.weights.mode ?? 0}</span\n >\n </div>\n `\n : nothing}\n ${typeof combo.scoreBreakdown.routingBonus === \"number\" &&\n combo.scoreBreakdown.routingBonus !== 0\n ? html`\n <div class=\"fw-dev-tooltip-row\">\n Routing:\n <span\n class=${classMap({\n \"fw-dev-tooltip-bonus\":\n combo.scoreBreakdown.routingBonus > 0,\n \"fw-dev-tooltip-penalty\":\n combo.scoreBreakdown.routingBonus < 0,\n })}\n >${combo.scoreBreakdown.routingBonus > 0\n ? \"+\"\n : \"\"}${combo.scoreBreakdown.routingBonus.toFixed(\n 2\n )}</span\n >\n <span class=\"fw-dev-tooltip-weight\"\n >x${combo.scoreBreakdown.weights.routing ?? 0}</span\n >\n </div>\n `\n : nothing}\n `\n : html`\n <div class=\"fw-dev-tooltip-error\">\n ${combo.incompatibleReason || \"Incompatible\"}\n </div>\n `}\n </div>\n `\n : nothing}\n </div>\n `;\n })}\n `}\n </div>\n </div>\n `;\n }\n\n protected render() {\n return html`\n <div class=\"fw-dev-panel\">\n <div class=\"fw-dev-header\">\n <button\n type=\"button\"\n class=${classMap({\n \"fw-dev-tab\": true,\n \"fw-dev-tab--active\": this._activeTab === \"config\",\n })}\n @click=${() => {\n this._activeTab = \"config\";\n }}\n >\n Config\n </button>\n <button\n type=\"button\"\n class=${classMap({\n \"fw-dev-tab\": true,\n \"fw-dev-tab--active\": this._activeTab === \"stats\",\n })}\n @click=${() => {\n this._activeTab = \"stats\";\n }}\n >\n Stats\n </button>\n <div class=\"fw-dev-spacer\"></div>\n <button\n type=\"button\"\n class=\"fw-dev-close\"\n aria-label=\"Close dev mode panel\"\n @click=${() =>\n this.dispatchEvent(new CustomEvent(\"fw-close\", { bubbles: true, composed: true }))}\n >\n ${closeIcon()}\n </button>\n </div>\n\n ${this._activeTab === \"config\" ? this._renderConfigTab() : this._renderStatsTab()}\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-dev-mode-panel\": FwDevModePanel;\n }\n}\n"],"names":["FwDevModePanel","LitElement","globalPlayerManager","QualityMonitor","html","classMap","nothing","closeIcon","sharedStyles","utilityStyles","css","__decorate","property","state","customElement"],"mappings":"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"}
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var tslib_es6 = require('../node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
|
|
4
|
-
var lit = require('lit');
|
|
5
|
-
var decorators_js = require('lit/decorators.js');
|
|
6
|
-
|
|
7
|
-
const ORIGINAL_WIDTH = 153;
|
|
8
|
-
const ORIGINAL_HEIGHT = 69;
|
|
9
|
-
const ASPECT_RATIO = ORIGINAL_WIDTH / ORIGINAL_HEIGHT;
|
|
10
|
-
const COLORS = [
|
|
11
|
-
"#7aa2f7",
|
|
12
|
-
"#bb9af7",
|
|
13
|
-
"#9ece6a",
|
|
14
|
-
"#73daca",
|
|
15
|
-
"#7dcfff",
|
|
16
|
-
"#f7768e",
|
|
17
|
-
"#e0af68",
|
|
18
|
-
"#2ac3de",
|
|
19
|
-
];
|
|
20
|
-
function pickNextColor(current) {
|
|
21
|
-
if (COLORS.length === 0) {
|
|
22
|
-
return current ?? "#ffffff";
|
|
23
|
-
}
|
|
24
|
-
if (COLORS.length === 1) {
|
|
25
|
-
return COLORS[0];
|
|
26
|
-
}
|
|
27
|
-
let next = COLORS[0];
|
|
28
|
-
while (next === current) {
|
|
29
|
-
next = COLORS[Math.floor(Math.random() * COLORS.length)];
|
|
30
|
-
}
|
|
31
|
-
return next;
|
|
32
|
-
}
|
|
33
|
-
exports.FwDvdLogo = class FwDvdLogo extends lit.LitElement {
|
|
34
|
-
constructor() {
|
|
35
|
-
super(...arguments);
|
|
36
|
-
this.parentRef = null;
|
|
37
|
-
this.scale = 0.15;
|
|
38
|
-
this._position = { top: 0, left: 0 };
|
|
39
|
-
this._dimensions = { width: ORIGINAL_WIDTH, height: ORIGINAL_HEIGHT };
|
|
40
|
-
this._color = pickNextColor();
|
|
41
|
-
this._velocity = { x: 1.8, y: 1.6 };
|
|
42
|
-
this._animationFrame = null;
|
|
43
|
-
this._resizeObserver = null;
|
|
44
|
-
this._lastTimestamp = performance.now();
|
|
45
|
-
}
|
|
46
|
-
connectedCallback() {
|
|
47
|
-
super.connectedCallback();
|
|
48
|
-
this._startAnimation();
|
|
49
|
-
}
|
|
50
|
-
firstUpdated() {
|
|
51
|
-
this._attachResizeObserver();
|
|
52
|
-
this._recalculateDimensions();
|
|
53
|
-
}
|
|
54
|
-
disconnectedCallback() {
|
|
55
|
-
super.disconnectedCallback();
|
|
56
|
-
this._stopAnimation();
|
|
57
|
-
this._detachResizeObserver();
|
|
58
|
-
}
|
|
59
|
-
updated(changed) {
|
|
60
|
-
if (changed.has("parentRef") || changed.has("scale")) {
|
|
61
|
-
this._attachResizeObserver();
|
|
62
|
-
this._recalculateDimensions();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
_getParent() {
|
|
66
|
-
return this.parentRef ?? this.parentElement;
|
|
67
|
-
}
|
|
68
|
-
_attachResizeObserver() {
|
|
69
|
-
this._detachResizeObserver();
|
|
70
|
-
const parent = this._getParent();
|
|
71
|
-
if (!parent || typeof ResizeObserver === "undefined") {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
this._resizeObserver = new ResizeObserver(() => this._recalculateDimensions());
|
|
75
|
-
this._resizeObserver.observe(parent);
|
|
76
|
-
}
|
|
77
|
-
_detachResizeObserver() {
|
|
78
|
-
this._resizeObserver?.disconnect();
|
|
79
|
-
this._resizeObserver = null;
|
|
80
|
-
}
|
|
81
|
-
_recalculateDimensions() {
|
|
82
|
-
const parent = this._getParent();
|
|
83
|
-
if (!parent) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
const parentWidth = parent.clientWidth;
|
|
87
|
-
const parentHeight = parent.clientHeight;
|
|
88
|
-
if (parentWidth <= 0 || parentHeight <= 0) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const maxWidth = parentWidth * this.scale;
|
|
92
|
-
const maxHeight = parentHeight * this.scale;
|
|
93
|
-
let width = maxWidth;
|
|
94
|
-
let height = width / ASPECT_RATIO;
|
|
95
|
-
if (height > maxHeight) {
|
|
96
|
-
height = maxHeight;
|
|
97
|
-
width = height * ASPECT_RATIO;
|
|
98
|
-
}
|
|
99
|
-
const nextDimensions = {
|
|
100
|
-
width: Math.max(20, width),
|
|
101
|
-
height: Math.max(20, height),
|
|
102
|
-
};
|
|
103
|
-
this._dimensions = nextDimensions;
|
|
104
|
-
const maxTop = Math.max(0, parentHeight - nextDimensions.height);
|
|
105
|
-
const maxLeft = Math.max(0, parentWidth - nextDimensions.width);
|
|
106
|
-
this._position = {
|
|
107
|
-
top: Math.random() * maxTop,
|
|
108
|
-
left: Math.random() * maxLeft,
|
|
109
|
-
};
|
|
110
|
-
const baseSpeed = Math.max(1.2, Math.min(nextDimensions.width, nextDimensions.height) / 70);
|
|
111
|
-
this._velocity = {
|
|
112
|
-
x: baseSpeed * (Math.random() > 0.5 ? 1 : -1),
|
|
113
|
-
y: baseSpeed * (Math.random() > 0.5 ? 1 : -1),
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
_startAnimation() {
|
|
117
|
-
if (this._animationFrame != null) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const tick = (timestamp) => {
|
|
121
|
-
const parent = this._getParent();
|
|
122
|
-
const dims = this._dimensions;
|
|
123
|
-
if (!parent || dims.width <= 0 || dims.height <= 0) {
|
|
124
|
-
this._animationFrame = requestAnimationFrame(tick);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
const deltaMs = timestamp - this._lastTimestamp;
|
|
128
|
-
this._lastTimestamp = timestamp;
|
|
129
|
-
const speedMultiplier = Math.min(deltaMs / 16, 2);
|
|
130
|
-
const maxTop = parent.clientHeight - dims.height;
|
|
131
|
-
const maxLeft = parent.clientWidth - dims.width;
|
|
132
|
-
let { top, left } = this._position;
|
|
133
|
-
let { x, y } = this._velocity;
|
|
134
|
-
let bounced = false;
|
|
135
|
-
top += y * speedMultiplier;
|
|
136
|
-
left += x * speedMultiplier;
|
|
137
|
-
if (top <= 0 || top >= maxTop) {
|
|
138
|
-
y = -y;
|
|
139
|
-
top = Math.max(0, Math.min(maxTop, top));
|
|
140
|
-
bounced = true;
|
|
141
|
-
}
|
|
142
|
-
if (left <= 0 || left >= maxLeft) {
|
|
143
|
-
x = -x;
|
|
144
|
-
left = Math.max(0, Math.min(maxLeft, left));
|
|
145
|
-
bounced = true;
|
|
146
|
-
}
|
|
147
|
-
this._velocity = { x, y };
|
|
148
|
-
this._position = { top, left };
|
|
149
|
-
if (bounced) {
|
|
150
|
-
this._color = pickNextColor(this._color);
|
|
151
|
-
}
|
|
152
|
-
this._animationFrame = requestAnimationFrame(tick);
|
|
153
|
-
};
|
|
154
|
-
this._animationFrame = requestAnimationFrame(tick);
|
|
155
|
-
}
|
|
156
|
-
_stopAnimation() {
|
|
157
|
-
if (this._animationFrame != null) {
|
|
158
|
-
cancelAnimationFrame(this._animationFrame);
|
|
159
|
-
this._animationFrame = null;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
render() {
|
|
163
|
-
return lit.html `
|
|
164
|
-
<div
|
|
165
|
-
style="
|
|
166
|
-
position:absolute;
|
|
167
|
-
top:${this._position.top}px;
|
|
168
|
-
left:${this._position.left}px;
|
|
169
|
-
width:${this._dimensions.width}px;
|
|
170
|
-
height:${this._dimensions.height}px;
|
|
171
|
-
"
|
|
172
|
-
>
|
|
173
|
-
<svg width="100%" height="100%" viewBox="0 0 153 69" fill=${this._color}>
|
|
174
|
-
<g>
|
|
175
|
-
<path
|
|
176
|
-
d="M140.186,63.52h-1.695l-0.692,5.236h-0.847l0.77-5.236h-1.693l0.076-0.694h4.158L140.186,63.52L140.186,63.52z M146.346,68.756h-0.848v-4.545l0,0l-2.389,4.545l-1-4.545l0,0l-1.462,4.545h-0.771l1.924-5.931h0.695l0.924,4.006l2.078-4.006 h0.848V68.756L146.346,68.756z M126.027,0.063H95.352c0,0-8.129,9.592-9.654,11.434c-8.064,9.715-9.523,12.32-9.779,13.02 c0.063-0.699-0.256-3.304-3.686-13.148C71.282,8.7,68.359,0.062,68.359,0.062H57.881V0L32.35,0.063H13.169l-1.97,8.131 l14.543,0.062h3.365c9.336,0,15.055,3.747,13.467,10.354c-1.717,7.24-9.91,10.416-18.545,10.416h-3.24l4.191-17.783H10.502 L4.34,37.219h20.578c15.432,0,30.168-8.13,32.709-18.608c0.508-1.906,0.443-6.67-0.764-9.527c0-0.127-0.063-0.191-0.127-0.444 c-0.064-0.063-0.127-0.509,0.127-0.571c0.128-0.062,0.383,0.189,0.445,0.254c0.127,0.317,0.19,0.57,0.19,0.57l13.083,36.965 l33.344-37.6h14.1h3.365c9.337,0,15.055,3.747,13.528,10.354c-1.778,7.24-9.972,10.416-18.608,10.416h-3.238l4.191-17.783h-14.481 l-6.159,25.976h20.576c15.434,0,30.232-8.13,32.709-18.608C152.449,8.193,141.523,0.063,126.027,0.063L126.027,0.063z M71.091,45.981c-39.123,0-70.816,4.512-70.816,10.035c0,5.59,31.693,10.034,70.816,10.034c39.121,0,70.877-4.444,70.877-10.034 C141.968,50.493,110.212,45.981,71.091,45.981L71.091,45.981z M68.55,59.573c-8.956,0-16.196-1.523-16.196-3.365 c0-1.84,7.239-3.303,16.196-3.303c8.955,0,16.195,1.463,16.195,3.303C84.745,58.050,77.505,59.573,68.55,59.573L68.55,59.573z"
|
|
177
|
-
/>
|
|
178
|
-
</g>
|
|
179
|
-
</svg>
|
|
180
|
-
</div>
|
|
181
|
-
`;
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
exports.FwDvdLogo.styles = lit.css `
|
|
185
|
-
:host {
|
|
186
|
-
position: absolute;
|
|
187
|
-
pointer-events: none;
|
|
188
|
-
user-select: none;
|
|
189
|
-
display: block;
|
|
190
|
-
z-index: 6;
|
|
191
|
-
}
|
|
192
|
-
`;
|
|
193
|
-
tslib_es6.__decorate([
|
|
194
|
-
decorators_js.property({ attribute: false })
|
|
195
|
-
], exports.FwDvdLogo.prototype, "parentRef", void 0);
|
|
196
|
-
tslib_es6.__decorate([
|
|
197
|
-
decorators_js.property({ type: Number })
|
|
198
|
-
], exports.FwDvdLogo.prototype, "scale", void 0);
|
|
199
|
-
tslib_es6.__decorate([
|
|
200
|
-
decorators_js.state()
|
|
201
|
-
], exports.FwDvdLogo.prototype, "_position", void 0);
|
|
202
|
-
tslib_es6.__decorate([
|
|
203
|
-
decorators_js.state()
|
|
204
|
-
], exports.FwDvdLogo.prototype, "_dimensions", void 0);
|
|
205
|
-
tslib_es6.__decorate([
|
|
206
|
-
decorators_js.state()
|
|
207
|
-
], exports.FwDvdLogo.prototype, "_color", void 0);
|
|
208
|
-
exports.FwDvdLogo = tslib_es6.__decorate([
|
|
209
|
-
decorators_js.customElement("fw-dvd-logo")
|
|
210
|
-
], exports.FwDvdLogo);
|
|
211
|
-
//# sourceMappingURL=fw-dvd-logo.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fw-dvd-logo.js","sources":["../../../../src/components/fw-dvd-logo.ts"],"sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property, state } from \"lit/decorators.js\";\n\ntype Point = { top: number; left: number };\ntype Velocity = { x: number; y: number };\ntype Size = { width: number; height: number };\n\nconst ORIGINAL_WIDTH = 153;\nconst ORIGINAL_HEIGHT = 69;\nconst ASPECT_RATIO = ORIGINAL_WIDTH / ORIGINAL_HEIGHT;\n\nconst COLORS = [\n \"#7aa2f7\",\n \"#bb9af7\",\n \"#9ece6a\",\n \"#73daca\",\n \"#7dcfff\",\n \"#f7768e\",\n \"#e0af68\",\n \"#2ac3de\",\n];\n\nfunction pickNextColor(current?: string): string {\n if (COLORS.length === 0) {\n return current ?? \"#ffffff\";\n }\n if (COLORS.length === 1) {\n return COLORS[0];\n }\n\n let next = COLORS[0];\n while (next === current) {\n next = COLORS[Math.floor(Math.random() * COLORS.length)];\n }\n return next;\n}\n\n@customElement(\"fw-dvd-logo\")\nexport class FwDvdLogo extends LitElement {\n @property({ attribute: false }) parentRef: HTMLElement | null = null;\n @property({ type: Number }) scale = 0.15;\n\n @state() private _position: Point = { top: 0, left: 0 };\n @state() private _dimensions: Size = { width: ORIGINAL_WIDTH, height: ORIGINAL_HEIGHT };\n @state() private _color = pickNextColor();\n\n private _velocity: Velocity = { x: 1.8, y: 1.6 };\n private _animationFrame: number | null = null;\n private _resizeObserver: ResizeObserver | null = null;\n private _lastTimestamp = performance.now();\n\n static styles = css`\n :host {\n position: absolute;\n pointer-events: none;\n user-select: none;\n display: block;\n z-index: 6;\n }\n `;\n\n connectedCallback(): void {\n super.connectedCallback();\n this._startAnimation();\n }\n\n firstUpdated(): void {\n this._attachResizeObserver();\n this._recalculateDimensions();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._stopAnimation();\n this._detachResizeObserver();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n if (changed.has(\"parentRef\") || changed.has(\"scale\")) {\n this._attachResizeObserver();\n this._recalculateDimensions();\n }\n }\n\n private _getParent(): HTMLElement | null {\n return this.parentRef ?? this.parentElement;\n }\n\n private _attachResizeObserver(): void {\n this._detachResizeObserver();\n\n const parent = this._getParent();\n if (!parent || typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n this._resizeObserver = new ResizeObserver(() => this._recalculateDimensions());\n this._resizeObserver.observe(parent);\n }\n\n private _detachResizeObserver(): void {\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n }\n\n private _recalculateDimensions(): void {\n const parent = this._getParent();\n if (!parent) {\n return;\n }\n\n const parentWidth = parent.clientWidth;\n const parentHeight = parent.clientHeight;\n if (parentWidth <= 0 || parentHeight <= 0) {\n return;\n }\n\n const maxWidth = parentWidth * this.scale;\n const maxHeight = parentHeight * this.scale;\n\n let width = maxWidth;\n let height = width / ASPECT_RATIO;\n if (height > maxHeight) {\n height = maxHeight;\n width = height * ASPECT_RATIO;\n }\n\n const nextDimensions: Size = {\n width: Math.max(20, width),\n height: Math.max(20, height),\n };\n this._dimensions = nextDimensions;\n\n const maxTop = Math.max(0, parentHeight - nextDimensions.height);\n const maxLeft = Math.max(0, parentWidth - nextDimensions.width);\n this._position = {\n top: Math.random() * maxTop,\n left: Math.random() * maxLeft,\n };\n\n const baseSpeed = Math.max(1.2, Math.min(nextDimensions.width, nextDimensions.height) / 70);\n this._velocity = {\n x: baseSpeed * (Math.random() > 0.5 ? 1 : -1),\n y: baseSpeed * (Math.random() > 0.5 ? 1 : -1),\n };\n }\n\n private _startAnimation(): void {\n if (this._animationFrame != null) {\n return;\n }\n\n const tick = (timestamp: number) => {\n const parent = this._getParent();\n const dims = this._dimensions;\n if (!parent || dims.width <= 0 || dims.height <= 0) {\n this._animationFrame = requestAnimationFrame(tick);\n return;\n }\n\n const deltaMs = timestamp - this._lastTimestamp;\n this._lastTimestamp = timestamp;\n const speedMultiplier = Math.min(deltaMs / 16, 2);\n\n const maxTop = parent.clientHeight - dims.height;\n const maxLeft = parent.clientWidth - dims.width;\n\n let { top, left } = this._position;\n let { x, y } = this._velocity;\n let bounced = false;\n\n top += y * speedMultiplier;\n left += x * speedMultiplier;\n\n if (top <= 0 || top >= maxTop) {\n y = -y;\n top = Math.max(0, Math.min(maxTop, top));\n bounced = true;\n }\n\n if (left <= 0 || left >= maxLeft) {\n x = -x;\n left = Math.max(0, Math.min(maxLeft, left));\n bounced = true;\n }\n\n this._velocity = { x, y };\n this._position = { top, left };\n if (bounced) {\n this._color = pickNextColor(this._color);\n }\n\n this._animationFrame = requestAnimationFrame(tick);\n };\n\n this._animationFrame = requestAnimationFrame(tick);\n }\n\n private _stopAnimation(): void {\n if (this._animationFrame != null) {\n cancelAnimationFrame(this._animationFrame);\n this._animationFrame = null;\n }\n }\n\n protected render() {\n return html`\n <div\n style=\"\n position:absolute;\n top:${this._position.top}px;\n left:${this._position.left}px;\n width:${this._dimensions.width}px;\n height:${this._dimensions.height}px;\n \"\n >\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 153 69\" fill=${this._color}>\n <g>\n <path\n d=\"M140.186,63.52h-1.695l-0.692,5.236h-0.847l0.77-5.236h-1.693l0.076-0.694h4.158L140.186,63.52L140.186,63.52z M146.346,68.756h-0.848v-4.545l0,0l-2.389,4.545l-1-4.545l0,0l-1.462,4.545h-0.771l1.924-5.931h0.695l0.924,4.006l2.078-4.006 h0.848V68.756L146.346,68.756z M126.027,0.063H95.352c0,0-8.129,9.592-9.654,11.434c-8.064,9.715-9.523,12.32-9.779,13.02 c0.063-0.699-0.256-3.304-3.686-13.148C71.282,8.7,68.359,0.062,68.359,0.062H57.881V0L32.35,0.063H13.169l-1.97,8.131 l14.543,0.062h3.365c9.336,0,15.055,3.747,13.467,10.354c-1.717,7.24-9.91,10.416-18.545,10.416h-3.24l4.191-17.783H10.502 L4.34,37.219h20.578c15.432,0,30.168-8.13,32.709-18.608c0.508-1.906,0.443-6.67-0.764-9.527c0-0.127-0.063-0.191-0.127-0.444 c-0.064-0.063-0.127-0.509,0.127-0.571c0.128-0.062,0.383,0.189,0.445,0.254c0.127,0.317,0.19,0.57,0.19,0.57l13.083,36.965 l33.344-37.6h14.1h3.365c9.337,0,15.055,3.747,13.528,10.354c-1.778,7.24-9.972,10.416-18.608,10.416h-3.238l4.191-17.783h-14.481 l-6.159,25.976h20.576c15.434,0,30.232-8.13,32.709-18.608C152.449,8.193,141.523,0.063,126.027,0.063L126.027,0.063z M71.091,45.981c-39.123,0-70.816,4.512-70.816,10.035c0,5.59,31.693,10.034,70.816,10.034c39.121,0,70.877-4.444,70.877-10.034 C141.968,50.493,110.212,45.981,71.091,45.981L71.091,45.981z M68.55,59.573c-8.956,0-16.196-1.523-16.196-3.365 c0-1.84,7.239-3.303,16.196-3.303c8.955,0,16.195,1.463,16.195,3.303C84.745,58.050,77.505,59.573,68.55,59.573L68.55,59.573z\"\n />\n </g>\n </svg>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-dvd-logo\": FwDvdLogo;\n }\n}\n"],"names":["FwDvdLogo","LitElement","html","css","__decorate","property","state","customElement"],"mappings":"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"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var tslib_es6 = require('../node_modules/.pnpm/@rollup_plugin-typescript@12.3.0_rollup@4.57.1_tslib@2.8.1_typescript@5.9.3/node_modules/tslib/tslib.es6.js');
|
|
4
|
-
var lit = require('lit');
|
|
5
|
-
var decorators_js = require('lit/decorators.js');
|
|
6
|
-
var classMap_js = require('lit/directives/class-map.js');
|
|
7
|
-
var sharedStyles = require('../styles/shared-styles.js');
|
|
8
|
-
var utilityStyles = require('../styles/utility-styles.js');
|
|
9
|
-
var index = require('../icons/index.js');
|
|
10
|
-
|
|
11
|
-
exports.FwErrorOverlay = class FwErrorOverlay extends lit.LitElement {
|
|
12
|
-
constructor() {
|
|
13
|
-
super(...arguments);
|
|
14
|
-
this.error = null;
|
|
15
|
-
this.isPassive = false;
|
|
16
|
-
}
|
|
17
|
-
render() {
|
|
18
|
-
return lit.html `
|
|
19
|
-
<div
|
|
20
|
-
role="alert"
|
|
21
|
-
aria-live="assertive"
|
|
22
|
-
class=${classMap_js.classMap({
|
|
23
|
-
"fw-error-overlay": true,
|
|
24
|
-
"fw-error-overlay--passive": this.isPassive,
|
|
25
|
-
"fw-error-overlay--fullscreen": !this.isPassive,
|
|
26
|
-
})}
|
|
27
|
-
>
|
|
28
|
-
<div
|
|
29
|
-
class=${classMap_js.classMap({
|
|
30
|
-
"fw-error-popup": true,
|
|
31
|
-
"fw-error-popup--passive": this.isPassive,
|
|
32
|
-
"fw-error-popup--fullscreen": !this.isPassive,
|
|
33
|
-
})}
|
|
34
|
-
>
|
|
35
|
-
<div
|
|
36
|
-
class=${classMap_js.classMap({
|
|
37
|
-
"fw-error-header": true,
|
|
38
|
-
"fw-error-header--warning": this.isPassive,
|
|
39
|
-
"fw-error-header--error": !this.isPassive,
|
|
40
|
-
})}
|
|
41
|
-
>
|
|
42
|
-
<span
|
|
43
|
-
class=${classMap_js.classMap({
|
|
44
|
-
"fw-error-title": true,
|
|
45
|
-
"fw-error-title--warning": this.isPassive,
|
|
46
|
-
"fw-error-title--error": !this.isPassive,
|
|
47
|
-
})}
|
|
48
|
-
>${this.isPassive ? "Warning" : "Error"}</span
|
|
49
|
-
>
|
|
50
|
-
<button
|
|
51
|
-
type="button"
|
|
52
|
-
class="fw-error-close"
|
|
53
|
-
@click=${this._clearError}
|
|
54
|
-
aria-label="Dismiss"
|
|
55
|
-
>
|
|
56
|
-
${index.closeIcon()}
|
|
57
|
-
</button>
|
|
58
|
-
</div>
|
|
59
|
-
<div class="fw-error-body">
|
|
60
|
-
<p class="fw-error-message">Playback issue</p>
|
|
61
|
-
</div>
|
|
62
|
-
<div class="fw-error-actions">
|
|
63
|
-
<button
|
|
64
|
-
type="button"
|
|
65
|
-
class="fw-error-btn"
|
|
66
|
-
aria-label="Retry playback"
|
|
67
|
-
@click=${this._retry}
|
|
68
|
-
>
|
|
69
|
-
Retry
|
|
70
|
-
</button>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
</div>
|
|
74
|
-
`;
|
|
75
|
-
}
|
|
76
|
-
_clearError() {
|
|
77
|
-
this.dispatchEvent(new CustomEvent("fw-clear-error", { bubbles: true, composed: true }));
|
|
78
|
-
}
|
|
79
|
-
_retry() {
|
|
80
|
-
this.dispatchEvent(new CustomEvent("fw-retry", { bubbles: true, composed: true }));
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
exports.FwErrorOverlay.styles = [
|
|
84
|
-
sharedStyles.sharedStyles,
|
|
85
|
-
utilityStyles.utilityStyles,
|
|
86
|
-
lit.css `
|
|
87
|
-
:host {
|
|
88
|
-
display: contents;
|
|
89
|
-
}
|
|
90
|
-
`,
|
|
91
|
-
];
|
|
92
|
-
tslib_es6.__decorate([
|
|
93
|
-
decorators_js.property({ type: String })
|
|
94
|
-
], exports.FwErrorOverlay.prototype, "error", void 0);
|
|
95
|
-
tslib_es6.__decorate([
|
|
96
|
-
decorators_js.property({ type: Boolean, attribute: "is-passive" })
|
|
97
|
-
], exports.FwErrorOverlay.prototype, "isPassive", void 0);
|
|
98
|
-
exports.FwErrorOverlay = tslib_es6.__decorate([
|
|
99
|
-
decorators_js.customElement("fw-error-overlay")
|
|
100
|
-
], exports.FwErrorOverlay);
|
|
101
|
-
//# sourceMappingURL=fw-error-overlay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fw-error-overlay.js","sources":["../../../../src/components/fw-error-overlay.ts"],"sourcesContent":["import { LitElement, html, css } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { sharedStyles } from \"../styles/shared-styles.js\";\nimport { utilityStyles } from \"../styles/utility-styles.js\";\nimport { closeIcon } from \"../icons/index.js\";\n\n@customElement(\"fw-error-overlay\")\nexport class FwErrorOverlay extends LitElement {\n @property({ type: String }) error: string | null = null;\n @property({ type: Boolean, attribute: \"is-passive\" }) isPassive = false;\n\n static styles = [\n sharedStyles,\n utilityStyles,\n css`\n :host {\n display: contents;\n }\n `,\n ];\n\n protected render() {\n return html`\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n class=${classMap({\n \"fw-error-overlay\": true,\n \"fw-error-overlay--passive\": this.isPassive,\n \"fw-error-overlay--fullscreen\": !this.isPassive,\n })}\n >\n <div\n class=${classMap({\n \"fw-error-popup\": true,\n \"fw-error-popup--passive\": this.isPassive,\n \"fw-error-popup--fullscreen\": !this.isPassive,\n })}\n >\n <div\n class=${classMap({\n \"fw-error-header\": true,\n \"fw-error-header--warning\": this.isPassive,\n \"fw-error-header--error\": !this.isPassive,\n })}\n >\n <span\n class=${classMap({\n \"fw-error-title\": true,\n \"fw-error-title--warning\": this.isPassive,\n \"fw-error-title--error\": !this.isPassive,\n })}\n >${this.isPassive ? \"Warning\" : \"Error\"}</span\n >\n <button\n type=\"button\"\n class=\"fw-error-close\"\n @click=${this._clearError}\n aria-label=\"Dismiss\"\n >\n ${closeIcon()}\n </button>\n </div>\n <div class=\"fw-error-body\">\n <p class=\"fw-error-message\">Playback issue</p>\n </div>\n <div class=\"fw-error-actions\">\n <button\n type=\"button\"\n class=\"fw-error-btn\"\n aria-label=\"Retry playback\"\n @click=${this._retry}\n >\n Retry\n </button>\n </div>\n </div>\n </div>\n `;\n }\n\n private _clearError() {\n this.dispatchEvent(new CustomEvent(\"fw-clear-error\", { bubbles: true, composed: true }));\n }\n\n private _retry() {\n this.dispatchEvent(new CustomEvent(\"fw-retry\", { bubbles: true, composed: true }));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"fw-error-overlay\": FwErrorOverlay;\n }\n}\n"],"names":["FwErrorOverlay","LitElement","html","classMap","closeIcon","sharedStyles","utilityStyles","css","__decorate","property","customElement"],"mappings":";;;;;;;;;;AAQaA,sBAAc,GAApB,MAAM,cAAe,SAAQC,cAAU,CAAA;AAAvC,IAAA,WAAA,GAAA;;QACuB,IAAA,CAAA,KAAK,GAAkB,IAAI;QACD,IAAA,CAAA,SAAS,GAAG,KAAK;IA+EzE;IAnEY,MAAM,GAAA;AACd,QAAA,OAAOC,QAAI,CAAA;;;;AAIC,cAAA,EAAAC,oBAAQ,CAAC;AACf,YAAA,kBAAkB,EAAE,IAAI;YACxB,2BAA2B,EAAE,IAAI,CAAC,SAAS;AAC3C,YAAA,8BAA8B,EAAE,CAAC,IAAI,CAAC,SAAS;SAChD,CAAC;;;AAGQ,gBAAA,EAAAA,oBAAQ,CAAC;AACf,YAAA,gBAAgB,EAAE,IAAI;YACtB,yBAAyB,EAAE,IAAI,CAAC,SAAS;AACzC,YAAA,4BAA4B,EAAE,CAAC,IAAI,CAAC,SAAS;SAC9C,CAAC;;;AAGQ,kBAAA,EAAAA,oBAAQ,CAAC;AACf,YAAA,iBAAiB,EAAE,IAAI;YACvB,0BAA0B,EAAE,IAAI,CAAC,SAAS;AAC1C,YAAA,wBAAwB,EAAE,CAAC,IAAI,CAAC,SAAS;SAC1C,CAAC;;;AAGQ,oBAAA,EAAAA,oBAAQ,CAAC;AACf,YAAA,gBAAgB,EAAE,IAAI;YACtB,yBAAyB,EAAE,IAAI,CAAC,SAAS;AACzC,YAAA,uBAAuB,EAAE,CAAC,IAAI,CAAC,SAAS;SACzC,CAAC;iBACC,IAAI,CAAC,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;;;;;AAK9B,qBAAA,EAAA,IAAI,CAAC,WAAW;;;AAGvB,cAAA,EAAAC,eAAS,EAAE;;;;;;;;;;;AAWJ,qBAAA,EAAA,IAAI,CAAC,MAAM;;;;;;;KAO7B;IACH;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpF;;AA5EOJ,sBAAA,CAAA,MAAM,GAAG;IACdK,yBAAY;IACZC,2BAAa;AACb,IAAAC,OAAG,CAAA;;;;AAIF,IAAA,CAAA;AACF,CARY;AAHeC,oBAAA,CAAA;AAA3B,IAAAC,sBAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAA8B,CAAA,EAAAT,sBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AACFQ,oBAAA,CAAA;IAArDC,sBAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE;AAAoB,CAAA,EAAAT,sBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAF7DA,sBAAc,GAAAQ,oBAAA,CAAA;IAD1BE,2BAAa,CAAC,kBAAkB;AACpB,CAAA,EAAAV,sBAAc,CAiF1B;;"}
|