funuicss 3.7.9 → 3.7.10
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/package.json +1 -1
- package/ui/theme/theme.d.ts +1 -1
- package/ui/theme/theme.js +98 -70
- package/ui/video/Video.d.ts +2 -1
- package/ui/video/Video.js +238 -65
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "3.7.
|
|
2
|
+
"version": "3.7.10",
|
|
3
3
|
"name": "funuicss",
|
|
4
4
|
"description": "React and Next.js component UI Library for creating Easy and good looking websites with fewer lines of code. Elevate your web development experience with our cutting-edge React/Next.js component UI Library. Craft stunning websites effortlessly, boasting both seamless functionality and aesthetic appeal—all achieved with minimal lines of code. Unleash the power of simplicity and style in your projects!",
|
|
5
5
|
"main": "index.js",
|
package/ui/theme/theme.d.ts
CHANGED
package/ui/theme/theme.js
CHANGED
|
@@ -117,7 +117,7 @@ var validateOriginAccess = function (projectId) { return __awaiter(void 0, void
|
|
|
117
117
|
switch (_a.label) {
|
|
118
118
|
case 0:
|
|
119
119
|
if (!projectId) {
|
|
120
|
-
console.error('❌ No project ID provided');
|
|
120
|
+
console.error('❌ No project ID provided for origin validation');
|
|
121
121
|
return [2 /*return*/, false];
|
|
122
122
|
}
|
|
123
123
|
currentOrigin = getCurrentOrigin();
|
|
@@ -179,7 +179,7 @@ var loadLocalTheme = function () { return __awaiter(void 0, void 0, void 0, func
|
|
|
179
179
|
case 3: return [3 /*break*/, 5];
|
|
180
180
|
case 4:
|
|
181
181
|
error_2 = _a.sent();
|
|
182
|
-
console.log('No local theme file found');
|
|
182
|
+
console.log('ℹ️ No local theme file found');
|
|
183
183
|
return [3 /*break*/, 5];
|
|
184
184
|
case 5: return [2 /*return*/, null];
|
|
185
185
|
}
|
|
@@ -193,28 +193,34 @@ var loadThemeFromCDN = function (projectId) { return __awaiter(void 0, void 0, v
|
|
|
193
193
|
return __generator(this, function (_a) {
|
|
194
194
|
switch (_a.label) {
|
|
195
195
|
case 0:
|
|
196
|
-
|
|
196
|
+
if (!projectId) {
|
|
197
|
+
console.error('❌ No project ID provided for CDN loading');
|
|
198
|
+
return [2 /*return*/, null];
|
|
199
|
+
}
|
|
200
|
+
_a.label = 1;
|
|
201
|
+
case 1:
|
|
202
|
+
_a.trys.push([1, 6, , 7]);
|
|
197
203
|
publicUrl = "https://firebasestorage.googleapis.com/v0/b/funui-4bcd1.firebasestorage.app/o/themes%2F".concat(projectId, ".json?alt=media");
|
|
198
204
|
return [4 /*yield*/, fetch(publicUrl, {
|
|
199
205
|
cache: 'no-cache',
|
|
200
206
|
})];
|
|
201
|
-
case
|
|
207
|
+
case 2:
|
|
202
208
|
response = _a.sent();
|
|
203
|
-
if (!response.ok) return [3 /*break*/,
|
|
209
|
+
if (!response.ok) return [3 /*break*/, 4];
|
|
204
210
|
return [4 /*yield*/, response.json()];
|
|
205
|
-
case
|
|
211
|
+
case 3:
|
|
206
212
|
data = _a.sent();
|
|
207
213
|
console.log('✅ Loaded theme from Firebase Storage CDN');
|
|
208
214
|
return [2 /*return*/, data];
|
|
209
|
-
case
|
|
210
|
-
console.error('Firebase Storage fetch failed:', response.status, response.statusText);
|
|
211
|
-
_a.label =
|
|
212
|
-
case
|
|
213
|
-
case
|
|
215
|
+
case 4:
|
|
216
|
+
console.error('❌ Firebase Storage fetch failed:', response.status, response.statusText);
|
|
217
|
+
_a.label = 5;
|
|
218
|
+
case 5: return [3 /*break*/, 7];
|
|
219
|
+
case 6:
|
|
214
220
|
error_3 = _a.sent();
|
|
215
|
-
console.error('Error loading from Firebase Storage:', error_3);
|
|
216
|
-
return [3 /*break*/,
|
|
217
|
-
case
|
|
221
|
+
console.error('❌ Error loading from Firebase Storage:', error_3);
|
|
222
|
+
return [3 /*break*/, 7];
|
|
223
|
+
case 7: return [2 /*return*/, null];
|
|
218
224
|
}
|
|
219
225
|
});
|
|
220
226
|
}); };
|
|
@@ -306,99 +312,124 @@ var ThemeProvider = function (_a) {
|
|
|
306
312
|
});
|
|
307
313
|
}
|
|
308
314
|
}, [theme]);
|
|
309
|
-
/* ----------------------
|
|
315
|
+
/* ---------------------- Theme Loading Logic ----------------------- */
|
|
310
316
|
(0, react_1.useEffect)(function () {
|
|
311
317
|
if (typeof window === 'undefined') {
|
|
312
318
|
setIsLoading(false);
|
|
313
319
|
setIsInitialLoad(false);
|
|
314
320
|
return;
|
|
315
321
|
}
|
|
316
|
-
if (!projectId) {
|
|
317
|
-
console.error('❌ ThemeProvider: No projectId provided');
|
|
318
|
-
setError('Project ID is required');
|
|
319
|
-
setIsLoading(false);
|
|
320
|
-
setIsInitialLoad(false);
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
322
|
var root = document.documentElement;
|
|
324
323
|
var pollTimer;
|
|
325
|
-
var
|
|
326
|
-
var
|
|
324
|
+
var loadTheme = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
325
|
+
var finalTheme, finalVersion, localTheme, localVersion, hasAccess, cdnTheme, cdnVersion, err_1;
|
|
327
326
|
return __generator(this, function (_a) {
|
|
328
327
|
switch (_a.label) {
|
|
329
328
|
case 0:
|
|
330
|
-
_a.trys.push([0,
|
|
331
|
-
console.log('🔄 Starting theme
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
hasAccess = _a.sent();
|
|
335
|
-
if (!hasAccess) {
|
|
336
|
-
setError('Access denied: This domain is not authorized to use this theme');
|
|
337
|
-
setIsLoading(false);
|
|
338
|
-
setIsInitialLoad(false);
|
|
339
|
-
return [2 /*return*/];
|
|
340
|
-
}
|
|
329
|
+
_a.trys.push([0, 8, 9, 10]);
|
|
330
|
+
console.log('🔄 Starting theme loading process...');
|
|
331
|
+
finalTheme = null;
|
|
332
|
+
finalVersion = null;
|
|
341
333
|
return [4 /*yield*/, loadLocalTheme()];
|
|
342
|
-
case
|
|
334
|
+
case 1:
|
|
343
335
|
localTheme = _a.sent();
|
|
344
336
|
localVersion = (localTheme === null || localTheme === void 0 ? void 0 : localTheme.version) || 0;
|
|
337
|
+
if (!projectId) return [3 /*break*/, 6];
|
|
338
|
+
console.log('🔑 Project ID provided, attempting CDN load with origin validation...');
|
|
339
|
+
return [4 /*yield*/, validateOriginAccess(projectId)];
|
|
340
|
+
case 2:
|
|
341
|
+
hasAccess = _a.sent();
|
|
342
|
+
if (!hasAccess) return [3 /*break*/, 4];
|
|
345
343
|
return [4 /*yield*/, loadThemeFromCDN(projectId)];
|
|
346
344
|
case 3:
|
|
347
345
|
cdnTheme = _a.sent();
|
|
348
346
|
cdnVersion = (cdnTheme === null || cdnTheme === void 0 ? void 0 : cdnTheme.version) || 0;
|
|
349
347
|
if (cdnTheme) {
|
|
350
|
-
//
|
|
348
|
+
// CDN theme available - use it
|
|
349
|
+
finalTheme = cdnTheme;
|
|
350
|
+
finalVersion = cdnVersion;
|
|
351
351
|
if (cdnVersion !== localVersion) {
|
|
352
352
|
console.log("\uD83D\uDD04 Version mismatch: Local(".concat(localVersion, ") vs CDN(").concat(cdnVersion, ")"));
|
|
353
353
|
console.log('ℹ️ Using CDN version. Please update your local funui.json file manually.');
|
|
354
354
|
}
|
|
355
|
-
|
|
356
|
-
if (!currentVersion || cdnVersion !== currentVersion) {
|
|
357
|
-
applyThemeData(cdnTheme, root);
|
|
358
|
-
setCurrentVersion(cdnVersion);
|
|
359
|
-
console.log('✅ Theme loaded from CDN');
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
console.log('✓ Theme up to date');
|
|
363
|
-
}
|
|
364
|
-
setError(null);
|
|
355
|
+
console.log('✅ Theme loaded from CDN');
|
|
365
356
|
}
|
|
366
357
|
else if (localTheme) {
|
|
367
|
-
// CDN not available but we have local
|
|
368
|
-
console.log('⚠️
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
setError(null);
|
|
358
|
+
// CDN not available but we have local theme
|
|
359
|
+
console.log('⚠️ CDN unavailable, using local theme');
|
|
360
|
+
finalTheme = localTheme;
|
|
361
|
+
finalVersion = localVersion;
|
|
372
362
|
}
|
|
373
363
|
else {
|
|
374
364
|
// No theme available anywhere
|
|
375
|
-
console.warn('⚠️ No theme found');
|
|
365
|
+
console.warn('⚠️ No theme found (CDN unavailable and no local theme)');
|
|
376
366
|
setError('Theme not found');
|
|
377
367
|
}
|
|
378
|
-
return [3 /*break*/,
|
|
368
|
+
return [3 /*break*/, 5];
|
|
379
369
|
case 4:
|
|
370
|
+
// Origin validation failed
|
|
371
|
+
if (localTheme) {
|
|
372
|
+
console.log('⚠️ Origin validation failed, using local theme');
|
|
373
|
+
finalTheme = localTheme;
|
|
374
|
+
finalVersion = localVersion;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
console.error('❌ Origin validation failed and no local theme available');
|
|
378
|
+
setError('Access denied and no local theme available');
|
|
379
|
+
}
|
|
380
|
+
_a.label = 5;
|
|
381
|
+
case 5: return [3 /*break*/, 7];
|
|
382
|
+
case 6:
|
|
383
|
+
// No project ID provided - only use local theme
|
|
384
|
+
console.log('ℹ️ No project ID provided, using local theme only');
|
|
385
|
+
if (localTheme) {
|
|
386
|
+
finalTheme = localTheme;
|
|
387
|
+
finalVersion = localVersion;
|
|
388
|
+
console.log('✅ Theme loaded from local file');
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
391
|
+
console.log('ℹ️ No local theme file found - using base theme only');
|
|
392
|
+
// No error here - it's valid to use only base theme
|
|
393
|
+
}
|
|
394
|
+
_a.label = 7;
|
|
395
|
+
case 7:
|
|
396
|
+
// Apply the theme if we have one
|
|
397
|
+
if (finalTheme && (!currentVersion || finalVersion !== currentVersion)) {
|
|
398
|
+
applyThemeData(finalTheme, root);
|
|
399
|
+
setCurrentVersion(finalVersion);
|
|
400
|
+
setError(null);
|
|
401
|
+
}
|
|
402
|
+
else if (finalTheme) {
|
|
403
|
+
console.log('✓ Theme up to date');
|
|
404
|
+
}
|
|
405
|
+
return [3 /*break*/, 10];
|
|
406
|
+
case 8:
|
|
380
407
|
err_1 = _a.sent();
|
|
381
|
-
console.error('❌ Error
|
|
382
|
-
setError('Failed to
|
|
383
|
-
return [3 /*break*/,
|
|
384
|
-
case
|
|
408
|
+
console.error('❌ Error loading theme:', err_1);
|
|
409
|
+
setError('Failed to load theme');
|
|
410
|
+
return [3 /*break*/, 10];
|
|
411
|
+
case 9:
|
|
385
412
|
setIsLoading(false);
|
|
386
413
|
setIsInitialLoad(false);
|
|
387
414
|
return [7 /*endfinally*/];
|
|
388
|
-
case
|
|
415
|
+
case 10: return [2 /*return*/];
|
|
389
416
|
}
|
|
390
417
|
});
|
|
391
418
|
}); };
|
|
392
|
-
// Initial
|
|
393
|
-
|
|
394
|
-
//
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
419
|
+
// Initial load
|
|
420
|
+
loadTheme();
|
|
421
|
+
// Only poll for updates if we have a project ID
|
|
422
|
+
if (projectId) {
|
|
423
|
+
pollTimer = setInterval(function () {
|
|
424
|
+
loadTheme();
|
|
425
|
+
}, 5 * 60 * 1000);
|
|
426
|
+
}
|
|
398
427
|
return function () {
|
|
399
|
-
|
|
428
|
+
if (pollTimer) {
|
|
429
|
+
clearInterval(pollTimer);
|
|
430
|
+
}
|
|
400
431
|
};
|
|
401
|
-
}, [projectId, currentVersion]);
|
|
432
|
+
}, [projectId, currentVersion, theme]);
|
|
402
433
|
var applyThemeData = function (data, root) {
|
|
403
434
|
var _a;
|
|
404
435
|
var themeConfig = (_a = data.theme_config) !== null && _a !== void 0 ? _a : {};
|
|
@@ -531,9 +562,6 @@ var getAssetInfo = function (name) {
|
|
|
531
562
|
};
|
|
532
563
|
};
|
|
533
564
|
exports.getAssetInfo = getAssetInfo;
|
|
534
|
-
/* -------------------------------------------------------------------------- */
|
|
535
|
-
/* ASSETS HOOKS */
|
|
536
|
-
/* -------------------------------------------------------------------------- */
|
|
537
565
|
// Hook to access all assets
|
|
538
566
|
var useAssets = function () {
|
|
539
567
|
var projectData = (0, exports.useTheme)().projectData;
|
package/ui/video/Video.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ interface VideoProps {
|
|
|
43
43
|
rewindCss?: string;
|
|
44
44
|
forwardCss?: string;
|
|
45
45
|
buttonCss?: string;
|
|
46
|
+
variant?: string;
|
|
46
47
|
}
|
|
47
|
-
export default function Video({ src, poster, onDuration, onEnded, isPause, spacebarPlay, className, autoPlay, showControls, showPlayPause, showProgress, showVolume, showTime, showFullscreen, showDownload, showSeekButtons, playIcon, pauseIcon, fullscreenIcon, downloadIcon, volumeIcon, muteIcon, rewindIcon, forwardIcon, hideControlsDelay, loop, muted, seekAmount, funcss, containerCss, videoCss, controlsCss, progressCss, progressBarCss, timeCss, playCss, pauseCss, volumeCss, fullscreenCss, downloadCss, rewindCss, forwardCss, buttonCss, }: VideoProps): React.JSX.Element;
|
|
48
|
+
export default function Video({ src, poster, onDuration, onEnded, isPause, spacebarPlay, className, autoPlay, showControls, showPlayPause, showProgress, showVolume, showTime, showFullscreen, showDownload, showSeekButtons, playIcon, pauseIcon, fullscreenIcon, downloadIcon, volumeIcon, muteIcon, rewindIcon, forwardIcon, hideControlsDelay, loop, muted, seekAmount, funcss, containerCss, videoCss, controlsCss, progressCss, progressBarCss, timeCss, playCss, pauseCss, volumeCss, fullscreenCss, downloadCss, rewindCss, forwardCss, buttonCss, variant, ...rest }: VideoProps): React.JSX.Element;
|
|
48
49
|
export {};
|
package/ui/video/Video.js
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
'use client';
|
|
3
|
+
var __assign = (this && this.__assign) || function () {
|
|
4
|
+
__assign = Object.assign || function(t) {
|
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
6
|
+
s = arguments[i];
|
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
8
|
+
t[p] = s[p];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
return __assign.apply(this, arguments);
|
|
13
|
+
};
|
|
3
14
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
15
|
if (k2 === undefined) k2 = k;
|
|
5
16
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -69,6 +80,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
69
80
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
70
81
|
}
|
|
71
82
|
};
|
|
83
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
84
|
+
var t = {};
|
|
85
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
86
|
+
t[p] = s[p];
|
|
87
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
88
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
89
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
90
|
+
t[p[i]] = s[p[i]];
|
|
91
|
+
}
|
|
92
|
+
return t;
|
|
93
|
+
};
|
|
72
94
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
73
95
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
74
96
|
};
|
|
@@ -85,31 +107,180 @@ var Tip_1 = __importDefault(require("../tooltip/Tip"));
|
|
|
85
107
|
var videoFunctions_1 = require("./videoFunctions");
|
|
86
108
|
var videoShortcuts_1 = require("./videoShortcuts");
|
|
87
109
|
var getDynamicIcon_1 = require("../../utils/getDynamicIcon");
|
|
110
|
+
// Configuration hook
|
|
111
|
+
var useComponentConfiguration = function (componentName, variant) {
|
|
112
|
+
if (variant === void 0) { variant = ''; }
|
|
113
|
+
// In a real implementation, this would come from a theme context or configuration file
|
|
114
|
+
var getComponentConfig = function () {
|
|
115
|
+
var baseConfig = {
|
|
116
|
+
Video: {
|
|
117
|
+
default: {
|
|
118
|
+
showControls: true,
|
|
119
|
+
showPlayPause: true,
|
|
120
|
+
showProgress: true,
|
|
121
|
+
showVolume: true,
|
|
122
|
+
showTime: true,
|
|
123
|
+
showFullscreen: true,
|
|
124
|
+
showDownload: true,
|
|
125
|
+
showSeekButtons: true,
|
|
126
|
+
spacebarPlay: true,
|
|
127
|
+
autoPlay: false,
|
|
128
|
+
loop: false,
|
|
129
|
+
muted: false,
|
|
130
|
+
seekAmount: 10,
|
|
131
|
+
hideControlsDelay: 3000,
|
|
132
|
+
funcss: '',
|
|
133
|
+
containerCss: '',
|
|
134
|
+
videoCss: '',
|
|
135
|
+
controlsCss: '',
|
|
136
|
+
progressCss: '',
|
|
137
|
+
progressBarCss: '',
|
|
138
|
+
timeCss: '',
|
|
139
|
+
playCss: '',
|
|
140
|
+
pauseCss: '',
|
|
141
|
+
volumeCss: '',
|
|
142
|
+
fullscreenCss: '',
|
|
143
|
+
downloadCss: '',
|
|
144
|
+
rewindCss: '',
|
|
145
|
+
forwardCss: '',
|
|
146
|
+
buttonCss: '',
|
|
147
|
+
},
|
|
148
|
+
minimal: {
|
|
149
|
+
showControls: true,
|
|
150
|
+
showPlayPause: true,
|
|
151
|
+
showProgress: true,
|
|
152
|
+
showVolume: false,
|
|
153
|
+
showTime: false,
|
|
154
|
+
showFullscreen: false,
|
|
155
|
+
showDownload: false,
|
|
156
|
+
showSeekButtons: false,
|
|
157
|
+
controlsCss: 'minimal-controls',
|
|
158
|
+
buttonCss: 'minimal-btn',
|
|
159
|
+
},
|
|
160
|
+
embedded: {
|
|
161
|
+
showControls: false,
|
|
162
|
+
autoPlay: true,
|
|
163
|
+
muted: true,
|
|
164
|
+
loop: true,
|
|
165
|
+
containerCss: 'embedded-video',
|
|
166
|
+
},
|
|
167
|
+
fullFeatured: {
|
|
168
|
+
showControls: true,
|
|
169
|
+
showPlayPause: true,
|
|
170
|
+
showProgress: true,
|
|
171
|
+
showVolume: true,
|
|
172
|
+
showTime: true,
|
|
173
|
+
showFullscreen: true,
|
|
174
|
+
showDownload: true,
|
|
175
|
+
showSeekButtons: true,
|
|
176
|
+
controlsCss: 'full-featured-controls',
|
|
177
|
+
buttonCss: 'featured-btn',
|
|
178
|
+
},
|
|
179
|
+
theater: {
|
|
180
|
+
showControls: true,
|
|
181
|
+
containerCss: 'theater-mode',
|
|
182
|
+
videoCss: 'theater-video',
|
|
183
|
+
controlsCss: 'theater-controls',
|
|
184
|
+
fullscreenCss: 'theater-fullscreen',
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
return baseConfig[componentName] || {};
|
|
189
|
+
};
|
|
190
|
+
var mergeWithLocal = function (localProps) {
|
|
191
|
+
var config = getComponentConfig();
|
|
192
|
+
var variantConfig = variant && config[variant] ? config[variant] : {};
|
|
193
|
+
var defaultConfig = config.default || {};
|
|
194
|
+
// Merge: default config < variant config < local props (local props have highest priority)
|
|
195
|
+
var mergedProps = __assign(__assign(__assign({}, defaultConfig), variantConfig), localProps);
|
|
196
|
+
return {
|
|
197
|
+
props: mergedProps,
|
|
198
|
+
variantConfig: variantConfig,
|
|
199
|
+
defaultConfig: defaultConfig,
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
return {
|
|
203
|
+
mergeWithLocal: mergeWithLocal,
|
|
204
|
+
getComponentConfig: getComponentConfig,
|
|
205
|
+
};
|
|
206
|
+
};
|
|
88
207
|
function Video(_a) {
|
|
89
208
|
var _this = this;
|
|
90
|
-
var
|
|
209
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
|
|
210
|
+
var src = _a.src, poster = _a.poster, onDuration = _a.onDuration, onEnded = _a.onEnded, isPause = _a.isPause, spacebarPlay = _a.spacebarPlay, _7 = _a.className, className = _7 === void 0 ? '' : _7, autoPlay = _a.autoPlay, showControls = _a.showControls, showPlayPause = _a.showPlayPause, showProgress = _a.showProgress, showVolume = _a.showVolume, showTime = _a.showTime, showFullscreen = _a.showFullscreen, showDownload = _a.showDownload, showSeekButtons = _a.showSeekButtons, playIcon = _a.playIcon, pauseIcon = _a.pauseIcon, fullscreenIcon = _a.fullscreenIcon, downloadIcon = _a.downloadIcon, volumeIcon = _a.volumeIcon, muteIcon = _a.muteIcon, rewindIcon = _a.rewindIcon, forwardIcon = _a.forwardIcon, hideControlsDelay = _a.hideControlsDelay, loop = _a.loop, muted = _a.muted, seekAmount = _a.seekAmount, _8 = _a.funcss, funcss = _8 === void 0 ? '' : _8, _9 = _a.containerCss, containerCss = _9 === void 0 ? '' : _9, _10 = _a.videoCss, videoCss = _10 === void 0 ? '' : _10, _11 = _a.controlsCss, controlsCss = _11 === void 0 ? '' : _11, _12 = _a.progressCss, progressCss = _12 === void 0 ? '' : _12, _13 = _a.progressBarCss, progressBarCss = _13 === void 0 ? '' : _13, _14 = _a.timeCss, timeCss = _14 === void 0 ? '' : _14, _15 = _a.playCss, playCss = _15 === void 0 ? '' : _15, _16 = _a.pauseCss, pauseCss = _16 === void 0 ? '' : _16, _17 = _a.volumeCss, volumeCss = _17 === void 0 ? '' : _17, _18 = _a.fullscreenCss, fullscreenCss = _18 === void 0 ? '' : _18, _19 = _a.downloadCss, downloadCss = _19 === void 0 ? '' : _19, _20 = _a.rewindCss, rewindCss = _20 === void 0 ? '' : _20, _21 = _a.forwardCss, forwardCss = _21 === void 0 ? '' : _21, _22 = _a.buttonCss, buttonCss = _22 === void 0 ? '' : _22, _23 = _a.variant, variant = _23 === void 0 ? '' : _23, rest = __rest(_a, ["src", "poster", "onDuration", "onEnded", "isPause", "spacebarPlay", "className", "autoPlay", "showControls", "showPlayPause", "showProgress", "showVolume", "showTime", "showFullscreen", "showDownload", "showSeekButtons", "playIcon", "pauseIcon", "fullscreenIcon", "downloadIcon", "volumeIcon", "muteIcon", "rewindIcon", "forwardIcon", "hideControlsDelay", "loop", "muted", "seekAmount", "funcss", "containerCss", "videoCss", "controlsCss", "progressCss", "progressBarCss", "timeCss", "playCss", "pauseCss", "volumeCss", "fullscreenCss", "downloadCss", "rewindCss", "forwardCss", "buttonCss", "variant"]);
|
|
211
|
+
var mergeWithLocal = useComponentConfiguration('Video', variant).mergeWithLocal;
|
|
212
|
+
// Create local props object - these will override config props
|
|
213
|
+
var localProps = __assign({ src: src, poster: poster, onDuration: onDuration, onEnded: onEnded, isPause: isPause, spacebarPlay: spacebarPlay, className: className, autoPlay: autoPlay, showControls: showControls, showPlayPause: showPlayPause, showProgress: showProgress, showVolume: showVolume, showTime: showTime, showFullscreen: showFullscreen, showDownload: showDownload, showSeekButtons: showSeekButtons, playIcon: playIcon, pauseIcon: pauseIcon, fullscreenIcon: fullscreenIcon, downloadIcon: downloadIcon, volumeIcon: volumeIcon, muteIcon: muteIcon, rewindIcon: rewindIcon, forwardIcon: forwardIcon, hideControlsDelay: hideControlsDelay, loop: loop, muted: muted, seekAmount: seekAmount, funcss: funcss, containerCss: containerCss, videoCss: videoCss, controlsCss: controlsCss, progressCss: progressCss, progressBarCss: progressBarCss, timeCss: timeCss, playCss: playCss, pauseCss: pauseCss, volumeCss: volumeCss, fullscreenCss: fullscreenCss, downloadCss: downloadCss, rewindCss: rewindCss, forwardCss: forwardCss, buttonCss: buttonCss }, rest);
|
|
214
|
+
// Merge with config - LOCAL PROPS OVERRIDE CONFIG
|
|
215
|
+
var mergedProps = mergeWithLocal(localProps).props;
|
|
216
|
+
// Extract final values - local props take precedence
|
|
217
|
+
var final = {
|
|
218
|
+
src: mergedProps.src,
|
|
219
|
+
poster: mergedProps.poster,
|
|
220
|
+
onDuration: mergedProps.onDuration,
|
|
221
|
+
onEnded: mergedProps.onEnded,
|
|
222
|
+
isPause: mergedProps.isPause,
|
|
223
|
+
spacebarPlay: (_b = mergedProps.spacebarPlay) !== null && _b !== void 0 ? _b : true,
|
|
224
|
+
className: (_c = mergedProps.className) !== null && _c !== void 0 ? _c : '',
|
|
225
|
+
autoPlay: (_d = mergedProps.autoPlay) !== null && _d !== void 0 ? _d : false,
|
|
226
|
+
showControls: (_e = mergedProps.showControls) !== null && _e !== void 0 ? _e : true,
|
|
227
|
+
showPlayPause: (_f = mergedProps.showPlayPause) !== null && _f !== void 0 ? _f : true,
|
|
228
|
+
showProgress: (_g = mergedProps.showProgress) !== null && _g !== void 0 ? _g : true,
|
|
229
|
+
showVolume: (_h = mergedProps.showVolume) !== null && _h !== void 0 ? _h : true,
|
|
230
|
+
showTime: (_j = mergedProps.showTime) !== null && _j !== void 0 ? _j : true,
|
|
231
|
+
showFullscreen: (_k = mergedProps.showFullscreen) !== null && _k !== void 0 ? _k : true,
|
|
232
|
+
showDownload: (_l = mergedProps.showDownload) !== null && _l !== void 0 ? _l : true,
|
|
233
|
+
showSeekButtons: (_m = mergedProps.showSeekButtons) !== null && _m !== void 0 ? _m : true,
|
|
234
|
+
playIcon: mergedProps.playIcon,
|
|
235
|
+
pauseIcon: mergedProps.pauseIcon,
|
|
236
|
+
fullscreenIcon: mergedProps.fullscreenIcon,
|
|
237
|
+
downloadIcon: mergedProps.downloadIcon,
|
|
238
|
+
volumeIcon: mergedProps.volumeIcon,
|
|
239
|
+
muteIcon: mergedProps.muteIcon,
|
|
240
|
+
rewindIcon: mergedProps.rewindIcon,
|
|
241
|
+
forwardIcon: mergedProps.forwardIcon,
|
|
242
|
+
hideControlsDelay: (_o = mergedProps.hideControlsDelay) !== null && _o !== void 0 ? _o : 3000,
|
|
243
|
+
loop: (_p = mergedProps.loop) !== null && _p !== void 0 ? _p : false,
|
|
244
|
+
muted: (_q = mergedProps.muted) !== null && _q !== void 0 ? _q : false,
|
|
245
|
+
seekAmount: (_r = mergedProps.seekAmount) !== null && _r !== void 0 ? _r : 10,
|
|
246
|
+
funcss: (_s = mergedProps.funcss) !== null && _s !== void 0 ? _s : '',
|
|
247
|
+
containerCss: (_t = mergedProps.containerCss) !== null && _t !== void 0 ? _t : '',
|
|
248
|
+
videoCss: (_u = mergedProps.videoCss) !== null && _u !== void 0 ? _u : '',
|
|
249
|
+
controlsCss: (_v = mergedProps.controlsCss) !== null && _v !== void 0 ? _v : '',
|
|
250
|
+
progressCss: (_w = mergedProps.progressCss) !== null && _w !== void 0 ? _w : '',
|
|
251
|
+
progressBarCss: (_x = mergedProps.progressBarCss) !== null && _x !== void 0 ? _x : '',
|
|
252
|
+
timeCss: (_y = mergedProps.timeCss) !== null && _y !== void 0 ? _y : '',
|
|
253
|
+
playCss: (_z = mergedProps.playCss) !== null && _z !== void 0 ? _z : '',
|
|
254
|
+
pauseCss: (_0 = mergedProps.pauseCss) !== null && _0 !== void 0 ? _0 : '',
|
|
255
|
+
volumeCss: (_1 = mergedProps.volumeCss) !== null && _1 !== void 0 ? _1 : '',
|
|
256
|
+
fullscreenCss: (_2 = mergedProps.fullscreenCss) !== null && _2 !== void 0 ? _2 : '',
|
|
257
|
+
downloadCss: (_3 = mergedProps.downloadCss) !== null && _3 !== void 0 ? _3 : '',
|
|
258
|
+
rewindCss: (_4 = mergedProps.rewindCss) !== null && _4 !== void 0 ? _4 : '',
|
|
259
|
+
forwardCss: (_5 = mergedProps.forwardCss) !== null && _5 !== void 0 ? _5 : '',
|
|
260
|
+
buttonCss: (_6 = mergedProps.buttonCss) !== null && _6 !== void 0 ? _6 : '',
|
|
261
|
+
};
|
|
91
262
|
var videoRef = (0, react_1.useRef)(null);
|
|
92
263
|
var containerRef = (0, react_1.useRef)(null);
|
|
93
264
|
var animationFrameRef = (0, react_1.useRef)(null);
|
|
94
|
-
var
|
|
95
|
-
var
|
|
96
|
-
var
|
|
97
|
-
var
|
|
98
|
-
var
|
|
99
|
-
var
|
|
100
|
-
var
|
|
101
|
-
var
|
|
102
|
-
var
|
|
103
|
-
var
|
|
265
|
+
var _24 = (0, react_1.useState)(false), isPlaying = _24[0], setIsPlaying = _24[1];
|
|
266
|
+
var _25 = (0, react_1.useState)(0), currentTime = _25[0], setCurrentTime = _25[1];
|
|
267
|
+
var _26 = (0, react_1.useState)(0), duration = _26[0], setDuration = _26[1];
|
|
268
|
+
var _27 = (0, react_1.useState)(final.muted ? 0 : 1), volume = _27[0], setVolume = _27[1];
|
|
269
|
+
var _28 = (0, react_1.useState)(final.muted), isMuted = _28[0], setIsMuted = _28[1];
|
|
270
|
+
var _29 = (0, react_1.useState)(false), isFullScreen = _29[0], setIsFullScreen = _29[1];
|
|
271
|
+
var _30 = (0, react_1.useState)(false), showControlsState = _30[0], setShowControlsState = _30[1];
|
|
272
|
+
var _31 = (0, react_1.useState)(false), hasStarted = _31[0], setHasStarted = _31[1];
|
|
273
|
+
var _32 = (0, react_1.useState)(false), isHoveringProgress = _32[0], setIsHoveringProgress = _32[1];
|
|
274
|
+
var _33 = (0, react_1.useState)(false), isHoveringVolume = _33[0], setIsHoveringVolume = _33[1];
|
|
104
275
|
// Dynamic icon states
|
|
105
|
-
var
|
|
106
|
-
var
|
|
107
|
-
var
|
|
108
|
-
var
|
|
109
|
-
var
|
|
110
|
-
var
|
|
111
|
-
var
|
|
112
|
-
var
|
|
276
|
+
var _34 = (0, react_1.useState)(null), dynamicPlayIcon = _34[0], setDynamicPlayIcon = _34[1];
|
|
277
|
+
var _35 = (0, react_1.useState)(null), dynamicPauseIcon = _35[0], setDynamicPauseIcon = _35[1];
|
|
278
|
+
var _36 = (0, react_1.useState)(null), dynamicFullscreenIcon = _36[0], setDynamicFullscreenIcon = _36[1];
|
|
279
|
+
var _37 = (0, react_1.useState)(null), dynamicDownloadIcon = _37[0], setDynamicDownloadIcon = _37[1];
|
|
280
|
+
var _38 = (0, react_1.useState)(null), dynamicVolumeIcon = _38[0], setDynamicVolumeIcon = _38[1];
|
|
281
|
+
var _39 = (0, react_1.useState)(null), dynamicMuteIcon = _39[0], setDynamicMuteIcon = _39[1];
|
|
282
|
+
var _40 = (0, react_1.useState)(null), dynamicRewindIcon = _40[0], setDynamicRewindIcon = _40[1];
|
|
283
|
+
var _41 = (0, react_1.useState)(null), dynamicForwardIcon = _41[0], setDynamicForwardIcon = _41[1];
|
|
113
284
|
// Helper function to load dynamic icons
|
|
114
285
|
var loadDynamicIcon = function (iconProp, setter, defaultIcon) { return __awaiter(_this, void 0, void 0, function () {
|
|
115
286
|
var iconNode;
|
|
@@ -140,14 +311,14 @@ function Video(_a) {
|
|
|
140
311
|
return __generator(this, function (_a) {
|
|
141
312
|
switch (_a.label) {
|
|
142
313
|
case 0: return [4 /*yield*/, Promise.all([
|
|
143
|
-
loadDynamicIcon(playIcon, setDynamicPlayIcon, react_1.default.createElement(pi_1.PiPlay, { size: 16 })),
|
|
144
|
-
loadDynamicIcon(pauseIcon, setDynamicPauseIcon, react_1.default.createElement(pi_1.PiPause, { size: 16 })),
|
|
145
|
-
loadDynamicIcon(fullscreenIcon, setDynamicFullscreenIcon, react_1.default.createElement(pi_1.PiCornersOut, { size: 16 })),
|
|
146
|
-
loadDynamicIcon(downloadIcon, setDynamicDownloadIcon, react_1.default.createElement(tfi_1.TfiDownload, { size: 14 })),
|
|
147
|
-
loadDynamicIcon(volumeIcon, setDynamicVolumeIcon, react_1.default.createElement(pi_1.PiSpeakerHigh, { size: 16 })),
|
|
148
|
-
loadDynamicIcon(muteIcon, setDynamicMuteIcon, react_1.default.createElement(pi_1.PiSpeakerSlash, { size: 16 })),
|
|
149
|
-
loadDynamicIcon(rewindIcon, setDynamicRewindIcon, react_1.default.createElement(tfi_1.TfiControlBackward, { size: 14 })),
|
|
150
|
-
loadDynamicIcon(forwardIcon, setDynamicForwardIcon, react_1.default.createElement(tfi_1.TfiControlForward, { size: 14 })),
|
|
314
|
+
loadDynamicIcon(final.playIcon, setDynamicPlayIcon, react_1.default.createElement(pi_1.PiPlay, { size: 16 })),
|
|
315
|
+
loadDynamicIcon(final.pauseIcon, setDynamicPauseIcon, react_1.default.createElement(pi_1.PiPause, { size: 16 })),
|
|
316
|
+
loadDynamicIcon(final.fullscreenIcon, setDynamicFullscreenIcon, react_1.default.createElement(pi_1.PiCornersOut, { size: 16 })),
|
|
317
|
+
loadDynamicIcon(final.downloadIcon, setDynamicDownloadIcon, react_1.default.createElement(tfi_1.TfiDownload, { size: 14 })),
|
|
318
|
+
loadDynamicIcon(final.volumeIcon, setDynamicVolumeIcon, react_1.default.createElement(pi_1.PiSpeakerHigh, { size: 16 })),
|
|
319
|
+
loadDynamicIcon(final.muteIcon, setDynamicMuteIcon, react_1.default.createElement(pi_1.PiSpeakerSlash, { size: 16 })),
|
|
320
|
+
loadDynamicIcon(final.rewindIcon, setDynamicRewindIcon, react_1.default.createElement(tfi_1.TfiControlBackward, { size: 14 })),
|
|
321
|
+
loadDynamicIcon(final.forwardIcon, setDynamicForwardIcon, react_1.default.createElement(tfi_1.TfiControlForward, { size: 14 })),
|
|
151
322
|
])];
|
|
152
323
|
case 1:
|
|
153
324
|
_a.sent();
|
|
@@ -157,8 +328,8 @@ function Video(_a) {
|
|
|
157
328
|
}); };
|
|
158
329
|
loadIcons();
|
|
159
330
|
}, [
|
|
160
|
-
playIcon, pauseIcon, fullscreenIcon, downloadIcon,
|
|
161
|
-
volumeIcon, muteIcon, rewindIcon, forwardIcon
|
|
331
|
+
final.playIcon, final.pauseIcon, final.fullscreenIcon, final.downloadIcon,
|
|
332
|
+
final.volumeIcon, final.muteIcon, final.rewindIcon, final.forwardIcon
|
|
162
333
|
]);
|
|
163
334
|
// Helper function to render icon with proper size
|
|
164
335
|
var renderIcon = function (icon, defaultSize) {
|
|
@@ -209,11 +380,11 @@ function Video(_a) {
|
|
|
209
380
|
var rightArea = width * 0.7;
|
|
210
381
|
if (clickX < leftArea) {
|
|
211
382
|
// Left area - rewind
|
|
212
|
-
handleSeek(-seekAmount);
|
|
383
|
+
handleSeek(-final.seekAmount);
|
|
213
384
|
}
|
|
214
385
|
else if (clickX > rightArea) {
|
|
215
386
|
// Right area - forward
|
|
216
|
-
handleSeek(seekAmount);
|
|
387
|
+
handleSeek(final.seekAmount);
|
|
217
388
|
}
|
|
218
389
|
else {
|
|
219
390
|
// Middle area - play/pause
|
|
@@ -227,8 +398,8 @@ function Video(_a) {
|
|
|
227
398
|
video.currentTime = Math.max(0, Math.min(video.currentTime + seconds, duration));
|
|
228
399
|
}
|
|
229
400
|
};
|
|
230
|
-
var handleRewind = function () { return handleSeek(-seekAmount); };
|
|
231
|
-
var handleForward = function () { return handleSeek(seekAmount); };
|
|
401
|
+
var handleRewind = function () { return handleSeek(-final.seekAmount); };
|
|
402
|
+
var handleForward = function () { return handleSeek(final.seekAmount); };
|
|
232
403
|
// Fullscreen functionality
|
|
233
404
|
var handleToggleFullScreen = function () {
|
|
234
405
|
var _a, _b;
|
|
@@ -285,11 +456,12 @@ function Video(_a) {
|
|
|
285
456
|
}, []);
|
|
286
457
|
// Event handlers
|
|
287
458
|
var handleLoadedMetadata = function () {
|
|
459
|
+
var _a;
|
|
288
460
|
var video = videoRef.current;
|
|
289
461
|
if (video) {
|
|
290
462
|
setDuration(video.duration || 0);
|
|
291
|
-
onDuration === null ||
|
|
292
|
-
if (autoPlay) {
|
|
463
|
+
(_a = final.onDuration) === null || _a === void 0 ? void 0 : _a.call(final, video.duration);
|
|
464
|
+
if (final.autoPlay) {
|
|
293
465
|
video.muted = true;
|
|
294
466
|
video.play().then(function () {
|
|
295
467
|
setIsPlaying(true);
|
|
@@ -299,9 +471,10 @@ function Video(_a) {
|
|
|
299
471
|
}
|
|
300
472
|
};
|
|
301
473
|
var handleVideoEnd = function () {
|
|
474
|
+
var _a;
|
|
302
475
|
setIsPlaying(false);
|
|
303
|
-
onEnded === null ||
|
|
304
|
-
if (loop && videoRef.current) {
|
|
476
|
+
(_a = final.onEnded) === null || _a === void 0 ? void 0 : _a.call(final); // Call the onEnded callback
|
|
477
|
+
if (final.loop && videoRef.current) {
|
|
305
478
|
videoRef.current.currentTime = 0;
|
|
306
479
|
playVideo();
|
|
307
480
|
}
|
|
@@ -309,22 +482,22 @@ function Video(_a) {
|
|
|
309
482
|
// Effects
|
|
310
483
|
(0, react_1.useEffect)(function () {
|
|
311
484
|
var handleKey = function (e) {
|
|
312
|
-
return (0, videoShortcuts_1.handleKeyDown)(e, isPlaying, playVideo, pauseVideo, spacebarPlay);
|
|
485
|
+
return (0, videoShortcuts_1.handleKeyDown)(e, isPlaying, playVideo, pauseVideo, final.spacebarPlay);
|
|
313
486
|
};
|
|
314
487
|
document.addEventListener('keydown', handleKey);
|
|
315
488
|
return function () { return document.removeEventListener('keydown', handleKey); };
|
|
316
|
-
}, [isPlaying, spacebarPlay]);
|
|
489
|
+
}, [isPlaying, final.spacebarPlay]);
|
|
317
490
|
(0, react_1.useEffect)(function () {
|
|
318
491
|
var video = videoRef.current;
|
|
319
492
|
if (!video)
|
|
320
493
|
return;
|
|
321
494
|
video.addEventListener('ended', handleVideoEnd);
|
|
322
495
|
return function () { return video.removeEventListener('ended', handleVideoEnd); };
|
|
323
|
-
}, [loop, onEnded]);
|
|
496
|
+
}, [final.loop, final.onEnded]);
|
|
324
497
|
(0, react_1.useEffect)(function () {
|
|
325
|
-
if (isPause)
|
|
498
|
+
if (final.isPause)
|
|
326
499
|
pauseVideo();
|
|
327
|
-
}, [isPause]);
|
|
500
|
+
}, [final.isPause]);
|
|
328
501
|
(0, react_1.useEffect)(function () {
|
|
329
502
|
var handleFullscreenChange = function () {
|
|
330
503
|
setIsFullScreen(!!document.fullscreenElement);
|
|
@@ -338,13 +511,13 @@ function Video(_a) {
|
|
|
338
511
|
var show = function () {
|
|
339
512
|
setShowControlsState(true);
|
|
340
513
|
clearTimeout(timer);
|
|
341
|
-
timer = setTimeout(function () { return setShowControlsState(false); }, hideControlsDelay);
|
|
514
|
+
timer = setTimeout(function () { return setShowControlsState(false); }, final.hideControlsDelay);
|
|
342
515
|
};
|
|
343
516
|
var hide = function () {
|
|
344
517
|
setShowControlsState(false);
|
|
345
518
|
};
|
|
346
519
|
var container = containerRef.current;
|
|
347
|
-
if (container && showControls) {
|
|
520
|
+
if (container && final.showControls) {
|
|
348
521
|
container.addEventListener('mouseenter', show);
|
|
349
522
|
container.addEventListener('mouseleave', hide);
|
|
350
523
|
container.addEventListener('mousemove', show);
|
|
@@ -357,7 +530,7 @@ function Video(_a) {
|
|
|
357
530
|
}
|
|
358
531
|
clearTimeout(timer);
|
|
359
532
|
};
|
|
360
|
-
}, [showControls, hideControlsDelay]);
|
|
533
|
+
}, [final.showControls, final.hideControlsDelay]);
|
|
361
534
|
(0, react_1.useEffect)(function () {
|
|
362
535
|
if (isPlaying) {
|
|
363
536
|
animationFrameRef.current = requestAnimationFrame(updateCurrentTime);
|
|
@@ -373,13 +546,13 @@ function Video(_a) {
|
|
|
373
546
|
// Beautiful Progress Bar Component
|
|
374
547
|
var ProgressBar = function () { return (react_1.default.createElement("div", { className: "progress-container mb-4" },
|
|
375
548
|
react_1.default.createElement("div", { className: "progress-wrapper" },
|
|
376
|
-
react_1.default.createElement("input", { type: "range", min: 0, max: duration, value: currentTime, onChange: handleProgressChange, className: "video-progress ".concat(progressCss), style: {
|
|
549
|
+
react_1.default.createElement("input", { type: "range", min: 0, max: duration, value: currentTime, onChange: handleProgressChange, className: "video-progress ".concat(final.progressCss), style: {
|
|
377
550
|
'--progress-percent': "".concat((currentTime / duration) * 100, "%"),
|
|
378
551
|
}, onMouseEnter: function () { return setIsHoveringProgress(true); }, onMouseLeave: function () { return setIsHoveringProgress(false); } })))); };
|
|
379
552
|
// Beautiful Volume Control Component
|
|
380
553
|
var VolumeControl = function () { return (react_1.default.createElement("div", { className: "volume-control-wrapper" },
|
|
381
554
|
react_1.default.createElement(ToolTip_1.default, null,
|
|
382
|
-
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleToggleMute, className: "volume-toggle ".concat(buttonCss, " ").concat(volumeCss) }, isMuted || volume === 0
|
|
555
|
+
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleToggleMute, className: "volume-toggle ".concat(final.buttonCss, " ").concat(final.volumeCss) }, isMuted || volume === 0
|
|
383
556
|
? renderIcon(dynamicMuteIcon, 16)
|
|
384
557
|
: renderIcon(dynamicVolumeIcon, 16)),
|
|
385
558
|
react_1.default.createElement(Tip_1.default, { tip: "top", content: isMuted ? "Unmute" : "Mute" })),
|
|
@@ -387,33 +560,33 @@ function Video(_a) {
|
|
|
387
560
|
react_1.default.createElement("input", { type: "range", min: 0, max: 1, step: 0.01, value: volume, onChange: handleVolumeChange, className: "volume-slider", style: {
|
|
388
561
|
'--volume-percent': "".concat(volume * 100, "%"),
|
|
389
562
|
} })))); };
|
|
390
|
-
return (react_1.default.createElement("div", { ref: containerRef, className: "video_container fit ".concat(funcss, " ").concat(containerCss, " ").concat(className), onClick: handleVideoClick },
|
|
391
|
-
poster && !hasStarted && !isPlaying && (react_1.default.createElement("div", { style: { backgroundImage: "url(".concat(poster, ")") }, className: "video_poster" })),
|
|
392
|
-
react_1.default.createElement("video", { ref: videoRef, preload: "auto", src: src, className: "video_player fit min-w-200 ".concat(videoCss), onLoadedMetadata: handleLoadedMetadata, playsInline: true, controls: false, loop: loop, muted: muted }),
|
|
393
|
-
showControls && (react_1.default.createElement("div", { className: "video_controls ".concat(controlsCss, " ").concat(showControlsState ? 'show_controls' : 'hide_controls') },
|
|
394
|
-
showProgress && react_1.default.createElement(ProgressBar, null),
|
|
563
|
+
return (react_1.default.createElement("div", { ref: containerRef, className: "video_container fit ".concat(final.funcss, " ").concat(final.containerCss, " ").concat(final.className), onClick: handleVideoClick },
|
|
564
|
+
final.poster && !hasStarted && !isPlaying && (react_1.default.createElement("div", { style: { backgroundImage: "url(".concat(final.poster, ")") }, className: "video_poster" })),
|
|
565
|
+
react_1.default.createElement("video", { ref: videoRef, preload: "auto", src: final.src, className: "video_player fit min-w-200 ".concat(final.videoCss), onLoadedMetadata: handleLoadedMetadata, playsInline: true, controls: false, loop: final.loop, muted: final.muted }),
|
|
566
|
+
final.showControls && (react_1.default.createElement("div", { className: "video_controls ".concat(final.controlsCss, " ").concat(showControlsState ? 'show_controls' : 'hide_controls') },
|
|
567
|
+
final.showProgress && react_1.default.createElement(ProgressBar, null),
|
|
395
568
|
react_1.default.createElement(RowFlex_1.default, { gap: 1, justify: "space-between", alignItems: "center", className: "controls-row" },
|
|
396
569
|
react_1.default.createElement(RowFlex_1.default, { gap: 0.5, alignItems: "center" },
|
|
397
|
-
showPlayPause && (react_1.default.createElement(ToolTip_1.default, null,
|
|
398
|
-
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handlePlayPauseToggle, className: "".concat(buttonCss, " ").concat(isPlaying ? pauseCss : playCss) }, isPlaying
|
|
570
|
+
final.showPlayPause && (react_1.default.createElement(ToolTip_1.default, null,
|
|
571
|
+
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handlePlayPauseToggle, className: "".concat(final.buttonCss, " ").concat(isPlaying ? final.pauseCss : final.playCss) }, isPlaying
|
|
399
572
|
? renderIcon(dynamicPauseIcon, 16)
|
|
400
573
|
: renderIcon(dynamicPlayIcon, 16)),
|
|
401
574
|
react_1.default.createElement(Tip_1.default, { tip: "top", content: isPlaying ? "Pause" : "Play" }))),
|
|
402
|
-
showSeekButtons && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
575
|
+
final.showSeekButtons && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
403
576
|
react_1.default.createElement(ToolTip_1.default, null,
|
|
404
|
-
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleRewind, className: "".concat(buttonCss, " ").concat(rewindCss) }, renderIcon(dynamicRewindIcon, 14)),
|
|
405
|
-
react_1.default.createElement(Tip_1.default, { tip: "top", content: "".concat(seekAmount, "s Back") })),
|
|
577
|
+
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleRewind, className: "".concat(final.buttonCss, " ").concat(final.rewindCss) }, renderIcon(dynamicRewindIcon, 14)),
|
|
578
|
+
react_1.default.createElement(Tip_1.default, { tip: "top", content: "".concat(final.seekAmount, "s Back") })),
|
|
406
579
|
react_1.default.createElement(ToolTip_1.default, null,
|
|
407
|
-
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleForward, className: "".concat(buttonCss, " ").concat(forwardCss) }, renderIcon(dynamicForwardIcon, 14)),
|
|
408
|
-
react_1.default.createElement(Tip_1.default, { tip: "top", content: "".concat(seekAmount, "s Forward") })))),
|
|
409
|
-
showVolume && react_1.default.createElement(VolumeControl, null),
|
|
410
|
-
showTime && (react_1.default.createElement("div", { className: "video_time ".concat(timeCss) },
|
|
580
|
+
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleForward, className: "".concat(final.buttonCss, " ").concat(final.forwardCss) }, renderIcon(dynamicForwardIcon, 14)),
|
|
581
|
+
react_1.default.createElement(Tip_1.default, { tip: "top", content: "".concat(final.seekAmount, "s Forward") })))),
|
|
582
|
+
final.showVolume && react_1.default.createElement(VolumeControl, null),
|
|
583
|
+
final.showTime && (react_1.default.createElement("div", { className: "video_time ".concat(final.timeCss) },
|
|
411
584
|
react_1.default.createElement(Text_1.default, { text: "".concat((0, videoFunctions_1.formatTime)(currentTime), " / ").concat((0, videoFunctions_1.formatTime)(duration)), funcss: 'm-0', size: "sm" })))),
|
|
412
585
|
react_1.default.createElement(RowFlex_1.default, { gap: 0.3 },
|
|
413
|
-
showFullscreen && (react_1.default.createElement(ToolTip_1.default, null,
|
|
414
|
-
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleToggleFullScreen, className: "".concat(buttonCss, " ").concat(fullscreenCss) }, renderIcon(dynamicFullscreenIcon, 16)),
|
|
586
|
+
final.showFullscreen && (react_1.default.createElement(ToolTip_1.default, null,
|
|
587
|
+
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: handleToggleFullScreen, className: "".concat(final.buttonCss, " ").concat(final.fullscreenCss) }, renderIcon(dynamicFullscreenIcon, 16)),
|
|
415
588
|
react_1.default.createElement(Tip_1.default, { tip: "top", content: "Fullscreen" }))),
|
|
416
|
-
showDownload && (react_1.default.createElement(ToolTip_1.default, null,
|
|
417
|
-
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: function () { return window.open(src, '_blank'); }, className: "".concat(buttonCss, " ").concat(downloadCss) }, renderIcon(dynamicDownloadIcon, 14)),
|
|
589
|
+
final.showDownload && (react_1.default.createElement(ToolTip_1.default, null,
|
|
590
|
+
react_1.default.createElement(Circle_1.default, { bordered: true, size: 2.5, onClick: function () { return window.open(final.src, '_blank'); }, className: "".concat(final.buttonCss, " ").concat(final.downloadCss) }, renderIcon(dynamicDownloadIcon, 14)),
|
|
418
591
|
react_1.default.createElement(Tip_1.default, { tip: "top", content: "Download" })))))))));
|
|
419
592
|
}
|