react-helios 2.0.1 → 2.1.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/README.md +68 -4
- package/dist/index.d.mts +72 -49
- package/dist/index.d.ts +72 -49
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +61 -9
- package/dist/styles.d.ts +1 -0
- package/package.json +11 -5
- package/dist/index.css +0 -2
- package/dist/index.css.map +0 -1
package/dist/styles.css
CHANGED
|
@@ -357,6 +357,52 @@
|
|
|
357
357
|
flex-shrink: 0;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
+
/* ─── Context menu ────────────────────────────────────────────────────────── */
|
|
361
|
+
.contextMenu {
|
|
362
|
+
position: fixed;
|
|
363
|
+
z-index: 1000;
|
|
364
|
+
background-color: rgba(15, 15, 15, 0.95);
|
|
365
|
+
border-radius: 6px;
|
|
366
|
+
padding: 4px;
|
|
367
|
+
min-width: 210px;
|
|
368
|
+
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.6);
|
|
369
|
+
backdrop-filter: blur(8px);
|
|
370
|
+
user-select: none;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.contextMenuItem {
|
|
374
|
+
display: flex;
|
|
375
|
+
align-items: center;
|
|
376
|
+
justify-content: space-between;
|
|
377
|
+
width: 100%;
|
|
378
|
+
padding: 8px 14px;
|
|
379
|
+
background: none;
|
|
380
|
+
border: none;
|
|
381
|
+
color: rgba(255, 255, 255, 0.85);
|
|
382
|
+
cursor: pointer;
|
|
383
|
+
text-align: left;
|
|
384
|
+
border-radius: 4px;
|
|
385
|
+
font-size: 13px;
|
|
386
|
+
transition: background-color 0.1s;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.contextMenuItem:hover {
|
|
390
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
391
|
+
color: #fff;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
.contextMenuCheck {
|
|
395
|
+
color: #60a5fa;
|
|
396
|
+
font-size: 14px;
|
|
397
|
+
font-weight: 700;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
.contextMenuDivider {
|
|
401
|
+
height: 1px;
|
|
402
|
+
background-color: rgba(255, 255, 255, 0.1);
|
|
403
|
+
margin: 4px 0;
|
|
404
|
+
}
|
|
405
|
+
|
|
360
406
|
|
|
361
407
|
/* ─── Progress bar container ─────────────────────────────────────────────── */
|
|
362
408
|
.progressContainer {
|
|
@@ -379,15 +425,9 @@
|
|
|
379
425
|
border-radius: 2px;
|
|
380
426
|
}
|
|
381
427
|
|
|
382
|
-
/* ─── Hidden preview video ───────────────────────────────────────────────── */
|
|
383
|
-
.previewVideo {
|
|
384
|
-
display: none;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
428
|
/* ─── Thumbnail tooltip ──────────────────────────────────────────────────── */
|
|
388
429
|
.previewTooltip {
|
|
389
430
|
position: absolute;
|
|
390
|
-
/* Sits above the container; bottom 100% + a small gap */
|
|
391
431
|
bottom: calc(100% + 6px);
|
|
392
432
|
transform: translateX(-50%);
|
|
393
433
|
pointer-events: none;
|
|
@@ -396,12 +436,20 @@
|
|
|
396
436
|
border-radius: 4px;
|
|
397
437
|
overflow: hidden;
|
|
398
438
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
|
|
439
|
+
/* Shown/hidden imperatively — default hidden until mouseenter */
|
|
440
|
+
display: none;
|
|
399
441
|
}
|
|
400
442
|
|
|
401
|
-
|
|
443
|
+
/*
|
|
444
|
+
* VTT sprite-sheet thumbnail cell.
|
|
445
|
+
* Dimensions and background-position are set imperatively from VTT cue data.
|
|
446
|
+
* background-size is kept auto so the full sprite sheet renders at natural
|
|
447
|
+
* resolution and background-position clips to the correct cell.
|
|
448
|
+
*/
|
|
449
|
+
.previewThumbnail {
|
|
402
450
|
display: block;
|
|
403
|
-
|
|
404
|
-
|
|
451
|
+
background-repeat: no-repeat;
|
|
452
|
+
background-size: auto;
|
|
405
453
|
}
|
|
406
454
|
|
|
407
455
|
.previewTime {
|
|
@@ -411,6 +459,8 @@
|
|
|
411
459
|
color: #fff;
|
|
412
460
|
text-align: center;
|
|
413
461
|
background-color: rgba(0, 0, 0, 0.7);
|
|
462
|
+
/* Show a minimum width when there is no thumbnail above it */
|
|
463
|
+
min-width: 52px;
|
|
414
464
|
}
|
|
415
465
|
|
|
416
466
|
/* ─── Track background ───────────────────────────────────────────────────── */
|
|
@@ -453,6 +503,7 @@
|
|
|
453
503
|
}
|
|
454
504
|
|
|
455
505
|
/* ─── Hover position indicator (thin white line) ────────────────────────── */
|
|
506
|
+
/* Shown/hidden imperatively — default hidden until mouseenter */
|
|
456
507
|
.hoverIndicator {
|
|
457
508
|
position: absolute;
|
|
458
509
|
top: 50%;
|
|
@@ -461,6 +512,7 @@
|
|
|
461
512
|
height: 100%;
|
|
462
513
|
background-color: rgba(255, 255, 255, 0.8);
|
|
463
514
|
pointer-events: none;
|
|
515
|
+
display: none;
|
|
464
516
|
}
|
|
465
517
|
|
|
466
518
|
/* ─── Scrub handle ───────────────────────────────────────────────────────── */
|
package/dist/styles.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-helios",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Production-grade React video player with HLS, quality selection, live streams, subtitles, and thumbnail preview",
|
|
3
|
+
"version": "2.1.1",
|
|
4
|
+
"description": "Production-grade React video player with HLS, quality selection, live streams, subtitles, and VTT sprite thumbnail preview",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -16,10 +16,13 @@
|
|
|
16
16
|
"import": "./dist/index.mjs",
|
|
17
17
|
"require": "./dist/index.js"
|
|
18
18
|
},
|
|
19
|
-
"./styles":
|
|
19
|
+
"./styles": {
|
|
20
|
+
"types": "./dist/styles.d.ts",
|
|
21
|
+
"default": "./dist/styles.css"
|
|
22
|
+
}
|
|
20
23
|
},
|
|
21
24
|
"scripts": {
|
|
22
|
-
"build": "tsup",
|
|
25
|
+
"build": "tsup && node -e \"require('fs').writeFileSync('dist/styles.d.ts', 'export {};\\n');\"",
|
|
23
26
|
"dev": "tsup --watch",
|
|
24
27
|
"typecheck": "tsc --noEmit",
|
|
25
28
|
"prepublishOnly": "npm run build"
|
|
@@ -39,7 +42,10 @@
|
|
|
39
42
|
"captions",
|
|
40
43
|
"typescript",
|
|
41
44
|
"nextjs",
|
|
42
|
-
"picture-in-picture"
|
|
45
|
+
"picture-in-picture",
|
|
46
|
+
"vtt",
|
|
47
|
+
"sprite-sheet",
|
|
48
|
+
"thumbnail-preview"
|
|
43
49
|
],
|
|
44
50
|
"author": "Sanish Manandhar <mail.sanishmanandhar@gmail.com>",
|
|
45
51
|
"license": "MIT",
|
package/dist/index.css
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
.controlButton{background:none;border:none;color:#fff;cursor:pointer;padding:10px;min-width:40px;min-height:40px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:opacity .15s,background-color .15s,transform .1s;flex-shrink:0}.controlButton:hover{background-color:#ffffff1f;opacity:1}.controlButton:active{transform:scale(.92)}.controlButton svg{width:20px;height:20px;pointer-events:none}@media(max-width:480px){.controlButton{padding:8px;min-width:36px;min-height:36px}}.volumeContainer{position:relative;display:flex;align-items:center}.volumeSlider{width:80px;cursor:pointer;-webkit-appearance:none;appearance:none;background:#ffffff4d;border-radius:2px;height:4px;outline:none;transition:width .15s;flex-shrink:0}.volumeSlider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:12px;height:12px;background:#fff;border-radius:50%;cursor:pointer;box-shadow:0 1px 4px #0006}.volumeSlider::-moz-range-thumb{width:12px;height:12px;background:#fff;border-radius:50%;cursor:pointer;border:none;box-shadow:0 1px 4px #0006}.timeDisplay{color:#fff;font-size:13px;font-weight:500;user-select:none;white-space:nowrap;padding:0 4px;letter-spacing:.01em}.settingsContainer{position:relative}.settingsDropdown{position:absolute;bottom:calc(100% + 8px);right:0;background-color:#0f0f0ff2;border-radius:6px;padding:6px;min-width:150px;z-index:30;box-shadow:0 4px 24px #0009;backdrop-filter:blur(8px)}.settingsTabs{display:flex;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:4px}.settingsTab{flex:1;background:none;border:none;color:#fff9;cursor:pointer;font-size:12px;font-weight:600;padding:6px 0;letter-spacing:.04em;border-bottom:2px solid transparent;transition:color .15s,border-color .15s;text-transform:uppercase}.settingsTab.active{color:#fff;border-bottom-color:#3b82f6}.settingsTab:hover:not(.active){color:#ffffffe6}.settingsPanelLabel{color:#ffffff80;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:4px 8px 2px}.settingsOption{display:flex;align-items:center;justify-content:space-between;width:100%;padding:7px 10px;background:none;border:none;color:#ffffffd9;cursor:pointer;text-align:left;border-radius:4px;font-size:13px;transition:background-color .15s}.settingsOption:hover{background-color:#ffffff1a;color:#fff}.settingsOption.active{color:#60a5fa;font-weight:600}.settingsOptionBadge{font-size:10px;color:#fff6;margin-left:8px;flex-shrink:0}.progressContainer{position:relative;width:100%;padding:10px 0;cursor:pointer;box-sizing:content-box}.progressContainer:focus{outline:none}.progressContainer:focus-visible{outline:2px solid #60a5fa;outline-offset:2px;border-radius:2px}.previewVideo{display:none}.previewTooltip{position:absolute;bottom:calc(100% + 6px);transform:translate(-50%);pointer-events:none;z-index:20;background-color:#000;border-radius:4px;overflow:hidden;box-shadow:0 4px 16px #00000080}.previewCanvas{display:block;width:160px;height:90px}.previewTime{padding:3px 8px;font-size:11px;font-weight:600;color:#fff;text-align:center;background-color:#000000b3}.progressBackground{position:relative;width:100%;height:4px;background-color:#ffffff40;border-radius:2px;overflow:hidden;transition:height .15s;will-change:height}.progressContainer:hover .progressBackground{height:6px}.bufferedSegment{position:absolute;top:0;height:100%;background-color:#ffffff73;border-radius:2px}.progressFilled{position:absolute;top:0;left:0;height:100%;background-color:#3b82f6;border-radius:2px;will-change:width}.hoverIndicator{position:absolute;top:50%;transform:translate(-50%,-50%);width:2px;height:100%;background-color:#fffc;pointer-events:none}.scrubHandle{position:absolute;top:50%;transform:translate(-50%,-50%);width:14px;height:14px;background-color:#fff;border-radius:50%;box-shadow:0 1px 6px #00000080;pointer-events:none;transition:transform .12s,opacity .12s;opacity:0;z-index:2;will-change:transform,opacity}.progressContainer:hover .scrubHandle,.scrubHandle.dragging{opacity:1}.scrubHandle.dragging{transform:translate(-50%,-50%) scale(1.25);transition:none}
|
|
2
|
-
/*# sourceMappingURL=index.css.map */
|
package/dist/index.css.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/styles/ControlElements.css","../src/styles/ProgressBar.css"],"sourcesContent":["/* ─── Control button base ────────────────────────────────────────────────── */\n.controlButton {\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n padding: 10px;\n min-width: 40px;\n min-height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: opacity 0.15s, background-color 0.15s, transform 0.1s;\n flex-shrink: 0;\n}\n\n.controlButton:hover {\n background-color: rgba(255, 255, 255, 0.12);\n opacity: 1;\n}\n\n.controlButton:active {\n transform: scale(0.92);\n}\n\n.controlButton svg {\n width: 20px;\n height: 20px;\n pointer-events: none;\n}\n\n@media (max-width: 480px) {\n .controlButton {\n padding: 8px;\n min-width: 36px;\n min-height: 36px;\n }\n}\n\n/* ─── Volume control ─────────────────────────────────────────────────────── */\n.volumeContainer {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.volumeSlider {\n width: 80px;\n cursor: pointer;\n -webkit-appearance: none;\n appearance: none;\n background: rgba(255, 255, 255, 0.3);\n border-radius: 2px;\n height: 4px;\n outline: none;\n transition: width 0.15s;\n flex-shrink: 0;\n}\n\n.volumeSlider::-webkit-slider-thumb {\n -webkit-appearance: none;\n appearance: none;\n width: 12px;\n height: 12px;\n background: #fff;\n border-radius: 50%;\n cursor: pointer;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);\n}\n\n.volumeSlider::-moz-range-thumb {\n width: 12px;\n height: 12px;\n background: #fff;\n border-radius: 50%;\n cursor: pointer;\n border: none;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);\n}\n\n/* ─── Time display ───────────────────────────────────────────────────────── */\n.timeDisplay {\n color: #fff;\n font-size: 13px;\n font-weight: 500;\n user-select: none;\n white-space: nowrap;\n padding: 0 4px;\n letter-spacing: 0.01em;\n}\n\n/* ─── Settings menu ──────────────────────────────────────────────────────── */\n.settingsContainer {\n position: relative;\n}\n\n.settingsDropdown {\n position: absolute;\n bottom: calc(100% + 8px);\n right: 0;\n background-color: rgba(15, 15, 15, 0.95);\n border-radius: 6px;\n padding: 6px;\n min-width: 150px;\n z-index: 30;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.6);\n backdrop-filter: blur(8px);\n}\n\n/* Tabs (Speed / Quality) */\n.settingsTabs {\n display: flex;\n border-bottom: 1px solid rgba(255, 255, 255, 0.12);\n margin-bottom: 4px;\n}\n\n.settingsTab {\n flex: 1;\n background: none;\n border: none;\n color: rgba(255, 255, 255, 0.6);\n cursor: pointer;\n font-size: 12px;\n font-weight: 600;\n padding: 6px 0;\n letter-spacing: 0.04em;\n border-bottom: 2px solid transparent;\n transition: color 0.15s, border-color 0.15s;\n text-transform: uppercase;\n}\n\n.settingsTab.active {\n color: #fff;\n border-bottom-color: #3b82f6;\n}\n\n.settingsTab:hover:not(.active) {\n color: rgba(255, 255, 255, 0.9);\n}\n\n/* Panel section label */\n.settingsPanelLabel {\n color: rgba(255, 255, 255, 0.5);\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n padding: 4px 8px 2px;\n}\n\n/* Option rows */\n.settingsOption {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 7px 10px;\n background: none;\n border: none;\n color: rgba(255, 255, 255, 0.85);\n cursor: pointer;\n text-align: left;\n border-radius: 4px;\n font-size: 13px;\n transition: background-color 0.15s;\n}\n\n.settingsOption:hover {\n background-color: rgba(255, 255, 255, 0.1);\n color: #fff;\n}\n\n.settingsOption.active {\n color: #60a5fa;\n font-weight: 600;\n}\n\n.settingsOptionBadge {\n font-size: 10px;\n color: rgba(255, 255, 255, 0.4);\n margin-left: 8px;\n flex-shrink: 0;\n}\n","/* ─── Progress bar container ─────────────────────────────────────────────── */\n.progressContainer {\n position: relative;\n width: 100%;\n /* Tall hit area so scrub feels easy to grab on touch and mouse */\n padding: 10px 0;\n cursor: pointer;\n /* Expand the clickable zone without affecting layout neighbours */\n box-sizing: content-box;\n}\n\n.progressContainer:focus {\n outline: none;\n}\n\n.progressContainer:focus-visible {\n outline: 2px solid #60a5fa;\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n/* ─── Hidden preview video ───────────────────────────────────────────────── */\n.previewVideo {\n display: none;\n}\n\n/* ─── Thumbnail tooltip ──────────────────────────────────────────────────── */\n.previewTooltip {\n position: absolute;\n /* Sits above the container; bottom 100% + a small gap */\n bottom: calc(100% + 6px);\n transform: translateX(-50%);\n pointer-events: none;\n z-index: 20;\n background-color: #000;\n border-radius: 4px;\n overflow: hidden;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);\n}\n\n.previewCanvas {\n display: block;\n width: 160px;\n height: 90px;\n}\n\n.previewTime {\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: #fff;\n text-align: center;\n background-color: rgba(0, 0, 0, 0.7);\n}\n\n/* ─── Track background ───────────────────────────────────────────────────── */\n.progressBackground {\n position: relative;\n width: 100%;\n height: 4px;\n background-color: rgba(255, 255, 255, 0.25);\n border-radius: 2px;\n /* Keep overflow:hidden for buffered / filled bars ONLY.\n The scrub handle must live OUTSIDE this element. */\n overflow: hidden;\n transition: height 0.15s;\n will-change: height;\n}\n\n/* Grow the track on hover for a \"YouTube-style\" feel */\n.progressContainer:hover .progressBackground {\n height: 6px;\n}\n\n/* ─── Buffered range indicator ───────────────────────────────────────────── */\n.bufferedSegment {\n position: absolute;\n top: 0;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.45);\n border-radius: 2px;\n}\n\n/* ─── Played progress fill ───────────────────────────────────────────────── */\n.progressFilled {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n background-color: #3b82f6;\n border-radius: 2px;\n will-change: width;\n}\n\n/* ─── Hover position indicator (thin white line) ────────────────────────── */\n.hoverIndicator {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 2px;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.8);\n pointer-events: none;\n}\n\n/* ─── Scrub handle ───────────────────────────────────────────────────────── */\n/*\n * The handle is a SIBLING of .progressBackground (outside overflow:hidden).\n * It is positioned absolutely within .progressContainer, which provides\n * the full padded height. `top: 50%` centers it on the container mid-line,\n * which aligns with the track regardless of the container's padding.\n *\n * Fix: previously the handle was inside overflow:hidden and only a tiny\n * sliver was visible on the 4px-tall track.\n */\n.scrubHandle {\n position: absolute;\n top: 50%;\n transform: translate(-50%, -50%);\n width: 14px;\n height: 14px;\n background-color: #fff;\n border-radius: 50%;\n box-shadow: 0 1px 6px rgba(0, 0, 0, 0.5);\n pointer-events: none;\n transition: transform 0.12s, opacity 0.12s;\n /* Hidden by default; shown on container hover */\n opacity: 0;\n z-index: 2;\n will-change: transform, opacity;\n}\n\n.progressContainer:hover .scrubHandle,\n.scrubHandle.dragging {\n opacity: 1;\n}\n\n.scrubHandle.dragging {\n transform: translate(-50%, -50%) scale(1.25);\n transition: none;\n}\n"],"mappings":"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","names":[]}
|