@uibit/video 0.1.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/dist/video.js ADDED
@@ -0,0 +1,456 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { html, nothing } from 'lit';
8
+ import { customElement, fromLucide, getIcon, msg, UIBitElement } from '@uibit/core';
9
+ import { Play, Pause, Volume1, Volume2, VolumeX, Maximize, Minimize } from 'lucide';
10
+ import { property, state, query } from 'lit/decorators.js';
11
+ import { styles } from './styles';
12
+ /**
13
+ * Enhanced custom video component that wraps a native `<video>` or `<iframe>` element.
14
+ * Provides custom interactive player controls with Scandinavian design aesthetics.
15
+ *
16
+ * @slot - The default slot where the native `<video>` or `<iframe>` element is placed.
17
+ *
18
+ * @cssprop [--uibit-video-radius=0.5rem] - Border radius of the video player.
19
+ * @cssprop [--uibit-video-bg=#000000] - Background color of the video player.
20
+ * @cssprop [--uibit-video-focus-color=#000000] - Focus outline color.
21
+ * @cssprop [--uibit-video-control-bg=rgba(17, 24, 39, 0.85)] - Background of the control bar.
22
+ * @cssprop [--uibit-video-control-border=rgba(255, 255, 255, 0.1)] - Border of the control bar.
23
+ * @cssprop [--uibit-video-control-color=#ffffff] - Color of icons and text.
24
+ */
25
+ let Video = class Video extends UIBitElement {
26
+ constructor() {
27
+ super(...arguments);
28
+ /** Poster image URL. Also used as background for iframes before playing. */
29
+ this.poster = '';
30
+ /** Show player controls. */
31
+ this.controls = true;
32
+ this._isPlaying = false;
33
+ this._currentTime = 0;
34
+ this._duration = 0;
35
+ this._volume = 1;
36
+ this._isMuted = false;
37
+ this._isFullscreen = false;
38
+ this._isSeeking = false;
39
+ this._isVolumeSeeking = false;
40
+ this._isIframeMode = false;
41
+ this._iframePlaying = false;
42
+ this._videoEl = null;
43
+ this._iframeEl = null;
44
+ }
45
+ static { this.styles = styles; }
46
+ connectedCallback() {
47
+ super.connectedCallback();
48
+ this.listen(document, 'fullscreenchange', this._onFullscreenChange.bind(this));
49
+ }
50
+ firstUpdated(changedProperties) {
51
+ super.firstUpdated(changedProperties);
52
+ this._detectSlottedElements();
53
+ }
54
+ _detectSlottedElements() {
55
+ const slot = this.shadowRoot?.querySelector('slot:not([name])');
56
+ let assigned = [];
57
+ if (slot) {
58
+ assigned = slot.assignedElements({ flatten: true });
59
+ }
60
+ // Fallback for environments where slot is not fully resolved yet
61
+ const video = assigned.find(el => el.tagName === 'VIDEO') ||
62
+ this.querySelector('video');
63
+ if (video) {
64
+ this._videoEl = video;
65
+ this._isIframeMode = false;
66
+ this._setupVideoListeners();
67
+ if (!this.poster && video.hasAttribute('poster')) {
68
+ this.poster = video.getAttribute('poster') || '';
69
+ }
70
+ return;
71
+ }
72
+ const iframe = assigned.find(el => el.tagName === 'IFRAME') ||
73
+ this.querySelector('iframe');
74
+ if (iframe) {
75
+ this._iframeEl = iframe;
76
+ this._isIframeMode = true;
77
+ this._iframeEl.style.display = 'none';
78
+ return;
79
+ }
80
+ }
81
+ _setupVideoListeners() {
82
+ if (!this._videoEl)
83
+ return;
84
+ // Hide default controls
85
+ this._videoEl.controls = false;
86
+ // Sync initial state
87
+ this._isPlaying = !this._videoEl.paused;
88
+ this._currentTime = this._videoEl.currentTime;
89
+ this._duration = this._videoEl.duration || 0;
90
+ this._volume = this._videoEl.volume;
91
+ this._isMuted = this._videoEl.muted;
92
+ // Bind event listeners
93
+ this.listen(this._videoEl, 'play', () => { this._isPlaying = true; });
94
+ this.listen(this._videoEl, 'pause', () => { this._isPlaying = false; });
95
+ this.listen(this._videoEl, 'timeupdate', () => {
96
+ if (!this._isSeeking) {
97
+ this._currentTime = this._videoEl?.currentTime || 0;
98
+ }
99
+ });
100
+ this.listen(this._videoEl, 'durationchange', () => {
101
+ this._duration = this._videoEl?.duration || 0;
102
+ });
103
+ this.listen(this._videoEl, 'loadedmetadata', () => {
104
+ this._duration = this._videoEl?.duration || 0;
105
+ this._currentTime = this._videoEl?.currentTime || 0;
106
+ });
107
+ this.listen(this._videoEl, 'volumechange', () => {
108
+ if (this._videoEl) {
109
+ this._volume = this._videoEl.volume;
110
+ this._isMuted = this._videoEl.muted;
111
+ }
112
+ });
113
+ this.listen(this._videoEl, 'ended', () => {
114
+ this._isPlaying = false;
115
+ });
116
+ }
117
+ _onSlotChange() {
118
+ this._detectSlottedElements();
119
+ }
120
+ // ── Actions ────────────────────────────────────────────────────
121
+ togglePlay() {
122
+ if (this._isIframeMode) {
123
+ this._playIframe();
124
+ return;
125
+ }
126
+ if (!this._videoEl)
127
+ return;
128
+ if (this._isPlaying) {
129
+ this._videoEl.pause();
130
+ }
131
+ else {
132
+ this._videoEl.play();
133
+ }
134
+ }
135
+ _playIframe() {
136
+ this._iframePlaying = true;
137
+ if (this._iframeEl) {
138
+ this._iframeEl.style.display = 'block';
139
+ // Auto play YouTube / Vimeo if possible by rewriting source or appending autoplay
140
+ const src = this._iframeEl.getAttribute('src') || '';
141
+ if (src && !src.includes('autoplay=1')) {
142
+ const separator = src.includes('?') ? '&' : '?';
143
+ this._iframeEl.setAttribute('src', `${src}${separator}autoplay=1`);
144
+ }
145
+ }
146
+ }
147
+ toggleMute() {
148
+ if (!this._videoEl)
149
+ return;
150
+ this._videoEl.muted = !this._videoEl.muted;
151
+ this._isMuted = this._videoEl.muted;
152
+ }
153
+ _onVolumePointerDown(e) {
154
+ this._isVolumeSeeking = true;
155
+ this._updateVolumeFromEvent(e);
156
+ const container = e.currentTarget;
157
+ container.setPointerCapture(e.pointerId);
158
+ }
159
+ _onVolumePointerMove(e) {
160
+ if (!this._isVolumeSeeking)
161
+ return;
162
+ this._updateVolumeFromEvent(e);
163
+ }
164
+ _onVolumePointerUp(e) {
165
+ if (!this._isVolumeSeeking)
166
+ return;
167
+ this._isVolumeSeeking = false;
168
+ this._updateVolumeFromEvent(e);
169
+ const container = e.currentTarget;
170
+ container.releasePointerCapture(e.pointerId);
171
+ }
172
+ _updateVolumeFromEvent(e) {
173
+ const rect = e.currentTarget.getBoundingClientRect();
174
+ const offsetX = Math.max(0, Math.min(e.clientX - rect.left, rect.width));
175
+ const pct = Math.max(0, Math.min(offsetX / rect.width, 1));
176
+ this._volume = pct;
177
+ if (this._videoEl) {
178
+ this._videoEl.volume = pct;
179
+ this._videoEl.muted = pct === 0;
180
+ }
181
+ this._isMuted = pct === 0;
182
+ }
183
+ toggleFullscreen() {
184
+ if (!this._containerEl)
185
+ return;
186
+ if (!document.fullscreenElement) {
187
+ this._containerEl.requestFullscreen().catch((err) => {
188
+ console.error('Failed to enter fullscreen:', err);
189
+ });
190
+ }
191
+ else {
192
+ document.exitFullscreen();
193
+ }
194
+ }
195
+ _onFullscreenChange() {
196
+ this._isFullscreen = document.fullscreenElement === this._containerEl;
197
+ }
198
+ // ── Timeline Scrubbing ─────────────────────────────────────────
199
+ _onTimelinePointerDown(e) {
200
+ if (!this._videoEl || !this._duration)
201
+ return;
202
+ this._isSeeking = true;
203
+ this._updateTimelineFromEvent(e);
204
+ const container = e.currentTarget;
205
+ container.setPointerCapture(e.pointerId);
206
+ }
207
+ _onTimelinePointerMove(e) {
208
+ if (!this._isSeeking)
209
+ return;
210
+ this._updateTimelineFromEvent(e);
211
+ }
212
+ _onTimelinePointerUp(e) {
213
+ if (!this._isSeeking)
214
+ return;
215
+ this._isSeeking = false;
216
+ this._updateTimelineFromEvent(e);
217
+ const container = e.currentTarget;
218
+ container.releasePointerCapture(e.pointerId);
219
+ }
220
+ _updateTimelineFromEvent(e) {
221
+ if (!this._videoEl || !this._duration)
222
+ return;
223
+ const rect = e.currentTarget.getBoundingClientRect();
224
+ const offsetX = Math.max(0, Math.min(e.clientX - rect.left, rect.width));
225
+ const pct = offsetX / rect.width;
226
+ this._videoEl.currentTime = pct * this._duration;
227
+ this._currentTime = this._videoEl.currentTime;
228
+ }
229
+ // ── Keyboard Navigation ────────────────────────────────────────
230
+ _onKeyDown(e) {
231
+ if (this._isIframeMode && this._iframePlaying)
232
+ return;
233
+ if (e.key === ' ' || e.key === 'k') {
234
+ e.preventDefault();
235
+ this.togglePlay();
236
+ }
237
+ else if (e.key === 'm') {
238
+ e.preventDefault();
239
+ this.toggleMute();
240
+ }
241
+ else if (e.key === 'f') {
242
+ e.preventDefault();
243
+ this.toggleFullscreen();
244
+ }
245
+ else if (e.key === 'ArrowRight') {
246
+ e.preventDefault();
247
+ if (this._videoEl)
248
+ this._videoEl.currentTime = Math.min(this._duration, this._currentTime + 5);
249
+ }
250
+ else if (e.key === 'ArrowLeft') {
251
+ e.preventDefault();
252
+ if (this._videoEl)
253
+ this._videoEl.currentTime = Math.max(0, this._currentTime - 5);
254
+ }
255
+ else if (e.key === 'ArrowUp') {
256
+ e.preventDefault();
257
+ if (this._videoEl) {
258
+ this._videoEl.volume = Math.min(1, this._videoEl.volume + 0.1);
259
+ }
260
+ }
261
+ else if (e.key === 'ArrowDown') {
262
+ e.preventDefault();
263
+ if (this._videoEl) {
264
+ this._videoEl.volume = Math.max(0, this._videoEl.volume - 0.1);
265
+ }
266
+ }
267
+ }
268
+ // ── Formatting ─────────────────────────────────────────────────
269
+ _formatTime(sec) {
270
+ if (isNaN(sec) || !isFinite(sec))
271
+ return '0:00';
272
+ const m = Math.floor(sec / 60);
273
+ const s = Math.floor(sec % 60);
274
+ return `${m}:${s < 10 ? '0' : ''}${s}`;
275
+ }
276
+ _onPlayerClick(e) {
277
+ const target = e.target;
278
+ if (target.closest('.controls-bar') || target.closest('.center-play-btn')) {
279
+ return;
280
+ }
281
+ this.togglePlay();
282
+ }
283
+ // ── Render ─────────────────────────────────────────────────────
284
+ render() {
285
+ const progressPct = this._duration ? (this._currentTime / this._duration) * 100 : 0;
286
+ const showOverlay = (!this._isPlaying && this._currentTime === 0) && !this._iframePlaying;
287
+ const isPaused = !this._isPlaying;
288
+ return html `
289
+ <div
290
+ class="player-container ${isPaused ? 'paused' : ''} ${this._isSeeking ? 'seeking' : ''}"
291
+ part="container"
292
+ @keydown=${this._onKeyDown}
293
+ @click=${this._onPlayerClick}
294
+ tabindex="0"
295
+ aria-label=${msg('Video Player')}
296
+ >
297
+ <!-- Raw video/iframe goes here -->
298
+ <slot @slotchange=${this._onSlotChange}></slot>
299
+
300
+ <!-- Premium Iframe / Native Poster Overlay -->
301
+ ${(this._isIframeMode && !this._iframePlaying) || showOverlay ? html `
302
+ <div
303
+ class="poster-overlay"
304
+ part="poster"
305
+ style=${this.poster ? `background-image: url('${this.poster}');` : ''}
306
+ >
307
+ <button
308
+ class="center-play-btn"
309
+ part="center-play-btn"
310
+ @click=${this.togglePlay}
311
+ aria-label=${msg('Play Video')}
312
+ ></button>
313
+ </div>
314
+ ` : nothing}
315
+
316
+ <!-- Custom Controls (Only for native video mode, and only if controls enabled) -->
317
+ ${!this._isIframeMode && this.controls ? html `
318
+ <div class="controls-bar" part="controls-bar" @click=${(e) => e.stopPropagation()}>
319
+ <!-- Play/Pause -->
320
+ <button
321
+ class="control-btn"
322
+ part="play-btn"
323
+ @click=${this.togglePlay}
324
+ aria-label=${this._isPlaying ? msg('Pause') : msg('Play')}
325
+ >
326
+ ${this._isPlaying
327
+ ? getIcon('pause', 18, fromLucide(Pause))
328
+ : getIcon('play', 18, fromLucide(Play))}
329
+ </button>
330
+
331
+ <!-- Time display -->
332
+ <div class="time-display" part="time-display">
333
+ <span>${this._formatTime(this._currentTime)}</span>
334
+ <span style="opacity: 0.5; margin: 0 0.25rem;">/</span>
335
+ <span>${this._formatTime(this._duration)}</span>
336
+ </div>
337
+
338
+ <!-- Timeline -->
339
+ <div
340
+ class="timeline-container"
341
+ part="timeline-container"
342
+ @pointerdown=${this._onTimelinePointerDown}
343
+ @pointermove=${this._onTimelinePointerMove}
344
+ @pointerup=${this._onTimelinePointerUp}
345
+ role="slider"
346
+ aria-label=${msg('Seek timeline')}
347
+ aria-valuemin="0"
348
+ aria-valuemax=${Math.round(this._duration)}
349
+ aria-valuenow=${Math.round(this._currentTime)}
350
+ aria-valuetext=${`${this._formatTime(this._currentTime)} of ${this._formatTime(this._duration)}`}
351
+ tabindex="0"
352
+ >
353
+ <div class="timeline-bar" part="timeline-bar">
354
+ <div class="timeline-progress" part="timeline-progress" style="width: ${progressPct}%;"></div>
355
+ <div class="timeline-handle" part="timeline-handle" style="left: ${progressPct}%;"></div>
356
+ </div>
357
+ </div>
358
+
359
+ <!-- Volume Controls -->
360
+ <div class="volume-container">
361
+ <button
362
+ class="control-btn"
363
+ part="volume-btn"
364
+ @click=${this.toggleMute}
365
+ aria-label=${this._isMuted ? msg('Unmute') : msg('Mute')}
366
+ >
367
+ ${this._isMuted || this._volume === 0
368
+ ? getIcon('volume-x', 18, fromLucide(VolumeX))
369
+ : this._volume < 0.5
370
+ ? getIcon('volume-1', 18, fromLucide(Volume1))
371
+ : getIcon('volume-2', 18, fromLucide(Volume2))}
372
+ </button>
373
+ <div class="volume-slider-wrap">
374
+ <div
375
+ class="volume-slider-container"
376
+ part="volume-slider-container"
377
+ @pointerdown=${this._onVolumePointerDown}
378
+ @pointermove=${this._onVolumePointerMove}
379
+ @pointerup=${this._onVolumePointerUp}
380
+ role="slider"
381
+ aria-label=${msg('Volume level')}
382
+ aria-valuemin="0"
383
+ aria-valuemax="100"
384
+ aria-valuenow=${Math.round((this._isMuted ? 0 : this._volume) * 100)}
385
+ tabindex="0"
386
+ >
387
+ <div class="volume-slider-bar" part="volume-slider-bar">
388
+ <div class="volume-slider-progress" part="volume-slider-progress" style="width: ${(this._isMuted ? 0 : this._volume) * 100}%;"></div>
389
+ <div class="volume-slider-handle" part="volume-slider-handle" style="left: ${(this._isMuted ? 0 : this._volume) * 100}%;"></div>
390
+ </div>
391
+ </div>
392
+ </div>
393
+ </div>
394
+
395
+ <!-- Fullscreen -->
396
+ <button
397
+ class="control-btn"
398
+ part="fullscreen-btn"
399
+ @click=${this.toggleFullscreen}
400
+ aria-label=${this._isFullscreen ? msg('Exit fullscreen') : msg('Fullscreen')}
401
+ >
402
+ ${this._isFullscreen
403
+ ? getIcon('minimize', 18, fromLucide(Minimize))
404
+ : getIcon('maximize', 18, fromLucide(Maximize))}
405
+ </button>
406
+ </div>
407
+ ` : nothing}
408
+ </div>
409
+ `;
410
+ }
411
+ };
412
+ __decorate([
413
+ property({ type: String })
414
+ ], Video.prototype, "poster", void 0);
415
+ __decorate([
416
+ property({ type: Boolean })
417
+ ], Video.prototype, "controls", void 0);
418
+ __decorate([
419
+ state()
420
+ ], Video.prototype, "_isPlaying", void 0);
421
+ __decorate([
422
+ state()
423
+ ], Video.prototype, "_currentTime", void 0);
424
+ __decorate([
425
+ state()
426
+ ], Video.prototype, "_duration", void 0);
427
+ __decorate([
428
+ state()
429
+ ], Video.prototype, "_volume", void 0);
430
+ __decorate([
431
+ state()
432
+ ], Video.prototype, "_isMuted", void 0);
433
+ __decorate([
434
+ state()
435
+ ], Video.prototype, "_isFullscreen", void 0);
436
+ __decorate([
437
+ state()
438
+ ], Video.prototype, "_isSeeking", void 0);
439
+ __decorate([
440
+ state()
441
+ ], Video.prototype, "_isVolumeSeeking", void 0);
442
+ __decorate([
443
+ state()
444
+ ], Video.prototype, "_isIframeMode", void 0);
445
+ __decorate([
446
+ state()
447
+ ], Video.prototype, "_iframePlaying", void 0);
448
+ __decorate([
449
+ query('.player-container')
450
+ ], Video.prototype, "_containerEl", void 0);
451
+ Video = __decorate([
452
+ customElement('uibit-video')
453
+ ], Video);
454
+ export { Video };
455
+ export default Video;
456
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "@uibit/video",
3
+ "version": "0.1.0",
4
+ "description": "Custom premium customizable wrapper for native video elements and iframe video embeds",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ },
13
+ "./custom-elements.json": "./custom-elements.json",
14
+ "./react": "./dist/frameworks/react/index.d.ts",
15
+ "./vue": "./dist/frameworks/vue/index.ts",
16
+ "./svelte": "./dist/frameworks/svelte/index.svelte",
17
+ "./angular": "./dist/frameworks/angular/index.ts",
18
+ "./solid": "./dist/frameworks/solid/index.d.ts",
19
+ "./astro": "./dist/frameworks/astro/index.astro",
20
+ "./qwik": "./dist/frameworks/qwik/index.tsx",
21
+ "./nuxt": "./dist/frameworks/nuxt/index.ts",
22
+ "./preact": "./dist/frameworks/preact/index.d.ts",
23
+ "./stencil": "./dist/frameworks/stencil/index.d.ts"
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "package.json",
28
+ "README.md",
29
+ "LICENSE",
30
+ "custom-elements.json"
31
+ ],
32
+ "keywords": [
33
+ "video",
34
+ "player",
35
+ "custom-video",
36
+ "web-component",
37
+ "lit"
38
+ ],
39
+ "author": "Jonathan Rawlings",
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://github.com/Rawlings/uibit",
44
+ "directory": "packages/components/video"
45
+ },
46
+ "dependencies": {
47
+ "lucide": "^1.24.0",
48
+ "@uibit/core": "0.1.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^20.19.43",
52
+ "lit": "^3.3.3",
53
+ "typescript": "7.0.2",
54
+ "@uibit/codegen": "0.1.0"
55
+ },
56
+ "peerDependencies": {
57
+ "lit": "^3.0.0",
58
+ "react": ">=18",
59
+ "vue": ">=3",
60
+ "svelte": ">=4 || ^5",
61
+ "@angular/core": ">=14"
62
+ },
63
+ "peerDependenciesMeta": {
64
+ "react": {
65
+ "optional": true
66
+ },
67
+ "vue": {
68
+ "optional": true
69
+ },
70
+ "svelte": {
71
+ "optional": true
72
+ },
73
+ "@angular/core": {
74
+ "optional": true
75
+ }
76
+ },
77
+ "customElements": "custom-elements.json",
78
+ "uibit": {
79
+ "id": "video",
80
+ "title": "Video",
81
+ "category": "Media",
82
+ "tagName": "uibit-video"
83
+ },
84
+ "scripts": {
85
+ "build": "cem analyze --globs 'src/**/*.ts' --litelement && uibit-codegen --package . && tsc",
86
+ "dev": "concurrently \"cem analyze --globs 'src/**/*.ts' --litelement --watch\" \"tsc --watch\"",
87
+ "analyze": "cem analyze --globs 'src/**/*.ts' --litelement",
88
+ "typecheck": "tsc --noEmit",
89
+ "test": "vitest run -c ../../../vitest.config.ts --passWithNoTests"
90
+ }
91
+ }