## 📦 Libraries

### ✨ New Features
- **`basics/promiseUtils.mjs`**: Added `createSingletonTask`, a utility that creates a wrapper to ensure an asynchronous function is only executed once at a time. If a task is already in progress, subsequent calls will wait for the existing promise to resolve.
- **`basics/objChecker.mjs`**: Added `isValidObj`.

### 🛠️ Improvements & Refactors
- **`libs/TinyTimeout.mjs`**: The `static` version of `waitForTrue` has been deprecated and migrated to `basics/promiseUtils.mjs`. 
  - *Note: The instance method remains available and will continue to function as expected.*

### ⚠️ Breaking Changes
- **`basics/objFilter.mjs`**: Removed aliases `countObj` and `isJsonObject`. 
  - **Action Required**: Please import these functions directly from `basics/objChecker.mjs` from now on.

---

## 🎬 TinyMediaPlayer

### ⚠️ Breaking Changes
- **`registerAdapter`**: The method no longer accepts an `Id` parameter. You must now pass the adapter directly; the ID will be automatically managed and stored internally within the instance.

### ✨ New Features
- **New Adapters**:
  - `HtmlVideoAdapter` 📹
  - `HtmlAudioAdapter` 🎵
  - `YoutubeMediaAdapter` 📺
- **New Methods**: `removeAdapter`, `destroyAdapter`, `hasAdapter`, `getMediaAdapter`, `destroyAllAdapters`, and `clearAdapters`.
- **New Properties/Options**: `repeatCurrentOnPrev`, `smoothPlayPauseVolume`, `smoothStopVolume`, `adapters`, `adaptersSize`, `fadeVolumeSpeed`, and `prevClickTimeoutDuration`.
- **New Getters**:
  - `adapters`: Returns an array of the current list of adapters.
  - `adaptersSize`: Returns the total number of installed instances.
