@jwplayer/jwplayer-react-native 1.1.3 → 1.3.0

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 (36) hide show
  1. package/README.md +114 -21
  2. package/RNJWPlayer.podspec +1 -1
  3. package/android/build.gradle +14 -1
  4. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerModule.java +27 -0
  5. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerView.java +373 -204
  6. package/android/src/main/java/com/jwplayer/rnjwplayer/RNJWPlayerViewManager.java +16 -0
  7. package/android/src/main/java/com/jwplayer/rnjwplayer/Util.java +13 -1
  8. package/badges/version.svg +1 -1
  9. package/docs/CONFIG-REFERENCE.md +747 -0
  10. package/docs/MIGRATION-GUIDE.md +617 -0
  11. package/docs/PLATFORM-DIFFERENCES.md +693 -0
  12. package/docs/props.md +15 -3
  13. package/index.d.ts +225 -216
  14. package/index.js +34 -0
  15. package/ios/RNJWPlayer/RNJWPlayerView.swift +365 -10
  16. package/ios/RNJWPlayer/RNJWPlayerViewController.swift +45 -16
  17. package/ios/RNJWPlayer/RNJWPlayerViewManager.m +2 -0
  18. package/ios/RNJWPlayer/RNJWPlayerViewManager.swift +13 -0
  19. package/package.json +2 -2
  20. package/types/advertising.d.ts +514 -0
  21. package/types/index.d.ts +21 -0
  22. package/types/legacy.d.ts +82 -0
  23. package/types/platform-specific.d.ts +641 -0
  24. package/types/playlist.d.ts +410 -0
  25. package/types/unified-config.d.ts +591 -0
  26. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  27. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  28. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  29. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  30. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  31. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  32. package/android/.gradle/8.9/gc.properties +0 -0
  33. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  34. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  35. package/android/.gradle/vcs-1/gc.properties +0 -0
  36. package/docs/types.md +0 -254
