@edrlab/thorium-web 1.2.1 → 1.3.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.
Files changed (100) hide show
  1. package/dist/{ThPreferencesAdapter-DrZ5_6Dv.d.mts → ThPreferencesAdapter-D0rzsGRl.d.mts} +50 -13
  2. package/dist/{ThSettingsWrapper-8Kx0SnH4.d.mts → ThSettingsWrapper-BXuRgdqp.d.mts} +42 -4
  3. package/dist/{actions-D2CHvCHu.d.mts → actions-BLAr0oaM.d.mts} +16 -4
  4. package/dist/{actionsReducer-kc-S130w.d.mts → actionsReducer-XWTGGNUd.d.mts} +46 -14
  5. package/dist/chunk-2ORXUOH3.mjs +134 -0
  6. package/dist/chunk-2ORXUOH3.mjs.map +1 -0
  7. package/dist/chunk-3GDQP6AS.mjs +14 -0
  8. package/dist/chunk-3GDQP6AS.mjs.map +1 -0
  9. package/dist/chunk-6BUN7DEA.mjs +854 -0
  10. package/dist/chunk-6BUN7DEA.mjs.map +1 -0
  11. package/dist/{chunk-IYAFKTPL.mjs → chunk-6EHFW43Y.mjs} +5 -4
  12. package/dist/chunk-6EHFW43Y.mjs.map +1 -0
  13. package/dist/chunk-7CGMWOZN.mjs +20 -0
  14. package/dist/chunk-7CGMWOZN.mjs.map +1 -0
  15. package/dist/{chunk-4VHEHMJN.mjs → chunk-A3FZBEUL.mjs} +228 -94
  16. package/dist/chunk-A3FZBEUL.mjs.map +1 -0
  17. package/dist/{chunk-NYZBHYW2.mjs → chunk-DETZMFZ7.mjs} +366 -61
  18. package/dist/chunk-DETZMFZ7.mjs.map +1 -0
  19. package/dist/{chunk-QPE574OW.mjs → chunk-DMZFSOHK.mjs} +28 -36
  20. package/dist/chunk-DMZFSOHK.mjs.map +1 -0
  21. package/dist/{chunk-7NEQAW7J.mjs → chunk-DTPO3J2C.mjs} +676 -930
  22. package/dist/chunk-DTPO3J2C.mjs.map +1 -0
  23. package/dist/{chunk-K3K7TUWM.mjs → chunk-EZG6SBSO.mjs} +358 -94
  24. package/dist/chunk-EZG6SBSO.mjs.map +1 -0
  25. package/dist/chunk-GPWW5OML.mjs +1955 -0
  26. package/dist/chunk-GPWW5OML.mjs.map +1 -0
  27. package/dist/{chunk-P4V3LA5R.mjs → chunk-I4BKU5NN.mjs} +13 -9
  28. package/dist/chunk-I4BKU5NN.mjs.map +1 -0
  29. package/dist/{chunk-47AIIJFO.mjs → chunk-ITDBOMY5.mjs} +3 -3
  30. package/dist/{chunk-47AIIJFO.mjs.map → chunk-ITDBOMY5.mjs.map} +1 -1
  31. package/dist/{chunk-XVSFXHYB.mjs → chunk-L4XGZAZ5.mjs} +23 -20
  32. package/dist/chunk-L4XGZAZ5.mjs.map +1 -0
  33. package/dist/{chunk-PXAUQJEU.mjs → chunk-LP3JFZ4A.mjs} +2425 -1634
  34. package/dist/chunk-LP3JFZ4A.mjs.map +1 -0
  35. package/dist/{chunk-72XCX5TD.mjs → chunk-NKO3K3QS.mjs} +14 -9
  36. package/dist/chunk-NKO3K3QS.mjs.map +1 -0
  37. package/dist/chunk-SAUOY37Q.mjs +862 -0
  38. package/dist/chunk-SAUOY37Q.mjs.map +1 -0
  39. package/dist/chunk-TEZB4ULX.mjs +57 -0
  40. package/dist/chunk-TEZB4ULX.mjs.map +1 -0
  41. package/dist/components/Audio/index.css +1858 -0
  42. package/dist/components/Audio/index.css.map +1 -0
  43. package/dist/components/Audio/index.d.mts +103 -0
  44. package/dist/components/Audio/index.mjs +23 -0
  45. package/dist/components/Audio/index.mjs.map +1 -0
  46. package/dist/components/Epub/index.css +365 -9
  47. package/dist/components/Epub/index.css.map +1 -1
  48. package/dist/components/Epub/index.d.mts +17 -19
  49. package/dist/components/Epub/index.mjs +18 -13
  50. package/dist/components/Misc/index.css +7 -4
  51. package/dist/components/Misc/index.css.map +1 -1
  52. package/dist/components/Misc/index.mjs +5 -133
  53. package/dist/components/Misc/index.mjs.map +1 -1
  54. package/dist/components/Reader/index.css +1022 -183
  55. package/dist/components/Reader/index.css.map +1 -1
  56. package/dist/components/Reader/index.d.mts +16 -16
  57. package/dist/components/Reader/index.mjs +124 -25
  58. package/dist/components/Reader/index.mjs.map +1 -1
  59. package/dist/components/WebPub/index.css +365 -9
  60. package/dist/components/WebPub/index.css.map +1 -1
  61. package/dist/components/WebPub/index.d.mts +16 -16
  62. package/dist/components/WebPub/index.mjs +18 -13
  63. package/dist/core/Components/index.d.mts +64 -15
  64. package/dist/core/Components/index.mjs +2 -1
  65. package/dist/core/Helpers/index.d.mts +2 -2
  66. package/dist/core/Helpers/index.mjs +4 -2
  67. package/dist/core/Hooks/index.d.mts +7 -8
  68. package/dist/core/Hooks/index.mjs +3 -1
  69. package/dist/i18n/index.mjs +6 -7
  70. package/dist/lib/index.d.mts +159 -15
  71. package/dist/lib/index.mjs +4 -2
  72. package/dist/lib-M3PPQDJJ.mjs +6548 -0
  73. package/dist/lib-M3PPQDJJ.mjs.map +1 -0
  74. package/dist/locales/en/thorium-web.json +22 -0
  75. package/dist/next-lib/index.mjs +2 -0
  76. package/dist/next-lib/index.mjs.map +1 -1
  77. package/dist/preferences/index.d.mts +111 -13
  78. package/dist/preferences/index.mjs +6 -3
  79. package/dist/{settingsReducer-C1wwCAMv.d.mts → settingsReducer-Bu1zeveu.d.mts} +1 -1
  80. package/dist/{ui-CamWuqOo.d.mts → ui-nBv8gfr0.d.mts} +20 -1
  81. package/dist/useAudioNavigator-C5aW4-eT.d.mts +133 -0
  82. package/dist/{useContrast-D6sjPjxy.d.mts → useContrast-2t429O9O.d.mts} +16 -8
  83. package/dist/usePreferences-VaBf46eP.d.mts +230 -0
  84. package/dist/useReaderTransitions-IBGdE7qi.d.mts +530 -0
  85. package/dist/{useTimeline-DyMx_aWY.d.mts → useTimeline-DCZ1qoCO.d.mts} +4 -2
  86. package/package.json +17 -13
  87. package/dist/chunk-4VHEHMJN.mjs.map +0 -1
  88. package/dist/chunk-72XCX5TD.mjs.map +0 -1
  89. package/dist/chunk-7NEQAW7J.mjs.map +0 -1
  90. package/dist/chunk-IYAFKTPL.mjs.map +0 -1
  91. package/dist/chunk-K3K7TUWM.mjs.map +0 -1
  92. package/dist/chunk-NYZBHYW2.mjs.map +0 -1
  93. package/dist/chunk-P4V3LA5R.mjs.map +0 -1
  94. package/dist/chunk-PXAUQJEU.mjs.map +0 -1
  95. package/dist/chunk-QPE574OW.mjs.map +0 -1
  96. package/dist/chunk-XVSFXHYB.mjs.map +0 -1
  97. package/dist/useEpubNavigator-CwHJfoiV.d.mts +0 -42
  98. package/dist/usePreferences-BXFJbval.d.mts +0 -43
  99. package/dist/useReaderTransitions-guT-eA-Q.d.mts +0 -365
  100. package/dist/useWebPubNavigator-CuSNQKMw.d.mts +0 -39
