saltfish 0.3.74 → 0.3.75
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/components/LoadingSpinner.d.ts.map +1 -1
- package/dist/components/buttons/ExitButton.d.ts.map +1 -1
- package/dist/components/buttons/MinimizeButton.d.ts.map +1 -1
- package/dist/components/buttons/PlayPauseButton.d.ts.map +1 -1
- package/dist/managers/CursorManager.d.ts +0 -20
- package/dist/managers/CursorManager.d.ts.map +1 -1
- package/dist/managers/VideoControlsUI.d.ts.map +1 -1
- package/dist/player.js +2 -2
- package/dist/player.min.js +2 -2
- package/dist/saltfish-playlist-player.es.js +47 -158
- package/dist/saltfish-playlist-player.umd.js +1 -1
- package/dist/utils/colorUtils.d.ts +22 -0
- package/dist/utils/colorUtils.d.ts.map +1 -0
- package/dist/utils/icons.d.ts +19 -0
- package/dist/utils/icons.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -5272,6 +5272,19 @@ function createDevicePlaybackHandler(deviceInfo) {
|
|
|
5272
5272
|
return new DesktopPlaybackHandler(deviceInfo);
|
|
5273
5273
|
}
|
|
5274
5274
|
}
|
|
5275
|
+
const ICON_CLOSE = `<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/></svg>`;
|
|
5276
|
+
const ICON_PLUS = `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 5v14M5 12h14" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>`;
|
|
5277
|
+
const ICON_PLAY = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 5v14l11-7z" fill="currentColor"/></svg>`;
|
|
5278
|
+
const ICON_SPEAKER = `<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"/></svg>`;
|
|
5279
|
+
const ICON_SPEAKER_MUTED = `<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm101.66-61.3a8,8,0,0,1-11.32,11.32L216,139.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L204.69,128l-18.35-18.34a8,8,0,0,1,11.32-11.32L216,116.69l18.34-18.35a8,8,0,0,1,11.32,11.32L227.31,128Z"/></svg>`;
|
|
5280
|
+
const ICON_CC = `<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm0,144H32V64H224V192ZM118.92,151.71A8,8,0,0,1,116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,118.92,151.71Zm80,0A8,8,0,0,1,196,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,198.92,151.71Z"/></svg>`;
|
|
5281
|
+
const ICON_CC_DISABLED = `<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm0,144H32V64H224V192ZM118.92,151.71A8,8,0,0,1,116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,118.92,151.71Zm80,0A8,8,0,0,1,196,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,198.92,151.71Z"/><line x1="48" y1="48" x2="208" y2="208" stroke="currentColor" stroke-width="16" stroke-linecap="round"/></svg>`;
|
|
5282
|
+
const ICON_CURSOR = `<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none"><defs><filter id="cursor-shadow" x="-50%" y="-50%" width="200%" height="200%"><feDropShadow dx="0" dy="1" stdDeviation="1.2" flood-color="rgba(0, 0, 0, 0.22)"/></filter></defs><path d="M3.5 3.5L10.5 20.5L13.3 13.3L20.5 10.5L3.5 3.5Z" fill="#ff7614" stroke="white" stroke-width="0.7" stroke-linejoin="round" stroke-linecap="round" filter="url(#cursor-shadow)"/></svg>`;
|
|
5283
|
+
const ICON_LOADING_SPINNER = `<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg"><g transform="translate(10, 10) scale(0.656)"><g clip-path="url(#saltfish-clip)"><path d="M61.0002 30.1906C61.0002 46.8644 47.4834 60.3812 30.8097 60.3812C14.136 60.3812 27.1659 46.8644 27.1659 30.1906C27.1659 13.5168 14.136 0 30.8097 0C47.4834 0 61.0002 13.5168 61.0002 30.1906Z" fill="black" fill-opacity="0.9"/><path d="M24.13 29.8618C24.13 40.3565 15.6978 48.8642 5.29602 48.8642C-5.10576 48.8642 3.02294 40.3565 3.02294 29.8618C3.02294 19.3671 -5.10576 10.8594 5.29602 10.8594C15.6978 10.8594 24.13 19.3671 24.13 29.8618Z" fill="black" fill-opacity="0.9"/></g><defs><clipPath id="saltfish-clip"><rect width="61" height="61" fill="white"/></clipPath></defs></g><circle cx="30" cy="30" r="28" stroke="black" stroke-width="2" fill="none" stroke-linecap="round" stroke-dasharray="8 6" stroke-opacity="0.3"><animateTransform attributeName="transform" type="rotate" values="0 30 30;360 30 30" dur="2s" repeatCount="indefinite"/></circle></svg>`;
|
|
5284
|
+
const ICON_SPEAKER_OUTLINE = `<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" fill="none"/><path d="M15 9c0.8 0.8 1.5 1.9 1.5 3s-0.7 2.2-1.5 3" stroke="currentColor"/><path d="M19 7c1.6 1.6 2.5 3.8 2.5 6s-0.9 4.4-2.5 6" stroke="currentColor"/></svg>`;
|
|
5285
|
+
function createCloseIcon(size = 18) {
|
|
5286
|
+
return `<svg width="${size}" height="${size}" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/></svg>`;
|
|
5287
|
+
}
|
|
5275
5288
|
class VideoControlsUI {
|
|
5276
5289
|
constructor(container, deviceHandler, callbacks) {
|
|
5277
5290
|
// Container and control elements
|
|
@@ -5368,13 +5381,7 @@ class VideoControlsUI {
|
|
|
5368
5381
|
this.muteButton = document.createElement("button");
|
|
5369
5382
|
this.muteButton.className = "sf-video-container__mute-button";
|
|
5370
5383
|
this.deviceHandler.configureControlElement(this.muteButton);
|
|
5371
|
-
this.muteButton.innerHTML =
|
|
5372
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
5373
|
-
<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5" fill="none"></polygon>
|
|
5374
|
-
<path d="M15 9c0.8 0.8 1.5 1.9 1.5 3s-0.7 2.2-1.5 3" stroke="currentColor"></path>
|
|
5375
|
-
<path d="M19 7c1.6 1.6 2.5 3.8 2.5 6s-0.9 4.4-2.5 6" stroke="currentColor"></path>
|
|
5376
|
-
</svg>
|
|
5377
|
-
`;
|
|
5384
|
+
this.muteButton.innerHTML = ICON_SPEAKER_OUTLINE;
|
|
5378
5385
|
if (controlsConfig.useTouch) {
|
|
5379
5386
|
this.muteButton.addEventListener("touchend", (event) => {
|
|
5380
5387
|
event.preventDefault();
|
|
@@ -5565,17 +5572,9 @@ class VideoControlsUI {
|
|
|
5565
5572
|
const store = getSaltfishStore();
|
|
5566
5573
|
const isMuted = store.isMuted;
|
|
5567
5574
|
if (isMuted) {
|
|
5568
|
-
this.muteButton.innerHTML =
|
|
5569
|
-
<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
5570
|
-
<path d="M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm101.66-61.3a8,8,0,0,1-11.32,11.32L216,139.31l-18.34,18.35a8,8,0,0,1-11.32-11.32L204.69,128l-18.35-18.34a8,8,0,0,1,11.32-11.32L216,116.69l18.34-18.35a8,8,0,0,1,11.32,11.32L227.31,128Z"></path>
|
|
5571
|
-
</svg>
|
|
5572
|
-
`;
|
|
5575
|
+
this.muteButton.innerHTML = ICON_SPEAKER_MUTED;
|
|
5573
5576
|
} else {
|
|
5574
|
-
this.muteButton.innerHTML =
|
|
5575
|
-
<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
5576
|
-
<path d="M155.51,24.81a8,8,0,0,0-8.42.88L77.25,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V32A8,8,0,0,0,155.51,24.81ZM32,96H72v64H32ZM144,207.64,88,164.09V91.91l56-43.55Zm54-106.08a40,40,0,0,1,0,52.88,8,8,0,0,1-12-10.58,24,24,0,0,0,0-31.72,8,8,0,0,1,12-10.58ZM248,128a79.9,79.9,0,0,1-20.37,53.34,8,8,0,0,1-11.92-10.67,64,64,0,0,0,0-85.33,8,8,0,1,1,11.92-10.67A79.83,79.83,0,0,1,248,128Z"></path>
|
|
5577
|
-
</svg>
|
|
5578
|
-
`;
|
|
5577
|
+
this.muteButton.innerHTML = ICON_SPEAKER;
|
|
5579
5578
|
}
|
|
5580
5579
|
}
|
|
5581
5580
|
/**
|
|
@@ -5584,18 +5583,9 @@ class VideoControlsUI {
|
|
|
5584
5583
|
updateCCButtonIcon(isEnabled) {
|
|
5585
5584
|
if (!this.ccButton) return;
|
|
5586
5585
|
if (isEnabled) {
|
|
5587
|
-
this.ccButton.innerHTML =
|
|
5588
|
-
<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
5589
|
-
<path d="M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm0,144H32V64H224V192ZM118.92,151.71A8,8,0,0,1,116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,118.92,151.71Zm80,0A8,8,0,0,1,196,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,198.92,151.71Z"></path>
|
|
5590
|
-
</svg>
|
|
5591
|
-
`;
|
|
5586
|
+
this.ccButton.innerHTML = ICON_CC;
|
|
5592
5587
|
} else {
|
|
5593
|
-
this.ccButton.innerHTML =
|
|
5594
|
-
<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
5595
|
-
<path d="M224,48H32A16,16,0,0,0,16,64V192a16,16,0,0,0,16,16H224a16,16,0,0,0,16-16V64A16,16,0,0,0,224,48Zm0,144H32V64H224V192ZM118.92,151.71A8,8,0,0,1,116,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,118.92,151.71Zm80,0A8,8,0,0,1,196,162.64a40,40,0,1,1,0-69.28,8,8,0,1,1-8,13.85,24,24,0,1,0,0,41.58A8,8,0,0,1,198.92,151.71Z"></path>
|
|
5596
|
-
<line x1="48" y1="48" x2="208" y2="208" stroke="currentColor" stroke-width="16" stroke-linecap="round"/>
|
|
5597
|
-
</svg>
|
|
5598
|
-
`;
|
|
5588
|
+
this.ccButton.innerHTML = ICON_CC_DISABLED;
|
|
5599
5589
|
}
|
|
5600
5590
|
}
|
|
5601
5591
|
/**
|
|
@@ -7097,6 +7087,25 @@ function reportElementError(playlistId, stepId, selector, expectedElement, expec
|
|
|
7097
7087
|
}
|
|
7098
7088
|
})();
|
|
7099
7089
|
}
|
|
7090
|
+
function parseColorToRgb(color) {
|
|
7091
|
+
const el = document.createElement("div");
|
|
7092
|
+
el.style.color = color;
|
|
7093
|
+
document.body.appendChild(el);
|
|
7094
|
+
const computed = window.getComputedStyle(el).color;
|
|
7095
|
+
document.body.removeChild(el);
|
|
7096
|
+
const match = computed.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
|
|
7097
|
+
return match ? { r: +match[1], g: +match[2], b: +match[3] } : null;
|
|
7098
|
+
}
|
|
7099
|
+
function colorToRgba(color, opacity) {
|
|
7100
|
+
const rgb = parseColorToRgb(color);
|
|
7101
|
+
return rgb ? `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${opacity})` : color;
|
|
7102
|
+
}
|
|
7103
|
+
function getContrastingTextColor(bgColor) {
|
|
7104
|
+
const rgb = parseColorToRgb(bgColor);
|
|
7105
|
+
if (!rgb) return "#fff";
|
|
7106
|
+
const luminance = (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3;
|
|
7107
|
+
return luminance > 150 ? "#333" : "#fff";
|
|
7108
|
+
}
|
|
7100
7109
|
class CursorManager {
|
|
7101
7110
|
constructor() {
|
|
7102
7111
|
__publicField(this, "cursor", null);
|
|
@@ -7585,16 +7594,7 @@ class CursorManager {
|
|
|
7585
7594
|
this.injectCursorStyles();
|
|
7586
7595
|
this.cursor = document.createElement("div");
|
|
7587
7596
|
this.cursor.className = "sf-cursor";
|
|
7588
|
-
this.cursor.innerHTML =
|
|
7589
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 24 24" fill="none">
|
|
7590
|
-
<defs>
|
|
7591
|
-
<filter id="cursor-shadow" x="-50%" y="-50%" width="200%" height="200%">
|
|
7592
|
-
<feDropShadow dx="0" dy="1" stdDeviation="1.2" flood-color="rgba(0, 0, 0, 0.22)"/>
|
|
7593
|
-
</filter>
|
|
7594
|
-
</defs>
|
|
7595
|
-
<path d="M3.5 3.5L10.5 20.5L13.3 13.3L20.5 10.5L3.5 3.5Z" fill="#ff7614" stroke="white" stroke-width="0.7" stroke-linejoin="round" stroke-linecap="round" filter="url(#cursor-shadow)" />
|
|
7596
|
-
</svg>
|
|
7597
|
-
`;
|
|
7597
|
+
this.cursor.innerHTML = ICON_CURSOR;
|
|
7598
7598
|
this.labelElement = document.createElement("div");
|
|
7599
7599
|
this.labelElement.className = "sf-cursor-label";
|
|
7600
7600
|
this.selectionElement = document.createElement("div");
|
|
@@ -8466,81 +8466,17 @@ class CursorManager {
|
|
|
8466
8466
|
const path = svg.querySelector("path");
|
|
8467
8467
|
if (path) {
|
|
8468
8468
|
path.setAttribute("fill", color);
|
|
8469
|
-
} else {
|
|
8470
|
-
console.warn("[CursorManager.setColor] No path found in SVG");
|
|
8471
8469
|
}
|
|
8472
|
-
} else {
|
|
8473
|
-
console.warn("[CursorManager.setColor] No SVG found in cursor");
|
|
8474
8470
|
}
|
|
8475
|
-
} else {
|
|
8476
|
-
console.warn("[CursorManager.setColor] No cursor element");
|
|
8477
8471
|
}
|
|
8478
8472
|
if (this.selectionElement) {
|
|
8479
8473
|
this.selectionElement.style.setProperty("--sf-selection-color", color);
|
|
8480
|
-
|
|
8481
|
-
this.selectionElement.style.setProperty("--sf-selection-bg-color", rgbaBackground);
|
|
8474
|
+
this.selectionElement.style.setProperty("--sf-selection-bg-color", colorToRgba(color, 0));
|
|
8482
8475
|
}
|
|
8483
8476
|
if (this.labelElement) {
|
|
8484
8477
|
this.labelElement.style.setProperty("--sf-cursor-label-bg", color);
|
|
8485
|
-
|
|
8486
|
-
this.labelElement.style.setProperty("--sf-cursor-label-text", textColor);
|
|
8487
|
-
}
|
|
8488
|
-
}
|
|
8489
|
-
/**
|
|
8490
|
-
* Calculates whether white or black text provides better contrast against a background color
|
|
8491
|
-
* Uses relative luminance calculation for accessibility
|
|
8492
|
-
* @param bgColor - The background color (hex, rgb, etc)
|
|
8493
|
-
* @returns '#fff' for dark backgrounds, '#333' for light backgrounds
|
|
8494
|
-
*/
|
|
8495
|
-
getContrastingTextColor(bgColor) {
|
|
8496
|
-
const rgb = this.parseColorToRgb(bgColor);
|
|
8497
|
-
if (!rgb) {
|
|
8498
|
-
return "#fff";
|
|
8478
|
+
this.labelElement.style.setProperty("--sf-cursor-label-text", getContrastingTextColor(color));
|
|
8499
8479
|
}
|
|
8500
|
-
const luminance = (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3;
|
|
8501
|
-
return luminance > 150 ? "#333" : "#fff";
|
|
8502
|
-
}
|
|
8503
|
-
/**
|
|
8504
|
-
* Parses a color string to RGB values
|
|
8505
|
-
* @param color - The color to parse (hex, rgb, rgba)
|
|
8506
|
-
* @returns RGB object or null if parsing fails
|
|
8507
|
-
*/
|
|
8508
|
-
parseColorToRgb(color) {
|
|
8509
|
-
const tempElement = document.createElement("div");
|
|
8510
|
-
tempElement.style.color = color;
|
|
8511
|
-
document.body.appendChild(tempElement);
|
|
8512
|
-
const computedColor = window.getComputedStyle(tempElement).color;
|
|
8513
|
-
document.body.removeChild(tempElement);
|
|
8514
|
-
const rgbMatch = computedColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
|
|
8515
|
-
if (rgbMatch) {
|
|
8516
|
-
return {
|
|
8517
|
-
r: parseInt(rgbMatch[1], 10),
|
|
8518
|
-
g: parseInt(rgbMatch[2], 10),
|
|
8519
|
-
b: parseInt(rgbMatch[3], 10)
|
|
8520
|
-
};
|
|
8521
|
-
}
|
|
8522
|
-
return null;
|
|
8523
|
-
}
|
|
8524
|
-
/**
|
|
8525
|
-
* Converts a color string (hex, rgb, rgba) to rgba format with specified opacity
|
|
8526
|
-
* @param color - The color to convert
|
|
8527
|
-
* @param opacity - The opacity value (0-1)
|
|
8528
|
-
* @returns rgba color string
|
|
8529
|
-
*/
|
|
8530
|
-
colorToRgba(color, opacity) {
|
|
8531
|
-
const tempElement = document.createElement("div");
|
|
8532
|
-
tempElement.style.color = color;
|
|
8533
|
-
document.body.appendChild(tempElement);
|
|
8534
|
-
const computedColor = window.getComputedStyle(tempElement).color;
|
|
8535
|
-
document.body.removeChild(tempElement);
|
|
8536
|
-
const rgbMatch = computedColor.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);
|
|
8537
|
-
if (rgbMatch) {
|
|
8538
|
-
const r = rgbMatch[1];
|
|
8539
|
-
const g = rgbMatch[2];
|
|
8540
|
-
const b = rgbMatch[3];
|
|
8541
|
-
return `rgba(${r}, ${g}, ${b}, ${opacity})`;
|
|
8542
|
-
}
|
|
8543
|
-
return color;
|
|
8544
8480
|
}
|
|
8545
8481
|
/**
|
|
8546
8482
|
* Sets the label text to display beside the cursor
|
|
@@ -11527,11 +11463,7 @@ class MinimizeButton {
|
|
|
11527
11463
|
this.playerElement = playerElement;
|
|
11528
11464
|
this.button = document.createElement("button");
|
|
11529
11465
|
this.button.className = "sf-player__minimize-button";
|
|
11530
|
-
this.button.innerHTML =
|
|
11531
|
-
<svg width="20" height="20" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
11532
|
-
<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"></path>
|
|
11533
|
-
</svg>
|
|
11534
|
-
`;
|
|
11466
|
+
this.button.innerHTML = createCloseIcon(20);
|
|
11535
11467
|
this.button.addEventListener("click", this.handleClick.bind(this));
|
|
11536
11468
|
this.playerElement.appendChild(this.button);
|
|
11537
11469
|
this.updateVisibility(getSaltfishStore().isMinimized);
|
|
@@ -11551,18 +11483,10 @@ class MinimizeButton {
|
|
|
11551
11483
|
}
|
|
11552
11484
|
}
|
|
11553
11485
|
minimize() {
|
|
11554
|
-
this.button.innerHTML =
|
|
11555
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
11556
|
-
<path d="M12 5v14M5 12h14" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
11557
|
-
</svg>
|
|
11558
|
-
`;
|
|
11486
|
+
this.button.innerHTML = ICON_PLUS;
|
|
11559
11487
|
}
|
|
11560
11488
|
maximize() {
|
|
11561
|
-
this.button.innerHTML =
|
|
11562
|
-
<svg width="20" height="20" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
11563
|
-
<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"></path>
|
|
11564
|
-
</svg>
|
|
11565
|
-
`;
|
|
11489
|
+
this.button.innerHTML = createCloseIcon(20);
|
|
11566
11490
|
}
|
|
11567
11491
|
updateVisibility(isMinimized) {
|
|
11568
11492
|
if (isMinimized) {
|
|
@@ -11588,11 +11512,7 @@ class PlayPauseButton {
|
|
|
11588
11512
|
createButton() {
|
|
11589
11513
|
this.playButton = document.createElement("button");
|
|
11590
11514
|
this.playButton.className = "sf-controls-container__play-button";
|
|
11591
|
-
this.playButton.innerHTML =
|
|
11592
|
-
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
11593
|
-
<path d="M8 5v14l11-7z" fill="currentColor"/>
|
|
11594
|
-
</svg>
|
|
11595
|
-
`;
|
|
11515
|
+
this.playButton.innerHTML = ICON_PLAY;
|
|
11596
11516
|
this.playButton.addEventListener("click", this.handlePlayClick.bind(this));
|
|
11597
11517
|
this.container.appendChild(this.playButton);
|
|
11598
11518
|
}
|
|
@@ -11644,11 +11564,7 @@ class ExitButton {
|
|
|
11644
11564
|
this.playerElement = playerElement;
|
|
11645
11565
|
this.button = document.createElement("button");
|
|
11646
11566
|
this.button.className = "sf-player__exit-button";
|
|
11647
|
-
this.button.innerHTML =
|
|
11648
|
-
<svg width="18" height="18" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
11649
|
-
<path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"></path>
|
|
11650
|
-
</svg>
|
|
11651
|
-
`;
|
|
11567
|
+
this.button.innerHTML = ICON_CLOSE;
|
|
11652
11568
|
this.button.addEventListener("click", this.handleClick.bind(this));
|
|
11653
11569
|
this.playerElement.appendChild(this.button);
|
|
11654
11570
|
this.updateVisibility(getSaltfishStore().isMinimized);
|
|
@@ -11790,34 +11706,7 @@ class LoadingSpinner {
|
|
|
11790
11706
|
this.spinnerElement.className = `${CSS_CLASSES.LOADING_SPINNER}`;
|
|
11791
11707
|
this.spinnerElement.innerHTML = `
|
|
11792
11708
|
<div class="sf-loading-spinner__content">
|
|
11793
|
-
<div class="sf-loading-spinner__icon">
|
|
11794
|
-
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
11795
|
-
<!-- Static Saltfish logo in center -->
|
|
11796
|
-
<g transform="translate(10, 10) scale(0.656)">
|
|
11797
|
-
<g clip-path="url(#saltfish-clip)">
|
|
11798
|
-
<path d="M61.0002 30.1906C61.0002 46.8644 47.4834 60.3812 30.8097 60.3812C14.136 60.3812 27.1659 46.8644 27.1659 30.1906C27.1659 13.5168 14.136 0 30.8097 0C47.4834 0 61.0002 13.5168 61.0002 30.1906Z" fill="black" fill-opacity="0.9"/>
|
|
11799
|
-
<path d="M24.13 29.8618C24.13 40.3565 15.6978 48.8642 5.29602 48.8642C-5.10576 48.8642 3.02294 40.3565 3.02294 29.8618C3.02294 19.3671 -5.10576 10.8594 5.29602 10.8594C15.6978 10.8594 24.13 19.3671 24.13 29.8618Z" fill="black" fill-opacity="0.9"/>
|
|
11800
|
-
</g>
|
|
11801
|
-
<defs>
|
|
11802
|
-
<clipPath id="saltfish-clip">
|
|
11803
|
-
<rect width="61" height="61" fill="white"/>
|
|
11804
|
-
</clipPath>
|
|
11805
|
-
</defs>
|
|
11806
|
-
</g>
|
|
11807
|
-
|
|
11808
|
-
<!-- Animated circular ring around logo -->
|
|
11809
|
-
<circle cx="30" cy="30" r="28"
|
|
11810
|
-
stroke="black" stroke-width="2"
|
|
11811
|
-
fill="none" stroke-linecap="round"
|
|
11812
|
-
stroke-dasharray="8 6" stroke-opacity="0.3">
|
|
11813
|
-
<animateTransform attributeName="transform"
|
|
11814
|
-
type="rotate"
|
|
11815
|
-
values="0 30 30;360 30 30"
|
|
11816
|
-
dur="2s"
|
|
11817
|
-
repeatCount="indefinite"/>
|
|
11818
|
-
</circle>
|
|
11819
|
-
</svg>
|
|
11820
|
-
</div>
|
|
11709
|
+
<div class="sf-loading-spinner__icon">${ICON_LOADING_SPINNER}</div>
|
|
11821
11710
|
<div class="sf-loading-spinner__text">Loading playlist...</div>
|
|
11822
11711
|
</div>
|
|
11823
11712
|
`;
|
|
@@ -12743,7 +12632,7 @@ const SaltfishPlayer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
|
|
|
12743
12632
|
__proto__: null,
|
|
12744
12633
|
SaltfishPlayer
|
|
12745
12634
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
12746
|
-
const version = "0.3.
|
|
12635
|
+
const version = "0.3.75";
|
|
12747
12636
|
const packageJson = {
|
|
12748
12637
|
version
|
|
12749
12638
|
};
|