@livepeer-frameworks/player-react 0.1.0 → 0.1.2

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 (187) hide show
  1. package/README.md +7 -9
  2. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +359 -0
  3. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  4. package/dist/cjs/assets/logomark.svg.js +8 -0
  5. package/dist/cjs/assets/logomark.svg.js.map +1 -0
  6. package/dist/cjs/components/DevModePanel.js +826 -0
  7. package/dist/cjs/components/DevModePanel.js.map +1 -0
  8. package/dist/cjs/components/DvdLogo.js +200 -0
  9. package/dist/cjs/components/DvdLogo.js.map +1 -0
  10. package/dist/cjs/components/Icons.js +439 -0
  11. package/dist/cjs/components/Icons.js.map +1 -0
  12. package/dist/cjs/components/IdleScreen.js +587 -0
  13. package/dist/cjs/components/IdleScreen.js.map +1 -0
  14. package/dist/cjs/components/LoadingScreen.js +523 -0
  15. package/dist/cjs/components/LoadingScreen.js.map +1 -0
  16. package/dist/cjs/components/Player.js +420 -0
  17. package/dist/cjs/components/Player.js.map +1 -0
  18. package/dist/cjs/components/PlayerControls.js +798 -0
  19. package/dist/cjs/components/PlayerControls.js.map +1 -0
  20. package/dist/cjs/components/PlayerErrorBoundary.js +80 -0
  21. package/dist/cjs/components/PlayerErrorBoundary.js.map +1 -0
  22. package/dist/cjs/components/SeekBar.js +253 -0
  23. package/dist/cjs/components/SeekBar.js.map +1 -0
  24. package/dist/cjs/components/SkipIndicator.js +92 -0
  25. package/dist/cjs/components/SkipIndicator.js.map +1 -0
  26. package/dist/cjs/components/SpeedIndicator.js +43 -0
  27. package/dist/cjs/components/SpeedIndicator.js.map +1 -0
  28. package/dist/cjs/components/StatsPanel.js +202 -0
  29. package/dist/cjs/components/StatsPanel.js.map +1 -0
  30. package/dist/cjs/components/StreamStateOverlay.js +229 -0
  31. package/dist/cjs/components/StreamStateOverlay.js.map +1 -0
  32. package/dist/cjs/components/ThumbnailOverlay.js +86 -0
  33. package/dist/cjs/components/ThumbnailOverlay.js.map +1 -0
  34. package/dist/cjs/components/TitleOverlay.js +32 -0
  35. package/dist/cjs/components/TitleOverlay.js.map +1 -0
  36. package/dist/cjs/context/PlayerContext.js +46 -0
  37. package/dist/cjs/context/PlayerContext.js.map +1 -0
  38. package/dist/cjs/hooks/useMetaTrack.js +165 -0
  39. package/dist/cjs/hooks/useMetaTrack.js.map +1 -0
  40. package/dist/cjs/hooks/usePlaybackQuality.js +131 -0
  41. package/dist/cjs/hooks/usePlaybackQuality.js.map +1 -0
  42. package/dist/cjs/hooks/usePlayerController.js +518 -0
  43. package/dist/cjs/hooks/usePlayerController.js.map +1 -0
  44. package/dist/cjs/hooks/usePlayerSelection.js +90 -0
  45. package/dist/cjs/hooks/usePlayerSelection.js.map +1 -0
  46. package/dist/cjs/hooks/useStreamState.js +360 -0
  47. package/dist/cjs/hooks/useStreamState.js.map +1 -0
  48. package/dist/cjs/hooks/useTelemetry.js +120 -0
  49. package/dist/cjs/hooks/useTelemetry.js.map +1 -0
  50. package/dist/cjs/hooks/useViewerEndpoints.js +222 -0
  51. package/dist/cjs/hooks/useViewerEndpoints.js.map +1 -0
  52. package/dist/cjs/index.js +97 -1
  53. package/dist/cjs/index.js.map +1 -1
  54. package/dist/cjs/ui/badge.js +34 -0
  55. package/dist/cjs/ui/badge.js.map +1 -0
  56. package/dist/cjs/ui/button.js +74 -0
  57. package/dist/cjs/ui/button.js.map +1 -0
  58. package/dist/cjs/ui/context-menu.js +163 -0
  59. package/dist/cjs/ui/context-menu.js.map +1 -0
  60. package/dist/cjs/ui/slider.js +60 -0
  61. package/dist/cjs/ui/slider.js.map +1 -0
  62. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +329 -0
  63. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  64. package/dist/esm/assets/logomark.svg.js +4 -0
  65. package/dist/esm/assets/logomark.svg.js.map +1 -0
  66. package/dist/esm/components/DevModePanel.js +822 -0
  67. package/dist/esm/components/DevModePanel.js.map +1 -0
  68. package/dist/esm/components/DvdLogo.js +196 -0
  69. package/dist/esm/components/DvdLogo.js.map +1 -0
  70. package/dist/esm/components/Icons.js +421 -0
  71. package/dist/esm/components/Icons.js.map +1 -0
  72. package/dist/esm/components/IdleScreen.js +582 -0
  73. package/dist/esm/components/IdleScreen.js.map +1 -0
  74. package/dist/esm/components/LoadingScreen.js +519 -0
  75. package/dist/esm/components/LoadingScreen.js.map +1 -0
  76. package/dist/esm/components/Player.js +416 -0
  77. package/dist/esm/components/Player.js.map +1 -0
  78. package/dist/esm/components/PlayerControls.js +794 -0
  79. package/dist/esm/components/PlayerControls.js.map +1 -0
  80. package/dist/esm/components/PlayerErrorBoundary.js +76 -0
  81. package/dist/esm/components/PlayerErrorBoundary.js.map +1 -0
  82. package/dist/esm/components/SeekBar.js +249 -0
  83. package/dist/esm/components/SeekBar.js.map +1 -0
  84. package/dist/esm/components/SkipIndicator.js +88 -0
  85. package/dist/esm/components/SkipIndicator.js.map +1 -0
  86. package/dist/esm/components/SpeedIndicator.js +39 -0
  87. package/dist/esm/components/SpeedIndicator.js.map +1 -0
  88. package/dist/esm/components/StatsPanel.js +198 -0
  89. package/dist/esm/components/StatsPanel.js.map +1 -0
  90. package/dist/esm/components/StreamStateOverlay.js +224 -0
  91. package/dist/esm/components/StreamStateOverlay.js.map +1 -0
  92. package/dist/esm/components/ThumbnailOverlay.js +82 -0
  93. package/dist/esm/components/ThumbnailOverlay.js.map +1 -0
  94. package/dist/esm/components/TitleOverlay.js +28 -0
  95. package/dist/esm/components/TitleOverlay.js.map +1 -0
  96. package/dist/esm/context/PlayerContext.js +41 -0
  97. package/dist/esm/context/PlayerContext.js.map +1 -0
  98. package/dist/esm/hooks/useMetaTrack.js +163 -0
  99. package/dist/esm/hooks/useMetaTrack.js.map +1 -0
  100. package/dist/esm/hooks/usePlaybackQuality.js +129 -0
  101. package/dist/esm/hooks/usePlaybackQuality.js.map +1 -0
  102. package/dist/esm/hooks/usePlayerController.js +516 -0
  103. package/dist/esm/hooks/usePlayerController.js.map +1 -0
  104. package/dist/esm/hooks/usePlayerSelection.js +88 -0
  105. package/dist/esm/hooks/usePlayerSelection.js.map +1 -0
  106. package/dist/esm/hooks/useStreamState.js +358 -0
  107. package/dist/esm/hooks/useStreamState.js.map +1 -0
  108. package/dist/esm/hooks/useTelemetry.js +118 -0
  109. package/dist/esm/hooks/useTelemetry.js.map +1 -0
  110. package/dist/esm/hooks/useViewerEndpoints.js +220 -0
  111. package/dist/esm/hooks/useViewerEndpoints.js.map +1 -0
  112. package/dist/esm/index.js +23 -1
  113. package/dist/esm/index.js.map +1 -1
  114. package/dist/esm/ui/badge.js +31 -0
  115. package/dist/esm/ui/badge.js.map +1 -0
  116. package/dist/esm/ui/button.js +52 -0
  117. package/dist/esm/ui/button.js.map +1 -0
  118. package/dist/esm/ui/context-menu.js +132 -0
  119. package/dist/esm/ui/context-menu.js.map +1 -0
  120. package/dist/esm/ui/slider.js +38 -0
  121. package/dist/esm/ui/slider.js.map +1 -0
  122. package/dist/types/components/DvdLogo.d.ts +1 -1
  123. package/dist/types/components/Icons.d.ts +1 -1
  124. package/dist/types/components/Player.d.ts +1 -1
  125. package/dist/types/components/PlayerErrorBoundary.d.ts +2 -1
  126. package/dist/types/components/StreamStateOverlay.d.ts +2 -2
  127. package/dist/types/components/SubtitleRenderer.d.ts +2 -2
  128. package/dist/types/context/PlayerContext.d.ts +2 -2
  129. package/dist/types/context/index.d.ts +2 -2
  130. package/dist/types/hooks/useMetaTrack.d.ts +3 -3
  131. package/dist/types/hooks/usePlaybackQuality.d.ts +2 -2
  132. package/dist/types/hooks/usePlayerController.d.ts +26 -3
  133. package/dist/types/hooks/usePlayerSelection.d.ts +1 -1
  134. package/dist/types/hooks/useStreamState.d.ts +1 -1
  135. package/dist/types/hooks/useTelemetry.d.ts +1 -1
  136. package/dist/types/hooks/useViewerEndpoints.d.ts +3 -3
  137. package/dist/types/index.d.ts +28 -28
  138. package/dist/types/types.d.ts +3 -3
  139. package/dist/types/ui/select.d.ts +1 -1
  140. package/package.json +22 -14
  141. package/src/components/DevModePanel.tsx +244 -143
  142. package/src/components/DvdLogo.tsx +1 -1
  143. package/src/components/Icons.tsx +105 -25
  144. package/src/components/IdleScreen.tsx +262 -128
  145. package/src/components/LoadingScreen.tsx +169 -151
  146. package/src/components/LogoOverlay.tsx +3 -6
  147. package/src/components/Player.tsx +126 -59
  148. package/src/components/PlayerControls.tsx +384 -272
  149. package/src/components/PlayerErrorBoundary.tsx +7 -13
  150. package/src/components/SeekBar.tsx +96 -88
  151. package/src/components/SkipIndicator.tsx +2 -12
  152. package/src/components/SpeedIndicator.tsx +2 -11
  153. package/src/components/StatsPanel.tsx +31 -22
  154. package/src/components/StreamStateOverlay.tsx +105 -49
  155. package/src/components/SubtitleRenderer.tsx +29 -29
  156. package/src/components/ThumbnailOverlay.tsx +5 -6
  157. package/src/components/TitleOverlay.tsx +2 -8
  158. package/src/context/PlayerContext.tsx +4 -8
  159. package/src/context/index.ts +3 -3
  160. package/src/hooks/useMetaTrack.ts +27 -27
  161. package/src/hooks/usePlaybackQuality.ts +3 -3
  162. package/src/hooks/usePlayerController.ts +246 -138
  163. package/src/hooks/usePlayerSelection.ts +6 -6
  164. package/src/hooks/useStreamState.ts +51 -56
  165. package/src/hooks/useTelemetry.ts +18 -3
  166. package/src/hooks/useViewerEndpoints.ts +34 -23
  167. package/src/index.tsx +36 -28
  168. package/src/types.ts +8 -8
  169. package/src/ui/badge.tsx +6 -5
  170. package/src/ui/button.tsx +9 -8
  171. package/src/ui/context-menu.tsx +42 -61
  172. package/src/ui/select.tsx +13 -7
  173. package/src/ui/slider.tsx +18 -29
  174. package/dist/types/components/players/DashJsPlayer.d.ts +0 -18
  175. package/dist/types/components/players/HlsJsPlayer.d.ts +0 -18
  176. package/dist/types/components/players/MewsWsPlayer/index.d.ts +0 -18
  177. package/dist/types/components/players/MistPlayer.d.ts +0 -20
  178. package/dist/types/components/players/MistWebRTCPlayer/index.d.ts +0 -20
  179. package/dist/types/components/players/NativePlayer.d.ts +0 -19
  180. package/dist/types/components/players/VideoJsPlayer.d.ts +0 -18
  181. package/src/components/players/DashJsPlayer.tsx +0 -56
  182. package/src/components/players/HlsJsPlayer.tsx +0 -56
  183. package/src/components/players/MewsWsPlayer/index.tsx +0 -56
  184. package/src/components/players/MistPlayer.tsx +0 -60
  185. package/src/components/players/MistWebRTCPlayer/index.tsx +0 -59
  186. package/src/components/players/NativePlayer.tsx +0 -58
  187. package/src/components/players/VideoJsPlayer.tsx +0 -56
