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 CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.7.9",
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",
@@ -30,7 +30,7 @@ interface ProjectData {
30
30
  }
31
31
  interface ThemeProviderProps {
32
32
  theme: ThemeName;
33
- projectId: string;
33
+ projectId?: string;
34
34
  funcss?: string;
35
35
  minHeight?: string;
36
36
  children: ReactNode;
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
- _a.trys.push([0, 5, , 6]);
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 1:
207
+ case 2:
202
208
  response = _a.sent();
203
- if (!response.ok) return [3 /*break*/, 3];
209
+ if (!response.ok) return [3 /*break*/, 4];
204
210
  return [4 /*yield*/, response.json()];
205
- case 2:
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 3:
210
- console.error('Firebase Storage fetch failed:', response.status, response.statusText);
211
- _a.label = 4;
212
- case 4: return [3 /*break*/, 6];
213
- case 5:
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*/, 6];
217
- case 6: return [2 /*return*/, null];
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
- /* ---------------------- CDN Theme Sync with Origin Validation ----------------------- */
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 syncTheme = function () { return __awaiter(void 0, void 0, void 0, function () {
326
- var hasAccess, localTheme, localVersion, cdnTheme, cdnVersion, err_1;
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, 4, 5, 6]);
331
- console.log('🔄 Starting theme sync with origin validation...');
332
- return [4 /*yield*/, validateOriginAccess(projectId)];
333
- case 1:
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 2:
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
- // Compare versions and use the newer one
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
- // Always use CDN theme if available
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('⚠️ Using local theme (CDN unavailable)');
369
- applyThemeData(localTheme, root);
370
- setCurrentVersion(localVersion);
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*/, 6];
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 syncing theme:', err_1);
382
- setError('Failed to sync theme');
383
- return [3 /*break*/, 6];
384
- case 5:
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 6: return [2 /*return*/];
415
+ case 10: return [2 /*return*/];
389
416
  }
390
417
  });
391
418
  }); };
392
- // Initial sync
393
- syncTheme();
394
- // Poll for updates every 5 minutes
395
- pollTimer = setInterval(function () {
396
- syncTheme();
397
- }, 5 * 60 * 1000);
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
- clearInterval(pollTimer);
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;
@@ -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 src = _a.src, poster = _a.poster, onDuration = _a.onDuration, onEnded = _a.onEnded, isPause = _a.isPause, _b = _a.spacebarPlay, spacebarPlay = _b === void 0 ? true : _b, _c = _a.className, className = _c === void 0 ? '' : _c, _d = _a.autoPlay, autoPlay = _d === void 0 ? false : _d, _e = _a.showControls, showControls = _e === void 0 ? true : _e, _f = _a.showPlayPause, showPlayPause = _f === void 0 ? true : _f, _g = _a.showProgress, showProgress = _g === void 0 ? true : _g, _h = _a.showVolume, showVolume = _h === void 0 ? true : _h, _j = _a.showTime, showTime = _j === void 0 ? true : _j, _k = _a.showFullscreen, showFullscreen = _k === void 0 ? true : _k, _l = _a.showDownload, showDownload = _l === void 0 ? true : _l, _m = _a.showSeekButtons, showSeekButtons = _m === void 0 ? true : _m, playIcon = _a.playIcon, pauseIcon = _a.pauseIcon, fullscreenIcon = _a.fullscreenIcon, downloadIcon = _a.downloadIcon, volumeIcon = _a.volumeIcon, muteIcon = _a.muteIcon, rewindIcon = _a.rewindIcon, forwardIcon = _a.forwardIcon, _o = _a.hideControlsDelay, hideControlsDelay = _o === void 0 ? 3000 : _o, _p = _a.loop, loop = _p === void 0 ? false : _p, _q = _a.muted, muted = _q === void 0 ? false : _q, _r = _a.seekAmount, seekAmount = _r === void 0 ? 10 : _r, _s = _a.funcss, funcss = _s === void 0 ? '' : _s, _t = _a.containerCss, containerCss = _t === void 0 ? '' : _t, _u = _a.videoCss, videoCss = _u === void 0 ? '' : _u, _v = _a.controlsCss, controlsCss = _v === void 0 ? '' : _v, _w = _a.progressCss, progressCss = _w === void 0 ? '' : _w, _x = _a.progressBarCss, progressBarCss = _x === void 0 ? '' : _x, _y = _a.timeCss, timeCss = _y === void 0 ? '' : _y, _z = _a.playCss, playCss = _z === void 0 ? '' : _z, _0 = _a.pauseCss, pauseCss = _0 === void 0 ? '' : _0, _1 = _a.volumeCss, volumeCss = _1 === void 0 ? '' : _1, _2 = _a.fullscreenCss, fullscreenCss = _2 === void 0 ? '' : _2, _3 = _a.downloadCss, downloadCss = _3 === void 0 ? '' : _3, _4 = _a.rewindCss, rewindCss = _4 === void 0 ? '' : _4, _5 = _a.forwardCss, forwardCss = _5 === void 0 ? '' : _5, _6 = _a.buttonCss, buttonCss = _6 === void 0 ? '' : _6;
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 _7 = (0, react_1.useState)(false), isPlaying = _7[0], setIsPlaying = _7[1];
95
- var _8 = (0, react_1.useState)(0), currentTime = _8[0], setCurrentTime = _8[1];
96
- var _9 = (0, react_1.useState)(0), duration = _9[0], setDuration = _9[1];
97
- var _10 = (0, react_1.useState)(muted ? 0 : 1), volume = _10[0], setVolume = _10[1];
98
- var _11 = (0, react_1.useState)(muted), isMuted = _11[0], setIsMuted = _11[1];
99
- var _12 = (0, react_1.useState)(false), isFullScreen = _12[0], setIsFullScreen = _12[1];
100
- var _13 = (0, react_1.useState)(false), showControlsState = _13[0], setShowControlsState = _13[1];
101
- var _14 = (0, react_1.useState)(false), hasStarted = _14[0], setHasStarted = _14[1];
102
- var _15 = (0, react_1.useState)(false), isHoveringProgress = _15[0], setIsHoveringProgress = _15[1];
103
- var _16 = (0, react_1.useState)(false), isHoveringVolume = _16[0], setIsHoveringVolume = _16[1];
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 _17 = (0, react_1.useState)(null), dynamicPlayIcon = _17[0], setDynamicPlayIcon = _17[1];
106
- var _18 = (0, react_1.useState)(null), dynamicPauseIcon = _18[0], setDynamicPauseIcon = _18[1];
107
- var _19 = (0, react_1.useState)(null), dynamicFullscreenIcon = _19[0], setDynamicFullscreenIcon = _19[1];
108
- var _20 = (0, react_1.useState)(null), dynamicDownloadIcon = _20[0], setDynamicDownloadIcon = _20[1];
109
- var _21 = (0, react_1.useState)(null), dynamicVolumeIcon = _21[0], setDynamicVolumeIcon = _21[1];
110
- var _22 = (0, react_1.useState)(null), dynamicMuteIcon = _22[0], setDynamicMuteIcon = _22[1];
111
- var _23 = (0, react_1.useState)(null), dynamicRewindIcon = _23[0], setDynamicRewindIcon = _23[1];
112
- var _24 = (0, react_1.useState)(null), dynamicForwardIcon = _24[0], setDynamicForwardIcon = _24[1];
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 || onDuration === void 0 ? void 0 : onDuration(video.duration);
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 || onEnded === void 0 ? void 0 : onEnded(); // Call the onEnded callback
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
  }