@scarlett-player/embed 0.1.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.
package/README.md ADDED
@@ -0,0 +1,315 @@
1
+ # @scarlett-player/embed
2
+
3
+ Standalone, CDN-ready embed package for Scarlett Player. Drop in a single `<script>` tag and start streaming.
4
+
5
+ ## Features
6
+
7
+ - **Zero Dependencies** - Self-contained bundle with everything included
8
+ - **Auto-initialization** - Finds and initializes players automatically
9
+ - **Data Attributes** - Configure players via HTML attributes
10
+ - **Global API** - Programmatic control via `window.ScarlettPlayer`
11
+ - **Multi-tenant Ready** - Brand customization via data attributes
12
+ - **iframe Support** - Helper page for URL-based iframe embeds
13
+
14
+ ## Installation
15
+
16
+ ### CDN Usage (Recommended for Embeds)
17
+
18
+ ```html
19
+ <!-- UMD Bundle (works everywhere) -->
20
+ <script src="https://cdn.example.com/scarlett-player/embed.umd.cjs"></script>
21
+
22
+ <!-- ES Module (for modern browsers) -->
23
+ <script type="module" src="https://cdn.example.com/scarlett-player/embed.js"></script>
24
+ ```
25
+
26
+ ### NPM Installation
27
+
28
+ ```bash
29
+ npm install @scarlett-player/embed
30
+ # or
31
+ pnpm add @scarlett-player/embed
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ### 1. Declarative (Data Attributes)
37
+
38
+ The simplest way to embed a player. Just add the script and use data attributes:
39
+
40
+ ```html
41
+ <!DOCTYPE html>
42
+ <html>
43
+ <head>
44
+ <script src="https://cdn.example.com/scarlett-player/embed.umd.cjs"></script>
45
+ </head>
46
+ <body>
47
+ <!-- Basic player -->
48
+ <div
49
+ data-scarlett-player
50
+ data-src="https://example.com/stream.m3u8"
51
+ ></div>
52
+
53
+ <!-- Customized player -->
54
+ <div
55
+ data-scarlett-player
56
+ data-src="https://example.com/stream.m3u8"
57
+ data-autoplay
58
+ data-muted
59
+ data-poster="https://example.com/poster.jpg"
60
+ data-brand-color="#e50914"
61
+ data-aspect-ratio="16:9"
62
+ ></div>
63
+ </body>
64
+ </html>
65
+ ```
66
+
67
+ #### Available Data Attributes
68
+
69
+ | Attribute | Type | Default | Description |
70
+ |-----------|------|---------|-------------|
71
+ | `data-src` | string | **required** | Video source URL (HLS .m3u8) |
72
+ | `data-autoplay` | boolean | `false` | Auto-play on load |
73
+ | `data-muted` | boolean | `false` | Start muted |
74
+ | `data-poster` | string | - | Poster image URL |
75
+ | `data-controls` | boolean | `true` | Show/hide UI controls |
76
+ | `data-brand-color` | string | - | Accent color (e.g., `#e50914`) |
77
+ | `data-primary-color` | string | - | Primary UI color |
78
+ | `data-background-color` | string | - | Control bar background |
79
+ | `data-hide-delay` | number | `3000` | Auto-hide delay (ms) |
80
+ | `data-width` | string | - | Player width (e.g., `100%`, `640px`) |
81
+ | `data-height` | string | - | Player height |
82
+ | `data-aspect-ratio` | string | - | Aspect ratio (e.g., `16:9`, `4:3`) |
83
+ | `data-keyboard` | boolean | `true` | Enable keyboard shortcuts |
84
+ | `data-loop` | boolean | `false` | Loop playback |
85
+ | `data-playback-rate` | number | `1.0` | Playback speed |
86
+ | `data-start-time` | number | `0` | Start position (seconds) |
87
+ | `data-class` | string | - | Custom CSS class(es) |
88
+
89
+ ### 2. Programmatic API
90
+
91
+ For dynamic player creation:
92
+
93
+ ```html
94
+ <script src="https://cdn.example.com/scarlett-player/embed.umd.cjs"></script>
95
+
96
+ <div id="my-player"></div>
97
+
98
+ <script>
99
+ // Create player programmatically
100
+ const player = ScarlettPlayer.create({
101
+ container: '#my-player',
102
+ src: 'https://example.com/stream.m3u8',
103
+ autoplay: true,
104
+ muted: true,
105
+ brandColor: '#e50914',
106
+ aspectRatio: '16:9',
107
+ });
108
+
109
+ // Access player methods
110
+ player.play();
111
+ player.pause();
112
+ player.setVolume(0.5);
113
+ </script>
114
+ ```
115
+
116
+ #### Global API Methods
117
+
118
+ ```typescript
119
+ // Initialize all players on page
120
+ ScarlettPlayer.initAll();
121
+
122
+ // Create single player
123
+ ScarlettPlayer.create(options);
124
+
125
+ // Check version
126
+ console.log(ScarlettPlayer.version);
127
+ ```
128
+
129
+ ### 3. iframe Embed
130
+
131
+ For secure, sandboxed embeds:
132
+
133
+ ```html
134
+ <!-- Basic iframe embed -->
135
+ <iframe
136
+ src="https://cdn.example.com/scarlett-player/iframe.html?src=https://example.com/stream.m3u8"
137
+ width="640"
138
+ height="360"
139
+ frameborder="0"
140
+ allowfullscreen
141
+ allow="autoplay; fullscreen; picture-in-picture"
142
+ ></iframe>
143
+
144
+ <!-- With customization -->
145
+ <iframe
146
+ src="https://cdn.example.com/scarlett-player/iframe.html?src=https://example.com/stream.m3u8&autoplay=true&muted=true&brand-color=%23e50914"
147
+ width="100%"
148
+ height="100%"
149
+ frameborder="0"
150
+ allowfullscreen
151
+ allow="autoplay; fullscreen; picture-in-picture"
152
+ ></iframe>
153
+ ```
154
+
155
+ #### iframe URL Parameters
156
+
157
+ All data attributes work as URL parameters (use kebab-case):
158
+ - `src` (required)
159
+ - `autoplay`, `muted`, `loop`
160
+ - `poster`
161
+ - `brand-color`, `primary-color`, `background-color`
162
+ - `hide-delay`, `playback-rate`, `start-time`
163
+ - `controls` (set to `false` to hide)
164
+
165
+ ## Multi-Tenant Branding
166
+
167
+ Perfect for The Stream Platform's white-label needs:
168
+
169
+ ```html
170
+ <!-- Client A: Red branding -->
171
+ <div
172
+ data-scarlett-player
173
+ data-src="https://example.com/client-a/stream.m3u8"
174
+ data-brand-color="#e50914"
175
+ data-primary-color="#ffffff"
176
+ ></div>
177
+
178
+ <!-- Client B: Blue branding -->
179
+ <div
180
+ data-scarlett-player
181
+ data-src="https://example.com/client-b/stream.m3u8"
182
+ data-brand-color="#1e90ff"
183
+ data-primary-color="#f0f0f0"
184
+ ></div>
185
+ ```
186
+
187
+ ## Build Output
188
+
189
+ After building, you'll get:
190
+
191
+ ```
192
+ dist/
193
+ ├── embed.js # ES module
194
+ ├── embed.umd.cjs # UMD bundle (for script tags)
195
+ ├── embed.d.ts # TypeScript definitions
196
+ ├── embed.js.map # Source map
197
+ └── embed.umd.cjs.map # Source map for UMD
198
+ ```
199
+
200
+ ## Development
201
+
202
+ ```bash
203
+ # Install dependencies
204
+ pnpm install
205
+
206
+ # Build the package
207
+ pnpm build
208
+
209
+ # Run in dev mode
210
+ pnpm dev
211
+
212
+ # Type checking
213
+ pnpm typecheck
214
+
215
+ # Clean build artifacts
216
+ pnpm clean
217
+ ```
218
+
219
+ ## TypeScript Support
220
+
221
+ Full TypeScript support when using as a module:
222
+
223
+ ```typescript
224
+ import { create, type EmbedPlayerOptions } from '@scarlett-player/embed';
225
+
226
+ const options: EmbedPlayerOptions = {
227
+ container: '#player',
228
+ src: 'https://example.com/stream.m3u8',
229
+ autoplay: true,
230
+ brandColor: '#e50914',
231
+ };
232
+
233
+ const player = create(options);
234
+ ```
235
+
236
+ ## Browser Support
237
+
238
+ - Modern browsers (ES2020+)
239
+ - Chrome/Edge 90+
240
+ - Firefox 88+
241
+ - Safari 14+
242
+ - iOS Safari 14+
243
+ - Android Chrome 90+
244
+
245
+ ## Keyboard Shortcuts
246
+
247
+ When `data-keyboard` is enabled (default):
248
+
249
+ - `Space` / `K` - Play/Pause
250
+ - `M` - Mute/Unmute
251
+ - `F` - Fullscreen
252
+ - `←` / `→` - Seek -5s / +5s
253
+ - `↑` / `↓` - Volume +10% / -10%
254
+
255
+ ## Examples
256
+
257
+ ### Responsive Player
258
+
259
+ ```html
260
+ <div
261
+ data-scarlett-player
262
+ data-src="https://example.com/stream.m3u8"
263
+ data-width="100%"
264
+ data-aspect-ratio="16:9"
265
+ ></div>
266
+ ```
267
+
268
+ ### Auto-play with Muted (Mobile-friendly)
269
+
270
+ ```html
271
+ <div
272
+ data-scarlett-player
273
+ data-src="https://example.com/stream.m3u8"
274
+ data-autoplay
275
+ data-muted
276
+ ></div>
277
+ ```
278
+
279
+ ### Custom Branding
280
+
281
+ ```html
282
+ <div
283
+ data-scarlett-player
284
+ data-src="https://example.com/stream.m3u8"
285
+ data-brand-color="#ff6b6b"
286
+ data-primary-color="#ffffff"
287
+ data-background-color="rgba(0, 0, 0, 0.8)"
288
+ data-hide-delay="5000"
289
+ ></div>
290
+ ```
291
+
292
+ ### Controls Hidden (Audio-only)
293
+
294
+ ```html
295
+ <div
296
+ data-scarlett-player
297
+ data-src="https://example.com/audio.m3u8"
298
+ data-controls="false"
299
+ data-autoplay
300
+ data-height="50px"
301
+ ></div>
302
+ ```
303
+
304
+ ## License
305
+
306
+ MIT
307
+
308
+ ## Documentation
309
+
310
+ For detailed implementation docs including Laravel integration, see:
311
+ - [Embed Implementation Guide](../../.claude/docs/embed-implementation.md)
312
+
313
+ ## Support
314
+
315
+ For issues and questions, visit: https://github.com/Hackney-Enterprises-Inc/scarlett-player