avbridge 2.8.1 → 2.8.2
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/CHANGELOG.md +19 -0
- package/README.md +14 -2
- package/dist/player.cjs +32 -1
- package/dist/player.cjs.map +1 -1
- package/dist/player.d.cts +2 -1
- package/dist/player.d.ts +2 -1
- package/dist/player.js +32 -1
- package/dist/player.js.map +1 -1
- package/package.json +1 -1
- package/src/element/avbridge-player.ts +43 -2
package/dist/player.d.cts
CHANGED
|
@@ -300,7 +300,7 @@ interface AvbridgeVideoElementEventMap {
|
|
|
300
300
|
*/
|
|
301
301
|
|
|
302
302
|
declare class AvbridgePlayerElement extends HTMLElement {
|
|
303
|
-
static readonly observedAttributes: ("src" | "muted" | "autoplay" | "loop" | "preload" | "poster" | "playsinline" | "crossorigin" | "disableremoteplayback" | "preferstrategy" | "fit")[];
|
|
303
|
+
static readonly observedAttributes: ("src" | "muted" | "autoplay" | "loop" | "preload" | "poster" | "playsinline" | "crossorigin" | "disableremoteplayback" | "preferstrategy" | "fit" | "show-fit")[];
|
|
304
304
|
private _video;
|
|
305
305
|
private _playBtn;
|
|
306
306
|
private _overlayBtn;
|
|
@@ -332,6 +332,7 @@ declare class AvbridgePlayerElement extends HTMLElement {
|
|
|
332
332
|
private _statsInterval;
|
|
333
333
|
private _eventCleanup;
|
|
334
334
|
private _updateToolbarEmpty;
|
|
335
|
+
private _toolbarTop;
|
|
335
336
|
constructor();
|
|
336
337
|
private _template;
|
|
337
338
|
private _bindEvents;
|
package/dist/player.d.ts
CHANGED
|
@@ -300,7 +300,7 @@ interface AvbridgeVideoElementEventMap {
|
|
|
300
300
|
*/
|
|
301
301
|
|
|
302
302
|
declare class AvbridgePlayerElement extends HTMLElement {
|
|
303
|
-
static readonly observedAttributes: ("src" | "muted" | "autoplay" | "loop" | "preload" | "poster" | "playsinline" | "crossorigin" | "disableremoteplayback" | "preferstrategy" | "fit")[];
|
|
303
|
+
static readonly observedAttributes: ("src" | "muted" | "autoplay" | "loop" | "preload" | "poster" | "playsinline" | "crossorigin" | "disableremoteplayback" | "preferstrategy" | "fit" | "show-fit")[];
|
|
304
304
|
private _video;
|
|
305
305
|
private _playBtn;
|
|
306
306
|
private _overlayBtn;
|
|
@@ -332,6 +332,7 @@ declare class AvbridgePlayerElement extends HTMLElement {
|
|
|
332
332
|
private _statsInterval;
|
|
333
333
|
private _eventCleanup;
|
|
334
334
|
private _updateToolbarEmpty;
|
|
335
|
+
private _toolbarTop;
|
|
335
336
|
constructor();
|
|
336
337
|
private _template;
|
|
337
338
|
private _bindEvents;
|
package/dist/player.js
CHANGED
|
@@ -5142,8 +5142,10 @@ var PROXY_ATTRIBUTES = [
|
|
|
5142
5142
|
"preferstrategy",
|
|
5143
5143
|
"fit"
|
|
5144
5144
|
];
|
|
5145
|
+
var PLAYER_ATTRIBUTES = ["show-fit"];
|
|
5146
|
+
var FIT_MODES = ["contain", "cover", "fill"];
|
|
5145
5147
|
var AvbridgePlayerElement = class extends HTMLElement {
|
|
5146
|
-
static observedAttributes = [...PROXY_ATTRIBUTES];
|
|
5148
|
+
static observedAttributes = [...PROXY_ATTRIBUTES, ...PLAYER_ATTRIBUTES];
|
|
5147
5149
|
// ── Internal DOM refs ──────────────────────────────────────────────────
|
|
5148
5150
|
_video;
|
|
5149
5151
|
_playBtn;
|
|
@@ -5180,6 +5182,7 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5180
5182
|
_eventCleanup = [];
|
|
5181
5183
|
_updateToolbarEmpty = () => {
|
|
5182
5184
|
};
|
|
5185
|
+
_toolbarTop;
|
|
5183
5186
|
// ── Constructor ────────────────────────────────────────────────────────
|
|
5184
5187
|
constructor() {
|
|
5185
5188
|
super();
|
|
@@ -5203,6 +5206,8 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5203
5206
|
this._statsEl = shadow.querySelector(".avp-stats");
|
|
5204
5207
|
this._rippleLeft = shadow.querySelector(".avp-ripple-left");
|
|
5205
5208
|
this._rippleRight = shadow.querySelector(".avp-ripple-right");
|
|
5209
|
+
this._toolbarTop = shadow.querySelector('[part="toolbar-top"]');
|
|
5210
|
+
this._toolbarTop.setAttribute("data-visible", "true");
|
|
5206
5211
|
const slots = shadow.querySelectorAll('slot[name="top-left"], slot[name="top-right"]');
|
|
5207
5212
|
this._updateToolbarEmpty = () => {
|
|
5208
5213
|
const hasContent = Array.from(slots).some((s) => s.assignedNodes({ flatten: true }).length > 0);
|
|
@@ -5386,6 +5391,12 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5386
5391
|
}
|
|
5387
5392
|
attributeChangedCallback(name, _old, value) {
|
|
5388
5393
|
if (!this._video) return;
|
|
5394
|
+
if (PLAYER_ATTRIBUTES.includes(name)) {
|
|
5395
|
+
if (name === "show-fit" && this._settingsOpen) {
|
|
5396
|
+
this._buildSettingsMenu();
|
|
5397
|
+
}
|
|
5398
|
+
return;
|
|
5399
|
+
}
|
|
5389
5400
|
if (value == null) this._video.removeAttribute(name);
|
|
5390
5401
|
else this._video.setAttribute(name, value);
|
|
5391
5402
|
}
|
|
@@ -5508,6 +5519,16 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5508
5519
|
}
|
|
5509
5520
|
_buildSettingsMenu() {
|
|
5510
5521
|
const sections = [];
|
|
5522
|
+
if (this.hasAttribute("show-fit")) {
|
|
5523
|
+
const currentFit = this._video.fit ?? "contain";
|
|
5524
|
+
let fitItems = "";
|
|
5525
|
+
for (const mode of FIT_MODES) {
|
|
5526
|
+
const active = mode === currentFit;
|
|
5527
|
+
const label = mode[0].toUpperCase() + mode.slice(1);
|
|
5528
|
+
fitItems += `<div class="avp-settings-item${active ? " active" : ""}" data-fit="${mode}">${label}</div>`;
|
|
5529
|
+
}
|
|
5530
|
+
sections.push(`<div class="avp-settings-section"><div class="avp-settings-label">Fit</div>${fitItems}</div>`);
|
|
5531
|
+
}
|
|
5511
5532
|
const currentRate = this._video.playbackRate ?? 1;
|
|
5512
5533
|
let speedItems = "";
|
|
5513
5534
|
for (const spd of PLAYBACK_SPEEDS) {
|
|
@@ -5534,6 +5555,14 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5534
5555
|
}
|
|
5535
5556
|
sections.push(`<div class="avp-settings-section"><div class="avp-settings-item" data-stats>Stats for nerds</div></div>`);
|
|
5536
5557
|
this._settingsMenu.innerHTML = sections.join("");
|
|
5558
|
+
for (const item of this._settingsMenu.querySelectorAll("[data-fit]")) {
|
|
5559
|
+
item.addEventListener("click", (e) => {
|
|
5560
|
+
e.stopPropagation();
|
|
5561
|
+
const mode = item.dataset.fit;
|
|
5562
|
+
this.setAttribute("fit", mode);
|
|
5563
|
+
this._buildSettingsMenu();
|
|
5564
|
+
});
|
|
5565
|
+
}
|
|
5537
5566
|
for (const item of this._settingsMenu.querySelectorAll("[data-speed]")) {
|
|
5538
5567
|
item.addEventListener("click", (e) => {
|
|
5539
5568
|
e.stopPropagation();
|
|
@@ -5619,6 +5648,7 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5619
5648
|
// ── Controls: auto-hide ────────────────────────────────────────────────
|
|
5620
5649
|
_showControls() {
|
|
5621
5650
|
this.removeAttribute("data-controls-hidden");
|
|
5651
|
+
this._toolbarTop.setAttribute("data-visible", "true");
|
|
5622
5652
|
this._scheduleHide();
|
|
5623
5653
|
}
|
|
5624
5654
|
_scheduleHide() {
|
|
@@ -5628,6 +5658,7 @@ var AvbridgePlayerElement = class extends HTMLElement {
|
|
|
5628
5658
|
this._controlsTimer = setTimeout(() => {
|
|
5629
5659
|
if (this._state === "playing") {
|
|
5630
5660
|
this.setAttribute("data-controls-hidden", "");
|
|
5661
|
+
this._toolbarTop.setAttribute("data-visible", "false");
|
|
5631
5662
|
}
|
|
5632
5663
|
}, CONTROLS_HIDE_MS);
|
|
5633
5664
|
}
|