@@ -1,3 +1,4 @@
1
+ import { toEntryRef } from './chunk-TEZB4ULX.mjs';
1
2
  import { defaultPlatformModifier } from './chunk-5LUMM7FW.mjs';
2
3
  import { useRef } from 'react';
3
4
  import { useDispatch, useSelector, useStore, Provider } from 'react-redux';
@@ -272,8 +273,10 @@ var initialState3 = {
272
273
  colorScheme: "light" /* light */,
273
274
  theme: {
274
275
  reflow: "auto",
275
- fxl: "auto"
276
+ fxl: "auto",
277
+ audio: "auto"
276
278
  },
279
+ coverTheme: void 0,
277
280
  prefersReducedMotion: false,
278
281
  prefersReducedTransparency: false,
279
282
  prefersContrast: "no-preference" /* none */,
@@ -293,6 +296,9 @@ var themeSlice = createSlice({
293
296
  setTheme: (state, action) => {
294
297
  state.theme[action.payload.key] = action.payload.value || "auto";
295
298
  },
299
+ setCoverTheme: (state, action) => {
300
+ state.coverTheme = action.payload;
301
+ },
296
302
  setReducedMotion: (state, action) => {
297
303
  state.prefersReducedMotion = action.payload;
298
304
  },
@@ -314,6 +320,7 @@ var {
314
320
  setMonochrome,
315
321
  setColorScheme,
316
322
  setTheme,
323
+ setCoverTheme,
317
324
  setReducedMotion,
318
325
  setReducedTransparency,
319
326
  setContrast,
@@ -323,64 +330,120 @@ var {
323
330
  var themeReducer_default = themeSlice.reducer;
324
331
  var initialState4 = {
325
332
  dock: {
326
- ["dockingStart" /* start */]: {
327
- actionKey: null,
328
- active: false,
329
- collapsed: false
330
- },
331
- ["dockingEnd" /* end */]: {
332
- actionKey: null,
333
- active: false,
334
- collapsed: false
333
+ epub: {
334
+ ["dockingStart" /* start */]: {
335
+ actionKey: null,
336
+ active: false,
337
+ collapsed: false
338
+ },
339
+ ["dockingEnd" /* end */]: {
340
+ actionKey: null,
341
+ active: false,
342
+ collapsed: false
343
+ }
344
+ },
345
+ webPub: {
346
+ ["dockingStart" /* start */]: {
347
+ actionKey: null,
348
+ active: false,
349
+ collapsed: false
350
+ },
351
+ ["dockingEnd" /* end */]: {
352
+ actionKey: null,
353
+ active: false,
354
+ collapsed: false
355
+ }
356
+ },
357
+ audio: {
358
+ ["dockingStart" /* start */]: {
359
+ actionKey: null,
360
+ active: false,
361
+ collapsed: false
362
+ },
363
+ ["dockingEnd" /* end */]: {
364
+ actionKey: null,
365
+ active: false,
366
+ collapsed: false
367
+ }
335
368
  }
336
369
  },
337
- keys: {},
370
+ keys: {
371
+ epub: {},
372
+ webPub: {},
373
+ audio: {}
374
+ },
338
375
  overflow: {}
339
376
  };
377
+ var initializeProfileDock = (state, profile) => {
378
+ if (!state.dock[profile]) {
379
+ state.dock[profile] = {
380
+ ["dockingStart" /* start */]: {
381
+ actionKey: null,
382
+ active: false,
383
+ collapsed: false
384
+ },
385
+ ["dockingEnd" /* end */]: {
386
+ actionKey: null,
387
+ active: false,
388
+ collapsed: false
389
+ }
390
+ };
391
+ }
392
+ };
393
+ var initializeProfileKeys = (state, profile) => {
394
+ if (!state.keys[profile]) {
395
+ state.keys[profile] = {};
396
+ }
397
+ };
340
398
  var actionsSlice = createSlice({
341
399
  name: "actions",
342
400
  initialState: initialState4,
343
401
  reducers: {
344
402
  dockAction: (state, action) => {
345
- switch (action.payload.dockingKey) {
403
+ const { key, dockingKey, profile } = action.payload;
404
+ initializeProfileDock(state, profile);
405
+ initializeProfileKeys(state, profile);
406
+ const profileDock = state.dock[profile];
407
+ const profileKeys = state.keys[profile];
408
+ switch (dockingKey) {
346
409
  case "dockingStart" /* start */:
347
- for (const key in state.keys) {
348
- if (state.keys[key]?.docking === action.payload.dockingKey) {
349
- state.keys[key] = {
350
- ...state.keys[key],
410
+ for (const k in profileKeys) {
411
+ if (profileKeys[k]?.docking === dockingKey) {
412
+ profileKeys[k] = {
413
+ ...profileKeys[k],
351
414
  docking: "dockingTransient" /* transient */,
352
415
  isOpen: false
353
416
  };
354
417
  }
355
418
  }
356
- state.dock["dockingStart" /* start */] = {
357
- ...state.dock["dockingStart" /* start */],
358
- actionKey: action.payload.key
419
+ profileDock["dockingStart" /* start */] = {
420
+ ...profileDock["dockingStart" /* start */],
421
+ actionKey: key
359
422
  };
360
- if (state.dock["dockingEnd" /* end */].actionKey === action.payload.key) {
361
- state.dock["dockingEnd" /* end */] = {
362
- ...state.dock["dockingEnd" /* end */],
423
+ if (profileDock["dockingEnd" /* end */].actionKey === key) {
424
+ profileDock["dockingEnd" /* end */] = {
425
+ ...profileDock["dockingEnd" /* end */],
363
426
  actionKey: null
364
427
  };
365
428
  }
366
429
  break;
367
430
  case "dockingEnd" /* end */:
368
- for (const key in state.keys) {
369
- if (state.keys[key]?.docking === action.payload.dockingKey) {
370
- state.keys[key] = {
371
- ...state.keys[key],
431
+ for (const k in profileKeys) {
432
+ if (profileKeys[k]?.docking === dockingKey) {
433
+ profileKeys[k] = {
434
+ ...profileKeys[k],
372
435
  docking: "dockingTransient" /* transient */,
373
436
  isOpen: false
374
437
  };
375
438
  }
376
439
  }
377
- state.dock["dockingEnd" /* end */] = {
378
- ...state.dock["dockingEnd" /* end */],
379
- actionKey: action.payload.key
440
+ profileDock["dockingEnd" /* end */] = {
441
+ ...profileDock["dockingEnd" /* end */],
442
+ actionKey: key
380
443
  };
381
- if (state.dock["dockingStart" /* start */].actionKey === action.payload.key) {
382
- state.dock["dockingStart" /* start */] = {
383
- ...state.dock["dockingStart" /* start */],
444
+ if (profileDock["dockingStart" /* start */].actionKey === key) {
445
+ profileDock["dockingStart" /* start */] = {
446
+ ...profileDock["dockingStart" /* start */],
384
447
  actionKey: null
385
448
  };
386
449
  }
@@ -388,43 +451,40 @@ var actionsSlice = createSlice({
388
451
  // We don’t need to sync another action
389
452
  case "dockingTransient" /* transient */:
390
453
  default:
391
- if (state.dock["dockingStart" /* start */].actionKey === action.payload.key) {
392
- state.dock["dockingStart" /* start */] = {
393
- ...state.dock["dockingStart" /* start */],
454
+ if (profileDock["dockingStart" /* start */].actionKey === key) {
455
+ profileDock["dockingStart" /* start */] = {
456
+ ...profileDock["dockingStart" /* start */],
394
457
  actionKey: null
395
458
  };
396
459
  }
397
- if (state.dock["dockingEnd" /* end */].actionKey === action.payload.key) {
398
- state.dock["dockingEnd" /* end */] = {
399
- ...state.dock["dockingEnd" /* end */],
460
+ if (profileDock["dockingEnd" /* end */].actionKey === key) {
461
+ profileDock["dockingEnd" /* end */] = {
462
+ ...profileDock["dockingEnd" /* end */],
400
463
  actionKey: null
401
464
  };
402
465
  }
403
466
  break;
404
467
  }
405
- state.keys[action.payload.key] = {
406
- ...state.keys[action.payload.key],
407
- docking: action.payload.dockingKey
468
+ profileKeys[key] = {
469
+ ...profileKeys[key],
470
+ docking: dockingKey
408
471
  };
409
472
  },
410
473
  setActionOpen: (state, action) => {
411
- const dockingKey = state.keys[action.payload.key]?.docking;
412
- if (!action.payload.isOpen && dockingKey && dockingKey !== "dockingTransient" /* transient */ && state.dock[dockingKey].actionKey === action.payload.key && state.dock[dockingKey].active && state.dock[dockingKey].collapsed) {
413
- state.dock[dockingKey] = {
414
- ...state.dock[dockingKey],
415
- collapsed: false
416
- };
417
- } else {
418
- state.keys[action.payload.key] = {
419
- ...state.keys[action.payload.key],
420
- isOpen: action.payload.isOpen
421
- };
422
- }
474
+ const { key, isOpen, profile } = action.payload;
475
+ initializeProfileKeys(state, profile);
476
+ state.keys[profile][key] = {
477
+ ...state.keys[profile][key],
478
+ isOpen
479
+ };
423
480
  },
424
481
  toggleActionOpen: (state, action) => {
482
+ const { key, profile } = action.payload;
483
+ initializeProfileKeys(state, profile);
425
484
  const payload = {
426
- key: action.payload.key,
427
- isOpen: state.keys[action.payload.key]?.isOpen ? !state.keys[action.payload.key]?.isOpen : true
485
+ key,
486
+ isOpen: state.keys[profile][key]?.isOpen ? !state.keys[profile][key]?.isOpen : true,
487
+ profile
428
488
  };
429
489
  actionsSlice.caseReducers.setActionOpen(state, {
430
490
  type: "toggleActionOpen",
@@ -438,43 +498,52 @@ var actionsSlice = createSlice({
438
498
  };
439
499
  },
440
500
  activateDockPanel: (state, action) => {
441
- state.dock[action.payload] = {
442
- ...state.dock[action.payload],
501
+ const { slot, profile } = action.payload;
502
+ initializeProfileDock(state, profile);
503
+ state.dock[profile][slot] = {
504
+ ...state.dock[profile][slot],
443
505
  active: true
444
506
  };
445
507
  },
446
508
  deactivateDockPanel: (state, action) => {
447
- state.dock[action.payload] = {
448
- ...state.dock[action.payload],
509
+ const { slot, profile } = action.payload;
510
+ initializeProfileDock(state, profile);
511
+ state.dock[profile][slot] = {
512
+ ...state.dock[profile][slot],
449
513
  active: false
450
514
  };
451
515
  },
452
516
  collapseDockPanel: (state, action) => {
453
- state.dock[action.payload] = {
454
- ...state.dock[action.payload],
517
+ const { slot, profile } = action.payload;
518
+ initializeProfileDock(state, profile);
519
+ state.dock[profile][slot] = {
520
+ ...state.dock[profile][slot],
455
521
  collapsed: true
456
522
  };
457
523
  },
458
524
  expandDockPanel: (state, action) => {
459
- state.dock[action.payload] = {
460
- ...state.dock[action.payload],
525
+ const { slot, profile } = action.payload;
526
+ initializeProfileDock(state, profile);
527
+ state.dock[profile][slot] = {
528
+ ...state.dock[profile][slot],
461
529
  collapsed: false
462
530
  };
463
531
  },
464
532
  setDockPanelWidth: (state, action) => {
465
- const key = state.dock[action.payload.key].actionKey;
466
- if (key) {
467
- state.keys[key] = {
468
- ...state.keys[key],
469
- dockedWidth: action.payload.width
470
- };
471
- }
472
- if (state.dock[action.payload.key] !== null) {
473
- state.dock[action.payload.key] = {
474
- ...state.dock[action.payload.key],
475
- width: action.payload.width
533
+ const { key, width, profile } = action.payload;
534
+ initializeProfileDock(state, profile);
535
+ initializeProfileKeys(state, profile);
536
+ const dockKey = state.dock[profile][key].actionKey;
537
+ if (dockKey) {
538
+ state.keys[profile][dockKey] = {
539
+ ...state.keys[profile][dockKey],
540
+ dockedWidth: width
476
541
  };
477
542
  }
543
+ state.dock[profile][key] = {
544
+ ...state.dock[profile][key],
545
+ width
546
+ };
478
547
  }
479
548
  }
480
549
  });
@@ -498,7 +567,8 @@ var initialState5 = {
498
567
  positionsList: [],
499
568
  atPublicationStart: false,
500
569
  atPublicationEnd: false,
501
- unstableTimeline: void 0
570
+ unstableTimeline: void 0,
571
+ adjacentTimelineItems: { previous: null, next: null }
502
572
  };
503
573
  var publicationSlice = createSlice({
504
574
  name: "publication",
@@ -542,15 +612,19 @@ var publicationSlice = createSlice({
542
612
  state.unstableTimeline.toc = { tree: action.payload, currentEntry: void 0 };
543
613
  }
544
614
  },
615
+ setAdjacentTimelineItems: (state, action) => {
616
+ state.adjacentTimelineItems = action.payload;
617
+ },
545
618
  setTocEntry: (state, action) => {
619
+ const entry = action.payload ? toEntryRef(action.payload) : null;
546
620
  if (!state.unstableTimeline) {
547
621
  state.unstableTimeline = {
548
- toc: { tree: void 0, currentEntry: action.payload }
622
+ toc: { tree: void 0, currentEntry: entry }
549
623
  };
550
624
  } else if (state.unstableTimeline.toc) {
551
- state.unstableTimeline.toc.currentEntry = action.payload;
625
+ state.unstableTimeline.toc.currentEntry = entry;
552
626
  } else {
553
- state.unstableTimeline.toc = { tree: void 0, currentEntry: action.payload };
627
+ state.unstableTimeline.toc = { tree: void 0, currentEntry: entry };
554
628
  }
555
629
  }
556
630
  }
@@ -565,7 +639,8 @@ var {
565
639
  setPublicationEnd,
566
640
  setTimeline,
567
641
  setTocTree,
568
- setTocEntry
642
+ setTocEntry,
643
+ setAdjacentTimelineItems
569
644
  } = publicationSlice.actions;
570
645
  var publicationReducer_default = publicationSlice.reducer;
571
646
 
@@ -948,6 +1023,116 @@ var {
948
1023
  setWebPubZoom
949
1024
  } = webPubSettingsSlice.actions;
950
1025
  var webPubSettingsReducer_default = webPubSettingsSlice.reducer;
1026
+ var initialState8 = {
1027
+ volume: 1,
1028
+ playbackRate: 1,
1029
+ preservePitch: true,
1030
+ skipBackwardInterval: 10,
1031
+ skipForwardInterval: 10,
1032
+ skipInterval: 10,
1033
+ pollInterval: 1e3,
1034
+ autoPlay: true,
1035
+ enableMediaSession: true
1036
+ };
1037
+ var audioSettingsSlice = createSlice({
1038
+ name: "audioSettings",
1039
+ initialState: initialState8,
1040
+ reducers: {
1041
+ setVolume: (state, action) => {
1042
+ state.volume = action.payload;
1043
+ },
1044
+ setPlaybackRate: (state, action) => {
1045
+ state.playbackRate = action.payload;
1046
+ },
1047
+ setPreservePitch: (state, action) => {
1048
+ state.preservePitch = action.payload;
1049
+ },
1050
+ setSkipBackwardInterval: (state, action) => {
1051
+ state.skipBackwardInterval = action.payload;
1052
+ },
1053
+ setSkipForwardInterval: (state, action) => {
1054
+ state.skipForwardInterval = action.payload;
1055
+ },
1056
+ setSkipInterval: (state, action) => {
1057
+ state.skipInterval = action.payload;
1058
+ },
1059
+ setPollInterval: (state, action) => {
1060
+ state.pollInterval = action.payload;
1061
+ },
1062
+ setAutoPlay: (state, action) => {
1063
+ state.autoPlay = action.payload;
1064
+ },
1065
+ setEnableMediaSession: (state, action) => {
1066
+ state.enableMediaSession = action.payload;
1067
+ }
1068
+ }
1069
+ });
1070
+ var {
1071
+ setVolume,
1072
+ setPlaybackRate,
1073
+ setPreservePitch,
1074
+ setSkipBackwardInterval,
1075
+ setSkipForwardInterval,
1076
+ setSkipInterval,
1077
+ setPollInterval,
1078
+ setAutoPlay,
1079
+ setEnableMediaSession
1080
+ } = audioSettingsSlice.actions;
1081
+ var audioSettingsReducer_default = audioSettingsSlice.reducer;
1082
+ var initialState9 = {
1083
+ status: "idle",
1084
+ isSeeking: false,
1085
+ isStalled: false,
1086
+ isTrackReady: false,
1087
+ sleepTimer: { remainingSeconds: null, onTrackEnd: false, onFragmentEnd: false },
1088
+ remotePlaybackState: null,
1089
+ seekableRanges: []
1090
+ };
1091
+ var playerSlice = createSlice({
1092
+ name: "player",
1093
+ initialState: initialState9,
1094
+ reducers: {
1095
+ setStatus: (state, action) => {
1096
+ state.status = action.payload;
1097
+ },
1098
+ setSeeking: (state, action) => {
1099
+ state.isSeeking = action.payload;
1100
+ },
1101
+ setStalled: (state, action) => {
1102
+ state.isStalled = action.payload;
1103
+ },
1104
+ setTrackReady: (state, action) => {
1105
+ state.isTrackReady = action.payload;
1106
+ },
1107
+ setSleepTimerRemainingSeconds: (state, action) => {
1108
+ state.sleepTimer.remainingSeconds = action.payload;
1109
+ },
1110
+ setSleepTimerOnTrackEnd: (state, action) => {
1111
+ state.sleepTimer.onTrackEnd = action.payload;
1112
+ },
1113
+ setSleepTimerOnFragmentEnd: (state, action) => {
1114
+ state.sleepTimer.onFragmentEnd = action.payload;
1115
+ },
1116
+ setRemotePlaybackState: (state, action) => {
1117
+ state.remotePlaybackState = action.payload;
1118
+ },
1119
+ setSeekableRanges: (state, action) => {
1120
+ state.seekableRanges = action.payload;
1121
+ }
1122
+ }
1123
+ });
1124
+ var {
1125
+ setStatus,
1126
+ setSeeking,
1127
+ setStalled,
1128
+ setTrackReady,
1129
+ setSleepTimerRemainingSeconds,
1130
+ setSleepTimerOnTrackEnd,
1131
+ setSleepTimerOnFragmentEnd,
1132
+ setRemotePlaybackState,
1133
+ setSeekableRanges
1134
+ } = playerSlice.actions;
1135
+ var playerReducer_default = playerSlice.reducer;
951
1136
 
952
1137
  // node_modules/.pnpm/debounce@3.0.0/node_modules/debounce/index.js
953
1138
  function debounce(function_, wait = 100, options = {}) {
@@ -1043,19 +1228,87 @@ var migrateFontFamily = (stateSlice) => {
1043
1228
  return stateSlice;
1044
1229
  };
1045
1230
  var updateActionsState = (state) => {
1046
- const updatedKeys = Object.fromEntries(
1047
- Object.entries(state.keys).map(([key, value]) => [
1048
- key,
1049
- {
1050
- ...value,
1051
- isOpen: value?.docking === "dockingTransient" /* transient */ || value?.docking == null && value?.isOpen === true ? false : value?.isOpen
1052
- }
1053
- ])
1054
- );
1231
+ if (state.keys && typeof state.keys === "object" && ("epub" in state.keys || "webPub" in state.keys || "audio" in state.keys)) {
1232
+ const updatedKeys = {};
1233
+ for (const profile in state.keys) {
1234
+ updatedKeys[profile] = Object.fromEntries(
1235
+ Object.entries(state.keys[profile]).map(([key, value]) => [
1236
+ key,
1237
+ {
1238
+ ...value,
1239
+ // Transient/undocked actions should never re-open on load
1240
+ // Docked actions reset to null so useDocking re-establishes open state
1241
+ // based on the actual breakpoint at load time (avoids opening docked
1242
+ // sheets in fullscreen/compact where docking is unavailable)
1243
+ isOpen: value?.docking === "dockingTransient" /* transient */ || value?.docking == null ? false : value?.docking === "dockingStart" /* start */ || value?.docking === "dockingEnd" /* end */ ? null : value?.isOpen
1244
+ }
1245
+ ])
1246
+ );
1247
+ }
1248
+ return {
1249
+ ...state,
1250
+ keys: updatedKeys,
1251
+ overflow: {}
1252
+ };
1253
+ } else {
1254
+ const updatedKeys = Object.fromEntries(
1255
+ Object.entries(state.keys).map(([key, value]) => [
1256
+ key,
1257
+ {
1258
+ ...value,
1259
+ isOpen: value?.docking === "dockingTransient" /* transient */ || value?.docking == null ? false : value?.docking === "dockingStart" /* start */ || value?.docking === "dockingEnd" /* end */ ? null : value?.isOpen
1260
+ }
1261
+ ])
1262
+ );
1263
+ return {
1264
+ ...state,
1265
+ keys: updatedKeys,
1266
+ overflow: {}
1267
+ };
1268
+ }
1269
+ };
1270
+ var migrateDockStateToProfileKeyed = (state) => {
1271
+ if (state.dock && typeof state.dock === "object" && !("epub" in state.dock || "webPub" in state.dock || "audio" in state.dock)) {
1272
+ const oldDock = state.dock;
1273
+ if (oldDock["dockingStart" /* start */] || oldDock["dockingEnd" /* end */]) {
1274
+ const newDock = {};
1275
+ newDock["epub"] = {
1276
+ ["dockingStart" /* start */]: oldDock["dockingStart" /* start */] || { actionKey: null, active: false, collapsed: false },
1277
+ ["dockingEnd" /* end */]: oldDock["dockingEnd" /* end */] || { actionKey: null, active: false, collapsed: false }
1278
+ };
1279
+ return {
1280
+ ...state,
1281
+ dock: newDock
1282
+ };
1283
+ }
1284
+ }
1285
+ return state;
1286
+ };
1287
+ var migrateKeysStateToProfileKeyed = (state) => {
1288
+ if (!state.keys) {
1289
+ return state;
1290
+ }
1291
+ const isProfileKeyed = "epub" in state.keys || "webPub" in state.keys || "audio" in state.keys;
1292
+ if (!isProfileKeyed) {
1293
+ const oldKeys = state.keys;
1294
+ const newKeys = {
1295
+ epub: { ...oldKeys },
1296
+ webPub: {},
1297
+ audio: {}
1298
+ };
1299
+ return {
1300
+ ...state,
1301
+ keys: newKeys
1302
+ };
1303
+ }
1304
+ const migratedKeys = {
1305
+ epub: state.keys.epub || {},
1306
+ webPub: state.keys.webPub || {},
1307
+ audio: state.keys.audio || {}
1308
+ };
1055
1309
  return {
1056
1310
  ...state,
1057
- keys: updatedKeys,
1058
- overflow: {}
1311
+ keys: migratedKeys
1059
1312
  };
1060
1313
  };
1061
1314
  var loadState = (storageKey = DEFAULT_STORAGE_KEY) => {
@@ -1068,10 +1321,16 @@ var loadState = (storageKey = DEFAULT_STORAGE_KEY) => {
1068
1321
  settings: void 0,
1069
1322
  theming: void 0,
1070
1323
  preferences: void 0,
1071
- webPubSettings: void 0
1324
+ webPubSettings: void 0,
1325
+ audioSettings: void 0
1072
1326
  };
1073
1327
  }
1074
1328
  let state = JSON.parse(serializedState);
1329
+ if (state && state.actions) {
1330
+ state.actions = migrateDockStateToProfileKeyed(state.actions);
1331
+ state.actions = migrateKeysStateToProfileKeyed(state.actions);
1332
+ state.actions = updateActionsState(state.actions);
1333
+ }
1075
1334
  if (state) {
1076
1335
  if (state.settings) {
1077
1336
  state.settings = migrateFontFamily(state.settings);
@@ -1081,6 +1340,7 @@ var loadState = (storageKey = DEFAULT_STORAGE_KEY) => {
1081
1340
  }
1082
1341
  if (state.actions) {
1083
1342
  state.actions = updateActionsState(state.actions);
1343
+ state.actions = migrateDockStateToProfileKeyed(state.actions);
1084
1344
  }
1085
1345
  }
1086
1346
  return state;
@@ -1103,6 +1363,7 @@ var saveState = (state, storageKey, externalReducers = {}) => {
1103
1363
  if (state.theming) stateToPersist.theming = state.theming;
1104
1364
  if (state.preferences) stateToPersist.preferences = state.preferences;
1105
1365
  if (state.webPubSettings) stateToPersist.webPubSettings = state.webPubSettings;
1366
+ if (state.audioSettings) stateToPersist.audioSettings = state.audioSettings;
1106
1367
  Object.entries(externalReducers).forEach(([key, config]) => {
1107
1368
  if (config.persist && state[key] !== void 0) {
1108
1369
  stateToPersist[key] = state[key];
@@ -1123,6 +1384,8 @@ var makeStore = (storageKey, externalReducers = {}) => {
1123
1384
  publication: publicationReducer_default,
1124
1385
  preferences: preferencesReducer_default,
1125
1386
  webPubSettings: webPubSettingsReducer_default,
1387
+ audioSettings: audioSettingsReducer_default,
1388
+ player: playerReducer_default,
1126
1389
  ...Object.entries(externalReducers).reduce((acc, [key, config]) => ({
1127
1390
  ...acc,
1128
1391
  [key]: config.reducer
@@ -1135,6 +1398,7 @@ var makeStore = (storageKey, externalReducers = {}) => {
1135
1398
  theming: persistedState.theming,
1136
1399
  preferences: persistedState.preferences,
1137
1400
  webPubSettings: persistedState.webPubSettings,
1401
+ audioSettings: persistedState.audioSettings,
1138
1402
  // Include persisted state for external reducers that have it
1139
1403
  ...Object.entries(externalReducers).reduce((acc, [key, config]) => {
1140
1404
  if (config.persist && persistedState[key] !== void 0) {
@@ -1208,6 +1472,6 @@ var useAppDispatch = useDispatch;
1208
1472
  var useAppSelector = useSelector;
1209
1473
  var useAppStore = useStore;
1210
1474
 
1211
- export { ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, debounce, dockAction, expandDockPanel, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, preferencesSlice, publicationSlice, readerSlice, setActionOpen, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontLanguage, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setHyphens, setImmersive, setL10n, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setPaginatedAffordance, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgressionFormat, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRunningHeadFormat, setScroll, setScrollAffordance, setScrollAffordances, setSettingsContainer, setSpacingPreset, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setUI, setUserNavigated, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLineHeight, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice };
1212
- //# sourceMappingURL=chunk-K3K7TUWM.mjs.map
1213
- //# sourceMappingURL=chunk-K3K7TUWM.mjs.map
1475
+ export { ThReduxPreferencesAdapter, ThStoreProvider, actionsSlice, activateDockPanel, audioSettingsSlice, collapseDockPanel, deactivateDockPanel, debounce, dockAction, expandDockPanel, handleSpacingSetting, initialSettingsState, initialWebPubSettingsState, makeStore, playerSlice, preferencesSlice, publicationSlice, readerSlice, setActionOpen, setAdjacentTimelineItems, setAutoPlay, setBreakpoint, setColorScheme, setColumnCount, setContrast, setCoverTheme, setDirection, setDockPanelWidth, setEnableMediaSession, setFXL, setFontFamily, setFontLanguage, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHasArrows, setHasDisplayTransformability, setHovering, setHyphens, setImmersive, setL10n, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setPaginatedAffordance, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPlaybackRate, setPollInterval, setPositionsList, setPreservePitch, setProgressionFormat, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReaderProfile, setReducedMotion, setReducedTransparency, setRemotePlaybackState, setRunningHeadFormat, setScroll, setScrollAffordance, setScrollAffordances, setSeekableRanges, setSeeking, setSettingsContainer, setSkipBackwardInterval, setSkipForwardInterval, setSkipInterval, setSleepTimerOnFragmentEnd, setSleepTimerOnTrackEnd, setSleepTimerRemainingSeconds, setSpacingPreset, setStalled, setStatus, setTextAlign, setTextNormalization, setTheme, setTimeline, setTocEntry, setTocTree, setTrackReady, setUI, setUserNavigated, setVolume, setWebPubFontFamily, setWebPubFontWeight, setWebPubHyphens, setWebPubLetterSpacing, setWebPubLineHeight, setWebPubParagraphIndent, setWebPubParagraphSpacing, setWebPubPublisherStyles, setWebPubSpacingPreset, setWebPubTextAlign, setWebPubTextNormalization, setWebPubWordSpacing, setWebPubZoom, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, updateFromPreferences, useAppDispatch, useAppSelector, useAppStore, webPubSettingsSlice };
1476
+ //# sourceMappingURL=chunk-EZG6SBSO.mjs.map
1477
+ //# sourceMappingURL=chunk-EZG6SBSO.mjs.map