webs-sdk 0.19.64 → 0.19.65

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.
Files changed (100) hide show
  1. package/AGENTS.md +44 -0
  2. package/CLAUDE.md +80 -0
  3. package/README.md +513 -490
  4. package/dist/components/ARFilters/ARFilters.js +54 -54
  5. package/dist/components/ArtGenerator.js +141 -141
  6. package/dist/components/AvatarAI.js +14 -14
  7. package/dist/components/CookieConsent/constants.js +31 -31
  8. package/dist/components/CreativeFaceSwap.js +23 -23
  9. package/dist/components/GifsIa.js +76 -76
  10. package/dist/components/MemeGenerator.js +12 -12
  11. package/dist/components/PasswordReset/constants.js +33 -33
  12. package/dist/components/RecoveryPassword/constants.js +27 -27
  13. package/dist/components/SpinningWheel/SpinningWheel.js +7 -7
  14. package/dist/components/SpinningWheel/index.d.ts +1 -1
  15. package/dist/components/SpinningWheel/index.d.ts.map +1 -1
  16. package/dist/components/SpinningWheel/index.js +2 -1
  17. package/dist/components/SpinningWheel/index.js.map +1 -1
  18. package/dist/components/ui/ConfiguredMediaPlayer.d.ts +49 -0
  19. package/dist/components/ui/ConfiguredMediaPlayer.d.ts.map +1 -0
  20. package/dist/components/ui/ConfiguredMediaPlayer.js +111 -0
  21. package/dist/components/ui/ConfiguredMediaPlayer.js.map +1 -0
  22. package/dist/components/ui/badge.d.ts +1 -0
  23. package/dist/components/ui/badge.d.ts.map +1 -1
  24. package/dist/components/ui/badge.js +1 -1
  25. package/dist/components/ui/badge.js.map +1 -1
  26. package/dist/components/ui/compose-refs.d.ts +6 -0
  27. package/dist/components/ui/compose-refs.d.ts.map +1 -0
  28. package/dist/components/ui/compose-refs.js +57 -0
  29. package/dist/components/ui/compose-refs.js.map +1 -0
  30. package/dist/components/ui/dropdown-menu.d.ts +3 -1
  31. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  32. package/dist/components/ui/dropdown-menu.js +2 -2
  33. package/dist/components/ui/dropdown-menu.js.map +1 -1
  34. package/dist/components/ui/index.d.ts +2 -0
  35. package/dist/components/ui/index.d.ts.map +1 -1
  36. package/dist/components/ui/index.js +2 -0
  37. package/dist/components/ui/index.js.map +1 -1
  38. package/dist/components/ui/media-player.d.ts +127 -0
  39. package/dist/components/ui/media-player.d.ts.map +1 -0
  40. package/dist/components/ui/media-player.js +1633 -0
  41. package/dist/components/ui/media-player.js.map +1 -0
  42. package/dist/components/ui/tooltip.d.ts +3 -1
  43. package/dist/components/ui/tooltip.d.ts.map +1 -1
  44. package/dist/components/ui/tooltip.js +2 -2
  45. package/dist/components/ui/tooltip.js.map +1 -1
  46. package/dist/components/ui/use-lazy-ref.d.ts +4 -0
  47. package/dist/components/ui/use-lazy-ref.d.ts.map +1 -0
  48. package/dist/components/ui/use-lazy-ref.js +45 -0
  49. package/dist/components/ui/use-lazy-ref.js.map +1 -0
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +4 -3
  53. package/dist/index.js.map +1 -1
  54. package/dist/network.d.ts +12 -0
  55. package/dist/network.d.ts.map +1 -0
  56. package/dist/network.js +15 -0
  57. package/dist/network.js.map +1 -0
  58. package/dist/server.d.ts +54 -0
  59. package/dist/server.d.ts.map +1 -0
  60. package/dist/server.js +74 -0
  61. package/dist/server.js.map +1 -0
  62. package/dist/types/media-chrome-store-types.d.ts +107 -0
  63. package/dist/types/media-chrome-store-types.d.ts.map +1 -0
  64. package/dist/types/media-chrome-store-types.js +3 -0
  65. package/dist/types/media-chrome-store-types.js.map +1 -0
  66. package/dist/utils/QRCode.d.ts +1 -0
  67. package/dist/utils/QRCode.d.ts.map +1 -0
  68. package/dist/utils/QRCode.js +2 -0
  69. package/dist/utils/QRCode.js.map +1 -0
  70. package/dist/utils/imageValidation.d.ts +6 -0
  71. package/dist/utils/imageValidation.d.ts.map +1 -0
  72. package/dist/utils/imageValidation.js +64 -0
  73. package/dist/utils/imageValidation.js.map +1 -0
  74. package/docs/CONFIGURED_MEDIA_PLAYER.md +40 -0
  75. package/docs/CORP_AUTH_USAGE.md +687 -0
  76. package/docs/EXAMPLES_WALLPAPERSNAME_IMPLEMENTATION.md +1445 -0
  77. package/docs/EXAMPLE_ENDPOINTS_COMUNICATION.md +55 -0
  78. package/docs/EXTERNAL_SDK_GUIDE.md +1340 -0
  79. package/docs/FOR_YOU_360_FACESWAP_FIX.md +400 -0
  80. package/docs/FOR_YOU_IMPLEMENTATION_GUIDE.md +1413 -0
  81. package/docs/FOR_YOU_QUIZ_ARCHITECTURE.md +753 -0
  82. package/docs/FOR_YOU_SDK_WALLPAPERSNAME_BUG.md +106 -0
  83. package/docs/FOR_YOU_WALLPAPERSNAME_ENHANCEMENT_PLAN.md +210 -0
  84. package/docs/LEGAL_USAGE.md +190 -0
  85. package/docs/STREAK_IMPLEMENTATION_GUIDE.md +430 -0
  86. package/package.json +106 -84
  87. package/public/spin2win/assets/border-afristream.svg +26 -26
  88. package/public/spin2win/assets/border-efc.svg +23 -23
  89. package/public/spin2win/assets/border-streetreel.svg +23 -23
  90. package/public/spin2win/assets/border-totalgym.svg +27 -27
  91. package/public/spin2win/assets/border-womantoday.svg +26 -26
  92. package/public/spin2win/assets/indicator-afristream.svg +28 -28
  93. package/public/spin2win/assets/indicator-efc.svg +29 -29
  94. package/public/spin2win/assets/indicator-streetreel.svg +29 -29
  95. package/public/spin2win/assets/indicator-totalgym.svg +29 -29
  96. package/public/spin2win/fonts/switzer/README.md +22 -22
  97. package/scripts/install-agent-skill.cjs +34 -0
  98. package/skills/webs-sdk-package/SKILL.md +11 -0
  99. package/skills/webs-sdk-package/references/components.md +30 -0
  100. package/skills/webs-sdk-package/references/integration.md +32 -0