@@ -1,40 +1,36 @@
1
- import * as React from "react"
2
- import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
3
- import { Check, ChevronRight, Circle } from "lucide-react"
4
- import { cn } from "@livepeer-frameworks/player-core"
1
+ import * as React from "react";
2
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
3
+ import { Check, ChevronRight, Circle } from "lucide-react";
4
+ import { cn } from "@livepeer-frameworks/player-core";
5
5
 
6
- const ContextMenu = ContextMenuPrimitive.Root
6
+ const ContextMenu = ContextMenuPrimitive.Root;
7
7
 
8
- const ContextMenuTrigger = ContextMenuPrimitive.Trigger
8
+ const ContextMenuTrigger = ContextMenuPrimitive.Trigger;
9
9
 
10
- const ContextMenuGroup = ContextMenuPrimitive.Group
10
+ const ContextMenuGroup = ContextMenuPrimitive.Group;
11
11
 
12
- const ContextMenuPortal = ContextMenuPrimitive.Portal
12
+ const ContextMenuPortal = ContextMenuPrimitive.Portal;
13
13
 
14
- const ContextMenuSub = ContextMenuPrimitive.Sub
14
+ const ContextMenuSub = ContextMenuPrimitive.Sub;
15
15
 
16
- const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
16
+ const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
17
17
 
