@refrakt-md/behaviors 0.7.2 → 0.8.1

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.
@@ -0,0 +1,57 @@
1
+ /**
2
+ * <rf-audio> — interactive audio player with optional waveform and chapter markers.
3
+ *
4
+ * Reads track data from a child <script type="application/json"> element.
5
+ * Supports waveform visualisation via wavesurfer.js (loaded from CDN when waveform="true").
6
+ * Can connect to a named playlist rune via the playlist attribute.
7
+ *
8
+ * Progressive enhancement: without JS the element is inert; connectedCallback
9
+ * builds the full player UI.
10
+ */
11
+ import { SafeHTMLElement } from './ssr-safe.js';
12
+ export declare class RfAudio extends SafeHTMLElement {
13
+ private audioEl;
14
+ private wavesurfer;
15
+ private tracks;
16
+ private currentTrackIndex;
17
+ private isPlaying;
18
+ private animationFrameId;
19
+ private useWaveform;
20
+ private playBtn;
21
+ private progressContainer;
22
+ private progressBar;
23
+ private currentTimeEl;
24
+ private durationEl;
25
+ private trackNameEl;
26
+ private trackArtistEl;
27
+ private chapterListEl;
28
+ private waveformContainer;
29
+ private playlistEl;
30
+ private playlistTrackItems;
31
+ private trackClickHandlers;
32
+ private pendingAutoplay;
33
+ connectedCallback(): void;
34
+ disconnectedCallback(): void;
35
+ private init;
36
+ private extractTrackData;
37
+ private resolvePlaylistTracks;
38
+ private bindPlaylistInteraction;
39
+ private updateActivePlaylistTrack;
40
+ private buildPlayerUI;
41
+ private initAudio;
42
+ private initWaveform;
43
+ private cancelPendingAutoplay;
44
+ private togglePlayPause;
45
+ private seek;
46
+ private seekToTime;
47
+ private getCurrentTime;
48
+ private getDuration;
49
+ private startProgressLoop;
50
+ private updateProgressBar;
51
+ private updateWaveformProgress;
52
+ private updateActiveChapter;
53
+ private updatePlayButton;
54
+ private loadTrack;
55
+ private formatTime;
56
+ }
57
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/elements/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAiBhD,qBAAa,OAAQ,SAAQ,eAAe;IAC3C,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAA4B;IACrD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,iBAAiB,CAA4B;IAGrD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAyB;IAGnD,OAAO,CAAC,eAAe,CAA6B;IAEpD,iBAAiB;IAKjB,oBAAoB;IAqCpB,OAAO,CAAC,IAAI;IA8BZ,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,aAAa;IA4IrB,OAAO,CAAC,SAAS;YAyBH,YAAY;IAkE1B,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,SAAS;IAkEjB,OAAO,CAAC,UAAU;CASlB"}
@@ -0,0 +1,556 @@
1
+ /**
2
+ * <rf-audio> — interactive audio player with optional waveform and chapter markers.
3
+ *
4
+ * Reads track data from a child <script type="application/json"> element.
5
+ * Supports waveform visualisation via wavesurfer.js (loaded from CDN when waveform="true").
6
+ * Can connect to a named playlist rune via the playlist attribute.
7
+ *
8
+ * Progressive enhancement: without JS the element is inert; connectedCallback
9
+ * builds the full player UI.
10
+ */
11
+ import { SafeHTMLElement } from './ssr-safe.js';
12
+ const PLAY_ICON = '<svg viewBox="0 0 24 24" aria-hidden="true"><polygon points="7,4 20,12 7,20"/></svg>';
13
+ const PAUSE_ICON = '<svg viewBox="0 0 24 24" aria-hidden="true"><rect x="5" y="4" width="4" height="16"/><rect x="15" y="4" width="4" height="16"/></svg>';
14
+ export class RfAudio extends SafeHTMLElement {
15
+ audioEl = null;
16
+ wavesurfer = null;
17
+ tracks = [];
18
+ currentTrackIndex = 0;
19
+ isPlaying = false;
20
+ animationFrameId = null;
21
+ useWaveform = false;
22
+ // DOM references
23
+ playBtn = null;
24
+ progressContainer = null;
25
+ progressBar = null;
26
+ currentTimeEl = null;
27
+ durationEl = null;
28
+ trackNameEl = null;
29
+ trackArtistEl = null;
30
+ chapterListEl = null;
31
+ waveformContainer = null;
32
+ // Playlist interaction
33
+ playlistEl = null;
34
+ playlistTrackItems = [];
35
+ trackClickHandlers = [];
36
+ // Pending autoplay handler (so it can be cancelled)
37
+ pendingAutoplay = null;
38
+ connectedCallback() {
39
+ // Defer to ensure sibling elements (e.g. playlist rune) are in the DOM
40
+ requestAnimationFrame(() => this.init());
41
+ }
42
+ disconnectedCallback() {
43
+ this.cancelPendingAutoplay();
44
+ if (this.animationFrameId !== null) {
45
+ cancelAnimationFrame(this.animationFrameId);
46
+ this.animationFrameId = null;
47
+ }
48
+ if (this.audioEl) {
49
+ this.audioEl.pause();
50
+ this.audioEl.removeAttribute('src');
51
+ this.audioEl.load();
52
+ this.audioEl = null;
53
+ }
54
+ if (this.wavesurfer) {
55
+ try {
56
+ this.wavesurfer.destroy();
57
+ }
58
+ catch { /* already destroyed */ }
59
+ this.wavesurfer = null;
60
+ }
61
+ // Remove playlist click handlers
62
+ for (let i = 0; i < this.playlistTrackItems.length; i++) {
63
+ if (this.trackClickHandlers[i]) {
64
+ this.playlistTrackItems[i].removeEventListener('click', this.trackClickHandlers[i]);
65
+ }
66
+ }
67
+ this.playlistTrackItems = [];
68
+ this.trackClickHandlers = [];
69
+ this.playlistEl = null;
70
+ this.playBtn = null;
71
+ this.progressContainer = null;
72
+ this.progressBar = null;
73
+ this.currentTimeEl = null;
74
+ this.durationEl = null;
75
+ this.trackNameEl = null;
76
+ this.trackArtistEl = null;
77
+ this.chapterListEl = null;
78
+ this.waveformContainer = null;
79
+ }
80
+ init() {
81
+ // Idempotency guard — don't rebuild if already initialized
82
+ if (this.querySelector('.rf-audio-player'))
83
+ return;
84
+ this.tracks = this.extractTrackData();
85
+ const fromPlaylist = this.tracks.length === 0;
86
+ if (fromPlaylist) {
87
+ this.tracks = this.resolvePlaylistTracks();
88
+ }
89
+ if (this.tracks.length === 0)
90
+ return;
91
+ this.useWaveform = this.getAttribute('waveform') === 'true';
92
+ this.buildPlayerUI();
93
+ if (fromPlaylist && this.playlistTrackItems.length > 0) {
94
+ this.bindPlaylistInteraction();
95
+ }
96
+ const track = this.tracks[this.currentTrackIndex];
97
+ if (!track?.src)
98
+ return;
99
+ if (this.useWaveform) {
100
+ this.initWaveform();
101
+ }
102
+ else {
103
+ this.initAudio();
104
+ }
105
+ }
106
+ extractTrackData() {
107
+ const script = this.querySelector('script[type="application/json"]');
108
+ if (!script?.textContent)
109
+ return [];
110
+ try {
111
+ return JSON.parse(script.textContent);
112
+ }
113
+ catch {
114
+ return [];
115
+ }
116
+ }
117
+ resolvePlaylistTracks() {
118
+ const playlistId = this.getAttribute('playlist');
119
+ if (!playlistId)
120
+ return [];
121
+ // Find the playlist section with a matching id meta
122
+ const playlists = document.querySelectorAll('[typeof="MusicPlaylist"]');
123
+ let foundEl = null;
124
+ for (const pl of playlists) {
125
+ const idMeta = pl.querySelector('meta[data-field="id"]');
126
+ if (idMeta?.content === playlistId) {
127
+ foundEl = pl;
128
+ break;
129
+ }
130
+ }
131
+ if (!foundEl)
132
+ return [];
133
+ // Store reference for interaction
134
+ this.playlistEl = foundEl;
135
+ const tracks = [];
136
+ const trackItems = foundEl.querySelectorAll('li[data-rune="track"]');
137
+ this.playlistTrackItems = Array.from(trackItems);
138
+ for (const item of trackItems) {
139
+ const name = item.querySelector('[data-name="track-name"]')?.textContent || '';
140
+ const artist = item.querySelector('[data-name="track-artist"]')?.textContent || '';
141
+ const src = item.dataset.src || '';
142
+ tracks.push({ src, name, artist });
143
+ }
144
+ return tracks;
145
+ }
146
+ bindPlaylistInteraction() {
147
+ for (let i = 0; i < this.playlistTrackItems.length; i++) {
148
+ const item = this.playlistTrackItems[i];
149
+ item.style.cursor = 'pointer';
150
+ const handler = () => {
151
+ this.loadTrack(i, true);
152
+ };
153
+ this.trackClickHandlers.push(handler);
154
+ item.addEventListener('click', handler);
155
+ }
156
+ this.updateActivePlaylistTrack();
157
+ }
158
+ updateActivePlaylistTrack() {
159
+ for (let i = 0; i < this.playlistTrackItems.length; i++) {
160
+ this.playlistTrackItems[i].classList.toggle('rf-track--active', i === this.currentTrackIndex);
161
+ }
162
+ }
163
+ buildPlayerUI() {
164
+ const track = this.tracks[this.currentTrackIndex];
165
+ if (!track)
166
+ return;
167
+ const player = document.createElement('div');
168
+ player.className = 'rf-audio-player';
169
+ // Track info
170
+ if (track.name || track.artist) {
171
+ const info = document.createElement('div');
172
+ info.className = 'rf-audio-player__info';
173
+ if (track.name) {
174
+ this.trackNameEl = document.createElement('span');
175
+ this.trackNameEl.className = 'rf-audio-player__name';
176
+ this.trackNameEl.textContent = track.name;
177
+ info.appendChild(this.trackNameEl);
178
+ }
179
+ if (track.artist) {
180
+ this.trackArtistEl = document.createElement('span');
181
+ this.trackArtistEl.className = 'rf-audio-player__artist';
182
+ this.trackArtistEl.textContent = track.artist;
183
+ info.appendChild(this.trackArtistEl);
184
+ }
185
+ player.appendChild(info);
186
+ }
187
+ // Controls row
188
+ const controls = document.createElement('div');
189
+ controls.className = 'rf-audio-player__controls';
190
+ // Play/pause button
191
+ this.playBtn = document.createElement('button');
192
+ this.playBtn.className = 'rf-audio-player__play';
193
+ this.playBtn.type = 'button';
194
+ this.playBtn.setAttribute('aria-label', 'Play');
195
+ this.playBtn.innerHTML = PLAY_ICON;
196
+ this.playBtn.addEventListener('click', () => this.togglePlayPause());
197
+ if (!track.src)
198
+ this.playBtn.disabled = true;
199
+ controls.appendChild(this.playBtn);
200
+ // Current time
201
+ this.currentTimeEl = document.createElement('span');
202
+ this.currentTimeEl.className = 'rf-audio-player__time rf-audio-player__time--current';
203
+ this.currentTimeEl.textContent = '0:00';
204
+ controls.appendChild(this.currentTimeEl);
205
+ // Progress bar
206
+ this.progressContainer = document.createElement('div');
207
+ this.progressContainer.className = 'rf-audio-player__progress';
208
+ this.progressContainer.setAttribute('role', 'slider');
209
+ this.progressContainer.setAttribute('aria-label', 'Seek');
210
+ this.progressContainer.setAttribute('aria-valuemin', '0');
211
+ this.progressContainer.setAttribute('aria-valuemax', '100');
212
+ this.progressContainer.setAttribute('aria-valuenow', '0');
213
+ this.progressContainer.tabIndex = 0;
214
+ this.progressBar = document.createElement('div');
215
+ this.progressBar.className = 'rf-audio-player__progress-bar';
216
+ this.progressContainer.appendChild(this.progressBar);
217
+ this.progressContainer.addEventListener('click', (e) => {
218
+ const rect = this.progressContainer.getBoundingClientRect();
219
+ const fraction = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width));
220
+ this.seek(fraction);
221
+ });
222
+ this.progressContainer.addEventListener('keydown', (e) => {
223
+ const step = 5; // seconds
224
+ if (e.key === 'ArrowRight') {
225
+ e.preventDefault();
226
+ this.seekToTime(this.getCurrentTime() + step);
227
+ }
228
+ else if (e.key === 'ArrowLeft') {
229
+ e.preventDefault();
230
+ this.seekToTime(Math.max(0, this.getCurrentTime() - step));
231
+ }
232
+ else if (e.key === 'Home') {
233
+ e.preventDefault();
234
+ this.seekToTime(0);
235
+ }
236
+ else if (e.key === 'End') {
237
+ e.preventDefault();
238
+ this.seekToTime(this.getDuration());
239
+ }
240
+ });
241
+ controls.appendChild(this.progressContainer);
242
+ // Duration
243
+ this.durationEl = document.createElement('span');
244
+ this.durationEl.className = 'rf-audio-player__time rf-audio-player__time--duration';
245
+ this.durationEl.textContent = '0:00';
246
+ controls.appendChild(this.durationEl);
247
+ player.appendChild(controls);
248
+ // Waveform container (only when waveform is enabled)
249
+ if (this.useWaveform && track.src) {
250
+ this.waveformContainer = document.createElement('div');
251
+ this.waveformContainer.className = 'rf-audio-player__waveform';
252
+ player.appendChild(this.waveformContainer);
253
+ }
254
+ // Chapter list
255
+ const chapters = track.chapters;
256
+ if (chapters && chapters.length > 0) {
257
+ this.chapterListEl = document.createElement('ol');
258
+ this.chapterListEl.className = 'rf-audio-player__chapters';
259
+ this.chapterListEl.setAttribute('role', 'list');
260
+ for (const ch of chapters) {
261
+ const li = document.createElement('li');
262
+ const btn = document.createElement('button');
263
+ btn.className = 'rf-audio-player__chapter';
264
+ btn.type = 'button';
265
+ btn.dataset.time = String(ch.time);
266
+ btn.addEventListener('click', () => {
267
+ this.seekToTime(ch.time);
268
+ if (!this.isPlaying)
269
+ this.togglePlayPause();
270
+ });
271
+ const nameSpan = document.createElement('span');
272
+ nameSpan.className = 'rf-audio-player__chapter-name';
273
+ nameSpan.textContent = ch.name;
274
+ btn.appendChild(nameSpan);
275
+ const timeSpan = document.createElement('span');
276
+ timeSpan.className = 'rf-audio-player__chapter-time';
277
+ timeSpan.textContent = this.formatTime(ch.time);
278
+ btn.appendChild(timeSpan);
279
+ li.appendChild(btn);
280
+ this.chapterListEl.appendChild(li);
281
+ }
282
+ player.appendChild(this.chapterListEl);
283
+ }
284
+ // Insert player before script tag (which is invisible)
285
+ this.prepend(player);
286
+ }
287
+ initAudio() {
288
+ const track = this.tracks[this.currentTrackIndex];
289
+ if (!track?.src)
290
+ return;
291
+ this.audioEl = document.createElement('audio');
292
+ this.audioEl.preload = 'metadata';
293
+ this.audioEl.src = track.src;
294
+ this.audioEl.addEventListener('loadedmetadata', () => {
295
+ if (this.durationEl && this.audioEl) {
296
+ this.durationEl.textContent = this.formatTime(this.audioEl.duration);
297
+ }
298
+ });
299
+ this.audioEl.addEventListener('ended', () => {
300
+ this.isPlaying = false;
301
+ this.updatePlayButton();
302
+ if (this.currentTrackIndex < this.tracks.length - 1) {
303
+ this.loadTrack(this.currentTrackIndex + 1, true);
304
+ }
305
+ });
306
+ this.startProgressLoop();
307
+ }
308
+ async initWaveform() {
309
+ const track = this.tracks[this.currentTrackIndex];
310
+ if (!this.waveformContainer || !track?.src) {
311
+ // Waveform requested but no src — fall back to standard player
312
+ this.useWaveform = false;
313
+ this.initAudio();
314
+ return;
315
+ }
316
+ try {
317
+ const cdn = 'https://unpkg.com/wavesurfer.js@7/dist/wavesurfer.esm.js';
318
+ const WaveSurfer = (await import(/* @vite-ignore */ cdn)).default;
319
+ this.wavesurfer = WaveSurfer.create({
320
+ container: this.waveformContainer,
321
+ waveColor: 'var(--rf-color-border, #d1d5db)',
322
+ progressColor: 'var(--rf-color-primary, #3b82f6)',
323
+ cursorColor: 'var(--rf-color-primary, #3b82f6)',
324
+ barWidth: 2,
325
+ barRadius: 2,
326
+ barGap: 1,
327
+ height: 48,
328
+ url: track.src,
329
+ });
330
+ this.wavesurfer.on('ready', () => {
331
+ if (this.durationEl) {
332
+ this.durationEl.textContent = this.formatTime(this.wavesurfer.getDuration());
333
+ }
334
+ });
335
+ this.wavesurfer.on('audioprocess', () => {
336
+ this.updateWaveformProgress();
337
+ });
338
+ this.wavesurfer.on('seeking', () => {
339
+ this.updateWaveformProgress();
340
+ });
341
+ this.wavesurfer.on('play', () => {
342
+ this.isPlaying = true;
343
+ this.updatePlayButton();
344
+ });
345
+ this.wavesurfer.on('pause', () => {
346
+ this.isPlaying = false;
347
+ this.updatePlayButton();
348
+ });
349
+ this.wavesurfer.on('finish', () => {
350
+ this.isPlaying = false;
351
+ this.updatePlayButton();
352
+ });
353
+ }
354
+ catch {
355
+ // CDN load failed or CORS issue — fall back to standard audio
356
+ console.warn('Audio rune: wavesurfer.js failed to load, falling back to standard player');
357
+ this.waveformContainer.style.display = 'none';
358
+ this.useWaveform = false;
359
+ // Show the progress bar again
360
+ if (this.progressContainer)
361
+ this.progressContainer.style.display = '';
362
+ if (this.currentTimeEl)
363
+ this.currentTimeEl.style.display = '';
364
+ if (this.durationEl)
365
+ this.durationEl.style.display = '';
366
+ this.initAudio();
367
+ }
368
+ }
369
+ cancelPendingAutoplay() {
370
+ if (this.pendingAutoplay) {
371
+ if (this.audioEl) {
372
+ this.audioEl.removeEventListener('canplay', this.pendingAutoplay);
373
+ }
374
+ this.pendingAutoplay = null;
375
+ }
376
+ }
377
+ togglePlayPause() {
378
+ if (this.useWaveform && this.wavesurfer) {
379
+ this.wavesurfer.playPause();
380
+ }
381
+ else if (this.audioEl) {
382
+ if (this.isPlaying) {
383
+ this.cancelPendingAutoplay();
384
+ this.audioEl.pause();
385
+ this.isPlaying = false;
386
+ }
387
+ else {
388
+ this.audioEl.play().catch(() => { });
389
+ this.isPlaying = true;
390
+ }
391
+ this.updatePlayButton();
392
+ }
393
+ }
394
+ seek(fraction) {
395
+ if (this.useWaveform && this.wavesurfer) {
396
+ this.wavesurfer.seekTo(fraction);
397
+ }
398
+ else if (this.audioEl && this.audioEl.duration) {
399
+ this.audioEl.currentTime = fraction * this.audioEl.duration;
400
+ this.updateProgressBar();
401
+ }
402
+ }
403
+ seekToTime(seconds) {
404
+ const duration = this.getDuration();
405
+ if (duration > 0) {
406
+ this.seek(Math.max(0, Math.min(1, seconds / duration)));
407
+ }
408
+ }
409
+ getCurrentTime() {
410
+ if (this.useWaveform && this.wavesurfer) {
411
+ return this.wavesurfer.getCurrentTime() ?? 0;
412
+ }
413
+ return this.audioEl?.currentTime ?? 0;
414
+ }
415
+ getDuration() {
416
+ if (this.useWaveform && this.wavesurfer) {
417
+ return this.wavesurfer.getDuration() ?? 0;
418
+ }
419
+ return this.audioEl?.duration ?? 0;
420
+ }
421
+ startProgressLoop() {
422
+ const update = () => {
423
+ this.updateProgressBar();
424
+ this.animationFrameId = requestAnimationFrame(update);
425
+ };
426
+ this.animationFrameId = requestAnimationFrame(update);
427
+ }
428
+ updateProgressBar() {
429
+ if (!this.audioEl)
430
+ return;
431
+ const current = this.audioEl.currentTime;
432
+ const duration = this.audioEl.duration || 0;
433
+ const fraction = duration > 0 ? current / duration : 0;
434
+ if (this.progressBar) {
435
+ this.progressBar.style.width = `${fraction * 100}%`;
436
+ }
437
+ if (this.progressContainer) {
438
+ this.progressContainer.setAttribute('aria-valuenow', String(Math.round(fraction * 100)));
439
+ }
440
+ if (this.currentTimeEl) {
441
+ this.currentTimeEl.textContent = this.formatTime(current);
442
+ }
443
+ this.updateActiveChapter(current);
444
+ }
445
+ updateWaveformProgress() {
446
+ if (!this.wavesurfer)
447
+ return;
448
+ const current = this.wavesurfer.getCurrentTime() ?? 0;
449
+ if (this.currentTimeEl) {
450
+ this.currentTimeEl.textContent = this.formatTime(current);
451
+ }
452
+ this.updateActiveChapter(current);
453
+ }
454
+ updateActiveChapter(currentTime) {
455
+ if (!this.chapterListEl)
456
+ return;
457
+ const chapters = this.tracks[this.currentTrackIndex]?.chapters;
458
+ if (!chapters || chapters.length === 0)
459
+ return;
460
+ // Find the active chapter (last one whose time <= currentTime)
461
+ let activeIndex = -1;
462
+ for (let i = chapters.length - 1; i >= 0; i--) {
463
+ if (chapters[i].time <= currentTime) {
464
+ activeIndex = i;
465
+ break;
466
+ }
467
+ }
468
+ const buttons = this.chapterListEl.querySelectorAll('.rf-audio-player__chapter');
469
+ for (let i = 0; i < buttons.length; i++) {
470
+ buttons[i].classList.toggle('rf-audio-player__chapter--active', i === activeIndex);
471
+ }
472
+ }
473
+ updatePlayButton() {
474
+ if (!this.playBtn)
475
+ return;
476
+ this.playBtn.innerHTML = this.isPlaying ? PAUSE_ICON : PLAY_ICON;
477
+ this.playBtn.setAttribute('aria-label', this.isPlaying ? 'Pause' : 'Play');
478
+ }
479
+ loadTrack(index, autoplay = false) {
480
+ if (index < 0 || index >= this.tracks.length)
481
+ return;
482
+ // Cancel any pending autoplay from a previous loadTrack call
483
+ this.cancelPendingAutoplay();
484
+ // Stop current playback before switching
485
+ if (this.isPlaying) {
486
+ if (this.useWaveform && this.wavesurfer) {
487
+ this.wavesurfer.pause();
488
+ }
489
+ else if (this.audioEl) {
490
+ this.audioEl.pause();
491
+ }
492
+ this.isPlaying = false;
493
+ this.updatePlayButton();
494
+ }
495
+ this.currentTrackIndex = index;
496
+ const track = this.tracks[index];
497
+ if (this.trackNameEl)
498
+ this.trackNameEl.textContent = track.name;
499
+ if (this.trackArtistEl)
500
+ this.trackArtistEl.textContent = track.artist;
501
+ if (this.playBtn)
502
+ this.playBtn.disabled = !track.src;
503
+ if (track.src) {
504
+ if (this.useWaveform && this.wavesurfer) {
505
+ this.wavesurfer.load(track.src);
506
+ if (autoplay) {
507
+ this.wavesurfer.once('ready', () => {
508
+ this.wavesurfer.play();
509
+ });
510
+ }
511
+ }
512
+ else if (this.audioEl) {
513
+ this.audioEl.src = track.src;
514
+ this.audioEl.load();
515
+ if (autoplay) {
516
+ this.pendingAutoplay = () => {
517
+ this.pendingAutoplay = null;
518
+ this.audioEl.play().catch(() => { });
519
+ this.isPlaying = true;
520
+ this.updatePlayButton();
521
+ };
522
+ this.audioEl.addEventListener('canplay', this.pendingAutoplay, { once: true });
523
+ }
524
+ }
525
+ else {
526
+ // First track with a src — create the audio element
527
+ this.initAudio();
528
+ if (autoplay) {
529
+ // audioEl was just created by initAudio()
530
+ const audio = this.audioEl;
531
+ if (audio) {
532
+ this.pendingAutoplay = () => {
533
+ this.pendingAutoplay = null;
534
+ audio.play().catch(() => { });
535
+ this.isPlaying = true;
536
+ this.updatePlayButton();
537
+ };
538
+ audio.addEventListener('canplay', this.pendingAutoplay, { once: true });
539
+ }
540
+ }
541
+ }
542
+ }
543
+ this.updateActivePlaylistTrack();
544
+ }
545
+ formatTime(seconds) {
546
+ if (!isFinite(seconds) || seconds < 0)
547
+ return '0:00';
548
+ const s = Math.floor(seconds);
549
+ const h = Math.floor(s / 3600);
550
+ const m = Math.floor((s % 3600) / 60);
551
+ const sec = s % 60;
552
+ const pad = (n) => String(n).padStart(2, '0');
553
+ return h > 0 ? `${h}:${pad(m)}:${pad(sec)}` : `${m}:${pad(sec)}`;
554
+ }
555
+ }
556
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/elements/audio.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  export declare function registerElements(): void;
7
7
  export { RfContext } from './context.js';
8
8
  export type { PageEntry, DesignTokens } from './context.js';
9
+ export { RfAudio } from './audio.js';
9
10
  export { RfDiagram } from './diagram.js';
10
11
  export { RfNav } from './nav.js';
11
12
  export { RfMap } from './map.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAevC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAgBvC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}