@edrlab/thorium-web 0.11.0 → 0.13.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 CHANGED
@@ -34,7 +34,7 @@ The development server will automatically reload the page when you make changes
34
34
  To use Thorium Web in your own project, install the package and its peer dependencies:
35
35
 
36
36
  ```bash
37
- npm install @edrlab/thorium-web react-redux @reduxjs/toolkit motion react-aria react-aria-components react-stately react-modal-sheet react-resizable-panels
37
+ npm install @edrlab/thorium-web @readium/css @readium/navigator @readium/navigator-html-injectables @readium/shared react-redux @reduxjs/toolkit motion react-aria react-aria-components react-stately react-modal-sheet react-resizable-panels
38
38
  ```
39
39
 
40
40
  Then you can import and use the components in your own code:
@@ -148,17 +148,16 @@ var initialState2 = {
148
148
  layoutStrategy: "lineLength" /* lineLength */,
149
149
  letterSpacing: null,
150
150
  lineHeight: "publisher" /* publisher */,
151
- lineLength: null,
151
+ lineLength: {
152
+ optimal: 65
153
+ },
152
154
  paragraphIndent: null,
153
155
  paragraphSpacing: null,
154
156
  publisherStyles: true,
155
157
  scroll: false,
156
158
  textAlign: "publisher" /* publisher */,
157
159
  textNormalization: false,
158
- wordSpacing: null,
159
- tmpLineLengths: [],
160
- tmpMaxChars: false,
161
- tmpMinChars: false
160
+ wordSpacing: null
162
161
  };
163
162
  var settingsSlice = createSlice({
164
163
  name: "settings",
@@ -189,7 +188,41 @@ var settingsSlice = createSlice({
189
188
  state.lineHeight = action.payload;
190
189
  },
191
190
  setLineLength: (state, action) => {
192
- state.lineLength = action.payload;
191
+ const deriveIsDisabled = (value, isDisabled) => {
192
+ if (value === null) return true;
193
+ if (isDisabled !== void 0) return isDisabled;
194
+ return false;
195
+ };
196
+ switch (action.payload.key) {
197
+ case "optimal":
198
+ if (action.payload.value) {
199
+ state.lineLength = {
200
+ ...state.lineLength,
201
+ optimal: action.payload.value
202
+ };
203
+ }
204
+ break;
205
+ case "min":
206
+ state.lineLength = {
207
+ ...state.lineLength,
208
+ min: {
209
+ ...state.lineLength.min,
210
+ chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength.min?.chars,
211
+ isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)
212
+ }
213
+ };
214
+ break;
215
+ case "max":
216
+ state.lineLength = {
217
+ ...state.lineLength,
218
+ max: {
219
+ ...state.lineLength.max,
220
+ chars: action.payload.value !== void 0 ? action.payload.value : state.lineLength.max?.chars,
221
+ isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)
222
+ }
223
+ };
224
+ break;
225
+ }
193
226
  },
194
227
  setParagraphIndent: (state, action) => {
195
228
  state.paragraphIndent = action.payload;
@@ -211,15 +244,6 @@ var settingsSlice = createSlice({
211
244
  },
212
245
  setWordSpacing: (state, action) => {
213
246
  state.wordSpacing = action.payload;
214
- },
215
- setTmpLineLengths: (state, action) => {
216
- state.tmpLineLengths = action.payload;
217
- },
218
- setTmpMaxChars: (state, action) => {
219
- state.tmpMaxChars = action.payload;
220
- },
221
- setTmpMinChars: (state, action) => {
222
- state.tmpMinChars = action.payload;
223
247
  }
224
248
  }
225
249
  });
@@ -239,10 +263,7 @@ var {
239
263
  setScroll,
240
264
  setTextAlign,
241
265
  setTextNormalization,
242
- setWordSpacing,
243
- setTmpLineLengths,
244
- setTmpMaxChars,
245
- setTmpMinChars
266
+ setWordSpacing
246
267
  } = settingsSlice.actions;
247
268
  var settingsReducer_default = settingsSlice.reducer;