18
18
  const ContextMenuSubTrigger = React.forwardRef<
19
19
  React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,
20
20
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {
21
- inset?: boolean
21
+ inset?: boolean;
22
22
  }
23
23
  >(({ className, inset, children, ...props }, ref) => (
24
24
  <ContextMenuPrimitive.SubTrigger
25
25
  ref={ref}
26
- className={cn(
27
- "fw-context-menu-item",
28
- inset && "fw-context-menu-item--inset",
29
- className
30
- )}
26
+ className={cn("fw-context-menu-item", inset && "fw-context-menu-item--inset", className)}
31
27
  {...props}
32
28
  >
33
29
  {children}
34
30
  <ChevronRight className="ml-auto h-4 w-4" />
35
31
  </ContextMenuPrimitive.SubTrigger>
36
- ))
37
- ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName
32
+ ));
33
+ ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName;
38
34
 
39
35
  const ContextMenuSubContent = React.forwardRef<
40
36
  React.ElementRef<typeof ContextMenuPrimitive.SubContent>,
@@ -45,8 +41,8 @@ const ContextMenuSubContent = React.forwardRef<
45
41
  className={cn("fw-player-surface fw-context-menu", className)}
46
42
  {...props}
47
43
  />
48
- ))
49
- ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName
44
+ ));
45
+ ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName;
50
46
 
