# Verify Package Exports

Quick verification guide to ensure all exports are working correctly.

## Available Exports

### Main Classes

```typescript
import { 
  KaraokePlayer,     // ✅ Main player class (all-in-one)
  KarFile,           // ✅ KAR file parser
  MIDIFile,          // ✅ MIDI file parser
  MIDIPlayer,        // ✅ MIDI player (low-level)
} from '@karaplay/kar-player';
```

### Utilities

```typescript
import {
  SpessaSynthWrapper,        // ✅ SpessaSynth wrapper
  AudioContextGuard,         // ✅ AudioContext manager
  SequencerTimingHelper,     // ✅ Timing helper
  LyricRenderer,             // ✅ Lyric renderer
  PageVisibilityManager,     // ✅ Tab visibility manager
} from '@karaplay/kar-player';
```

### React Hooks

```typescript
import {
  useLyricRenderer,          // ✅ Basic lyric renderer
  useLyricRendererOptimized, // ✅ Optimized renderer
  useLyricHighlight,         // ✅ Lyric highlighter
  useLyricText,              // ✅ Text-only renderer
} from '@karaplay/kar-player';
```

### EMK Converters

```typescript
import {
  // Client-side (Browser)
  convertEmkToKarBrowser,
  isEmkFile,
  isEmkFilename,
  getFileExtension,
  
  // Server-side (Node.js)
  convertEmkToKarServer,
  convertEmkBufferToKar,
  convertEmkToKarBatchServer,
} from '@karaplay/kar-player';
```

### Performance Utilities

```typescript
import {
  DOMElementPool,
  LazyRenderer,
  WeakCache,
  FrameBudgetManager,
  VirtualScroller,
  AdaptiveQuality,
  BatchScheduler,
  MemoryMonitor,
} from '@karaplay/kar-player';
```

### Thai Text Utilities

```typescript
import {
  isThaiVowelOrDiacritic,
  isOnlyThaiVowels,
  mergeThaiVowelsWithPreviousParts,
  normalizeThaiText,
  splitThaiText,
} from '@karaplay/kar-player';
```

### Google Fonts

```typescript
import {
  loadGoogleFont,
  applyFontToLyrics,
  getFontConfig,
  getFontFamily,
  isValidThaiFont,
  getAvailableThaifonts,
  autoLoadFontFromEnv,
  THAI_FONTS,
} from '@karaplay/kar-player';
```

### Themes & Config

```typescript
import {
  defaultTheme,
  karaokeTheme,
  minimalTheme,
  extremeKaraokeTheme,
  themes,
  getTheme,
  registerTheme,
  loadEnvConfig,
  envConfigToDisplayOptions,
  envConfigToTheme,
  createThemeFromEnv,
  loadDisplayOptionsFromEnv,
  mergeWithEnvConfig,
} from '@karaplay/kar-player';
```

---

## Verification Scripts

### 1. Node.js Verification

```javascript
// verify-node.js
const pkg = require('@karaplay/kar-player');

console.log('✅ Available Exports:');
console.log('- KaraokePlayer:', typeof pkg.KaraokePlayer);
console.log('- KarFile:', typeof pkg.KarFile);
console.log('- MIDIFile:', typeof pkg.MIDIFile);
console.log('- MIDIPlayer:', typeof pkg.MIDIPlayer);
console.log('- useLyricRenderer:', typeof pkg.useLyricRenderer);
console.log('- convertEmkToKarBrowser:', typeof pkg.convertEmkToKarBrowser);
console.log('- convertEmkToKarServer:', typeof pkg.convertEmkToKarServer);

if (pkg.KaraokePlayer && pkg.KarFile && pkg.MIDIPlayer) {
  console.log('\n✅ All main exports verified!');
} else {
  console.log('\n❌ Some exports are missing!');
  process.exit(1);
}
```

Run:
```bash
node verify-node.js
```

### 2. TypeScript Verification

```typescript
// verify-types.ts
import { 
  KaraokePlayer,
  KarFile,
  MIDIPlayer,
  useLyricRenderer,
  convertEmkToKarBrowser,
  convertEmkToKarServer,
  type KaraokePlayerConfig,
  type KaraokePlayerState,
} from '@karaplay/kar-player';

console.log('✅ TypeScript imports successful!');
console.log('- KaraokePlayer:', typeof KaraokePlayer);
console.log('- KarFile:', typeof KarFile);
console.log('- MIDIPlayer:', typeof MIDIPlayer);
console.log('- useLyricRenderer:', typeof useLyricRenderer);
```

Run:
```bash
npx ts-node verify-types.ts
```

### 3. Next.js Verification (App Router)

```tsx
// app/test-imports/page.tsx
'use client';

import { useEffect, useState } from 'react';
import { 
  KaraokePlayer,
  KarFile,
  MIDIPlayer,
  type KaraokePlayerConfig 
} from '@karaplay/kar-player';

export default function TestImports() {
  const [status, setStatus] = useState<string[]>([]);

  useEffect(() => {
    const results = [
      `KaraokePlayer: ${typeof KaraokePlayer}`,
      `KarFile: ${typeof KarFile}`,
      `MIDIPlayer: ${typeof MIDIPlayer}`,
    ];
    setStatus(results);
  }, []);

  return (
    <div>
      <h1>Import Verification</h1>
      {status.map((s, i) => (
        <div key={i}>✅ {s}</div>
      ))}
    </div>
  );
}
```

---

## Common Issues

### Issue: "Module not found"

**Solution 1: Reinstall**
```bash
rm -rf node_modules package-lock.json
npm install @karaplay/kar-player@1.0.2
```

**Solution 2: Clear Next.js cache**
```bash
rm -rf .next
npm run dev
```

### Issue: "Export not found"

**Check package version:**
```bash
npm list @karaplay/kar-player
```

Expected: `@karaplay/kar-player@1.0.2`

**Update if needed:**
```bash
npm install @karaplay/kar-player@1.0.2
```

### Issue: TypeScript errors

**Install types:**
```bash
npm install --save-dev @types/node
```

**Update tsconfig.json:**
```json
{
  "compilerOptions": {
    "moduleResolution": "bundler",
    "types": ["node"]
  }
}
```

---

## Quick Test

```bash
# Install
npm install @karaplay/kar-player@1.0.2

# Test import
node -e "const {KaraokePlayer} = require('@karaplay/kar-player'); console.log('✅ KaraokePlayer:', typeof KaraokePlayer);"
```

Expected output:
```
✅ KaraokePlayer: function
```

---

## Package Info

**Package:** `@karaplay/kar-player@1.0.2`
**Exports:** 100+ functions, classes, and types
**Status:** ✅ All verified

For full API documentation, see:
- [README.md](./README.md)
- [EMK_SUPPORT.md](./EMK_SUPPORT.md)
- [INSTALL_GUIDE.md](./INSTALL_GUIDE.md)
