Audio uses a separate preferences system from EPUB and WebPub. Use createAudioPreferences and ThAudioPreferencesProvider instead of their EPUB/WebPub equivalents.
The createAudioPreferences helper creates a validated ThAudioPreferences object. It warns at runtime about:
- unreachable slider presets given the configured
rangeandstep - conflicting skip interval keys (
skipIntervalused alongsideskipBackwardIntervalorskipForwardInterval) - secondary action keys present in
displayOrderbut missing fromkeys
import { createAudioPreferences } from "@edrlab/thorium-web/audio";
const myPreferences = createAudioPreferences({
// ... your audio preferences
});You can extend the audio actions by adding custom keys:
import { createAudioPreferences, AudioCustomizableKeys, ThAudioActionKeys } from "@edrlab/thorium-web/audio";
enum MyAudioActions {
bookmark = "audio.bookmark"
}
type MyAudioKeys = {
audioAction: MyAudioActions | ThAudioActionKeys;
} & AudioCustomizableKeys;
const prefs = createAudioPreferences<MyAudioKeys>({
actions: {
...,
secondary: {
displayOrder: [ThAudioActionKeys.toc, MyAudioActions.bookmark],
keys: {
[MyAudioActions.bookmark]: {
visibility: "always",
shortcut: null
}
}
}
}
});import { ThAudioPreferencesProvider } from "@edrlab/thorium-web/audio";
function App() {
return (
<ThAudioPreferencesProvider
adapter={ yourAdapter } // Optional: custom adapter for persistence
devMode={ true } // Optional: enable dev mode
initialPreferences={ prefs } // Optional: initial preferences
>
<YourApp />
</ThAudioPreferencesProvider>
);
}adapter?: Optional custom adapter for persisting preferencesdevMode?: Optional boolean to enable dev mode — this will disable all content protection settingsinitialPreferences?: Optional initial preferences object — note this will override the default preferences and dev modechildren: Your application components
import { useAudioPreferences } from "@edrlab/thorium-web/audio";
function MyComponent() {
const { preferences, updatePreferences } = useAudioPreferences();
const { settings } = preferences;
}