51
47
  const ContextMenuContent = React.forwardRef<
52
48
  React.ElementRef<typeof ContextMenuPrimitive.Content>,
@@ -59,34 +55,30 @@ const ContextMenuContent = React.forwardRef<
59
55
  style={{
60
56
  // Inline styles for portal elements (rendered outside .fw-player-root)
61
57
  // These ensure styles work even without CSS variable inheritance
62
- backgroundColor: 'hsl(235 19% 13%)',
63
- color: 'hsl(229 35% 75%)',
64
- border: '1px solid rgba(90, 96, 127, 0.3)',
65
- ...style
58
+ backgroundColor: "hsl(235 19% 13%)",
59
+ color: "hsl(229 35% 75%)",
60
+ border: "1px solid rgba(90, 96, 127, 0.3)",
61
+ ...style,
66
62
  }}
67
63
  {...props}
68
64
  />
69
65
  </ContextMenuPrimitive.Portal>
70
- ))
71
- ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName
66
+ ));
67
+ ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName;
72
68
 
73
69
  const ContextMenuItem = React.forwardRef<
74
70
  React.ElementRef<typeof ContextMenuPrimitive.Item>,
75
71
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {
76
- inset?: boolean
72
+ inset?: boolean;
77
73
  }
78
74
  >(({ className, inset, ...props }, ref) => (
79
75
  <ContextMenuPrimitive.Item
80
76
  ref={ref}
81
- className={cn(
82
- "fw-context-menu-item",
83
- inset && "fw-context-menu-item--inset",
84
- className
85
- )}
77
+ className={cn("fw-context-menu-item", inset && "fw-context-menu-item--inset", className)}
86
78
  {...props}
87
79
  />
88
- ))
89
- ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName
80
+ ));
81
+ ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName;
90
82
 
91
83
  const ContextMenuCheckboxItem = React.forwardRef<
92
84
  React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,
@@ -105,9 +97,8 @@ const ContextMenuCheckboxItem = React.forwardRef<
105
97
  </span>
106
98
  {children}
107
99
  </ContextMenuPrimitive.CheckboxItem>
108
- ))
109
- ContextMenuCheckboxItem.displayName =
110
- ContextMenuPrimitive.CheckboxItem.displayName
100
+ ));
101
+ ContextMenuCheckboxItem.displayName = ContextMenuPrimitive.CheckboxItem.displayName;
111
102
 
112
103
  const ContextMenuRadioItem = React.forwardRef<
113
104
  React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,
@@ -125,26 +116,22 @@ const ContextMenuRadioItem = React.forwardRef<
125
116
  </span>
126
117
  {children}
127
118
  </ContextMenuPrimitive.RadioItem>
128
- ))
129
- ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName
119
+ ));
120
+ ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName;
130
121
 
131
122
  const ContextMenuLabel = React.forwardRef<
132
123
  React.ElementRef<typeof ContextMenuPrimitive.Label>,
133
124
  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {
134
- inset?: boolean
125
+ inset?: boolean;
135
126
  }