248
269
  var initialState3 = {
@@ -600,6 +621,6 @@ var useAppDispatch = useDispatch;
600
621
  var useAppSelector = useSelector;
601
622
  var useAppStore = useStore;
602
623
 
603
- export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, require_debounce, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLayoutStrategy, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTmpLineLengths, setTmpMaxChars, setTmpMinChars, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
604
- //# sourceMappingURL=chunk-IUF5GAPA.mjs.map
605
- //# sourceMappingURL=chunk-IUF5GAPA.mjs.map
624
+ export { ThStoreProvider, actionsSlice, activateDockPanel, collapseDockPanel, deactivateDockPanel, dockAction, expandDockPanel, makeStore, publicationSlice, readerSlice, require_debounce, setActionOpen, setArrows, setBreakpoint, setColorScheme, setColumnCount, setContrast, setDirection, setDockPanelWidth, setFXL, setFontFamily, setFontSize, setFontWeight, setForcedColors, setFullscreen, setHovering, setHyphens, setImmersive, setLayoutStrategy, setLetterSpacing, setLineHeight, setLineLength, setLoading, setMonochrome, setOverflow, setParagraphIndent, setParagraphSpacing, setPlatformModifier, setPositionsList, setProgression, setPublicationEnd, setPublicationStart, setPublisherStyles, setRTL, setReducedMotion, setReducedTransparency, setRunningHead, setScroll, setSettingsContainer, setTextAlign, setTextNormalization, setTheme, setTocEntry, setTocTree, setWordSpacing, settingsSlice, themeSlice, toggleActionOpen, toggleImmersive, useAppDispatch, useAppSelector, useAppStore };
625
+ //# sourceMappingURL=chunk-AFXHD6TS.mjs.map
626
+ //# sourceMappingURL=chunk-AFXHD6TS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/.pnpm/debounce@2.2.0/node_modules/debounce/index.js","../src/lib/readerReducer.ts","../src/lib/settingsReducer.ts","../src/lib/themeReducer.ts","../src/lib/actionsReducer.ts","../src/lib/publicationReducer.ts","../src/lib/store.ts","../src/lib/ThStoreProvider.tsx","../src/lib/hooks.ts"],"names":["debounce","initialState","createSlice"],"mappings":";;;;;;;;AAAA,IAAA,gBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,kEAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,SAASA,UAAS,SAAW,EAAA,IAAA,GAAO,GAAK,EAAA,OAAA,GAAU,EAAI,EAAA;AACtD,MAAI,IAAA,OAAO,cAAc,UAAY,EAAA;AACpC,QAAA,MAAM,IAAI,SAAA,CAAU,CAAwD,qDAAA,EAAA,OAAO,SAAS,CAAK,GAAA,CAAA,CAAA;AAAA;AAGlG,MAAA,IAAI,OAAO,CAAG,EAAA;AACb,QAAM,MAAA,IAAI,WAAW,8BAA8B,CAAA;AAAA;AAIpD,MAAM,MAAA,EAAC,WAAa,GAAA,OAAO,YAAY,SAAY,GAAA,EAAC,SAAW,EAAA,OAAA,EAAW,GAAA,OAAA;AAE1E,MAAI,IAAA,aAAA;AACJ,MAAI,IAAA,eAAA;AACJ,MAAI,IAAA,SAAA;AACJ,MAAI,IAAA,SAAA;AACJ,MAAI,IAAA,MAAA;AAEJ,MAAA,SAAS,GAAM,GAAA;AACd,QAAA,MAAM,WAAc,GAAA,aAAA;AACpB,QAAA,MAAM,aAAgB,GAAA,eAAA;AACtB,QAAgB,aAAA,GAAA,MAAA;AAChB,QAAkB,eAAA,GAAA,MAAA;AAClB,QAAS,MAAA,GAAA,SAAA,CAAU,KAAM,CAAA,WAAA,EAAa,aAAa,CAAA;AACnD,QAAO,OAAA,MAAA;AAAA;AAGR,MAAA,SAAS,KAAQ,GAAA;AAChB,QAAM,MAAA,IAAA,GAAO,IAAK,CAAA,GAAA,EAAQ,GAAA,SAAA;AAE1B,QAAI,IAAA,IAAA,GAAO,IAAQ,IAAA,IAAA,IAAQ,CAAG,EAAA;AAC7B,UAAY,SAAA,GAAA,UAAA,CAAW,KAAO,EAAA,IAAA,GAAO,IAAI,CAAA;AAAA,SACnC,MAAA;AACN,UAAY,SAAA,GAAA,MAAA;AAEZ,UAAA,IAAI,CAAC,SAAW,EAAA;AACf,YAAA,MAAA,GAAS,GAAI,EAAA;AAAA;AACd;AACD;AAGD,MAAM,MAAA,SAAA,GAAY,YAAa,UAAY,EAAA;AAC1C,QACC,IAAA,aAAA,IACG,IAAS,KAAA,aAAA,IACT,MAAO,CAAA,cAAA,CAAe,IAAI,CAAM,KAAA,MAAA,CAAO,cAAe,CAAA,aAAa,CACrE,EAAA;AACD,UAAM,MAAA,IAAI,MAAM,wEAAwE,CAAA;AAAA;AAGzF,QAAgB,aAAA,GAAA,IAAA;AAChB,QAAkB,eAAA,GAAA,UAAA;AAClB,QAAA,SAAA,GAAY,KAAK,GAAI,EAAA;AAErB,QAAM,MAAA,OAAA,GAAU,aAAa,CAAC,SAAA;AAE9B,QAAA,IAAI,CAAC,SAAW,EAAA;AACf,UAAY,SAAA,GAAA,UAAA,CAAW,OAAO,IAAI,CAAA;AAAA;AAGnC,QAAA,IAAI,OAAS,EAAA;AACZ,UAAA,MAAA,GAAS,GAAI,EAAA;AAAA;AAGd,QAAO,OAAA,MAAA;AAAA,OACR;AAEA,MAAO,MAAA,CAAA,cAAA,CAAe,WAAW,WAAa,EAAA;AAAA,QAC7C,GAAM,GAAA;AACL,UAAA,OAAO,SAAc,KAAA,MAAA;AAAA;AACtB,OACA,CAAA;AAED,MAAA,SAAA,CAAU,QAAQ,MAAM;AACvB,QAAA,IAAI,CAAC,SAAW,EAAA;AACf,UAAA;AAAA;AAGD,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAY,SAAA,GAAA,MAAA;AAAA,OACb;AAEA,MAAA,SAAA,CAAU,QAAQ,MAAM;AACvB,QAAA,IAAI,CAAC,SAAW,EAAA;AACf,UAAA;AAAA;AAGD,QAAA,SAAA,CAAU,OAAQ,EAAA;AAAA,OACnB;AAEA,MAAA,SAAA,CAAU,UAAU,MAAM;AACzB,QAAA,MAAA,GAAS,GAAI,EAAA;AAEb,QAAA,SAAA,CAAU,KAAM,EAAA;AAAA,OACjB;AAEA,MAAO,OAAA,SAAA;AAAA;AAIR,IAAA,MAAA,CAAO,QAAQ,QAAWA,GAAAA,SAAAA;AAE1B,IAAA,MAAA,CAAO,OAAUA,GAAAA,SAAAA;AAAA;AAAA,CAAA;ACtFjB,IAAM,YAAmC,GAAA;AAAA,EACvC,SAAA,EAAA,KAAA;AAAA,EACA,SAAW,EAAA,IAAA;AAAA,EACX,WAAa,EAAA,KAAA;AAAA,EACb,UAAY,EAAA,KAAA;AAAA,EACZ,SAAW,EAAA,IAAA;AAAA,EACX,YAAc,EAAA,KAAA;AAAA,EACd,iBAAA,EAAA,SAAA;AAAA,EACA,gBAAkB,EAAA;AACpB,CAAA;AAEO,IAAM,cAAc,WAAY,CAAA;AAAA,EACrC,IAAM,EAAA,QAAA;AAAA,EACN,YAAA;AAAA,EACA,QAAU,EAAA;AAAA,IACR,YAAA,EAAc,CAAC,KAAA,EAAO,MAAW,KAAA;AAC/B,MAAA,KAAA,CAAM,YAAY,MAAO,CAAA,OAAA;AAAA,KAC3B;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAW,KAAA;AAC7B,MAAA,KAAA,CAAM,YAAY,MAAO,CAAA,OAAA;AAAA,KAC3B;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAW,KAAA;AACtC,MAAA,KAAA,CAAM,mBAAmB,MAAO,CAAA,OAAA;AAAA,KAClC;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAO,MAAW,KAAA;AAC/B,MAAA,KAAA,CAAM,cAAc,MAAO,CAAA,OAAA;AAAA,KAC7B;AAAA,IACA,eAAA,EAAiB,CAAC,KAAU,KAAA;AAC1B,MAAM,KAAA,CAAA,WAAA,GAAc,CAAC,KAAM,CAAA,WAAA;AAAA,KAC7B;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAW,KAAA;AAC9B,MAAA,KAAA,CAAM,aAAa,MAAO,CAAA,OAAA;AAAA,KAC5B;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,EAAO,MAAW,KAAA;AAC5B,MAAA,KAAA,CAAM,YAAY,MAAO,CAAA,OAAA;AAAA,KAC3B;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAW,KAAA;AAChC,MAAA,KAAA,CAAM,eAAe,MAAO,CAAA,OAAA;AAAA,KAC9B;AAAA,IACA,oBAAA,EAAsB,CAAC,KAAA,EAAO,MAAW,KAAA;AACvC,MAAA,KAAA,CAAM,oBAAoB,MAAO,CAAA,OAAA;AAAA;AACnC;AAEJ,CAAC;AAGY,IAAA;AAAA,EACX,YAAA;AAAA,EACA,UAAA;AAAA,EACA,mBAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,GAAI,WAAY,CAAA;AAEhB,IAAO,wBAAQ,WAAY,CAAA,OAAA;AC7B3B,IAAMC,aAAqC,GAAA;AAAA,EACzC,WAAa,EAAA,MAAA;AAAA,EACb,UAAY,EAAA,WAAA;AAAA,EACZ,QAAU,EAAA,CAAA;AAAA,EACV,UAAY,EAAA,GAAA;AAAA,EACZ,OAAS,EAAA,IAAA;AAAA,EACT,cAAA,EAAA,YAAA;AAAA,EACA,aAAe,EAAA,IAAA;AAAA,EACf,UAAA,EAAA,WAAA;AAAA,EACA,UAAY,EAAA;AAAA,IACV,OAAS,EAAA;AAAA,GACX;AAAA,EACA,eAAiB,EAAA,IAAA;AAAA,EACjB,gBAAkB,EAAA,IAAA;AAAA,EAClB,eAAiB,EAAA,IAAA;AAAA,EACjB,MAAQ,EAAA,KAAA;AAAA,EACR,SAAA,EAAA,WAAA;AAAA,EACA,iBAAmB,EAAA,KAAA;AAAA,EACnB,WAAa,EAAA;AACf,CAAA;AAEO,IAAM,gBAAgBC,WAAY,CAAA;AAAA,EACvC,IAAM,EAAA,UAAA;AAAA,EACN,YAAAD,EAAAA,aAAAA;AAAA,EACA,QAAU,EAAA;AAAA,IACR,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAW,KAAA;AACjC,MAAA,KAAA,CAAM,cAAc,MAAO,CAAA,OAAA;AAAA,KAC7B;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAW,KAAA;AAChC,MAAA,KAAA,CAAM,aAAa,MAAO,CAAA,OAAA;AAAA,KAC5B;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAW,KAAA;AAC9B,MAAA,KAAA,CAAM,WAAW,MAAO,CAAA,OAAA;AAAA,KAC1B;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAW,KAAA;AAChC,MAAA,KAAA,CAAM,aAAa,MAAO,CAAA,OAAA;AAAA,KAC5B;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAW,KAAA;AAC7B,MAAA,KAAA,CAAM,UAAU,MAAO,CAAA,OAAA;AAAA,KACzB;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAW,KAAA;AACpC,MAAA,KAAA,CAAM,iBAAiB,MAAO,CAAA,OAAA;AAAA,KAChC;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAW,KAAA;AACnC,MAAA,KAAA,CAAM,gBAAgB,MAAO,CAAA,OAAA;AAAA,KAC/B;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAW,KAAA;AAChC,MAAA,KAAA,CAAM,aAAa,MAAO,CAAA,OAAA;AAAA,KAC5B;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAiC,KAAA;AAGtD,MAAM,MAAA,gBAAA,GAAmB,CAAC,KAAA,EAAkC,UAAkC,KAAA;AAC5F,QAAI,IAAA,KAAA,KAAU,MAAa,OAAA,IAAA;AAC3B,QAAI,IAAA,UAAA,KAAe,QAAkB,OAAA,UAAA;AACrC,QAAO,OAAA,KAAA;AAAA,OACT;AAEA,MAAQ,QAAA,MAAA,CAAO,QAAQ,GAAK;AAAA,QAC1B,KAAK,SAAA;AACH,UAAI,IAAA,MAAA,CAAO,QAAQ,KAAO,EAAA;AACxB,YAAA,KAAA,CAAM,UAAa,GAAA;AAAA,cACjB,GAAG,KAAM,CAAA,UAAA;AAAA,cACT,OAAA,EAAS,OAAO,OAAQ,CAAA;AAAA,aAC1B;AAAA;AAEF,UAAA;AAAA,QAEF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,UAAa,GAAA;AAAA,YACjB,GAAG,KAAM,CAAA,UAAA;AAAA,YACT,GAAK,EAAA;AAAA,cACH,GAAG,MAAM,UAAW,CAAA,GAAA;AAAA,cACpB,KAAA,EAAO,MAAO,CAAA,OAAA,CAAQ,KAAU,KAAA,MAAA,GAC5B,OAAO,OAAQ,CAAA,KAAA,GACf,KAAM,CAAA,UAAA,CAAW,GAAK,EAAA,KAAA;AAAA,cAC1B,YAAY,gBAAiB,CAAA,MAAA,CAAO,QAAQ,KAAO,EAAA,MAAA,CAAO,QAAQ,UAAU;AAAA;AAC9E,WACF;AACA,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,UAAa,GAAA;AAAA,YACjB,GAAG,KAAM,CAAA,UAAA;AAAA,YACT,GAAK,EAAA;AAAA,cACH,GAAG,MAAM,UAAW,CAAA,GAAA;AAAA,cACpB,KAAA,EAAO,MAAO,CAAA,OAAA,CAAQ,KAAU,KAAA,MAAA,GAC5B,OAAO,OAAQ,CAAA,KAAA,GACf,KAAM,CAAA,UAAA,CAAW,GAAK,EAAA,KAAA;AAAA,cAC1B,YAAY,gBAAiB,CAAA,MAAA,CAAO,QAAQ,KAAO,EAAA,MAAA,CAAO,QAAQ,UAAU;AAAA;AAC9E,WACF;AACA,UAAA;AAEA;AACJ,KACF;AAAA,IACA,kBAAA,EAAoB,CAAC,KAAA,EAAO,MAAW,KAAA;AACrC,MAAA,KAAA,CAAM,kBAAkB,MAAO,CAAA,OAAA;AAAA,KACjC;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAW,KAAA;AACtC,MAAA,KAAA,CAAM,mBAAmB,MAAO,CAAA,OAAA;AAAA,KAClC;AAAA,IACA,kBAAA,EAAoB,CAAC,KAAA,EAAO,MAAW,KAAA;AACrC,MAAA,KAAA,CAAM,kBAAkB,MAAO,CAAA,OAAA;AAAA,KACjC;AAAA,IACA,SAAA,EAAW,CAAC,KAAA,EAAO,MAAW,KAAA;AAC5B,MAAA,KAAA,CAAM,SAAS,MAAO,CAAA,OAAA;AAAA,KACxB;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAO,MAAW,KAAA;AAC/B,MAAA,KAAA,CAAM,YAAY,MAAO,CAAA,OAAA;AAAA,KAC3B;AAAA,IACA,oBAAA,EAAsB,CAAC,KAAA,EAAO,MAAW,KAAA;AACvC,MAAA,KAAA,CAAM,oBAAoB,MAAO,CAAA,OAAA;AAAA,KACnC;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAW,KAAA;AACjC,MAAA,KAAA,CAAM,cAAc,MAAO,CAAA,OAAA;AAAA;AAC7B;AAEJ,CAAC;AAGY,IAAA;AAAA,EACX,cAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,iBAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,GAAI,aAAc,CAAA;AAElB,IAAO,0BAAQ,aAAc,CAAA,OAAA;ACxK7B,IAAMA,aAAkC,GAAA;AAAA,EACtC,UAAY,EAAA,KAAA;AAAA,EACZ,WAAA,EAAA,OAAA;AAAA,EACA,KAAO,EAAA,MAAA;AAAA,EACP,oBAAsB,EAAA,KAAA;AAAA,EACtB,0BAA4B,EAAA,KAAA;AAAA,EAC5B,eAAA,EAAA,eAAA;AAAA,EACA,YAAc,EAAA,KAAA;AAAA,EACd,UAAY,EAAA;AACd,CAAA;AAEO,IAAM,aAAaC,WAAY,CAAA;AAAA,EACpC,IAAM,EAAA,SAAA;AAAA,EACN,YAAAD,EAAAA,aAAAA;AAAA,EACA,QAAU,EAAA;AAAA,IACR,aAAA,EAAe,CAAC,KAAA,EAAO,MAAW,KAAA;AAChC,MAAA,KAAA,CAAM,aAAa,MAAO,CAAA,OAAA;AAAA,KAC5B;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAW,KAAA;AACjC,MAAA,KAAA,CAAM,cAAc,MAAO,CAAA,OAAA;AAAA,KAC7B;AAAA,IACA,QAAA,EAAU,CAAC,KAAA,EAAO,MAAW,KAAA;AAC3B,MAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,OAAA;AAAA,KACvB;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAW,KAAA;AACnC,MAAA,KAAA,CAAM,uBAAuB,MAAO,CAAA,OAAA;AAAA,KACtC;AAAA,IACA,sBAAA,EAAwB,CAAC,KAAA,EAAO,MAAW,KAAA;AACzC,MAAA,KAAA,CAAM,6BAA6B,MAAO,CAAA,OAAA;AAAA,KAC5C;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAW,KAAA;AAC9B,MAAA,KAAA,CAAM,kBAAkB,MAAO,CAAA,OAAA;AAAA,KACjC;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,EAAO,MAAW,KAAA;AAClC,MAAA,KAAA,CAAM,eAAe,MAAO,CAAA,OAAA;AAAA,KAC9B;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAW,KAAA;AAChC,MAAA,KAAA,CAAM,aAAa,MAAO,CAAA,OAAA;AAAA;AAC5B;AAEJ,CAAC;AAGY,IAAA;AAAA,EACX,aAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,sBAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,GAAI,UAAW,CAAA;AAEf,IAAO,uBAAQ,UAAW,CAAA,OAAA;ACoB1B,IAAMA,aAAoC,GAAA;AAAA,EACxC,IAAM,EAAA;AAAA,IACJ,8BAAuB;AAAA,MACrB,SAAW,EAAA,IAAA;AAAA,MACX,MAAQ,EAAA,KAAA;AAAA,MACR,SAAW,EAAA;AAAA,KACb;AAAA,IACA,0BAAqB;AAAA,MACnB,SAAW,EAAA,IAAA;AAAA,MACX,MAAQ,EAAA,KAAA;AAAA,MACR,SAAW,EAAA;AAAA;AACb,GACF;AAAA,EACA,MAAM,EAAC;AAAA,EACP,UAAU;AACZ,CAAA;AAEO,IAAM,eAAeC,WAAY,CAAA;AAAA,EACtC,IAAM,EAAA,SAAA;AAAA,EACN,YAAAD,EAAAA,aAAAA;AAAA,EACA,QAAU,EAAA;AAAA,IACR,UAAA,EAAY,CAAC,KAAA,EAAO,MAAmC,KAAA;AAIrD,MAAO,QAAA,MAAA,CAAO,QAAQ,UAAY;AAAA,QAChC,KAAA,cAAA;AAIE,UAAW,KAAA,MAAA,GAAA,IAAO,MAAM,IAAM,EAAA;AAC5B,YAAA,IAAI,MAAM,IAAK,CAAA,GAAuB,GAAG,OAAY,KAAA,MAAA,CAAO,QAAQ,UAAY,EAAA;AAC9E,cAAM,KAAA,CAAA,IAAA,CAAK,GAAuB,CAAI,GAAA;AAAA,gBACpC,GAAG,KAAM,CAAA,IAAA,CAAK,GAAuB,CAAA;AAAA,gBACrC,OAAA,EAAA,kBAAA;AAAA,gBACA,MAAQ,EAAA;AAAA,eACV;AAAA;AACF;AAIF,UAAA,KAAA,CAAM,gCAA4B,GAAA;AAAA,YAChC,GAAG,MAAM,IAAwB,CAAA,cAAA,aAAA;AAAA,YACjC,SAAA,EAAW,OAAO,OAAQ,CAAA;AAAA,WAC5B;AAEA,UAAA,IAAI,MAAM,IAAsB,CAAA,YAAA,WAAA,CAAE,SAAc,KAAA,MAAA,CAAO,QAAQ,GAAK,EAAA;AAClE,YAAA,KAAA,CAAM,4BAA0B,GAAA;AAAA,cAC9B,GAAG,MAAM,IAAsB,CAAA,YAAA,WAAA;AAAA,cAC/B,SAAW,EAAA;AAAA,aACb;AAAA;AAEF,UAAA;AAAA,QAEF,KAAA,YAAA;AAIE,UAAW,KAAA,MAAA,GAAA,IAAO,MAAM,IAAM,EAAA;AAC5B,YAAA,IAAI,MAAM,IAAK,CAAA,GAAuB,GAAG,OAAY,KAAA,MAAA,CAAO,QAAQ,UAAY,EAAA;AAC9E,cAAM,KAAA,CAAA,IAAA,CAAK,GAAuB,CAAI,GAAA;AAAA,gBACpC,GAAG,KAAM,CAAA,IAAA,CAAK,GAAuB,CAAA;AAAA,gBACrC,OAAA,EAAA,kBAAA;AAAA,gBACA,MAAQ,EAAA;AAAA,eACV;AAAA;AACF;AAIF,UAAA,KAAA,CAAM,4BAA0B,GAAA;AAAA,YAC9B,GAAG,MAAM,IAAsB,CAAA,YAAA,WAAA;AAAA,YAC/B,SAAA,EAAW,OAAO,OAAQ,CAAA;AAAA,WAC5B;AAEA,UAAA,IAAI,MAAM,IAAwB,CAAA,cAAA,aAAA,CAAE,SAAc,KAAA,MAAA,CAAO,QAAQ,GAAK,EAAA;AACpE,YAAA,KAAA,CAAM,gCAA4B,GAAA;AAAA,cAChC,GAAG,MAAM,IAAwB,CAAA,cAAA,aAAA;AAAA,cACjC,SAAW,EAAA;AAAA,aACb;AAAA;AAEF,UAAA;AAAA;AAAA,QAGF,KAAA,kBAAA;AAAA,QACA;AAEE,UAAA,IAAI,MAAM,IAAwB,CAAA,cAAA,aAAA,CAAE,SAAc,KAAA,MAAA,CAAO,QAAQ,GAAK,EAAA;AACpE,YAAA,KAAA,CAAM,gCAA4B,GAAA;AAAA,cAChC,GAAG,MAAM,IAAwB,CAAA,cAAA,aAAA;AAAA,cACjC,SAAW,EAAA;AAAA,aACb;AAAA;AAEF,UAAA,IAAI,MAAM,IAAsB,CAAA,YAAA,WAAA,CAAE,SAAc,KAAA,MAAA,CAAO,QAAQ,GAAK,EAAA;AAClE,YAAA,KAAA,CAAM,4BAA0B,GAAA;AAAA,cAC9B,GAAG,MAAM,IAAsB,CAAA,YAAA,WAAA;AAAA,cAC/B,SAAW,EAAA;AAAA,aACb;AAAA;AAEF,UAAA;AAAA;AAGJ,MAAA,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,CAAI,GAAA;AAAA,QAC/B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,QAChC,OAAA,EAAS,OAAO,OAAQ,CAAA;AAAA,OAC1B;AAAA,KACF;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,EAAO,MAAmC,KAAA;AAIxD,MAAA,MAAM,aAAa,KAAM,CAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,GAAG,CAAG,EAAA,OAAA;AACnD,MACI,IAAA,CAAC,OAAO,OAAQ,CAAA,MAAA,IAChB,cACA,UACA,KAAA,kBAAA,oBAAA,KAAA,CAAM,IAAK,CAAA,UAAU,CAAE,CAAA,SAAA,KAAc,OAAO,OAAQ,CAAA,GAAA,IACpD,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA,CAAE,UACvB,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA,CAAE,SACzB,EAAA;AACA,QAAM,KAAA,CAAA,IAAA,CAAK,UAAU,CAAI,GAAA;AAAA,UACvB,GAAG,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA;AAAA,UACxB,SAAW,EAAA;AAAA,SACb;AAAA,OACK,MAAA;AACL,QAAA,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,CAAI,GAAA;AAAA,UAC/B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,UAChC,MAAA,EAAQ,OAAO,OAAQ,CAAA;AAAA,SACzB;AAAA;AACF,KACF;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAqC,KAAA;AAC7D,MAAA,MAAM,OAAU,GAAA;AAAA,QACd,GAAA,EAAK,OAAO,OAAQ,CAAA,GAAA;AAAA,QACpB,MAAQ,EAAA,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,QAAQ,GAAG,CAAA,EAAG,MAAS,GAAA,CAAC,MAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,GAAG,MAAS,GAAA;AAAA,OAC7F;AACA,MAAa,YAAA,CAAA,YAAA,CAAa,cAAc,KAAO,EAAA;AAAA,QAC7C,IAAM,EAAA,kBAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA,KACH;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAsC,KAAA;AACzD,MAAA,KAAA,CAAM,QAAS,CAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,CAAI,GAAA;AAAA,QACnC,GAAG,KAAA,CAAM,QAAS,CAAA,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,QACpC,MAAA,EAAQ,OAAO,OAAQ,CAAA;AAAA,OACzB;AAAA,KACF;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAmC,KAAA;AAC5D,MAAM,KAAA,CAAA,IAAA,CAAK,MAAO,CAAA,OAAO,CAAI,GAAA;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,MAAQ,EAAA;AAAA,OACV;AAAA,KACF;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAmC,KAAA;AAC9D,MAAM,KAAA,CAAA,IAAA,CAAK,MAAO,CAAA,OAAO,CAAI,GAAA;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,MAAQ,EAAA;AAAA,OACV;AAAA,KACF;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAmC,KAAA;AAC5D,MAAM,KAAA,CAAA,IAAA,CAAK,MAAO,CAAA,OAAO,CAAI,GAAA;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,SAAW,EAAA;AAAA,OACb;AAAA,KACF;AAAA,IACA,eAAA,EAAiB,CAAC,KAAA,EAAO,MAAmC,KAAA;AAC1D,MAAM,KAAA,CAAA,IAAA,CAAK,MAAO,CAAA,OAAO,CAAI,GAAA;AAAA,QAC3B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,QAC5B,SAAW,EAAA;AAAA,OACb;AAAA,KACF;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAwC,KAAA;AAIjE,MAAA,MAAM,MAA+B,KAAM,CAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,GAAG,CAAE,CAAA,SAAA;AACpE,MAAA,IAAI,GAAK,EAAA;AACP,QAAM,KAAA,CAAA,IAAA,CAAK,GAAG,CAAI,GAAA;AAAA,UAChB,GAAG,KAAM,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,UACjB,WAAA,EAAa,OAAO,OAAQ,CAAA;AAAA,SAC9B;AAAA;AAIF,MAAA,IAAI,MAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,MAAM,IAAM,EAAA;AAC3C,QAAA,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,OAAQ,CAAA,GAAG,CAAI,GAAA;AAAA,UAC/B,GAAG,KAAA,CAAM,IAAK,CAAA,MAAA,CAAO,QAAQ,GAAG,CAAA;AAAA,UAChC,KAAA,EAAO,OAAO,OAAQ,CAAA;AAAA,SACxB;AAAA;AACF;AACF;AAEJ,CAAC;AAEY,IAAA;AAAA,EACX,UAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,GAAI,YAAa,CAAA;AAEjB,IAAO,yBAAQ,YAAa,CAAA,OAAA;ACtR5B,IAAMA,aAAwC,GAAA;AAAA,EAC5C,WAAa,EAAA,MAAA;AAAA,EACb,KAAO,EAAA,KAAA;AAAA,EACP,KAAO,EAAA,KAAA;AAAA,EACP,aAAa,EAAC;AAAA,EACd,eAAe,EAAC;AAAA,EAChB,kBAAoB,EAAA,KAAA;AAAA,EACpB,gBAAkB,EAAA,KAAA;AAAA,EAClB,OAAS,EAAA,MAAA;AAAA,EACT,QAAU,EAAA;AACZ,CAAA;AAEO,IAAM,mBAAmBC,WAAY,CAAA;AAAA,EAC1C,IAAM,EAAA,aAAA;AAAA,EACN,YAAAD,EAAAA,aAAAA;AAAA,EACA,QAAU,EAAA;AAAA,IACR,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAW,KAAA;AACjC,MAAA,KAAA,CAAM,cAAc,MAAO,CAAA,OAAA;AAAA,KAC7B;AAAA,IACA,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAW,KAAA;AACzB,MAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,OAAA;AAAA,KACvB;AAAA,IACA,MAAA,EAAQ,CAAC,KAAA,EAAO,MAAW,KAAA;AACzB,MAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,OAAA;AAAA,KACvB;AAAA,IACA,cAAA,EAAgB,CAAC,KAAA,EAAO,MAAW,KAAA;AACjC,MAAA,KAAA,CAAM,cAAc,EAAC,GAAG,MAAM,WAAa,EAAA,GAAG,OAAO,OAAQ,EAAA;AAAA,KAC/D;AAAA,IACA,gBAAA,EAAkB,CAAC,KAAA,EAAO,MAAW,KAAA;AACnC,MAAA,KAAA,CAAM,gBAAgB,MAAO,CAAA,OAAA;AAAA,KAC/B;AAAA,IACA,mBAAA,EAAqB,CAAC,KAAA,EAAO,MAAW,KAAA;AACtC,MAAA,KAAA,CAAM,qBAAqB,MAAO,CAAA,OAAA;AAAA,KACpC;AAAA,IACA,iBAAA,EAAmB,CAAC,KAAA,EAAO,MAAW,KAAA;AACpC,MAAA,KAAA,CAAM,mBAAmB,MAAO,CAAA,OAAA;AAAA,KAClC;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAW,KAAA;AAC7B,MAAA,KAAA,CAAM,UAAU,MAAO,CAAA,OAAA;AAAA,KACzB;AAAA,IACA,WAAA,EAAa,CAAC,KAAA,EAAO,MAAW,KAAA;AAC9B,MAAA,KAAA,CAAM,WAAW,MAAO,CAAA,OAAA;AAAA;AAC1B;AAEJ,CAAC;AAGY,IAAA;AAAA,EACX,cAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,GAAI,gBAAiB,CAAA;AAErB,IAAO,6BAAQ,gBAAiB,CAAA,OAAA;;;ACnEhC,IAAqB,eAAA,GAAA,OAAA,CAAA,gBAAA,EAAA,CAAA;AAErB,IAAM,mBAAsB,GAAA,mBAAA;AAE5B,IAAM,kBAAA,GAAqB,CAAC,KAA+B,KAAA;AACzD,EAAA,MAAM,cAAc,MAAO,CAAA,WAAA;AAAA,IACzB,MAAA,CAAO,OAAQ,CAAA,KAAA,CAAM,IAAI,CAAA,CAAE,IAAI,CAAC,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AAAA,MAC/C,GAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,KAAO,EAAA,OAAA,KAAA,kBAAA,oBAAuC,KAAO,EAAA,OAAA,KAAY,QAAQ,KAAO,EAAA,MAAA,KAAW,IAAO,GAAA,KAAA,GAAQ,KAAO,EAAA;AAAA;AAC3H,KACD;AAAA,GACH;AAEA,EAAO,OAAA;AAAA,IACL,GAAG,KAAA;AAAA,IACH,IAAM,EAAA,WAAA;AAAA,IACN,UAAU;AAAC,GACb;AACF,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,UAAwB,KAAA;AACzC,EAAI,IAAA;AACF,IAAA,MAAM,cAAc,UAAc,IAAA,mBAAA;AAClC,IAAM,MAAA,eAAA,GAAkB,YAAa,CAAA,OAAA,CAAQ,WAAW,CAAA;AACxD,IAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,MAAA,OAAO,EAAE,OAAS,EAAA,KAAA,CAAA,EAAW,QAAU,EAAA,KAAA,CAAA,EAAW,SAAS,KAAU,CAAA,EAAA;AAAA;AAEvE,IAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,KAAA,CAAM,eAAe,CAAA;AACpD,IAAkB,iBAAA,CAAA,OAAA,GAAU,kBAAmB,CAAA,iBAAA,CAAkB,OAAO,CAAA;AACxE,IAAO,OAAA,iBAAA;AAAA,WACA,GAAK,EAAA;AACZ,IAAA,OAAO,EAAE,OAAS,EAAA,MAAA,EAAW,QAAU,EAAA,MAAA,EAAW,SAAS,MAAU,EAAA;AAAA;AAEzE,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,KAAA,EAAe,UAAwB,KAAA;AACxD,EAAI,IAAA;AACF,IAAA,MAAM,cAAc,UAAc,IAAA,mBAAA;AAClC,IAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,SAAA,CAAU,KAAK,CAAA;AAC5C,IAAa,YAAA,CAAA,OAAA,CAAQ,aAAa,eAAe,CAAA;AAAA,WAC1C,GAAK,EAAA;AACZ,IAAA,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA;AAErB,CAAA;AAEa,IAAA,SAAA,GAAY,CAAC,UAAwB,KAAA;AAChD,EAAA,MAAM,QAAQ,cAAe,CAAA;AAAA,IAC3B,OAAS,EAAA;AAAA,MACP,MAAQ,EAAA,qBAAA;AAAA,MACR,QAAU,EAAA,uBAAA;AAAA,MACV,OAAS,EAAA,oBAAA;AAAA,MACT,OAAS,EAAA,sBAAA;AAAA,MACT,WAAa,EAAA;AAAA,KACf;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,OAAA,EAAS,SAAU,CAAA,UAAU,CAAE,CAAA,OAAA;AAAA,MAC/B,QAAA,EAAU,SAAU,CAAA,UAAU,CAAE,CAAA,QAAA;AAAA,MAChC,OAAA,EAAS,SAAU,CAAA,UAAU,CAAE,CAAA;AAAA;AACjC,GACD,CAAA;AAED,EAAM,MAAA,kBAAA,GAAA,IAAqB,eAAAD,CAAAA,OAAAA,EAAS,MAAM;AACxC,IAAU,SAAA,CAAA,KAAA,CAAM,QAAS,EAAA,EAAG,UAAU,CAAA;AAAA,KACrC,GAAG,CAAA;AAEN,EAAA,KAAA,CAAM,UAAU,kBAAkB,CAAA;AAElC,EAAO,OAAA,KAAA;AACT;AC1EO,SAAS,eAAgB,CAAA;AAAA,EAC9B,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAIG,EAAA;AACD,EAAM,MAAA,QAAA,GAAW,OAAwB,IAAI,CAAA;AAC7C,EAAI,IAAA,CAAC,SAAS,OAAS,EAAA;AACrB,IAAS,QAAA,CAAA,OAAA,GAAU,KAAS,IAAA,SAAA,CAAU,UAAU,CAAA;AAAA;AAGlD,EAAA,uBAAQ,GAAA,CAAA,QAAA,EAAA,EAAS,KAAQ,EAAA,QAAA,CAAS,SAAY,QAAU,EAAA,CAAA;AAC1D;ACjBO,IAAM,cAAoC,GAAA;AAC1C,IAAM,cAAkD,GAAA;AACxD,IAAM,WAA8B,GAAA","file":"chunk-AFXHD6TS.mjs","sourcesContent":["function debounce(function_, wait = 100, options = {}) {\n\tif (typeof function_ !== 'function') {\n\t\tthrow new TypeError(`Expected the first parameter to be a function, got \\`${typeof function_}\\`.`);\n\t}\n\n\tif (wait < 0) {\n\t\tthrow new RangeError('`wait` must not be negative.');\n\t}\n\n\t// TODO: Deprecate the boolean parameter at some point.\n\tconst {immediate} = typeof options === 'boolean' ? {immediate: options} : options;\n\n\tlet storedContext;\n\tlet storedArguments;\n\tlet timeoutId;\n\tlet timestamp;\n\tlet result;\n\n\tfunction run() {\n\t\tconst callContext = storedContext;\n\t\tconst callArguments = storedArguments;\n\t\tstoredContext = undefined;\n\t\tstoredArguments = undefined;\n\t\tresult = function_.apply(callContext, callArguments);\n\t\treturn result;\n\t}\n\n\tfunction later() {\n\t\tconst last = Date.now() - timestamp;\n\n\t\tif (last < wait && last >= 0) {\n\t\t\ttimeoutId = setTimeout(later, wait - last);\n\t\t} else {\n\t\t\ttimeoutId = undefined;\n\n\t\t\tif (!immediate) {\n\t\t\t\tresult = run();\n\t\t\t}\n\t\t}\n\t}\n\n\tconst debounced = function (...arguments_) {\n\t\tif (\n\t\t\tstoredContext\n\t\t\t&& this !== storedContext\n\t\t\t&& Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)\n\t\t) {\n\t\t\tthrow new Error('Debounced method called with different contexts of the same prototype.');\n\t\t}\n\n\t\tstoredContext = this; // eslint-disable-line unicorn/no-this-assignment\n\t\tstoredArguments = arguments_;\n\t\ttimestamp = Date.now();\n\n\t\tconst callNow = immediate && !timeoutId;\n\n\t\tif (!timeoutId) {\n\t\t\ttimeoutId = setTimeout(later, wait);\n\t\t}\n\n\t\tif (callNow) {\n\t\t\tresult = run();\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tObject.defineProperty(debounced, 'isPending', {\n\t\tget() {\n\t\t\treturn timeoutId !== undefined;\n\t\t},\n\t});\n\n\tdebounced.clear = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout(timeoutId);\n\t\ttimeoutId = undefined;\n\t};\n\n\tdebounced.flush = () => {\n\t\tif (!timeoutId) {\n\t\t\treturn;\n\t\t}\n\n\t\tdebounced.trigger();\n\t};\n\n\tdebounced.trigger = () => {\n\t\tresult = run();\n\n\t\tdebounced.clear();\n\t};\n\n\treturn debounced;\n}\n\n// Adds compatibility for ES modules\nmodule.exports.debounce = debounce;\n\nmodule.exports = debounce;\n","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { defaultPlatformModifier, UnstablePlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { ThSettingsContainerKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nexport interface ReaderReducerState {\n direction: ThLayoutDirection;\n isLoading: boolean;\n isImmersive: boolean;\n isHovering: boolean;\n hasArrows: boolean;\n isFullscreen: boolean;\n settingsContainer: ThSettingsContainerKeys;\n platformModifier: UnstablePlatformModifier;\n}\n\nconst initialState: ReaderReducerState = {\n direction: ThLayoutDirection.ltr,\n isLoading: true,\n isImmersive: false,\n isHovering: false,\n hasArrows: true,\n isFullscreen: false,\n settingsContainer: ThSettingsContainerKeys.initial,\n platformModifier: defaultPlatformModifier\n}\n\nexport const readerSlice = createSlice({\n name: \"reader\",\n initialState,\n reducers: {\n setDirection: (state, action) => {\n state.direction = action.payload\n },\n setLoading: (state, action) => {\n state.isLoading = action.payload\n },\n setPlatformModifier: (state, action) => {\n state.platformModifier = action.payload\n },\n setImmersive: (state, action) => {\n state.isImmersive = action.payload\n },\n toggleImmersive: (state) => {\n state.isImmersive = !state.isImmersive;\n },\n setHovering: (state, action) => {\n state.isHovering = action.payload\n },\n setArrows: (state, action) => {\n state.hasArrows = action.payload\n },\n setFullscreen: (state, action) => {\n state.isFullscreen = action.payload\n },\n setSettingsContainer: (state, action) => {\n state.settingsContainer = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setDirection, \n setLoading,\n setPlatformModifier, \n setImmersive, \n toggleImmersive, \n setHovering, \n setArrows, \n setFullscreen, \n setSettingsContainer\n} = readerSlice.actions;\n\nexport default readerSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThLineHeightOptions, ThTextAlignOptions, ThLayoutStrategy } from \"@/preferences/models/enums\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport interface LineLengthStateObject {\n optimal: number;\n min?: {\n chars?: number | null;\n isDisabled?: boolean;\n },\n max?: {\n chars?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SetLineLengthPayload {\n type: string;\n payload: {\n key: \"optimal\" | \"min\" | \"max\";\n value?: number | null;\n isDisabled?: boolean;\n }\n}\n\nexport interface SettingsReducerState {\n columnCount: string;\n fontFamily: keyof typeof defaultFontFamilyOptions;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n layoutStrategy: ThLayoutStrategy;\n letterSpacing: number | null;\n lineHeight: ThLineHeightOptions;\n lineLength: LineLengthStateObject;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n textAlign: ThTextAlignOptions;\n textNormalization: boolean;\n wordSpacing: number | null;\n}\n\nconst initialState: SettingsReducerState = {\n columnCount: \"auto\",\n fontFamily: \"publisher\",\n fontSize: 1,\n fontWeight: 400,\n hyphens: null,\n layoutStrategy: ThLayoutStrategy.lineLength,\n letterSpacing: null,\n lineHeight: ThLineHeightOptions.publisher,\n lineLength: {\n optimal: 65,\n },\n paragraphIndent: null,\n paragraphSpacing: null,\n publisherStyles: true,\n scroll: false,\n textAlign: ThTextAlignOptions.publisher,\n textNormalization: false,\n wordSpacing: null,\n}\n\nexport const settingsSlice = createSlice({\n name: \"settings\",\n initialState,\n reducers: {\n setColumnCount: (state, action) => {\n state.columnCount = action.payload\n },\n setFontFamily: (state, action) => {\n state.fontFamily = action.payload\n },\n setFontSize: (state, action) => {\n state.fontSize = action.payload\n },\n setFontWeight: (state, action) => {\n state.fontWeight = action.payload\n },\n setHyphens: (state, action) => {\n state.hyphens = action.payload\n },\n setLayoutStrategy: (state, action) => {\n state.layoutStrategy = action.payload\n },\n setLetterSpacing: (state, action) => {\n state.letterSpacing = action.payload\n },\n setLineHeight: (state, action) => {\n state.lineHeight = action.payload\n },\n setLineLength: (state, action: SetLineLengthPayload) => {\n // For min and max, we need to spread and handle isDisabled\n // when it is directly set, or depending on the payload value\n const deriveIsDisabled = (value: number | null | undefined, isDisabled?: boolean): boolean => {\n if (value === null) return true;\n if (isDisabled !== undefined) return isDisabled;\n return false;\n };\n\n switch (action.payload.key) {\n case \"optimal\":\n if (action.payload.value) {\n state.lineLength = {\n ...state.lineLength,\n optimal: action.payload.value\n };\n }\n break;\n \n case \"min\":\n state.lineLength = {\n ...state.lineLength,\n min: {\n ...state.lineLength.min,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength.min?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n case \"max\":\n state.lineLength = {\n ...state.lineLength,\n max: {\n ...state.lineLength.max,\n chars: action.payload.value !== undefined \n ? action.payload.value \n : state.lineLength.max?.chars,\n isDisabled: deriveIsDisabled(action.payload.value, action.payload.isDisabled)\n }\n };\n break;\n default:\n break;\n }\n },\n setParagraphIndent: (state, action) => {\n state.paragraphIndent = action.payload\n },\n setParagraphSpacing: (state, action) => {\n state.paragraphSpacing = action.payload\n },\n setPublisherStyles: (state, action) => {\n state.publisherStyles = action.payload\n },\n setScroll: (state, action) => {\n state.scroll = action.payload\n },\n setTextAlign: (state, action) => {\n state.textAlign = action.payload\n },\n setTextNormalization: (state, action) => {\n state.textNormalization = action.payload\n },\n setWordSpacing: (state, action) => {\n state.wordSpacing = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setColumnCount,\n setFontSize,\n setFontWeight, \n setFontFamily,\n setHyphens, \n setLayoutStrategy,\n setLetterSpacing,\n setLineHeight,\n setLineLength,\n setParagraphIndent,\n setParagraphSpacing,\n setPublisherStyles,\n setScroll,\n setTextAlign,\n setTextNormalization, \n setWordSpacing\n} = settingsSlice.actions;\n\nexport default settingsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\nimport { ThContrast } from \"@/core/Hooks/useContrast\";\nimport { ThBreakpoints } from \"@/preferences/models/enums\";\n\nexport interface ThemeReducerState {\n monochrome: boolean;\n colorScheme: ThColorScheme;\n theme: string;\n prefersReducedMotion: boolean;\n prefersReducedTransparency: boolean;\n prefersContrast: ThContrast;\n forcedColors: boolean;\n breakpoint?: ThBreakpoints;\n}\n\nconst initialState: ThemeReducerState = {\n monochrome: false,\n colorScheme: ThColorScheme.light,\n theme: \"auto\",\n prefersReducedMotion: false,\n prefersReducedTransparency: false, \n prefersContrast: ThContrast.none,\n forcedColors: false, \n breakpoint: undefined\n}\n\nexport const themeSlice = createSlice({\n name: \"theming\",\n initialState,\n reducers: {\n setMonochrome: (state, action) => {\n state.monochrome = action.payload\n },\n setColorScheme: (state, action) => {\n state.colorScheme = action.payload\n },\n setTheme: (state, action) => {\n state.theme = action.payload\n },\n setReducedMotion: (state, action) => {\n state.prefersReducedMotion = action.payload\n },\n setReducedTransparency: (state, action) => {\n state.prefersReducedTransparency = action.payload\n },\n setContrast: (state, action) => {\n state.prefersContrast = action.payload\n },\n setForcedColors: (state, action) => {\n state.forcedColors = action.payload\n },\n setBreakpoint: (state, action) => {\n state.breakpoint = action.payload\n }\n }\n})\n\n// Action creators are generated for each case reducer function\nexport const { \n setMonochrome, \n setColorScheme, \n setTheme, \n setReducedMotion, \n setReducedTransparency, \n setContrast, \n setForcedColors, \n setBreakpoint,\n} = themeSlice.actions;\n\nexport default themeSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { ThDockingKeys } from \"../preferences/models/enums\";\n\nexport type ActionsStateKeys = string;\nexport type OverflowStateKeys = string; \n\nexport interface ActionStateObject {\n isOpen?: boolean | null;\n docking?: ThDockingKeys | null;\n dockedWidth?: number;\n}\n\nexport interface OverflowStateObject {\n isOpen: boolean;\n}\n\nexport interface DockStateObject {\n actionKey: ActionsStateKeys | null;\n active: boolean;\n collapsed: boolean;\n width?: number;\n}\n\nexport interface ActionStateDockPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n dockingKey: ThDockingKeys;\n }\n}\n\nexport interface ActionStateOpenPayload {\n type: string;\n payload: {\n key: ActionsStateKeys;\n isOpen: boolean;\n }\n}\n\nexport interface ActionStateTogglePayload {\n type: string;\n payload: {\n key: ActionsStateKeys\n }\n}\n\nexport interface ActionOverflowOpenPayload {\n type: string;\n payload: {\n key: OverflowStateKeys;\n isOpen: boolean;\n }\n}\n\nexport interface ActionStateDockedPayload {\n type: string;\n payload: { \n slot: ThDockingKeys.start | ThDockingKeys.end;\n docked: DockStateObject;\n }\n}\n\nexport interface ActionStateSlotPayload {\n type: string;\n payload: ThDockingKeys.start | ThDockingKeys.end;\n}\n\nexport interface ActionStateSlotWidthPayload {\n type: string;\n payload: { \n key: ThDockingKeys.start | ThDockingKeys.end;\n width: number;\n }\n}\n\nexport interface DockState {\n [ThDockingKeys.start]: DockStateObject;\n [ThDockingKeys.end]: DockStateObject;\n}\n\nexport type ActionsReducerState = {\n keys: {\n [key in ActionsStateKeys]?: ActionStateObject;\n };\n dock: DockState,\n overflow: {\n [key in OverflowStateKeys]?: OverflowStateObject;\n }\n}\n\nconst initialState: ActionsReducerState = {\n dock: {\n [ThDockingKeys.start]: {\n actionKey: null,\n active: false,\n collapsed: false\n },\n [ThDockingKeys.end]: {\n actionKey: null,\n active: false,\n collapsed: false\n }\n },\n keys: {},\n overflow: {}\n}\n\nexport const actionsSlice = createSlice({\n name: \"actions\",\n initialState,\n reducers: {\n dockAction: (state, action: ActionStateDockPayload) => {\n // The user should be able to override the dock slot\n // so we override the previous value, and sync \n // any other action with the same docking key\n switch(action.payload.dockingKey) {\n case ThDockingKeys.start:\n // We need to find if any other action has the same docking key. \n // If it does, we also have to close it so that its transient sheet \n // doesn’t pop over on the screen when it’s replaced\n for (const key in state.keys) {\n if (state.keys[key as ActionsStateKeys]?.docking === action.payload.dockingKey) {\n state.keys[key as ActionsStateKeys] = { \n ...state.keys[key as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: action.payload.key\n }\n // And remove it from the other one\n if (state.dock[ThDockingKeys.end].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: null\n }\n }\n break;\n\n case ThDockingKeys.end:\n // We need to find if any other action has the same docking key. \n // If it does, we also have to close it so that its transient sheet \n // doesn’t pop over on the screen when it’s replaced\n for (const key in state.keys) {\n if (state.keys[key as ActionsStateKeys]?.docking === action.payload.dockingKey) {\n state.keys[key as ActionsStateKeys] = { \n ...state.keys[key as ActionsStateKeys],\n docking: ThDockingKeys.transient,\n isOpen: false\n };\n }\n }\n\n // We need to populate the docking slot\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: action.payload.key\n }\n // And remove it from the other one\n if (state.dock[ThDockingKeys.start].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: null\n }\n }\n break;\n\n // We don’t need to sync another action\n case ThDockingKeys.transient:\n default: \n // We need to empty the docking slot\n if (state.dock[ThDockingKeys.start].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.start] = {\n ...state.dock[ThDockingKeys.start],\n actionKey: null\n }\n }\n if (state.dock[ThDockingKeys.end].actionKey === action.payload.key) {\n state.dock[ThDockingKeys.end] = {\n ...state.dock[ThDockingKeys.end],\n actionKey: null\n }\n } \n break;\n }\n\n state.keys[action.payload.key] = { \n ...state.keys[action.payload.key],\n docking: action.payload.dockingKey \n };\n },\n setActionOpen: (state, action: ActionStateOpenPayload) => { \n // If the action is docked and set Open, we must take care of \n // the dock panel’s collapsibility. Otherwise we end up with bugs \n // i.e. user has to click/tap action icon twice to open, \n const dockingKey = state.keys[action.payload.key]?.docking;\n if (\n !action.payload.isOpen && \n dockingKey && \n dockingKey !== ThDockingKeys.transient &&\n state.dock[dockingKey].actionKey === action.payload.key &&\n state.dock[dockingKey].active &&\n state.dock[dockingKey].collapsed\n ) {\n state.dock[dockingKey] = {\n ...state.dock[dockingKey],\n collapsed: false\n }\n } else {\n state.keys[action.payload.key] = {\n ...state.keys[action.payload.key],\n isOpen: action.payload.isOpen \n };\n }\n },\n toggleActionOpen: (state, action: ActionStateTogglePayload) => {\n const payload = {\n key: action.payload.key,\n isOpen: state.keys[action.payload.key]?.isOpen ? !state.keys[action.payload.key]?.isOpen : true\n };\n actionsSlice.caseReducers.setActionOpen(state, {\n type: \"toggleActionOpen\",\n payload: payload\n });\n },\n setOverflow: (state, action: ActionOverflowOpenPayload) => {\n state.overflow[action.payload.key] = {\n ...state.overflow[action.payload.key],\n isOpen: action.payload.isOpen \n }\n },\n activateDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n active: true\n }\n },\n deactivateDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n active: false\n }\n },\n collapseDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n collapsed: true\n }\n },\n expandDockPanel: (state, action: ActionStateSlotPayload) => {\n state.dock[action.payload] = {\n ...state.dock[action.payload],\n collapsed: false\n }\n },\n setDockPanelWidth: (state, action: ActionStateSlotWidthPayload) => {\n // Copy the value in the action state \n // in case we do something with it later.\n\n const key: ActionsStateKeys | null = state.dock[action.payload.key].actionKey;\n if (key) {\n state.keys[key] = {\n ...state.keys[key],\n dockedWidth: action.payload.width\n }\n }\n\n // We only care if it’s populated.\n if (state.dock[action.payload.key] !== null) {\n state.dock[action.payload.key] = {\n ...state.dock[action.payload.key],\n width: action.payload.width\n }\n }\n }\n }\n})\n\nexport const { \n dockAction, \n setActionOpen, \n toggleActionOpen, \n setOverflow, \n activateDockPanel, \n deactivateDockPanel, \n collapseDockPanel,\n expandDockPanel, \n setDockPanelWidth\n} = actionsSlice.actions;\n\nexport default actionsSlice.reducer;","import { createSlice } from \"@reduxjs/toolkit\";\n\nimport { UnstableProgressionObject } from \"@/components/StatefulReaderProgression\";\nimport { TocItem } from \"@/helpers/createTocTree\";\nimport { Locator } from \"@readium/shared\";\n\nexport interface PublicationReducerState {\n runningHead?: string;\n isFXL: boolean;\n isRTL: boolean;\n progression: UnstableProgressionObject;\n positionsList: Locator[],\n atPublicationStart: boolean;\n atPublicationEnd: boolean;\n tocTree?: TocItem[];\n tocEntry?: string;\n}\n\nconst initialState: PublicationReducerState = {\n runningHead: undefined,\n isFXL: false,\n isRTL: false,\n progression: {},\n positionsList: [],\n atPublicationStart: false,\n atPublicationEnd: false,\n tocTree: undefined, \n tocEntry: undefined\n}\n\nexport const publicationSlice = createSlice({\n name: \"publication\",\n initialState,\n reducers: {\n setRunningHead: (state, action) => {\n state.runningHead = action.payload\n },\n setFXL: (state, action) => {\n state.isFXL = action.payload\n },\n setRTL: (state, action) => {\n state.isRTL = action.payload\n },\n setProgression: (state, action) => {\n state.progression = {...state.progression, ...action.payload }\n },\n setPositionsList: (state, action) => {\n state.positionsList = action.payload\n },\n setPublicationStart: (state, action) => {\n state.atPublicationStart = action.payload\n },\n setPublicationEnd: (state, action) => {\n state.atPublicationEnd = action.payload\n },\n setTocTree: (state, action) => {\n state.tocTree = action.payload;\n },\n setTocEntry: (state, action) => {\n state.tocEntry = action.payload;\n }\n }\n});\n\n// Action creators are generated for each case reducer function\nexport const { \n setRunningHead,\n setFXL,\n setRTL,\n setProgression,\n setPositionsList,\n setPublicationStart,\n setPublicationEnd,\n setTocTree, \n setTocEntry\n} = publicationSlice.actions;\n\nexport default publicationSlice.reducer;","import { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { configureStore } from \"@reduxjs/toolkit\";\n\nimport readerReducer from \"@/lib/readerReducer\";\nimport settingsReducer from \"@/lib/settingsReducer\";\nimport themeReducer from \"@/lib/themeReducer\";\nimport actionsReducer, { ActionsReducerState } from \"@/lib/actionsReducer\";\nimport publicationReducer from \"./publicationReducer\";\n\nimport debounce from \"debounce\";\n\nconst DEFAULT_STORAGE_KEY = \"thorium-web-state\";\n\nconst updateActionsState = (state: ActionsReducerState) => {\n const updatedKeys = Object.fromEntries(\n Object.entries(state.keys).map(([key, value]) => [\n key,\n {\n ...value,\n isOpen: value?.docking === ThDockingKeys.transient || value?.docking === null && value?.isOpen === true ? false : value?.isOpen,\n },\n ])\n );\n\n return {\n ...state,\n keys: updatedKeys,\n overflow: {}\n };\n};\n\nconst loadState = (storageKey?: string) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = localStorage.getItem(resolvedKey);\n if (serializedState === null) {\n return { actions: undefined, settings: undefined, theming: undefined };\n }\n const deserializedState = JSON.parse(serializedState);\n deserializedState.actions = updateActionsState(deserializedState.actions);\n return deserializedState;\n } catch (err) {\n return { actions: undefined, settings: undefined, theming: undefined };\n }\n};\n\nconst saveState = (state: object, storageKey?: string) => {\n try {\n const resolvedKey = storageKey || DEFAULT_STORAGE_KEY;\n const serializedState = JSON.stringify(state);\n localStorage.setItem(resolvedKey, serializedState);\n } catch (err) {\n console.error(err);\n }\n};\n\nexport const makeStore = (storageKey?: string) => {\n const store = configureStore({\n reducer: {\n reader: readerReducer,\n settings: settingsReducer,\n theming: themeReducer,\n actions: actionsReducer,\n publication: publicationReducer\n },\n preloadedState: {\n actions: loadState(storageKey).actions,\n settings: loadState(storageKey).settings,\n theming: loadState(storageKey).theming\n },\n });\n\n const saveStateDebounced = debounce(() => {\n saveState(store.getState(), storageKey);\n }, 500);\n\n store.subscribe(saveStateDebounced);\n\n return store;\n}\n\n// Infer the type of makeStore\nexport type AppStore = ReturnType<typeof makeStore>;\n// Infer the `RootState` and `AppDispatch` types from the store itself\nexport type RootState = ReturnType<AppStore[\"getState\"]>;\nexport type AppDispatch = AppStore[\"dispatch\"];","\"use client\";\n\nimport { useRef } from \"react\";\nimport { Provider } from \"react-redux\";\nimport { makeStore, AppStore } from \"./store\";\n\nexport function ThStoreProvider({\n storageKey,\n store,\n children\n}: {\n storageKey?: string,\n store?: AppStore,\n children: React.ReactNode\n}) {\n const storeRef = useRef<AppStore | null>(null);\n if (!storeRef.current) {\n storeRef.current = store || makeStore(storageKey);\n }\n\n return <Provider store={ storeRef.current }>{ children }</Provider>\n}\n\nexport default ThStoreProvider;","import { TypedUseSelectorHook, useDispatch, useSelector, useStore } from \"react-redux\";\nimport type { AppDispatch, AppStore, RootState } from \"./store\";\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch: () => AppDispatch = useDispatch;\nexport const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;\nexport const useAppStore: () => AppStore = useStore;"]}
@@ -596,5 +596,5 @@ var useEpubNavigator = () => {
596
596
  };
597
597
 
598
598
  export { TH_CUSTOM_SCHEME, ThScrollActions, en_default, useEpubNavigator, useFullscreen, useIsClient, usePrevious };
599
- //# sourceMappingURL=chunk-JS5WI5D4.mjs.map
600
- //# sourceMappingURL=chunk-JS5WI5D4.mjs.map
599
+ //# sourceMappingURL=chunk-CW72NB4V.mjs.map
600
+ //# sourceMappingURL=chunk-CW72NB4V.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/Hooks/useIsClient.ts","../src/core/Hooks/useFullscreen.ts","../src/core/Hooks/usePrevious.ts","../src/resources/locales/en.json","../src/core/Hooks/Epub/scrollAffordance.ts","../src/core/Hooks/Epub/useEpubNavigator.ts"],"names":["useState","useEffect","ThScrollActions","useRef","useCallback"],"mappings":"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","file":"chunk-JS5WI5D4.mjs","sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useState } from \"react\";\n\nexport const useIsClient = () => {\n const [isClient, setIsClient] = useState(false);\n\n useLayoutEffect(() => {\n if (typeof window !== \"undefined\") setIsClient(true);\n }, []);\n\n return isClient;\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useIsClient } from \"./useIsClient\";\n\nexport const useFullscreen = (onChange?: (isFullscreen: boolean) => void) => {\n const [isFullscreen, setIsFullscreen] = useState(false);\n const isClient = useIsClient();\n\n const handleFullscreen = useCallback(() => {\n if (!isClient) return;\n\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n }, [isClient]);\n\n useEffect(() => {\n const onFSchange = () => {\n const isFs = Boolean(document.fullscreenElement);\n setIsFullscreen(isFs);\n onChange && onChange(isFs);\n }\n document.addEventListener(\"fullscreenchange\", onFSchange);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFSchange);\n }\n }, [onChange]);\n\n return {\n isFullscreen,\n handleFullscreen\n }\n}","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nexport const usePrevious = <T>(value: T): T | null => {\n const ref = useRef<T | null>(null);\n \n useEffect(() => {\n ref.current = value;\n }, [value]); \n\n return ref.current;\n}\n","{\n \"bookUrlConverter\": {\n \"label\": \"Load an EPUB publication from a remote server (it must support byte-range requests):\",\n \"placeholder\": \"https://www.example.org/ebook.epub\",\n \"button\": \"Load\",\n \"error\": \"The URL is invalid. Please check the URL is correct and try again.\"\n },\n \"reader\": {\n \"app\": {\n \"loading\": \"Loading\",\n \"publicationWrapper\": \"You’re now in the publication.\",\n \"docking\": {\n \"dockingLeft\": \"Docked panel left\",\n \"dockingRight\": \"Docked panel right\",\n \"dockingEmpty\": \"Currently empty\",\n \"dockingClosed\": \"Is closed, contains {{ action }}\",\n \"dockingCollapsed\": \"Is Collapsed, contains {{ action }}\"\n },\n \"header\": {\n \"label\": \"Top bar\",\n \"runningHead\": \"Running head\",\n \"runningHeadFallback\": \"...\",\n \"actions\": \"Actions\"\n },\n \"footer\": {\n \"label\": \"Bottom bar\"\n },\n \"progression\": {\n \"wrapper\": \"Current progression\",\n \"of\": \"{{ current }} of {{ reference }}\",\n \"referenceFallback\": \"current chapter\",\n \"pubFallback\": \"the publication\"\n },\n \"docker\": {\n \"wrapper\": \"Docking options\",\n \"dockToLeft\": {\n \"trigger\": \"Dock to the left\",\n \"tooltip\": \"Dock left\"\n },\n \"dockToRight\": {\n \"trigger\": \"Dock to the right\",\n \"tooltip\": \"Dock Right\"\n },\n \"popover\": {\n \"trigger\": \"Display in a window\",\n \"tooltip\": \"Pop over\"\n },\n \"fullscreen\": {\n \"trigger\": \"Display over contents\",\n \"tooltip\": \"Overlay\"\n },\n \"close\": {\n \"trigger\": \"Close\",\n \"tooltip\": \"Close\"\n }\n },\n \"back\": {\n \"trigger\": \"Back\"\n }\n },\n \"navigation\": {\n \"goForward\": \"Go forward\",\n \"goBackward\": \"Go backward\",\n \"scroll\": {\n \"wrapper\": \"Navigate through the publication\",\n \"prevLabel\": \"Previous\",\n \"nextLabel\": \"Next\",\n \"prevA11yLabel\": \"Go to the previous resource\",\n \"nextA11yLabel\": \"Go to the next resource\"\n }\n },\n \"fullscreen\": {\n \"tooltip\": \"Fullscreen\",\n \"trigger\": \"Toggle fullscreen mode\",\n \"close\": \"Exit fullscreen mode\" \n },\n \"toc\": {\n \"tooltip\": \"Table of contents\",\n \"trigger\": \"Table of contents\",\n \"close\": \"Close table of contents\",\n \"heading\": \"Table of contents\",\n \"entries\": \"Entries in the table\",\n \"empty\": \"The table of contents was not provided for this publication.\",\n \"search\": {\n \"label\": \"Search\",\n \"placeholder\": \"Search\",\n \"clear\": \"Clear\"\n }\n },\n \"jumpToPosition\": {\n \"tooltip\": \"Jump to…\",\n \"trigger\": \"Jump to position\",\n \"heading\": \"Jump to position\",\n \"go\": \"Go\",\n \"close\": \"Close jump to position\",\n \"label\": \"Select a position from {{ positionStart }} to {{ positionEnd }}:\"\n },\n \"overflowMenu\": {\n \"active\": {\n \"tooltip\": \"More actions\",\n \"trigger\": \"Toggle menu\"\n },\n \"hint\": {\n \"tooltip\": \"Toggle actions\",\n \"trigger\": \"Display actions\"\n }\n },\n \"layoutStrategy\": {\n \"tooltip\": \"Layout\",\n \"trigger\": \"Layout strategy\",\n \"close\": \"Close layout strategy menu\",\n \"heading\": \"Layout strategy\",\n \"title\": \"Strategy\",\n \"margin\": \"Margin\",\n \"lineLength\": \"Line length\",\n \"columns\": \"Columns\",\n \"minChars\": \"Disable minimal line length\",\n \"maxChars\": \"Disable maximal line length\",\n \"minimalLineLength\": {\n \"title\": \"Minimal line length\",\n \"increase\": \"Increase minimal line length\",\n \"decrease\": \"Decrease maximal line length\"\n },\n \"optimalLineLength\": {\n \"title\": \"Optimal line length\",\n \"increase\": \"Increase optimal line length\",\n \"decrease\": \"Decrease optimal line length\"\n },\n \"maximalLineLength\": {\n \"title\": \"Maximal line length\",\n \"increase\": \"Increase maximal line length\",\n \"decrease\": \"Decrease maximal line length\"\n }\n },\n \"settings\": {\n \"tooltip\": \"Settings\",\n \"trigger\": \"Settings menu\",\n \"close\": \"Close settings menu\",\n \"heading\": \"Display settings\",\n \"themes\": {\n \"title\": \"Themes\",\n \"auto\": \"Auto\",\n \"light\": \"Light\",\n \"sepia\": \"Sepia\",\n \"paper\": \"Paper\",\n \"dark\": \"Dark\",\n \"contrast1\": \"Contrast 1\",\n \"contrast2\": \"Contrast 2\",\n \"contrast3\": \"Contrast 3\"\n },\n \"zoom\": {\n \"title\": \"Zoom\",\n \"increase\": \"Increase zoom\",\n \"decrease\": \"Decrease zoom\"\n },\n \"fontSize\": {\n \"title\": \"Font size\",\n \"increase\": \"Increase font size\",\n \"decrease\": \"Decrease font size\"\n },\n \"fontFamily\": {\n \"title\": \"Font family\",\n \"labels\": {\n \"publisher\": \"Publisher’s font\",\n \"oldStyle\": \"Old style serif\",\n \"modern\": \"Modern serif\",\n \"sans\": \"Sans-serif\",\n \"humanist\": \"Humanist sans-serif\",\n \"monospace\": \"Monospace\" \n }\n },\n \"fontWeight\": {\n \"title\": \"Font weight\",\n \"increase\": \"Increase font weight\",\n \"decrease\": \"Decrease font weight\"\n },\n \"normalizeText\": {\n \"title\": \"Text normalization\",\n \"label\": \"Remove all text formatting\"\n },\n \"align\": {\n \"title\": \"Text alignment\",\n \"publisher\": \"Default\",\n \"left\": \"Left\",\n \"justify\": \"Justify\",\n \"right\": \"Right\"\n },\n \"hyphens\": {\n \"title\": \"Hyphenation\",\n \"label\": \"Enable hyphens\"\n },\n \"text\": {\n \"title\": \"Text\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More formatting options\"\n }\n },\n \"lineHeight\": {\n \"title\": \"Line height\",\n \"publisher\": \"Default\",\n \"small\": \"Tight\",\n \"medium\": \"Balanced\",\n \"large\": \"Loose\"\n },\n \"paraSpacing\": {\n \"title\": \"Paragraph spacing\",\n \"increase\": \"Increase paragraph spacing\",\n \"decrease\": \"Decrease paragraph spacing\"\n },\n \"paraIndent\": {\n \"title\": \"Paragraph indent\",\n \"increase\": \"Increase paragraph indent\",\n \"decrease\": \"Decrease paragraph indent\"\n },\n \"wordSpacing\": {\n \"title\": \"Word spacing\",\n \"increase\": \"Increase word spacing\",\n \"decrease\": \"Decrease word spacing\"\n },\n \"letterSpacing\": {\n \"title\": \"Letter spacing\",\n \"increase\": \"Increase letter spacing\",\n \"decrease\": \"Decrease letter spacing\"\n },\n \"publisherStyles\": {\n \"label\": \"Use original formatting\"\n },\n \"spacing\": {\n \"title\": \"Spacing\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More spacing options\"\n }\n },\n \"layout\": {\n \"title\": \"Layout\",\n \"scrolled\": \"Scrollable\",\n \"paginated\": \"Paginated\"\n },\n \"column\": {\n \"title\": \"Columns\",\n \"auto\": \"Auto\",\n \"one\": \"1 col\",\n \"two\": \"2 cols\"\n }\n }\n }\n}","\"use client\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ScrollAffordanceConfig, ThScrollAffordancePref } from \"@/preferences/models/enums\";\n\n// Button posting message from iFrame won’t work since Navigator handles click\n// so the message is never received.\n// Link href is relative to selfhref but https and http links are\n// handled as external links in Reader, opening a new window.\n// Trying a custom scheme to avoid conflicts and progress on scroll for MVP\n// but not particularly happy about that.\n// React Portal has a lots of caveats too but it may at least protect\n// the component from Navigator’s handling, although I’m not 100% sure yet.\nexport const TH_CUSTOM_SCHEME = \"thorium-web:\";\nexport enum ThScrollActions {\n prev = TH_CUSTOM_SCHEME + \"go_prev\",\n next = TH_CUSTOM_SCHEME + \"go_next\"\n}\nconst STYLESHEET_ID = \"scroll-affordance-stylesheet\"\n\nexport class ScrollAffordance {\n private pref: ThScrollAffordancePref;\n private placement: \"top\" | \"bottom\";\n public id: string;\n public className: string;\n private styleSheetContent?: string;\n\n constructor(config: ScrollAffordanceConfig) {\n this.pref = config.pref;\n this.placement = config.placement;\n this.id = `thorium-web-scroll-affordance-wrapper-${config.placement}`;\n this.className = config.className || \"thorium-web-scroll-affordance-wrapper\";\n this.styleSheetContent = config.styleSheetContent;\n }\n\n private createStyleSheet = (cssContent?: string) => {\n const styleSheet = document.createElement(\"style\");\n styleSheet.id = STYLESHEET_ID;\n styleSheet.dataset.readium = \"true\";\n styleSheet.textContent = cssContent || `.thorium-web-scroll-affordance-wrapper {\n --color-text: currentColor;\n\n box-sizing: border-box;\n display: flex;\n width: 100%;\n gap: 20px;\n margin: 0;\n padding: 0;\n }\n .thorium-web-scroll-affordance-wrapper:focus-within {\n /* to get around hidden overflow cutting off focus ring w/o being too noticeable */\n padding: 0 2px;\n }\n #thorium-web-scroll-affordance-wrapper-top {\n /* to get around hidden overflow cutting off focus ring */\n padding-top: 0.25rem;\n margin-bottom: 1.25rem;\n }\n #thorium-web-scroll-affordance-wrapper-bottom {\n margin-top: 1.5rem;\n /* to get around hidden overflow cutting off focus ring */\n padding-bottom: 1.5rem;\n }\n .thorium-web-scroll-affordance-wrapper > a {\n box-sizing: border-box;\n border: 1px solid color-mix(in srgb, var(--color-text) 50%, transparent);\n border-radius: 3px;\n padding: 0.75rem;\n text-decoration: none;\n font-weight: bold;\n flex: 1 1 0;\n text-align: left;\n color: var(--color-text);\n font-size: 1rem;\n font-style: normal;\n font-family: inherit;\n }\n .thorium-web-scroll-affordance-wrapper > a:hover {\n background-color: \"color-mix(in srgb, var(--color-text) 15%, transparent)\";\n border: 1px solid var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a:first-child:not(:last-child) {\n text-align: right;\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev > span:before {\n content: \"←\";\n float: left;\n margin-right: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev:hover > span:before,\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next:hover > span:after {\n color: var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next > span:after {\n content: \"→\";\n float: right;\n margin-left: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }`;\n return styleSheet;\n };\n\n public render = (doc: Document) => {\n if (doc) {\n // Prevent duplicates\n this.destroy(doc);\n\n let wrapper: HTMLElement | null = null;\n\n if (this.pref !== ThScrollAffordancePref.none) {\n let prevAnchor: HTMLAnchorElement | undefined;\n let nextAnchor: HTMLAnchorElement | undefined;\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.prev)) {\n prevAnchor = doc.createElement(\"a\");\n prevAnchor.className = `thorium-web-scroll-affordance-button-prev`;\n prevAnchor.id = `thorium-web-scroll-affordance-button-prev-${this.placement}`;\n prevAnchor.href = ThScrollActions.prev;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n prevAnchor.rel = \"prev\";\n prevAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.prevA11yLabel);\n\n prevAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.prevLabel}</span>`;\n }\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.next)) {\n nextAnchor = doc.createElement(\"a\");\n nextAnchor.className = `thorium-web-scroll-affordance-button-next`;\n nextAnchor.id = `<a id=\"thorium-web-scroll-affordance-button-next-${this.placement}`;\n nextAnchor.href = ThScrollActions.next;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n nextAnchor.rel = \"next\";\n nextAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.nextA11yLabel);\n\n nextAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.nextLabel}</span>`\n }\n\n if (prevAnchor || nextAnchor) {\n wrapper = doc.createElement(\"nav\");\n wrapper.id = `thorium-web-scroll-affordance-wrapper-${this.placement}`;\n wrapper.className = this.className || \"thorium-web-scroll-affordance-wrapper\";\n wrapper.dataset.readium = \"true\";\n wrapper.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.wrapper);\n\n if (prevAnchor) wrapper.append(prevAnchor);\n if (nextAnchor) wrapper.append(nextAnchor);\n }\n }\n\n if (wrapper) {\n const styleSheet = this.createStyleSheet(this.styleSheetContent);\n doc.head.append(styleSheet);\n this.placement === \"top\" ? doc.body.prepend(wrapper) : doc.body.append(wrapper);\n }\n }\n }\n\n public destroy = (doc: Document) => {\n if (doc) {\n const stylesheet = doc.getElementById(`#${ STYLESHEET_ID }`);\n if (stylesheet) stylesheet.remove();\n\n const wrapper = doc.getElementById(this.id);\n if (wrapper) {\n wrapper.remove();\n }\n }\n }\n}","\"use client\";\n\nimport { useCallback, useMemo, useRef } from \"react\";\n\nimport { ThScrollAffordancePref, ThScrollBackTo } from \"@/preferences/models/enums\";\nimport { ScrollAffordance } from \"./scrollAffordance\";\n\nimport { \n EPUBLayout, \n Link, \n Locator, \n Publication \n} from \"@readium/shared\";\nimport { \n EpubNavigator, \n EpubNavigatorListeners, \n EpubPreferences, \n EpubSettings, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences\n} from \"@readium/navigator\";\n\ntype cbb = (ok: boolean) => void;\n\n// Module scoped, singleton instance of navigator\nlet navigatorInstance: EpubNavigator | null = null;\n\n// Scroll Affordances as mutable, otherwise the callbacks\n// will not work for components mounting before load\n// They should not be part of the hook anyway\n// And their existence is due to the lack of Injection API\nlet scrollAffordanceTop: ScrollAffordance | null = null;\nlet scrollAffordanceBottom: ScrollAffordance | null = null;\n\nexport interface EpubNavigatorLoadProps {\n container: HTMLDivElement | null;\n publication: Publication;\n listeners: EpubNavigatorListeners;\n positionsList?: Locator[];\n initialPosition?: Locator;\n preferences?: IEpubPreferences;\n defaults?: IEpubDefaults;\n scrollAffordances?: {\n top?: ThScrollAffordancePref;\n bottom?: ThScrollAffordancePref;\n }\n}\n\nexport const useEpubNavigator = () => {\n const container = useRef<HTMLDivElement | null>(null);\n const containerParent = useRef<HTMLElement | null>(null);\n const publication = useRef<Publication | null>(null);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const mountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) { \n scrollAffordanceTop?.render(frameManager.window.document);\n scrollAffordanceBottom?.render(frameManager.window.document)\n }\n });\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const unmountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n scrollAffordanceTop?.destroy(frameManager.window.document);\n scrollAffordanceBottom?.destroy(frameManager.window.document)\n }\n });\n }, []);\n\n const handleScrollAffordances = useCallback((scroll: boolean) => {\n if (navigatorInstance === null || navigatorInstance.layout === EPUBLayout.fixed) return;\n scroll ? mountScroll() : unmountScroll();\n }, [mountScroll, unmountScroll]);\n\n const submitPreferences = useCallback(async (preferences: IEpubPreferences) => {\n await navigatorInstance?.submitPreferences(new EpubPreferences(preferences));\n }, []);\n\n const getSetting = useCallback(<K extends keyof EpubSettings>(settingKey: K) => {\n return navigatorInstance?.settings[settingKey] as EpubSettings[K];\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const scrollBackTo = useCallback((position: ThScrollBackTo) => {\n if (position !== ThScrollBackTo.untouched) {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n const scrollingEl = frameManager.window.document.scrollingElement;\n if (position === ThScrollBackTo.top) {\n scrollingEl?.scrollTo(0, 0);\n } else {\n scrollingEl?.scrollTo(0, scrollingEl.scrollHeight);\n }\n }\n });\n }\n }, []);\n\n // [TMP] Working around positionChanged not firing consistently for FXL\n // We’re observing the FXLFramePoolManager spine div element’s style\n // and checking whether its translate3d has changed.\n // Sure IntersectionObserver should be the obvious one to use here,\n // observing iframes instead of the style attribute on the spine element\n // but there’s additional complexity to handle as a spread = 2 iframes\n // And keeping in sync while the FramePool is re-aligning on resize can be suboptimal\n let FXLPositionChangedCallback: ((locator: Locator) => void) | undefined;\n const FXLPositionChanged = useMemo(() => { \n return new MutationObserver((mutationsList: MutationRecord[]) => {\n for (const mutation of mutationsList) {\n const re = /translate3d\\(([^)]+)\\)/;\n const newVal = (mutation.target as HTMLElement).getAttribute(mutation.attributeName as string);\n const oldVal = mutation.oldValue;\n if (newVal?.split(re)[1] !== oldVal?.split(re)[1]) {\n const locator = navigatorInstance?.currentLocator;\n if (locator) {\n FXLPositionChangedCallback?.(locator);\n }\n }\n }\n });\n }, [FXLPositionChangedCallback]);\n\n const EpubNavigatorLoad = useCallback((config: EpubNavigatorLoadProps, cb: Function) => {\n if (config.container) {\n container.current = config.container;\n containerParent.current = container.current? container.current.parentElement : null;\n \n publication.current = config.publication;\n\n if (config.scrollAffordances) {\n if (config.scrollAffordances.top) {\n scrollAffordanceTop = new ScrollAffordance({ pref: config.scrollAffordances.top, placement: \"top\" })\n }\n if (config.scrollAffordances.bottom) {\n scrollAffordanceBottom = new ScrollAffordance({ pref: config.scrollAffordances.bottom, placement: \"bottom\" })\n }\n }\n\n navigatorInstance = new EpubNavigator(\n config.container, \n config.publication, \n config.listeners, \n config.positionsList, \n config.initialPosition, \n { preferences: config.preferences || {}, defaults: config.defaults || {} }\n );\n\n navigatorInstance.load().then(() => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n // @ts-ignore\n FXLPositionChanged.observe((navigatorInstance?.pool.spineElement as HTMLElement), {\n attributeFilter: [\"style\"], \n attributeOldValue: true\n });\n }\n });\n }\n }, [FXLPositionChanged]);\n\n const EpubNavigatorDestroy = useCallback((cb: Function) => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n FXLPositionChanged.disconnect();\n }\n navigatorInstance?.destroy;\n }, [FXLPositionChanged]);\n\n const goRight = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goRight(animated, callback);\n }, []);\n\n const goLeft = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goLeft(animated, callback)\n }, []);\n\n const goBackward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goBackward(animated, callback);\n }, []);\n\n const goForward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goForward(animated, callback);\n }, []);\n\n const goLink = useCallback((link: Link, animated: boolean, callback: cbb) => {\n navigatorInstance?.goLink(link, animated, callback);\n }, []);\n\n const go = useCallback((locator: Locator, animated: boolean, callback: cbb) => {\n navigatorInstance?.go(locator, animated, callback);\n }, []);\n\n const navLayout = useCallback(() => {\n return navigatorInstance?.layout;\n }, []);\n\n const currentLocator = useCallback(() => {\n return navigatorInstance?.currentLocator;\n }, []);\n\n const currentPositions = useCallback(() => {\n return navigatorInstance?.currentPositionNumbers;\n }, []);\n\n // Warning: this is an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const getCframes = useCallback(() => {\n return navigatorInstance?._cframes;\n }, []);\n\n return { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \n goRight, \n goLeft, \n goBackward, \n goForward,\n goLink, \n go, \n handleScrollAffordances,\n scrollBackTo, \n navLayout, \n currentLocator,\n currentPositions,\n preferencesEditor: navigatorInstance?.preferencesEditor,\n getSetting,\n submitPreferences,\n getCframes,\n onFXLPositionChange: (cb: (locator: Locator) => void) => {\n FXLPositionChangedCallback = cb;\n }\n }\n}"]}
1
+ {"version":3,"sources":["../src/core/Hooks/useIsClient.ts","../src/core/Hooks/useFullscreen.ts","../src/core/Hooks/usePrevious.ts","../src/resources/locales/en.json","../src/core/Hooks/Epub/scrollAffordance.ts","../src/core/Hooks/Epub/useEpubNavigator.ts"],"names":["useState","useEffect","ThScrollActions","useRef","useCallback"],"mappings":"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","file":"chunk-CW72NB4V.mjs","sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useState } from \"react\";\n\nexport const useIsClient = () => {\n const [isClient, setIsClient] = useState(false);\n\n useLayoutEffect(() => {\n if (typeof window !== \"undefined\") setIsClient(true);\n }, []);\n\n return isClient;\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useIsClient } from \"./useIsClient\";\n\nexport const useFullscreen = (onChange?: (isFullscreen: boolean) => void) => {\n const [isFullscreen, setIsFullscreen] = useState(false);\n const isClient = useIsClient();\n\n const handleFullscreen = useCallback(() => {\n if (!isClient) return;\n\n if (!document.fullscreenElement) {\n document.documentElement.requestFullscreen();\n } else if (document.exitFullscreen) {\n document.exitFullscreen();\n }\n }, [isClient]);\n\n useEffect(() => {\n const onFSchange = () => {\n const isFs = Boolean(document.fullscreenElement);\n setIsFullscreen(isFs);\n onChange && onChange(isFs);\n }\n document.addEventListener(\"fullscreenchange\", onFSchange);\n\n return () => {\n document.removeEventListener(\"fullscreenchange\", onFSchange);\n }\n }, [onChange]);\n\n return {\n isFullscreen,\n handleFullscreen\n }\n}","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\nexport const usePrevious = <T>(value: T): T | null => {\n const ref = useRef<T | null>(null);\n \n useEffect(() => {\n ref.current = value;\n }, [value]); \n\n return ref.current;\n}\n","{\n \"bookUrlConverter\": {\n \"label\": \"Load an EPUB publication from a remote server (it must support byte-range requests):\",\n \"placeholder\": \"https://www.example.org/ebook.epub\",\n \"button\": \"Load\",\n \"error\": \"The URL is invalid. Please check the URL is correct and try again.\"\n },\n \"reader\": {\n \"app\": {\n \"loading\": \"Loading\",\n \"publicationWrapper\": \"You’re now in the publication.\",\n \"docking\": {\n \"dockingLeft\": \"Docked panel left\",\n \"dockingRight\": \"Docked panel right\",\n \"dockingEmpty\": \"Currently empty\",\n \"dockingClosed\": \"Is closed, contains {{ action }}\",\n \"dockingCollapsed\": \"Is Collapsed, contains {{ action }}\"\n },\n \"header\": {\n \"label\": \"Top bar\",\n \"runningHead\": \"Running head\",\n \"runningHeadFallback\": \"...\",\n \"actions\": \"Actions\"\n },\n \"footer\": {\n \"label\": \"Bottom bar\"\n },\n \"progression\": {\n \"wrapper\": \"Current progression\",\n \"of\": \"{{ current }} of {{ reference }}\",\n \"referenceFallback\": \"current chapter\",\n \"pubFallback\": \"the publication\"\n },\n \"docker\": {\n \"wrapper\": \"Docking options\",\n \"dockToLeft\": {\n \"trigger\": \"Dock to the left\",\n \"tooltip\": \"Dock left\"\n },\n \"dockToRight\": {\n \"trigger\": \"Dock to the right\",\n \"tooltip\": \"Dock Right\"\n },\n \"popover\": {\n \"trigger\": \"Display in a window\",\n \"tooltip\": \"Pop over\"\n },\n \"fullscreen\": {\n \"trigger\": \"Display over contents\",\n \"tooltip\": \"Overlay\"\n },\n \"close\": {\n \"trigger\": \"Close\",\n \"tooltip\": \"Close\"\n }\n },\n \"back\": {\n \"trigger\": \"Back\"\n }\n },\n \"navigation\": {\n \"goForward\": \"Go forward\",\n \"goBackward\": \"Go backward\",\n \"scroll\": {\n \"wrapper\": \"Navigate through the publication\",\n \"prevLabel\": \"Previous\",\n \"nextLabel\": \"Next\",\n \"prevA11yLabel\": \"Go to the previous resource\",\n \"nextA11yLabel\": \"Go to the next resource\"\n }\n },\n \"fullscreen\": {\n \"tooltip\": \"Fullscreen\",\n \"trigger\": \"Toggle fullscreen mode\",\n \"close\": \"Exit fullscreen mode\" \n },\n \"toc\": {\n \"tooltip\": \"Table of contents\",\n \"trigger\": \"Table of contents\",\n \"close\": \"Close table of contents\",\n \"heading\": \"Table of contents\",\n \"entries\": \"Entries in the table\",\n \"empty\": \"The table of contents was not provided for this publication.\",\n \"search\": {\n \"label\": \"Search\",\n \"placeholder\": \"Search\",\n \"clear\": \"Clear\"\n }\n },\n \"jumpToPosition\": {\n \"tooltip\": \"Jump to…\",\n \"trigger\": \"Jump to position\",\n \"heading\": \"Jump to position\",\n \"go\": \"Go\",\n \"close\": \"Close jump to position\",\n \"label\": \"Select a position from {{ positionStart }} to {{ positionEnd }}:\"\n },\n \"overflowMenu\": {\n \"active\": {\n \"tooltip\": \"More actions\",\n \"trigger\": \"Toggle menu\"\n },\n \"hint\": {\n \"tooltip\": \"Toggle actions\",\n \"trigger\": \"Display actions\"\n }\n },\n \"layoutStrategy\": {\n \"tooltip\": \"Layout\",\n \"trigger\": \"Layout strategy\",\n \"close\": \"Close layout strategy menu\",\n \"heading\": \"Layout strategy\",\n \"title\": \"Strategy\",\n \"margin\": \"Margin\",\n \"lineLength\": \"Line length\",\n \"columns\": \"Columns\",\n \"minChars\": \"Disable minimal line length\",\n \"maxChars\": \"Disable maximal line length\",\n \"minimalLineLength\": {\n \"title\": \"Minimal line length\",\n \"increase\": \"Increase minimal line length\",\n \"decrease\": \"Decrease maximal line length\"\n },\n \"optimalLineLength\": {\n \"title\": \"Optimal line length\",\n \"increase\": \"Increase optimal line length\",\n \"decrease\": \"Decrease optimal line length\"\n },\n \"maximalLineLength\": {\n \"title\": \"Maximal line length\",\n \"increase\": \"Increase maximal line length\",\n \"decrease\": \"Decrease maximal line length\"\n }\n },\n \"settings\": {\n \"tooltip\": \"Settings\",\n \"trigger\": \"Settings menu\",\n \"close\": \"Close settings menu\",\n \"heading\": \"Display settings\",\n \"themes\": {\n \"title\": \"Themes\",\n \"auto\": \"Auto\",\n \"light\": \"Light\",\n \"sepia\": \"Sepia\",\n \"paper\": \"Paper\",\n \"dark\": \"Dark\",\n \"contrast1\": \"Contrast 1\",\n \"contrast2\": \"Contrast 2\",\n \"contrast3\": \"Contrast 3\"\n },\n \"zoom\": {\n \"title\": \"Zoom\",\n \"increase\": \"Increase zoom\",\n \"decrease\": \"Decrease zoom\"\n },\n \"fontSize\": {\n \"title\": \"Font size\",\n \"increase\": \"Increase font size\",\n \"decrease\": \"Decrease font size\"\n },\n \"fontFamily\": {\n \"title\": \"Font family\",\n \"labels\": {\n \"publisher\": \"Publisher’s font\",\n \"oldStyle\": \"Old style serif\",\n \"modern\": \"Modern serif\",\n \"sans\": \"Sans-serif\",\n \"humanist\": \"Humanist sans-serif\",\n \"monospace\": \"Monospace\" \n }\n },\n \"fontWeight\": {\n \"title\": \"Font weight\",\n \"increase\": \"Increase font weight\",\n \"decrease\": \"Decrease font weight\"\n },\n \"normalizeText\": {\n \"title\": \"Text normalization\",\n \"label\": \"Remove all text formatting\"\n },\n \"align\": {\n \"title\": \"Text alignment\",\n \"publisher\": \"Default\",\n \"left\": \"Left\",\n \"justify\": \"Justify\",\n \"right\": \"Right\"\n },\n \"hyphens\": {\n \"title\": \"Hyphenation\",\n \"label\": \"Enable hyphens\"\n },\n \"text\": {\n \"title\": \"Text\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More formatting options\"\n }\n },\n \"lineHeight\": {\n \"title\": \"Line height\",\n \"publisher\": \"Default\",\n \"small\": \"Tight\",\n \"medium\": \"Balanced\",\n \"large\": \"Loose\"\n },\n \"paraSpacing\": {\n \"title\": \"Paragraph spacing\",\n \"increase\": \"Increase paragraph spacing\",\n \"decrease\": \"Decrease paragraph spacing\"\n },\n \"paraIndent\": {\n \"title\": \"Paragraph indent\",\n \"increase\": \"Increase paragraph indent\",\n \"decrease\": \"Decrease paragraph indent\"\n },\n \"wordSpacing\": {\n \"title\": \"Word spacing\",\n \"increase\": \"Increase word spacing\",\n \"decrease\": \"Decrease word spacing\"\n },\n \"letterSpacing\": {\n \"title\": \"Letter spacing\",\n \"increase\": \"Increase letter spacing\",\n \"decrease\": \"Decrease letter spacing\"\n },\n \"publisherStyles\": {\n \"label\": \"Use original formatting\"\n },\n \"spacing\": {\n \"title\": \"Spacing\",\n \"advanced\": {\n \"tooltip\": \"More options\",\n \"trigger\": \"More spacing options\"\n }\n },\n \"layout\": {\n \"title\": \"Layout\",\n \"scrolled\": \"Scrollable\",\n \"paginated\": \"Paginated\"\n },\n \"column\": {\n \"title\": \"Columns\",\n \"auto\": \"Auto\",\n \"one\": \"1 col\",\n \"two\": \"2 cols\"\n }\n }\n }\n}","\"use client\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ScrollAffordanceConfig, ThScrollAffordancePref } from \"@/preferences/models/enums\";\n\n// Button posting message from iFrame won’t work since Navigator handles click\n// so the message is never received.\n// Link href is relative to selfhref but https and http links are\n// handled as external links in Reader, opening a new window.\n// Trying a custom scheme to avoid conflicts and progress on scroll for MVP\n// but not particularly happy about that.\n// React Portal has a lots of caveats too but it may at least protect\n// the component from Navigator’s handling, although I’m not 100% sure yet.\nexport const TH_CUSTOM_SCHEME = \"thorium-web:\";\nexport enum ThScrollActions {\n prev = TH_CUSTOM_SCHEME + \"go_prev\",\n next = TH_CUSTOM_SCHEME + \"go_next\"\n}\nconst STYLESHEET_ID = \"scroll-affordance-stylesheet\"\n\nexport class ScrollAffordance {\n private pref: ThScrollAffordancePref;\n private placement: \"top\" | \"bottom\";\n public id: string;\n public className: string;\n private styleSheetContent?: string;\n\n constructor(config: ScrollAffordanceConfig) {\n this.pref = config.pref;\n this.placement = config.placement;\n this.id = `thorium-web-scroll-affordance-wrapper-${config.placement}`;\n this.className = config.className || \"thorium-web-scroll-affordance-wrapper\";\n this.styleSheetContent = config.styleSheetContent;\n }\n\n private createStyleSheet = (cssContent?: string) => {\n const styleSheet = document.createElement(\"style\");\n styleSheet.id = STYLESHEET_ID;\n styleSheet.dataset.readium = \"true\";\n styleSheet.textContent = cssContent || `.thorium-web-scroll-affordance-wrapper {\n --color-text: currentColor;\n\n box-sizing: border-box;\n display: flex;\n width: 100%;\n gap: 20px;\n margin: 0;\n padding: 0;\n }\n .thorium-web-scroll-affordance-wrapper:focus-within {\n /* to get around hidden overflow cutting off focus ring w/o being too noticeable */\n padding: 0 2px;\n }\n #thorium-web-scroll-affordance-wrapper-top {\n /* to get around hidden overflow cutting off focus ring */\n padding-top: 0.25rem;\n margin-bottom: 1.25rem;\n }\n #thorium-web-scroll-affordance-wrapper-bottom {\n margin-top: 1.5rem;\n /* to get around hidden overflow cutting off focus ring */\n padding-bottom: 1.5rem;\n }\n .thorium-web-scroll-affordance-wrapper > a {\n box-sizing: border-box;\n border: 1px solid color-mix(in srgb, var(--color-text) 50%, transparent);\n border-radius: 3px;\n padding: 0.75rem;\n text-decoration: none;\n font-weight: bold;\n flex: 1 1 0;\n text-align: left;\n color: var(--color-text);\n font-size: 1rem;\n font-style: normal;\n font-family: inherit;\n }\n .thorium-web-scroll-affordance-wrapper > a:hover {\n background-color: \"color-mix(in srgb, var(--color-text) 15%, transparent)\";\n border: 1px solid var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a:first-child:not(:last-child) {\n text-align: right;\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev > span:before {\n content: \"←\";\n float: left;\n margin-right: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-prev:hover > span:before,\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next:hover > span:after {\n color: var(--color-text);\n }\n .thorium-web-scroll-affordance-wrapper > a.thorium-web-scroll-affordance-button-next > span:after {\n content: \"→\";\n float: right;\n margin-left: 10px;\n color: \"color-mix(in srgb, var(--color-text) 50%, transparent)\";\n }`;\n return styleSheet;\n };\n\n public render = (doc: Document) => {\n if (doc) {\n // Prevent duplicates\n this.destroy(doc);\n\n let wrapper: HTMLElement | null = null;\n\n if (this.pref !== ThScrollAffordancePref.none) {\n let prevAnchor: HTMLAnchorElement | undefined;\n let nextAnchor: HTMLAnchorElement | undefined;\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.prev)) {\n prevAnchor = doc.createElement(\"a\");\n prevAnchor.className = `thorium-web-scroll-affordance-button-prev`;\n prevAnchor.id = `thorium-web-scroll-affordance-button-prev-${this.placement}`;\n prevAnchor.href = ThScrollActions.prev;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n prevAnchor.rel = \"prev\";\n prevAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.prevA11yLabel);\n\n prevAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.prevLabel}</span>`;\n }\n\n if ((this.pref === ThScrollAffordancePref.both || this.pref === ThScrollAffordancePref.next)) {\n nextAnchor = doc.createElement(\"a\");\n nextAnchor.className = `thorium-web-scroll-affordance-button-next`;\n nextAnchor.id = `<a id=\"thorium-web-scroll-affordance-button-next-${this.placement}`;\n nextAnchor.href = ThScrollActions.next;\n\n // In practice browsers don’t do anything with this? And since the href\n // is a custom scheme, they wouldn’t be able to preload the document\n // that is handled by navigator anyway. So not sure it hurts or has any benefit…\n nextAnchor.rel = \"next\";\n nextAnchor.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.nextA11yLabel);\n\n nextAnchor.innerHTML = `<span>${Locale.reader.navigation.scroll.nextLabel}</span>`\n }\n\n if (prevAnchor || nextAnchor) {\n wrapper = doc.createElement(\"nav\");\n wrapper.id = `thorium-web-scroll-affordance-wrapper-${this.placement}`;\n wrapper.className = this.className || \"thorium-web-scroll-affordance-wrapper\";\n wrapper.dataset.readium = \"true\";\n wrapper.setAttribute(\"aria-label\", Locale.reader.navigation.scroll.wrapper);\n\n if (prevAnchor) wrapper.append(prevAnchor);\n if (nextAnchor) wrapper.append(nextAnchor);\n }\n }\n\n if (wrapper) {\n const styleSheet = this.createStyleSheet(this.styleSheetContent);\n doc.head.append(styleSheet);\n this.placement === \"top\" ? doc.body.prepend(wrapper) : doc.body.append(wrapper);\n }\n }\n }\n\n public destroy = (doc: Document) => {\n if (doc) {\n const stylesheet = doc.getElementById(`#${ STYLESHEET_ID }`);\n if (stylesheet) stylesheet.remove();\n\n const wrapper = doc.getElementById(this.id);\n if (wrapper) {\n wrapper.remove();\n }\n }\n }\n}","\"use client\";\n\nimport { useCallback, useMemo, useRef } from \"react\";\n\nimport { ThScrollAffordancePref, ThScrollBackTo } from \"@/preferences/models/enums\";\nimport { ScrollAffordance } from \"./scrollAffordance\";\n\nimport { \n EPUBLayout, \n Link, \n Locator, \n Publication \n} from \"@readium/shared\";\nimport { \n EpubNavigator, \n EpubNavigatorListeners, \n EpubPreferences, \n EpubSettings, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences\n} from \"@readium/navigator\";\n\ntype cbb = (ok: boolean) => void;\n\n// Module scoped, singleton instance of navigator\nlet navigatorInstance: EpubNavigator | null = null;\n\n// Scroll Affordances as mutable, otherwise the callbacks\n// will not work for components mounting before load\n// They should not be part of the hook anyway\n// And their existence is due to the lack of Injection API\nlet scrollAffordanceTop: ScrollAffordance | null = null;\nlet scrollAffordanceBottom: ScrollAffordance | null = null;\n\nexport interface EpubNavigatorLoadProps {\n container: HTMLDivElement | null;\n publication: Publication;\n listeners: EpubNavigatorListeners;\n positionsList?: Locator[];\n initialPosition?: Locator;\n preferences?: IEpubPreferences;\n defaults?: IEpubDefaults;\n scrollAffordances?: {\n top?: ThScrollAffordancePref;\n bottom?: ThScrollAffordancePref;\n }\n}\n\nexport const useEpubNavigator = () => {\n const container = useRef<HTMLDivElement | null>(null);\n const containerParent = useRef<HTMLElement | null>(null);\n const publication = useRef<Publication | null>(null);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const mountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) { \n scrollAffordanceTop?.render(frameManager.window.document);\n scrollAffordanceBottom?.render(frameManager.window.document)\n }\n });\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const unmountScroll = useCallback(() => {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n scrollAffordanceTop?.destroy(frameManager.window.document);\n scrollAffordanceBottom?.destroy(frameManager.window.document)\n }\n });\n }, []);\n\n const handleScrollAffordances = useCallback((scroll: boolean) => {\n if (navigatorInstance === null || navigatorInstance.layout === EPUBLayout.fixed) return;\n scroll ? mountScroll() : unmountScroll();\n }, [mountScroll, unmountScroll]);\n\n const submitPreferences = useCallback(async (preferences: IEpubPreferences) => {\n await navigatorInstance?.submitPreferences(new EpubPreferences(preferences));\n }, []);\n\n const getSetting = useCallback(<K extends keyof EpubSettings>(settingKey: K) => {\n return navigatorInstance?.settings[settingKey] as EpubSettings[K];\n }, []);\n\n // Warning: this is using an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const scrollBackTo = useCallback((position: ThScrollBackTo) => {\n if (position !== ThScrollBackTo.untouched) {\n navigatorInstance?._cframes.forEach((frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) {\n const scrollingEl = frameManager.window.document.scrollingElement;\n if (position === ThScrollBackTo.top) {\n scrollingEl?.scrollTo(0, 0);\n } else {\n scrollingEl?.scrollTo(0, scrollingEl.scrollHeight);\n }\n }\n });\n }\n }, []);\n\n // [TMP] Working around positionChanged not firing consistently for FXL\n // We’re observing the FXLFramePoolManager spine div element’s style\n // and checking whether its translate3d has changed.\n // Sure IntersectionObserver should be the obvious one to use here,\n // observing iframes instead of the style attribute on the spine element\n // but there’s additional complexity to handle as a spread = 2 iframes\n // And keeping in sync while the FramePool is re-aligning on resize can be suboptimal\n let FXLPositionChangedCallback: ((locator: Locator) => void) | undefined;\n const FXLPositionChanged = useMemo(() => { \n return new MutationObserver((mutationsList: MutationRecord[]) => {\n for (const mutation of mutationsList) {\n const re = /translate3d\\(([^)]+)\\)/;\n const newVal = (mutation.target as HTMLElement).getAttribute(mutation.attributeName as string);\n const oldVal = mutation.oldValue;\n if (newVal?.split(re)[1] !== oldVal?.split(re)[1]) {\n const locator = navigatorInstance?.currentLocator;\n if (locator) {\n FXLPositionChangedCallback?.(locator);\n }\n }\n }\n });\n }, [FXLPositionChangedCallback]);\n\n const EpubNavigatorLoad = useCallback((config: EpubNavigatorLoadProps, cb: Function) => {\n if (config.container) {\n container.current = config.container;\n containerParent.current = container.current? container.current.parentElement : null;\n \n publication.current = config.publication;\n\n if (config.scrollAffordances) {\n if (config.scrollAffordances.top) {\n scrollAffordanceTop = new ScrollAffordance({ pref: config.scrollAffordances.top, placement: \"top\" })\n }\n if (config.scrollAffordances.bottom) {\n scrollAffordanceBottom = new ScrollAffordance({ pref: config.scrollAffordances.bottom, placement: \"bottom\" })\n }\n }\n\n navigatorInstance = new EpubNavigator(\n config.container, \n config.publication, \n config.listeners, \n config.positionsList, \n config.initialPosition, \n { preferences: config.preferences || {}, defaults: config.defaults || {} }\n );\n\n navigatorInstance.load().then(() => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n // @ts-ignore\n FXLPositionChanged.observe((navigatorInstance?.pool.spineElement as HTMLElement), {\n attributeFilter: [\"style\"], \n attributeOldValue: true\n });\n }\n });\n }\n }, [FXLPositionChanged]);\n\n const EpubNavigatorDestroy = useCallback((cb: Function) => {\n cb();\n\n if (navigatorInstance?.layout === EPUBLayout.fixed) {\n FXLPositionChanged.disconnect();\n }\n navigatorInstance?.destroy;\n }, [FXLPositionChanged]);\n\n const goRight = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goRight(animated, callback);\n }, []);\n\n const goLeft = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goLeft(animated, callback)\n }, []);\n\n const goBackward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goBackward(animated, callback);\n }, []);\n\n const goForward = useCallback((animated: boolean, callback: cbb) => {\n navigatorInstance?.goForward(animated, callback);\n }, []);\n\n const goLink = useCallback((link: Link, animated: boolean, callback: cbb) => {\n navigatorInstance?.goLink(link, animated, callback);\n }, []);\n\n const go = useCallback((locator: Locator, animated: boolean, callback: cbb) => {\n navigatorInstance?.go(locator, animated, callback);\n }, []);\n\n const navLayout = useCallback(() => {\n return navigatorInstance?.layout;\n }, []);\n\n const currentLocator = useCallback(() => {\n return navigatorInstance?.currentLocator;\n }, []);\n\n const currentPositions = useCallback(() => {\n return navigatorInstance?.currentPositionNumbers;\n }, []);\n\n // Warning: this is an internal member that will become private, do not rely on it\n // See https://github.com/edrlab/thorium-web/issues/25\n const getCframes = useCallback(() => {\n return navigatorInstance?._cframes;\n }, []);\n\n return { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \n goRight, \n goLeft, \n goBackward, \n goForward,\n goLink, \n go, \n handleScrollAffordances,\n scrollBackTo, \n navLayout, \n currentLocator,\n currentPositions,\n preferencesEditor: navigatorInstance?.preferencesEditor,\n getSetting,\n submitPreferences,\n getCframes,\n onFXLPositionChange: (cb: (locator: Locator) => void) => {\n FXLPositionChangedCallback = cb;\n }\n }\n}"]}
@@ -997,7 +997,8 @@ var ThRadioGroup = ({
997
997
  {
998
998
  ...compounds?.radio,
999
999
  key: index,
1000
- value: item.value
1000
+ value: item.value,
1001
+ isDisabled: item.isDisabled
1001
1002
  },
1002
1003
  /* @__PURE__ */ jsxs(React19.Fragment, { children: [
1003
1004
  item.icon && /* @__PURE__ */ jsx(item.icon, { "aria-hidden": "true", focusable: "false" }),
@@ -1174,5 +1175,5 @@ var ThSettingsWrapper = ({
1174
1175
  };
1175
1176
 
1176
1177
  export { ThActionButton, ThActionsBar, ThActionsTriggerVariant, ThBottomSheet, ThCloseButton, ThCollapsibleActionsBar, ThContainerBody, ThContainerHeader, ThContainerHeaderWithClose, ThContainerHeaderWithPrevious, ThDockedPanel, ThDragIndicatorButton, ThDropdown, ThDropdownButton, ThFooter, ThForm, ThFormNumberField, ThFormSearchField, ThFormTextField, ThHeader, ThLoader, ThMenu, ThMenuButton, ThMenuItem, ThModal, ThNavigationButton, ThNumberField, ThPopover, ThProgression, ThRadioGroup, ThRunningHead, ThSettingsWrapper, ThSettingsWrapperButton, ThSlider, ThSwitch, ThTypedComponentRenderer, useActions, useFirstFocusable };
1177
- //# sourceMappingURL=chunk-2U455VSY.mjs.map
1178
- //# sourceMappingURL=chunk-2U455VSY.mjs.map
1178
+ //# sourceMappingURL=chunk-GSWRWFPI.mjs.map
1179
+ //# sourceMappingURL=chunk-GSWRWFPI.mjs.map