@@ -0,0 +1,641 @@
1
+ /**
2
+ * Platform-Specific Configuration Types
3
+ *
4
+ * Types that are only supported on iOS or Android
5
+ *
6
+ * @see iOS: ios-json-parser/jwplayer-config.d.ts
7
+ * @see Android: android-json-parser/jwplayer-config-types.d.ts
8
+ */
9
+
10
+ // ============================================================================
11
+ // IOS-SPECIFIC TYPES
12
+ // ============================================================================
13
+
14
+ /**
15
+ * Audio session category for iOS
16
+ * Controls how the app's audio interacts with other audio on the device
17
+ *
18
+ * @platform ios
19
+ * @see https://developer.apple.com/documentation/avfoundation/avaudiosession/category
20
+ */
21
+ export type AudioSessionCategory =
22
+ | 'Ambient' // Mix with other audio, silence when locked
23
+ | 'SoloAmbient' // Default, silences other audio
24
+ | 'Playback' // For media playback
25
+ | 'Record' // For recording
26
+ | 'PlayAndRecord' // For VoIP, recording & playback
27
+ | 'MultiRoute'; // Multiple audio routes
28
+
29
+ /**
30
+ * Audio session category options for iOS
31
+ * Modifies the behavior of the audio session category
32
+ *
33
+ * @platform ios
34
+ * @see https://developer.apple.com/documentation/avfoundation/avaudiosession/categoryoptions
35
+ */
36
+ export type AudioSessionCategoryOptions =
37
+ | 'MixWithOthers' // Mix with other audio
38
+ | 'DuckOthers' // Lower volume of other audio
39
+ | 'AllowBluetooth' // Allow Bluetooth A2DP
40
+ | 'DefaultToSpeaker' // Route to speaker by default
41
+ | 'InterruptSpokenAudioAndMix' // Interrupt spoken audio
42
+ | 'AllowBluetoothA2DP' // Allow Bluetooth A2DP
43
+ | 'AllowAirPlay' // Allow AirPlay
44
+ | 'OverrideMutedMicrophone'; // Override muted microphone
45
+
46
+ /**
47
+ * Audio session mode for iOS
48
+ * Specialized modes for specific use cases
49
+ *
50
+ * @platform ios
51
+ * @see https://developer.apple.com/documentation/avfoundation/avaudiosession/mode
52
+ */
53
+ export type AudioSessionMode =
54
+ | 'Default' // Default mode
55
+ | 'VoiceChat' // For VoIP
56
+ | 'VideoChat' // For video calls
57
+ | 'GameChat' // For game chat
58
+ | 'VideoRecording' // For video recording
59
+ | 'Measurement' // For audio analysis
60
+ | 'MoviePlayback' // Optimized for movie playback
61
+ | 'SpokenAudio' // For podcasts/audiobooks
62
+ | 'VoicePrompt'; // For voice prompts
63
+
64
+ /**
65
+ * Edge styles for caption text emphasis
66
+ *
67
+ * @platform ios
68
+ */
69
+ export type EdgeStyles = 'none' | 'dropshadow' | 'raised' | 'depressed' | 'uniform';
70
+
71
+ /**
72
+ * Preload values
73
+ */
74
+ export type Preload = 'auto' | 'none';
75
+
76
+ /**
77
+ * Interface behavior modes
78
+ *
79
+ * @platform ios
80
+ */
81
+ export type InterfaceBehavior = 'normal' | 'hidden' | 'onscreen';
82
+
83
+ /**
84
+ * UI groups that can be hidden on iOS
85
+ *
86
+ * @platform ios
87
+ */
88
+ export type UIGroup =
89
+ | 'overlay'
90
+ | 'control_bar'
91
+ | 'center_controls'
92
+ | 'next_up'
93
+ | 'error'
94
+ | 'playlist'
95
+ | 'controls_container'
96
+ | 'settings_menu'
97
+ | 'quality_submenu'
98
+ | 'captions_submenu'
99
+ | 'playback_submenu'
100
+ | 'audiotracks_submenu'
101
+ | 'casting_menu';
102
+
103
+ /**
104
+ * Control types for visibility control
105
+ *
106
+ * @platform ios
107
+ */
108
+ export type JWControlType =
109
+ | 'forward'
110
+ | 'rewind'
111
+ | 'pip'
112
+ | 'airplay'
113
+ | 'chromecast'
114
+ | 'next'
115
+ | 'previous'
116
+ | 'settings'
117
+ | 'languages'
118
+ | 'fullscreen';
119
+
120
+ /**
121
+ * Font configuration for iOS styling
122
+ *
123
+ * @platform ios
124
+ */
125
+ export interface Font {
126
+ /**
127
+ * Font name (e.g., "Helvetica", "Arial")
128
+ */
129
+ name?: string;
130
+
131
+ /**
132
+ * Font size in points
133
+ */
134
+ size?: number;
135
+ }
136
+
137
+ /**
138
+ * Caption styling configuration for iOS
139
+ *
140
+ * Only applies to SRT and WebVTT captions when accessibility settings allow.
141
+ * EIA-608 captions always use system accessibility settings.
142
+ *
143
+ * @platform ios
144
+ */
145
+ export interface CaptionStyle {
146
+ /**
147
+ * Font configuration
148
+ */
149
+ font?: Font;
150
+
151
+ /**
152
+ * Font family name
153
+ */
154
+ fontFamily?: string;
155
+
156
+ /**
157
+ * Font size in points
158
+ */
159
+ fontSize?: number;
160
+
161
+ /**
162
+ * Font color in hex format (e.g., "#FFFFFF")
163
+ * @default "#FFFFFF"
164
+ */
165
+ fontColor?: string;
166
+
167
+ /**
168
+ * Alternative naming for fontColor
169
+ */
170
+ color?: string;
171
+
172
+ /**
173
+ * Font opacity (0-100)
174
+ * @default 100
175
+ */
176
+ fontOpacity?: number;
177
+
178
+ /**
179
+ * Background/highlight color in hex format
180
+ * The background behind the text
181
+ * @default "#000000"
182
+ */
183
+ backgroundColor?: string;
184
+
185
+ /**
186
+ * Background/highlight opacity (0-100)
187
+ * @default 100
188
+ */
189
+ backgroundOpacity?: number;
190
+
191
+ /**
192
+ * Highlight color (alternative naming)
193
+ */
194
+ highlightColor?: string;
195
+
196
+ /**
197
+ * Window color in hex format
198
+ * The color of the caption window/box
199
+ * @default "#000000"
200
+ */
201
+ windowColor?: string;
202
+
203
+ /**
204
+ * Window opacity (0-100)
205
+ * @default 0
206
+ */
207
+ windowOpacity?: number;
208
+
209
+ /**
210
+ * Edge style for text emphasis
211
+ * @default "none"
212
+ */
213
+ edgeStyle?: EdgeStyles;
214
+
215
+ /**
216
+ * Whether to allow dynamic text scaling
217
+ * @default true
218
+ */
219
+ allowScaling?: boolean;
220
+
221
+ /**
222
+ * Override strategy for applying styles
223
+ */
224
+ overrideStrategy?: string;
225
+ }
226
+
227
+ /**
228
+ * Menu styling configuration for iOS
229
+ *
230
+ * @platform ios
231
+ */
232
+ export interface MenuStyle {
233
+ /**
234
+ * Font configuration
235
+ */
236
+ font?: Font;
237
+
238
+ /**
239
+ * Font color in hex format
240
+ */
241
+ fontColor?: string;
242
+
243
+ /**
244
+ * Background color in hex format
245
+ */
246
+ backgroundColor?: string;
247
+ }
248
+
249
+ /**
250
+ * Timeslider styling configuration for iOS
251
+ *
252
+ * @platform ios
253
+ */
254
+ export interface TimesliderStyle {
255
+ /**
256
+ * Thumb color in hex format
257
+ */
258
+ thumb?: string;
259
+
260
+ /**
261
+ * Rail color in hex format
262
+ */
263
+ rail?: string;
264
+
265
+ /**
266
+ * Slider/progress color in hex format
267
+ */
268
+ slider?: string;
269
+ }
270
+
271
+ /**
272
+ * Colors configuration for iOS styling
273
+ *
274
+ * @platform ios
275
+ */
276
+ export interface Colors {
277
+ /**
278
+ * Button colors in hex format
279
+ */
280
+ buttons?: string;
281
+
282
+ /**
283
+ * Background color in hex format
284
+ */
285
+ backgroundColor?: string;
286
+
287
+ /**
288
+ * Font color in hex format
289
+ */
290
+ fontColor?: string;
291
+
292
+ /**
293
+ * Timeslider styling
294
+ */
295
+ timeslider?: TimesliderStyle;
296
+ }
297
+
298
+ /**
299
+ * Styling configuration for iOS
300
+ *
301
+ * Note: Android requires overloading of JWP IDs using XML styling
302
+ * @see https://docs.jwplayer.com/players/docs/android-styling-guide
303
+ *
304
+ * @platform ios
305
+ */
306
+ export interface JWStyling {
307
+ /**
308
+ * Color configuration
309
+ */
310
+ colors?: Colors;
311
+
312
+ /**
313
+ * Font configuration
314
+ */
315
+ font?: Font;
316
+
317
+ /**
318
+ * Show title in player UI
319
+ */
320
+ showTitle?: boolean;
321
+
322
+ /**
323
+ * Show description in player UI
324
+ */
325
+ showDesc?: boolean;
326
+
327
+ /**
328
+ * Caption styling
329
+ */
330
+ captionsStyle?: CaptionStyle;
331
+
332
+ /**
333
+ * Menu styling
334
+ */
335
+ menuStyle?: MenuStyle;
336
+ }
337
+
338
+ /**
339
+ * Related content click behavior
340
+ *
341
+ * @platform ios
342
+ */
343
+ export type RelatedOnClick = 'play' | 'link';
344
+
345
+ /**
346
+ * Related content complete behavior
347
+ *
348
+ * @platform ios
349
+ */
350
+ export type RelatedOnComplete = 'show' | 'hide' | 'autoplay';
351
+
352
+ /**
353
+ * Related content configuration for iOS
354
+ *
355
+ * @platform ios
356
+ */
357
+ export interface JWRelatedIOS {
358
+ /**
359
+ * Behavior when user clicks a related item
360
+ * @default "play"
361
+ */
362
+ onClick?: RelatedOnClick;
363
+
364
+ /**
365
+ * When to show the related content overlay
366
+ * @default "show"
367
+ */
368
+ onComplete?: RelatedOnComplete;
369
+
370
+ /**
371
+ * Heading text for related content overlay
372
+ */
373
+ heading?: string;
374
+
375
+ /**
376
+ * URL to the related content feed
377
+ */
378
+ url?: string;
379
+
380
+ /**
381
+ * Alternative naming for url
382
+ */
383
+ file?: string;
384
+
385
+ /**
386
+ * Autoplay countdown message
387
+ * Use `__title__` for the next video title and `xx` for countdown seconds
388
+ */
389
+ autoplayMessage?: string;
390
+
391
+ /**
392
+ * Autoplay countdown timer in seconds
393
+ * @default 10
394
+ */
395
+ autoplayTimer?: number;
396
+ }
397
+
398
+ /**
399
+ * Next up style configuration
400
+ *
401
+ * @platform ios
402
+ */
403
+ export interface NextUpStyle {
404
+ /**
405
+ * Offset in seconds before end of video to show next up
406
+ */
407
+ offsetSeconds?: number;
408
+
409
+ /**
410
+ * Offset as percentage of video duration
411
+ */
412
+ offsetPercentage?: number;
413
+ }
414
+
415
+ /**
416
+ * External playback settings for AirPlay
417
+ *
418
+ * @platform ios
419
+ */
420
+ export interface JWExternalPlaybackSettings {
421
+ /**
422
+ * Whether external playback is enabled
423
+ */
424
+ playbackEnabled?: boolean;
425
+
426
+ /**
427
+ * Whether to use external playback while an external screen is active
428
+ */
429
+ usesExternalPlaybackWhileExternalScreenIsActive?: boolean;
430
+
431
+ /**
432
+ * Video gravity for external playback
433
+ */
434
+ videoGravity?: 'resize' | 'resizeAspect' | 'resizeAspectFill';
435
+ }
436
+
437
+ // ============================================================================
438
+ // ANDROID-SPECIFIC TYPES
439
+ // ============================================================================
440
+
441
+ /**
442
+ * Stretching mode for video on Android
443
+ *
444
+ * @platform android
445
+ */
446
+ export type Stretching = 'uniform' | 'exactfit' | 'fill' | 'none';
447
+
448
+ /**
449
+ * Thumbnail preview quality levels
450
+ *
451
+ * @platform android
452
+ */
453
+ export type ThumbnailPreview = 101 | 102 | 103;
454
+
455
+ /**
456
+ * UI Configuration for Android
457
+ *
458
+ * Controls which UI elements are visible in the player.
459
+ * When using this, specify all elements - unspecified elements default to false.
460
+ *
461
+ * @platform android
462
+ */
463
+ export interface JWUiConfig {
464
+ /**
465
+ * Show overlay UI
466
+ * @default false
467
+ */
468
+ hasOverlay?: boolean;
469
+
470
+ /**
471
+ * Show control bar
472
+ * @default false
473
+ */
474
+ hasControlbar?: boolean;
475
+
476
+ /**
477
+ * Show center play/pause controls
478
+ * @default false
479
+ */
480
+ hasCenterControls?: boolean;
481
+
482
+ /**
483
+ * Show next up overlay
484
+ * @default false
485
+ */
486
+ hasNextUp?: boolean;
487
+
488
+ /**
489
+ * Show side seek controls
490
+ * @default false
491
+ */
492
+ hasSideSeek?: boolean;
493
+
494
+ /**
495
+ * Show logo view
496
+ * @default false
497
+ */
498
+ hasLogoView?: boolean;
499
+
500
+ /**
501
+ * Show error messages
502
+ * @default false
503
+ */
504
+ hasError?: boolean;
505
+
506
+ /**
507
+ * Show playlist UI
508
+ * @default false
509
+ */
510
+ hasPlaylist?: boolean;
511
+
512
+ /**
513
+ * Show quality submenu
514
+ * @default false
515
+ */
516
+ hasQualitySubMenu?: boolean;
517
+
518
+ /**
519
+ * Show captions submenu
520
+ * @default false
521
+ */
522
+ hasCaptionsSubMenu?: boolean;
523
+
524
+ /**
525
+ * Show playback rates submenu
526
+ * @default false
527
+ */
528
+ hasPlaybackRatesSubMenu?: boolean;
529
+
530
+ /**
531
+ * Show audio tracks submenu
532
+ * @default false
533
+ */
534
+ hasAudiotracksSubMenu?: boolean;
535
+
536
+ /**
537
+ * Show settings menu
538
+ * @default false
539
+ */
540
+ hasMenu?: boolean;
541
+
542
+ /**
543
+ * Show player controls container
544
+ * @default false
545
+ */
546
+ hasPlayerControlsContainer?: boolean;
547
+
548
+ /**
549
+ * Show casting menu
550
+ * @default false
551
+ */
552
+ hasCastingMenu?: boolean;
553
+
554
+ /**
555
+ * Show chapters UI
556
+ * @default false
557
+ */
558
+ hasChapters?: boolean;
559
+
560
+ /**
561
+ * Show ads UI
562
+ * @default false
563
+ */
564
+ hasAds?: boolean;
565
+ }
566
+
567
+ /**
568
+ * Logo position on Android
569
+ *
570
+ * @platform android
571
+ */
572
+ export type LogoPosition = 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
573
+
574
+ /**
575
+ * Logo view configuration for Android
576
+ *
577
+ * @platform android
578
+ */
579
+ export interface JWLogoView {
580
+ /**
581
+ * Path to logo image file
582
+ */
583
+ imageFile: string;
584
+
585
+ /**
586
+ * Whether logo fades in/out with controls
587
+ * Note: Margin required for fade on Android
588
+ */
589
+ fades: boolean;
590
+
591
+ /**
592
+ * Margin around logo in pixels
593
+ */
594
+ margin?: number;
595
+
596
+ /**
597
+ * Logo position
598
+ */
599
+ position?: LogoPosition;
600
+
601
+ /**
602
+ * Web link to open when logo is clicked
603
+ */
604
+ webLink: string;
605
+ }
606
+
607
+ /**
608
+ * Related content configuration for Android
609
+ *
610
+ * @platform android
611
+ */
612
+ export interface JWRelatedAndroid {
613
+ /**
614
+ * URL to the related content feed
615
+ */
616
+ file?: string;
617
+
618
+ /**
619
+ * When to show the related content overlay
620
+ */
621
+ oncomplete?: 'hide' | 'show' | 'none' | 'autoplay';
622
+
623
+ /**
624
+ * Behavior when user clicks a related item
625
+ */
626
+ onclick?: 'play' | 'link';
627
+
628
+ /**
629
+ * Autoplay countdown timer in seconds
630
+ */
631
+ autoplaytimer: number;
632
+ }
633
+
634
+ /**
635
+ * Unified related content configuration
636
+ * Supports both iOS and Android structures
637
+ *
638
+ * @platforms iOS, Android
639
+ */
640
+ export type JWRelatedConfig = JWRelatedIOS | JWRelatedAndroid;
641
+