horeg-audio 1.0.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,190 @@
1
+ # 🔊 horeg-audio
2
+
3
+ > Standalone Vanilla TypeScript Audio Player Library with encapsulated Shadow DOM and Sound Horeg aesthetics.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/horeg-audio.svg?color=amber)](https://www.npmjs.com/package/horeg-audio)
6
+ [![bundle size](https://img.shields.io/bundlephobia/minzip/horeg-audio?color=green)](https://bundlephobia.com/package/horeg-audio)
7
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
8
+
9
+ `horeg-audio` adalah library pemutar audio mandiri berbasis TypeScript murni (*zero runtime dependencies*) yang mengusung tema visual panggung **Sound System Horeg** (speaker subwoofer cabinet, neon glow, industrial mesh grill, dan dynamic EQ/VU-meter visualizer).
10
+
11
+ ---
12
+
13
+ ## ✨ Fitur Utama
14
+
15
+ - **Zero CSS Leakage**: Menggunakan native **Shadow DOM** (`mode: 'open'`) sehingga style pemutar musik 100% terisolasi dari stylesheet proyek induk (kompatibel dengan Tailwind, Bootstrap, mau pun framework apa pun).
16
+ - **Sound Horeg Aesthetics**: Desain box speaker subwoofer panggung, grill tekstur radial, baut sudut industrial, dan tombol play dengan animasi neon pulse.
17
+ - **Dynamic EQ / VU Visualizer**: Bar equalizer mini dinamis yang responsif saat audio diputar.
18
+ - **Multi-Track Playlist & Rack Drawer**: Panel drawer geser bertema *rack mount audio* dengan antrean trek dan penanda lagu aktif.
19
+ - **Micro Bundle**: Berukuran di bawah **10 KB** (gzip) dengan zero third-party runtime dependencies.
20
+ - **Full Keyboard & ARIA a11y**: Navigasi ramah aksesibilitas (Space untuk toggle play, panah untuk seek dan volume).
21
+ - **Universal Distribution**: Siap pakai via NPM (ESM, CJS, TypeScript `.d.ts`) maupun CDN tag `<script src="...">`.
22
+
23
+ ---
24
+
25
+ ## 📦 Instalasi
26
+
27
+ Gunakan **pnpm** (atau package manager pilihan Anda):
28
+
29
+ ```bash
30
+ pnpm add horeg-audio
31
+ ```
32
+
33
+ ---
34
+
35
+ ## 🚀 Cara Penggunaan
36
+
37
+ ### 1. Modern Frameworks & Bundlers (ESM / TypeScript)
38
+
39
+ ```typescript
40
+ import { HoregAudio } from 'horeg-audio';
41
+
42
+ const player = new HoregAudio({
43
+ container: '#music-player',
44
+ playlist: [
45
+ {
46
+ id: 1,
47
+ title: 'Bass Horeg Jedag Jedug Extreme',
48
+ artist: 'Sound Master Karnaval',
49
+ album: 'Festival Horeg 2026',
50
+ src: '/audio/bass-horeg.mp3',
51
+ coverArt: '/images/cover.jpg',
52
+ duration: 215
53
+ },
54
+ {
55
+ id: 2,
56
+ title: 'Karnaval Audio Rig Battle',
57
+ artist: 'Brewog Audio Master',
58
+ src: '/audio/karnaval.mp3'
59
+ }
60
+ ],
61
+ theme: {
62
+ variant: 'horeg-classic',
63
+ primaryGlowColor: '#f59e0b'
64
+ },
65
+ onPlay: (track) => console.log('Playing:', track.title),
66
+ onPause: () => console.log('Paused')
67
+ });
68
+ ```
69
+
70
+ ### 2. Browser Langsung via CDN (IIFE / Global Script)
71
+
72
+ ```html
73
+ <!-- Container di HTML -->
74
+ <div id="player-container"></div>
75
+
76
+ <!-- Load Script -->
77
+ <script src="https://cdn.jsdelivr.net/npm/horeg-audio/dist/horeg-audio.global.js"></script>
78
+ <script>
79
+ const player = new HoregAudio({
80
+ container: '#player-container',
81
+ playlist: [
82
+ {
83
+ title: 'Karnaval Audio Battle',
84
+ artist: 'Horeg Team',
85
+ src: 'https://example.com/audio.mp3'
86
+ }
87
+ ]
88
+ });
89
+ </script>
90
+ ```
91
+
92
+ ---
93
+
94
+ ## 🎨 Tema Preset (Sound Horeg Edition)
95
+
96
+ | Preset Variant | Deskripsi | Warna Utama |
97
+ |---|---|---|
98
+ | `horeg-classic` | Hitam matte khas box speaker + aksen amber neon karnaval | `#f59e0b` |
99
+ | `horeg-nightclub` | Cyberpunk night vibe dengan aksen neon cyan & strobe magenta | `#06b6d4` & `#ec4899` |
100
+ | `horeg-stealth` | Monokrom taktis metalik dan aksen perak | `#94a3b8` |
101
+
102
+ Contoh kustomisasi tema dinamis:
103
+
104
+ ```typescript
105
+ player.setTheme({
106
+ variant: 'horeg-nightclub',
107
+ primaryGlowColor: '#06b6d4',
108
+ accentColor: '#ec4899',
109
+ borderRadius: '16px'
110
+ });
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 🛠️ API Reference
116
+
117
+ ### Opsi Konfigurasi (`HoregPlayerOptions`)
118
+
119
+ ```typescript
120
+ interface HoregPlayerOptions {
121
+ container: string | HTMLElement; // Target selector atau elemen DOM
122
+ playlist: Track[]; // Daftar lagu
123
+ initialIndex?: number; // Indeks lagu awal (default: 0)
124
+ autoplay?: boolean; // Otomatis memutar lagu
125
+ loop?: 'none' | 'all' | 'one'; // Mode perulangan (default: 'all')
126
+ shuffle?: boolean; // Acak urutan lagu (default: false)
127
+ volume?: number; // Level volume 0.0 - 1.0 (default: 0.8)
128
+ theme?: HoregTheme; // Konfigurasi tema
129
+ onPlay?: (track: Track) => void;
130
+ onPause?: () => void;
131
+ onTrackChange?: (track: Track, index: number) => void;
132
+ onPlaylistChange?: (playlist: Track[], currentIndex: number) => void;
133
+ onTimeUpdate?: (currentTime: number, duration: number) => void;
134
+ onEnded?: (track: Track) => void;
135
+ onError?: (error: MediaError | Error) => void;
136
+ }
137
+ ```
138
+
139
+ ### Metode Publik
140
+
141
+ - `player.play(): Promise<void>` - Memutar lagu.
142
+ - `player.pause(): void` - Menjeda audio.
143
+ - `player.toggle(): void` - Toggle play/pause.
144
+ - `player.next(): void` - Berpindah ke lagu berikutnya.
145
+ - `player.prev(): void` - Kembali ke awal lagu atau lagu sebelumnya.
146
+ - `player.seek(seconds: number): void` - Lompat ke detik tertentu.
147
+ - `player.setVolume(level: number): void` - Mengatur volume (`0.0` sampai `1.0`).
148
+ - `player.loadTrack(indexOrTrack: number | Track): void` - Memuat trek tertentu.
149
+ - `player.addTrack(track: Track, autoPlay?: boolean): number` - Menambahkan lagu ke playlist.
150
+ - `player.addTracks(tracks: Track[], autoPlay?: boolean): void` - Menambahkan kumpulan lagu ke playlist.
151
+ - `player.addTrackFromFile(file: File, autoPlay?: boolean): Promise<Track>` - Menambahkan lagu dari file lokal komputer (otomatis ekstrak nama dan durasi).
152
+ - `player.addTrackFromFiles(files: FileList | File[], autoPlay?: boolean): Promise<Track[]>` - Menambahkan banyak file audio lokal sekaligus.
153
+ - `player.addTrackFromUrl(url: string, meta?: Partial<Track>, autoPlay?: boolean): Promise<Track>` - Menambahkan lagu dari URL online/streaming.
154
+ - `player.removeTrack(index: number): void` - Menghapus lagu dari playlist berdasarkan indeks.
155
+ - `player.getPlaylist(): Track[]` - Mengambil daftar lagu saat ini.
156
+ - `player.setTheme(themeConfig: Partial<HoregTheme>): void` - Mengganti tema secara realtime.
157
+ - `player.destroy(): void` - Membersihkan event listeners, audio stream, dan DOM Shadow Root.
158
+
159
+ ---
160
+
161
+ ## ⌨️ Pintasan Keyboard (Accessibility)
162
+
163
+ Ketika elemen pemutar atau tombol di dalamnya difokuskan:
164
+ - `Space`: Toggle Play / Pause
165
+ - `Arrow Left`: Mundur 5 detik
166
+ - `Arrow Right`: Maju 5 detik
167
+ - `Arrow Up`: Naikkan volume 5%
168
+ - `Arrow Down`: Turunkan volume 5%
169
+
170
+ ---
171
+
172
+ ## 💻 Pengembangan Lokal
173
+
174
+ ```bash
175
+ # Clone & install dependensi menggunakan pnpm
176
+ pnpm install
177
+
178
+ # Menjalankan local development server (demo)
179
+ pnpm run dev
180
+
181
+ # Kompilasi TypeScript dan bundle library untuk produksi
182
+ pnpm run build
183
+ ```
184
+
185
+ ---
186
+
187
+ ## 📄 Lisensi
188
+
189
+ MIT License © 2026.
190
+