136
127
  >(({ className, inset, ...props }, ref) => (
137
128
  <ContextMenuPrimitive.Label
138
129
  ref={ref}
139
- className={cn(
140
- "fw-context-menu-label",
141
- inset && "fw-context-menu-item--inset",
142
- className
143
- )}
130
+ className={cn("fw-context-menu-label", inset && "fw-context-menu-item--inset", className)}
144
131
  {...props}
145
132
  />
146
- ))
147
- ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName
133
+ ));
134
+ ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName;
148
135
 
149
136
  const ContextMenuSeparator = React.forwardRef<
150
137
  React.ElementRef<typeof ContextMenuPrimitive.Separator>,
@@ -155,24 +142,18 @@ const ContextMenuSeparator = React.forwardRef<
155
142
  className={cn("fw-context-menu-separator", className)}
156
143
  {...props}
157
144
  />
158
- ))
159
- ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName
145
+ ));
146
+ ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName;
160
147
 
161
- const ContextMenuShortcut = ({
162
- className,
163
- ...props
164
- }: React.HTMLAttributes<HTMLSpanElement>) => {
148
+ const ContextMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {
165
149
  return (
166
150
  <span
167
- className={cn(
168
- "ml-auto text-xs tracking-widest text-muted-foreground",
169
- className
170
- )}
151
+ className={cn("ml-auto text-xs tracking-widest text-muted-foreground", className)}
171
152
  {...props}
172
153
  />
173
- )
174
- }
175
- ContextMenuShortcut.displayName = "ContextMenuShortcut"
154
+ );
155
+ };
156
+ ContextMenuShortcut.displayName = "ContextMenuShortcut";
176
157
 
177
158
  export {
178
159
  ContextMenu,
@@ -190,4 +171,4 @@ export {
190
171
  ContextMenuSubContent,
191
172
  ContextMenuSubTrigger,
192
173
  ContextMenuRadioGroup,
193
- }
174
+ };
package/src/ui/select.tsx CHANGED
@@ -41,13 +41,11 @@ const SelectContent = React.forwardRef<
41
41
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1",
42
42
  className
43
43
  )}
44
- style={{ backgroundColor: '#1a1b26' }} // Inline fallback for opaque background
44
+ style={{ backgroundColor: "#1a1b26" }} // Inline fallback for opaque background
45
45
  position={position}
46
46
  {...props}
47
47
  >
48
- <SelectPrimitive.Viewport className="p-1">
49
- {children}
50
- </SelectPrimitive.Viewport>
48
+ <SelectPrimitive.Viewport className="p-1">{children}</SelectPrimitive.Viewport>
51
49
  </SelectPrimitive.Content>
52
50
  </SelectPrimitive.Portal>
53
51
  ));
@@ -82,7 +80,11 @@ const SelectLabel = React.forwardRef<
82
80
  React.ElementRef<typeof SelectPrimitive.Label>,
83
81
  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
84
82
  >(({ className, ...props }, ref) => (
85
- <SelectPrimitive.Label ref={ref} className={cn("px-2 py-1.5 text-xs font-semibold text-muted-foreground", className)} {...props} />
83
+ <SelectPrimitive.Label
84
+ ref={ref}
85
+ className={cn("px-2 py-1.5 text-xs font-semibold text-muted-foreground", className)}
86
+ {...props}
87
+ />
86
88
  ));
87
89
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
88
90
 
@@ -90,7 +92,11 @@ const SelectSeparator = React.forwardRef<
90
92
  React.ElementRef<typeof SelectPrimitive.Separator>,
91
93
  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
92
94
  >(({ className, ...props }, ref) => (
93
- <SelectPrimitive.Separator ref={ref} className={cn("-mx-1 my-1 h-px bg-muted", className)} {...props} />
95
+ <SelectPrimitive.Separator
96
+ ref={ref}
97
+ className={cn("-mx-1 my-1 h-px bg-muted", className)}
98
+ {...props}
99
+ />
94
100
  ));
95
101
  SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
96
102
 
@@ -101,5 +107,5 @@ export {
101
107
  SelectLabel,
102
108
  SelectSeparator,
103
109
  SelectTrigger,
104
- SelectValue
110
+ SelectValue,
105
111
  };
package/src/ui/slider.tsx CHANGED
@@ -13,48 +13,37 @@ export interface SliderProps extends React.ComponentPropsWithoutRef<typeof Slide
13
13
  }
14
14
 