@@ -0,0 +1,107 @@
1
+ import type * as React from "react";
2
+ export interface MediaState {
3
+ mediaPaused?: boolean;
4
+ mediaVolume?: number;
5
+ mediaMuted?: boolean;
6
+ mediaVolumeLevel?: "off" | "low" | "medium" | "high";
7
+ mediaCurrentTime?: number;
8
+ mediaSeekable?: [number, number] | null;
9
+ mediaBuffered?: [number, number][];
10
+ mediaLoading?: boolean;
11
+ mediaHasPlayed?: boolean;
12
+ mediaEnded?: boolean;
13
+ mediaIsFullscreen?: boolean;
14
+ mediaPlaybackRate?: number;
15
+ mediaError?: MediaError | null;
16
+ mediaSubtitlesList?: Array<{
17
+ kind: string;
18
+ label: string;
19
+ language: string;
20
+ }>;
21
+ mediaSubtitlesShowing?: Array<{
22
+ kind: string;
23
+ label: string;
24
+ language: string;
25
+ }>;
26
+ mediaVideoRenditionList?: Array<{
27
+ id?: string;
28
+ width?: number;
29
+ height?: number;
30
+ bitrate?: number;
31
+ }>;
32
+ mediaVideoRenditionSelected?: string;
33
+ mediaRenditionList?: Array<{
34
+ id?: string;
35
+ width?: number;
36
+ height?: number;
37
+ bitrate?: number;
38
+ }>;
39
+ mediaRenditionSelected?: string;
40
+ mediaChaptersCues?: Array<{
41
+ startTime: number;
42
+ endTime: number;
43
+ text: string;
44
+ }>;
45
+ mediaPreviewTime?: number;
46
+ mediaPreviewImage?: string;
47
+ mediaPreviewCoords?: [string, string, string, string] | null;
48
+ mediaDuration?: number;
49
+ mediaIsPip?: boolean;
50
+ mediaIsAirplaying?: boolean;
51
+ mediaDownloadUrl?: string;
52
+ mediaLoopOn?: boolean;
53
+ mediaAudioTrackList?: Array<{
54
+ id: string;
55
+ kind: string;
56
+ label: string;
57
+ language: string;
58
+ enabled: boolean;
59
+ }>;
60
+ mediaAudioTrackEnabled?: string;
61
+ mediaStreamType?: string;
62
+ mediaTimeIsLive?: boolean;
63
+ }
64
+ export declare const MediaActionTypes: {
65
+ readonly MEDIA_ELEMENT_CHANGE_REQUEST: "mediaelementchangerequest";
66
+ readonly FULLSCREEN_ELEMENT_CHANGE_REQUEST: "fullscreenelementchangerequest";
67
+ readonly MEDIA_PLAY_REQUEST: "mediaplayrequest";
68
+ readonly MEDIA_PAUSE_REQUEST: "mediapauserequest";
69
+ readonly MEDIA_MUTE_REQUEST: "mediamuterequest";
70
+ readonly MEDIA_UNMUTE_REQUEST: "mediaunmuterequest";
71
+ readonly MEDIA_LOOP_REQUEST: "medialooprequest";
72
+ readonly MEDIA_VOLUME_REQUEST: "mediavolumerequest";
73
+ readonly MEDIA_SEEK_REQUEST: "mediaseekrequest";
74
+ readonly MEDIA_AIRPLAY_REQUEST: "mediaairplayrequest";
75
+ readonly MEDIA_ENTER_FULLSCREEN_REQUEST: "mediaenterfullscreenrequest";
76
+ readonly MEDIA_EXIT_FULLSCREEN_REQUEST: "mediaexitfullscreenrequest";
77
+ readonly MEDIA_PREVIEW_REQUEST: "mediapreviewrequest";
78
+ readonly MEDIA_ENTER_PIP_REQUEST: "mediaenterpiprequest";
79
+ readonly MEDIA_EXIT_PIP_REQUEST: "mediaexitpiprequest";
80
+ readonly MEDIA_ENTER_CAST_REQUEST: "mediaentercastrequest";
81
+ readonly MEDIA_EXIT_CAST_REQUEST: "mediaexitcastrequest";
82
+ readonly MEDIA_SHOW_SUBTITLES_REQUEST: "mediashowsubtitlesrequest";
83
+ readonly MEDIA_DISABLE_SUBTITLES_REQUEST: "mediadisablesubtitlesrequest";
84
+ readonly MEDIA_TOGGLE_SUBTITLES_REQUEST: "mediatogglesubtitlesrequest";
85
+ readonly MEDIA_PLAYBACK_RATE_REQUEST: "mediaplaybackraterequest";
86
+ readonly MEDIA_RENDITION_REQUEST: "mediarenditionrequest";
87
+ readonly MEDIA_AUDIO_TRACK_REQUEST: "mediaaudiotrackrequest";
88
+ readonly MEDIA_SEEK_TO_LIVE_REQUEST: "mediaseektoliverequest";
89
+ };
90
+ export declare const MediaProvider: (props: {
91
+ children: React.ReactNode;
92
+ mediaStore?: unknown;
93
+ }) => React.JSX.Element;
94
+ export declare const timeUtils: {
95
+ formatTime: (time: number, duration: number) => string;
96
+ [key: string]: unknown;
97
+ };
98
+ export type DispatchFn = (action: {
99
+ type: string;
100
+ detail?: unknown;
101
+ }) => void;
102
+ export declare const useMediaDispatch: () => DispatchFn;
103
+ export declare const useMediaRef: () => (mediaEl: HTMLVideoElement | HTMLAudioElement | null | undefined) => void;
104
+ export declare const useMediaFullscreenRef: () => (el: HTMLElement | null | undefined) => void;
105
+ export declare const useMediaSelector: <S = unknown>(selector: (state: Partial<MediaState>) => S, equalityFn?: (a: unknown, b: unknown) => boolean) => S;
106
+ export declare const useMediaStore: () => unknown;
107
+ //# sourceMappingURL=media-chrome-store-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-chrome-store-types.d.ts","sourceRoot":"","sources":["../../src/types/media-chrome-store-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=media-chrome-store-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-chrome-store-types.js","sourceRoot":"","sources":["../../src/types/media-chrome-store-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=QRCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QRCode.d.ts","sourceRoot":"","sources":["../../src/utils/QRCode.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=QRCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QRCode.js","sourceRoot":"","sources":["../../src/utils/QRCode.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export interface ImageValidationConfig {
2
+ decodeTimeout?: number;
3
+ verbose?: boolean;
4
+ }
5
+ export declare function isDecodableImageFile(file: File, config?: ImageValidationConfig): Promise<boolean>;
6
+ //# sourceMappingURL=imageValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageValidation.d.ts","sourceRoot":"","sources":["../../src/utils/imageValidation.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,qBAAqB;IAEpC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoBD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,MAAM,GAAE,qBAA0B,GACjC,OAAO,CAAC,OAAO,CAAC,CAyDlB"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDecodableImageFile = isDecodableImageFile;
4
+ const DEFAULT_CONFIG = {
5
+ decodeTimeout: 10000,
6
+ verbose: false,
7
+ };
8
+ async function isDecodableImageFile(file, config = {}) {
9
+ var _a;
10
+ const cfg = Object.assign(Object.assign({}, DEFAULT_CONFIG), config);
11
+ if (!file || !file.type.startsWith('image/')) {
12
+ if (cfg.verbose)
13
+ console.warn('[Image Validation] Rejected: not an image MIME type', file === null || file === void 0 ? void 0 : file.type);
14
+ return false;
15
+ }
16
+ if (typeof createImageBitmap === 'function') {
17
+ try {
18
+ const bitmap = await createImageBitmap(file);
19
+ (_a = bitmap.close) === null || _a === void 0 ? void 0 : _a.call(bitmap);
20
+ if (cfg.verbose)
21
+ console.log('[Image Validation] ✅ Decoded via createImageBitmap');
22
+ return true;
23
+ }
24
+ catch (error) {
25
+ if (cfg.verbose)
26
+ console.warn('[Image Validation] ❌ createImageBitmap failed to decode', error);
27
+ return false;
28
+ }
29
+ }
30
+ if (typeof document === 'undefined' || typeof URL === 'undefined') {
31
+ if (cfg.verbose)
32
+ console.warn('[Image Validation] No browser APIs available to decode image');
33
+ return false;
34
+ }
35
+ return new Promise((resolve) => {
36
+ const url = URL.createObjectURL(file);
37
+ const img = new Image();
38
+ const cleanup = () => {
39
+ clearTimeout(timeoutId);
40
+ URL.revokeObjectURL(url);
41
+ };
42
+ const timeoutId = setTimeout(() => {
43
+ cleanup();
44
+ img.src = '';
45
+ if (cfg.verbose)
46
+ console.warn('[Image Validation] ❌ Timed out decoding image');
47
+ resolve(false);
48
+ }, cfg.decodeTimeout);
49
+ img.onload = () => {
50
+ cleanup();
51
+ if (cfg.verbose)
52
+ console.log('[Image Validation] ✅ Decoded via <img> element');
53
+ resolve(true);
54
+ };
55
+ img.onerror = () => {
56
+ cleanup();
57
+ if (cfg.verbose)
58
+ console.warn('[Image Validation] ❌ <img> element failed to decode');
59
+ resolve(false);
60
+ };
61
+ img.src = url;
62
+ });
63
+ }
64
+ //# sourceMappingURL=imageValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageValidation.js","sourceRoot":"","sources":["../../src/utils/imageValidation.ts"],"names":[],"mappings":";;AAwCA,oDA4DC;AA9ED,MAAM,cAAc,GAAoC;IACtD,aAAa,EAAE,KAAK;IACpB,OAAO,EAAE,KAAK;CACf,CAAC;AAeK,KAAK,UAAU,oBAAoB,CACxC,IAAU,EACV,SAAgC,EAAE;;IAElC,MAAM,GAAG,mCAAQ,cAAc,GAAK,MAAM,CAAE,CAAC;IAE7C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,CAAC,CAAC;QACjG,OAAO,KAAK,CAAC;IACf,CAAC;IAID,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAA,MAAM,CAAC,KAAK,sDAAI,CAAC;YACjB,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAE,KAAK,CAAC,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAGD,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE,CAAC;QAClE,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC9F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAExB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,CAAC;YACV,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;QAEtB,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YAChB,OAAO,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAC/E,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE;YACjB,OAAO,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACrF,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,40 @@
1
+ # ConfiguredMediaPlayer
2
+
3
+ `ConfiguredMediaPlayer` is the prop-driven layout for the new Radix-based Dice UI media player. The original `VideoPlayer` remains available. For custom layouts, use the composable `MediaPlayer*` exports from `webs-sdk/ui` instead.
4
+
5
+ ```tsx
6
+ import { ConfiguredMediaPlayer } from 'webs-sdk/ui';
7
+
8
+ <ConfiguredMediaPlayer
9
+ src="https://example.com/movie.m3u8"
10
+ poster="/movie-poster.jpg"
11
+ label="Movie trailer"
12
+ autoPlay={false}
13
+ preload="metadata"
14
+ sources={[
15
+ { lang: 'en', src: 'https://example.com/en.m3u8' },
16
+ { lang: 'es', src: 'https://example.com/es.m3u8' },
17
+ ]}
18
+ defaultLanguage="en"
19
+ onLanguageChange={(lang) => console.log(lang)}
20
+ tracks={[{ src: '/subtitles/en.vtt', srcLang: 'en', label: 'English', kind: 'subtitles' }]}
21
+ controls={{ seekButtons: true, pictureInPicture: true, captions: true, download: false }}
22
+ seekSeconds={10}
23
+ playbackSpeeds={[0.75, 1, 1.25, 1.5, 2]}
24
+ onEnded={() => console.log('Finished')}
25
+ />
26
+ ```
27
+
28
+ ## Props
29
+
30
+ - `src`: required media URL; `.m3u8` video uses native HLS where available, otherwise dynamically loads `hls.js`.
31
+ - `mediaType`: `"video"` (default) or `"audio"`.
32
+ - `poster`, `autoPlay`, `preload`, `muted`, `loop`, `playsInline`: media element attributes.
33
+ - `sources`, `defaultLanguage`, `onLanguageChange`: alternative URLs selected by language. The selector appears only for multiple sources.
34
+ - `tracks`: subtitle/caption track definitions (`src`, `srcLang`, `label`, optional `kind` and `default`).
35
+ - `controls`: optional per-control visibility flags. Defaults: play, seek, volume, time, settings, fullscreen, loading, error enabled; seek buttons, speed, captions, loop, picture-in-picture, download disabled. Set `settings: false, speed: true` to show the standalone speed picker.
36
+ - `seekSeconds`, `playbackSpeeds`: seek-button interval and available playback rates.
37
+ - `mediaProps`: additional attributes and event handlers for the underlying media element.
38
+ - Root props (`className`, `style`, `autoHide`, `disabled`, `onPlay`, `onPause`, `onEnded`, `onTimeUpdate`, `onVolumeChange`, `onMuted`, `onMediaError`, etc.) are passed to `MediaPlayer`.
39
+
40
+ Because the component uses Tailwind classes, consuming applications must include the installed SDK source in their Tailwind content scan. For Tailwind v4, add `@source "../../node_modules/webs-sdk/dist/components/ui";` in the application's CSS (adjust the path relative to that CSS file).