15
15
  const Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(
16
- ({ className, trackClassName, thumbClassName, showTrack = true, hoverThumb: _hoverThumb = false, accentColor = false, orientation = "horizontal", ...props }, ref) => {
17
- // Colors based on accentColor prop
18
- const rangeColorClass = accentColor ? "bg-[hsl(var(--tn-cyan,195_100%_50%))]" : "bg-white/90";
19
- const thumbColorClass = accentColor ? "bg-[hsl(var(--tn-cyan,195_100%_50%))]" : "bg-white";
20
-
16
+ (
17
+ {
18
+ className,
19
+ trackClassName,
20
+ thumbClassName,
21
+ showTrack = true,
22
+ hoverThumb: _hoverThumb = false,
23
+ accentColor = false,
24
+ orientation = "horizontal",
25
+ ...props
26
+ },
27
+ ref
28
+ ) => {
21
29
  return (
22
30
  <SliderPrimitive.Root
23
31
  ref={ref}
24
32
  orientation={orientation}
25
- className={cn(
26
- "group relative flex touch-none select-none items-center cursor-pointer",
27
- orientation === "horizontal" ? "w-full h-5" : "h-full flex-col w-5",
28
- className
29
- )}
33
+ className={cn("fw-slider", orientation === "vertical" && "fw-slider--vertical", className)}
30
34
  {...props}
31
35
  >
32
36
  {showTrack && (
33
- <SliderPrimitive.Track
34
- className={cn(
35
- "absolute rounded-full bg-white/30 transition-all duration-150",
36
- orientation === "horizontal"
37
- ? "inset-x-0 h-1 group-hover:h-1.5"
38
- : "inset-y-0 w-1 group-hover:w-1.5",
39
- trackClassName
40
- )}
41
- >
37
+ <SliderPrimitive.Track className={cn("fw-slider-track", trackClassName)}>
42
38
  <SliderPrimitive.Range
43
- className={cn(
44
- "absolute rounded-full transition-all duration-150",
45
- orientation === "horizontal" ? "h-full" : "w-full bottom-0",
46
- rangeColorClass
47
- )}
39
+ className={cn("fw-slider-range", accentColor && "fw-slider-range--accent")}
48
40
  />
49
41
  </SliderPrimitive.Track>
50
42
  )}
51
43
  <SliderPrimitive.Thumb
52
44
  className={cn(
53
- "block rounded-full border-0 cursor-pointer shadow-md transition-all duration-150",
54
- "w-2.5 h-2.5 group-hover:w-3.5 group-hover:h-3.5",
55
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/50",
56
- "disabled:pointer-events-none disabled:opacity-50",
57
- thumbColorClass,
45
+ "fw-slider-thumb",
46
+ accentColor && "fw-slider-thumb--accent",
58
47
  thumbClassName
59
48
  )}
60
49
  />
@@ -1,18 +0,0 @@
1
- /**
2
- * DASH.js Player - React Wrapper
3
- *
4
- * MPEG-DASH streaming via dash.js library.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { DashJsPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { DashJsPlayerImpl };
10
- type Props = {
11
- src: string;
12
- muted?: boolean;
13
- autoPlay?: boolean;
14
- controls?: boolean;
15
- onError?: (e: Error) => void;
16
- };
17
- declare const DashJsPlayer: React.FC<Props>;
18
- export default DashJsPlayer;
@@ -1,18 +0,0 @@
1
- /**
2
- * HLS.js Player - React Wrapper
3
- *
4
- * Adaptive HLS streaming via hls.js library.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { HlsJsPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { HlsJsPlayerImpl };
10
- type Props = {
11
- src: string;
12
- muted?: boolean;
13
- autoPlay?: boolean;
14
- controls?: boolean;
15
- onError?: (e: Error) => void;
16
- };
17
- declare const HlsJsPlayer: React.FC<Props>;
18
- export default HlsJsPlayer;
@@ -1,18 +0,0 @@
1
- /**
2
- * MEWS WebSocket Player - React Wrapper
3
- *
4
- * Low-latency WebSocket MP4 streaming using MediaSource Extensions.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { MewsWsPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { MewsWsPlayerImpl };
10
- type Props = {
11
- wsUrl: string;
12
- muted?: boolean;
13
- autoPlay?: boolean;
14
- controls?: boolean;
15
- onError?: (e: Error) => void;
16
- };
17
- declare const MewsWsPlayer: React.FC<Props>;
18
- export default MewsWsPlayer;
@@ -1,20 +0,0 @@
1
- /**
2
- * MistServer Legacy Player - React Wrapper
3
- *
4
- * Fallback player using MistServer's native player.js.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { MistPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { MistPlayerImpl };
10
- type Props = {
11
- src: string;
12
- streamName?: string;
13
- muted?: boolean;
14
- autoPlay?: boolean;
15
- controls?: boolean;
16
- devMode?: boolean;
17
- onError?: (e: Error) => void;
18
- };
19
- declare const MistPlayer: React.FC<Props>;
20
- export default MistPlayer;
@@ -1,20 +0,0 @@
1
- /**
2
- * MistWebRTC Player - React Wrapper
3
- *
4
- * MistServer native WebRTC with signaling for DVR support.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { MistWebRTCPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { MistWebRTCPlayerImpl };
10
- interface Props {
11
- src: string;
12
- autoPlay?: boolean;
13
- muted?: boolean;
14
- controls?: boolean;
15
- poster?: string;
16
- onReady?: (video: HTMLVideoElement) => void;
17
- onError?: (error: Error) => void;
18
- }
19
- export declare const MistWebRTCPlayer: React.FC<Props>;
20
- export default MistWebRTCPlayerImpl;
@@ -1,19 +0,0 @@
1
- /**
2
- * Native Player - React Wrapper
3
- *
4
- * HTML5 video and WHEP WebRTC playback.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { NativePlayerImpl, DirectPlaybackPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { NativePlayerImpl, DirectPlaybackPlayerImpl };
10
- type Props = {
11
- src: string;
12
- type?: string;
13
- muted?: boolean;
14
- autoPlay?: boolean;
15
- controls?: boolean;
16
- onError?: (e: Error) => void;
17
- };
18
- declare const NativePlayer: React.FC<Props>;
19
- export default NativePlayer;
@@ -1,18 +0,0 @@
1
- /**
2
- * Video.js Player - React Wrapper
3
- *
4
- * HLS streaming via Video.js with VHS (videojs-http-streaming).
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
- import React from 'react';
8
- import { VideoJsPlayerImpl } from '@livepeer-frameworks/player-core';
9
- export { VideoJsPlayerImpl };
10
- type Props = {
11
- src: string;
12
- muted?: boolean;
13
- autoPlay?: boolean;
14
- controls?: boolean;
15
- onError?: (e: Error) => void;
16
- };
17
- declare const VideoJsPlayer: React.FC<Props>;
18
- export default VideoJsPlayer;
@@ -1,56 +0,0 @@
1
- /**
2
- * DASH.js Player - React Wrapper
3
- *
4
- * MPEG-DASH streaming via dash.js library.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
-
8
- import React, { useEffect, useRef } from 'react';
9
- import { DashJsPlayerImpl } from '@livepeer-frameworks/player-core';
10
-
11
- // Re-export the implementation from core for backwards compatibility
12
- export { DashJsPlayerImpl };
13
-
14
- type Props = {
15
- src: string;
16
- muted?: boolean;
17
- autoPlay?: boolean;
18
- controls?: boolean;
19
- onError?: (e: Error) => void;
20
- };
21
-
22
- // React component wrapper
23
- const DashJsPlayer: React.FC<Props> = ({
24
- src,
25
- muted = true,
26
- autoPlay = true,
27
- controls = true,
28
- onError
29
- }) => {
30
- const containerRef = useRef<HTMLDivElement>(null);
31
- const playerRef = useRef<DashJsPlayerImpl | null>(null);
32
-
33
- useEffect(() => {
34
- if (!containerRef.current) return;
35
-
36
- const player = new DashJsPlayerImpl();
37
- playerRef.current = player;
38
-
39
- player.initialize(
40
- containerRef.current,
41
- { url: src, type: 'dash/video/mp4' },
42
- { autoplay: autoPlay, muted, controls }
43
- ).catch((e) => {
44
- onError?.(e instanceof Error ? e : new Error(String(e)));
45
- });
46
-
47
- return () => {
48
- player.destroy();
49
- playerRef.current = null;
50
- };
51
- }, [src, muted, autoPlay, controls, onError]);
52
-
53
- return <div ref={containerRef} style={{ width: '100%', height: '100%' }} />;
54
- };
55
-
56
- export default DashJsPlayer;
@@ -1,56 +0,0 @@
1
- /**
2
- * HLS.js Player - React Wrapper
3
- *
4
- * Adaptive HLS streaming via hls.js library.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
-
8
- import React, { useEffect, useRef } from 'react';
9
- import { HlsJsPlayerImpl } from '@livepeer-frameworks/player-core';
10
-
11
- // Re-export the implementation from core for backwards compatibility
12
- export { HlsJsPlayerImpl };
13
-
14
- type Props = {
15
- src: string;
16
- muted?: boolean;
17
- autoPlay?: boolean;
18
- controls?: boolean;
19
- onError?: (e: Error) => void;
20
- };
21
-
22
- // React component wrapper
23
- const HlsJsPlayer: React.FC<Props> = ({
24
- src,
25
- muted = true,
26
- autoPlay = true,
27
- controls = true,
28
- onError
29
- }) => {
30
- const containerRef = useRef<HTMLDivElement>(null);
31
- const playerRef = useRef<HlsJsPlayerImpl | null>(null);
32
-
33
- useEffect(() => {
34
- if (!containerRef.current) return;
35
-
36
- const player = new HlsJsPlayerImpl();
37
- playerRef.current = player;
38
-
39
- player.initialize(
40
- containerRef.current,
41
- { url: src, type: 'html5/application/vnd.apple.mpegurl' },
42
- { autoplay: autoPlay, muted, controls }
43
- ).catch((e) => {
44
- onError?.(e instanceof Error ? e : new Error(String(e)));
45
- });
46
-
47
- return () => {
48
- player.destroy();
49
- playerRef.current = null;
50
- };
51
- }, [src, muted, autoPlay, controls, onError]);
52
-
53
- return <div ref={containerRef} style={{ width: '100%', height: '100%' }} />;
54
- };
55
-
56
- export default HlsJsPlayer;
@@ -1,56 +0,0 @@
1
- /**
2
- * MEWS WebSocket Player - React Wrapper
3
- *
4
- * Low-latency WebSocket MP4 streaming using MediaSource Extensions.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
-
8
- import React, { useEffect, useRef } from 'react';
9
- import { MewsWsPlayerImpl } from '@livepeer-frameworks/player-core';
10
-
11
- // Re-export the implementation from core for backwards compatibility
12
- export { MewsWsPlayerImpl };
13
-
14
- type Props = {
15
- wsUrl: string;
16
- muted?: boolean;
17
- autoPlay?: boolean;
18
- controls?: boolean;
19
- onError?: (e: Error) => void;
20
- };
21
-
22
- // React component wrapper
23
- const MewsWsPlayer: React.FC<Props> = ({
24
- wsUrl,
25
- muted = true,
26
- autoPlay = true,
27
- controls = true,
28
- onError
29
- }) => {
30
- const containerRef = useRef<HTMLDivElement>(null);
31
- const playerRef = useRef<MewsWsPlayerImpl | null>(null);
32
-
33
- useEffect(() => {
34
- if (!containerRef.current) return;
35
-
36
- const player = new MewsWsPlayerImpl();
37
- playerRef.current = player;
38
-
39
- player.initialize(
40
- containerRef.current,
41
- { url: wsUrl, type: 'ws/video/mp4' },
42
- { autoplay: autoPlay, muted, controls }
43
- ).catch((e) => {
44
- onError?.(e instanceof Error ? e : new Error(String(e)));
45
- });
46
-
47
- return () => {
48
- player.destroy();
49
- playerRef.current = null;
50
- };
51
- }, [wsUrl, muted, autoPlay, controls, onError]);
52
-
53
- return <div ref={containerRef} style={{ width: '100%', height: '100%' }} />;
54
- };
55
-
56
- export default MewsWsPlayer;
@@ -1,60 +0,0 @@
1
- /**
2
- * MistServer Legacy Player - React Wrapper
3
- *
4
- * Fallback player using MistServer's native player.js.
5
- * The implementation is in @livepeer-frameworks/player-core.
6
- */
7
-
8
- import React, { useEffect, useRef } from 'react';
9
- import { MistPlayerImpl } from '@livepeer-frameworks/player-core';
10
-
11
- // Re-export the implementation from core for backwards compatibility
12
- export { MistPlayerImpl };
13
-
14
- type Props = {
15
- src: string;
16
- streamName?: string;
17
- muted?: boolean;
18
- autoPlay?: boolean;
19
- controls?: boolean;
20
- devMode?: boolean;
21
- onError?: (e: Error) => void;
22
- };
23
-
24
- // React component wrapper
25
- const MistPlayer: React.FC<Props> = ({
26
- src,
27
- streamName,
28
- muted = true,
29
- autoPlay = true,
30
- controls = true,
31
- devMode = false,
32
- onError
33
- }) => {
34
- const containerRef = useRef<HTMLDivElement>(null);
35
- const playerRef = useRef<MistPlayerImpl | null>(null);
36
-
37
- useEffect(() => {
38
- if (!containerRef.current) return;
39
-
40
- const player = new MistPlayerImpl();
41
- playerRef.current = player;
42
-
43
- player.initialize(
44
- containerRef.current,
45
- { url: src, type: 'mist/legacy', streamName },
46
- { autoplay: autoPlay, muted, controls, devMode }
47
- ).catch((e) => {
48
- onError?.(e instanceof Error ? e : new Error(String(e)));
49
- });
50
-
51
- return () => {
52
- player.destroy();
53
- playerRef.current = null;
54
- };
55
- }, [src, streamName, muted, autoPlay, controls, devMode, onError]);
56
-
57
- return <div ref={containerRef} style={{ width: '100%', height: '100%' }} />;
58
- };
59
-
60
- export default MistPlayer;