@edrlab/thorium-web 1.0.0-beta.2 → 1.0.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +1 -1
  2. package/dist/{ThSettingsWrapper-De4qvjsh.d.mts → ThSettingsWrapper-CA2_0nQz.d.mts} +1 -1
  3. package/dist/{actionsReducer-e808e6V_.d.mts → actionsReducer-D4Mphfuv.d.mts} +1 -1
  4. package/dist/chunk-BNPR6V7V.mjs.map +1 -1
  5. package/dist/chunk-IEYR7QV7.mjs.map +1 -1
  6. package/dist/chunk-MLEYTQGK.mjs.map +1 -1
  7. package/dist/chunk-NA3KMUS4.mjs +417 -0
  8. package/dist/chunk-NA3KMUS4.mjs.map +1 -0
  9. package/dist/{chunk-GHEGQBCW.mjs → chunk-NOV43IG4.mjs} +4 -18
  10. package/dist/chunk-NOV43IG4.mjs.map +1 -0
  11. package/dist/chunk-NQ2ZSGCX.mjs.map +1 -1
  12. package/dist/{chunk-O4MBY6P4.mjs → chunk-OCASVHBV.mjs} +91 -36
  13. package/dist/chunk-OCASVHBV.mjs.map +1 -0
  14. package/dist/{chunk-TWGRY5SW.mjs → chunk-RQFPGXWN.mjs} +29 -22
  15. package/dist/chunk-RQFPGXWN.mjs.map +1 -0
  16. package/dist/{chunk-BVSROK7Z.mjs → chunk-SDVDRPT5.mjs} +116 -6
  17. package/dist/chunk-SDVDRPT5.mjs.map +1 -0
  18. package/dist/chunk-TTGURRX3.mjs.map +1 -1
  19. package/dist/{chunk-PGZF5NO2.mjs → chunk-TXILKP4F.mjs} +16 -12
  20. package/dist/chunk-TXILKP4F.mjs.map +1 -0
  21. package/dist/components/Epub/index.d.mts +48 -25
  22. package/dist/components/Epub/index.mjs +878 -408
  23. package/dist/components/Epub/index.mjs.map +1 -1
  24. package/dist/{const-DGYvRLhk.d.mts → const-IAfi9t_g.d.mts} +14 -11
  25. package/dist/core/Components/index.d.mts +52 -6
  26. package/dist/core/Components/index.mjs +2 -2
  27. package/dist/core/Helpers/index.d.mts +3 -9
  28. package/dist/core/Helpers/index.mjs +2 -3
  29. package/dist/core/Hooks/index.d.mts +15 -5
  30. package/dist/core/Hooks/index.mjs +2 -3
  31. package/dist/{enums-DxbWWvn7.d.mts → enums-DqGQ66r1.d.mts} +1 -23
  32. package/dist/lib/index.d.mts +355 -11
  33. package/dist/lib/index.mjs +2 -3
  34. package/dist/{overflowMenu.module-XQRI7RJJ.module.css → overflowMenu.module-FO27A2A3.module.css} +12 -0
  35. package/dist/preferences/index.d.mts +6 -6
  36. package/dist/preferences/index.mjs +2 -3
  37. package/dist/publicationGrid.module-T6ISNRGM.module.css +70 -0
  38. package/dist/{reader-QFK7DGLX.css → reader-NGCQJKLX.css} +74 -36
  39. package/dist/{readerArrowButton.module-NHAUIQXS.module.css → readerArrowButton.module-EFLOIADG.module.css} +4 -0
  40. package/dist/{readerHeader.module-OBKZATSW.module.css → readerHeader.module-K7OLOIJP.module.css} +2 -7
  41. package/dist/{readerLoader.module-U6LLXOVQ.module.css → readerLoader.module-KDBPCQZJ.module.css} +1 -1
  42. package/dist/readerPagination.module-W4IAEOSH.module.css +73 -0
  43. package/dist/readerProgression.module-7PU7L74S.module.css +5 -0
  44. package/dist/{readerSharedUI.module-MCLGNG22.module.css → readerSharedUI.module-Y2VDWFS5.module.css} +1 -5
  45. package/dist/{settings.module-5WB3OOEF.module.css → settings.module-O2SOKTIN.module.css} +4 -0
  46. package/dist/{sheets.module-DDN7GPMG.module.css → sheets.module-NA32WOSZ.module.css} +4 -4
  47. package/dist/{toc.module-XJLXQM7G.module.css → toc.module-KNW5CKIY.module.css} +1 -0
  48. package/dist/{useBreakpoints-I7vHrywa.d.mts → useBreakpoints-BQaiwecQ.d.mts} +1 -1
  49. package/dist/{useEpubNavigator-BrV4MYJy.d.mts → useEpubNavigator-DFRJ_tHa.d.mts} +9 -10
  50. package/dist/{usePreferences-B55XqFto.d.mts → usePreferences-BMyBhq7F.d.mts} +1 -1
  51. package/dist/useTimeline-Bid5B7AQ.d.mts +39 -0
  52. package/package.json +31 -22
  53. package/dist/bookUrlConverter.module-J46O27CR.module.css +0 -63
  54. package/dist/chunk-3QS3WKRC.mjs +0 -29
  55. package/dist/chunk-3QS3WKRC.mjs.map +0 -1
  56. package/dist/chunk-BVSROK7Z.mjs.map +0 -1
  57. package/dist/chunk-GHEGQBCW.mjs.map +0 -1
  58. package/dist/chunk-JS5WI5D4.mjs +0 -600
  59. package/dist/chunk-JS5WI5D4.mjs.map +0 -1
  60. package/dist/chunk-O4MBY6P4.mjs.map +0 -1
  61. package/dist/chunk-PGZF5NO2.mjs.map +0 -1
  62. package/dist/chunk-TWGRY5SW.mjs.map +0 -1
  63. package/dist/index-ClB-1iNN.d.mts +0 -356
  64. package/dist/readerProgression.module-S5R3Y6JI.module.css +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/object-path@0.11.8/node_modules/object-path/index.js","../../../node_modules/.pnpm/json-templates@5.2.0/node_modules/json-templates/dist/index.js","../../../src/components/Epub/Settings/assets/icons/document_scanner.svg","../../../src/components/Epub/Settings/assets/icons/article.svg","../../../src/components/Epub/Settings/assets/icons/menu_book.svg","../../../src/components/Settings/StatefulRadioGroup.tsx","../../../src/components/Epub/Settings/StatefulColumns.tsx","../../../src/components/Epub/Settings/StatefulFontFamily.tsx","../../../src/components/Settings/StatefulSlider.tsx","../../../src/components/Epub/Settings/StatefulFontWeight.tsx","../../../src/components/Settings/StatefulSwitch.tsx","../../../src/components/Epub/Settings/StatefulHyphens.tsx","../../../src/components/Epub/Settings/assets/icons/contract.svg","../../../src/components/Epub/Settings/assets/icons/docs.svg","../../../src/components/Epub/Settings/StatefulLayout.tsx","../../../src/components/Settings/StatefulNumberField.tsx","../../../src/components/Epub/Settings/StatefulLetterSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/book.svg","../../../src/components/Epub/Settings/assets/icons/density_small.svg","../../../src/components/Epub/Settings/assets/icons/density_medium.svg","../../../src/components/Epub/Settings/assets/icons/density_large.svg","../../../src/components/Epub/Settings/StatefulLineHeight.tsx","../../../src/components/Epub/Settings/StatefulParagraphIndent.tsx","../../../src/components/Epub/Settings/StatefulParagraphSpacing.tsx","../../../src/components/Epub/Settings/StatefulPublisherStyles.tsx","../../../src/components/Settings/StatefulGroupWrapper.tsx","../../../src/components/Plugins/PluginRegistry.ts","../../../src/components/Plugins/PluginProvider.tsx","../../../src/components/Epub/Settings/StatefulSpacingGroup.tsx","../../../src/components/Epub/Settings/assets/icons/format_align_left.svg","../../../src/components/Epub/Settings/assets/icons/format_align_right.svg","../../../src/components/Epub/Settings/assets/icons/format_align_justify.svg","../../../src/components/Epub/Settings/StatefulTextAlign.tsx","../../../src/components/Epub/Settings/StatefulTextGroup.tsx","../../../src/components/Epub/Settings/StatefulTextNormalize.tsx","../../../src/components/Epub/Settings/assets/icons/check.svg","../../../src/components/Epub/Settings/StatefulTheme.tsx","../../../src/components/Epub/Settings/StatefulWordSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/text_decrease.svg","../../../src/components/Epub/Settings/assets/icons/text_increase.svg","../../../src/components/Epub/Settings/assets/icons/zoom_out.svg","../../../src/components/Epub/Settings/assets/icons/zoom_in.svg","../../../src/components/Epub/Settings/StatefulZoom.tsx","../../../src/components/Docking/hooks/useResizablePanel.ts","../../../src/components/Docking/StatefulDockingWrapper.tsx","../../../src/components/Actions/assets/icons/more_vert.svg","../../../src/components/Actions/Triggers/StatefulActionIcon.tsx","../../../src/components/Actions/StatefulOverflowMenu.tsx","../../../src/components/Actions/StatefulCollapsibleActionsBar.tsx","../../../src/components/StatefulReaderHeader.tsx","../../../src/components/StatefulReaderArrowButton.tsx","../../../src/components/StatefulReaderProgression.tsx","../../../src/components/StatefulReaderFooter.tsx","../../../src/components/Epub/StatefulReader.tsx","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen.svg","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen_exit.svg","../../../src/components/Actions/Triggers/UnstableStatefulShortcut.tsx","../../../src/components/Actions/Triggers/StatefulOverflowMenuItem.tsx","../../../src/components/Actions/Fullscreen/StatefulFullscreenTrigger.tsx","../../../src/components/Actions/JumpToPosition/assets/icons/pin_drop.svg","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionTrigger.tsx","../../../src/components/Docking/assets/icons/dock_to_right.svg","../../../src/components/Docking/assets/icons/dock_to_left.svg","../../../src/components/Docking/StatefulDockStart.tsx","../../../src/components/Docking/StatefulDockEnd.tsx","../../../src/components/Docking/assets/icons/stack.svg","../../../src/components/Docking/StatefulDockTransientPopover.tsx","../../../src/components/Docking/StatefulDocker.tsx","../../../src/components/Sheets/StatefulPopoverSheet.tsx","../../../src/components/Sheets/StatefulBottomSheet.tsx","../../../src/components/Sheets/StatefulFullScreenSheet.tsx","../../../src/components/Sheets/StatefulDockedSheet.tsx","../../../src/components/Sheets/StatefulSheetWrapper.tsx","../../../src/components/Docking/hooks/useDocking.ts","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionContainer.tsx","../../../src/components/Actions/Settings/assets/icons/match_case.svg","../../../src/components/Actions/Settings/StatefulSettingsTrigger.tsx","../../../src/components/Actions/Settings/StatefulSettingsContainer.tsx","../../../src/components/Actions/Toc/assets/icons/toc.svg","../../../src/components/Actions/Toc/StatefulTocTrigger.tsx","../../../src/components/Actions/Toc/assets/icons/chevron_right.svg","../../../src/components/Actions/Toc/StatefulTocContainer.tsx","../../../src/components/Plugins/helpers/createDefaultPlugin.ts","../../../src/helpers/peripherals.ts","../../../src/helpers/createTocTree.ts","../../../src/helpers/deserializePositions.ts","../../../src/components/BookUrlConverter.tsx","../../../src/components/StatefulLoader.tsx"],"names":["jsx","settingsStyles","Fragment","useCallback","key","classNames","readerSharedUI","useRef","value","textAlign","theme","useEffect","useState","parseTemplate","jsxs","dockingMap","className","arrowStyles","isHovering","import_json_templates","overflowMenuStyles","dockingStyles","React","sheetStyles","snapArray","scrimPref","item","useMemo","filterValue","items","tocEntry","breakpoint","colorScheme","reducedMotion","Link","currentLocator","debounce","positionsList","isFXL","tocTree","dispatch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,mBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,yEAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAC,CAAA,SAAU,MAAM,OAAS,EAAA;AAIxB,MAAA,IAAI,OAAO,MAAW,KAAA,QAAA,IAAY,OAAO,MAAA,CAAO,YAAY,QAAU,EAAA;AACpE,QAAA,MAAA,CAAO,UAAU,OAAQ,EAAA;AAAA,OAChB,MAAA,IAAA,OAAO,MAAW,KAAA,UAAA,IAAc,OAAO,GAAK,EAAA;AAErD,QAAO,MAAA,CAAA,IAAI,OAAO,CAAA;AAAA,OACb,MAAA;AAEL,QAAA,IAAA,CAAK,aAAa,OAAQ,EAAA;AAAA;AAC5B,KACF,EAAG,SAAM,WAAY;AAGnB,MAAI,IAAA,KAAA,GAAQ,OAAO,SAAU,CAAA,QAAA;AAE7B,MAAS,SAAA,cAAA,CAAgB,KAAK,IAAM,EAAA;AAClC,QAAA,IAAI,OAAO,IAAM,EAAA;AACf,UAAO,OAAA,KAAA;AAAA;AAGT,QAAA,OAAO,MAAO,CAAA,SAAA,CAAU,cAAe,CAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA;AAGvD,MAAA,SAAS,QAAS,KAAO,EAAA;AACvB,QAAA,IAAI,CAAC,KAAO,EAAA;AACV,UAAO,OAAA,IAAA;AAAA;AAET,QAAA,IAAI,OAAQ,CAAA,KAAK,CAAK,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACxC,UAAO,OAAA,IAAA;AAAA,SACT,MAAA,IAAW,OAAO,KAAA,KAAU,QAAU,EAAA;AACpC,UAAA,KAAA,IAAS,KAAK,KAAO,EAAA;AACnB,YAAI,IAAA,cAAA,CAAe,KAAO,EAAA,CAAC,CAAG,EAAA;AAC5B,cAAO,OAAA,KAAA;AAAA;AACT;AAEF,UAAO,OAAA,IAAA;AAAA;AAET,QAAO,OAAA,KAAA;AAAA;AAGT,MAAA,SAAS,SAAU,IAAM,EAAA;AACvB,QAAO,OAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA;AAGxB,MAAA,SAAS,SAAU,GAAK,EAAA;AACtB,QAAA,OAAO,OAAO,GAAA,KAAQ,QAAY,IAAA,QAAA,CAAS,GAAG,CAAM,KAAA,iBAAA;AAAA;AAGtD,MAAA,IAAI,OAAU,GAAA,KAAA,CAAM,OAAW,IAAA,SAAU,GAAK,EAAA;AAE5C,QAAO,OAAA,KAAA,CAAM,IAAK,CAAA,GAAG,CAAM,KAAA,gBAAA;AAAA,OAC7B;AAEA,MAAA,SAAS,UAAW,GAAK,EAAA;AACvB,QAAA,OAAO,OAAO,GAAA,KAAQ,SAAa,IAAA,QAAA,CAAS,GAAG,CAAM,KAAA,kBAAA;AAAA;AAGvD,MAAA,SAAS,OAAQ,GAAK,EAAA;AACpB,QAAI,IAAA,MAAA,GAAS,SAAS,GAAG,CAAA;AACzB,QAAI,IAAA,MAAA,CAAO,QAAS,EAAA,KAAM,GAAK,EAAA;AAC7B,UAAO,OAAA,MAAA;AAAA;AAET,QAAO,OAAA,GAAA;AAAA;AAGT,MAAA,SAAS,QAAS,OAAS,EAAA;AACzB,QAAA,OAAA,GAAU,WAAW,EAAC;AAEtB,QAAI,IAAA,UAAA,GAAa,SAAU,GAAK,EAAA;AAC9B,UAAA,OAAO,OAAO,IAAK,CAAA,UAAU,EAAE,MAAO,CAAA,SAAU,OAAO,IAAM,EAAA;AAC3D,YAAA,IAAI,SAAS,QAAU,EAAA;AACrB,cAAO,OAAA,KAAA;AAAA;AAIT,YAAA,IAAI,OAAO,UAAA,CAAW,IAAI,CAAA,KAAM,UAAY,EAAA;AAC1C,cAAA,KAAA,CAAM,IAAI,CAAI,GAAA,UAAA,CAAW,IAAI,CAAE,CAAA,IAAA,CAAK,YAAY,GAAG,CAAA;AAAA;AAGrD,YAAO,OAAA,KAAA;AAAA,WACT,EAAG,EAAE,CAAA;AAAA,SACP;AAEA,QAAI,IAAA,kBAAA;AACJ,QAAA,IAAI,QAAQ,qBAAuB,EAAA;AACjC,UAAA,kBAAA,GAAqB,WAAY;AAC/B,YAAO,OAAA,IAAA;AAAA,WACT;AAAA,SACK,MAAA;AACL,UAAqB,kBAAA,GAAA,SAAU,KAAK,IAAM,EAAA;AACxC,YAAQ,OAAA,OAAO,SAAS,QAAY,IAAA,KAAA,CAAM,QAAQ,GAAG,CAAA,IAAM,cAAe,CAAA,GAAA,EAAK,IAAI,CAAA;AAAA,WACrF;AAAA;AAGF,QAAS,SAAA,kBAAA,CAAoB,KAAK,IAAM,EAAA;AACtC,UAAI,IAAA,kBAAA,CAAmB,GAAK,EAAA,IAAI,CAAG,EAAA;AACjC,YAAA,OAAO,IAAI,IAAI,CAAA;AAAA;AACjB;AAGF,QAAI,IAAA,wBAAA;AACJ,QAAA,IAAI,QAAQ,qBAAuB,EAAA;AACjC,UAA2B,wBAAA,GAAA,SAAU,KAAK,WAAa,EAAA;AACrD,YAAA,IAAI,OAAO,WAAA,KAAgB,QAAY,IAAA,OAAO,gBAAgB,QAAU,EAAA;AACtE,cAAA,WAAA,GAAc,OAAO,WAAW,CAAA;AAAA;AAElC,YAAI,IAAA,YAAA,GAAe,kBAAmB,CAAA,GAAA,EAAK,WAAW,CAAA;AACtD,YAAI,IAAA,WAAA,KAAgB,eAAe,WAAgB,KAAA,WAAA,IAChD,gBAAgB,aAAiB,IAAA,OAAO,iBAAiB,UAAa,EAAA;AACvE,cAAM,MAAA,IAAI,MAAM,+DAAgE,CAAA;AAAA;AAElF,YAAO,OAAA,YAAA;AAAA,WACT;AAAA,SACK,MAAA;AACL,UAA2B,wBAAA,GAAA,SAAU,KAAK,WAAa,EAAA;AACrD,YAAO,OAAA,kBAAA,CAAmB,KAAK,WAAW,CAAA;AAAA,WAC5C;AAAA;AAGF,QAAA,SAAS,GAAK,CAAA,GAAA,EAAK,IAAM,EAAA,KAAA,EAAO,YAAc,EAAA;AAC5C,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAA,IAAA,GAAO,CAAC,IAAI,CAAA;AAAA;AAEd,UAAA,IAAI,CAAC,IAAA,IAAQ,IAAK,CAAA,MAAA,KAAW,CAAG,EAAA;AAC9B,YAAO,OAAA,GAAA;AAAA;AAET,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAO,OAAA,GAAA,CAAI,GAAK,EAAA,IAAA,CAAK,KAAM,CAAA,GAAG,EAAE,GAAI,CAAA,MAAM,CAAG,EAAA,KAAA,EAAO,YAAY,CAAA;AAAA;AAElE,UAAI,IAAA,WAAA,GAAc,KAAK,CAAC,CAAA;AACxB,UAAI,IAAA,YAAA,GAAe,wBAAyB,CAAA,GAAA,EAAK,WAAW,CAAA;AAC5D,UAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,YAAI,IAAA,YAAA,KAAiB,MAAU,IAAA,CAAC,YAAc,EAAA;AAC5C,cAAA,GAAA,CAAI,WAAW,CAAI,GAAA,KAAA;AAAA;AAErB,YAAO,OAAA,YAAA;AAAA;AAGT,UAAA,IAAI,iBAAiB,MAAQ,EAAA;AAE3B,YAAA,IAAI,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAU,EAAA;AAC/B,cAAI,GAAA,CAAA,WAAW,IAAI,EAAC;AAAA,aACf,MAAA;AACL,cAAI,GAAA,CAAA,WAAW,IAAI,EAAC;AAAA;AACtB;AAGF,UAAO,OAAA,GAAA,CAAI,IAAI,WAAW,CAAA,EAAG,KAAK,KAAM,CAAA,CAAC,CAAG,EAAA,KAAA,EAAO,YAAY,CAAA;AAAA;AAGjE,QAAW,UAAA,CAAA,GAAA,GAAM,SAAU,GAAA,EAAK,IAAM,EAAA;AACpC,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAA,IAAA,GAAO,CAAC,IAAI,CAAA;AAAA,WACd,MAAA,IAAW,OAAO,IAAA,KAAS,QAAU,EAAA;AACnC,YAAO,IAAA,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA;AAGvB,UAAA,IAAI,CAAC,IAAA,IAAQ,IAAK,CAAA,MAAA,KAAW,CAAG,EAAA;AAC9B,YAAA,OAAO,CAAC,CAAC,GAAA;AAAA;AAGX,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,YAAA,IAAI,CAAI,GAAA,MAAA,CAAO,IAAK,CAAA,CAAC,CAAC,CAAA;AAEtB,YAAA,IAAK,OAAO,CAAM,KAAA,QAAA,IAAY,QAAQ,GAAG,CAAA,IAAK,IAAI,GAAI,CAAA,MAAA,KACnD,OAAQ,CAAA,qBAAA,GAAyB,KAAK,MAAO,CAAA,GAAG,IAAK,cAAe,CAAA,GAAA,EAAK,CAAC,CAAI,CAAA,EAAA;AAC/E,cAAA,GAAA,GAAM,IAAI,CAAC,CAAA;AAAA,aACN,MAAA;AACL,cAAO,OAAA,KAAA;AAAA;AACT;AAGF,UAAO,OAAA,IAAA;AAAA,SACT;AAEA,QAAA,UAAA,CAAW,YAAe,GAAA,SAAU,GAAK,EAAA,IAAA,EAAM,KAAO,EAAA;AACpD,UAAA,OAAO,GAAI,CAAA,GAAA,EAAK,IAAM,EAAA,KAAA,EAAO,IAAI,CAAA;AAAA,SACnC;AAEA,QAAA,UAAA,CAAW,GAAM,GAAA,SAAU,GAAK,EAAA,IAAA,EAAM,OAAO,YAAc,EAAA;AACzD,UAAA,OAAO,GAAI,CAAA,GAAA,EAAK,IAAM,EAAA,KAAA,EAAO,YAAY,CAAA;AAAA,SAC3C;AAEA,QAAA,UAAA,CAAW,MAAS,GAAA,SAAU,GAAK,EAAA,IAAA,EAAM,OAAO,EAAI,EAAA;AAClD,UAAA,IAAI,GAAM,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,EAAK,IAAI,CAAA;AAClC,UAAA,EAAA,GAAK,CAAC,CAAC,EAAA;AACP,UAAI,IAAA,CAAC,OAAQ,CAAA,GAAG,CAAG,EAAA;AACjB,YAAA,GAAA,GAAM,EAAC;AACP,YAAW,UAAA,CAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,GAAG,CAAA;AAAA;AAE/B,UAAI,GAAA,CAAA,MAAA,CAAO,EAAI,EAAA,CAAA,EAAG,KAAK,CAAA;AAAA,SACzB;AAEA,QAAW,UAAA,CAAA,KAAA,GAAQ,SAAU,GAAA,EAAK,IAAM,EAAA;AACtC,UAAI,IAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AACjB,YAAO,OAAA,MAAA;AAAA;AAET,UAAA,IAAI,OAAO,IAAM,EAAA;AACf,YAAO,OAAA,MAAA;AAAA;AAGT,UAAA,IAAI,KAAO,EAAA,CAAA;AACX,UAAA,IAAI,EAAE,KAAQ,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,EAAK,IAAI,CAAI,CAAA,EAAA;AACxC,YAAO,OAAA,MAAA;AAAA;AAGT,UAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,YAAA,OAAO,UAAW,CAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,EAAE,CAAA;AAAA,WACrC,MAAA,IAAW,SAAU,CAAA,KAAK,CAAG,EAAA;AAC3B,YAAA,OAAO,UAAW,CAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,KAAK,CAAA;AAAA,WACxC,MAAA,IAAW,OAAO,KAAA,KAAU,QAAU,EAAA;AACpC,YAAA,OAAO,UAAW,CAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,CAAC,CAAA;AAAA,WACpC,MAAA,IAAW,OAAQ,CAAA,KAAK,CAAG,EAAA;AACzB,YAAA,KAAA,CAAM,MAAS,GAAA,CAAA;AAAA,WACjB,MAAA,IAAW,QAAS,CAAA,KAAK,CAAG,EAAA;AAC1B,YAAA,KAAK,KAAK,KAAO,EAAA;AACf,cAAI,IAAA,kBAAA,CAAmB,KAAO,EAAA,CAAC,CAAG,EAAA;AAChC,gBAAA,OAAO,MAAM,CAAC,CAAA;AAAA;AAChB;AACF,WACK,MAAA;AACL,YAAA,OAAO,UAAW,CAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,IAAI,CAAA;AAAA;AACvC,SACF;AAEA,QAAW,UAAA,CAAA,IAAA,GAAO,SAAU,GAAA,EAAK,IAAoB,EAAA;AACnD,UAAA,IAAI,GAAM,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,EAAK,IAAI,CAAA;AAClC,UAAI,IAAA,CAAC,OAAQ,CAAA,GAAG,CAAG,EAAA;AACjB,YAAA,GAAA,GAAM,EAAC;AACP,YAAW,UAAA,CAAA,GAAA,CAAI,GAAK,EAAA,IAAA,EAAM,GAAG,CAAA;AAAA;AAG/B,UAAI,GAAA,CAAA,IAAA,CAAK,MAAM,GAAK,EAAA,KAAA,CAAM,UAAU,KAAM,CAAA,IAAA,CAAK,SAAW,EAAA,CAAC,CAAC,CAAA;AAAA,SAC9D;AAEA,QAAA,UAAA,CAAW,QAAW,GAAA,SAAU,GAAK,EAAA,KAAA,EAAO,YAAc,EAAA;AACxD,UAAI,IAAA,KAAA;AAEJ,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,GAAA,GAAM,MAAM,MAAQ,EAAA,CAAA,GAAI,KAAK,CAAK,EAAA,EAAA;AAChD,YAAK,IAAA,CAAA,KAAA,GAAQ,WAAW,GAAI,CAAA,GAAA,EAAK,MAAM,CAAC,CAAC,OAAO,MAAQ,EAAA;AACtD,cAAO,OAAA,KAAA;AAAA;AACT;AAGF,UAAO,OAAA,YAAA;AAAA,SACT;AAEA,QAAA,UAAA,CAAW,GAAM,GAAA,SAAU,GAAK,EAAA,IAAA,EAAM,YAAc,EAAA;AAClD,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAA,IAAA,GAAO,CAAC,IAAI,CAAA;AAAA;AAEd,UAAA,IAAI,CAAC,IAAA,IAAQ,IAAK,CAAA,MAAA,KAAW,CAAG,EAAA;AAC9B,YAAO,OAAA,GAAA;AAAA;AAET,UAAA,IAAI,OAAO,IAAM,EAAA;AACf,YAAO,OAAA,YAAA;AAAA;AAET,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAA,OAAO,WAAW,GAAI,CAAA,GAAA,EAAK,KAAK,KAAM,CAAA,GAAG,GAAG,YAAY,CAAA;AAAA;AAG1D,UAAA,IAAI,WAAc,GAAA,MAAA,CAAO,IAAK,CAAA,CAAC,CAAC,CAAA;AAChC,UAAI,IAAA,OAAA,GAAU,wBAAyB,CAAA,GAAA,EAAK,WAAW,CAAA;AACvD,UAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,YAAO,OAAA,YAAA;AAAA;AAGT,UAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,YAAO,OAAA,OAAA;AAAA;AAGT,UAAO,OAAA,UAAA,CAAW,IAAI,GAAI,CAAA,WAAW,GAAG,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,EAAG,YAAY,CAAA;AAAA,SACrE;AAEA,QAAA,UAAA,CAAW,GAAM,GAAA,SAAS,GAAK,CAAA,GAAA,EAAK,IAAM,EAAA;AACxC,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAA,IAAA,GAAO,CAAC,IAAI,CAAA;AAAA;AAGd,UAAA,IAAI,OAAO,IAAM,EAAA;AACf,YAAO,OAAA,GAAA;AAAA;AAGT,UAAI,IAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AACjB,YAAO,OAAA,GAAA;AAAA;AAET,UAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,YAAA,OAAO,WAAW,GAAI,CAAA,GAAA,EAAK,IAAK,CAAA,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA;AAG5C,UAAA,IAAI,WAAc,GAAA,MAAA,CAAO,IAAK,CAAA,CAAC,CAAC,CAAA;AAChC,UAAA,wBAAA,CAAyB,KAAK,WAAW,CAAA;AACzC,UAAA,IAAI,CAAC,kBAAA,CAAmB,GAAK,EAAA,WAAW,CAAG,EAAA;AACzC,YAAO,OAAA,GAAA;AAAA;AAGT,UAAI,IAAA,IAAA,CAAK,WAAW,CAAG,EAAA;AACrB,YAAI,IAAA,OAAA,CAAQ,GAAG,CAAG,EAAA;AAChB,cAAI,GAAA,CAAA,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA,aACpB,MAAA;AACL,cAAA,OAAO,IAAI,WAAW,CAAA;AAAA;AACxB,WACK,MAAA;AACL,YAAO,OAAA,UAAA,CAAW,IAAI,GAAI,CAAA,WAAW,GAAG,IAAK,CAAA,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA;AAGvD,UAAO,OAAA,GAAA;AAAA,SACT;AAEA,QAAO,OAAA,UAAA;AAAA;AAGT,MAAA,IAAI,MAAM,OAAQ,EAAA;AAClB,MAAA,GAAA,CAAI,MAAS,GAAA,OAAA;AACb,MAAA,GAAA,CAAI,kBAAqB,GAAA,OAAA,CAAQ,EAAC,qBAAA,EAAuB,MAAK,CAAA;AAC9D,MAAO,OAAA,GAAA;AAAA,KACR,CAAA;AAAA;AAAA,CAAA,CAAA;;;AC/TD,IAAA,YAAA,GAAA,UAAA,CAAA;AAAA,EAAA,mFAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,CAAC,SAAU,OAAS,EAAA;AAClB,MAAA,OAAO,WAAW,UAAc,IAAA,MAAA,CAAO,MAAM,MAAO,CAAA,OAAO,IAC3D,OAAQ,EAAA;AAAA,OACN,WAAY;AAOd,MAAA,IAAI,UAAa,GAAA,mBAAA,EAAA;AAGjB,MAAA,SAAS,KAAK,KAAO,EAAA;AACnB,QAAA,IAAI,YAAY,OAAO,KAAA;AACvB,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,UAAY,SAAA,GAAA,OAAA;AAAA,SACd,MAAA,IAAW,iBAAiB,IAAM,EAAA;AAChC,UAAY,SAAA,GAAA,MAAA;AAAA,SACd,MAAA,IAAW,UAAU,IAAM,EAAA;AACzB,UAAY,SAAA,GAAA,MAAA;AAAA;AAGd,QAAO,OAAA,SAAA;AAAA;AAIT,MAAS,SAAA,QAAA,CAAS,IAAI,UAAY,EAAA;AAChC,QAAA,EAAA,CAAG,aAAa,KAAM,CAAA,IAAA;AAAA,UACpB,IAAI,GAAA,CAAI,UAAW,CAAA,GAAA,CAAI,SAAU,SAAW,EAAA;AAAE,YAAO,OAAA,CAAC,SAAU,CAAA,GAAA,EAAK,SAAS,CAAA;AAAA,WAAI,CAAC,CAAA,CAAE,MAAO;AAAA,SAC9F;AACA,QAAO,OAAA,EAAA;AAAA;AAWT,MAAS,SAAA,KAAA,CAAM,OAAO,OAAS,EAAA;AAC7B,QAAQ,QAAA,IAAA,CAAK,KAAK,CAAG;AAAA,UACnB,KAAK,QAAA;AACH,YAAO,OAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,UACnC,KAAK,QAAA;AACH,YAAO,OAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAAA,UACnC,KAAK,OAAA;AACH,YAAO,OAAA,UAAA,CAAW,OAAO,OAAO,CAAA;AAAA,UAClC;AACE,YAAA,OAAO,SAAS,WAAY;AAC1B,cAAO,OAAA,KAAA;AAAA,aACT,EAAG,EAAE,CAAA;AAAA;AACT;AAKF,MAAS,SAAA,WAAA,CAAY,KAAK,OAAS,EAAA;AACjC,QAAK,IAAA,OAAA,KAAY,MAAS,EAAA,OAAA,GAAU,EAAC;AAErC,QAAA,IAAI,KAAQ,GAAA,qqhBAAA;AAEZ,QAAA,IAAI,aAAa,WAAY;AAAE,UAAO,OAAA,GAAA;AAAA,SAAK;AAE3C,QAAA,IAAI,UAAU,KAAM,CAAA,IAAA,CAAK,GAAI,CAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AAC5C,QAAA,IAAI,UAAa,GAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,KAAO,EAAA;AAC5C,UAAA,IAAI,CAAI,GAAA;AAAA,YACN,GAAA,EAAK,MAAM,CAAC;AAAA,WACd;AACA,UAAI,IAAA,KAAA,CAAM,CAAC,CAAG,EAAA;AACZ,YAAE,CAAA,CAAA,YAAA,GAAe,MAAM,CAAC,CAAA;AAAA;AAE1B,UAAO,OAAA,CAAA;AAAA,SACR,CAAA;AAED,QAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,UAAA,UAAA,GAAa,SAAU,OAAS,EAAA;AAC9B,YAAK,IAAA,OAAA,KAAY,MAAS,EAAA,OAAA,GAAU,EAAC;AAErC,YAAA,OAAO,OAAQ,CAAA,MAAA,CAAO,SAAU,MAAA,EAAQ,OAAO,CAAG,EAAA;AAChD,cAAI,IAAA,SAAA,GAAY,WAAW,CAAC,CAAA;AAC5B,cAAA,IAAI,QAAQ,UAAW,CAAA,GAAA;AAAA,gBACrB,OAAA;AAAA,gBACA,QAAQ,MAAS,GAAA,CAAC,SAAU,CAAA,GAAG,IAAI,SAAU,CAAA;AAAA,eAC/C;AAEA,cAAI,IAAA,OAAO,UAAU,WAAa,EAAA;AAChC,gBAAA,KAAA,GAAQ,SAAU,CAAA,YAAA;AAAA;AAGpB,cAAI,IAAA,OAAO,UAAU,UAAY,EAAA;AAC/B,gBAAA,KAAA,GAAQ,KAAM,EAAA;AAAA;AAGhB,cAAI,IAAA,OAAA,CAAQ,WAAW,CAAK,IAAA,GAAA,CAAI,MAAW,KAAA,KAAA,CAAM,CAAC,CAAG,EAAA;AACnD,gBAAO,OAAA,KAAA;AAAA;AAGT,cAAA,IAAI,iBAAiB,IAAM,EAAA;AACzB,gBAAA,KAAA,GAAQ,MAAM,WAAY,EAAA;AAAA;AAG5B,cAAO,OAAA,MAAA,CAAO,QAAQ,KAAM,CAAA,CAAC,GAAG,KAAS,IAAA,IAAA,GAAO,KAAK,KAAK,CAAA;AAAA,eACzD,GAAG,CAAA;AAAA,WACR;AAAA;AAGF,QAAO,OAAA,QAAA,CAAS,YAAY,UAAU,CAAA;AAAA;AAIxC,MAAS,SAAA,WAAA,CAAY,QAAQ,OAAS,EAAA;AACpC,QAAA,IAAI,WAAW,MAAO,CAAA,IAAA,CAAK,MAAM,CAAE,CAAA,GAAA,CAAI,SAAU,GAAK,EAAA;AAAE,UAAQ,OAAA;AAAA,YAC9D,WAAA,EAAa,WAAY,CAAA,GAAA,EAAK,OAAO,CAAA;AAAA,YACrC,aAAe,EAAA,KAAA,CAAM,MAAO,CAAA,GAAG,GAAG,OAAO;AAAA,WAC3C;AAAA,SAAK,CAAA;AACL,QAAA,IAAI,qBAAqB,QAAS,CAAA,MAAA;AAAA,UAChC,SAAU,YAAY,KAAO,EAAA;AAAE,YAAA,OAAO,UAAW,CAAA,MAAA;AAAA,cAC7C,MAAM,aAAc,CAAA,UAAA;AAAA,cACpB,MAAM,WAAY,CAAA;AAAA,aACpB;AAAA,WAAG;AAAA,UACL;AAAC,SACH;AACA,QAAI,IAAA,UAAA,GAAa,SAAU,OAAS,EAAA;AAClC,UAAA,OAAO,QAAS,CAAA,MAAA,CAAO,SAAU,SAAA,EAAW,KAAO,EAAA;AACjD,YAAA,SAAA,CAAU,MAAM,WAAY,CAAA,OAAO,CAAC,CAAI,GAAA,KAAA,CAAM,cAAc,OAAO,CAAA;AACnE,YAAO,OAAA,SAAA;AAAA,WACT,EAAG,EAAE,CAAA;AAAA,SACP;AAEA,QAAO,OAAA,QAAA,CAAS,YAAY,kBAAkB,CAAA;AAAA;AAIhD,MAAS,SAAA,UAAA,CAAW,OAAO,OAAS,EAAA;AAClC,QAAA,IAAI,SAAY,GAAA,KAAA,CAAM,GAAI,CAAA,SAAU,CAAG,EAAA;AAAE,UAAO,OAAA,KAAA,CAAM,GAAG,OAAO,CAAA;AAAA,SAAI,CAAA;AACpE,QAAA,IAAI,qBAAqB,SAAU,CAAA,MAAA;AAAA,UACjC,SAAU,YAAY,QAAU,EAAA;AAAE,YAAO,OAAA,UAAA,CAAW,MAAO,CAAA,QAAA,CAAS,UAAU,CAAA;AAAA,WAAG;AAAA,UACjF;AAAC,SACH;AACA,QAAI,IAAA,UAAA,GAAa,SAAU,OAAS,EAAA;AAAE,UAAO,OAAA,SAAA,CAAU,GAAI,CAAA,SAAU,QAAU,EAAA;AAAE,YAAA,OAAO,SAAS,OAAO,CAAA;AAAA,WAAI,CAAA;AAAA,SAAG;AAE/G,QAAO,OAAA,QAAA,CAAS,YAAY,kBAAkB,CAAA;AAAA;AAGhD,MAAA,MAAA,CAAO,OAAU,GAAA,KAAA;AAAA,KAEjB,CAAA;AAAA;AAAA,CAAA,CAAA;ACpJF,IAAM,kBAAA,GAAqB,2BAAU,GAAA,CAAA,KAAA,EAAA,EAAI,OAAM,4BAA6B,EAAA,MAAA,EAAO,QAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,8BAAC,MAAK,EAAA,EAAA,CAAA,EAAE,iWAAgW,CAAE,EAAA,CAAA;AACpgB,IAAO,wBAAQ,GAAA,kBAAA;ACDf,IAAM,UAAA,GAAa,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,mOAAA,EAAoO,CAAE,EAAA,CAAA;AAChY,IAAO,eAAQ,GAAA,UAAA;ACDf,IAAM,WAAA,GAAc,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,qwBAAA,EAAswB,CAAE,EAAA,CAAA;AACn6B,IAAO,iBAAQ,GAAA,WAAA;ACQR,IAAM,qBAAqB,CAAC;AAAA,EACjC,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAA+B,KAAA;AAC7B,EACA,uBAAAA,GAAA,CAAA,QAAA,EAAA,EACA,QAAAA,kBAAAA,GAAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACG,GAAG,KAAA;AAAA,MACH,GAAI,UAAa,GAAA,EAAE,OAAiB,GAAA,EAAE,cAAc,KAAM,EAAA;AAAA,MAC5D,SAAA,EAAY,UAAa,GAAAC,eAAA,CAAe,mBAAsB,GAAA,EAAA;AAAA,MAC9D,SAAW,EAAA;AAAA,QACT,OAAS,EAAA;AAAA,UACP,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA;AAC5B,OACF;AAAA,MAEE;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEF;ACrBO,IAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAC9D,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,QAAA,CAAS,WAAW,CAAK,IAAA,MAAA;AAC3E,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,EAAE,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE/C,EAAM,MAAA,gBAAA,GAAmB,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,QAAW,GAAA,KAAA,KAAU,MAAS,GAAA,IAAA,GAAO,OAAO,KAAK,CAAA;AAEvD,IAAA,MAAM,iBAAkB,CAAA,EAAE,WAAa,EAAA,QAAA,EAAU,CAAA;AAGjD,IAAS,QAAA,CAAA,cAAA,CAAe,KAAK,CAAC,CAAA;AAAA,GAC7B,EAAA,CAAC,iBAAmB,EAAA,QAAQ,CAAC,CAAA;AAEhC,EAAA,uBACED,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAa,EAAA,IAAA;AAAA,MACb,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,KAAA;AAAA,MACtC,WAAY,EAAA,YAAA;AAAA,MACZ,KAAQ,EAAA,WAAA;AAAA,MACR,QAAW,EAAA,OAAO,GAAgB,KAAA,MAAM,iBAAiB,GAAG,CAAA;AAAA,MAC5D,UAAA,EAAa,YAAY,CAAC,KAAA;AAAA,MAC1B,KAAO,EAAA;AAAA,QACL;AAAA,UACE,IAAM,EAAA,wBAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,IAAA;AAAA,UACrC,KAAO,EAAA;AAAA,SACT;AAAA,QACA;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,GAAA;AAAA,UACrC,KAAO,EAAA;AAAA,SACT;AAAA,QACA;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,GAAA;AAAA,UACrC,KAAO,EAAA;AAAA;AACT;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;AC3CO,IAAM,kBAAqB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACtF,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,iBAAoB,GAAA,MAAA;AAAA,IAAO,MAAA,CAAO,QAAQ,wBAAwB,CAAA,CAAE,IAAI,CAAC,CAAC,QAAU,EAAA,KAAK,CAAO,MAAA;AAAA,MAClG,EAAI,EAAA,QAAA;AAAA,MACJ,OAAO,UAAO,CAAA,MAAA,CAAO,QAAS,CAAA,UAAA,CAAW,OAAO,QAAiE,CAAA;AAAA,MACjH,KAAO,EAAA;AAAA,KACP,CAAA;AAAA,GACJ;AACA,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,GAAoB,KAAA;AAC9D,IAAI,IAAA,CAAC,GAAO,IAAA,GAAA,KAAQ,UAAY,EAAA;AAEhC,IAAM,MAAA,cAAA,GAAiB,kBAAkB,OAAQ,CAAA,IAAA,CAAK,CAAC,MAAW,KAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAMnF,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,MAAM,iBAAkB,CAAA,EAAE,UAAY,EAAA,cAAA,CAAe,OAAO,CAAA;AAE5D,MAAM,MAAA,cAAA,GAAiB,WAAW,YAAY,CAAA;AAC9C,MAAM,MAAA,gBAAA,GAAmB,MAAO,CAAA,IAAA,CAAK,wBAAwB,CAAA,CAAE,IAAK,CAAA,CAAAC,IAAO,KAAA,wBAAA,CAAyBA,IAA4C,CAAA,KAAM,cAAc,CAAA;AACpK,MAAA,QAAA,CAAS,aAAc,CAAA,gBAAA,IAAoB,wBAAyB,CAAA,SAAS,CAAC,CAAA;AAAA;AAChF,KACC,CAAC,UAAA,EAAY,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAExD,EAAA,uBACEJ,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACG,GAAI,UACF,GAAA;AAAA,QACA,WAAWC,eAAe,CAAA,mBAAA;AAAA,QAC1B,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA;AAAA,OAEzC,GAAA;AAAA,QACA,YAAc,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA;AAAA,OAClD;AAAA,MACF,WAAc,EAAA,UAAA;AAAA,MACd,iBAAoB,EAAA,OAAO,GAAQ,KAAA,MAAM,iBAAiB,GAAG,CAAA;AAAA,MAC7D,SAAY,EAAA;AAAA,QACV,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,MAAQ,EAAA;AAAA,UACN,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,OAAS,EAAA;AAAA,UACP,WAAWA,eAAe,CAAA,6BAAA;AAAA,UAC1B,SAAW,EAAA;AAAA,SACb;AAAA,QACA,yBACED,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,WAAYC,eAAe,CAAA,6BAAA;AAAA,YAC3B,OAAQ,iBAAkB,CAAA,OAAA;AAAA,YAExB,QAAA,EAAA,CAAC,yBACDD,GAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,WAAYC,eAAe,CAAA,iCAAA;AAAA,gBAC3B,IAAK,IAAK,CAAA,EAAA;AAAA,gBAEV,SAAA,EAAY,KAAK,KAAS,IAAA,MAAA;AAAA,gBAC1B,KAAO,EAAA,EAAE,UAAY,EAAA,IAAA,CAAK,SAAS,MAAU,EAAA;AAAA,gBAE3C,QAAK,EAAA,IAAA,CAAA;AAAA,eAAA;AAAA,cAJD,IAAK,CAAA;AAAA;AAKb;AAAA;AAEJ;AAEJ;AAAA,GAEF,EAAA,CAAA;AAEJ;ACpFO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,UAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAA2B,KAAA;AACzB,EAAA,uBACED,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,GAAG,KAAA;AAAA,MACH,GAAI,UAAa,GAAA,EAAE,OAAiB,GAAA,EAAC,cAAc,KAAK,EAAA;AAAA,MAC1D,WAAYK,WAAWJ,CAAAA,eAAAA,CAAe,sBAAsB,UAAaA,GAAAA,eAAAA,CAAe,sBAAsB,EAAE,CAAA;AAAA,MAChH,SAAW,EAAA;AAAA,QACT,KAAO,EAAA;AAAA,UACL,SAAW,EAAAI,WAAA,CAAWJ,eAAe,CAAA,mBAAA,EAAqBA,gBAAe,yBAAyB;AAAA,SACpG;AAAA,QACA,MAAQ,EAAA;AAAA,UACN,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA;AAC5B;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;ACxBO,IAAM,kBAAqB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACtF,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBE,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,iBAAkB,CAAA,EAAE,UAAY,EAAA,KAAA,EAAO,CAAA;AAE7C,IAAA,QAAA,CAAS,aAAc,CAAA,UAAA,CAAW,YAAY,CAAC,CAAC,CAAA;AAAA,GAC/C,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,KAAA;AAAA,MAC1C,YAAe,EAAA,GAAA;AAAA,MACf,KAAQ,EAAA,UAAA;AAAA,MACR,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAe,CAAA;AAAA,MACjE,OAAQ,qBAAsB,CAAA,KAAA;AAAA,MAC9B,MAAO,qBAAsB,CAAA,IAAA;AAAA,MAC7B,YAAa,UAAe,KAAA;AAAA;AAAA,GAE9B,EAAA,CAAA;AAEJ;ACjCO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,UAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAA2B,KAAA;AACzB,EAAA,uBACEA,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACG,GAAG,KAAA;AAAA,MACH,GAAI,UAAA,GAAa,EAAE,OAAA,KAAqB,EAAC;AAAA,MAC3C,KAAA;AAAA,MACA,WAAYC,eAAe,CAAA,oBAAA;AAAA,MAC3B,SAAW,EAAA;AAAA,QACT,OAAS,EAAA;AAAA,UACP,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,OAAS,EAAA;AAAA,UACP,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,SAAW,EAAA;AAAA,UACT,WAAWA,eAAe,CAAA;AAAA;AAC5B;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;ACpBO,IAAM,eAAkB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACnF,EAAA,MAAM,OAAU,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AAC9D,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AAElE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBE,WAAY,CAAA,OAAO,KAAmB,KAAA;AAC7D,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,OAAS,EAAA;AAAA,KACV,CAAA;AAED,IAAA,QAAA,CAAS,UAAW,CAAA,UAAA,CAAW,SAAS,CAAC,CAAC,CAAA;AAAA,GACzC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,OAAU,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,OAAQ,CAAA,KAAA;AAAA,MACzC,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,OAAQ,CAAA,KAAA;AAAA,MACvC,QAAW,EAAA,OAAO,UAAwB,KAAA,MAAM,iBAAiB,UAAU,CAAA;AAAA,MAC3E,YAAa,OAAW,IAAA,KAAA;AAAA,MACxB,UAAa,EAAA,SAAA,KAAA,WAAA;AAAA;AAAA,GAEf,EAAA,CAAA;AAEJ;AC5CA,IAAM,WAAA,GAAc,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,kQAAA,EAAmQ,CAAE,EAAA,CAAA;AACha,IAAO,gBAAQ,GAAA,WAAA;ACDf,IAAM,OAAA,GAAU,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,wOAAA,EAAyO,CAAE,EAAA,CAAA;AAClY,IAAO,YAAQ,GAAA,OAAA;ACgBR,IAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAE9D,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAmB,EAAA,uBAAA,KAA4B,gBAAiB,EAAA;AAEpF,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,YAAe,GAAA,KAAA,KAAA,eAAA;AACrB,IAAA,MAAM,iBAAkB,CAAA,EAAE,MAAQ,EAAA,YAAA,EAAc,CAAA;AAChD,IAAA,QAAA,CAAS,SAAU,CAAA,UAAA,CAAW,QAAQ,CAAC,CAAC,CAAA;AAIxC,IAAA,uBAAA,CAAwB,YAAY,CAAA;AAAA,KACnC,CAAC,iBAAA,EAAmB,UAAY,EAAA,QAAA,EAAU,uBAAuB,CAAC,CAAA;AAErE,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAa,EAAA,IAAA;AAAA,MACb,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,KAAA;AAAA,MACtC,WAAY,EAAA,YAAA;AAAA,MACZ,KAAQ,EAAA,QAAA,GAAA,eAAA,gBAAA,aAAA;AAAA,MACR,QAAW,EAAA,OAAO,GAAgB,KAAA,MAAM,iBAAiB,GAAG,CAAA;AAAA,MAC5D,KAAO,EAAA;AAAA,QACL;AAAA,UACE,IAAM,EAAA,YAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,SAAA;AAAA,UACrC,KAAA,EAAA,aAAA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,QAAA;AAAA,UACrC,KAAA,EAAA,eAAA;AAAA;AACF;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;AC7CO,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,KAAA;AAAA,EACA,GAAG;AACL,CAAgC,KAAA;AAE9B,EAAA,uBACEA,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACG,GAAG,KAAA;AAAA,MACH,GAAI,UAAa,GAAA,EAAE,OAAiB,GAAA,EAAE,cAAc,KAAM,EAAA;AAAA,MAC5D,WAAYK,WAAWJ,CAAAA,eAAAA,CAAe,yBAAyB,UAAaA,GAAAA,eAAAA,CAAe,sBAAsB,EAAE,CAAA;AAAA,MACnH,SAAW,EAAA;AAAA,QACT,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,KAAO,EAAA;AAAA,UACL,WAAWA,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,OAAS,EAAA;AAAA,UACP,WAAWK,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA,KAAO,EAAA;AAAA,UACL,WAAWL,eAAe,CAAA;AAAA;AAC5B;AACF;AAAA,GACF;AAEJ;ACrBO,IAAM,qBAAwB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACzF,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,aAAa,CAAA;AAC1E,EAAA,MAAM,wBAA2B,GAAA;AAAA,IAC/B,SAAS,OAAQ,CAAA,QAAA,CAAS,IAAmC,GAAA,eAAA,qBAAA,EAAG,WAAW,oBAAqB,CAAA,OAAA;AAAA,IAChG,OAAO,OAAQ,CAAA,QAAA,CAAS,IAAmC,GAAA,eAAA,qBAAA,EAAG,SAAS,oBAAqB,CAAA,KAAA;AAAA,IAC5F,MAAM,OAAQ,CAAA,QAAA,CAAS,IAAmC,GAAA,eAAA,qBAAA,EAAG,QAAQ,oBAAqB,CAAA;AAAA,GAC5F;AACA,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBE,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,aAAe,EAAA;AAAA,KAChB,CAAA;AAED,IAAA,QAAA,CAAS,gBAAiB,CAAA,UAAA,CAAW,eAAe,CAAC,CAAC,CAAA;AACtD,IAAS,QAAA,CAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAAA,GACjC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA,wBAAA,CAAyB,8DACvBF,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,KAAA;AAAA,MAC7C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,aAAiB,IAAA,CAAA;AAAA,MACzB,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MACvD,OAAQ,wBAAyB,CAAA,KAAA;AAAA,MACjC,MAAO,wBAAyB,CAAA,IAAA;AAAA,MAChC,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,QAAA;AAAA,QACrD,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA;AAAA,OACvD;AAAA,MACA,aAAA,EAAe,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,MAClC,eAAkB,EAAA,IAAA;AAAA,MAClB,yBAA4B,EAAA;AAAA;AAAA,sBAE5BA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,KAAA;AAAA,MAC7C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,aAAiB,IAAA,CAAA;AAAA,MACzB,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAe,CAAA;AAAA,MACjE,OAAQ,wBAAyB,CAAA,KAAA;AAAA,MACjC,MAAO,wBAAyB,CAAA,IAAA;AAAA,MAChC,aAAA,EAAgB,EAAE,KAAA,EAAO,SAAU;AAAA;AAAA,GAGvC,EAAA,CAAA;AAEJ;ACvEA,IAAM,OAAA,GAAU,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,6NAAA,EAA8N,CAAE,EAAA,CAAA;AACvX,IAAO,YAAQ,GAAA,OAAA;ACDf,IAAM,eAAA,GAAkB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,2FAAA,EAA4F,CAAE,EAAA,CAAA;AAC7P,IAAO,qBAAQ,GAAA,eAAA;ACDf,IAAM,gBAAA,GAAmB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,sEAAA,EAAuE,CAAE,EAAA,CAAA;AACzO,IAAO,sBAAQ,GAAA,gBAAA;ACDf,IAAM,eAAA,GAAkB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,gDAAA,EAAiD,CAAE,EAAA,CAAA;AAClN,IAAO,qBAAQ,GAAA,eAAA;ACqBR,IAAM,kBAAqB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACtF,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAC9E,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAA,MAAM,oBAAoBO,MAAO,CAAA;AAAA,IAC/B,+BAAiC,IAAA;AAAA,IACjC,uBAA6B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,OAAA,iBAAkC,kBAA4C,CAAA,OAAA,aAAA;AAAA,IAC5J,yBAA8B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,QAAA,kBAAmC,kBAA6C,CAAA,QAAA,cAAA;AAAA,IAC/J,uBAA6B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,OAAA,iBAAkC,kBAA4C,CAAA,OAAA;AAAA,GAC7J,CAAA;AAED,EAAM,MAAA,gBAAA,GAAmBJ,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,aAAgB,GAAA,KAAA,KAAA,WAAA,mBAClB,IACA,GAAA,iBAAA,CAAkB,QAAQ,KAAyC,CAAA;AAEvE,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,UAAY,EAAA;AAAA,KACb,CAAA;AAED,IAAM,MAAA,iBAAA,GAAoB,WAAW,YAAY,CAAA;AACjD,IAAA,MAAM,8BAAiC,GAAA,MAAA,CAAO,OAAQ,CAAA,iBAAA,CAAkB,OAAO,CAAE,CAAA,IAAA,CAAK,CAAC,CAAC,KAAKK,MAAK,CAAA,KAAMA,MAAU,KAAA,iBAAiB,IAAI,CAAC,CAAA;AAExI,IAAS,QAAA,CAAA,aAAA,CAAc,8BAA8B,CAAC,CAAA;AACtD,IAAS,QAAA,CAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAAA,GACjC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACER,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,KAAA;AAAA,MAC1C,WAAY,EAAA,YAAA;AAAA,MACZ,OAAQ,eAAkD,GAAA,WAAA,mBAAA,UAAA;AAAA,MAC1D,QAAW,EAAA,OAAO,GAAgB,KAAA,MAAM,iBAAiB,GAAG,CAAA;AAAA,MAC5D,KAAO,EAAA;AAAA,QACL;AAAA,UACE,IAAM,EAAA,YAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,SAAA;AAAA,UACzC,KAAA,EAAA,WAAA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAM,EAAA,qBAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,KAAA;AAAA,UACzC,KAAA,EAAA,OAAA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAM,EAAA,sBAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,MAAA;AAAA,UACzC,KAAA,EAAA,QAAA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAM,EAAA,qBAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,KAAA;AAAA,UACzC,KAAA,EAAA,OAAA;AAAA;AACF;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;ACpEO,IAAM,uBAA0B,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AAC3F,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAC9E,EAAA,MAAM,0BAA6B,GAAA;AAAA,IAC/B,SAAS,OAAQ,CAAA,QAAA,CAAS,IAAqC,GAAA,iBAAA,uBAAA,EAAG,WAAW,sBAAuB,CAAA,OAAA;AAAA,IACpG,OAAO,OAAQ,CAAA,QAAA,CAAS,IAAqC,GAAA,iBAAA,uBAAA,EAAG,SAAS,sBAAuB,CAAA,KAAA;AAAA,IAChG,MAAM,OAAQ,CAAA,QAAA,CAAS,IAAqC,GAAA,iBAAA,uBAAA,EAAG,QAAQ,sBAAuB,CAAA;AAAA,GAChG;AACF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,eAAiB,EAAA;AAAA,KAClB,CAAA;AAED,IAAA,QAAA,CAAS,kBAAmB,CAAA,UAAA,CAAW,iBAAiB,CAAC,CAAC,CAAA;AAC1D,IAAS,QAAA,CAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAAA,GACjC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA,0BAAA,CAA2B,8DACzBF,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,KAAA;AAAA,MAC1C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,eAAmB,IAAA,CAAA;AAAA,MAC3B,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MACvD,OAAQ,0BAA2B,CAAA,KAAA;AAAA,MACnC,MAAO,0BAA2B,CAAA,IAAA;AAAA,MAClC,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,QAAA;AAAA,QAClD,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA;AAAA,OACpD;AAAA,MACA,aAAe,EAAA;AAAA,QACb,WAAa,EAAA,YAAA;AAAA,QACb,qBAAuB,EAAA,CAAA;AAAA,QACvB,qBAAuB,EAAA;AAAA,OACzB;AAAA,MACA,eAAkB,EAAA,IAAA;AAAA,MAClB,yBAA4B,EAAA;AAAA;AAAA,sBAE5BA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,UAAW,CAAA,KAAA;AAAA,MAC1C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,eAAmB,IAAA,CAAA;AAAA,MAC3B,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAe,CAAA;AAAA,MACjE,OAAQ,0BAA2B,CAAA,KAAA;AAAA,MACnC,MAAO,0BAA2B,CAAA,IAAA;AAAA,MAClC,aAAe,EAAA;AAAA,QACb,WAAa,EAAA,YAAA;AAAA,QACb,qBAAuB,EAAA,CAAA;AAAA,QACvB,qBAAuB,EAAA;AAAA;AACzB;AAAA,GAGJ,EAAA,CAAA;AAEJ;AC7DO,IAAM,wBAA2B,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AAC5F,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAChF,EAAA,MAAM,2BAA8B,GAAA;AAAA,IAClC,SAAS,OAAQ,CAAA,QAAA,CAAS,IAAsC,GAAA,kBAAA,wBAAA,EAAG,WAAW,uBAAwB,CAAA,OAAA;AAAA,IACtG,OAAO,OAAQ,CAAA,QAAA,CAAS,IAAsC,GAAA,kBAAA,wBAAA,EAAG,SAAS,uBAAwB,CAAA,KAAA;AAAA,IAClG,MAAM,OAAQ,CAAA,QAAA,CAAS,IAAsC,GAAA,kBAAA,wBAAA,EAAG,QAAQ,uBAAwB,CAAA;AAAA,GAClG;AACA,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,gBAAkB,EAAA;AAAA,KACnB,CAAA;AAED,IAAA,QAAA,CAAS,mBAAoB,CAAA,UAAA,CAAW,kBAAkB,CAAC,CAAC,CAAA;AAC5D,IAAS,QAAA,CAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAAA,GACjC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA,2BAAA,CAA4B,8DAC1BF,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA,KAAA;AAAA,MAC3C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,gBAAoB,IAAA,CAAA;AAAA,MAC5B,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MACvD,OAAQ,2BAA4B,CAAA,KAAA;AAAA,MACpC,MAAO,2BAA4B,CAAA,IAAA;AAAA,MACnC,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA,QAAA;AAAA,QACnD,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA;AAAA,OACrD;AAAA,MACA,aAAe,EAAA;AAAA,QACb,WAAa,EAAA,YAAA;AAAA,QACb,qBAAuB,EAAA,CAAA;AAAA,QACvB,qBAAuB,EAAA;AAAA,OACzB;AAAA,MACA,eAAkB,EAAA,IAAA;AAAA,MAClB,yBAA4B,EAAA;AAAA;AAAA,sBAE5BA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA,KAAA;AAAA,MAC3C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,gBAAoB,IAAA,CAAA;AAAA,MAC5B,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAe,CAAA;AAAA,MACjE,OAAQ,2BAA4B,CAAA,KAAA;AAAA,MACpC,MAAO,2BAA4B,CAAA,IAAA;AAAA,MACnC,aAAe,EAAA;AAAA,QACb,WAAa,EAAA,YAAA;AAAA,QACb,qBAAuB,EAAA,CAAA;AAAA,QACvB,qBAAuB,EAAA;AAAA;AACzB;AAAA,GAGJ,EAAA,CAAA;AAEJ;AC9DO,IAAM,uBAA0B,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AAC3F,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAE9E,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAC9E,EAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAChF,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,aAAa,CAAA;AAC1E,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AAEtE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,oBAAoBO,MAAO,CAAA;AAAA,IAC/B,+BAAiC,IAAA;AAAA,IACjC,uBAA6B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,OAAA,iBAAkC,kBAA4C,CAAA,OAAA,aAAA;AAAA,IAC5J,yBAA8B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,QAAA,kBAAmC,kBAA6C,CAAA,QAAA,cAAA;AAAA,IAC/J,uBAA6B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,OAAA,iBAAkC,kBAA4C,CAAA,OAAA;AAAA,GAC7J,CAAA;AAED,EAAM,MAAA,EAAE,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE/C,EAAM,MAAA,gBAAA,GAAmBJ,WAAY,CAAA,OAAO,UAAwB,KAAA;AAClE,IAAA,MAAM,SAAS,UACf,GAAA;AAAA,MACE,UAAY,EAAA,IAAA;AAAA,MACZ,eAAiB,EAAA,IAAA;AAAA,MACjB,gBAAkB,EAAA,IAAA;AAAA,MAClB,aAAe,EAAA,IAAA;AAAA,MACf,WAAa,EAAA;AAAA,KAEf,GAAA;AAAA,MACE,UAAY,EAAA,UAAA,KAAA,WAAA,mBACR,IACA,GAAA,iBAAA,CAAkB,QAAQ,UAA8C,CAAA;AAAA,MAC5E,iBAAiB,eAAmB,IAAA,CAAA;AAAA,MACpC,kBAAkB,gBAAoB,IAAA,CAAA;AAAA,MACtC,eAAe,aAAiB,IAAA,CAAA;AAAA,MAChC,aAAa,WAAe,IAAA;AAAA,KAC9B;AACA,IAAA,MAAM,kBAAkB,MAAM,CAAA;AAE9B,IAAA,QAAA,CAAS,kBAAmB,CAAA,UAAA,GAAa,IAAO,GAAA,KAAK,CAAC,CAAA;AAAA,GACxD,EAAG,CAAC,iBAAmB,EAAA,QAAA,EAAU,YAAY,eAAiB,EAAA,gBAAA,EAAkB,aAAe,EAAA,WAAW,CAAC,CAAA;AAE3G,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,eAAgB,CAAA,KAAA;AAAA,MAC/C,QAAW,EAAA,OAAO,UAAwB,KAAA,MAAM,iBAAiB,UAAU,CAAA;AAAA,MAC3E,UAAa,EAAA;AAAA;AAAA,GAEf,EAAA,CAAA;AAEJ;AC5CO,IAAM,uBAAuB,CAAC;AAAA,EACnC,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,UAAU,cAAe,EAAA;AAE/B,EAAM,MAAA,IAAA,GAAO,KAAO,EAAA,IAAA,IAAQ,YAAa,CAAA,IAAA;AACzC,EAAA,MAAM,eAAe,KAAO,EAAA,QAAA,KAAa,MACrC,GAAA,KAAA,CAAM,WACN,YAAa,CAAA,QAAA;AAEjB,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,IAAA;AAAA,IACA,QAAU,EAAA;AAAA,GACZ;AAEA,EAAA,uBACEA,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAYK,EAAAA,WAAAA,CAAWJ,eAAe,CAAA,mBAAA,EAAqBA,gBAAe,2BAA2B,CAAA;AAAA,MACrG,KAAQ,EAAA,aAAA;AAAA,MACR,KAAQ,EAAA,aAAA;AAAA,MACR,SAAW,EAAA;AAAA,QACT,KAAO,EAAA,OAAA;AAAA,QACP,OAAS,EAAA;AAAA,UACP,SAAWI,EAAAA,WAAAA,CAAWJ,eAAe,CAAA,mBAAA,EAAqBA,gBAAe,wBAAwB;AAAA,SACnG;AAAA,QACA,MAAQ,EAAA;AAAA,UACN,SAAWI,EAAAA,WAAAA,CAAWC,eAAe,CAAA,IAAA,EAAML,gBAAe,0BAA0B,CAAA;AAAA,UACpF,YAAc,EAAA,SAAA;AAAA,UACd,SAAW,EAAA;AAAA,YACT,cAAgB,EAAA;AAAA,cACd,KAAA,EAAO,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,YAAA;AAAA,cAC5B,UAAA,EAAY,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,aACnC;AAAA,YACA,OAAS,EAAA;AAAA,cACP,WAAWK,eAAe,CAAA,OAAA;AAAA,cAC1B,SAAW,EAAA,KAAA;AAAA,cACX,MAAQ,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,aAAiB,IAAA;AAAA,aAChD;AAAA,YACA,KAAO,EAAA;AAAA,WACT;AAAA,UACA,OAAS,EAAA;AAAA;AACX;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;;;ACtDA,IAAM,eAA2B,EAAC;AAElC,IAAM,sBAAN,MAA0B;AAAA,EACxB,SAAS,MAAwB,EAAA;AAC/B,IAAA,MAAM,sBAAsB,YAAa,CAAA,SAAA,CAAU,OAAK,CAAE,CAAA,EAAA,KAAO,OAAO,EAAE,CAAA;AAE1E,IAAA,IAAI,uBAAuB,CAAG,EAAA;AAC5B,MAAA,YAAA,CAAa,mBAAmB,CAAI,GAAA,MAAA;AAAA,KAC/B,MAAA;AACL,MAAA,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA;AAC1B;AACF,EAEA,WAAW,QAAwB,EAAA;AACjC,IAAA,MAAM,kBAAkB,YAAa,CAAA,MAAA,CAAO,CAAU,MAAA,KAAA,MAAA,CAAO,OAAO,QAAQ,CAAA;AAG5E,IAAA,YAAA,CAAa,MAAS,GAAA,CAAA;AACtB,IAAa,YAAA,CAAA,IAAA,CAAK,GAAG,eAAe,CAAA;AAAA;AACtC,EAEA,UAAyB,GAAA;AACvB,IAAO,OAAA,CAAC,GAAG,YAAY,CAAA;AAAA;AACzB,EAEA,gBAAmB,GAAA;AACjB,IAAA,MAAM,uBAAwD,EAAC;AAC/D,IAAA,MAAM,wBAA0D,EAAC;AAGjE,IAAA,CAAC,GAAG,YAAY,CAAA,CAAE,OAAQ,EAAA,CAAE,QAAQ,CAAU,MAAA,KAAA;AAE5C,MAAI,IAAA,MAAA,CAAO,WAAW,OAAS,EAAA;AAC7B,QAAO,MAAA,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAW,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAK,EAAA,SAAS,CAAM,KAAA;AACtE,UAAA,oBAAA,CAAqB,GAAa,CAAI,GAAA,SAAA;AAAA,SACvC,CAAA;AAAA;AAIH,MAAI,IAAA,MAAA,CAAO,WAAW,QAAU,EAAA;AAC9B,QAAO,MAAA,CAAA,OAAA,CAAQ,MAAO,CAAA,UAAA,CAAW,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAK,EAAA,SAAS,CAAM,KAAA;AACvE,UAAA,qBAAA,CAAsB,GAAa,CAAI,GAAA,SAAA;AAAA,SACxC,CAAA;AAAA;AACH,KACD,CAAA;AAED,IAAO,OAAA;AAAA,MACL,oBAAA;AAAA,MACA;AAAA,KACF;AAAA;AAEJ,CAAA;AAGO,IAAM,gBAAA,GAAmB,IAAI,mBAAoB,EAAA;ACnExD,IAAM,kBAAkB,aAAmC,CAAA;AAAA,EACzD,sBAAsB,EAAC;AAAA,EACvB,uBAAuB,EAAC;AAAA,EACxB,2BAA2B,EAAC;AAAA,EAC5B,8BAA8B,EAAC;AAAA,EAC/B,cAAgB,EAAA,gBAAA,CAAiB,QAAS,CAAA,IAAA,CAAK,gBAAgB,CAAA;AAAA,EAC/D,gBAAkB,EAAA,gBAAA,CAAiB,UAAW,CAAA,IAAA,CAAK,gBAAgB;AACrE,CAAC,CAAA;AAEM,IAAM,UAAA,GAAa,MAAM,UAAA,CAAW,eAAe,CAAA;AAEnD,IAAM,gBAAmB,GAAA,CAAC,EAAE,QAAA,EAA8C,KAAA;AAC/E,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAKvC,MAAM;AAEP,IAAM,MAAA,IAAA,GAAO,iBAAiB,gBAAiB,EAAA;AAC/C,IAAO,OAAA;AAAA,MACL,GAAG,IAAA;AAAA,MACH,yBAA2B,EAAA,0BAAA,CAA2B,IAAK,CAAA,qBAAA,EAAuB,MAAM,CAAA;AAAA,MACxF,4BAA8B,EAAA,0BAAA,CAA2B,IAAK,CAAA,qBAAA,EAAuB,SAAS;AAAA,KAChG;AAAA,GACD,CAAA;AAGD,EAAS,SAAA,0BAAA,CACP,eACA,IACkC,EAAA;AAClC,IAAO,OAAA,MAAA,CAAO,QAAQ,aAAa,CAAA,CAChC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA,KAAM,UAAU,IAAS,KAAA,IAAI,EAClD,MAAO,CAAA,CAAC,KAAK,CAAC,GAAA,EAAK,SAAS,CAAM,KAAA;AACjC,MAAA,GAAA,CAAI,GAAG,CAAI,GAAA,SAAA;AACX,MAAO,OAAA,GAAA;AAAA,KACT,EAAG,EAAsC,CAAA;AAAA;AAI7C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAM,MAAA,IAAA,GAAO,iBAAiB,gBAAiB,EAAA;AAC/C,MAAiB,gBAAA,CAAA;AAAA,QACf,GAAG,IAAA;AAAA,QACH,yBAA2B,EAAA,0BAAA,CAA2B,IAAK,CAAA,qBAAA,EAAuB,MAAM,CAAA;AAAA,QACxF,4BAA8B,EAAA,0BAAA,CAA2B,IAAK,CAAA,qBAAA,EAAuB,SAAS;AAAA,OAC/F,CAAA;AAAA,KACH;AAGA,IAAoB,mBAAA,EAAA;AAAA,GACtB,EAAG,EAAE,CAAA;AAGL,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA4D,KAAA;AAClF,IAAA,gBAAA,CAAiB,SAAS,MAAM,CAAA;AAAA,GAClC;AAGA,EAAM,MAAA,gBAAA,GAAmB,CAAC,QAAqB,KAAA;AAC7C,IAAA,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAAA,GACtC;AAGA,EAAA,MAAM,KAAQ,GAAA;AAAA,IACZ,GAAG,aAAA;AAAA,IACH,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEN,GAAC,CAAA,eAAA,CAAgB,QAAhB,EAAA,EAAyB,OACtB,QACJ,EAAA,CAAA;AAEJ,CAAA;ACtEO,IAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAM,MAAA,EAAE,4BAA6B,EAAA,GAAI,UAAW,EAAA;AACpD,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,mBAAA,GAAsBG,YAAY,MAAM;AAC5C,IAAA,QAAA,CAAS,6CAAqD,CAAA;AAAA,GAChE,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,OAAU,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,OAAQ,CAAA,KAAA;AAAA,MACzC,SAAY,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,QAAQ,QAAS,CAAA,OAAA;AAAA,MACpD,WAAc,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,QAAQ,QAAS,CAAA,OAAA;AAAA,MACtD,WAAc,EAAA,mBAAA;AAAA,MACd,aAAgB,EAAA,4BAAA;AAAA,MAChB,KAAA,EAAQ,QAAQ,QAAS,CAAA,OAAA;AAAA,MACzB,YAAe,EAAA;AAAA,QACb,IAAM,EAAA,0BAAA;AAAA,QACN,QAAU,EAAA;AAAA;AACZ;AAAA,GAEF,EAAA,CAAA;AAEJ;AAEO,IAAM,gCAAgC,MAAM;AACjD,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,QAAS,CAAA,OAAA,EAAS,QAA0D,IAAA,8BAAA;AACzG,EAAM,MAAA,EAAE,4BAA6B,EAAA,GAAI,UAAW,EAAA;AAEpD,EAAA,uBACEA,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,GAA+B,KAAA;AACjD,IAAM,MAAA,KAAA,GAAQ,6BAA6B,GAAG,CAAA;AAC9C,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAQ,OAAA,CAAA,IAAA,CAAK,CAAiB,aAAA,EAAA,GAAI,CAAkE,gEAAA,CAAA,CAAA;AACpG,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,uBAAOF,GAAC,CAAA,KAAA,CAAM,MAAN,EAAuB,UAAA,EAAa,QAAnB,GAA0B,CAAA;AAAA,GACpD,CACD,EAAA,CAAA;AAEJ;AChEA,IAAM,kBAAA,GAAqB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,kHAAA,EAAmH,CAAE,EAAA,CAAA;AACvR,IAAO,yBAAQ,GAAA,kBAAA;ACDf,IAAM,mBAAA,GAAsB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,0HAAA,EAA2H,CAAE,EAAA,CAAA;AAChS,IAAO,0BAAQ,GAAA,mBAAA;ACDf,IAAM,qBAAA,GAAwB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,kHAAA,EAAmH,CAAE,EAAA,CAAA;AAC1R,IAAO,4BAAQ,GAAA,qBAAA;ACoBR,IAAM,iBAAoB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACrF,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AAClE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAMM,aAAkC,KACpC,KAAA,WAAA,mBAAA,IAAA,GACA,KACE,KAAA,OAAA,eAAA,aAAA,CAAc,QACd,aAAc,CAAA,OAAA;AAEpB,IAAM,MAAA,cAAA,GAAiB,WAAW,SAAS,CAAA;AAE3C,IAAA,MAAM,UAAUA,UAAc,KAAA,IAAA,GAC1B,IACC,GAAA,cAAA,IAAkBA,eAAc,aAAc,CAAA,OAAA;AAEjD,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,SAAWA,EAAAA,UAAAA;AAAA,MACX;AAAA,KACD,CAAA;AAED,IAAM,MAAA,gBAAA,GAAmB,WAAW,WAAW,CAAA;AAC/C,IAAM,MAAA,cAAA,GAAiB,qBAAqB,IAAsC,GAAA,WAAA,mBAAA,gBAAA;AAElF,IAAS,QAAA,CAAA,YAAA,CAAa,cAAc,CAAC,CAAA;AACrC,IAAA,QAAA,CAAS,UAAW,CAAA,UAAA,CAAW,SAAS,CAAC,CAAC,CAAA;AAAA,GAC3C,EAAA,CAAC,UAAY,EAAA,iBAAA,EAAmB,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACET,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAM,CAAA,KAAA;AAAA,MACrC,WAAY,EAAA,YAAA;AAAA,MACZ,KAAQ,EAAA,SAAA;AAAA,MACR,QAAW,EAAA,OAAO,GAAgB,KAAA,MAAM,iBAAiB,GAAG,CAAA;AAAA,MAC5D,KAAO,EAAA;AAAA,QACL;AAAA,UACE,IAAM,EAAA,YAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAM,CAAA,SAAA;AAAA,UACpC,KAAA,EAAA,WAAA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAA,EAAM,QAAQ,0BAAiB,GAAA,yBAAA;AAAA,UAC/B,KAAA,EAAO,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAM,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAM,CAAA,IAAA;AAAA,UACjF,KAAA,EAAA,OAAA;AAAA,SACF;AAAA,QACA;AAAA,UACE,IAAM,EAAA,4BAAA;AAAA,UACN,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAM,CAAA,OAAA;AAAA,UACpC,KAAA,EAAA,SAAA;AAAA;AACF;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ;AC7DO,IAAM,oBAAoB,MAAM;AACrC,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAM,MAAA,EAAE,yBAA0B,EAAA,GAAI,UAAW,EAAA;AACjD,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,gBAAA,GAAmBG,YAAY,MAAM;AACzC,IAAA,QAAA,CAAS,uCAAkD,CAAA;AAAA,GAC7D,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,OAAU,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,IAAK,CAAA,KAAA;AAAA,MACtC,SAAY,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAK,QAAS,CAAA,OAAA;AAAA,MACjD,WAAc,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAK,QAAS,CAAA,OAAA;AAAA,MACnD,WAAc,EAAA,gBAAA;AAAA,MACd,aAAgB,EAAA,yBAAA;AAAA,MAChB,KAAA,EAAQ,QAAQ,QAAS,CAAA,IAAA;AAAA,MACzB,YAAe,EAAA;AAAA,QACb,IAAM,EAAA,uBAAA;AAAA,QACN,QAAU,EAAA;AAAA;AACZ;AAAA,GAEF,EAAA,CAAA;AAEJ;AAEO,IAAM,6BAA6B,MAAM;AAC9C,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,QAAS,CAAA,IAAA,EAAM,QAAuD,IAAA,2BAAA;AACnG,EAAM,MAAA,EAAE,yBAA0B,EAAA,GAAI,UAAW,EAAA;AAEjD,EAAA,uBACEA,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAa,EAAA,YAAA,CAAA,GAAA,CAAI,CAAC,GAA4B,KAAA;AAC9C,IAAM,MAAA,KAAA,GAAQ,0BAA0B,GAAG,CAAA;AAC3C,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAQ,OAAA,CAAA,IAAA,CAAK,CAAgB,YAAA,EAAA,GAAI,CAAkE,gEAAA,CAAA,CAAA;AACnG,MAAO,OAAA,IAAA;AAAA;AAET,IAAA,uBAAOF,GAAC,CAAA,KAAA,CAAM,MAAN,EAAuB,UAAA,EAAa,QAAnB,GAA0B,CAAA;AAAA,GACpD,CACD,EAAA,CAAA;AAEJ;AClDO,IAAM,qBAAwB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACzF,EAAA,MAAM,iBAAoB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,iBAAiB,CAAA;AAClF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,KAAmB,KAAA;AAC7D,IAAA,MAAM,iBAAkB,CAAA,EAAE,iBAAmB,EAAA,KAAA,EAAO,CAAA;AAEpD,IAAA,QAAA,CAAS,oBAAqB,CAAA,UAAA,CAAW,mBAAmB,CAAC,CAAC,CAAA;AAAA,GAC7D,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,UAAA;AAAA,MACA,OAAU,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,KAAA;AAAA,MAC/C,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,aAAc,CAAA,KAAA;AAAA,MAC7C,QAAW,EAAA,OAAO,UAAwB,KAAA,MAAM,iBAAiB,UAAU,CAAA;AAAA,MAC3E,YAAa,iBAAqB,IAAA;AAAA;AAAA,GAEpC,EAAA,CAAA;AAEJ;ACrCA,IAAM,QAAA,GAAW,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,uDAAA,EAAwD,CAAE,EAAA,CAAA;AAClN,IAAO,aAAQ,GAAA,QAAA;ACwBR,IAAM,aAAgB,GAAA,CAAC,EAAE,WAAA,EAA4C,KAAA;AAC1E,EAAA,MAAM,EAAE,YAAA,EAAc,eAAgB,EAAA,GAAI,iBAAkB,EAAA;AAC5D,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAM,MAAA,aAAA,GAAgBO,OAA8B,IAAI,CAAA;AAExD,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAA,MAAM,KAAQ,GAAA,SAAA,KAAA,KAAA;AACd,EAAM,MAAA,UAAA,GAAa,QAAQ,YAAe,GAAA,eAAA;AAE1C,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,KAAQ,GAAA,KAAA,GAAQ,WAAY,CAAA,GAAA,GAAM,WAAY,CAAA,MAAA;AACpD,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,WAAW,CAAA;AAErE,EAAA,MAAM,UAAaA,GAAAA,MAAAA;AAAA,IACjB,UAAA,CAAW,MAAO,CAAA,CAACG,MAAiC,KAAA;AAClD,MAAA,IAAIA,WAAU,MAAQ,EAAA;AACpB,QAAO,OAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,YAAiB,KAAA,MAAA,IAC7C,MAAO,CAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAY,CAAE,CAAA,KAAA;AAAA,UAAM,CAAA,CAAA,KACvD,UAAW,CAAA,QAAA,CAAS,CAAC;AAAA,SACvB;AAAA;AAEJ,MAAO,OAAA,IAAA;AAAA,KACR;AAAA,GACH;AAEA,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,EAAE,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE/C,EAAM,MAAA,gBAAA,GAAmBP,WAAY,CAAA,OAAO,KAAiC,KAAA;AAC3E,IAAA,MAAM,aAAa,gBAA+B,CAAA;AAAA,MAChD,KAAO,EAAA,KAAA;AAAA,MACP,SAAA,EAAW,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,MAClC,YAAA,EAAc,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA;AAAA,MACrC;AAAA,KACD,CAAA;AACD,IAAA,MAAM,kBAAkB,UAAU,CAAA;AAElC,IAAA,QAAA,CAAS,QAAS,CAAA;AAAA,MAChB,GAAA,EAAK,QAAQ,KAAQ,GAAA,QAAA;AAAA,MACrB;AAAA,KACD,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,KAAO,EAAA,OAAA,CAAQ,QAAQ,MAAO,CAAA,IAAA,EAAM,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA,EAAc,iBAAmB,EAAA,QAAA,EAAU,WAAW,CAAC,CAAA;AAItH,EAAM,MAAA,QAAA,GAAWA,WAAY,CAAA,CAAC,CAA6B,KAAA;AAGzD,IAAA,IAAI,QAAgB,GAAA;AAAA,MAClB,SAAW,EAAA,YAAA;AAAA,MACX,KAAO,EAAA;AAAA,KACT;AAEA,IAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,MAAA,IAAI,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA,KAAiB,MAAW,EAAA;AACrD,QAAS,QAAA,CAAA,UAAA,GAAa,QACpB,CAA4B,wBAAA,EAAA,OAAA,CAAQ,QAAQ,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA,CAAa,IAAI,CAAE,CAAA,UAAW,CAAU,MAAA,EAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,KAAK,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA,CAAa,KAAK,CAAA,CAAE,UAAW,CACzM,MAAA,CAAA,GAAA,CAAA,wBAAA,EAA4B,QAAQ,OAAQ,CAAA,MAAA,CAAO,KAAK,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA,CAAa,KAAK,CAAA,CAAE,UAAW,CAAS,KAAA,EAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,IAAK,CAAA,OAAA,CAAQ,QAAQ,MAAO,CAAA,YAAA,CAAa,IAAI,CAAA,CAAE,UAAW,CAAA,KAAA,CAAA;AAC1M,QAAA,QAAA,CAAS,KAAQ,GAAA,SAAA;AACjB,QAAA,QAAA,CAAS,MAAS,GAAA,CAAA,UAAA,EAAc,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA,CAAa,KAAK,CAAA,CAAE,MAAO,CAAA,CAAA;AAAA,OACzG,MAAA;AACL,QAAA,QAAA,CAAS,OAAU,GAAA,MAAA;AAAA;AACrB,KACK,MAAA;AACL,MAAA,QAAA,CAAS,aAAa,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,CAAC,CAAE,CAAA,UAAA;AACrD,MAAA,QAAA,CAAS,QAAQ,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA,CAAK,CAAC,CAAE,CAAA,IAAA;AAChD,MAAS,QAAA,CAAA,MAAA,GAAS,aAAc,OAAQ,CAAA,OAAA,CAAQ,OAAO,IAAK,CAAA,CAAC,EAAE,MAAO,CAAA,CAAA;AAAA;AAGxE,IAAO,OAAA,QAAA;AAAA,GACT,EAAG,CAAC,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,IAAM,EAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,YAAc,EAAA,KAAK,CAAC,CAAA;AAK5E,EAAM,MAAA,iBAAA,GAAoB,OAAO,CAA2B,KAAA;AAE1D,IAAA,IAAI,WAAe,IAAA,CAAC,KAAM,CAAA,WAAW,CAAG,EAAA;AACtC,MAAM,MAAA,mBAAA,GAAsB,OAAO,MAAmB,KAAA;AACpD,QAAA,MAAM,aAAa,UAAW,CAAA,OAAA,CAAQ,UAAU,CAAC,GAAA,KAAQ,QAAQ,KAAK,CAAA;AACtE,QAAA,MAAM,UAAU,UAAa,GAAA,MAAA;AAC7B,QAAA,IAAI,OAAW,IAAA,CAAA,IAAK,OAAU,GAAA,UAAA,CAAW,QAAQ,MAAQ,EAAA;AACvD,UAAA,MAAM,gBAAiB,CAAA,UAAA,CAAW,OAAQ,CAAA,OAAO,CAAC,CAAA;AAIlD,UAAA,IAAI,cAAc,OAAS,EAAA;AACzB,YAAM,MAAA,YAAA,GAAe,cAAc,OAAQ,CAAA,aAAA,CAAc,IAAI,UAAW,CAAA,OAAA,CAAQ,OAAO,CAAC,CAAE,CAAA,CAAA;AAC1F,YAAI,IAAA,YAAA,eAA2B,KAAM,EAAA;AAAA;AACvC;AACF,OACF;AAEA,MAAA,QAAO,EAAE,IAAM;AAAA,QACb,KAAK,QAAA;AACH,UAAA,QAAA,CAAS,aAAc,CAAA;AAAA,YACrB,GAAA,EAAA,UAAA;AAAA,YACA,MAAQ,EAAA;AAAA,WACT,CAAC,CAAA;AACF,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAA,CAAA,CAAE,cAAe,EAAA;AACjB,UAAM,MAAA,mBAAA,CAAoB,CAAC,WAAW,CAAA;AACtC,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAe,EAAA;AACjB,UAAA,MAAM,oBAAoB,WAAW,CAAA;AACrC,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,CAAA,CAAE,cAAe,EAAA;AACjB,UAAA,KAAA,GAAQ,MAAM,mBAAoB,CAAA,CAAC,CAAI,GAAA,MAAM,oBAAoB,EAAE,CAAA;AACnE,UAAA;AAAA,QACF,KAAK,YAAA;AACH,UAAA,CAAA,CAAE,cAAe,EAAA;AACjB,UAAA,KAAA,GAAQ,MAAM,mBAAoB,CAAA,EAAE,CAAI,GAAA,MAAM,oBAAoB,CAAC,CAAA;AACnE,UAAA;AAEA;AACJ;AACF,GACF;AAGA,EAAAQ,UAAU,MAAM;AACd,IAAA,IAAI,UAAU,MAAU,IAAA,CAAC,WAAW,OAAQ,CAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AAC3D,MAAiB,gBAAA,CAAA,UAAA,CAAW,OAAQ,CAAA,CAAC,CAAC,CAAA;AAAA;AACxC,GACC,EAAA,CAAC,KAAO,EAAA,gBAAgB,CAAC,CAAA;AAE5B,EAAA,uBACEX,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,GAAM,EAAA,aAAA;AAAA,MACN,UAAa,EAAA,IAAA;AAAA,MACb,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,KAAA;AAAA,MACtC,KAAQ,EAAA,KAAA;AAAA,MACR,QAAW,EAAA,OAAO,GAAQ,KAAA,MAAM,iBAAiB,GAAmB,CAAA;AAAA,MAEpE,QAAA,kBAAAA,GAAC,CAAA,KAAA,EAAA,EAAI,SAAYK,EAAAA,WAAAA,CAAWJ,eAAe,CAAA,0BAAA,EAA4BA,eAAe,CAAA,2BAA2B,CAC7G,EAAA,QAAA,EAAA,UAAA,CAAW,OAAQ,CAAA,GAAA;AAAA,QAAI,CAAE,sBACzBD,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAYK,EAAAA,WAAAA;AAAA,cACVJ,eAAe,CAAA,mBAAA;AAAA,cACfA,eAAe,CAAA;AAAA,aACjB;AAAA,YACA,KAAQ,EAAA,CAAA;AAAA,YACR,EAAK,EAAA,CAAA;AAAA,YAEL,KAAA,EAAQ,SAAS,CAAC,CAAA;AAAA,YAChB,GAAI,WAAA,IAAe,CAAC,KAAA,CAAM,WAAW,CAAI,GAAA;AAAA,cACzC,SAAY,EAAA,OAAO,CAA2B,KAAA,MAAM,kBAAkB,CAAC;AAAA,gBACrE,EAAC;AAAA,YAEP,+BAAC,MACG,EAAA,EAAA,QAAA,EAAA;AAAA,cAAK,CAAA,IAAA,UAAA,CAAO,OAAO,QAAS,CAAA,MAAA,GAC1B,WAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,CAA+C,CAC7E,GAAA,CAAA;AAAA,cAEF,CAAM,KAAA,KAAA,mBAAQD,GAAAA,CAAC,aAAU,EAAA,EAAA,aAAA,EAAY,MAAO,EAAA,SAAA,EAAU,OAAQ,EAAA,CAAA,mBAAKA,GAAAA,CAAAE,UAAA,EAAE;AAAA,aACzE,EAAA;AAAA,WAAA;AAAA,UAZQ;AAAA;AAaV,OAEF,EAAA;AAAA;AAAA,GAEF,EAAA,CAAA;AAEJ;AC/KO,IAAM,mBAAsB,GAAA,CAAC,EAAE,UAAA,GAAa,MAAsC,KAAA;AACvF,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AACtE,EAAA,MAAM,sBAAyB,GAAA;AAAA,IAC7B,SAAS,OAAQ,CAAA,QAAA,CAAS,IAAiC,GAAA,aAAA,mBAAA,EAAG,WAAW,kBAAmB,CAAA,OAAA;AAAA,IAC5F,OAAO,OAAQ,CAAA,QAAA,CAAS,IAAiC,GAAA,aAAA,mBAAA,EAAG,SAAS,kBAAmB,CAAA,KAAA;AAAA,IACxF,MAAM,OAAQ,CAAA,QAAA,CAAS,IAAiC,GAAA,aAAA,mBAAA,EAAG,QAAQ,kBAAmB,CAAA;AAAA,GACxF;AACA,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAkB,EAAA,GAAI,gBAAiB,EAAA;AAE3D,EAAM,MAAA,gBAAA,GAAmBC,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,WAAa,EAAA;AAAA,KACd,CAAA;AAED,IAAA,QAAA,CAAS,cAAe,CAAA,UAAA,CAAW,aAAa,CAAC,CAAC,CAAA;AAClD,IAAS,QAAA,CAAA,kBAAA,CAAmB,KAAK,CAAC,CAAA;AAAA,GACjC,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA,sBAAA,CAAuB,8DACrBF,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA,KAAA;AAAA,MAC3C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,WAAe,IAAA,CAAA;AAAA,MACvB,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MACvD,OAAQ,sBAAuB,CAAA,KAAA;AAAA,MAC/B,MAAO,sBAAuB,CAAA,IAAA;AAAA,MAC9B,QAAU,EAAA;AAAA,QACR,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA,QAAA;AAAA,QACnD,cAAgB,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA;AAAA,OACrD;AAAA,MACA,aAAA,EAAe,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,MAClC,eAAkB,EAAA,IAAA;AAAA,MAClB,yBAA4B,EAAA;AAAA;AAAA,sBAE5BA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACD,UAAA;AAAA,MACA,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,WAAY,CAAA,KAAA;AAAA,MAC3C,YAAe,EAAA,CAAA;AAAA,MACf,OAAQ,WAAe,IAAA,CAAA;AAAA,MACvB,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAe,CAAA;AAAA,MACjE,OAAQ,sBAAuB,CAAA,KAAA;AAAA,MAC/B,MAAO,sBAAuB,CAAA,IAAA;AAAA,MAC9B,aAAA,EAAe,EAAE,KAAA,EAAO,SAAU;AAAA;AAAA,GAGtC,EAAA,CAAA;AAEJ;ACvEA,IAAM,eAAA,GAAkB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,gHAAA,EAAiH,CAAE,EAAA,CAAA;AAClR,IAAO,qBAAQ,GAAA,eAAA;ACDf,IAAM,eAAA,GAAkB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,kJAAA,EAAmJ,CAAE,EAAA,CAAA;AACpT,IAAO,qBAAQ,GAAA,eAAA;ACDf,IAAM,UAAA,GAAa,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,qRAAA,EAAsR,CAAE,EAAA,CAAA;AAClb,IAAO,gBAAQ,GAAA,UAAA;ACDf,IAAM,SAAA,GAAY,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,+SAAA,EAAgT,CAAE,EAAA,CAAA;AAC3c,IAAO,eAAQ,GAAA,SAAA;ACoBR,IAAM,eAAe,MAAM;AAChC,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,WAAW,cAAe,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAClE,EAAA,MAAM,QAAQ,cAAe,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC/D,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,MACE,gBAAiB,EAAA;AAErB,EAAM,MAAA,gBAAA,GAAmBG,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC5D,IAAA,MAAM,iBAAkB,CAAA,EAAE,QAAU,EAAA,KAAA,EAAO,CAAA;AAC3C,IAAA,QAAA,CAAS,WAAY,CAAA,UAAA,CAAW,UAAU,CAAC,CAAC,CAAA;AAAA,GAC3C,EAAA,CAAC,iBAAmB,EAAA,UAAA,EAAY,QAAQ,CAAC,CAAA;AAE5C,EAAA,MAAM,iBAAoB,GAAA,CAAC,SAAyC,EAAA,QAAA,EAA4B,cAAmE,KAAA;AACjK,IAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,MAAA,OAAO,SAAa,IAAA,QAAA;AAAA;AAEtB,IAAA,IAAI,SAAa,IAAA,2BAAA,CAA4B,SAAW,EAAA,cAAc,CAAG,EAAA;AACvE,MAAO,OAAA,SAAA;AAAA;AAET,IAAA,IAAI,QAAY,IAAA,2BAAA,CAA4B,QAAU,EAAA,cAAc,CAAG,EAAA;AACrE,MAAO,OAAA,QAAA;AAAA;AAET,IAAO,OAAA,cAAA;AAAA,GACT;AAEA,EAAM,MAAA,2BAAA,GAA8B,CAAC,KAAA,EAAyB,cAA8C,KAAA;AAC1G,IAAA,OAAO,IAAK,CAAA,GAAA,CAAI,KAAM,CAAA,CAAC,GAAG,KAAM,CAAA,CAAC,CAAC,CAAA,IAAK,KAAK,GAAI,CAAA,cAAA,CAAe,CAAC,CAAA,EAAG,eAAe,CAAC,CAAC,CAC7E,IAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,CAAC,CAAA,EAAG,MAAM,CAAC,CAAC,CAAK,IAAA,IAAA,CAAK,IAAI,cAAe,CAAA,CAAC,CAAG,EAAA,cAAA,CAAe,CAAC,CAAC,CAAA;AAAA,GACtF;AAEA,EAAA,MAAM,eAAkB,GAAA;AAAA,IACtB,SAAS,OAAQ,CAAA,QAAA,CAAS,IAA0B,GAAA,MAAA,YAAA,EAAG,WAAW,eAAgB,CAAA,OAAA;AAAA,IAClF,KAAA,EAAO,mBAAmB,QAAS,CAAA,cAAA,GAC/B,kBAAkB,OAAQ,CAAA,QAAA,CAAS,yBAA6B,EAAA,KAAA,EAAO,gBAAgB,KAAO,EAAA,iBAAA,EAAmB,SAAS,cAAc,CAAA,GACxI,QAAQ,QAAS,CAAA,IAAA,GAAA,MAAA,YAA6B,EAAA,KAAA,IAAS,eAAgB,CAAA,KAAA;AAAA,IAC3E,IAAA,EAAM,QAAQ,QAAS,CAAA,IAAA,GAAA,MAAA,cAA6B,IAAQ,IAAA,iBAAA,EAAmB,QAAS,CAAA,IAAA,IAAQ,eAAgB,CAAA;AAAA,GAClH;AAEA,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA,eAAA,CAAgB,8DACdF,GAAAA;AAAA,IAAC,mBAAA;AAAA,IAAA;AAAA,MACD,UAAa,EAAA,IAAA;AAAA,MACb,YAAe,EAAA,CAAA;AAAA,MACf,KAAQ,EAAA,QAAA;AAAA,MACR,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAK,CAAA;AAAA,MACvD,KAAA,EAAQ,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAK,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,QAAS,CAAA,KAAA;AAAA,MACpF,OAAQ,eAAgB,CAAA,KAAA;AAAA,MACxB,MAAO,eAAgB,CAAA,IAAA;AAAA,MACvB,QAAU,EAAA;AAAA,QACR,aAAA,EAAe,QAAQ,gBAAU,GAAA,qBAAA;AAAA,QACjC,cAAA,EAAgB,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAK,QAAW,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,QAAS,CAAA,QAAA;AAAA,QAC/F,aAAA,EAAe,QAAQ,eAAS,GAAA,qBAAA;AAAA,QAChC,cAAA,EAAgB,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAK,QAAW,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,QAAS,CAAA;AAAA,OACjG;AAAA,MACA,aAAA,EAAe,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,MAClC,eAAkB,EAAA,IAAA;AAAA,MAClB,yBAA4B,EAAA;AAAA;AAAA,sBAE5BA,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACD,UAAa,EAAA,IAAA;AAAA,MACb,YAAe,EAAA,CAAA;AAAA,MACf,KAAQ,EAAA,QAAA;AAAA,MACR,QAAW,EAAA,OAAM,KAAU,KAAA,MAAM,iBAAiB,KAAe,CAAA;AAAA,MACjE,KAAA,EAAQ,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,KAAK,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,QAAS,CAAA,KAAA;AAAA,MACpF,OAAQ,eAAgB,CAAA,KAAA;AAAA,MACxB,MAAO,eAAgB,CAAA,IAAA;AAAA,MACvB,aAAA,EAAe,EAAE,KAAA,EAAO,SAAU;AAAA;AAAA,GAGtC,EAAA,CAAA;AAEJ;AC7EO,IAAM,iBAAA,GAAoB,CAAC,KAA2B,KAAA;AAC3D,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,QAAS,CAAA,YAAA;AACrD,EAAM,MAAA,CAAC,IAAM,EAAA,OAAO,CAAIY,GAAAA,QAAAA;AAAA,IACtB,KAAA,CAAM,YAAY,OAAQ,CAAA,OAAA,CAAQ,KAAK,KAAM,CAAA,SAA8C,CAAE,CAAA,MAAA,IAAU,IAAO,GAAA;AAAA,GAChH;AAEA,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAM,MAAA,mBAAA,GAAsB,WAAY,CAAA,KAAA,CAAM,SAAS,CAAA;AAEvD,EAAA,MAAM,aAAgB,GAAA,OAAA,CAAQ,cAAe,CAAA,KAAA,CAAM,SAAS,CAAK,IAAA,IAAA;AACjE,EAAM,MAAA,KAAA,GAAQ,MAAM,KAAS,IAAA,YAAA;AAC7B,EAAM,MAAA,QAAA,GAAW,IAAM,EAAA,QAAA,IAAY,IAAK,CAAA,QAAA,GAAW,QAC/C,IAAK,CAAA,QAAA,GACL,YAAe,GAAA,KAAA,GACb,YACA,GAAA,KAAA;AACN,EAAM,MAAA,QAAA,GAAW,IAAM,EAAA,QAAA,IAAY,IAAK,CAAA,QAAA,GAAW,QAC/C,IAAK,CAAA,QAAA,GACL,YAAe,GAAA,KAAA,GACb,YACA,GAAA,KAAA;AAEN,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAO,KAAM,CAAA,MAAA,IAAU,OAAQ,CAAA,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,GACvD;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAO,KAAM,CAAA,SAAA;AAAA,GACf;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAO,CAAC,EAAE,WAAA,EAAiB,IAAA,mBAAA,IAAuB,CAAC,KAAM,CAAA,SAAA,CAAA;AAAA,GAC3D;AAEA,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,OAAO,KAAM,CAAA,SAAA;AAAA,GACf;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAO,aAAgB,GAAA,IAAA,CAAK,KAAM,CAAA,KAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAA,IAAK,KAAK,KAAM,CAAA,KAAK,IAAI,IAAK,CAAA,KAAA,CAAM,QAAQ,CAAI,GAAA,KAAA;AAAA,GAChH;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,OAAO,MAAM,aAAiB,IAAA,KAAA;AAAA,GAChC;AAEA,EAAM,MAAA,QAAA,GAAWT,YAAY,MAAM;AACjC,IAAA,OAAO,aACD,GAAA,IAAA,CAAK,KAAO,CAAA,aAAA,GAAgB,MAAO,CAAA,UAAA,GAAc,GAAG,CAAA,GACpD,IAAK,CAAA,KAAA,CAAO,KAAQ,GAAA,MAAA,CAAO,aAAc,GAAG,CAAA;AAAA,GACjD,EAAA,CAAC,aAAe,EAAA,KAAK,CAAC,CAAA;AAEzB,EAAM,MAAA,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAO,QAAW,GAAA,MAAA,CAAO,aAAc,GAAG,CAAA;AAAA,GACxD,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,OAAO,IAAK,CAAA,KAAA,CAAO,QAAW,GAAA,MAAA,CAAO,aAAc,GAAG,CAAA;AAAA,GACxD,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,iBAAA,GAAoBA,WAAY,CAAA,CAAC,UAAuB,KAAA;AAC5D,IAAA,IAAI,UAAU,IAAK,CAAA,KAAA,CAAO,UAAa,GAAA,MAAA,CAAO,aAAc,GAAG,CAAA;AAE/D,IAAA,IAAI,UAAU,QAAU,EAAA;AACtB,MAAU,OAAA,GAAA,QAAA;AAAA;AAGZ,IAAA,IAAI,UAAU,QAAU,EAAA;AACtB,MAAU,OAAA,GAAA,QAAA;AAAA;AAGZ,IAAO,OAAA,OAAA;AAAA,GACN,EAAA,CAAC,QAAU,EAAA,QAAQ,CAAC,CAAA;AAGvB,EAAAQ,UAAU,MAAM;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,SAAY,GAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,MAAM,SAA8C,CAAA,CAAE,MAAU,IAAA,IAAA,GAAO,IAAI,CAAA;AAAA,GACzH,EAAA,CAAC,KAAM,CAAA,SAAA,EAAW,OAAO,CAAC,CAAA;AAE7B,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;;;AC/FA,IAA0B,qBAAA,GAAA,OAAA,CAAA,YAAA,EAAA,CAAA;AAS1B,IAAM,aAAa,CAAC;AAAA,EAClB,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAKM,KAAA;AACJ,EAAM,MAAA,QAAA,GAAW,GAAI,IAAK,CAAA,cAAA,CAAA;AAE1B,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAEhE,EAAM,MAAA,aAAA,GAAgBR,YAAY,MAAM;AACtC,IAAA,IAAI,IAA8B,KAAA,cAAA,cAAA;AAChC,MAAO,OAAA,SAAA,KAAA,KAAA,aAAsC,aAAc,CAAA,wBAAA,GAA2B,aAAc,CAAA,yBAAA;AAAA,eAC3F,IAA4B,KAAA,YAAA,YAAA;AACrC,MAAO,OAAA,SAAA,KAAA,KAAA,aAAsC,aAAc,CAAA,yBAAA,GAA4B,aAAc,CAAA,wBAAA;AAAA;AACvG,GACC,EAAA,CAAC,IAAM,EAAA,SAAS,CAAC,CAAA;AAEpB,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,EAAK,EAAA,QAAA;AAAA,MACL,WAAY,aAAc,CAAA,gBAAA;AAAA,MAC1B,UAAW,CAAC,WAAA;AAAA,MACZ,QAAA,EAAW,cAAc,CAAI,GAAA,EAAA;AAAA,MAE3B,QAAA,EAAA,WAAA,IAAe,gBACf,oBAAAA,GAAC,CAAA,KAAA,EAAA,EAAI,SAAYK,EAAAA,WAAAA,CAAW,aAAc,CAAA,oBAAA,EAAsB,aAAc,EAAC,CAAI,EAAA;AAAA;AAAA,GAGvF,EAAA,CAAA;AAEJ,CAAA;AAEA,IAAM,YAAY,CAAC;AAAA,EACjB,SAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CASM,KAAA;AACJ,EAAM,MAAA,QAAA,GAAWE,OAA8B,IAAI,CAAA;AACnD,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,aAAA,GAAgB,IAA8B,KAAA,YAAA,cAAA,SAAA,KAAA,KAAA,aAAsC,YAAe,GAAA,WAAA;AAEzG,EAAM,MAAA,aAAA,GAAgBJ,YAAY,MAAM;AACtC,IAAA,IAAI,KAAQ,GAAA,EAAA;AACZ,IAAA,IAAI,mCAA8B,SAAqC,KAAA,KAAA,YAAA;AACrE,MAAS,KAAA,IAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAQ,CAAA,YAAA;AAAA,KAC9B,MAAA;AACL,MAAS,KAAA,IAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAQ,CAAA,WAAA;AAAA;AAGrC,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,IAAI,CAAC,WAAa,EAAA;AAChB,QAAA,MAAM,mBAAe,qBAAAU,CAAAA,OAAAA,EAAc,WAAO,MAAO,CAAA,GAAA,CAAI,QAAQ,aAAa,CAAA;AAE1E,QAAS,KAAA,IAAA,CAAA,QAAA,EAAO,YAAa,CAAA,EAAE,MAAQ,EAAA,UAAA,CAAO,OAAO,SAAS,CAAA,CAAE,OAAQ,EAAC,CAAE,CAAA,CAAA;AAAA,iBAClE,WAAa,EAAA;AACtB,QAAA,MAAM,mBAAe,qBAAAA,CAAAA,OAAAA,EAAc,WAAO,MAAO,CAAA,GAAA,CAAI,QAAQ,gBAAgB,CAAA;AAE7E,QAAS,KAAA,IAAA,CAAA,QAAA,EAAO,YAAa,CAAA,EAAE,MAAQ,EAAA,UAAA,CAAO,OAAO,SAAS,CAAA,CAAE,OAAQ,EAAC,CAAE,CAAA,CAAA;AAAA;AAC7E,KACK,MAAA;AACL,MAAA,KAAA,IAAS,CAAO,QAAA,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,QAAQ,YAAa,CAAA,CAAA;AAAA;AAGzD,IAAO,OAAA,KAAA;AAAA,KACN,CAAC,IAAA,EAAM,WAAW,WAAa,EAAA,WAAA,EAAa,SAAS,CAAC,CAAA;AAEzD,EAAM,MAAA,aAAA,GAAgBV,YAAY,MAAM;AACtC,IAAA,IAAI,SAAS,OAAS,EAAA;AACpB,MAAA,QAAA,CAAS,QAAQ,QAAS,EAAA;AAC1B,MAAS,QAAA,CAAA,iBAAA,CAAkB,IAAI,CAAC,CAAA;AAAA;AAClC,GACC,EAAA,CAAC,QAAU,EAAA,IAAI,CAAC,CAAA;AAEnB,EAAM,MAAA,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,IAAI,SAAS,OAAS,EAAA;AACpB,MAAA,QAAA,CAAS,QAAQ,MAAO,EAAA;AACxB,MAAS,QAAA,CAAA,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA;AAChC,GACC,EAAA,CAAC,QAAU,EAAA,IAAI,CAAC,CAAA;AAEnB,EAAAQ,UAAU,MAAM;AACd,IAAS,QAAA,CAAA,iBAAA,CAAkB,IAAI,CAAC,CAAA;AAEhC,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,KACpC;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,IAAI,CAAC,CAAA;AAEnB,EAAAA,UAAU,MAAM;AACd,IAAe,WAAA,IAAA,WAAA,GAAc,WAAY,EAAA,GAAI,aAAc,EAAA;AAAA,KAC1D,CAAC,WAAA,EAAa,WAAa,EAAA,aAAA,EAAe,WAAW,CAAC,CAAA;AAEzD,EACE,uBAAAG,IAAAZ,CAAAA,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,IAAA,KAAA,YAAA,8BACAF,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBAEFA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAK,GAAI,IAAK,CAAA,MAAA,CAAA;AAAA,QACd,KAAA,EAAQ,kCAA6B,CAAI,GAAA,CAAA;AAAA,QACzC,WAAc,EAAA,IAAA;AAAA,QACd,aAAgB,EAAA,CAAA;AAAA,QAChB,GAAM,EAAA,QAAA;AAAA,QACN,WAAA,EAAc,WAAc,GAAA,KAAA,CAAM,KAAQ,GAAA,CAAA;AAAA,QAC1C,SAAU,KAAM,CAAA,QAAA;AAAA,QAChB,SAAU,KAAM,CAAA,QAAA;AAAA,QAChB,UAAa,EAAA,aAAA;AAAA,QACb,QAAW,EAAA,WAAA;AAAA,QACX,UAAW,CAAC,IAAA,KAAiB,IAAS,KAAA,CAAA,IAAK,SAAS,iBAAkB,CAAA;AAAA,UACpE,GAAK,EAAA,IAAA;AAAA,UACL,KAAA,EAAO,KAAM,CAAA,iBAAA,CAAkB,IAAI;AAAA,SACpC,CAAC,CAAA;AAAA,QACF,KAAQ,EAAA,WAAA;AAAA,QAER,QAAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAK,EAAA,IAAA;AAAA,YACL,cAAa,aAAc,EAAA;AAAA,YAC3B,SAAYK,EAAAA,WAAAA,CAAW,aAAc,CAAA,kBAAA,EAAoB,aAAa;AAAA;AAAA;AACvE;AAAA,KACH;AAAA,IACE,uDACAL,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAA,cAAA;AAAA,QACA,WAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA;AAAA;AACF,GAEJ,EAAA,CAAA;AAEF,CAAA;AAEO,IAAM,yBAAyB,CAAC;AAAA,EACrC;AACF,CAEM,KAAA;AACJ,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,eAAe,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,gCAAyB,CAAA;AACpF,EAAA,MAAM,aAAa,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,4BAAuB,CAAA;AAChF,EAAM,MAAA,UAAA,GAAa,kBAAkB,YAAY,CAAA;AACjD,EAAM,MAAA,QAAA,GAAW,kBAAkB,UAAU,CAAA;AAE7C,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,UAAU,CAAA;AAEnE,EAAI,IAAA,CAAC,OAAQ,CAAA,OAAA,CAAQ,IAAM,EAAA;AACzB,IAAA,uBACEA,GAAAA,CAAAE,QAAA,EAAA,EACE,QACF,EAAA,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,MAAMa,cAAa,kBAAmC,CAAA;AAAA,MACpD,YAAA,EAAA,MAAA;AAAA,MACA,QAAU,EAAA,cAAA;AAAA,MACV,IAAA,EAAM,QAAQ,OAAQ,CAAA,IAAA;AAAA,MACtB,aAAA,EAAA,MAAA;AAAA,KACD,CAAA;AAED,IAAM,MAAA,UAAA,GAAa,UAAcA,IAAAA,WAAAA,CAAW,UAAU,CAAA,IAAA,MAAA;AAEtD,IACE,uBAAAf,IAAAE,QAAA,EAAA,EACA,0BAAAY,IAAC,CAAA,UAAA,EAAA,EAAW,WAAU,YAEjB,EAAA,QAAA,EAAA;AAAA,MAAA,CAAA,UAAA,KAAA,MAAA,eAAsC,uDACpCd,GAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACF,SAAA,EAAY,WAAW,UAAW,EAAA;AAAA,UAClC,IAAA,EAAA,cAAA;AAAA,UACA,KAAO,EAAA;AAAA,YACL,KAAA,EAAO,WAAW,QAAS,EAAA;AAAA,YAC3B,QAAA,EAAU,WAAW,WAAY,EAAA;AAAA,YACjC,QAAA,EAAU,WAAW,WAAY,EAAA;AAAA,YACjC,mBAAmB,UAAW,CAAA;AAAA,WAChC;AAAA,UACA,WAAA,EAAc,WAAW,WAAY,EAAA;AAAA,UACrC,WAAA,EAAc,WAAW,WAAY,EAAA;AAAA,UACrC,WAAA,EAAc,WAAW,WAAY,EAAA;AAAA,UACrC,WAAA,EAAc,WAAW,WAAY,EAAA;AAAA,UACrC,gBAAA,EAAmB,WAAW,gBAAiB;AAAA;AAAA,OACjD;AAAA,sBAGFA,GAAC,CAAA,KAAA,EAAA,EAAM,IAAG,YAAa,EAAA,KAAA,EAAQ,GAC3B,QACJ,EAAA,CAAA;AAAA,MAGG,CAAA,UAAA,KAAA,MAAA,eAAsC,mDACpCA,GAAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACF,SAAA,EAAY,SAAS,UAAW,EAAA;AAAA,UAChC,IAAA,EAAA,YAAA;AAAA,UACA,KAAO,EAAA;AAAA,YACL,KAAA,EAAO,SAAS,QAAS,EAAA;AAAA,YACzB,QAAA,EAAU,SAAS,WAAY,EAAA;AAAA,YAC/B,QAAA,EAAU,SAAS,WAAY,EAAA;AAAA,YAC/B,mBAAmB,QAAS,CAAA;AAAA,WAC9B;AAAA,UACA,WAAA,EAAc,SAAS,WAAY,EAAA;AAAA,UACnC,WAAA,EAAc,SAAS,WAAY,EAAA;AAAA,UACnC,WAAA,EAAc,SAAS,WAAY,EAAA;AAAA,UACnC,WAAA,EAAc,SAAS,WAAY,EAAA;AAAA,UACnC,gBAAA,EAAmB,SAAS,gBAAiB;AAAA;AAAA;AAC/C,KAAA,EAEJ,CACF,EAAA,CAAA;AAAA;AAGJ,CAAA;ACzQA,IAAM,WAAA,GAAc,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,gTAAA,EAAiT,CAAE,EAAA,CAAA;AAC9c,IAAO,iBAAQ,GAAA,WAAA;ACwBR,IAAM,qBAAqB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACC,GAAG;AACL,CAA+B,KAAA;AAC7B,EAAA,MAAM,UAAU,cAAe,EAAA;AAE/B,EAAM,MAAA,UAAA,GAAaO,OAA0B,IAAI,CAAA;AACjD,EAAoB,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,WAAW;AACpE,EAAmB,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,UAAU;AAElE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,2BAA2B,MAAM;AACrC,IAAA,IAAI,SAAY,GAAA,EAAA;AAEhB,IAAA,QAAO,UAAY;AAAA,MACjB,KAAA,QAAA;AACE,QAAA,SAAA,GAAYD,eAAe,CAAA,aAAA;AAC3B,QAAA;AAAA,MACF,KAAA,WAAA;AACE,QAAA,SAAA,GAAYA,eAAe,CAAA,gBAAA;AAC3B,QAAA;AAGA;AAGJ,IAAO,OAAA,SAAA;AAAA,GACT;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAS,QAAA,CAAA,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,GAC9B;AAEA,EAAM,MAAA,eAAA,GAAkB,CAAC,KAA4B,KAAA;AAGnD,IAAI,IAAA,mBAAA,CAAoB,KAAM,CAAA,MAAM,CAAG,EAAA;AACrC,MAAS,QAAA,CAAA,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA;AAC9B,GACF;AAEA,EAAM,MAAA,SAAA,GAAY,CAAC,KAA+B,KAAA;AAEhD,IAAI,IAAA,UAAA,CAAW,WAAW,eAAgB,CAAA,UAAA,CAAW,OAAO,CAAK,IAAA,KAAA,CAAM,SAAS,QAAU,EAAA;AACxF,MAAA,UAAA,CAAW,QAAQ,IAAK,EAAA;AAAA;AAC1B,GACF;AAEA,EAAA,uBACEN,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,GAAM,EAAA,UAAA;AAAA,MACN,WAAYK,WAAWC,CAAAA,eAAAA,CAAe,MAAM,wBAAyB,EAAA,EAAG,MAAM,SAAS,CAAA;AAAA,MACvF,OAAA,EAAU,MAAM,OAAW,IAAA,kBAAA;AAAA,MAC3B,SAAY,EAAA,SAAA;AAAA,MACZ,OAAU,EAAA,eAAA;AAAA,MACV,WAAY,YAAe,GAAA;AAAA,QACzB,cAAgB,EAAA;AAAA,UACd,KAAA,EAAO,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,YAAA;AAAA,UAC5B,UAAA,EAAY,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,SACnC;AAAA,QACA,OAAS,EAAA;AAAA,UACP,WAAWA,eAAe,CAAA,OAAA;AAAA,UAC1B,SAAA;AAAA,UACA,MAAQ,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,aAAiB,IAAA;AAAA,SAChD;AAAA,QACA,KAAO,EAAA;AAAA,OACL,GAAA,MAAA;AAAA,MACF,GAAG,MAAA,CAAO,WAAY,CAAA,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,MAAO,CAAA,CAAC,CAAC,GAAG,CAAM,KAAA,GAAA,KAAQ,WAAW,CAAC,CAAA;AAAA,MAElF;AAAA;AAAA,GACJ;AAEJ;ACxEO,IAAM,uBAAuB,CAAC;AAAA,EACnC,EAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,eAAA,GAAkB,CAAC,KAAmB,KAAA;AAC1C,IAAA,QAAA,CAAS,WAAY,CAAA;AAAA,MACnB,GAAK,EAAA,EAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAAA,GACJ;AAEA,EAAI,IAAA,KAAA,CAAM,MAAS,GAAA,CAAA,IAAM,OAAU,EAAA;AACjC,IAAA,uBACEN,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,UAAA;AAAA,QACA,aAAc,EAAA,MAAA;AAAA,QACd,WAAY,kBAAmB,CAAA,YAAA;AAAA,QAC/B,YAAA,EAAe,CAAC,SAAS,CAAA;AAAA,QACzB,KAAA;AAAA,QACA,SAAW,EAAA;AAAA,UACT,WAAa,EAAA;AAAA,YACX,YAAc,EAAA,CAAC,GAAiB,KAAA,eAAA,CAAgB,GAAG;AAAA,WACrD;AAAA,UACA,OAAS,EAAA;AAAA,YACP,SAAW,EAAA,QAAA;AAAA,YACX,WAAW,kBAAmB,CAAA;AAAA,WAChC;AAAA,UACA,wBACEA,GAAAA;AAAA,YAAC,kBAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAY,SAAY,GAAA,SAAA,GAAY,kBAAmB,CAAA,YAAA;AAAA,cACvD,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA;AAAA,cAC/C,SAAU,EAAA,QAAA;AAAA,cACV,YAAe,EAAA,UAAA,CAAO,MAAO,CAAA,YAAA,CAAa,MAAO,CAAA,OAAA;AAAA,cACjD,UAAA,EAAA,QAAA;AAAA,cAEA,0BAAAA,GAAC,CAAA,iBAAA,EAAA,EAAS,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA;AACjD;AAEJ;AAAA,KAEF,EAAA,CAAA;AAAA,GAEG,MAAA;AACL,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAA,uBACEA,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAY,SAAY,GAAA,SAAA,GAAY,kBAAmB,CAAA,UAAA;AAAA,UACvD,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,YAAA,CAAa,IAAK,CAAA,OAAA;AAAA,UAC7C,SAAU,EAAA,QAAA;AAAA,UACV,YAAe,EAAA,UAAA,CAAO,MAAO,CAAA,YAAA,CAAa,IAAK,CAAA,OAAA;AAAA,UAC/C,UAAA,EAAA,QAAA;AAAA,UACA,SAAU,MAAM;AAAE,YAAA,QAAA,CAAS,iBAAiB,CAAA;AAAA,WAAE;AAAA,UAC9C,mBAAsB,EAAA,IAAA;AAAA,UAEtB,0BAAAA,GAAC,CAAA,iBAAA,EAAA,EAAS,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,OAEnD,EAAA,CAAA;AAAA,KAEK,MAAA;AACL,MAAO,uBAAAA,GAAAE,CAAAA,QAAAA,EAAA,EAAE,CAAA;AAAA;AACX;AAEJ;AClFO,IAAM,gCAAgC,CAAC;AAAA,EAC5C,EAAA;AAAA,EACA,KAAA;AAAA,EACA,sBAAA;AAAA,EACA,qBAAA;AAAA,EACA,mBAAA;AAAA,EACA,GAAG;AACL,CAA0C,KAAA;AACxC,EAAM,MAAA,GAAA,GAAMK,OAA8B,IAAI,CAAA;AAC9C,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,UAAU,CAAA;AAEnE,EAAA,uBACEP,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,uBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAW,EAAA;AAAA,QACT,sBAAOA,GAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACN,EAAA;AAAA,YACA,UAAa,EAAA,GAAA;AAAA,YACb,SAAU,mBAAuB,IAAA,IAAA;AAAA,YACjC,SAAY,EAAA,qBAAA;AAAA,YACZ,cAAiB,EAAA,sBAAA;AAAA,YACjB,OAAQ;AAAC;AAAA;AACb,OAAI;AAAA,MACF,GAAG;AAAA;AAAA,GAEP,EAAA,CAAA;AAEJ;AC7BO,IAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,EAAE,gBAAA,EAAkB,aAAc,EAAA,GAAI,iBAAkB,EAAA;AAC9D,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAM,MAAA,EAAE,oBAAqB,EAAA,GAAI,UAAW,EAAA;AAE5C,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,WAAW,CAAA;AACzE,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,WAAW,CAAA;AACpE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AAElE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,WAAW,MAAM;AACrB,IAAS,QAAA,CAAA,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,GAC5B;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAS,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,GAC7B;AAEA,EAAM,MAAA,eAAA,GAAkBG,YAAY,MAAM;AACxC,IAAM,MAAA,UAAA,GAAa,QAAO,aAAgB,GAAA,gBAAA;AAC1C,IAAA,MAAM,eAA+C,EAAC;AAEtD,IAAA,IAAI,wBAAwB,MAAO,CAAA,IAAA,CAAK,oBAAoB,CAAA,CAAE,SAAS,CAAG,EAAA;AACxE,MAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC1B,QAAI,IAAA,oBAAA,CAAqB,GAAG,CAAG,EAAA;AAC7B,UAAA,YAAA,CAAa,IAAK,CAAA;AAAA,YAChB,OAAA,EAAS,oBAAqB,CAAA,GAAG,CAAE,CAAA,OAAA;AAAA,YACnC,MAAA,EAAQ,oBAAqB,CAAA,GAAG,CAAE,CAAA,MAAA;AAAA,YAClC;AAAA,WACD,CAAA;AAAA,SACI,MAAA;AACL,UAAQ,OAAA,CAAA,IAAA,CAAK,CAAgB,YAAA,EAAA,GAAI,CAAkE,gEAAA,CAAA,CAAA;AAAA;AACrG,OACD,CAAA;AAAA;AAGH,IAAO,OAAA,YAAA;AAAA,KACN,CAAC,KAAA,EAAO,aAAe,EAAA,gBAAA,EAAkB,oBAAoB,CAAC,CAAA;AAEjE,EAAA,uBACEH,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAY,kBAAAA,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,WAAY,kBAAmB,CAAA,MAAA;AAAA,MAC/B,EAAG,EAAA,SAAA;AAAA,MACH,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,KAAA;AAAA,MACtC,YAAe,EAAA,QAAA;AAAA,MACf,YAAe,EAAA,WAAA;AAAA,MAEf,QAAA,EAAA;AAAA,wBAAAd,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,KAAQ,EAAA,WAAA,IAAe,UAAO,CAAA,MAAA,CAAO,IAAI,MAAO,CAAA,mBAAA;AAAA,YAChD,YAAe,EAAA,IAAA;AAAA,YACf,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA;AAAA;AAAA,SACxC;AAAA,wBAEAA,GAAAA;AAAA,UAAC,6BAAA;AAAA,UAAA;AAAA,YACC,EAAG,EAAA,4BAAA;AAAA,YACH,OAAQ,eAAgB,EAAA;AAAA,YACxB,KAAO,EAAA,EAAE,GAAG,OAAA,CAAQ,OAAS,EAAA,YAAA,EAAc,KAAQ,GAAA,OAAA,CAAQ,OAAQ,CAAA,QAAA,GAAW,OAAQ,CAAA,OAAA,CAAQ,WAAY,EAAA;AAAA,YAC1G,WAAY,kBAAmB,CAAA,cAAA;AAAA,YAC/B,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,OAAA;AAAA,YACtC,sBAAA,EAA0B,eAAe,CAAC,UAAA;AAAA,YAC1C,mBAAA,EAAuB,CAAC,WAAe,IAAA;AAAA;AAAA;AACzC;AAAA;AAAA,GAEF,EAAA,CAAA;AAEJ,CAAA;AC7DO,IAAM,4BAA4B,CAAC;AAAA,EACxC,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAsC,KAAA;AACpC,EAAA,MAAM,UAAU,cAAe,EAAA;AAE/B,EAAM,MAAA,SAAA,GAAYO,OAA0B,IAAI,CAAA;AAChD,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAEhE,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAC9D,EAAM,MAAA,SAAA,GAAY,YAAY,QAAQ,CAAA;AAEtC,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIK,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,OAAO,aAAa,CAAC,QAAA;AAAA,GACvB;AAEA,EAAA,MAAM,KACJ,GAAA,SAAA,KAAc,OAAW,IAAA,CAAC,SAC1B,SAAc,KAAA,MAAA,IAAU,KAEtB,GAAA,UAAA,CAAO,MAAO,CAAA,UAAA,CAAW,SACzB,GAAA,UAAA,CAAO,OAAO,UAAW,CAAA,UAAA;AAE7B,EAAA,MAAM,2BAA2B,MAAM;AACrC,IAAA,IAAII,UAAY,GAAA,EAAA;AAChB,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,sBAAA,EAA0B,EAAA;AAC3C,MAAAA,aAAYC,YAAY,CAAA,cAAA;AAAA;AAE1B,IAAOD,OAAAA,UAAAA;AAAA,GACT;AAEA,EAAA,MAAM,+BAA+B,MAAM;AACzC,IAAA,IAAIA,UAAY,GAAA,EAAA;AAChB,IAAA,IAAI,WAAa,EAAA;AACf,MAAAA,aAAYC,YAAY,CAAA,aAAA;AAAA;AAE1B,IAAOD,OAAAA,UAAAA;AAAA,GACT;AAEA,EAAAL,UAAU,MAAM;AACd,IAAK,IAAA,CAAA,UAAA,IAAe,CAAC,SAAa,IAAA,CAAC,eAAgB,eAAgB,CAAA,SAAA,CAAU,OAAO,CAAG,EAAA;AACrF,MAAA,SAAA,CAAU,QAAS,IAAK,EAAA;AAAA;AAC1B,GACD,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,CAAC,KAA+B,KAAA;AAChD,IAAA,IAAI,gBAAgB,SAAU,CAAA,OAAO,CAAK,IAAA,KAAA,CAAM,SAAS,QAAU,EAAA;AACjE,MAAA,SAAA,CAAU,QAAS,IAAK,EAAA;AAAA;AAC1B,GACF;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,CAAA,EAAe,EAAgC,KAAA;AACpE,IAAS,QAAA,CAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AACzB,IAAA,EAAA,CAAG,CAAC,CAAA;AAAA,GACN;AAEA,EAAA,uBACEX,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,GAAO,EAAA,SAAA;AAAA,MACP,YAAa,EAAA,KAAA;AAAA,MACb,SAAU,CAAC,CAAA,KAAkB,OAAW,IAAA,aAAA,CAAc,GAAG,OAAO,CAAA;AAAA,MAChE,aAAgB,EAAA,CAACkB,WAAwB,KAAA,aAAA,CAAcA,WAAU,CAAA;AAAA,MACjE,SAAY,EAAA,SAAA;AAAA,MACZ,WAAYb,WAAW,CAAA,SAAA,EAAW,4BAA6B,EAAA,EAAG,0BAA0B,CAAA;AAAA,MAC5F,UAAA;AAAA,MACA,mBAAsB,EAAA,IAAA;AAAA,MACpB,GAAG,KAAA;AAAA,MACL,SAAY,EAAA;AAAA,QACV,cAAgB,EAAA;AAAA,UACd,KAAA,EAAO,OAAQ,CAAA,OAAA,CAAQ,KAAM,CAAA,YAAA;AAAA,UAC7B,UAAA,EAAY,OAAQ,CAAA,OAAA,CAAQ,KAAM,CAAA;AAAA,SACpC;AAAA,QACA,OAAS,EAAA;AAAA,UACP,SAAA,EAAW,SAAc,KAAA,MAAA,GAAS,OAAU,GAAA,MAAA;AAAA,UAC5C,WAAWC,eAAe,CAAA;AAAA,SAC5B;AAAA,QACA;AAAA;AACF;AAAA,GAEF,EAAA,CAAA;AAEJ,CAAA;AC7GA,IAAAa,sBAA0B,GAAA,OAAA,CAAA,YAAA,EAAA,CAAA;AAWnB,IAAM,4BAA4B,MAAM;AAC7C,EAAA,MAAM,mBAAe,sBAAAN,CAAAA,OAAAA,EAAc,WAAO,MAAO,CAAA,GAAA,CAAI,YAAY,EAAE,CAAA;AACnE,EAAA,MAAM,WAAyC,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,WAAW,CAAA;AAEpG,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,SAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,EAAE,CAAA;AAE7C,EAAAD,UAAU,MAAM;AACd,IAAI,IAAA,WAAA,CAAY,cAAkB,IAAA,WAAA,CAAY,gBAAkB,EAAA;AAC9D,MAAA,UAAA,CAAW,YAAY,gBAAiB,CAAA,MAAA,KAAW,IAAI,CAAG,EAAA,WAAA,CAAY,iBAAiB,CAAC,CAAC,CAAI,MAAA,EAAA,WAAA,CAAY,iBAAiB,CAAC,CAAC,KAAK,CAAG,EAAA,WAAA,CAAY,gBAAgB,CAAE,CAAA,CAAA;AAClK,MAAa,YAAA,CAAA,CAAA,EAAG,WAAY,CAAA,cAAc,CAAE,CAAA,CAAA;AAAA,KACnC,MAAA,IAAA,WAAA,CAAY,gBAAqB,KAAA,MAAA,IAAa,YAAY,kBAAoB,EAAA;AACvF,MAAA,UAAA,CAAW,GAAG,IAAK,CAAA,KAAA,CAAM,YAAY,gBAAmB,GAAA,GAAG,CAAC,CAAG,CAAA,CAAA,CAAA;AAC/D,MAAA,YAAA,CAAa,YAAY,kBAAkB,CAAA;AAAA,KAClC,MAAA,IAAA,WAAA,CAAY,mBAAwB,KAAA,MAAA,IAAa,YAAY,cAAgB,EAAA;AACtF,MAAA,UAAA,CAAW,GAAG,IAAK,CAAA,KAAA,CAAM,YAAY,mBAAsB,GAAA,GAAG,CAAC,CAAG,CAAA,CAAA,CAAA;AAClE,MAAA,YAAA,CAAa,YAAY,cAAc,CAAA;AAAA,KAClC,MAAA;AACL,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA;AACjB,GACF,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBACEX,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,6BACXF,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACF,IAAK,iBAAkB,CAAA,OAAA;AAAA,MACvB,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,WAAY,CAAA,OAAA;AAAA,MAEzC,QAAa,EAAA,YAAA,CAAA,EAAE,OAAkB,EAAA,SAAA,EAAsB;AAAA;AAAA,GAE3D,EAAA,CAAA;AAEJ,CAAA;AC5CO,IAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,WAAW,MAAM;AACrB,IAAS,QAAA,CAAA,WAAA,CAAY,IAAI,CAAC,CAAA;AAAA,GAC5B;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAS,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,GAC7B;AAEA,EAAA,uBACEA,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,YAAA;AAAA,MACH,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,KAAA;AAAA,MACtC,YAAe,EAAA,QAAA;AAAA,MACf,YAAe,EAAA,WAAA;AAAA,MAEf,QAAA,kBAAAA,IAAC,yBAA0B,EAAA,EAAA;AAAA;AAAA,GAE7B,EAAA,CAAA;AAEJ,CAAA;;;ACqEA,IAAqB,eAAA,GAAA,OAAA,CAAA,gBAAA,EAAA,CAAA;ACvGrB,IAAM,aAAA,GAAgB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,kIAAA,EAAmI,CAAE,EAAA,CAAA;AAClS,IAAO,kBAAQ,GAAA,aAAA;ACDf,IAAM,iBAAA,GAAoB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,kIAAA,EAAmI,CAAE,EAAA,CAAA;AACtS,IAAO,uBAAQ,GAAA,iBAAA;ACUR,IAAM,2BAA2B,CAAC;AAAA,EACvC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAwB,KAAA;AACtB,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,gBAAgB,CAAA;AAE9E,EAAiB,cAAA,GAAA,cAAA,GAAiB,cAAiB,GAAA,OAAA,CAAQ,SAAU,CAAA,cAAA,IAAA,QAAA;AACrE,EAAA,MAAA,GAAS,MAAS,GAAA,MAAA,GAAS,OAAQ,CAAA,SAAA,CAAU,MAAU,IAAA,KAAA;AAEvD,EAAM,MAAA,WAAA,GAAc,cAAc,OAAO,CAAA;AAEzC,EAAA,IAAI,WAAa,EAAA;AACf,IAAA,IAAI,yBAAyB,EAAC;AAE9B,IAAW,KAAA,MAAA,IAAA,IAAQ,YAAY,SAAW,EAAA;AACxC,MAAI,IAAA,WAAA,CAAY,SAAU,CAAA,IAAI,CAAG,EAAA;AAC/B,QAAA,IAAI,SAAS,aAAe,EAAA;AAC1B,UAAuB,sBAAA,CAAA,IAAA,CAAK,gBAAiB,CAAA,cAAc,CAAC,CAAA;AAAA,SACvD,MAAA;AACL,UAAM,MAAA,OAAA,GAAU,SAAS,IAAI,CAAA;AAC7B,UAAuB,sBAAA,CAAA,IAAA,CAAK,OAAQ,CAAA,cAAgD,CAAC,CAAA;AAAA;AACvF;AACF;AAGF,IAAA,IAAI,YAAY,IAAM,EAAA;AACpB,MAAuB,sBAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAG9C,IAAI,IAAA,sBAAA,CAAuB,SAAS,CAAG,EAAA;AACrC,MAAM,MAAA,eAAA,GAAkB,sBAAuB,CAAA,IAAA,CAAK,MAAM,CAAA;AAE1D,MAAA,uBACEA,GAAAA,CAAC,QAAS,EAAA,EAAA,SAAA,EAA0B,QAAiB,EAAA,eAAA,EAAA,CAAA;AAAA,KAElD,MAAA;AACL,MACE,uBAAAA,GAAAE,CAAAA,QAAAA,EAAA,EAAE,CAAA;AAAA;AAEN;AAGF,EACE,uBAAAF,GAAAE,CAAAA,QAAAA,EAAA,EAAE,CAAA;AAEN,CAAA;AC7CO,IAAM,2BAA2B,CAAC;AAAA,EACvC,EAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAW,GAAA,MAAA;AAAA,EACX,GAAG;AACL,CAAqC,KAAA;AACnC,EAAM,MAAA,eAAA,GAAkB,GAAG,EAAE,CAAA,MAAA,CAAA;AAE7B,EAAA,uBACEF,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAY,kBAAAA,IAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAYM,kBAAmB,CAAA,QAAA;AAAA,MAC/B,iBAAkB,EAAA,eAAA;AAAA,MAChB,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,OAAA,oBAAWpB,GAAC,CAAA,OAAA,EAAA,EAAQ,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA,CAAA;AAAA,wBAC3DA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,WAAYoB,kBAAmB,CAAA,aAAA;AAAA,YAC/B,IAAK,EAAA,OAAA;AAAA,YACL,EAAK,EAAA,eAAA;AAAA,YAEH,QAAA,EAAA;AAAA;AAAA,SACJ;AAAA,QACE,4BAAYpB,GAAAA;AAAA,UAAC,wBAAA;AAAA,UAAA;AAAA,YACb,WAAYoB,kBAAmB,CAAA,mBAAA;AAAA,YAC/B,OAAU,EAAA;AAAA;AAAA;AACZ;AAAA;AAAA,GAEF,EAAA,CAAA;AAEJ;ACvBO,IAAM,yBAA4B,GAAA,CAAC,EAAE,OAAA,EAA0C,KAAA;AAIpF,EAAA,MAAM,UAAU,cAAe,EAAA;AAE/B,EAAA,MAAM,WAAW,cAAe,EAAA;AAChC,EAAM,MAAA,QAAA,GAAWjB,WAAY,CAAA,CAAC,YAA0B,KAAA;AACtD,IAAS,QAAA,CAAA,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,GACtC,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,EAAA,GAAK,cAAc,QAAQ,CAAA;AAEjC,EAAM,MAAA,KAAA,GAAQ,GAAG,YAAe,GAAA,UAAA,CAAO,OAAO,UAAW,CAAA,KAAA,GAAQ,UAAO,CAAA,MAAA,CAAO,UAAW,CAAA,OAAA;AAC1F,EAAM,MAAA,IAAA,GAAO,EAAG,CAAA,YAAA,GAAe,uBAAiB,GAAA,kBAAA;AAEhD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,EAAA,CAAG,gBAAiB,EAAA;AAEpB,IAAS,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,GAE7B;AAMA,EAAA,IAAI,CAAC,QAAA,CAAS,iBAAqB,IAAA,QAAA,IAAmB,OAAA,IAAA;AAEtD,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACVF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAU,EAAA,IAAA;AAAA,MACV,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,YAAA,kBAA+B,CAAA,QAAA;AAAA,MAC1D,UAAW,EAAG,CAAA,gBAAA;AAAA,MACd,EAAA,EAAA,YAAA;AAAA;AAAA,sBAEFA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,WAAYM,eAAe,CAAA,UAAA;AAAA,MAC3B,UAAa,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,YAAA,kBAA+B,CAAA,UAAA;AAAA,MAC5D,YAAa,EAAA,KAAA;AAAA,MACb,SAAU,EAAA,QAAA;AAAA,MACV,YAAA,EAAe,UAAO,CAAA,MAAA,CAAO,UAAW,CAAA,OAAA;AAAA,MACxC,OAAU,EAAA,WAAA;AAAA,MAEV,0BAAAN,GAAC,CAAA,IAAA,EAAA,EAAK,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAGjD,EAAA,CAAA;AAEJ;AC5EA,IAAM,UAAA,GAAa,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,2UAAA,EAA4U,CAAE,EAAA,CAAA;AACxe,IAAO,gBAAQ,GAAA,UAAA;ACiBR,IAAM,6BAAgC,GAAA,CAAC,EAAE,OAAA,EAA0C,KAAA;AACxF,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,2CAAkC,CAAA;AAC5F,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,aAAa,CAAA;AAC7E,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,OAAA,GAAU,CAAC,KAAmB,KAAA;AAClC,IAAA,QAAA,CAAS,aAAc,CAAA;AAAA,MACrB,GAAA,EAAA,gBAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAAA,GACJ;AAGA,EAAI,IAAA,CAAC,eAAsB,OAAA,IAAA;AAE3B,EAAA,uBACEA,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACXF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAQ,UAAO,CAAA,MAAA,CAAO,cAAe,CAAA,OAAA;AAAA,MACpC,OAAU,EAAA,gBAAA;AAAA,MACV,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,gBAAA,sBAAmC,CAAA,QAAA;AAAA,MAC9D,EAAA,EAAA,gBAAA;AAAA,MACA,QAAW,EAAA,MAAM,OAAQ,CAAA,CAAC,aAAa,MAAM;AAAA;AAAA,sBAE/CA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAa,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,gBAAA,sBAAmC,CAAA,UAAA;AAAA,MAChE,YAAA,EAAa,UAAO,CAAA,MAAA,CAAO,cAAe,CAAA,OAAA;AAAA,MAC1C,SAAU,EAAA,QAAA;AAAA,MACV,YAAA,EAAe,UAAO,CAAA,MAAA,CAAO,cAAe,CAAA,OAAA;AAAA,MAC5C,OAAU,EAAA,MAAM,OAAQ,CAAA,CAAC,aAAa,MAAM,CAAA;AAAA,MAE5C,0BAAAA,GAAC,CAAA,gBAAA,EAAA,EAAW,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAGvD,EAAA,CAAA;AAEJ;ACxDA,IAAM,cAAA,GAAiB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,wLAAA,EAAyL,CAAE,EAAA,CAAA;AACzV,IAAO,qBAAQ,GAAA,cAAA;ACDf,IAAM,aAAA,GAAgB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,wLAAA,EAAyL,CAAE,EAAA,CAAA;AACxV,IAAO,oBAAQ,GAAA,aAAA;ACsBR,IAAM,iBAAoB,GAAA,CAAC,EAAE,OAAA,EAAS,eAAgD,KAAA;AAC3F,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC7D,EAAA,MAAM,KAAQ,GAAA,SAAA,KAAA,KAAA;AACd,EAAM,MAAA,SAAA,GAAY,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,WAAc,GAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,UAAA;AAE1F,EAAM,MAAA,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,WAAA,CAAY,aAAa,CAAA,KAAA,cAAA;AAEpD,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,WAAA,GAAcG,YAAY,MAAM;AACpC,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,QAAA,CAAS,UAAW,CAAA;AAAA,QAClB,GAAK,EAAA,aAAA;AAAA,QACL,UAAA,EAAA,cAAA;AAAA,OACD,CAAC,CAAA;AAAA;AACJ,GACC,EAAA,CAAC,QAAU,EAAA,aAAa,CAAC,CAAA;AAE5B,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACVF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,OAAQ,SAAU,CAAA,OAAA;AAAA,MAClB,OAAA,EAAU,QAAQ,oBAAc,GAAA,qBAAA;AAAA,MAChC,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,cAAA,aAA0B,CAAA,QAAA;AAAA,MACrD,QAAW,EAAA,WAAA;AAAA,MACX,EAAA,EAAK,CAAwB,EAAA,cAAA,aAAA,CAAA,EAAK,aAAc,CAAA,CAAA;AAAA,MAChD;AAAA;AAAA,sBAEFA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,WAAYM,eAAe,CAAA,YAAA;AAAA,MAC3B,cAAa,SAAU,CAAA,OAAA;AAAA,MACvB,SAAU,EAAA,QAAA;AAAA,MACV,cAAe,SAAU,CAAA,OAAA;AAAA,MACzB,OAAU,EAAA,WAAA;AAAA,MACV,UAAA;AAAA,MAEE,QACE,EAAA,KAAA,mBAAAN,GAAC,CAAA,oBAAA,EAAA,EAAY,eAAY,MAAO,EAAA,SAAA,EAAU,OAAQ,EAAA,CAAA,mBAClDA,GAAC,CAAA,qBAAA,EAAA,EAAW,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAI3D,EAAA,CAAA;AAEJ,CAAA;AChDO,IAAM,eAAkB,GAAA,CAAC,EAAE,OAAA,EAAS,eAAgD,KAAA;AACzF,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC7D,EAAA,MAAM,KAAQ,GAAA,SAAA,KAAA,KAAA;AACd,EAAM,MAAA,SAAA,GAAY,KAAQ,GAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,UAAa,GAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,WAAA;AAEzF,EAAM,MAAA,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,WAAA,CAAY,aAAa,CAAA,KAAA,YAAA;AAEpD,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,WAAA,GAAcG,YAAY,MAAM;AACpC,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,QAAA,CAAS,UAAW,CAAA;AAAA,QAClB,GAAK,EAAA,aAAA;AAAA,QACL,UAAA,EAAA,YAAA;AAAA,OACD,CAAC,CAAA;AAAA;AACJ,GACC,EAAA,CAAC,QAAU,EAAA,aAAa,CAAC,CAAA;AAE5B,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACVF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,OAAQ,SAAU,CAAA,OAAA;AAAA,MAClB,OAAA,EAAU,QAAQ,qBAAa,GAAA,oBAAA;AAAA,MAC/B,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,YAAA,WAAwB,CAAA,QAAA;AAAA,MACnD,QAAW,EAAA,WAAA;AAAA,MACX,EAAA,EAAK,CAAsB,EAAA,YAAA,WAAA,CAAA,EAAK,aAAc,CAAA,CAAA;AAAA,MAC9C;AAAA;AAAA,sBAEFA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,WAAYM,eAAe,CAAA,YAAA;AAAA,MAC3B,cAAa,SAAU,CAAA,OAAA;AAAA,MACvB,SAAU,EAAA,QAAA;AAAA,MACV,cAAe,SAAU,CAAA,OAAA;AAAA,MACzB,OAAU,EAAA,WAAA;AAAA,MACV,UAAA;AAAA,MAEE,QACE,EAAA,KAAA,mBAAAN,GAAC,CAAA,oBAAA,EAAA,EAAY,eAAY,MAAO,EAAA,SAAA,EAAU,OAAQ,EAAA,CAAA,mBAClDA,GAAC,CAAA,qBAAA,EAAA,EAAW,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAI3D,EAAA,CAAA;AAEJ,CAAA;ACvEA,IAAM,QAAA,GAAW,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,2QAAA,EAA4Q,CAAE,EAAA,CAAA;AACta,IAAO,aAAQ,GAAA,QAAA;ACqBR,IAAM,4BAA+B,GAAA,CAAC,EAAE,OAAA,EAAS,eAAgD,KAAA;AACtG,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,WAAW,UAAU,CAAA;AACrC,EAAM,MAAA,UAAA,GAAa,CAAC,OAAQ,CAAA,QAAA,CAAS,aAAa,CAAK,IAAA,OAAA,CAAQ,YAAY,aAAa,CAAA,KAAA,kBAAA;AAExF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,WAAA,GAAcG,YAAY,MAAM;AACpC,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,QAAA,CAAS,UAAW,CAAA;AAAA,QAClB,GAAK,EAAA,aAAA;AAAA,QACL,UAAA,EAAA,kBAAA;AAAA,OACD,CAAC,CAAA;AAAA;AACJ,GACC,EAAA,CAAC,QAAU,EAAA,aAAa,CAAC,CAAA;AAE5B,EAAA,uBACEH,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACVF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,OAAQ,CAAA,OAAA;AAAA,MACzC,OAAU,EAAA,aAAA;AAAA,MACV,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,kBAAA,iBAA8B,CAAA,QAAA;AAAA,MACzD,QAAW,EAAA,WAAA;AAAA,MACX,EAAA,EAAK,CAA4B,EAAA,kBAAA,iBAAA,CAAA,EAAK,aAAc,CAAA,CAAA;AAAA,MACpD;AAAA;AAAA,sBAEFA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,WAAYM,eAAe,CAAA,YAAA;AAAA,MAC3B,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,OAAQ,CAAA,OAAA;AAAA,MAC9C,SAAU,EAAA,QAAA;AAAA,MACV,YAAe,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,OAAQ,CAAA,OAAA;AAAA,MAChD,OAAU,EAAA,WAAA;AAAA,MACV,UAAA;AAAA,MAEA,0BAAAN,GAAC,CAAA,aAAA,EAAA,EAAM,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAGlD,EAAA,CAAA;AAEJ,CAAA;ACvCA,IAAM,oBAAuB,GAAA;AAAA,EAC3B,8BAAuB;AAAA,IACrB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,0BAAqB;AAAA,IACnB,OAAS,EAAA;AAAA,GACX;AAAA,EACA,sCAA2B;AAAA,IACzB,OAAS,EAAA;AAAA;AAEb,CAAA;AASO,IAAM,iBAAiB,CAAC;AAAA,EAC7B,EAAA;AAAA,EACA,IAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EAAA,MAAM,UAAU,cAAe,EAAA;AAE/B,EAAM,MAAA,eAAA,GAAkBG,YAAY,MAAM;AACxC,IAAA,MAAM,eAA+C,EAAC;AAEtD,IAAK,IAAA,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA;AAChB,MAAA,YAAA,CAAa,IAAK,CAAA;AAAA,QAChB,OAAA,EAAS,oBAAqB,CAAA,GAAG,CAAE,CAAA,OAAA;AAAA,QACnC,GAAA;AAAA,QACA,aAAe,EAAA;AAAA,OAChB,CAAA;AAAA,KACF,CAAA;AAED,IAAO,OAAA,YAAA;AAAA,GACN,EAAA,CAAC,IAAM,EAAA,EAAE,CAAC,CAAA;AAEb,EACE,uBAAAH,IAAAE,QAAA,EAAA,EACA,0BAAAY,IAAC,CAAA,OAAA,EAAA,EAAQ,SAAYO,EAAAA,aAAAA,CAAc,aACjC,EAAA,QAAA,EAAA;AAAA,oBAAArB,GAAAA;AAAA,MAAC,6BAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAK,GAAI,EAAG,CAAA,oBAAA,CAAA;AAAA,QACZ,OAAQ,eAAgB,EAAA;AAAA,QACxB,WAAYqB,aAAc,CAAA,MAAA;AAAA,QAC1B,uBAAwBf,eAAe,CAAA,YAAA;AAAA,QACvC,OAAQ,OAAQ,CAAA,OAAA;AAAA,QAChB,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA;AAAA;AAAA,KACxC;AAAA,oBAEAN,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,WAAYM,eAAe,CAAA,YAAA;AAAA,QAC3B,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,KAAM,CAAA,OAAA;AAAA,QAC5C,OAAU,EAAA,OAAA;AAAA,QACV,SAAY,EAAA;AAAA,UACV,cAAgB,EAAA;AAAA,YACd,KAAA,EAAO,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,YAAA;AAAA,YAC5B,UAAA,EAAY,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,WACnC;AAAA,UACA,OAAS,EAAA;AAAA,YACP,WAAWA,eAAe,CAAA;AAAA,WAC5B;AAAA,UACA,KAAO,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,KAAM,CAAA;AAAA;AACxC;AAAA;AACF,GAAA,EACF,CACA,EAAA,CAAA;AAEJ,CAAA;ACrEO,IAAM,uBAAuB,CAAC;AAAA,EACjC,EAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAiC,KAAA;AACjC,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAM,MAAA,UAAA,GAAaC,OAA8B,IAAI,CAAA;AACrD,EAAM,MAAA,gBAAA,GAAmBA,OAA8B,IAAI,CAAA;AAC3D,EAAM,MAAA,cAAA,GAAiBA,OAA8B,IAAI,CAAA;AACzD,EAAM,MAAA,eAAA,GAAkBA,OAAiC,IAAI,CAAA;AAE7D,EAAA,IAAIe,QAAM,QAAS,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,SAAS,CAAG,EAAA;AAC/C,IAAA,uBACEtB,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAY,kBAAAA,IAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAM,EAAA,UAAA;AAAA,QACN,UAAA;AAAA,QACA,YAAc,EAAA;AAAA,UACZ,WAAW,cAAkB,IAAA,cAAA;AAAA,UAC7B,YAAc,EAAA,MAAA;AAAA,UACd,WAAa,EAAA,eAAA;AAAA,UACb,WAAa,EAAA;AAAA,SACf;AAAA,QACA,WAAY,SAAa,IAAA,QAAA;AAAA,QACzB,SAAYT,EAAAA,WAAAA,CAAWkB,YAAY,CAAA,YAAA,EAAe,SAAS,CAAA;AAAA,QAC3D,MAAA;AAAA,QACA,YAAA;AAAA,QACA,yBAA4B,EAAA,qBAAA;AAAA,QAC5B,KAAO,EAAA;AAAA,UACL,yBAAyB,gBAAiB,CAAA,OAAA,GAAU,GAAI,gBAAiB,CAAA,OAAA,CAAQ,YAAa,CAAO,EAAA,CAAA,GAAA;AAAA,SACvG;AAAA,QACA,SAAW,EAAA;AAAA,UACT,MAAQ,EAAA;AAAA,YACN,WAAWA,YAAY,CAAA;AAAA;AACzB,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAvB,GAAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,gBAAA;AAAA,cACN,WAAYuB,YAAY,CAAA,WAAA;AAAA,cACxB,KAAQ,EAAA,OAAA;AAAA,cACR,SAAW,EAAA;AAAA,gBACT,OAAS,EAAA;AAAA,kBACP,WAAWA,YAAY,CAAA;AAAA;AACzB,eACF;AAAA,cAEE,wEACEvB,GAAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAY,SAAc,KAAA,KAAA,GAAQ,MAAS,GAAA,OAAA;AAAA,kBAC3C,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBAC/B,GAAM,EAAA,eAAA;AAAA,kBACN,SAAYK,EAAAA,WAAAA,CAAW,SAAWC,EAAAA,eAAAA,CAAe,UAAU,CAAA;AAAA,kBAC3D,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBACpC,OAAU,EAAA;AAAA;AAAA,kCAEVN,GAAAA;AAAA,gBAAC,cAAA;AAAA,gBAAA;AAAA,kBACD,EAAA;AAAA,kBACA,IAAA,EAAO,UAAU,EAAC;AAAA,kBAClB,GAAM,EAAA,eAAA;AAAA,kBACN,OAAU,EAAA;AAAA;AAAA;AACZ;AAAA,WAEN;AAAA,0BACAA,GAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,cAAA;AAAA,cACN,WAAYuB,YAAY,CAAA,SAAA;AAAA,cAEtB;AAAA;AAAA;AACJ;AAAA;AAAA,KAEF,EAAA,CAAA;AAAA;AAGN;AC/EA,IAAM,kBAAqB,GAAA;AAAA,EACzB,GAAK,EAAA,GAAA;AAAA,EACL,IAAM,EAAA,GAAA;AAAA,EACN,GAAK,EAAA;AACP,CAAA;AAEO,IAAM,sBAAsB,CAAC;AAAA,EAClC,EAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAgC,KAAA;AAC9B,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,YAAY,cAAe,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAClE,EAAA,MAAM,oBAAuB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,oBAAoB,CAAA;AAEvF,EAAM,MAAA,QAAA,GAAWhB,OAAwB,IAAI,CAAA;AAC7C,EAAM,MAAA,iBAAA,GAAoBA,OAA8B,IAAI,CAAA;AAC5D,EAAM,MAAA,kBAAA,GAAqBA,OAA8B,IAAI,CAAA;AAC7D,EAAM,MAAA,mBAAA,GAAsBA,OAAiC,IAAI,CAAA;AAEjE,EAAM,MAAA,MAAA,GAASA,OAA4B,aAAa,CAAA;AACxD,EAAM,MAAA,WAAA,GAAcA,OAAgB,IAAI,CAAA;AAExC,EAAM,MAAA,SAAA,GAAY,QAAQ,MAAM;AAE9B,IAAM,MAAA,YAAA,GAAe,CAAC,GAAA,EAAa,GAAgB,KAAA;AACjD,MAAA,IAAI,MAAM,GAAK,EAAA;AACb,QAAO,OAAA,GAAA;AAAA,OACF,MAAA;AACL,QAAS,OAAA,CAAA,CAAA,GAAI,OAAO,CAAK,GAAA,GAAA;AAAA;AAC3B,KACF;AAKA,IAAA,IAAIiB,aAAsB,EAAC;AAE3B,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,EAAuC,CAAE,CAAA,OAAA;AAC/E,IAAA,IAAI,QAAU,EAAA;AAKZ,MAAA,IAAI,SAAS,SAAW,EAAA;AACtB,QAAA,QAAO,SAAS,SAAW;AAAA,UACzB,KAAK,gBAAA;AAAA,UACL,KAAK,aAAA;AAAA,UACL,KAAK,GAAA;AACH,YAAA,MAAA,CAAO,OAAU,GAAA,QAAA,CAAS,SAAc,KAAA,GAAA,GAAM,gBAAgB,QAAS,CAAA,SAAA;AACvE,YAAA,WAAA,CAAY,OAAU,GAAA,KAAA;AACtB,YAAA,OAAO,EAAC;AAAA,UACV;AACE,YAAM,MAAA,MAAA,GAAS,SAAS,SAAY,GAAA,GAAA;AAEpC,YAAS,MAAA,GAAA,CAAA,IAAK,MAAS,GAAA,CAAA,GACnBA,UAAU,CAAA,OAAA,CAAQ,MAAM,CACxBA,GAAAA,UAAAA,CAAU,OAAQ,CAAA,kBAAA,CAAmB,GAAG,CAAA;AAC5C,YAAA;AAAA;AACJ,OACK,MAAA;AAEL,QAAAA,UAAAA,CAAU,OAAQ,CAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA;AAS1C,MAAA,IAAI,SAAS,UAAY,EAAA;AACvB,QAAA,QAAO,SAAS,UAAY;AAAA,UAC1B,KAAK,gBAAA;AAAA,UACL,KAAK,aAAA;AAAA,UACL,KAAK,GAAA;AACH,YAAA,MAAA,CAAO,OAAU,GAAA,QAAA,CAAS,UAAe,KAAA,GAAA,GAAM,gBAAgB,QAAS,CAAA,UAAA;AACxE,YAAAA,UAAAA,CAAU,QAAQ,CAAC,CAAA;AACnB,YAAOA,OAAAA,UAAAA;AAAA,UACT;AACE,YAAM,MAAA,OAAA,GAAU,SAAS,UAAa,GAAA,GAAA;AACtC,YAAM,MAAA,OAAA,GAAUA,WAAU,CAAC,CAAA;AAE3B,YAAA,OAAA,GAAU,KAAK,OAAU,GAAA,CAAA,GACrBA,UAAU,CAAA,OAAA,CAAQ,aAAa,OAAS,EAAA,OAAO,CAAC,CAAA,GAChDA,WAAU,OAAQ,CAAA,YAAA,CAAa,kBAAmB,CAAA,IAAA,EAAM,OAAO,CAAC,CAAA;AACpE,YAAA;AAAA;AACJ,OACK,MAAA;AAEL,QAAAA,UAAAA,CAAU,QAAQ,YAAa,CAAA,kBAAA,CAAmB,MAAMA,UAAU,CAAA,CAAC,CAAC,CAAC,CAAA;AAAA;AAMvE,MAAA,IAAI,SAAS,SAAW,EAAA;AACtB,QAAA,QAAO,SAAS,SAAW;AAAA,UACzB,KAAK,gBAAA;AAAA,UACL,KAAK,aAAA;AAAA,UACL,KAAK,GAAA;AACH,YAAA,MAAA,CAAO,OAAU,GAAA,QAAA,CAAS,SAAc,KAAA,GAAA,GAAM,gBAAgB,QAAS,CAAA,SAAA;AACvE,YAAAA,UAAAA,CAAU,QAAQ,CAAC,CAAA;AACnB,YAAOA,OAAAA,UAAAA;AAAA,UACT;AACE,YAAM,MAAA,MAAA,GAAS,SAAS,SAAY,GAAA,GAAA;AACpC,YAAM,MAAA,OAAA,GAAUA,WAAU,CAAC,CAAA;AAE3B,YAAA,MAAA,GAAS,KAAK,MAAS,GAAA,CAAA,GACnBA,UAAU,CAAA,OAAA,CAAQ,aAAa,MAAQ,EAAA,OAAO,CAAC,CAAA,GAC/CA,WAAU,OAAQ,CAAA,YAAA,CAAa,kBAAmB,CAAA,GAAA,EAAK,OAAO,CAAC,CAAA;AACnE,YAAA;AAAA;AACJ,OACK,MAAA;AAEL,QAAAA,UAAAA,CAAU,QAAQ,YAAa,CAAA,kBAAA,CAAmB,KAAKA,UAAU,CAAA,CAAC,CAAC,CAAC,CAAA;AAAA;AACtE,KACK,MAAA;AAGL,MAAAA,WAAU,IAAK,CAAA,kBAAA,CAAmB,KAAK,kBAAmB,CAAA,IAAA,EAAM,mBAAmB,GAAG,CAAA;AAAA;AAGxF,IAAOA,OAAAA,UAAAA;AAAA,GACN,EAAA,CAAC,EAAI,EAAA,OAAO,CAAC,CAAA;AAEhB,EAAM,MAAA,OAAA,GAAUjB,OAAsB,IAAI,CAAA;AAE1C,EAAM,MAAA,mBAAA,GAAsBJ,YAAY,MAAM;AAC5C,IAAI,IAAA,OAAA,CAAQ,YAAY,IAAM,EAAA;AAE5B,MAAM,MAAA,OAAA,GAAU,QAAQ,OAAY,KAAA,CAAA,GAAI,UAAU,MAAS,GAAA,CAAA,GAAK,QAAQ,OAAU,GAAA,CAAA;AAClF,MAAS,QAAA,CAAA,OAAA,EAAS,OAAO,OAAO,CAAA;AAAA;AAClC,GACF,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAM,MAAA,iBAAA,GAAoBA,WAAY,CAAA,CAAC,CAAqB,KAAA;AAC1D,IAAI,IAAA,OAAA,CAAQ,YAAY,IAAM,EAAA;AAI5B,MAAA,QAAO,EAAE,IAAM;AAAA,QACb,KAAK,QAAA;AACH,UAAI,IAAA,OAAA,CAAQ,YAAY,CAAG,EAAA;AAC3B,UAAS,QAAA,CAAA,OAAA,EAAS,OAAO,CAAC,CAAA;AAC1B,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAI,IAAA,OAAA,CAAQ,YAAY,CAAG,EAAA;AAC3B,UAAA,QAAA,CAAS,OAAS,EAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,GAAU,CAAC,CAAA;AAC5C,UAAA;AAAA,QACF,KAAK,UAAA;AACH,UAAa,YAAA,EAAA;AACb,UAAA;AAAA,QACF,KAAK,WAAA;AACH,UAAA,IAAI,OAAQ,CAAA,OAAA,KAAY,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA;AAC5C,YAAa,YAAA,EAAA;AACb,YAAA;AAAA;AAEF,UAAA,QAAA,CAAS,OAAS,EAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,GAAU,CAAC,CAAA;AAC5C,UAAA;AAEA;AACJ;AACF,GACC,EAAA,CAAC,SAAW,EAAA,YAAY,CAAC,CAAA;AAE5B,EAAM,MAAA,YAAA,GAAe,QAAQ,MAAM;AACjC,IAAA,MAAM,WAAW,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,EAAuC,EAAE,OAAS,EAAA,QAAA;AACxF,IAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,MAAO,OAAA,MAAA;AAAA,KACT,MAAA,IAAW,aAAa,IAAM,EAAA;AAC5B,MAAO,OAAA,MAAA;AAAA,KACF,MAAA;AACL,MAAA,OAAO,GAAI,QAAS,CAAA,EAAA,CAAA;AAAA;AACtB,GACC,EAAA,CAAC,EAAI,EAAA,OAAO,CAAC,CAAA;AAEhB,EAAM,MAAA,SAAA,GAAY,QAAQ,MAAM;AAC9B,IAAA,IAAIsB,UAAuB,GAAA;AAAA,MACzB,MAAQ,EAAA,KAAA;AAAA,MACR,QAAU,EAAA;AAAA,KACZ;AACA,IAAA,MAAM,QAAQ,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,EAAuC,EAAE,OAAS,EAAA,KAAA;AACrF,IAAA,IAAI,KAAO,EAAA;AACT,MAAAA,WAAU,MAAS,GAAA,IAAA;AAEnB,MAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,QAAAA,WAAU,QAAW,GAAA,KAAA;AAAA;AACvB;AAGF,IAAOA,OAAAA,UAAAA;AAAA,GACN,EAAA,CAAC,EAAI,EAAA,OAAO,CAAC,CAAA;AAEhB,EAAM,MAAA,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,IAAIT,UAAY,GAAA,EAAA;AAChB,IAAI,IAAA,MAAA,CAAO,YAAY,gBAAkB,EAAA;AACvC,MAAAA,aAAYO,YAAY,CAAA,mCAAA;AAAA,KACnB,MAAA;AACL,MAAAP,aAAYO,YAAY,CAAA,gCAAA;AAAA;AAE1B,IAAOP,OAAAA,UAAAA;AAAA,GACT,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAM,MAAA,cAAA,GAAiB,QAAQ,MAAM;AACnC,IAAO,OAAA,SAAA,CAAU,MAASO,GAAAA,YAAAA,CAAY,gBAAmB,GAAA,EAAA;AAAA,GAC3D,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,IAAID,QAAM,QAAS,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,SAAS,CAAG,EAAA;AAC/C,IAAA,uBACEtB,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAY,kBAAAA,IAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,EAAA;AAAA,QACA,GAAM,EAAA,QAAA;AAAA,QACN,MAAA;AAAA,QACA,YAAc,EAAA;AAAA,UACZ,WAAW,cAAkB,IAAA,kBAAA;AAAA,UAC7B,YAAc,EAAA,MAAA;AAAA,UACd,WAAa,EAAA,mBAAA;AAAA,UACb,WAAa,EAAA;AAAA,SACf;AAAA,QACA,YAAA;AAAA,QACA,yBAA4B,EAAA,qBAAA;AAAA,QAC1B,GAAI,SAAU,CAAA,MAAA,GAAS,CACrB,GAAA;AAAA,UACA,UAAY,EAAA,SAAA;AAAA,UACZ,WAAA,EAAa,UAAU,MAAS,GAAA,CAAA;AAAA,UAChC,QAAQ,MAAO,CAAA;AAAA,SAEf,GAAA;AAAA,UACA,QAAQ,MAAO,CAAA;AAAA,SACjB;AAAA,QAEF,MAAA,EAAS,CAAC,KAAU,KAAA;AAAE,UAAA,OAAA,CAAQ,OAAU,GAAA,KAAA;AAAA,SAAM;AAAA,QAC9C,oBAAA;AAAA,QACA,SAAY,EAAA;AAAA,UACV,SAAW,EAAA;AAAA,YACT,SAAWT,EAAAA,WAAAA,CAAWkB,YAAY,CAAA,gBAAA,EAAkB,eAAe,CAAA;AAAA,YACnE,GAAK,EAAA,iBAAA;AAAA,YACL,KAAO,EAAA;AAAA,cACL,QAAU,EAAA;AAAA;AACZ,WACF;AAAA,UACA,aAAe,EAAA;AAAA,YACb,WAAWA,YAAY,CAAA,aAAA;AAAA,YACvB,OAAS,EAAA,mBAAA;AAAA,YACT,SAAW,EAAA;AAAA,WACb;AAAA,UACA,OAAS,EAAA;AAAA,YACP,SAAWlB,EAAAA,WAAAA,CAAWkB,YAAY,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA,YACxD,WAAa,EAAA;AAAA,WACf;AAAA,UACA,QAAU,EAAA;AAAA,YACR,SAAWlB,EAAAA,WAAAA,CAAWkB,YAAY,CAAA,mBAAA,EAAqBA,aAAY,SAAS,CAAA;AAAA,YAC5E,SAAW,EAAA;AAAA,WACb;AAAA,UACA,QAAU,EAAA;AAAA,YACR,SAAWlB,EAAAA,WAAAA,CAAWkB,YAAY,CAAA,mBAAA,EAAqB,cAAc,CAAA;AAAA,YACrE,KAAO,EAAA,EAAE,kBAAoB,EAAA,SAAA,CAAU,QAAS;AAAA;AAClD,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAvB,GAAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,KAAQ,EAAA,OAAA;AAAA,cACR,WAAYuB,YAAY,CAAA,iBAAA;AAAA,cACxB,SAAY,EAAA;AAAA,gBACV,OAAS,EAAA;AAAA,kBACP,WAAWA,YAAY,CAAA;AAAA;AACzB,eACF;AAAA,cAEA,wEACIvB,GAAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACD,SAAA,EAAY,SAAc,KAAA,KAAA,GAAQ,MAAS,GAAA,OAAA;AAAA,kBAC3C,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBAC/B,GAAM,EAAA,mBAAA;AAAA,kBACN,SAAYK,EAAAA,WAAAA,CAAW,SAAWC,EAAAA,eAAAA,CAAe,UAAU,CAAA;AAAA,kBAC3D,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBACpC,OAAU,EAAA;AAAA;AAAA,kCAEVN,GAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACD,GAAM,EAAA,mBAAA;AAAA,kBACN,WAAYM,eAAe,CAAA,WAAA;AAAA,kBAC3B,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,KAAM,CAAA,OAAA;AAAA,kBAC5C,OAAU,EAAA;AAAA;AAAA;AACZ;AAAA,WAEJ;AAAA,0BACAN,GAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,kBAAA;AAAA,cAEJ;AAAA;AAAA;AACJ;AAAA;AAAA,KAEF,EAAA,CAAA;AAAA;AAGN;AC3TO,IAAM,0BAA0B,CAAC;AAAA,EACpC,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAoC,KAAA;AACpC,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAM,MAAA,mBAAA,GAAsBO,OAA8B,IAAI,CAAA;AAC9D,EAAM,MAAA,iBAAA,GAAoBA,OAA8B,IAAI,CAAA;AAC5D,EAAM,MAAA,kBAAA,GAAqBA,OAAiC,IAAI,CAAA;AAEhE,EAAA,IAAIe,QAAM,QAAS,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,SAAS,CAAG,EAAA;AAC/C,IAAA,uBACEtB,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAY,kBAAAA,IAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAM,EAAA,iBAAA;AAAA,QACN,YAAc,EAAA;AAAA,UACZ,WAAW,cAAkB,IAAA,iBAAA;AAAA,UAC7B,YAAc,EAAA,MAAA;AAAA,UACd,WAAa,EAAA,kBAAA;AAAA,UACb,WAAa,EAAA;AAAA,SACf;AAAA,QACA,SAAW,EAAA;AAAA,UACT,MAAQ,EAAA;AAAA,YACN,WAAWS,YAAY,CAAA;AAAA;AACzB,SACF;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,aAAgB,EAAA,IAAA;AAAA,QAChB,SAAYlB,EAAAA,WAAAA,CAAWkB,YAAY,CAAA,eAAA,EAAiB,SAAS,CAAA;AAAA,QAC7D,yBAA4B,EAAA,qBAAA;AAAA,QAC5B,KAAO,EAAA;AAAA,UACL,yBAAyB,mBAAoB,CAAA,OAAA,GAAU,GAAI,mBAAoB,CAAA,OAAA,CAAQ,YAAa,CAAO,EAAA,CAAA,GAAA;AAAA,SAC7G;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAvB,GAAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,mBAAA;AAAA,cACN,WAAYuB,YAAY,CAAA,WAAA;AAAA,cACxB,KAAQ,EAAA,OAAA;AAAA,cACR,SAAW,EAAA;AAAA,gBACT,OAAS,EAAA;AAAA,kBACP,WAAWA,YAAY,CAAA;AAAA;AACzB,eACF;AAAA,cAEE,wEACIvB,GAAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACD,SAAA,EAAY,SAAc,KAAA,KAAA,GAAQ,MAAS,GAAA,OAAA;AAAA,kBAC3C,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBAC/B,GAAM,EAAA,kBAAA;AAAA,kBACN,SAAYK,EAAAA,WAAAA,CAAW,SAAWC,EAAAA,eAAAA,CAAe,UAAU,CAAA;AAAA,kBAC3D,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBACpC,OAAU,EAAA;AAAA;AAAA,kCAEVN,GAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACD,GAAM,EAAA,kBAAA;AAAA,kBACN,WAAYM,eAAe,CAAA,WAAA;AAAA,kBAC3B,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAO,KAAM,CAAA,OAAA;AAAA,kBAC5C,OAAU,EAAA;AAAA;AAAA;AACZ;AAAA,WAEN;AAAA,0BACAN,GAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,iBAAA;AAAA,cACN,WAAYuB,YAAY,CAAA,SAAA;AAAA,cAEtB;AAAA;AAAA;AACJ;AAAA;AAAA,KAEF,EAAA,CAAA;AAAA;AAGN;AC7EO,IAAM,sBAAsB,CAAC;AAAA,EAChC,EAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAgC,KAAA;AAChC,EAAA,MAAM,UAAa,GAAA,IAAA,IAAQ,QAAS,CAAA,cAAA,CAAe,IAAI,CAAA;AACvD,EAAM,MAAA,oBAAA,GAAuBhB,OAA8B,IAAI,CAAA;AAC/D,EAAM,MAAA,kBAAA,GAAqBA,OAA8B,IAAI,CAAA;AAC7D,EAAM,MAAA,mBAAA,GAAsBA,OAAiC,IAAI,CAAA;AAEjE,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAEhE,EAAM,MAAA,aAAA,GAAgBJ,YAAY,MAAM;AACtC,IAAA,IAAI,IAA8B,KAAA,cAAA,cAAA;AAChC,MAAO,OAAA,SAAA,KAAA,KAAA,aAAsCoB,YAAY,CAAA,qBAAA,GAAwBA,YAAY,CAAA,sBAAA;AAAA,eACpF,IAA4B,KAAA,YAAA,YAAA;AACrC,MAAO,OAAA,SAAA,KAAA,KAAA,aAAsCA,YAAY,CAAA,sBAAA,GAAyBA,YAAY,CAAA,qBAAA;AAAA;AAChG,GACC,EAAA,CAAC,IAAM,EAAA,SAAS,CAAC,CAAA;AAEpB,EAAA,IAAID,QAAM,QAAS,CAAA,OAAA,CAAQ,QAAQ,CAAA,CAAE,SAAS,CAAG,EAAA;AAC/C,IAAA,uBACEtB,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAY,kBAAAA,IAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,MAAS,EAAA,UAAA;AAAA,QACT,YAAe,EAAA;AAAA,UACb,WAAW,cAAkB,IAAA,kBAAA;AAAA,UAC7B,YAAc,EAAA,MAAA;AAAA,UACd,WAAa,EAAA,mBAAA;AAAA,UACb,SAAW,EAAA,KAAA;AAAA,UACX,WAAa,EAAA;AAAA,SACf;AAAA,QACA,WAAYT,WAAWkB,CAAAA,YAAAA,CAAY,WAAa,EAAA,SAAA,EAAW,eAAe,CAAA;AAAA,QAC1E,KAAO,EAAA;AAAA,UACL,yBAAyB,oBAAqB,CAAA,OAAA,GAAU,GAAI,oBAAqB,CAAA,OAAA,CAAQ,YAAa,CAAO,EAAA,CAAA,GAAA;AAAA,SAC/G;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAvB,GAAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,oBAAA;AAAA,cACN,WAAYuB,YAAY,CAAA,WAAA;AAAA,cACxB,KAAQ,EAAA,OAAA;AAAA,cACR,SAAW,EAAA;AAAA,gBACT,OAAS,EAAA;AAAA,kBACP,WAAWA,YAAY,CAAA;AAAA;AACzB,eACF;AAAA,cAEE,wEACEvB,GAAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACD,SAAA,EAAY,SAAc,KAAA,KAAA,GAAQ,MAAS,GAAA,OAAA;AAAA,kBAC3C,KAAQ,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBAC/B,GAAM,EAAA,mBAAA;AAAA,kBACN,SAAYK,EAAAA,WAAAA,CAAW,SAAWC,EAAAA,eAAAA,CAAe,UAAU,CAAA;AAAA,kBAC3D,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,IAAK,CAAA,OAAA;AAAA,kBACpC,OAAU,EAAA;AAAA;AAAA,kCAEVN,GAAAA;AAAA,gBAAC,cAAA;AAAA,gBAAA;AAAA,kBACD,EAAA;AAAA,kBACA,IAAA,EAAO,UAAU,EAAC;AAAA,kBAClB,GAAM,EAAA,mBAAA;AAAA,kBACN,OAAU,EAAA;AAAA;AAAA;AACZ;AAAA,WAEJ;AAAA,0BACAA,GAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,GAAM,EAAA,kBAAA;AAAA,cACN,WAAYuB,YAAY,CAAA,SAAA;AAAA,cAEtB;AAAA;AAAA;AACJ;AAAA;AAAA,KAEF,EAAA,CAAA;AAAA;AAGN;ACjGA,IAAM,YAAe,GAAA;AAAA,EACnB,2BAAwB,oBAAA;AAAA,EACxB,mCAA4B,mBAAA;AAAA,EAC5B,iCAA2B,uBAAA;AAAA,EAC3B,CAAA,cAAA,qBAA4B,CAAC,KAAA,qBAAoCvB,GAAC,CAAA,mBAAA,EAAA,EAAsB,GAAG,KAAA,EAAQ,IAA6B,EAAA,cAAA,cAAA,CAAA;AAAA,EAChI,CAAA,YAAA,mBAA0B,CAAC,KAAA,qBAAoCA,GAAC,CAAA,mBAAA,EAAA,EAAsB,GAAG,KAAA,EAAQ,IAA2B,EAAA,YAAA,YAAA;AAC9H,CAAA;AAEO,IAAM,uBAAuB,CAAC;AAAA,EACnC,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAIM,KAAA;AAEJ,EAAA,uBACEA,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,IAAO,EAAA,SAAA;AAAA,MACP,YAAA;AAAA,MACA,KAAQ,EAAA,UAAA;AAAA,MAEN;AAAA;AAAA,GACJ;AAEJ;ACxBA,IAAI,UAA8D,GAAA,IAAA;AAErD,IAAA,UAAA,GAAa,CAAmB,GAAW,KAAA;AACtD,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,UAAU,CAAA;AACnE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,IAAI,CAAA;AAC7D,EAAM,MAAA,WAAA,GAAc,WAAW,GAAG,CAAA;AAClC,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,OAAA,GAAU,WAAW,UAAU,CAAA;AAErC,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,UAAA,GAAa,kBAAmC,CAAA;AAAA,MAC9C,YAAA,EAAA,MAAA;AAAA,MACA,QAAU,EAAA,cAAA;AAAA,MACV,IAAA,EAAM,QAAQ,OAAQ,CAAA,IAAA;AAAA,MACtB,aAAA,EAAA,MAAA;AAAA,KACD,CAAA;AAAA;AAEH,EAAM,MAAA,iBAAA,GAAoB,UAAc,IAAA,UAAA,CAAW,UAAU,CAAA;AAG7D,EAAA,MAAM,eAAgB,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAwC,GAAI,MAAQ,EAAA,QAAA,IAAA,MAAA;AAE/F,EAAA,MAAM,eAAgB,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAwC,GAAI,KAAO,EAAA,YAAA,IAAA,SAAA;AAE9F,EAAA,MAAM,WAAW,kBAAiC,CAAA;AAAA,IAChD,cAAe,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAwC,GAAI,KAAO,EAAA,YAAA,IAAA,SAAA;AAAA,IACvF,QAAU,EAAA,YAAA;AAAA,IACV,MAAO,OAAQ,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAwC,GAAI,KAAO,EAAA;AAAA,GAChF,CAAA;AACD,EAAA,MAAM,SAAY,GAAA,UAAA,IAAc,QAAS,CAAA,UAAU,CAAK,IAAA,YAAA;AAExD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIY,SAAuB,YAAY,CAAA;AACrE,EAAM,MAAA,iBAAA,GAAoB,YAAY,SAAS,CAAA;AAG/C,EAAM,MAAA,WAAA,GAAcT,WAAY,CAAA,CAAC,IAAoD,KAAA;AACjF,IAAA,OAAA,CAAQ,iBAAsB,KAAA,IAAA,IAAQ,iBAC9B,KAAA,MAAA,iBAAA,YAAA,KAAiB,IAAQ,IAAA,YAAA,KAAA,MAAA,YAAA;AAAA,GAClC,EAAA,CAAC,iBAAmB,EAAA,YAAY,CAAC,CAAA;AAGpC,EAAM,MAAA,iBAAA,GAAoBA,WAAY,CAAA,CAAC,IAA6D,KAAA;AAClG,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,OAAO,SAAc,KAAA,IAAA;AAAA,KAChB,MAAA;AACL,MAAA,OAAO,SAA0C,KAAA,cAAA,sBAAA,SAAA,KAAA,YAAA;AAAA;AACnD,GACF,EAAG,CAAC,SAAS,CAAC,CAAA;AAGd,EAAM,MAAA,SAAA,GAAYA,YAAY,MAAuB;AAGnD,IAAI,IAAA,YAAA,KAAA,MAAA,oBAA6C,EAAC;AAElD,IAAI,IAAA,iBAAA,KAAA,MAAA,oBAAkD,EAAC;AAEvD,IAAI,IAAA,SAAA,KAAA,YAAA,qBAAyC,SAAwC,KAAA,aAAA,oBAAA,OAAO,EAAC;AAG7F,IAAA,IAAI,aAA8B,EAAC;AAGnC,IAAA,OAAA,CAAQ,OAAQ,CAAA,YAAA,CAAa,OAAQ,CAAA,CAAC,UAA8B,KAAA;AAClE,MAAA,QAAO,UAAY;AAAA,QACjB,KAAA,kBAAA;AAEE,UAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAC1B,UAAA;AAAA,QACF,KAAA,cAAA;AACE,UAAA,IAAI,gCAAmC,EAAA;AACrC,YAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA;AAE5B,UAAA;AAAA,QACF,KAAA,YAAA;AACE,UAAA,IAAI,4BAAiC,EAAA;AACnC,YAAA,UAAA,CAAW,KAAK,UAAU,CAAA;AAAA;AAE5B,UAAA;AAEA;AACJ,KACD,CAAA;AAGD,IAAA,IAAI,WAAW,MAAW,KAAA,CAAA,IAAK,WAAW,CAAC,CAAA,KAAA,kBAAA,yBAAsC,EAAC;AAElF,IAAO,OAAA,UAAA;AAAA,GACT,EAAG,CAAC,OAAQ,CAAA,OAAA,CAAQ,cAAc,iBAAmB,EAAA,SAAA,EAAW,YAAc,EAAA,WAAW,CAAC,CAAA;AAE1F,EAAM,MAAA,YAAA,GAAeA,YAAY,MAAM;AAErC,IAAA,IAAI,YAAsC,KAAA,MAAA,aAAA;AAExC,MAAA,IAAI,mBAAqB,EAAA;AACvB,QAAO,OAAA,YAAA;AAAA,OACF,MAAA;AAEL,QAAO,OAAA,SAAA;AAAA;AACT;AAMF,IAAA,QAAQ,aAAa,OAAS;AAAA;AAAA;AAAA,MAI5B,KAAA,kBAAA;AACE,QAAA,IAAI,mBAAqB,EAAA;AACvB,UAAO,OAAA,YAAA;AAAA,SACF,MAAA;AACL,UAAO,OAAA,SAAA;AAAA;AACT;AAAA,MAGF,KAAA,cAAA;AACE,QAAA,IAAI,gCAAmC,EAAA;AACrC,UAAA,OAAA,cAAA;AAAA,SACK,MAAA;AAGL,UAAI,IAAA,CAAC,mDAA6C,EAAA;AAChD,YAAO,OAAA,SAAA;AAAA,WACF,MAAA;AACL,YAAO,OAAA,YAAA;AAAA;AACT;AACF,MAEF,KAAA,YAAA;AACE,QAAA,IAAI,4BAAiC,EAAA;AACnC,UAAA,OAAA,YAAA;AAAA,SACK,MAAA;AAGL,UAAI,IAAA,CAAC,+CAA2C,EAAA;AAC9C,YAAO,OAAA,SAAA;AAAA,WACF,MAAA;AACL,YAAO,OAAA,YAAA;AAAA;AACT;AACF;AAAA;AAAA,MAIF,KAAK,IAAA;AAAA,MACL,KAAK,MAAA;AAEH,QAAA,IAAI,mDAA6C,EAAA;AAC/C,UAAA,IAAI,gCAAmC,EAAA;AACrC,YAAA,OAAA,cAAA;AAAA,WACK,MAAA;AACL,YAAO,OAAA,YAAA;AAAA;AACT,SACF,MAAA,IAAW,+CAA2C,EAAA;AACpD,UAAA,IAAI,4BAAiC,EAAA;AACnC,YAAA,OAAA,YAAA;AAAA,WACK,MAAA;AACL,YAAO,OAAA,YAAA;AAAA;AACT,SACK,MAAA;AACL,UAAO,OAAA,SAAA;AAAA;AACT,MACF;AACE,QAAO,OAAA,YAAA;AAAA;AACX,GACF,EAAG,CAAC,YAAc,EAAA,SAAA,EAAW,cAAc,WAAa,EAAA,OAAA,EAAS,WAAa,EAAA,iBAAiB,CAAC,CAAA;AAGhG,EAAAQ,UAAU,MAAM;AACd,IAAA,YAAA,CAAa,cAAc,CAAA;AAAA,KAC1B,CAAC,SAAA,EAAW,mBAAmB,WAAa,EAAA,OAAA,EAAS,YAAY,CAAC,CAAA;AAGrE,EAAAA,UAAU,MAAM;AAEd,IAAA,IAAI,aAAa,OAAqC,KAAA,kBAAA,kBAAA;AAEtD,IAAA,IAAI,kDAA0C,SAAsC,KAAA,YAAA,kBAAA;AAClF,MAAA,IAAI,0DAAkD,iBAA8C,KAAA,YAAA,kBAAA;AAClG,QAAA,QAAA,CAAS,aAAc,CAAA;AAAA,UACrB,GAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACT,CAAC,CAAA;AAAA;AACJ;AACF,GACF,EAAG,CAAC,QAAU,EAAA,GAAA,EAAK,WAAW,iBAAmB,EAAA,WAAA,EAAa,OAAO,CAAC,CAAA;AAGtE,EAAAA,UAAU,MAAM;AACd,IAAI,IAAA,WAAA,EAAa,UAAU,IAAM,EAAA;AAC/B,MAAA,IAAI,SAAwC,KAAA,cAAA,oBAAA;AAC1C,QAAA,QAAA,CAAS,UAAW,CAAA;AAAA,UAClB,GAAA;AAAA,UACA,UAAA,EAAA,cAAA;AAAA,SACD,CAAC,CAAA;AACF,QAAA,QAAA,CAAS,aAAc,CAAA;AAAA,UACrB,GAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACT,CAAC,CAAA;AAAA,iBACO,SAAsC,KAAA,YAAA,kBAAA;AAC/C,QAAA,QAAA,CAAS,UAAW,CAAA;AAAA,UAClB,GAAA;AAAA,UACA,UAAA,EAAA,YAAA;AAAA,SACD,CAAC,CAAA;AACF,QAAA,QAAA,CAAS,aAAc,CAAA;AAAA,UACrB,GAAA;AAAA,UACA,MAAQ,EAAA;AAAA,SACT,CAAC,CAAA;AAAA;AACJ;AACF,GACD,CAAA;AAQD,EAAAA,UAAU,MAAM;AAOd,IAAA,IAAI,WAAa,EAAA,MAAA,IAAU,IAAQ,IAAA,WAAA,EAAa,WAAW,IAAM,EAAA;AAC/D,MAAA,IAAI,SAAwC,KAAA,cAAA,oBAAA;AAG1C,QAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,WAAA,CAAY,GAAG,CAAA;AAC1C,QAAA,IAAI,UAAoC,KAAA,cAAA,cAAA;AACtC,UAAA,QAAA,CAAS,UAAW,CAAA;AAAA,YAClB,GAAA;AAAA,YACA,UAAA,EAAA,cAAA;AAAA,WACD,CAAC,CAAA;AAAA;AACJ,iBACS,SAAsC,KAAA,YAAA,kBAAA;AAG/C,QAAM,MAAA,UAAA,GAAa,OAAQ,CAAA,WAAA,CAAY,GAAG,CAAA;AAC1C,QAAA,IAAI,UAAkC,KAAA,YAAA,YAAA;AACpC,UAAA,QAAA,CAAS,UAAW,CAAA;AAAA,YAClB,GAAA;AAAA,YACA,UAAA,EAAA,YAAA;AAAA,WACD,CAAC,CAAA;AAAA;AACJ;AACF;AACF,GACF,EAAG,CAAC,QAAA,EAAU,GAAK,EAAA,SAAA,EAAW,aAAa,MAAQ,EAAA,WAAA,EAAa,OAAS,EAAA,OAAO,CAAC,CAAA;AAEjF,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC3PA,IAAAQ,sBAA0B,GAAA,OAAA,CAAA,YAAA,EAAA,CAAA;AAEnB,IAAM,kCAAkC,CAAC;AAAA,EAC9C;AACF,CAAoC,KAAA;AAClC,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,2CAAkC,CAAA;AAC5F,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,aAAa,CAAA;AAG7E,EAAA,MAAM,kBAAkB,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,WAAA,CAAY,YAAY,gBAAgB,CAAA;AAE9F,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,oBAAoB,CAAA;AAChF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAA,MAAM,UAAU,UAAuC,CAAA,gBAAA,sBAAA;AACvD,EAAA,MAAM,YAAY,OAAQ,CAAA,SAAA;AAE1B,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,gBAAiB,EAAA;AAIhC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIP,SAAS,CAAC,CAAA;AAI1C,EAAM,MAAA,eAAA,GAAkBT,YAAY,MAAM;AACxC,IAAI,IAAA,CAAC,iBAAwB,OAAA,KAAA;AAC7B,IAAA,OAAO,eAAgB,CAAA,MAAA,KAAW,CAC9B,GAAA,QAAA,IAAY,eAAgB,CAAA,CAAC,CAAK,IAAA,QAAA,IAAY,eAAgB,CAAA,CAAC,CAC/D,GAAA,QAAA,KAAa,gBAAgB,CAAC,CAAA;AAAA,GACjC,EAAA,CAAC,QAAU,EAAA,eAAe,CAAC,CAAA;AAG9B,EAAM,MAAA,cAAA,GAAiBA,YAAY,MAAM;AACvC,IAAA,MAAM,mBAAe,sBAAAU,CAAAA,OAAAA,EAAc,UAAO,CAAA,MAAA,CAAO,eAAe,KAAK,CAAA;AACrE,IAAA,OAAO,aAAa,EAAE,aAAA,EAAe,GAAG,WAAa,EAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,GAC7E,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAM,MAAA,OAAA,GAAUV,WAAY,CAAA,CAAC,KAAmB,KAAA;AAC9C,IAAA,QAAA,CAAS,aAAc,CAAA;AAAA,MACrB,GAAA,EAAA,gBAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAAA,GACJ,EAAG,CAAC,QAAQ,CAAC,CAAA;AAIb,EAAM,MAAA,WAAA,GAAcA,WAAY,CAAA,CAAC,CAAmC,KAAA;AAClE,IAAA,MAAM,SAAS,CAAE,CAAA,MAAA;AACjB,IAAY,WAAA,CAAA,QAAA,CAAS,MAAO,CAAA,KAAK,CAAC,CAAA;AAAA,GACpC,EAAG,EAAE,CAAA;AAIL,EAAM,MAAA,YAAA,GAAeA,WAAY,CAAA,CAAC,CAAkC,KAAA;AAClE,IAAA,CAAA,CAAE,cAAe,EAAA;AAEjB,IAAA,IAAI,CAAC,aAAe,EAAA;AAEpB,IAAM,MAAA,IAAA,GAAO,cAAc,IAAK,CAAA,CAAAuB,UAAQA,KAAK,CAAA,SAAA,CAAU,aAAa,QAAQ,CAAA;AAE5E,IAAA,IAAI,CAAC,IAAQ,IAAA,eAAA,EAAmB,EAAA,OAAO,QAAQ,KAAK,CAAA;AAEpD,IAAA,EAAA,CAAG,MAAM,CAAC,aAAA,EAAe,MAAM,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,GAC/C,EAAG,CAAC,QAAU,EAAA,aAAA,EAAe,eAAe,eAAiB,EAAA,EAAA,EAAI,OAAO,CAAC,CAAA;AAGzE,EAAAf,UAAU,MAAM;AACd,IAAmB,eAAA,IAAA,WAAA,CAAY,eAAgB,CAAA,CAAC,CAAC,CAAA;AAAA,GACnD,EAAG,CAAC,eAAe,CAAC,CAAA;AAGpB,EAAI,IAAA,CAAC,eAAsB,OAAA,IAAA;AAE3B,EAAA,uBACEX,GAAAA,CAAAE,QAAA,EAAA,EACE,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAY,EAAA;AAAA,QACV,EAAA,EAAA,gBAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA,EAAS,UAAO,CAAA,MAAA,CAAO,cAAe,CAAA,OAAA;AAAA,QACtC,WAAW,oBAAqB,CAAA,cAAA;AAAA,QAChC,SAAW,EAAA,QAAA;AAAA,QACX,MAAA,EAAQ,aAAa,MAAU,IAAA,KAAA;AAAA,QAC/B,YAAc,EAAA,OAAA;AAAA,QACd,YAAA,EAAc,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,QACjC,MAAA,EAAQ,QAAQ,SAAU;AAAA,OAC5B;AAAA,MAEA,QAAAA,kBAAAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAQ,UAAO,CAAA,MAAA,CAAO,cAAe,CAAA,EAAA;AAAA,UACrC,WAAY,oBAAqB,CAAA,kBAAA;AAAA,UACjC,QAAW,EAAA,YAAA;AAAA,UACX,SAAW,EAAA;AAAA,YACT,MAAQ,EAAA;AAAA,cACN,WAAW,oBAAqB,CAAA,oBAAA;AAAA,cAChC,UAAA,EAAY,CAAC,QAAA,IAAY,eAAgB;AAAA;AAC3C,WACF;AAAA,UAEA,QAAAA,kBAAAA,GAAAA;AAAA,YAAC,iBAAA;AAAA,YAAA;AAAA,cACC,OAAQ,cAAe,EAAA;AAAA,cACvB,IAAK,EAAA,gBAAA;AAAA,cACL,WAAY,oBAAqB,CAAA,yBAAA;AAAA,cACjC,QAAW,EAAA,WAAA;AAAA,cACX,OAAU,EAAA,WAAA;AAAA,cACV,KAAQ,EAAA,QAAA;AAAA,cACR,QAAW,EAAA,CAAA;AAAA,cACX,UAAW,aAAc,CAAA,MAAA;AAAA,cACzB,IAAO,EAAA,CAAA;AAAA,cACP,aAAA,EAAe,EAAE,KAAA,EAAO,SAAU,EAAA;AAAA,cAClC,eAAkB,EAAA,IAAA;AAAA,cAClB,SAAW,EAAA;AAAA,gBACT,KAAO,EAAA;AAAA,kBACL,WAAW,oBAAqB,CAAA;AAAA,iBAClC;AAAA,gBACA,KAAO,EAAA;AAAA,kBACL,WAAW,oBAAqB,CAAA,mBAAA;AAAA,kBAChC,SAAW,EAAA;AAAA;AACb;AACF;AAAA;AACF;AAAA;AACF;AAAA,GAEJ,EAAA,CAAA;AAEJ;ACnJA,IAAM,YAAA,GAAe,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,4XAAA,EAA6X,CAAE,EAAA,CAAA;AAC3hB,IAAO,kBAAQ,GAAA,YAAA;ACiBR,IAAM,uBAA0B,GAAA,CAAC,EAAE,OAAA,EAA0C,KAAA;AAClF,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,+BAA4B,CAAA;AACtF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,OAAA,GAAU,CAAC,KAAmB,KAAA;AAClC,IAAA,QAAA,CAAS,aAAc,CAAA;AAAA,MACrB,GAAA,EAAA,UAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAGF,IAAA,IAAI,CAAC,KAAA,EAAgB,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,GACzC;AAEA,EAAA,uBACEA,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACVF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAQ,UAAO,CAAA,MAAA,CAAO,QAAS,CAAA,OAAA;AAAA,MAC/B,OAAU,EAAA,kBAAA;AAAA,MACV,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,UAAA,gBAA6B,CAAA,QAAA;AAAA,MACxD,EAAA,EAAA,UAAA;AAAA,MACA,QAAW,EAAA,MAAM,OAAQ,CAAA,CAAC,aAAa,MAAM;AAAA;AAAA,sBAE/CA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAa,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,UAAA,gBAA6B,CAAA,UAAA;AAAA,MAC1D,YAAA,EAAa,UAAO,CAAA,MAAA,CAAO,QAAS,CAAA,OAAA;AAAA,MACpC,SAAU,EAAA,QAAA;AAAA,MACV,YAAA,EAAe,UAAO,CAAA,MAAA,CAAO,QAAS,CAAA,OAAA;AAAA,MACtC,OAAU,EAAA,MAAM,OAAQ,CAAA,CAAC,aAAa,MAAM,CAAA;AAAA,MAE5C,0BAAAA,GAAC,CAAA,kBAAA,EAAA,EAAS,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAGrD,EAAA,CAAA;AAEJ;ACpBO,IAAM,4BAA4B,CAAC;AAAA,EACxC;AACF,CAAoC,KAAA;AAClC,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,uBAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA;AAAA,IACA,2BAAA;AAAA,IACA;AAAA,MACE,iBAAkB,EAAA;AACtB,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAM,MAAA,EAAE,qBAAsB,EAAA,GAAI,UAAW,EAAA;AAC7C,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,iBAAiB,CAAA;AACvE,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,+BAA4B,CAAA;AACtF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,YAAA,GAAe2B,QAAQ,MAAM;AACjC,IAAA,OAAO,QAAQ,eAAkB,GAAA,kBAAA;AAAA,GAChC,EAAA,CAAC,KAAO,EAAA,eAAA,EAAiB,kBAAkB,CAAC,CAAA;AAE/C,EAAA,MAAM,UAAU,UAAiC,CAAA,UAAA,gBAAA;AACjD,EAAA,MAAM,YAAY,OAAQ,CAAA,SAAA;AAE1B,EAAM,MAAA,OAAA,GAAU,CAAC,KAAmB,KAAA;AAClC,IAAA,QAAA,CAAS,aAAc,CAAA;AAAA,MACrB,GAAA,EAAA,UAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAGF,IAAA,IAAI,CAAC,KAAA,EAAgB,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,GACzC;AAEA,EAAM,MAAA,UAAA,GAAaxB,YAAY,MAAM;AACnC,IAAA,QAAA,CAAS,6CAAqD,CAAA;AAAA,GAChE,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,YAAA,GAAeA,WAAY,CAAA,CAAC,GAAgB,KAAA;AAChD,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,oBAAwB,IAAA,uBAAA;AAAA,MACxB,wBAA4B,IAAA;AAAA,MAC5B,IAAK,EAAA;AAEP,IAAO,OAAA,YAAA,CAAa,SAAS,GAAG,CAAA;AAAA,GAC/B,EAAA,CAAC,oBAAsB,EAAA,wBAAwB,CAAC,CAAA;AAEnD,EAAM,MAAA,eAAA,GAAkBA,WAAY,CAAA,CAAC,GAAgB,KAAA;AACnD,IAAA,MAAM,eAAkB,GAAA;AAAA,MACtB,uBAA2B,IAAA,0BAAA;AAAA,MAC3B,2BAA+B,IAAA;AAAA,MAC/B,IAAK,EAAA;AAEP,IAAO,OAAA,eAAA,CAAgB,SAAS,GAAG,CAAA;AAAA,GAClC,EAAA,CAAC,uBAAyB,EAAA,2BAA2B,CAAC,CAAA;AAEzD,EAAM,MAAA,cAAA,GAAiBA,YAAY,MAAM;AACvC,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAA,MAAA;AACE,QAAO,uBAAAH,IAAC,0BAA2B,EAAA,EAAA,CAAA;AAAA,MAErC,KAAA,SAAA;AACE,QAAO,uBAAAA,IAAC,6BAA8B,EAAA,EAAA,CAAA;AAAA,MAExC,KAAA,SAAA;AAAA,MACA;AACE,QACE,uBAAAA,IAAAE,QAAA,EAAA,EACI,uBAAa,MAAS,GAAA,CAAA,IAAK,qBACzB,GAAA,YAAA,CACC,MAAO,CAAA,CAAC,QAAQ,EAAE,YAAA,CAAa,GAAG,CAAK,IAAA,eAAA,CAAgB,GAAG,CAAE,CAAA,CAAA,CAC5D,GAAI,CAAA,CAAC,GAAQ,KAAA;AACZ,UAAM,MAAA,KAAA,GAAQ,sBAAsB,GAAG,CAAA;AACvC,UAAA,IAAI,CAAC,KAAO,EAAA;AACV,YAAQ,OAAA,CAAA,IAAA,CAAK,CAAgB,YAAA,EAAA,GAAI,CAAkE,gEAAA,CAAA,CAAA;AACnG,YAAO,OAAA,IAAA;AAAA;AAET,UAAO,uBAAAF,IAAC,KAAM,CAAA,IAAA,EAAN,EAAyB,GAAG,KAAA,CAAM,SAAjB,GAAyB,CAAA;AAAA,SACnD,CACD,mBAAAA,GAAAE,CAAAA,QAAAA,EAAA,EAAE,CAER,EAAA,CAAA;AAAA;AAEN,KACC,CAAC,qBAAA,EAAuB,UAAU,YAAc,EAAA,YAAA,EAAc,eAAe,CAAC,CAAA;AAEjF,EAAM,MAAA,UAAA,GAAaC,YAAY,MAAM;AACnC,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAA,MAAA;AACE,QAAO,OAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,IAAK,CAAA,KAAA;AAAA,MAErC,KAAA,SAAA;AACE,QAAO,OAAA,UAAA,CAAO,MAAO,CAAA,QAAA,CAAS,OAAQ,CAAA,KAAA;AAAA,MAExC,KAAA,SAAA;AAAA,MACA;AACE,QAAO,OAAA,UAAA,CAAO,OAAO,QAAS,CAAA,OAAA;AAAA;AAClC,GACF,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,gBAAA,GAAmBA,YAAY,MAAM;AACzC,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAA,MAAA;AACE,QAAO,OAAA,OAAA,CAAQ,SAAS,IAAM,EAAA,MAAA,IAAA,OAAA;AAAA,MAEhC,KAAA,SAAA;AACE,QAAO,OAAA,OAAA,CAAQ,SAAS,OAAS,EAAA,MAAA,IAAA,OAAA;AAAA,MAEnC,KAAA,SAAA;AAAA,MACA;AACE,QAAA,OAAA,OAAA;AAAA;AACJ,GACF,EAAG,CAAC,QAAU,EAAA,OAAA,CAAQ,SAAS,OAAS,EAAA,OAAA,CAAQ,QAAS,CAAA,IAAI,CAAC,CAAA;AAEhE,EAAAQ,UAAU,MAAM;AACd,IAAM,MAAA,YAAA,GAAe,CAAC,KAAyB,KAAA;AAC7C,MAAI,IAAA,KAAA,CAAM,GAAQ,KAAA,QAAA,IAAY,QAA8C,KAAA,SAAA,gBAAA;AAC1E,QAAA,QAAA,CAAS,6CAAqD,CAAA;AAAA;AAChE,KACF;AAEA,IAAS,QAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,YAAA,EAAc,IAAI,CAAA;AAEvD,IAAA,OAAO,MAAM;AACX,MAAS,QAAA,CAAA,mBAAA,CAAoB,SAAW,EAAA,YAAA,EAAc,IAAI,CAAA;AAAA,KAC5D;AAAA,GACC,EAAA,CAAC,QAAU,EAAA,QAAQ,CAAC,CAAA;AAIrB,EAAAA,UAAU,MAAM;AACd,IAAI,IAAA,CAAC,WAAa,EAAA,MAAA,EAAmB,UAAA,EAAA;AAAA,GACpC,EAAA,CAAC,WAAa,EAAA,MAAA,EAAQ,UAAU,CAAC,CAAA;AAEpC,EAAA,uBACEX,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAa,EAAA;AAAA,QACX,EAAA,EAAA,UAAA;AAAA,QACA,UAAA;AAAA,QACA,SAAS,UAAW,EAAA;AAAA,QACpB,eAAe,gBAAiB,EAAA;AAAA,QAChC,WAAWC,eAAe,CAAA,cAAA;AAAA,QAC1B,SAAW,EAAA,QAAA;AAAA,QACX,MAAA,EAAQ,aAAa,MAAU,IAAA,KAAA;AAAA,QAC/B,YAAc,EAAA,OAAA;AAAA,QACd,cAAc,MAAM;AAAE,UAA+C,QAAA,KAAA,SAAA,iBAAA,OAAA,CAAQ,KAAK,CAAA,GAAI,UAAW,EAAA;AAAA,SAAE;AAAA,QACnG,MAAA,EAAQ,QAAQ,SAAU,EAAA;AAAA,QAC1B,UAAY,EAAA,QAAA;AAAA,QACZ,qBAAuB,EAAA,QAAA,KAAA,SAAA;AAAA,OACzB;AAAA,MAEE,QAAe,EAAA,cAAA;AAAA;AAAA,GAEnB,EAAA,CAAA;AAEJ;ACjMA,IAAM,MAAA,GAAS,2BAASD,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,oXAAA,EAAqX,CAAE,EAAA,CAAA;AAC7gB,IAAO,WAAQ,GAAA,MAAA;ACiBR,IAAM,kBAAqB,GAAA,CAAC,EAAE,OAAA,EAA0C,KAAA;AAC7E,EAAA,MAAM,UAAU,cAAe,EAAA;AAC/B,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,qBAAuB,CAAA;AACjF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,OAAA,GAAU,CAAC,KAAmB,KAAA;AAClC,IAAA,QAAA,CAAS,aAAc,CAAA;AAAA,MACrB,GAAA,EAAA,KAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAAA,GACJ;AAEA,EAAA,uBACEA,GAAAE,CAAAA,QAAAA,EAAA,EACG,QAAA,EAAA,OAAA,IAAW,oDACVF,GAAAA;AAAA,IAAC,wBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAQ,UAAO,CAAA,MAAA,CAAO,GAAI,CAAA,OAAA;AAAA,MAC1B,OAAU,EAAA,WAAA;AAAA,MACV,QAAW,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,KAAA,WAAwB,CAAA,QAAA;AAAA,MACnD,EAAA,EAAA,KAAA;AAAA,MACA,QAAW,EAAA,MAAM,OAAQ,CAAA,CAAC,aAAa,MAAM;AAAA;AAAA,sBAE/CA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,UAAa,EAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAA,KAAA,WAAwB,CAAA,UAAA;AAAA,MACrD,YAAA,EAAa,UAAO,CAAA,MAAA,CAAO,GAAI,CAAA,OAAA;AAAA,MAC/B,SAAU,EAAA,QAAA;AAAA,MACV,YAAA,EAAe,UAAO,CAAA,MAAA,CAAO,GAAI,CAAA,OAAA;AAAA,MACjC,OAAU,EAAA,MAAM,OAAQ,CAAA,CAAC,aAAa,MAAM,CAAA;AAAA,MAE5C,0BAAAA,GAAC,CAAA,WAAA,EAAA,EAAQ,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,GAGpD,EAAA,CAAA;AAEJ;ACpDA,IAAM,eAAA,GAAkB,2BAASA,GAAAA,CAAC,SAAI,KAAM,EAAA,4BAAA,EAA6B,MAAO,EAAA,MAAA,EAAO,OAAQ,EAAA,gBAAA,EAAiB,OAAM,MAAO,EAAA,IAAA,EAAK,WAAW,GAAG,KAAA,EAAO,0BAAAA,GAAC,CAAA,MAAA,EAAA,EAAK,CAAE,EAAA,uDAAA,EAAwD,CAAE,EAAA,CAAA;AACzN,IAAO,qBAAQ,GAAA,eAAA;ACiCR,IAAM,oBAAuB,GAAA,CAAC,EAAE,UAAA,EAA+C,KAAA;AACpF,EAAM,MAAA,OAAA,GAAUO,OAA8B,IAAI,CAAA;AAElD,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,QAAQ,CAAA;AACnE,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,SAAS,CAAA;AAChE,EAAA,MAAM,KAAQ,GAAA,SAAA,KAAA,KAAA;AAEd,EAAA,MAAM,cAAc,cAAe,CAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,qBAAuB,CAAA;AACjF,EAAA,MAAM,OAAU,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,OAAO,CAAA;AACjE,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,gBAAA,GAAmB,YAAY,QAAQ,CAAA;AAC7C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIK,SAAS,CAAC,CAAA;AAEpD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,gBAAiB,EAAA;AAEpC,EAAA,MAAM,UAAU,UAA4B,CAAA,KAAA,WAAA;AAC5C,EAAA,MAAM,YAAY,OAAQ,CAAA,SAAA;AAE1B,EAAA,MAAM,EAAE,QAAS,EAAA,GAAI,UAAU,EAAE,WAAA,EAAa,QAAQ,CAAA;AACrD,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAIU,GAAAA,OAAAA,CAAM,SAAS,EAAE,CAAA;AACvD,EAAM,MAAA,cAAA,GAAiBA,OAAM,CAAA,MAAA,CAAyB,IAAI,CAAA;AAE1D,EAAM,MAAA,aAAA,GAAgB,CAAC,KAAA,EAAkBM,YAAmC,KAAA;AAC1E,IAAA,IAAI,CAACA,YAAa,EAAA;AAChB,MAAO,OAAA,KAAA;AAAA;AAGT,IAAM,MAAA,eAAA,GAAkB,CAACC,MAAgC,KAAA;AACvD,MAAA,OAAOA,MAAM,CAAA,MAAA,CAAO,CAAC,GAAA,EAAgB,IAAkB,KAAA;AACrD,QAAA,IAAI,KAAK,KAAS,IAAA,QAAA,CAAS,IAAK,CAAA,KAAA,EAAOD,YAAW,CAAG,EAAA;AACnD,UAAA,GAAA,CAAI,KAAK,EAAE,GAAG,IAAM,EAAA,QAAA,EAAU,QAAW,CAAA;AAAA;AAE3C,QAAA,IAAI,KAAK,QAAU,EAAA;AACjB,UAAA,GAAA,CAAI,IAAK,CAAA,GAAG,eAAgB,CAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA;AAE5C,QAAO,OAAA,GAAA;AAAA,OACT,EAAG,EAAE,CAAA;AAAA,KACP;AAEA,IAAM,MAAA,MAAA,GAAS,gBAAgB,KAAK,CAAA;AACpC,IAAA,OAAO,MAAO,CAAA,GAAA,CAAI,CAAC,IAAA,EAAe,WAAmB,EAAE,GAAG,IAAM,EAAA,GAAA,EAAK,GAAG,IAAK,CAAA,EAAE,CAAI,CAAA,EAAA,KAAK,IAAK,CAAA,CAAA;AAAA,GAC/F;AAEA,EAAA,MAAM,gBAAmB,GAAA,aAAA,CAAc,OAAW,IAAA,IAAI,WAAW,CAAA;AAEjE,EAAM,MAAA,OAAA,GAAUzB,WAAY,CAAA,CAAC,KAAmB,KAAA;AAC/C,IAAI,IAAA,CAAC,KAAO,EAAA,cAAA,CAAe,EAAE,CAAA;AAE7B,IAAA,QAAA,CAAS,aAAc,CAAA;AAAA,MACrB,GAAA,EAAA,KAAA;AAAA,MACA,MAAQ,EAAA;AAAA,KACT,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,QAAU,EAAA,cAAc,CAAC,CAAA;AAE7B,EAAM,MAAA,YAAA,GAAe,CAAC,IAAoB,KAAA;AACxC,IAAA,IAAI,SAAS,KAAS,IAAA,CAAC,IAAQ,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AAEhD,IAAA,MAAM,GAAM,GAAA,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;AAEvB,IAAA,MAAM,EAAK,GAAA,QAAA,CAAS,aAAc,CAAA,CAAA,UAAA,EAAa,GAAG,CAAG,CAAA,CAAA,CAAA;AACrD,IAAM,MAAA,IAAA,GAAO,EAAI,EAAA,YAAA,CAAa,WAAW,CAAA;AAEzC,IAAA,IAAI,CAAC,IAAM,EAAA;AAEX,IAAA,MAAM,IAAa,GAAA,IAAI,IAAK,CAAA,EAAE,MAAY,CAAA;AAE1C,IAAA,MAAM,EAAK,GAAA,WAAA,EAAa,MACrB,KAAA,SAAA,KAAA,cAAA,sBAA0C,8CACvC,MAAM;AACN,MAAS,QAAA,CAAA,WAAA,CAAY,GAAG,CAAC,CAAA;AACzB,MAAS,QAAA,CAAA,YAAA,CAAa,IAAI,CAAC,CAAA;AAC3B,MAAS,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAAA,QAE3B,MAAM;AACN,MAAS,QAAA,CAAA,WAAA,CAAY,GAAG,CAAC,CAAA;AACzB,MAAS,QAAA,CAAA,YAAA,CAAa,IAAI,CAAC,CAAA;AAC3B,MAAS,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAC3B,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,KACf;AAEJ,IAAO,MAAA,CAAA,IAAA,EAAM,MAAM,EAAE,CAAA;AAAA,GACvB;AAIA,EAAAQ,UAAU,MAAM;AACd,IAAA,IAAI,aAAa,MAAW,KAAA,CAAC,WAAa,EAAA,OAAA,IAAW,aAAa,OAAsC,KAAA,kBAAA,iBAAA,EAAA;AACtG,MAAM,MAAA,YAAA,GAAe,CAAC,KAAyB,KAAA;AAC7C,QAAK,IAAA,CAAC,gBAAgB,cAAe,CAAA,OAAO,KAAK,CAAC,WAAA,IAAgB,KAAM,CAAA,GAAA,KAAQ,QAAW,EAAA;AACzF,UAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACf,OACF;AAEA,MAAS,QAAA,CAAA,gBAAA,CAAiB,SAAW,EAAA,YAAA,EAAc,IAAI,CAAA;AAEvD,MAAA,OAAO,MAAM;AACX,QAAS,QAAA,CAAA,mBAAA,CAAoB,SAAW,EAAA,YAAA,EAAc,IAAI,CAAA;AAAA,OAC5D;AAAA;AACF,GACC,EAAA,CAAC,WAAa,EAAA,OAAA,EAAS,WAAW,CAAC,CAAA;AAMtC,EAAAA,UAAU,MAAM;AACd,IAAA,IAAA,CACK,SAA0C,KAAA,cAAA,sBAAA,SAAA,KAAA,YAAA,qBAC3C,QAAa,KAAA,MAAA,IACb,qBAAqB,MACrB,EAAA;AACF,MAAiB,gBAAA,CAAA,IAAA,CAAK,QAAQ,CAAA;AAAA;AAChC,GACC,EAAA,CAAC,SAAW,EAAA,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAE1C,EAAM,MAAA,gBAAA,GAAmB,CAAC,IAAA,EAAemB,SAA+B,KAAA;AACtE,IAAI,IAAA,IAAA,CAAK,YAAYA,SAAU,EAAA;AAC7B,MAAO,OAAA,IAAA,CAAK,QAAS,CAAA,IAAA,CAAK,CAAS,KAAA,KAAA,KAAA,CAAM,OAAOA,SAAY,IAAA,gBAAA,CAAiB,KAAOA,EAAAA,SAAQ,CAAC,CAAA;AAAA;AAE/F,IAAO,OAAA,KAAA;AAAA,GACT;AAEA,EAAA,uBACE9B,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAa,EAAA;AAAA,QACX,EAAA,EAAA,KAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA,EAAS,UAAO,CAAA,MAAA,CAAO,GAAI,CAAA,OAAA;AAAA,QAC3B,WAAW,SAAU,CAAA,GAAA;AAAA,QACrB,SAAW,EAAA,QAAA;AAAA,QACX,MAAA,EAAQ,aAAa,MAAU,IAAA,KAAA;AAAA,QAC/B,YAAc,EAAA,OAAA;AAAA,QACd,YAAA,EAAc,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,QACjC,MAAA,EAAQ,QAAQ,SAAU,EAAA;AAAA,QAC1B,cAAgB,EAAA;AAAA,OAClB;AAAA,MAEE,qBAAW,OAAQ,CAAA,MAAA,GAAS,oBAC3Bc,IAAAA,CAAAZ,UAAA,EACD,QAAA,EAAA;AAAA,wBAAAF,GAAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,YAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,KAAA;AAAA,YACtC,KAAQ,EAAA,WAAA;AAAA,YACR,QAAW,EAAA,cAAA;AAAA,YACX,OAAA,EAAU,MAAM,cAAA,CAAe,EAAE,CAAA;AAAA,YACjC,WAAY,SAAU,CAAA,SAAA;AAAA,YACtB,SAAW,EAAA;AAAA,cACT,KAAO,EAAA;AAAA,gBACL,WAAW,SAAU,CAAA;AAAA,eACvB;AAAA,cACA,KAAO,EAAA;AAAA,gBACL,GAAK,EAAA,cAAA;AAAA,gBACL,WAAW,SAAU,CAAA,cAAA;AAAA,gBACrB,WAAa,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA;AAAA,eACxC;AAAA,cACA,UAAY,EAAA;AAAA,gBACV,WAAW,SAAU,CAAA,aAAA;AAAA,gBACrB,MAAA,EAAQ,CAAC,CAAC;AAAA,eACZ;AAAA,cACA,WAAa,EAAA;AAAA,gBACX,WAAW,SAAU,CAAA,cAAA;AAAA,gBACrB,YAAY,CAAC;AAAA;AACf;AACF;AAAA,SACF;AAAA,wBACAA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAGC,GAAM,EAAA,OAAA;AAAA,YACN,YAAA,EAAa,UAAO,CAAA,MAAA,CAAO,GAAI,CAAA,OAAA;AAAA,YAC/B,aAAc,EAAA,QAAA;AAAA,YACd,KAAQ,EAAA,gBAAA;AAAA,YACR,WAAY,SAAU,CAAA,OAAA;AAAA,YACtB,iBAAoB,EAAA,YAAA;AAAA,YACpB,mBAAsB,EAAA,QAAA,GAAW,CAAC,QAAQ,IAAI,EAAC;AAAA,YAC/C,YAAe,EAAA,QAAA,GAAW,CAAC,QAAQ,IAAI,EAAC;AAAA,YACxC,mBAAsB,EAAA,OAAA,CACnB,MAAO,CAAA,CAAA,IAAA,KAAQ,gBAAiB,CAAA,IAAA,EAAM,QAAQ,CAAC,CAC/C,CAAA,GAAA,CAAI,CAAQ,IAAA,KAAA,IAAA,CAAK,EAAE,CAAA;AAAA,YAGpB,QAAA,EAAA,SAAS,WAAW,IAAM,EAAA;AAC1B,cAAA,uBACEc,IAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,aAAY,IAAK,CAAA,IAAA;AAAA,kBACjB,WAAY,SAAU,CAAA,WAAA;AAAA,kBACtB,SAAA,EAAY,KAAK,KAAS,IAAA,EAAA;AAAA,kBAE1B,QAAA,EAAA;AAAA,oCAAAA,KAAC,eACG,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAK,2BACFd,GAAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACF,IAAK,EAAA,SAAA;AAAA,0BACL,WAAY,SAAU,CAAA,iBAAA;AAAA,0BACpB,GAAI,QAAQ,EAAE,KAAA,EAAO,EAAE,SAAW,EAAA,YAAA,EAAe,EAAA,GAAqB,EAAC;AAAA,0BAEzE,0BAAAA,GAAC,CAAA,qBAAA,EAAA,EAAQ,aAAY,EAAA,MAAA,EAAO,WAAU,OAAQ,EAAA;AAAA;AAAA,uBAE9C,GAAA,IAAA;AAAA,sCAEJc,IAAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAY,UAAU,eACzB,EAAA,QAAA,EAAA;AAAA,wCAAAd,IAAC,KAAI,EAAA,EAAA,SAAA,EAAY,SAAU,CAAA,oBAAA,EAAyB,eAAK,KAAO,EAAA,CAAA;AAAA,wBAC9D,IAAA,CAAK,4BAAYA,GAAAA,CAAC,SAAI,SAAY,EAAA,SAAA,CAAU,uBAA4B,EAAA,QAAA,EAAA,IAAA,CAAK,QAAU,EAAA;AAAA,uBAC3F,EAAA;AAAA,qBACF,EAAA,CAAA;AAAA,oCACAA,GAAC,CAAA,UAAA,EAAA,EAAW,KAAQ,EAAA,IAAA,CAAK,UACrB,QACJ,EAAA,UAAA,EAAA;AAAA;AAAA;AAAA,eACF;AAAA;AAEJ,WAAA;AAAA,UA1CM;AAAA;AA2CR,OACF,EAAA,CAAA,mBACEA,GAAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAY,UAAU,KAAU,EAAA,QAAA,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,KAAO,EAAA;AAAA;AAAA,GAGlE,EAAA,CAAA;AAEJ;;;ACjOO,IAAM,sBAAsB,MAAgB;AACjD,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,MAAA;AAAA,IACJ,IAAM,EAAA,iBAAA;AAAA,IACN,WAAa,EAAA,mDAAA;AAAA,IACb,OAAS,EAAA,cAAA;AAAA,IACT,UAAY,EAAA;AAAA,MACV,OAAS,EAAA;AAAA,QACP,iCAA4B;AAAA,UAC1B,OAAS,EAAA;AAAA,SACX;AAAA,QACA,yCAAgC;AAAA,UAC9B,OAAS,EAAA,6BAAA;AAAA,UACT,MAAQ,EAAA;AAAA,SACV;AAAA,QACA,6BAA0B;AAAA,UACxB,OAAS,EAAA,uBAAA;AAAA,UACT,MAAQ,EAAA;AAAA,SACV;AAAA,QACA,mBAAqB;AAAA,UACnB,OAAS,EAAA,kBAAA;AAAA,UACT,MAAQ,EAAA;AAAA;AACV,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,2BAA0B;AAAA,UACxB,IAAM,EAAA;AAAA,SACR;AAAA,QACA,iCAA6B;AAAA,UAC3B,IAAM,EAAA,kBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,iCAA6B;AAAA,UAC3B,IAAM,EAAA,kBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,2BAA0B;AAAA,UACxB,IAAM,EAAA,eAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,yBAAyB;AAAA,UACvB,IAAM,EAAA;AAAA,SACR;AAAA,QACA,uCAAgC;AAAA,UAC9B,IAAM,EAAA,qBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,iCAA6B;AAAA,UAC3B,IAAM,EAAA,kBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,2CAAkC;AAAA,UAChC,IAAM,EAAA,uBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,6CAAmC;AAAA,UACjC,IAAM,EAAA,wBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,2CAAkC;AAAA,UAChC,IAAM,EAAA,uBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,qCAA+B;AAAA,UAC7B,IAAM,EAAA;AAAA,SACR;AAAA,QACA,+BAA4B;AAAA,UAC1B,IAAM,EAAA,iBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,+BAA4B;AAAA,UAC1B,IAAM,EAAA;AAAA,SACR;AAAA,QACA,uCAAgC;AAAA,UAC9B,IAAM,EAAA,qBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,uBAAwB;AAAA,UACtB,IAAM,EAAA,aAAA;AAAA,UACN,KAAO,EAAA;AAAA,YACL,WAAa,EAAA;AAAA;AACf,SACF;AAAA,QACA,mCAA8B;AAAA,UAC5B,IAAM,EAAA,mBAAA;AAAA,UACN,IAAM,EAAA;AAAA,SACR;AAAA,QACA,qBAAuB;AAAA,UACrB,IAAM,EAAA;AAAA;AACR;AACF;AACF,GACF;AACF;;;ACnGA,IAAqB,cAArB,MAAiC;AAAA,EACd,SAAA,GAAY,CAAC,SAAS,CAAA;AAAA,EAC/B,UAAyB,EAAC;AAAA,EACjB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EAEjB,WAAA,CAAY,KAAuC,EAAA,WAAA,EAAuD,SAAuB,EAAA;AAC/H,IAAK,IAAA,CAAA,SAAA,CAAU,OAAQ,CAAA,CAAC,MAAW,KAAA;AACjC,MAAC,IAAA,CAAa,OAAO,MAAM,CAAA,GAAK,KAAa,IAAO,GAAA,MAAM,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA,KACtE,CAAA;AACD,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AACnB,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AACjB,IAAK,IAAA,CAAA,SAAA,GAAY,KAAK,iBAAkB,EAAA;AAAA;AAC1C,EAEQ,mBAA6C,GAAA;AACnD,IAAA,OAAO,IAAK,CAAA,KAAA,CAAM,QAAS,EAAA,CAAE,OAAO,gBAAiB,CAAA,QAAA;AAAA;AACvD,EAEQ,iBAAoB,GAAA;AAC1B,IAAA,IAAI,CAAC,IAAA,CAAK,WAAa,EAAA,OAAO,EAAC;AAE/B,IAAA,MAAM,eAA2B,EAAC;AAElC,IAAM,MAAA,YAAA,GAAe,IAAK,CAAA,KAAA,CAAM,QAAS,EAAA,CAAE,WAAY,CAAA,KAAA,GACnD,IAAK,CAAA,WAAA,CAAY,QACjB,GAAA,IAAA,CAAK,WAAY,CAAA,WAAA;AAErB,IAAA,KAAA,MAAW,aAAa,YAAc,EAAA;AACpC,MAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,WAAY,CAAA,IAAA,CAAK,SAAuC,CAAE,CAAA,QAAA;AAEtF,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAM,MAAA,WAAA,GAAc,cAAc,cAAc,CAAA;AAEhD,QAAA,IAAI,aAAa,GAAK,EAAA;AACpB,UAAO,MAAA,CAAA,cAAA,CAAe,YAAc,EAAA,WAAA,CAAY,GAAK,EAAA;AAAA,YACnD,KAAO,EAAA;AAAA,cACL,SAAA;AAAA,cACA,WAAW,WAAY,CAAA;AAAA,aACzB;AAAA,YACA,QAAU,EAAA,KAAA;AAAA,YACV,UAAY,EAAA;AAAA,WACb,CAAA;AAAA;AACH;AACF;AAGF,IAAO,OAAA,YAAA;AAAA;AACT,EAEA,OAAU,GAAA;AACR,IAAA,IAAA,CAAK,QAAQ,OAAQ,CAAA,CAAC,MAAM,IAAK,CAAA,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA;AAC/C,EAEA,UAAU,IAAmB,EAAA;AAC3B,IAAA,IAAI,CAAC,IAAM,EAAA;AACX,IAAK,IAAA,CAAA,SAAA,CAAU,OAAQ,CAAA,CAAC,SAAc,KAAA;AACpC,MAAK,IAAA,CAAA,mBAAA;AAAA,QACH,SAAA;AAAA,QACC,IAAA,CAAa,OAAO,SAAS,CAAA;AAAA,QAC9B;AAAA,OACF;AAAA,KACD,CAAA;AACD,IAAA,IAAA,CAAK,UAAU,IAAK,CAAA,OAAA,CAAQ,OAAO,CAAC,CAAA,KAAM,MAAM,IAAI,CAAA;AAAA;AACtD,EAEA,QAAQ,IAAmB,EAAA;AACzB,IAAA,IAAI,CAAC,IAAM,EAAA;AACX,IAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,QAAS,CAAA,IAAI,CAAG,EAAA;AACjC,IAAK,IAAA,CAAA,SAAA,CAAU,OAAQ,CAAA,CAAC,SAAc,KAAA;AACpC,MAAA,IAAA,CAAK,iBAAiB,SAAY,EAAA,IAAA,CAAa,IAAO,GAAA,SAAS,GAAG,KAAK,CAAA;AAAA,KACxE,CAAA;AACD,IAAK,IAAA,CAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA;AACxB,EAEA,UAAU,CAAkB,EAAA;AAC1B,IAAA,MAAM,WAAc,GAAA,CAAC,oBAAqB,CAAA,QAAA,CAAS,aAAa,CAAA;AAEhE,IAAA,QAAO,EAAE,IAAM;AAAA,MACb,KAAK,OAAA;AACH,QAAA,WAAA,IAAe,IAAK,CAAA,SAAA,CAAU,aAAc,CAAA,CAAA,CAAE,QAAQ,CAAA;AACtD,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAe,WAAA,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,OAAO,CAAA;AAC5C,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAe,WAAA,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,SAAA;AAAA,MACL,KAAK,QAAA;AACH,QAAe,WAAA,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,WAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAe,WAAA,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAe,WAAA,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,MAAM,CAAA;AAC3C,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAe,WAAA,IAAA,IAAA,CAAK,SAAU,CAAA,MAAA,CAAO,KAAK,CAAA;AAC1C,QAAA;AAAA,MACF;AACE,QAAA,IAAI,IAAK,CAAA,SAAA,CAAU,cAAe,CAAA,CAAA,CAAE,IAAI,CAAG,EAAA;AACzC,UAAA,MAAM,iBAAoB,GAAA,IAAA,CAAK,SAAU,CAAA,CAAA,CAAE,IAAI,CAAA;AAC/C,UAAM,MAAA,YAAA,GAAe,MAAO,CAAA,OAAA,CAAQ,iBAAkB,CAAA,SAAS,CAAE,CAAA,KAAA,CAAM,CAAE,CAAC,QAAU,EAAA,KAAK,CAAO,KAAA;AAC9F,YAAA,IAAI,aAAa,aAAe,EAAA;AAC9B,cAAA,OAAO,CAAE,CAAA,IAAA,CAAK,mBAAoB,EAAC,CAAM,KAAA,KAAA;AAAA,aACpC,MAAA;AACL,cAAO,OAAA,CAAA,CAAE,QAAyD,CAAM,KAAA,KAAA;AAAA;AAC1E,WACD,CAAA;AAED,UAAA,IAAI,YAAc,EAAA;AAChB,YAAA,CAAA,CAAE,cAAe,EAAA;AACjB,YAAK,IAAA,CAAA,SAAA,CAAU,YAAa,CAAA,iBAAA,CAAkB,SAAS,CAAA;AAAA;AACxD;AAEH,QAAA;AAAA;AACJ;AAEJ,CAAA;;;AC9HO,SAAS,aAAA,CACd,KACA,EAAA,WAAA,EACA,aACW,EAAA;AACX,EAAO,OAAA,KAAA,CAAM,GAAI,CAAA,CAAC,IAAS,KAAA;AAEzB,IAAA,MAAM,QAAQ,WAAY,EAAA;AAG1B,IAAA,IAAI,OAAO,IAAK,CAAA,IAAA;AAChB,IAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,OAAA,CAAQ,GAAG,CAAA;AACtC,IAAA,IAAI,kBAAkB,EAAI,EAAA;AACxB,MAAA,MAAM,QAAW,GAAA,IAAA,CAAK,SAAU,CAAA,CAAA,EAAG,aAAa,CAAA;AAChD,MAAA,MAAM,aAAgB,GAAA,KAAA,CAAM,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,IAAK,CAAA,UAAA,CAAW,QAAQ,CAAA,IAAK,CAAE,CAAA,IAAA,KAAS,IAAI,CAAA;AACtF,MAAA,IAAI,CAAC,aAAe,EAAA;AAClB,QAAO,IAAA,GAAA,QAAA;AAAA;AACT;AAGF,IAAA,MAAM,QAAoB,GAAA;AAAA,MACxB,EAAI,EAAA,KAAA;AAAA,MACJ,IAAA;AAAA,MACA,OAAO,IAAK,CAAA,KAAA;AAAA,MACZ,QAAA,EAAU,eAAe,IAAK,CAAA,CAAC,aAAa,QAAS,CAAA,IAAA,KAAS,IAAI,CAAA,EAAG,SAAU,CAAA;AAAA,KACjF;AAGA,IAAA,IAAI,KAAK,QAAU,EAAA;AACjB,MAAA,QAAA,CAAS,WAAW,aAAc,CAAA,IAAA,CAAK,QAAS,CAAA,KAAA,EAAO,aAAa,aAAa,CAAA;AAAA;AAGnF,IAAO,OAAA,QAAA;AAAA,GACR,CAAA;AACH;;;ACrDQ,IAAM,oBAAA,GAAuB,CAAC,aAA8B,KAAA;AACjE,EAAO,OAAA,aAAA,EAAe,GAAI,CAAA,CAAC,OAAa,MAAA;AAAA,IACtC,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,MAAM,OAAQ,CAAA,IAAA;AAAA,IACd,SAAW,EAAA;AAAA,MACT,QAAA,EAAU,QAAQ,SAAU,CAAA,QAAA;AAAA,MAC5B,WAAA,EAAa,QAAQ,SAAU,CAAA,WAAA;AAAA,MAC/B,gBAAA,EAAkB,QAAQ,SAAU,CAAA;AAAA;AACtC,GACA,CAAA,CAAA;AACJ,CAAA;AhC4IM,IAAM,iBAAiB,CAAC;AAAA,EAC7B,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EAAI,IAAA,OAAA,IAAW,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AACjC,IAAA,OAAA,CAAQ,QAAQ,CAAU,MAAA,KAAA;AACxB,MAAA,gBAAA,CAAiB,SAAS,MAAM,CAAA;AAAA,KACjC,CAAA;AAAA,GACI,MAAA;AACL,IAAiB,gBAAA,CAAA,QAAA,CAAS,qBAAqB,CAAA;AAAA;AAGjD,EAAA,MAAM,EAAE,YAAA,EAAc,eAAgB,EAAA,GAAI,iBAAkB,EAAA;AAC5D,EAAA,MAAM,UAAU,cAAe,EAAA;AAE/B,EAAM,MAAA,SAAA,GAAYO,OAAuB,IAAI,CAAA;AAC7C,EAAM,MAAA,WAAA,GAAcA,OAA2B,IAAI,CAAA;AACnD,EAAA,MAAM,YAAeA,GAAAA,MAAAA,CAAO,CAAG,EAAA,QAAQ,CAAmB,iBAAA,CAAA,CAAA;AAC1D,EAAA,MAAM,WAAcA,GAAAA,MAAAA,CAAO,CAAM,IAAA,CAAA,OAAA,CAAQ,OAAQ,CAAA,KAAA,CAAM,IAAQ,IAAA,EAAA,KAAO,OAAQ,CAAA,OAAA,CAAQ,KAAM,CAAA,MAAA,IAAU,CAAG,CAAA,CAAA,CAAA;AAEzG,EAAA,MAAM,KAAQ,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,aAAa,CAAA;AAC7E,EAAA,MAAM,OAAU,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,OAAO,CAAA;AACjE,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,QAAQ,CAAA;AAEnE,EAAA,MAAM,QAAW,GAAA,KAAA,GACb,OAAQ,CAAA,OAAA,CAAQ,OAAO,EAAI,EAAA,GAAA,IAAA,YAAA,iBAAA,YAAA;AAG/B,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,SAAS,CAAA;AAClE,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AACtE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,QAAW,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAChE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,OAAU,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,OAAO,CAAA;AAC9D,EAAA,MAAM,cAAiB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,cAAc,CAAA;AAC5E,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,aAAa,CAAA;AAC1E,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AACpE,EAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAC9E,EAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,gBAAgB,CAAA;AAChF,EAAA,MAAM,eAAkB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,eAAe,CAAA;AAC9E,EAAA,MAAM,MAAS,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAC5D,EAAA,MAAM,UAAU,CAAC,MAAA;AACjB,EAAA,MAAM,iBAAoB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,iBAAiB,CAAA;AAClF,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,SAAS,WAAW,CAAA;AACtE,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC/D,EAAA,MAAM,KAAQ,GAAA,KAAA,GAAQ,WAAY,CAAA,GAAA,GAAM,WAAY,CAAA,MAAA;AACpD,EAAM,MAAA,aAAA,GAAgB,YAAY,KAAK,CAAA;AACvC,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,WAAW,CAAA;AACrE,EAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,oBAAoB,CAAA;AAEhF,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,QAAQ,UAAU,CAAA;AACnE,EAAM,MAAA,iBAAA,GAAoB,eACvB,UAAsC,KAAA,OAAA,gBAAA,UAAA,KAAA,QAAA,cAAA;AAEzC,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,WAAW,CAAA;AACpE,EAAA,MAAM,UAAa,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,OAAO,UAAU,CAAA;AAGlE,EAAyB,UAAA,CAAA;AAAA,IACvB,KAAA;AAAA,IACA,SAAA,EAAW,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,IAClC,UAAA,EAAY,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA;AAAA,IACnC,cAAA,EAAgB,QAAQ,OAAQ,CAAA,WAAA;AAAA,IAChC,SAAW,EAAA;AAAA,MACT,GAAG,cAAA,CAAe,OAAQ,CAAA,OAAA,CAAQ,OAAO,OAAO,CAAA;AAAA,MAChD,GAAG,cAAA,CAAe,OAAQ,CAAA,OAAA,CAAQ,MAAM,MAAM,CAAA;AAAA,MAC9C,GAAG,cAAA,CAAe,OAAQ,CAAA,OAAA,CAAQ,QAAQ,QAAQ;AAAA,KACpD;AAAA,IACA,oBAAoB,CAACwB,WAAAA,KAAe,QAAS,CAAA,aAAA,CAAcA,WAAU,CAAC,CAAA;AAAA,IACtE,qBAAqB,CAACC,YAAAA,KAAgB,QAAS,CAAA,cAAA,CAAeA,YAAW,CAAC,CAAA;AAAA,IAC1E,kBAAkB,CAAC,QAAA,KAAa,QAAS,CAAA,WAAA,CAAY,QAAQ,CAAC,CAAA;AAAA,IAC9D,sBAAsB,CAAC,YAAA,KAAiB,QAAS,CAAA,eAAA,CAAgB,YAAY,CAAC,CAAA;AAAA,IAC9E,oBAAoB,CAAC,YAAA,KAAiB,QAAS,CAAA,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,IAC1E,uBAAuB,CAACC,cAAAA,KAAkB,QAAS,CAAA,gBAAA,CAAiBA,cAAa,CAAC,CAAA;AAAA,IAClF,6BAA6B,CAAC,mBAAA,KAAwB,QAAS,CAAA,sBAAA,CAAuB,mBAAmB,CAAC;AAAA,GAC3G,CAAA;AAID,EAAA,MAAM,QAAQ1B,MAAuB,CAAA;AAAA,IACnC,QAAA;AAAA,IACA,WAAA;AAAA,IACA,mBAAmB,iBAAqB,IAAA,KAAA;AAAA,IACxC,QAAU,EAAA;AAAA,MACR,WAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA;AAAA,IACA,aAAA,EAAe,iBAAiB,EAAC;AAAA,IACjC,WAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,kBAAqB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,kBAAkB,CAAA;AACvF,EAAA,MAAM,gBAAmB,GAAA,cAAA,CAAe,CAAS,KAAA,KAAA,KAAA,CAAM,YAAY,gBAAgB,CAAA;AAEnF,EAAA,MAAM,WAAW,cAAe,EAAA;AAEhC,EAAM,MAAA,UAAA,GAAaJ,WAAY,CAAA,CAAC,YAA0B,KAAA;AACtD,IAAS,QAAA,CAAA,aAAA,CAAc,YAAY,CAAC,CAAA;AAAA,GACtC,EAAG,CAAC,QAAQ,CAAC,CAAA;AACf,EAAM,MAAA,EAAA,GAAK,cAAc,UAAU,CAAA;AAEnC,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,MACE,gBAAiB,EAAA;AAErB,EAAM,MAAA,yBAAA,GAA4BA,YAAY,MAAM;AAClD,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,aAAsB,QAAA,CAAA,YAAA,CAAa,IAAI,CAAC,CAAA;AAAA,GAC7D,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAM,MAAA,iBAAA,GAAoBA,YAAY,MAAM;AAE1C,IAAS,QAAA,CAAA,WAAA,CAAY,KAAK,CAAC,CAAA;AAC3B,IAAS,QAAA,CAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AACzB,IAAA,QAAA,CAAS,iBAAiB,CAAA;AAAA,GAC5B,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAQ,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,QAAQ,WAAc,GAAA,WAAA;AAAA,GAC9B,EAAG,CAAC,WAAW,CAAC,CAAA;AAIhB,EAAM,MAAA,SAAA,GAAY,CAAC,KAA2B,KAAA;AAC5C,IAAA,MAAM,WAAW,UAAW,EAAA;AAC5B,IAAA,IAAI,QAAY,IAAA,CAAC,KAAM,CAAA,OAAA,CAAQ,SAAS,MAAQ,EAAA;AAC9C,MAAM,MAAA,UAAA,GAAA,CAAe,SAAS,MAAW,KAAA,CAAA,GAAI,SAAS,CAAC,CAAA,CAAG,OAAO,UAAa,GAAA,QAAA,CAAS,CAAC,CAAG,CAAA,MAAA,CAAO,aAAa,QAAU,CAAA,CAAC,EAAG,MAAO,CAAA,UAAA,IAAc,OAAO,gBAAoB,GAAA,CAAA;AAE7K,MAAI,IAAA,KAAA,CAAM,IAAI,UAAY,EAAA;AACxB,QAAA,MAAA,CAAO,CAAC,KAAA,CAAM,OAAQ,CAAA,aAAA,EAAe,yBAAyB,CAAA;AAAA,OAEvD,MAAA,IAAA,KAAA,CAAM,CAAI,GAAA,UAAA,GAAa,CAAG,EAAA;AACjC,QAAA,OAAA,CAAQ,CAAC,KAAA,CAAM,OAAQ,CAAA,aAAA,EAAe,yBAAyB,CAAA;AAAA,iBACtD,UAAc,IAAA,KAAA,CAAM,KAAK,KAAM,CAAA,CAAA,IAAK,aAAa,CAAG,EAAA;AAC7D,QAAkB,iBAAA,EAAA;AAAA;AACpB,KACK,MAAA;AACL,MAAkB,iBAAA,EAAA;AAAA;AACpB,GACF;AAEA,EAAM,MAAA,iBAAA,GAAoBR,WAAY,CAAA,CAAC,OAAqB,KAAA;AAC1D,IAAA,MAAM,cAAc,OAAQ,CAAA,KAAA,IAAS,UAAO,CAAA,MAAA,CAAO,IAAI,WAAY,CAAA,iBAAA;AAEnE,IAAA,QAAA,CAAS,cAAgB,CAAA;AAAA,MACvB,kBAAkB,gBAAiB,EAAA;AAAA,MACnC,mBAAA,EAAqB,QAAQ,SAAU,CAAA,WAAA;AAAA,MACvC,cAAgB,EAAA,WAAA;AAAA,MAChB,gBAAA,EAAkB,QAAQ,SAAU,CAAA;AAAA,KACrC,CAAC,CAAA;AAAA,GACD,EAAA,CAAC,QAAU,EAAA,gBAAgB,CAAC,CAAA;AAE/B,EAAM,MAAA,mBAAA,GAAsBA,WAAY,CAAA,CAAC,OAAsB,KAAA;AAC7D,IAAA,IAAI,CAAC,OAAS,EAAA;AAEd,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAM,MAAA,SAAA,GAAY,CAAC,KAAA,EAAkB,IAAqC,KAAA;AACxE,QAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,UAAI,IAAA,IAAA,CAAK,IAAS,KAAA,IAAA,EAAM,IAAM,EAAA;AAC5B,YAAO,OAAA,IAAA;AAAA;AAET,UAAA,IAAI,KAAK,QAAU,EAAA;AACjB,YAAA,MAAM,KAAQ,GAAA,SAAA,CAAU,IAAK,CAAA,QAAA,EAAU,IAAI,CAAA;AAC3C,YAAA,IAAI,KAAO,EAAA;AACT,cAAO,OAAA,KAAA;AAAA;AACT;AACF;AAEF,QAAO,OAAA,MAAA;AAAA,OACT;AAGA,MAAM,MAAA,YAAA,GAAe,UAAU,KAAM,CAAA,OAAA,CAAQ,SAAS,IAAI+B,IAAAA,CAAK,OAAO,CAAC,CAAA;AACvE,MAAA,IAAI,YAAc,EAAA;AAChB,QAAS,QAAA,CAAA,WAAA,CAAY,YAAa,CAAA,EAAE,CAAC,CAAA;AACrC,QAAA;AAAA;AAIF,MAAI,IAAA,SAAA,EAAgB,KAAA,UAAA,CAAW,KAAO,EAAA;AACpC,QAAA,MAAM,YAAY,gBAAiB,EAAA;AACnC,QAAI,IAAA,SAAA,IAAa,SAAU,CAAA,MAAA,KAAW,CAAG,EAAA;AAEvC,UAAM,MAAA,aAAA,GAAgB,SAAU,CAAA,CAAC,CAAM,KAAA,OAAA,CAAQ,SAAU,CAAA,QAAA,GAAW,SAAU,CAAA,CAAC,CAAI,GAAA,SAAA,CAAU,CAAC,CAAA;AAG9F,UAAM,MAAA,mBAAA,GAAsB,KAAM,CAAA,OAAA,CAAQ,aAAc,CAAA,IAAA,CAAK,CAAC,GAAiB,KAAA,GAAA,CAAI,SAAU,CAAA,QAAA,KAAa,aAAa,CAAA;AACvH,UAAA,IAAI,mBAAqB,EAAA;AACvB,YAAM,MAAA,KAAA,GAAQ,UAAU,KAAM,CAAA,OAAA,CAAQ,SAAS,IAAIA,IAAAA,CAAK,mBAAmB,CAAC,CAAA;AAC5E,YAAA,IAAI,KAAO,EAAA;AACT,cAAS,QAAA,CAAA,WAAA,CAAY,KAAM,CAAA,EAAE,CAAC,CAAA;AAC9B,cAAA;AAAA;AACF;AACF;AACF;AACF;AACF,GACC,EAAA,CAAC,QAAU,EAAA,gBAAA,EAAkB,SAAS,CAAC,CAAA;AAK1C,EAAM,MAAA,oBAAA,GAAuB/B,WAAY,CAAA,CAAC,OAAqB,KAAA;AAC7D,IAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,IAAA,mBAAA,CAAoB,OAAO,CAAA;AAC3B,IAAU,SAAA,CAAA,GAAA,CAAI,YAAa,CAAA,OAAA,EAAS,OAAO,CAAA;AAAA,GAC1C,EAAA,CAAC,iBAAmB,EAAA,mBAAmB,CAAC,CAAA;AAE3C,EAAA,mBAAA,CAAoB,oBAAoB,CAAA;AAExC,EAAA,MAAM,iBAAiB,YAAY;AACjC,IAAI,IAAA,SAAA,EAAgB,KAAA,UAAA,CAAW,KAAO,EAAA;AAGpC,MAAA,MAAM,OAAO,cAAe,EAAA;AAC5B,MAAA,IAAI,IAAM,EAAA;AACR,QAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA;AAC1B,KACI,MAAA;AAGL,MAAwB,uBAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAA;AAAA;AACvD,GACF;AAEA,EAAA,MAAM,IAAI,IAAI,WAAA,CAAY,WAAY,EAAA,EAAG,QAAQ,OAAS,EAAA;AAAA,IACxD,MAAA,EAAQ,CAAC,SAAc,KAAA;AACrB,MAAA,QAAO,SAAW;AAAA,QAChB,KAAK,OAAA;AACH,UAAI,IAAA,CAAC,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,UAAgB,CAAC,KAAA,CAAM,OAAQ,CAAA,aAAA,EAAe,yBAAyB,CAAA;AACnG,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAI,IAAA,CAAC,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,SAAe,CAAC,KAAA,CAAM,OAAQ,CAAA,aAAA,EAAe,yBAAyB,CAAA;AAClG,UAAA;AAAA,QACF,KAAK,IAAA;AAAA,QACL,KAAK,MAAA;AAEH,UAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,EAAkC,yBAAA,EAAA;AAC7D,UAAA;AAAA,QACF,KAAK,MAAA;AAAA,QACL,KAAK,KAAA;AAEH,UAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,EAAkC,yBAAA,EAAA;AAC7D,UAAA;AAEA;AACJ,KACF;AAAA,IACA,aAAA,EAAe,CAAC,QAAa,KAAA;AAC3B,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,QAAA,EAAU,MAAQ,EAAA;AACnC,QAAA,QAAA,GACI,UAAW,CAAA,CAAC,KAAM,CAAA,OAAA,CAAQ,aAAe,EAAA,yBAAyB,CAClE,GAAA,SAAA,CAAU,CAAC,KAAA,CAAM,OAAQ,CAAA,aAAA,EAAe,yBAAyB,CAAA;AAAA,OAChE,MAAA;AACL,QAA0B,yBAAA,EAAA;AAAA;AAC5B,KACF;AAAA,IACA,YAAA,EAAc,CAAC,SAAc,KAAA;AAC3B,MAAA,QAAQ,SAAW;AAAA,QACjB,KAAA,YAAA;AACE,UAAA,EAAA,CAAG,gBAAiB,EAAA;AACpB,UAAA;AAAA,QACF,KAAA,UAAA;AAAA,QACA,KAAA,KAAA;AACE,UAAA,QAAA,CAAS,gBAAiB,CAAA;AAAA,YACxB,GAAK,EAAA;AAAA,WACN,CAAC,CAAA;AACF,UAAA;AAGA;AACJ;AACF,GACD,CAAA;AAED,EAAA,MAAM,SAAoC,GAAA;AAAA,IACxC,WAAA,EAAa,eAAgB,IAA6B,EAAA;AACxD,MAAA,MAAM,cAAe,EAAA;AAGrB,MAAA,MAAM,WAAW,UAAW,EAAA;AAC5B,MAAU,QAAA,EAAA,OAAA;AAAA,QACR,CAAC,YAA6D,KAAA;AAC5D,UAAA,IAAI,YAAc,EAAA,CAAA,CAAE,OAAQ,CAAA,YAAA,CAAa,MAAM,CAAA;AAAA;AACjD,OACF;AACA,MAAA,CAAA,CAAE,QAAQ,MAAM,CAAA;AAAA,KAClB;AAAA,IACA,eAAA,EAAiB,eAAgB,OAAiC,EAAA;AAChE,MAAA,MAAMgC,eAAiB,GAAA,SAAA,CAAU,GAAI,CAAA,YAAA,CAAa,OAAO,CAAA;AACzD,MAAIA,IAAAA,eAAAA,EAAgB,IAAS,KAAA,OAAA,CAAQ,IAAM,EAAA;AACzC,QAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA;AAQ7B,MAAI,IAAA,SAAA,EAAgB,KAAA,UAAA,CAAW,UAAY,EAAA;AAGzC,QAAA,MAAM,iCAA6B,eAAAC,CAAAA,OAAAA;AAAA,UACjC,YAAY;AAMV,YAAID,IAAAA,eAAAA,EAAgB,IAAS,KAAA,OAAA,CAAQ,IAAM,EAAA;AACzC,cAAwB,uBAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,MAAM,CAAA;AAAA;AAEvD,YAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,YAAU,SAAA,CAAA,GAAA,CAAI,YAAa,CAAA,OAAA,EAAS,OAAO,CAAA;AAAA,WAC7C;AAAA,UAAG;AAAA,SAAG;AACR,QAA2B,0BAAA,EAAA;AAAA;AAC7B,KACF;AAAA,IACA,GAAA,EAAK,SAAU,EAA8B,EAAA;AAC3C,MAAA,SAAA,CAAU,EAAE,CAAA;AACZ,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,KAAA,EAAO,SAAU,EAA8B,EAAA;AAC7C,MAAC,KAAM,CAAA,OAAA,CAAQ,QAAoC,KAAA,YAAA,kBAAA,SAAA,CAAU,EAAE,CAAA;AAC/D,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IACA,IAAA,EAAM,SAAU,MAAsB,EAAA;AAAA,KAAC;AAAA,IACvC,WAAA,EAAa,SAAU,OAAuB,EAAA;AAAA,KAAC;AAAA,IAC/C,WAAA,EAAa,SAAU,IAAA,EAAc,KAAsB,EAAA;AAAA,KAAC;AAAA,IAC5D,aAAA,EAAe,SAAU,OAA2B,EAAA;AAClD,MAAA,MAAM,OAAO,OAAQ,CAAA,IAAA;AAIrB,MAAI,IAAA,IAAA,CAAK,QAAS,CAAA,gBAAgB,CAAG,EAAA;AACnC,QAAA,IAAI,IAAK,CAAA,QAAA,CAAS,eAAgB,CAAA,IAAI,CAAG,EAAA;AACvC,UAAA,MAAA,CAAO,OAAO,MAAM;AAAE,YAAa,YAAA,CAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,WAAG,CAAA;AAAA,SAClD,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,eAAA,CAAgB,IAAI,CAAG,EAAA;AAC9C,UAAA,OAAA,CAAQ,OAAO,MAAM;AAAE,YAA+B,YAAA,CAAA,KAAA,WAAA;AAAA,WAAG,CAAA;AAAA;AAC3D,iBAEA,IAAK,CAAA,UAAA,CAAW,SAAS,CAAA,IACzB,KAAK,UAAW,CAAA,UAAU,CAC1B,IAAA,IAAA,CAAK,WAAW,SAAS,CAAA,IACzB,IAAK,CAAA,UAAA,CAAW,MAAM,CACtB,EAAA;AACA,QAAI,IAAA,OAAA,CAAQ,SAAS,IAAI,CAAA,GAAA,CAAK,GAAU,MAAA,CAAA,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,OACtD,MAAA;AACL,QAAQ,OAAA,CAAA,IAAA,CAAK,qBAAqB,OAAO,CAAA;AAAA;AAE3C,MAAO,OAAA,KAAA;AAAA,KACT;AAAA,IACA,YAAA,EAAc,SAAU,UAAsC,EAAA;AAAA;AAAC,GACjE;AAEA,EAAM,MAAA,eAAA,GAAkBhC,WAAY,CAAA,OAAO,KAAkB,KAAA;AAC3D,IAAA,MAAM,iBAAkB,CAAA;AAAA,MACtB,UAAY,EAAA;AAAA,KACb,CAAA;AAAA,GACH,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAItB,EAAAQ,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,QAAQ,QAAW,GAAA,QAAA;AAAA,GAC3B,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,MAAS,GAAA,MAAA;AAEhC,IAAM,MAAA,gBAAA,GAAmB,OAAO,KAAkB,KAAA;AAChD,MAAA,MAAM,gBAAgB,KAAK,CAAA;AAAA,KAC7B;AAEA,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,gBAAA,CAAiB,oBAAoB,WAAY,CAAA,OAAA,GAAU,CAAC,CACzD,CAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,KACjB,MAAA;AACL,MAAA,gBAAA,CAAiB,CAAC,CAAA,CACf,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA;AACxB,GACC,EAAA,CAAC,MAAQ,EAAA,iBAAA,EAAmB,eAAe,CAAC,CAAA;AAE/C,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,WAAc,GAAA,WAAA;AAAA,GACvC,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,UAAa,GAAA,UAAA;AAAA,GACtC,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,QAAW,GAAA,QAAA;AAAA,GACpC,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,UAAa,GAAA,UAAA;AAAA,GACtC,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,OAAU,GAAA,OAAA;AAAA,GACnC,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,cAAiB,GAAA,cAAA;AAAA,GAC1C,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,aAAgB,GAAA,aAAA;AAAA,GACzC,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,UAAa,GAAA,UAAA;AAAA,GACtC,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,UAAa,GAAA,UAAA;AAAA,GACtC,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,eAAkB,GAAA,eAAA;AAAA,GAC3C,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,gBAAmB,GAAA,gBAAA;AAAA,GAC5C,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,SAAY,GAAA,SAAA;AAAA,GACrC,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,iBAAoB,GAAA,iBAAA;AAAA,GAC7C,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,KAAQ,GAAA,KAAA;AAAA,GACjC,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,SAAS,WAAc,GAAA,WAAA;AAAA,GACvC,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,aAAgB,GAAA,aAAA,IAAiB,EAAC;AAAA,GAClD,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAAA,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,QAAQ,OAAU,GAAA,OAAA;AAExB,IAAA,IAAI,QAAU,EAAA;AAEd,IAAA,MAAM,aAAyB,GAAA,SAAA,CAAU,GAAI,CAAA,YAAA,CAAa,OAAO,CAAA;AACjE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,mBAAA,CAAoB,aAAa,CAAA;AAAA,KAC5B,MAAA;AACL,MAAM,MAAA,eAAA,GAAkB,UAAU,CAAC,CAAA;AACnC,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAoB,mBAAA,CAAA,IAAI,QAAQ,EAAE,IAAA,EAAM,gBAAgB,IAAM,EAAA,IAAA,EAAM,EAAG,EAAC,CAAC,CAAA;AAAA;AAC3E;AACF,GACC,EAAA,CAAC,OAAS,EAAA,QAAA,EAAU,mBAAmB,CAAC,CAAA;AAE3C,EAAAA,UAAU,MAAM;AACd,IAAM,KAAA,CAAA,OAAA,CAAQ,oBAAoB,iBAAqB,IAAA,KAAA;AAAA,GACzD,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAAA,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,QAAQ,aAAgB,GAAA,aAAA;AAAA,GAChC,EAAG,CAAC,aAAa,CAAC,CAAA;AAMlB,EAAAA,UAAU,MAAM;AACd,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,WAAA,KAAgB,WAAa,EAAA;AAC7C,MAAA,KAAA,CAAM,QAAQ,WAAc,GAAA,WAAA;AAAA;AAG9B,IAAA,MAAMD,MAAQ,GAAA,KAAA,GAAQ,WAAY,CAAA,GAAA,GAAM,WAAY,CAAA,MAAA;AAGpD,IAAIA,IAAAA,MAAAA,KAAU,MAAU,IAAA,aAAA,KAAkBA,MAAO,EAAA;AAEjD,IAAA,MAAM,oBAAoB,YAAY;AACpC,MAAM,MAAA,SAAA,GAAY,QAAQ,YAAe,GAAA,eAAA;AACzC,MAAA,MAAM,QAAW,GAAA,SAAA,CAAU,QAASA,CAAAA,MAAY,IAAIA,MAAQ,GAAA,MAAA;AAC5D,MAAA,MAAM,aAAa,gBAA+B,CAAA;AAAA,QAChD,KAAO,EAAA,QAAA;AAAA,QACP,SAAA,EAAW,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,QAClC,YAAA,EAAc,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA;AAAA,QACrC;AAAA,OACD,CAAA;AACD,MAAA,MAAM,kBAAkB,UAAU,CAAA;AAClC,MAAA,QAAA,CAAS,QAAS,CAAA;AAAA,QAChB,GAAA,EAAK,QAAQ,KAAQ,GAAA,QAAA;AAAA,QACrB,KAAO,EAAA;AAAA,OACR,CAAC,CAAA;AAAA,KACJ;AAEA,IAAkB,iBAAA,EAAA,CACf,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,GACrB,EAAA,CAAC,WAAa,EAAA,aAAA,EAAe,OAAQ,CAAA,OAAA,CAAQ,MAAQ,EAAA,YAAA,EAAc,eAAiB,EAAA,WAAA,EAAa,KAAO,EAAA,iBAAA,EAAmB,QAAQ,CAAC,CAAA;AAEvI,EAAAC,UAAU,MAAM;AACd,IAAA,OAAA,CAAQ,SAAa,IAAA,QAAA,CAAS,YAAa,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC7D,IAAS,QAAA,CAAA,mBAAA,CAAoB,mBAAoB,EAAC,CAAC,CAAA;AAAA,GAClD,EAAA,CAAC,OAAQ,CAAA,SAAA,EAAW,QAAQ,CAAC,CAAA;AAEhC,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,mBAAmB,YAAY;AACnC,MAAA,MAAM,eAAgB,CAAA,iBAAA,GAAoB,WAAY,CAAA,OAAA,GAAU,CAAC,CAAA;AAAA,KACnE;AACA,IAAiB,gBAAA,EAAA,CACd,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,GACrB,EAAA,CAAC,iBAAmB,EAAA,eAAe,CAAC,CAAA;AAEvC,EAAAA,UAAU,MAAM;AACd,IAAA,MAAM,OAAmB,GAAA,IAAI,WAAY,CAAA,MAAA,EAAW,QAAQ,CAAA;AAC5D,IAAM,MAAA,QAAA,GAAW,QAAS,CAAA,WAAA,CAAY,WAAW,CAAA;AACjD,IAAA,QAAA,CAAS,YAAY,QAAQ,CAAA;AAE7B,IAAY,WAAA,CAAA,OAAA,GAAU,IAAI,WAAY,CAAA;AAAA,MACpC,QAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,OAAO,WAAY,CAAA,OAAA,CAAQ,SAAS,2BAAgC,KAAA,kBAAA,CAAmB,GAAG,CAAC,CAAA;AACpG,IAAS,QAAA,CAAA,MAAA,CAAO,YAAY,OAAQ,CAAA,QAAA,CAAS,iBAAmB,EAAA,MAAA,KAAW,UAAW,CAAA,KAAK,CAAC,CAAA;AAE5F,IAAA,MAAM,WAAW,WAAY,CAAA,OAAA,CAAQ,QAAS,CAAA,KAAA,CAAM,eAAe,IAAI,CAAA;AAEvE,IAAS,QAAA,CAAA,cAAA,CAAe,QAAQ,CAAC,CAAA;AACjC,IAAA,QAAA,CAAS,cAAe,CAAA,EAAE,kBAAoB,EAAA,QAAA,EAAU,CAAC,CAAA;AAEzD,IAAI0B,IAAAA,cAAAA;AAEJ,IAAA,MAAM,iBAAiB,YAAY;AACjC,MAAAA,cAAgB,GAAA,MAAM,WAAY,CAAA,OAAA,EAAS,qBAAsB,EAAA;AACjE,MAAIA,IAAAA,cAAAA,IAAiBA,cAAc,CAAA,MAAA,GAAS,CAAG,EAAA;AAC7C,QAAA,QAAA,CAAS,eAAgB,EAAE,cAAA,EAAgBA,cAAc,CAAA,MAAA,EAAQ,CAAC,CAAA;AAAA;AAEpE,MAAM,MAAA,yBAAA,GAA4B,qBAAqBA,cAAa,CAAA;AACpE,MAAS,QAAA,CAAA,gBAAA,CAAiB,yBAAyB,CAAC,CAAA;AAAA,KACtD;AAEA,IAAA,cAAA,GACG,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAA,CACnB,KAAK,MAAM;AACV,MAAA,MAAMC,SAAQ,WAAY,CAAA,OAAA,EAAS,SAAS,eAAgB,EAAA,EAAG,WAAW,UAAW,CAAA,KAAA;AAErF,MAAA,MAAM,eAA2B,GAAA,SAAA,CAAU,GAAI,CAAA,YAAA,CAAa,OAAO,CAAA;AAInE,MAAA,IAAI,SAAY,GAAA,CAAA;AAChB,MAAA,MAAM,WAAc,GAAA,MAAM,CAAO,IAAA,EAAA,EAAE,SAAS,CAAA,CAAA;AAC5C,MAAMC,MAAAA,QAAAA,GAAU,cAAc,WAAY,CAAA,OAAA,EAAS,iBAAiB,KAAS,IAAA,EAAI,EAAA,WAAA,EAAaF,cAAa,CAAA;AAC3G,MAAS,QAAA,CAAA,UAAA,CAAWE,QAAO,CAAC,CAAA;AAE5B,MAAA,MAAM,iBAAoB,GAAA,KAAA,CAAM,OAAQ,CAAA,iBAAA,GAAoB,YAAY,OAAU,GAAA,CAAA;AAElF,MAAM,MAAA,SAAA,GAAYD,SAAQ,YAAe,GAAA,eAAA;AACzC,MAAM5B,MAAAA,MAAAA,GAAQ,SAAU,CAAA,QAAA,CAAS,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,KAAY,CAAI,GAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,KAAQ,GAAA,MAAA;AACvG,MAAA,MAAM,aAAa,gBAA+B,CAAA;AAAA,QAChD,KAAOA,EAAAA,MAAAA;AAAA,QACP,SAAA,EAAW,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,IAAA;AAAA,QAClC,YAAA,EAAc,OAAQ,CAAA,OAAA,CAAQ,MAAO,CAAA,YAAA;AAAA,QACrC,WAAA,EAAa,MAAM,OAAQ,CAAA;AAAA,OAC5B,CAAA;AAED,MAAA,MAAM,iBAAoB,GAAA;AAAA,QACxB,+BAAiC,IAAA;AAAA,QACjC,uBAA6B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,OAAA,iBAAkC,kBAA4C,CAAA,OAAA,aAAA;AAAA,QAC5J,yBAA8B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,QAAA,kBAAmC,kBAA6C,CAAA,QAAA,cAAA;AAAA,QAC/J,uBAA6B,OAAA,CAAQ,SAAS,IAAgC,GAAA,YAAA,kBAAA,GAAA,OAAA,iBAAkC,kBAA4C,CAAA,OAAA;AAAA,OAC9J;AAEA,MAAM,MAAA,WAAA,GAAgC4B,MAAQ,GAAA,EAAK,GAAA;AAAA,QACjD,WAAA,EAAa,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,WAAA,KAAgB,MAAS,GAAA,IAAA,GAAO,MAAO,CAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,WAAW,CAAA;AAAA,QAC7G,UAAY,EAAA,iBAAA;AAAA,QACZ,UAAA,EAAY,MAAM,OAAQ,CAAA,QAAA,CAAS,cAAc,wBAAyB,CAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,UAAU,CAAA;AAAA,QAC3G,QAAA,EAAU,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,QAAA;AAAA,QACjC,UAAA,EAAY,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,UAAA;AAAA,QACnC,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,OAAA;AAAA,QAChC,cAAA,EAAgB,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,cAAA;AAAA,QACvC,aAAA,EAAe,MAAM,OAAQ,CAAA,QAAA,CAAS,kBAAkB,MAAY,GAAA,KAAA,CAAM,QAAQ,QAAS,CAAA,aAAA;AAAA,QAC3F,YAAY,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,eAAA,GAC/B,SACA,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,UAAA,KAAe,OACpC,IACA,GAAA,iBAAA,CAAkB,KAAM,CAAA,OAAA,CAAQ,SAAS,UAAU,CAAA;AAAA,QACzD,iBAAmB,EAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,UAAY,EAAA,OAAA;AAAA,QACtD,iBAAmB,EAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,UAAY,EAAA,GAAA,EAAK,UACvD,GAAA,IAAA,GACA,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,UAAA,EAAY,GAAK,EAAA,KAAA;AAAA,QAC5C,iBAAmB,EAAA,KAAA,CAAM,OAAQ,CAAA,QAAA,CAAS,UAAY,EAAA,GAAA,EAAK,UACvD,GAAA,IAAA,GACA,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,UAAA,EAAY,GAAK,EAAA,KAAA;AAAA,QAC5C,eAAA,EAAiB,MAAM,OAAQ,CAAA,QAAA,CAAS,kBAAkB,MAAW,GAAA,KAAA,CAAM,QAAQ,QAAS,CAAA,eAAA;AAAA,QAC5F,gBAAA,EAAkB,MAAM,OAAQ,CAAA,QAAA,CAAS,kBAAkB,MAAW,GAAA,KAAA,CAAM,QAAQ,QAAS,CAAA,gBAAA;AAAA,QAC7F,MAAA,EAAQ,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAA;AAAA,QAC/B,SAAA,EAAW,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,SAAA;AAAA,QAClC,iBAAA,EAAmB,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,iBAAA;AAAA,QAC1C,WAAA,EAAa,MAAM,OAAQ,CAAA,QAAA,CAAS,kBAAkB,MAAY,GAAA,KAAA,CAAM,QAAQ,QAAS,CAAA,WAAA;AAAA,QACzF,GAAG;AAAA,OACL;AAEA,MAAM,MAAA,QAAA,GAA0BA,MAAQ,GAAA,EAAK,GAAA;AAAA,QAC3C,cAAA,EAAgB,QAAQ,UAAW,CAAA,cAAA;AAAA,QACnC,iBAAA,EAAmB,QAAQ,UAAW,CAAA,iBAAA;AAAA,QACtC,iBAAA,EAAmB,QAAQ,UAAW,CAAA,iBAAA;AAAA,QACtC,iBAAA,EAAmB,QAAQ,UAAW,CAAA,iBAAA;AAAA,QACtC,UAAA,EAAY,QAAQ,UAAW,CAAA;AAAA,OACjC;AAEA,MAAkB,iBAAA,CAAA;AAAA,QAChB,WAAW,SAAU,CAAA,OAAA;AAAA,QACrB,aAAa,WAAY,CAAA,OAAA;AAAA,QACzB,SAAA;AAAA,QACA,aAAeD,EAAAA,cAAAA;AAAA,QACf,eAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,iBAAmB,EAAA;AAAA,UACjB,GAAA,EAAK,QAAQ,MAAO,CAAA,aAAA;AAAA,UACpB,MAAA,EAAQ,QAAQ,MAAO,CAAA;AAAA;AACzB,OACC,EAAA,MAAM,CAAE,CAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,KAC3B,CACA,CAAA,OAAA,CAAQ,MAAM;AACb,MAAM,MAAA,eAAA,GAAkB,CAACG,SAA0B,KAAA;AACjD,QAAAA,SAAAA,CAAS,UAAW,CAAA,KAAK,CAAC,CAAA;AAAA,OAC5B;AACA,MAAA,QAAA,CAAS,eAAe,CAAA;AAAA,KACzB,CAAA;AAEH,IAAA,OAAO,MAAM;AACX,MAAqB,oBAAA,CAAA,MAAM,CAAE,CAAA,OAAA,EAAS,CAAA;AAAA,KACxC;AAAA,KACC,CAAC,WAAA,EAAa,UAAU,OAAS,EAAA,YAAA,EAAc,eAAe,CAAC,CAAA;AAKlE,EAAI,IAAA,CAAC,YAAmB,OAAA,IAAA;AAExB,EAAA,uBACExC,GAAAE,CAAAA,QAAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA,CAAC,gBAAa,MAAS,EAAA,OAAA,CAAQ,QAC/B,QAAAA,kBAAAA,GAAAA,CAAC,oBACC,QAAAA,kBAAAA,GAAAA,CAAC,UACC,QAAAA,kBAAAA,GAAAA,CAAC,0BACC,QAAAc,kBAAAA,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,aAAA;AAAA,MACH,SACET,EAAAA,WAAAA;AAAA,QACE,QAAQ,OAAU,GAAA,UAAA;AAAA,QAClB,cAAc,aAAgB,GAAA,EAAA;AAAA,QAC9B,aAAa,YAAe,GAAA,EAAA;AAAA,QAC5B;AAAA,OACF;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAL,IAAC,oBAAqB,EAAA,EAAA,CAAA;AAAA,QAEtB,OAAA,mBACEA,GAAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAYiB,aAAY,SAAY,EAAA,EAAA,EAAKA,YAAY,CAAA,IAAA,EACxD,QAAAjB,kBAAAA,GAAAA;AAAA,UAAC,yBAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,MAAA;AAAA,YACV,aAAc,iBAAqB,IAAA,KAAA;AAAA,YACnC,UAAa,EAAA,kBAAA;AAAA,YACb,OAAU,EAAA,MAAM,MAAO,CAAA,CAAC,eAAe,yBAAyB;AAAA;AAAA,SAEtE,EAAA,CAAA,mBACEA,GAAAA,CAAAE,UAAA,EAAE,CAAA;AAAA,wBAEJF,GAAC,CAAA,SAAA,EAAA,EAAQ,EAAG,EAAA,SAAA,EAAU,cAAa,UAAO,CAAA,MAAA,CAAO,GAAI,CAAA,kBAAA,EACnD,0BAAAA,GAAC,CAAA,KAAA,EAAA,EAAI,IAAG,WAAY,EAAA,GAAA,EAAM,WAAY,CACxC,EAAA,CAAA;AAAA,QAEA,OAAA,mBACEA,GAAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAYiB,aAAY,SAAY,EAAA,EAAA,EAAKA,YAAY,CAAA,KAAA,EACxD,QAAAjB,kBAAAA,GAAAA;AAAA,UAAC,yBAAA;AAAA,UAAA;AAAA,YACC,SAAU,EAAA,OAAA;AAAA,YACV,aAAc,iBAAqB,IAAA,KAAA;AAAA,YACnC,UAAa,EAAA,gBAAA;AAAA,YACb,OAAU,EAAA,MAAM,OAAQ,CAAA,CAAC,eAAe,yBAAyB;AAAA;AAAA,SAErE,EAAA,CAAA,mBACAA,GAAAA,CAAAE,UAAA,EAAE,CAAA;AAAA,QAEJ,OAAA,mBAAUF,GAAC,CAAA,oBAAA,EAAA,EAAqB,oBAAKA,GAAAA,CAAAE,UAAA,EAAE;AAAA;AAAA;AAAA,GAE7C,EAAA,CAAA,EACF,CACF,EAAA,CAAA,EACA,CACA,EAAA,CAAA;AACD;AiCz2BM,IAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIU,SAAS,EAAE,CAAA;AAEzC,EAAM,MAAA,YAAA,GAAe,CAAC,CAAuB,KAAA;AAC3C,IAAA,CAAA,CAAE,cAAe,EAAA;AACjB,IAAA,IAAI,CAAC,OAAS,EAAA;AAEd,IAAI,IAAA;AAEF,MAAA,MAAM,KAAQ,GAAA,IAAI,WAAY,EAAA,CAAE,OAAO,OAAO,CAAA;AAC9C,MAAM,MAAA,SAAA,GAAY,KAAM,CAAA,IAAA,CAAK,KAAO,EAAA,CAAA,IAAA,KAAQ,MAAO,CAAA,aAAA,CAAc,IAAI,CAAC,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAC/E,MAAM,MAAA,MAAA,GAAS,KAAK,SAAS,CAAA;AAC7B,MAAA,MAAM,SAAY,GAAA,MAAA,CACf,OAAQ,CAAA,KAAA,EAAO,GAAG,CAAA,CAClB,OAAQ,CAAA,KAAA,EAAO,GAAG,CAAA,CAClB,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAA;AAGpB,MAAO,MAAA,CAAA,QAAA,CAAS,OAAO,IAAI,GAAA;AAAA,QACzB,CAAA,iDAAA,EAAoD,kBAAmB,CAAA,SAAS,CAAC,CAAA,cAAA,CAAA;AAAA,QACjF,OAAO,QAAS,CAAA;AAAA,OAChB,CAAA,IAAA;AAAA,aACK,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,KAAA,CAAM,uBAAuB,KAAK,CAAA;AAAA;AAE5C,GACF;AAEA,EAAA,uBACEZ,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAQ,WAAO,gBAAiB,CAAA,MAAA;AAAA,MAChC,WAAY,sBAAuB,CAAA,iBAAA;AAAA,MACnC,QAAW,EAAA,YAAA;AAAA,MACX,SAAW,EAAA;AAAA,QACT,MAAQ,EAAA;AAAA,UACN,WAAW,sBAAuB,CAAA,uBAAA;AAAA,UAClC,YAAY,CAAC;AAAA;AACf,OACF;AAAA,MAEA,QAAAA,kBAAAA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAQ,WAAO,gBAAiB,CAAA,KAAA;AAAA,UAChC,IAAK,EAAA,oBAAA;AAAA,UACL,WAAY,sBAAuB,CAAA,0BAAA;AAAA,UACnC,IAAK,EAAA,KAAA;AAAA,UACL,YAAA,EAAe,WAAO,gBAAiB,CAAA,KAAA;AAAA,UACvC,SAAW,EAAA;AAAA,YACT,KAAO,EAAA;AAAA,cACL,WAAW,sBAAuB,CAAA;AAAA,aACpC;AAAA,YACA,KAAO,EAAA;AAAA,cACL,WAAW,sBAAuB,CAAA,sBAAA;AAAA,cAClC,KAAO,EAAA,OAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,UAAW,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC1C,WAAA,EAAa,WAAO,gBAAiB,CAAA;AAAA,aACvC;AAAA,YACA,UAAY,EAAA;AAAA,cACV,WAAW,sBAAuB,CAAA;AAAA;AACpC;AACF;AAAA;AACF;AAAA,GAEJ,EAAA,CAAA;AAEF;ACpEO,IAAM,cAAiB,GAAA,CAAC,EAAE,SAAA,EAAW,UAA4D,KAAA;AACtG,EAAA,uBACEA,GAAAA,CAAAE,QAAA,EAAA,EACA,QAAAF,kBAAAA,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,MAAA,kBAASA,GAAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAY,mBAAmB,YAAgB,EAAA,QAAA,EAAA,UAAA,CAAO,MAAO,CAAA,GAAA,CAAI,OAAS,EAAA,CAAA;AAAA,MACxF,WAAY,kBAAmB,CAAA,mBAAA;AAAA,MAE7B;AAAA;AAAA,GAEJ,EAAA,CAAA;AAEJ","file":"index.mjs","sourcesContent":["(function (root, factory) {\n 'use strict'\n\n /*istanbul ignore next:cant test*/\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = factory()\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory)\n } else {\n // Browser globals\n root.objectPath = factory()\n }\n})(this, function () {\n 'use strict'\n\n var toStr = Object.prototype.toString\n\n function hasOwnProperty (obj, prop) {\n if (obj == null) {\n return false\n }\n //to handle objects with null prototypes (too edge case?)\n return Object.prototype.hasOwnProperty.call(obj, prop)\n }\n\n function isEmpty (value) {\n if (!value) {\n return true\n }\n if (isArray(value) && value.length === 0) {\n return true\n } else if (typeof value !== 'string') {\n for (var i in value) {\n if (hasOwnProperty(value, i)) {\n return false\n }\n }\n return true\n }\n return false\n }\n\n function toString (type) {\n return toStr.call(type)\n }\n\n function isObject (obj) {\n return typeof obj === 'object' && toString(obj) === '[object Object]'\n }\n\n var isArray = Array.isArray || function (obj) {\n /*istanbul ignore next:cant test*/\n return toStr.call(obj) === '[object Array]'\n }\n\n function isBoolean (obj) {\n return typeof obj === 'boolean' || toString(obj) === '[object Boolean]'\n }\n\n function getKey (key) {\n var intKey = parseInt(key)\n if (intKey.toString() === key) {\n return intKey\n }\n return key\n }\n\n function factory (options) {\n options = options || {}\n\n var objectPath = function (obj) {\n return Object.keys(objectPath).reduce(function (proxy, prop) {\n if (prop === 'create') {\n return proxy\n }\n\n /*istanbul ignore else*/\n if (typeof objectPath[prop] === 'function') {\n proxy[prop] = objectPath[prop].bind(objectPath, obj)\n }\n\n return proxy\n }, {})\n }\n\n var hasShallowProperty\n if (options.includeInheritedProps) {\n hasShallowProperty = function () {\n return true\n }\n } else {\n hasShallowProperty = function (obj, prop) {\n return (typeof prop === 'number' && Array.isArray(obj)) || hasOwnProperty(obj, prop)\n }\n }\n\n function getShallowProperty (obj, prop) {\n if (hasShallowProperty(obj, prop)) {\n return obj[prop]\n }\n }\n\n var getShallowPropertySafely\n if (options.includeInheritedProps) {\n getShallowPropertySafely = function (obj, currentPath) {\n if (typeof currentPath !== 'string' && typeof currentPath !== 'number') {\n currentPath = String(currentPath)\n }\n var currentValue = getShallowProperty(obj, currentPath)\n if (currentPath === '__proto__' || currentPath === 'prototype' ||\n (currentPath === 'constructor' && typeof currentValue === 'function')) {\n throw new Error('For security reasons, object\\'s magic properties cannot be set')\n }\n return currentValue\n }\n } else {\n getShallowPropertySafely = function (obj, currentPath) {\n return getShallowProperty(obj, currentPath)\n }\n }\n\n function set (obj, path, value, doNotReplace) {\n if (typeof path === 'number') {\n path = [path]\n }\n if (!path || path.length === 0) {\n return obj\n }\n if (typeof path === 'string') {\n return set(obj, path.split('.').map(getKey), value, doNotReplace)\n }\n var currentPath = path[0]\n var currentValue = getShallowPropertySafely(obj, currentPath)\n if (path.length === 1) {\n if (currentValue === void 0 || !doNotReplace) {\n obj[currentPath] = value\n }\n return currentValue\n }\n\n if (currentValue === void 0) {\n //check if we assume an array\n if (typeof path[1] === 'number') {\n obj[currentPath] = []\n } else {\n obj[currentPath] = {}\n }\n }\n\n return set(obj[currentPath], path.slice(1), value, doNotReplace)\n }\n\n objectPath.has = function (obj, path) {\n if (typeof path === 'number') {\n path = [path]\n } else if (typeof path === 'string') {\n path = path.split('.')\n }\n\n if (!path || path.length === 0) {\n return !!obj\n }\n\n for (var i = 0; i < path.length; i++) {\n var j = getKey(path[i])\n\n if ((typeof j === 'number' && isArray(obj) && j < obj.length) ||\n (options.includeInheritedProps ? (j in Object(obj)) : hasOwnProperty(obj, j))) {\n obj = obj[j]\n } else {\n return false\n }\n }\n\n return true\n }\n\n objectPath.ensureExists = function (obj, path, value) {\n return set(obj, path, value, true)\n }\n\n objectPath.set = function (obj, path, value, doNotReplace) {\n return set(obj, path, value, doNotReplace)\n }\n\n objectPath.insert = function (obj, path, value, at) {\n var arr = objectPath.get(obj, path)\n at = ~~at\n if (!isArray(arr)) {\n arr = []\n objectPath.set(obj, path, arr)\n }\n arr.splice(at, 0, value)\n }\n\n objectPath.empty = function (obj, path) {\n if (isEmpty(path)) {\n return void 0\n }\n if (obj == null) {\n return void 0\n }\n\n var value, i\n if (!(value = objectPath.get(obj, path))) {\n return void 0\n }\n\n if (typeof value === 'string') {\n return objectPath.set(obj, path, '')\n } else if (isBoolean(value)) {\n return objectPath.set(obj, path, false)\n } else if (typeof value === 'number') {\n return objectPath.set(obj, path, 0)\n } else if (isArray(value)) {\n value.length = 0\n } else if (isObject(value)) {\n for (i in value) {\n if (hasShallowProperty(value, i)) {\n delete value[i]\n }\n }\n } else {\n return objectPath.set(obj, path, null)\n }\n }\n\n objectPath.push = function (obj, path /*, values */) {\n var arr = objectPath.get(obj, path)\n if (!isArray(arr)) {\n arr = []\n objectPath.set(obj, path, arr)\n }\n\n arr.push.apply(arr, Array.prototype.slice.call(arguments, 2))\n }\n\n objectPath.coalesce = function (obj, paths, defaultValue) {\n var value\n\n for (var i = 0, len = paths.length; i < len; i++) {\n if ((value = objectPath.get(obj, paths[i])) !== void 0) {\n return value\n }\n }\n\n return defaultValue\n }\n\n objectPath.get = function (obj, path, defaultValue) {\n if (typeof path === 'number') {\n path = [path]\n }\n if (!path || path.length === 0) {\n return obj\n }\n if (obj == null) {\n return defaultValue\n }\n if (typeof path === 'string') {\n return objectPath.get(obj, path.split('.'), defaultValue)\n }\n\n var currentPath = getKey(path[0])\n var nextObj = getShallowPropertySafely(obj, currentPath)\n if (nextObj === void 0) {\n return defaultValue\n }\n\n if (path.length === 1) {\n return nextObj\n }\n\n return objectPath.get(obj[currentPath], path.slice(1), defaultValue)\n }\n\n objectPath.del = function del (obj, path) {\n if (typeof path === 'number') {\n path = [path]\n }\n\n if (obj == null) {\n return obj\n }\n\n if (isEmpty(path)) {\n return obj\n }\n if (typeof path === 'string') {\n return objectPath.del(obj, path.split('.'))\n }\n\n var currentPath = getKey(path[0])\n getShallowPropertySafely(obj, currentPath)\n if (!hasShallowProperty(obj, currentPath)) {\n return obj\n }\n\n if (path.length === 1) {\n if (isArray(obj)) {\n obj.splice(currentPath, 1)\n } else {\n delete obj[currentPath]\n }\n } else {\n return objectPath.del(obj[currentPath], path.slice(1))\n }\n\n return obj\n }\n\n return objectPath\n }\n\n var mod = factory()\n mod.create = factory\n mod.withInheritedProps = factory({includeInheritedProps: true})\n return mod\n})\n","(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n})((function () { 'use strict';\n\n // json-templates\n // Simple templating within JSON structures.\n //\n // Created by Curran Kelleher and Chrostophe Serafin.\n // Contributions from Paul Brewer and Javier Blanco Martinez.\n var objectPath = require('object-path');\n\n // An enhanced version of `typeof` that handles arrays and dates as well.\n function type(value) {\n var valueType = typeof value;\n if (Array.isArray(value)) {\n valueType = 'array';\n } else if (value instanceof Date) {\n valueType = 'date';\n } else if (value === null) {\n valueType = 'null';\n }\n\n return valueType;\n }\n\n // Constructs a template function with deduped `parameters` property.\n function Template(fn, parameters) {\n fn.parameters = Array.from(\n new Map(parameters.map(function (parameter) { return [parameter.key, parameter]; })).values()\n );\n return fn;\n }\n\n // Parses the given template object.\n //\n // Returns a function `template(context)` that will \"fill in\" the template\n // with the context object passed to it.\n //\n // The returned function has a `parameters` property,\n // which is an array of parameter descriptor objects,\n // each of which has a `key` property and possibly a `defaultValue` property.\n function parse(value, options) {\n switch (type(value)) {\n case 'string':\n return parseString(value, options);\n case 'object':\n return parseObject(value, options);\n case 'array':\n return parseArray(value, options);\n default:\n return Template(function () {\n return value;\n }, []);\n }\n }\n\n // Parses leaf nodes of the template object that are strings.\n // Also used for parsing keys that contain templates.\n function parseString(str, options) {\n if ( options === void 0 ) options = {};\n\n var regex = /\\{\\{[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*((?:[\\$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\$\\x2D\\.0-9A-Z_a-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*)(?::((?:(?!\\})[\\s\\S])*))?[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*\\}\\}/g;\n\n var templateFn = function () { return str; };\n\n var matches = Array.from(str.matchAll(regex));\n var parameters = matches.map(function (match) {\n var r = {\n key: match[1],\n };\n if (match[2]) {\n r.defaultValue = match[2];\n }\n return r;\n });\n\n if (matches.length > 0) {\n templateFn = function (context) {\n if ( context === void 0 ) context = {};\n\n return matches.reduce(function (result, match, i) {\n var parameter = parameters[i];\n var value = objectPath.get(\n context,\n options.rawKey ? [parameter.key] : parameter.key\n );\n\n if (typeof value === 'undefined') {\n value = parameter.defaultValue;\n }\n\n if (typeof value === 'function') {\n value = value();\n }\n\n if (matches.length === 1 && str.trim() === match[0]) {\n return value;\n }\n\n if (value instanceof Date) {\n value = value.toISOString();\n }\n\n return result.replace(match[0], value == null ? '' : value);\n }, str);\n };\n }\n\n return Template(templateFn, parameters);\n }\n\n // Parses non-leaf-nodes in the template object that are objects.\n function parseObject(object, options) {\n var children = Object.keys(object).map(function (key) { return ({\n keyTemplate: parseString(key, options),\n valueTemplate: parse(object[key], options),\n }); });\n var templateParameters = children.reduce(\n function (parameters, child) { return parameters.concat(\n child.valueTemplate.parameters,\n child.keyTemplate.parameters\n ); },\n []\n );\n var templateFn = function (context) {\n return children.reduce(function (newObject, child) {\n newObject[child.keyTemplate(context)] = child.valueTemplate(context);\n return newObject;\n }, {});\n };\n\n return Template(templateFn, templateParameters);\n }\n\n // Parses non-leaf-nodes in the template object that are arrays.\n function parseArray(array, options) {\n var templates = array.map(function (t) { return parse(t, options); });\n var templateParameters = templates.reduce(\n function (parameters, template) { return parameters.concat(template.parameters); },\n []\n );\n var templateFn = function (context) { return templates.map(function (template) { return template(context); }); };\n\n return Template(templateFn, templateParameters);\n }\n\n module.exports = parse;\n\n}));\n","import * as React from \"react\";\nconst SvgDocumentScanner = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M80-720v-200h200v80H160v120H80Zm720 0v-120H680v-80h200v200h-80ZM80-40v-200h80v120h120v80H80Zm600 0v-80h120v-120h80v200H680ZM280-240h400v-480H280v480Zm0 80q-33 0-56.5-23.5T200-240v-480q0-33 23.5-56.5T280-800h400q33 0 56.5 23.5T760-720v480q0 33-23.5 56.5T680-160H280Zm80-400h240v-80H360v80Zm0 120h240v-80H360v80Zm0 120h240v-80H360v80Zm-80 80v-480 480Z\" /></svg>;\nexport default SvgDocumentScanner;","import * as React from \"react\";\nconst SvgArticle = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\" /></svg>;\nexport default SvgArticle;","import * as React from \"react\";\nconst SvgMenuBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M560-564v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-600q-38 0-73 9.5T560-564Zm0 220v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-380q-38 0-73 9t-67 27Zm0-110v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-490q-38 0-73 9.5T560-454ZM260-320q47 0 91.5 10.5T440-278v-394q-41-24-87-36t-93-12q-36 0-71.5 7T120-692v396q35-12 69.5-18t70.5-6Zm260 42q44-21 88.5-31.5T700-320q36 0 70.5 6t69.5 18v-396q-33-14-68.5-21t-71.5-7q-47 0-93 12t-87 36v394Zm-40 118q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740q51-30 106.5-45T700-800q52 0 102 12t96 36q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59ZM280-494Z\" /></svg>;\nexport default SvgMenuBook;","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThRadioGroup, ThRadioGroupProps } from \"@/core/Components/Settings/ThRadioGroup\"\n\nexport interface StatefulRadioGroupProps extends Omit<ThRadioGroupProps, \"classNames\"> {\n standalone?: boolean\n}\n\nexport const StatefulRadioGroup = ({\n standalone,\n label,\n children,\n ...props\n}: StatefulRadioGroupProps) => {\n return (\n <>\n <ThRadioGroup \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ standalone ? settingsStyles.readerSettingsGroup : \"\" }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsRadioWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n radio: {\n className: settingsStyles.readerSettingsRadio\n }\n }}\n >\n { children }\n </ThRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport AutoLayoutIcon from \"./assets/icons/document_scanner.svg\";\nimport OneColIcon from \"./assets/icons/article.svg\";\nimport TwoColsIcon from \"./assets/icons/menu_book.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setColumnCount } from \"@/lib/settingsReducer\";\n\nexport const StatefulColumns = () => {\n const isScroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const columnCount = useAppSelector(state => state.settings.columnCount) || \"auto\";\n const dispatch = useAppDispatch();\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => {\n const colCount = value === \"auto\" ? null : Number(value);\n\n await submitPreferences({ columnCount: colCount });\n \n // TODO: See how best to handle this for 2 -> 1 column if minimal null\n dispatch(setColumnCount(value));\n }, [submitPreferences, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ true }\n label={ Locale.reader.settings.column.title }\n orientation=\"horizontal\"\n value={ columnCount }\n onChange={ async (val: string) => await updatePreference(val) }\n isDisabled={ isScroll && !isFXL }\n items={[\n {\n icon: AutoLayoutIcon,\n label: Locale.reader.settings.column.auto, \n value: \"auto\" \n },\n {\n icon: OneColIcon,\n label: Locale.reader.settings.column.one, \n value: \"1\" \n },\n {\n icon: TwoColsIcon,\n label: Locale.reader.settings.column.two, \n value: \"2\" \n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { CSSProperties, Key, useCallback, useRef } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { ThDropdown } from \"@/core/Components/Settings/ThDropdown\";\n\nimport { ListBox, ListBoxItem } from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontFamily } from \"@/lib/settingsReducer\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport const StatefulFontFamily = ({ standalone = true }: StatefulSettingsItemProps) => {\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontFamilyOptions = useRef(Object.entries(defaultFontFamilyOptions).map(([property, stack]) => ({\n id: property,\n label: Locale.reader.settings.fontFamily.labels[property as keyof typeof Locale.reader.settings.fontFamily.labels],\n value: stack\n }))\n );\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (key: Key | null) => {\n if (!key || key === fontFamily) return;\n\n const selectedOption = fontFamilyOptions.current.find((option) => option.id === key) as {\n id: keyof typeof defaultFontFamilyOptions;\n label: string;\n value: string | null;\n };\n \n if (selectedOption) {\n await submitPreferences({ fontFamily: selectedOption.value });\n \n const currentSetting = getSetting(\"fontFamily\");\n const selectedOptionId = Object.keys(defaultFontFamilyOptions).find(key => defaultFontFamilyOptions[key as keyof typeof defaultFontFamilyOptions] === currentSetting) as keyof typeof defaultFontFamilyOptions;\n dispatch(setFontFamily(selectedOptionId || defaultFontFamilyOptions.publisher));\n }\n }, [fontFamily, submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <ThDropdown \n { ...(standalone \n ? { \n className: settingsStyles.readerSettingsGroup,\n label: Locale.reader.settings.fontFamily.title\n } \n : {\n \"aria-label\": Locale.reader.settings.fontFamily.title\n }) }\n selectedKey={ fontFamily }\n onSelectionChange={ async (key) => await updatePreference(key) }\n compounds={ {\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n button: {\n className: settingsStyles.readerSettingsDropdownButton\n },\n popover: {\n className: settingsStyles.readerSettingsDropdownPopover,\n placement: \"bottom\"\n },\n listbox: (\n <ListBox\n className={ settingsStyles.readerSettingsDropdownListbox }\n items={ fontFamilyOptions.current }\n >\n { (item) => (\n <ListBoxItem\n className={ settingsStyles.readerSettingsDropdownListboxItem }\n id={ item.id }\n key={ item.id }\n textValue={ item.value || undefined }\n style={{ fontFamily: item.value || undefined } as CSSProperties}\n >\n { item.label }\n </ListBoxItem>\n )}\n </ListBox>\n )\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSlider, ThSliderProps } from \"@/core/Components/Settings/ThSlider\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulSliderProps extends Omit<ThSliderProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSlider = ({\n standalone,\n label,\n ...props\n}: StatefulSliderProps) => {\n return(\n <>\n <ThSlider\n { ...props }\n { ...(standalone ? { label: label } : {\"aria-label\": label}) }\n className={ classNames(settingsStyles.readerSettingsSlider, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n label: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsSliderLabel)\n },\n output: {\n className: settingsStyles.readerSettingsSliderOutput\n },\n track: {\n className: settingsStyles.readerSettingsSliderTrack\n },\n thumb: {\n className: settingsStyles.readerSettingsSliderThumb\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { fontWeightRangeConfig } from \"@readium/navigator\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontWeight } from \"@/lib/settingsReducer\";\n\nexport const StatefulFontWeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontWeight: value });\n\n dispatch(setFontWeight(getSetting(\"fontWeight\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.fontWeight.title }\n defaultValue={ 400 } \n value={ fontWeight } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ fontWeightRangeConfig.range }\n step={ fontWeightRangeConfig.step }\n isDisabled={ fontFamily === \"publisher\" }\n /> \n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSwitch, ThSwitchProps } from \"@/core/Components/Settings/ThSwitch\";\n\nexport interface StatefulSwitchProps extends Omit<ThSwitchProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSwitch = ({\n standalone,\n label,\n heading, \n ...props\n}: StatefulSwitchProps) => {\n return(\n <>\n <ThSwitch \n { ...props }\n { ...(standalone ? { heading: heading } : {}) }\n label={ label }\n className={ settingsStyles.readerSettingsSwitch }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsGroup\n },\n heading: {\n className: settingsStyles.readerSettingsLabel\n },\n indicator: {\n className: settingsStyles.readerSettingsSwitchIndicator\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setHyphens } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulHyphens = ({ standalone = true }: StatefulSettingsItemProps) => {\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n\n const dispatch = useAppDispatch();\n \n const { getSetting, submitPreferences } = useEpubNavigator();\n \n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ \n hyphens: value \n });\n \n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ Locale.reader.settings.hyphens.title }\n label={ Locale.reader.settings.hyphens.label }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ hyphens ?? false }\n isDisabled={ textAlign === ThTextAlignOptions.publisher }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgContract = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-50 0-85-35t-35-85v-120h120v-560h600v680q0 50-35 85t-85 35H240Zm480-80q17 0 28.5-11.5T760-200v-600H320v480h360v120q0 17 11.5 28.5T720-160ZM360-600v-80h360v80H360Zm0 120v-80h360v80H360ZM240-160h360v-80H200v40q0 17 11.5 28.5T240-160Zm0 0h-40 400-360Z\" /></svg>;\nexport default SvgContract;","import * as React from \"react\";\nconst SvgDocs = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M320-440h320v-80H320v80Zm0 120h320v-80H320v80Zm0 120h200v-80H320v80ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\" /></svg>;\nexport default SvgDocs;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThLayoutOptions } from \"@/preferences/models/enums\";\n\nimport ScrollableIcon from \"./assets/icons/contract.svg\";\nimport PaginatedIcon from \"./assets/icons/docs.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setScroll } from \"@/lib/settingsReducer\";\n\nexport const StatefulLayout = () => {\n const isScroll = useAppSelector(state => state.settings.scroll);\n\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences, handleScrollAffordances } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => { \n const derivedValue = value === ThLayoutOptions.scroll;\n await submitPreferences({ scroll: derivedValue });\n dispatch(setScroll(getSetting(\"scroll\")));\n\n // [TMP] We need to handle this in multiple places due to the lack\n // of Injection API. This mounts and unmounts scroll affordances\n handleScrollAffordances(derivedValue);\n }, [submitPreferences, getSetting, dispatch, handleScrollAffordances]);\n\n return (\n <>\n <StatefulRadioGroup\n standalone={ true }\n label={ Locale.reader.settings.layout.title }\n orientation=\"horizontal\"\n value={ isScroll ? ThLayoutOptions.scroll : ThLayoutOptions.paginated }\n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: PaginatedIcon,\n label: Locale.reader.settings.layout.paginated,\n value: ThLayoutOptions.paginated\n },\n {\n icon: ScrollableIcon,\n label: Locale.reader.settings.layout.scrolled,\n value: ThLayoutOptions.scroll\n }\n ]} \n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThNumberField, ThNumberFieldProps } from \"@/core/Components/Settings/ThNumberField\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulNumberFieldProps extends Omit<ThNumberFieldProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulNumberField = ({\n standalone,\n label,\n ...props\n}: StatefulNumberFieldProps) => {\n\n return (\n <ThNumberField \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ classNames(settingsStyles.readerSettingsNumbfield, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n group: {\n className: settingsStyles.readerSettingsGroupWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n stepper: {\n className: readerSharedUI.icon\n },\n input: {\n className: settingsStyles.readerSettingsInput\n }\n }}\n />\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultLetterSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLetterSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLetterSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const letterSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.variant ?? defaultLetterSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.range ?? defaultLetterSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.step ?? defaultLetterSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n letterSpacing: value\n });\n\n dispatch(setLetterSpacing(getSetting(\"letterSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { letterSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.letterSpacing.title }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.letterSpacing.decrease,\n incrementLabel: Locale.reader.settings.letterSpacing.increase\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.letterSpacing.title }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n formatOptions={ { style: \"percent\" } }\n />\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h480q33 0 56.5 23.5T800-800v640q0 33-23.5 56.5T720-80H240Zm0-80h480v-640h-80v280l-100-60-100 60v-280H240v640Zm0 0v-640 640Zm200-360 100-60 100 60-100-60-100 60Z\" /></svg>;\nexport default SvgBook;","import * as React from \"react\";\nconst SvgDensitySmall = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-80v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Z\" /></svg>;\nexport default SvgDensitySmall;","import * as React from \"react\";\nconst SvgDensityMedium = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-320v-80h720v80H120Zm0-320v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityMedium;","import * as React from \"react\";\nconst SvgDensityLarge = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-640v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityLarge;","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport SmallIcon from \"./assets/icons/density_small.svg\";\nimport MediumIcon from \"./assets/icons/density_medium.svg\";\nimport LargeIcon from \"./assets/icons/density_large.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLineHeight, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLineHeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const updatePreference = useCallback(async (value: string) => {\n const computedValue = value === ThLineHeightOptions.publisher\n ? null \n : lineHeightOptions.current[value as keyof typeof ThLineHeightOptions];\n \n await submitPreferences({\n lineHeight: computedValue\n });\n\n const currentLineHeight = getSetting(\"lineHeight\");\n const currentDisplayLineHeightOption = Object.entries(lineHeightOptions.current).find(([key, value]) => value === currentLineHeight)?.[0] as ThLineHeightOptions;\n\n dispatch(setLineHeight(currentDisplayLineHeightOption));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone }\n label={ Locale.reader.settings.lineHeight.title }\n orientation=\"horizontal\"\n value={ publisherStyles ? ThLineHeightOptions.publisher : lineHeight } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: Locale.reader.settings.lineHeight.publisher, \n value: ThLineHeightOptions.publisher \n },\n {\n icon: SmallIcon,\n label: Locale.reader.settings.lineHeight.small, \n value: ThLineHeightOptions.small \n },\n {\n icon: MediumIcon,\n label: Locale.reader.settings.lineHeight.medium, \n value: ThLineHeightOptions.medium \n },\n {\n icon: LargeIcon,\n label: Locale.reader.settings.lineHeight.large, \n value: ThLineHeightOptions.large \n },\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphIndent, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphIndent, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphIndent = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphIndentRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.variant ?? defaultParagraphIndent.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.range ?? defaultParagraphIndent.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.step ?? defaultParagraphIndent.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphIndent: value\n });\n\n dispatch(setParagraphIndent(getSetting(\"paragraphIndent\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphIndentRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.paraIndent.title }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.paraIndent.decrease,\n incrementLabel: Locale.reader.settings.paraIndent.increase\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.paraIndent.title }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n />\n } \n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const paragraphSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.variant ?? defaultParagraphSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.range ?? defaultParagraphSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.step ?? defaultParagraphSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphSpacing: value\n });\n\n dispatch(setParagraphSpacing(getSetting(\"paragraphSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.paraSpacing.title }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.paraSpacing.decrease,\n incrementLabel: Locale.reader.settings.paraSpacing.increase\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.paraSpacing.title }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n /> \n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulPublisherStyles = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n\n const dispatch = useAppDispatch();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (isSelected: boolean) => {\n const values = isSelected ? \n {\n lineHeight: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n letterSpacing: null,\n wordSpacing: null\n } : \n {\n lineHeight: lineHeight === ThLineHeightOptions.publisher \n ? null \n : lineHeightOptions.current[lineHeight as keyof typeof ThLineHeightOptions],\n paragraphIndent: paragraphIndent || 0,\n paragraphSpacing: paragraphSpacing || 0,\n letterSpacing: letterSpacing || 0,\n wordSpacing: wordSpacing || 0\n };\n await submitPreferences(values);\n\n dispatch(setPublisherStyles(isSelected ? true : false));\n }, [submitPreferences, dispatch, lineHeight, paragraphIndent, paragraphSpacing, letterSpacing, wordSpacing]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n label={ Locale.reader.settings.publisherStyles.label }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ publisherStyles }\n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSettingsGroupPref, ThSpacingSettingsKeys, ThTextSettingsKeys } from \"@/preferences\";\nimport { PressEvent } from \"react-aria\";\nimport { SettingComponent } from \"@/components/Plugins/PluginRegistry\";\n\nimport { ThSettingsWrapper } from \"@/core/Components/Settings/ThSettingsWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulGroupWrapperProps {\n heading: string;\n moreLabel: string;\n moreTooltip: string;\n onPressMore: (e: PressEvent) => void;\n componentsMap: Record<string, SettingComponent>;\n prefs?: ThSettingsGroupPref<ThTextSettingsKeys | ThSpacingSettingsKeys>;\n defaultPrefs: {\n main: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n subPanel: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n };\n}\n\nexport const StatefulGroupWrapper = ({\n heading,\n moreLabel,\n moreTooltip,\n onPressMore,\n componentsMap,\n prefs,\n defaultPrefs\n}: StatefulGroupWrapperProps) => {\n const RSPrefs = usePreferences();\n \n const main = prefs?.main || defaultPrefs.main;\n const displayOrder = prefs?.subPanel !== undefined \n ? prefs.subPanel \n : defaultPrefs.subPanel;\n\n const resolvedPrefs = {\n main: main,\n subPanel: displayOrder\n };\n \n return(\n <>\n <ThSettingsWrapper\n className={ classNames(settingsStyles.readerSettingsGroup, settingsStyles.readerSettingsAdvancedGroup) }\n items={ componentsMap }\n prefs={ resolvedPrefs }\n compounds={{\n label: heading,\n heading: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsGroupLabel)\n },\n button: {\n className: classNames(readerSharedUI.icon, settingsStyles.readerSettingsAdvancedIcon),\n \"aria-label\": moreLabel,\n compounds: {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: \"top\",\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: moreTooltip\n },\n onPress: onPressMore\n }\n }}\n />\n </>\n )\n}","import { ThSettingsEntry } from \"@/core/Components\";\nimport { StatefulActionsMapObject } from \"../Actions\";\n\nexport enum ThPluginType {\n ACTION = \"action\",\n SETTING = \"setting\",\n}\n\nexport type ActionComponent = StatefulActionsMapObject;\n\nexport interface SettingComponent extends ThSettingsEntry {\n type?: \"text\" | \"spacing\";\n props?: any;\n}\n\nexport interface ThPlugin {\n id: string;\n name: string;\n description?: string;\n version?: string;\n components: {\n actions?: Record<string, ActionComponent>;\n settings?: Record<string, SettingComponent>;\n };\n}\n\n// Store plugins in a module-level variable to ensure persistence\nconst pluginsStore: ThPlugin[] = [];\n\nclass PluginRegistryClass {\n register(plugin: ThPlugin): void {\n const existingPluginIndex = pluginsStore.findIndex(p => p.id === plugin.id);\n \n if (existingPluginIndex >= 0) {\n pluginsStore[existingPluginIndex] = plugin;\n } else {\n pluginsStore.push(plugin);\n }\n }\n \n unregister(pluginId: string): void {\n const filteredPlugins = pluginsStore.filter(plugin => plugin.id !== pluginId);\n \n // Clear the array and repopulate it\n pluginsStore.length = 0;\n pluginsStore.push(...filteredPlugins);\n }\n \n getPlugins(): ThPlugin[] {\n return [...pluginsStore];\n }\n \n getComponentMaps() { \n const actionsComponentsMap: Record<string, ActionComponent> = {} as Record<string, ActionComponent>;\n const settingsComponentsMap: Record<string, SettingComponent> = {} as Record<string, SettingComponent>;\n \n // Process plugins in reverse order so later plugins override earlier ones\n [...pluginsStore].reverse().forEach(plugin => { \n // Merge actions components\n if (plugin.components.actions) {\n Object.entries(plugin.components.actions).forEach(([key, component]) => {\n actionsComponentsMap[key as string] = component;\n });\n }\n \n // Merge settings components\n if (plugin.components.settings) {\n Object.entries(plugin.components.settings).forEach(([key, component]) => {\n settingsComponentsMap[key as string] = component;\n });\n }\n });\n \n return {\n actionsComponentsMap,\n settingsComponentsMap\n };\n }\n}\n\n// Export singleton instance\nexport const ThPluginRegistry = new PluginRegistryClass();","\"use client\";\n\nimport React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { ThPluginRegistry, ActionComponent, SettingComponent } from \"./PluginRegistry\";\n\ninterface ThPluginContextType {\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n registerPlugin: typeof ThPluginRegistry.register;\n unregisterPlugin: typeof ThPluginRegistry.unregister;\n}\n\nconst ThPluginContext = createContext<ThPluginContextType>({\n actionsComponentsMap: {} as Record<string, ActionComponent>,\n settingsComponentsMap: {} as Record<string, SettingComponent>,\n textSettingsComponentsMap: {} as Record<string, SettingComponent>,\n spacingSettingsComponentsMap: {} as Record<string, SettingComponent>,\n registerPlugin: ThPluginRegistry.register.bind(ThPluginRegistry),\n unregisterPlugin: ThPluginRegistry.unregister.bind(ThPluginRegistry)\n});\n\nexport const usePlugins = () => useContext(ThPluginContext);\n\nexport const ThPluginProvider = ({ children }: { children: React.ReactNode }) => {\n const [componentMaps, setComponentMaps] = useState<{\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n }>(() => {\n // Force a fresh retrieval of component maps\n const maps = ThPluginRegistry.getComponentMaps();\n return {\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n };\n });\n \n // Helper function to filter settings components by type\n function getTypedSettingsComponents(\n componentsMap: Record<string, SettingComponent>,\n type: \"text\" | \"spacing\"\n ): Record<string, SettingComponent> {\n return Object.entries(componentsMap)\n .filter(([_, component]) => component.type === type)\n .reduce((acc, [key, component]) => {\n acc[key] = component;\n return acc;\n }, {} as Record<string, SettingComponent>);\n }\n \n // Update component maps when plugins change\n useEffect(() => {\n const updateComponentMaps = () => {\n const maps = ThPluginRegistry.getComponentMaps();\n setComponentMaps({\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n });\n };\n \n // Initial update to ensure we have the latest maps\n updateComponentMaps();\n }, []);\n \n // Wrapper for register that triggers an update\n const registerPlugin = (plugin: Parameters<typeof ThPluginRegistry.register>[0]) => {\n ThPluginRegistry.register(plugin);\n };\n \n // Wrapper for unregister that triggers an update\n const unregisterPlugin = (pluginId: string) => {\n ThPluginRegistry.unregister(pluginId);\n };\n \n // Provide the component maps and plugin management functions\n const value = {\n ...componentMaps,\n registerPlugin,\n unregisterPlugin\n };\n \n return (\n <ThPluginContext.Provider value={ value }>\n { children }\n </ThPluginContext.Provider>\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n ThSettingsContainerKeys, \n ThSpacingSettingsKeys \n} from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulSpacingGroup = () => {\n const RSPrefs = usePreferences();\n const { spacingSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n \n const setSpacingContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.spacing));\n }, [dispatch]);\n\n return (\n <>\n <StatefulGroupWrapper \n heading={ Locale.reader.settings.spacing.title }\n moreLabel={ Locale.reader.settings.spacing.advanced.trigger }\n moreTooltip={ Locale.reader.settings.spacing.advanced.tooltip }\n onPressMore={ setSpacingContainer }\n componentsMap={ spacingSettingsComponentsMap }\n prefs={ RSPrefs.settings.spacing }\n defaultPrefs={ {\n main: defaultSpacingSettingsMain, \n subPanel: defaultSpacingSettingsSubpanel\n }}\n />\n </>\n );\n}\n\nexport const StatefulSpacingGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.spacing?.subPanel as ThSpacingSettingsKeys[] | null | undefined || defaultSpacingSettingsSubpanel;\n const { spacingSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThSpacingSettingsKeys) => {\n const match = spacingSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Setting key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","import * as React from \"react\";\nconst SvgFormatAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignLeft;","import * as React from \"react\";\nconst SvgFormatAlignRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignRight;","import * as React from \"react\";\nconst SvgFormatAlignJustify = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignJustify;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { TextAlignment } from \"@readium/navigator\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport LeftAlignIcon from \"./assets/icons/format_align_left.svg\";\nimport RightAlignIcon from \"./assets/icons/format_align_right.svg\";\nimport JustifyIcon from \"./assets/icons/format_align_justify.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextAlign, setHyphens } from \"@/lib/settingsReducer\";\n\nexport const StatefulTextAlign = ({ standalone = true }: StatefulSettingsItemProps) => {\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => {\n const textAlign: TextAlignment | null = value === ThTextAlignOptions.publisher \n ? null \n : value === ThTextAlignOptions.start \n ? TextAlignment.start \n : TextAlignment.justify;\n \n const currentHyphens = getSetting(\"hyphens\") as boolean | undefined | null;\n \n const hyphens = textAlign === null \n ? null \n : (currentHyphens ?? textAlign === TextAlignment.justify);\n \n await submitPreferences({\n textAlign: textAlign,\n hyphens: hyphens\n });\n \n const textAlignSetting = getSetting(\"textAlign\") as TextAlignment | null;\n const textAlignValue = textAlignSetting === null ? ThTextAlignOptions.publisher : textAlignSetting as unknown as ThTextAlignOptions;\n \n dispatch(setTextAlign(textAlignValue));\n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [getSetting, submitPreferences, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone } \n label={ Locale.reader.settings.align.title }\n orientation=\"horizontal\" \n value={ textAlign } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: Locale.reader.settings.align.publisher, \n value: ThTextAlignOptions.publisher \n },\n {\n icon: isRTL ? RightAlignIcon : LeftAlignIcon,\n label: isRTL ? Locale.reader.settings.align.right : Locale.reader.settings.align.left, \n value: ThTextAlignOptions.start \n },\n {\n icon: JustifyIcon,\n label: Locale.reader.settings.align.justify, \n value: ThTextAlignOptions.justify \n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n ThSettingsContainerKeys, \n ThTextSettingsKeys \n} from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulTextGroup = () => {\n const RSPrefs = usePreferences();\n const { textSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n\n const setTextContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.text));\n }, [dispatch]);\n\n return(\n <>\n <StatefulGroupWrapper \n heading={ Locale.reader.settings.text.title }\n moreLabel={ Locale.reader.settings.text.advanced.trigger }\n moreTooltip={ Locale.reader.settings.text.advanced.tooltip }\n onPressMore={ setTextContainer }\n componentsMap={ textSettingsComponentsMap }\n prefs={ RSPrefs.settings.text }\n defaultPrefs={ {\n main: defaultTextSettingsMain, \n subPanel: defaultTextSettingsSubpanel\n }}\n />\n </>\n )\n}\n\nexport const StatefulTextGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.text?.subPanel as ThTextSettingsKeys[] | null | undefined || defaultTextSettingsSubpanel;\n const { textSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThTextSettingsKeys) => {\n const match = textSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextNormalization } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulTextNormalize = ({ standalone = true }: StatefulSettingsItemProps) => {\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ textNormalization: value });\n\n dispatch(setTextNormalization(getSetting(\"textNormalization\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ Locale.reader.settings.normalizeText.title }\n label={ Locale.reader.settings.normalizeText.label }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ textNormalization ?? false }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgCheck = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\" /></svg>;\nexport default SvgCheck;","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ThemeKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport CheckIcon from \"./assets/icons/check.svg\";\n\nimport { ThActionsKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\nimport { Radio } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTheme } from \"@/lib/themeReducer\";\n\nimport classNames from \"classnames\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\n\nexport const StatefulTheme = ({ mapArrowNav }: { mapArrowNav?: number }) => {\n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const radioGroupRef = useRef<HTMLDivElement | null>(null);\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n const themeArray = isFXL ? fxlThemeKeys : reflowThemeKeys;\n\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n\n const themeItems = useRef<(ThemeKeyType | \"auto\")[]>(\n themeArray.filter((theme: ThemeKeyType | \"auto\") => {\n if (theme === \"auto\") {\n return RSPrefs.theming.themes.systemThemes !== undefined && \n Object.values(RSPrefs.theming.themes.systemThemes).every(t => \n themeArray.includes(t)\n );\n }\n return true;\n })\n );\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: ThemeKeyType | \"auto\") => {\n const themeProps = buildThemeObject<typeof value>({\n theme: value,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme\n })\n await submitPreferences(themeProps);\n\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: value\n }));\n }, [isFXL, RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, submitPreferences, dispatch, colorScheme]);\n\n // It’s easier to inline styles from preferences for these\n // than spamming the entire app with all custom properties right now\n const doStyles = useCallback((t: ThemeKeyType | \"auto\") => {\n // For some reason Typescript will just refuse to create dts files\n // for the packages if we set it to CSSProperties…\n let cssProps: any = {\n boxSizing: \"border-box\",\n color: \"#999999\"\n };\n\n if (t === \"auto\") {\n if (RSPrefs.theming.themes.systemThemes !== undefined) {\n cssProps.background = isRTL \n ? `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 100%)` \n : `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 0%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%)`;\n cssProps.color = \"#ffffff\";\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].subdue }`;\n } else {\n cssProps.display = \"none\";\n }\n } else {\n cssProps.background = RSPrefs.theming.themes.keys[t].background;\n cssProps.color = RSPrefs.theming.themes.keys[t].text;\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[t].subdue }`;\n };\n \n return cssProps;\n }, [RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, isRTL]);\n\n // mapArrowNav is the number of columns. This assumption \n // should be safe since even in vertical-writing, \n // the layout should be horizontal (?)\n const handleKeyboardNav = async (e: React.KeyboardEvent) => {\n \n if (mapArrowNav && !isNaN(mapArrowNav)) {\n const findNextVisualTheme = async (perRow: number) => {\n const currentIdx = themeItems.current.findIndex((val) => val === theme);\n const nextIdx = currentIdx + perRow;\n if (nextIdx >= 0 && nextIdx < themeItems.current.length) {\n await updatePreference(themeItems.current[nextIdx]);\n\n // Focusing here instead of useEffect on theme change so that \n // it doesn’t steal focus when themes is not the first radio group in the sheet\n if (radioGroupRef.current) {\n const themeToFocus = radioGroupRef.current.querySelector(`#${themeItems.current[nextIdx]}`) as HTMLElement;\n if (themeToFocus) themeToFocus.focus();\n }\n }\n };\n\n switch(e.code) {\n case \"Escape\":\n dispatch(setActionOpen({ \n key: ThActionsKeys.settings,\n isOpen: false \n })); \n break;\n case \"ArrowUp\":\n e.preventDefault();\n await findNextVisualTheme(-mapArrowNav);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n await findNextVisualTheme(mapArrowNav);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(1) : await findNextVisualTheme(-1);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(-1) : await findNextVisualTheme(1);\n break;\n default:\n break;\n }\n }\n };\n\n // Edge case where the value stored is auto, but the array doesn’t have it\n useEffect(() => {\n if (theme === \"auto\" && !themeItems.current.includes(theme)) {\n updatePreference(themeItems.current[0]);\n }\n }, [theme, updatePreference]);\n\n return (\n <>\n <StatefulRadioGroup\n ref={ radioGroupRef }\n standalone={ true }\n label={ Locale.reader.settings.themes.title }\n value={ theme }\n onChange={ async (val) => await updatePreference(val as ThemeKeyType) }\n >\n <div className={ classNames(settingsStyles.readerSettingsRadioWrapper, settingsStyles.readerSettingsThemesWrapper) }>\n { themeItems.current.map(( t ) => \n <Radio\n className={ classNames(\n settingsStyles.readerSettingsRadio, \n settingsStyles.readerSettingsThemeRadio\n ) }\n value={ t }\n id={ t }\n key={ t }\n style={ doStyles(t) }\n { ...(mapArrowNav && !isNaN(mapArrowNav) ? {\n onKeyDown: (async (e: React.KeyboardEvent) => await handleKeyboardNav(e))\n } : {}) }\n >\n <span>\n { t in Locale.reader.settings.themes \n ? Locale.reader.settings.themes[t as keyof typeof Locale.reader.settings.themes]\n : t\n } \n { t === theme ? <CheckIcon aria-hidden=\"true\" focusable=\"false\" /> : <></> }\n </span>\n </Radio>\n ) }\n </div>\n </StatefulRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultWordSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles, setWordSpacing } from \"@/lib/settingsReducer\";\n\nexport const StatefulWordSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const wordSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.variant ?? defaultWordSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.range ?? defaultWordSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.step ?? defaultWordSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n wordSpacing: value\n });\n\n dispatch(setWordSpacing(getSetting(\"wordSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { wordSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.wordSpacing.title }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.wordSpacing.decrease,\n incrementLabel: Locale.reader.settings.wordSpacing.increase\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.wordSpacing.title }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n formatOptions={{ style: \"percent\" }}\n /> \n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgTextDecrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z\" /></svg>;\nexport default SvgTextDecrease;","import * as React from \"react\";\nconst SvgTextIncrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z\" /></svg>;\nexport default SvgTextIncrease;","import * as React from \"react\";\nconst SvgZoomOut = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400ZM280-540v-80h200v80H280Z\" /></svg>;\nexport default SvgZoomOut;","import * as React from \"react\";\nconst SvgZoomIn = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Zm-40-60v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z\" /></svg>;\nexport default SvgZoomIn;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { defaultFontSize, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport Decrease from \"./assets/icons/text_decrease.svg\";\nimport Increase from \"./assets/icons/text_increase.svg\";\nimport ZoomOut from \"./assets/icons/zoom_out.svg\";\nimport ZoomIn from \"./assets/icons/zoom_in.svg\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontSize } from \"@/lib/settingsReducer\";\n\nexport const StatefulZoom = () => {\n const RSPrefs = usePreferences();\n const fontSize = useAppSelector((state) => state.settings.fontSize);\n const isFXL = useAppSelector((state) => state.publication.isFXL);\n const dispatch = useAppDispatch();\n \n const { \n getSetting, \n submitPreferences,\n preferencesEditor \n } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontSize: value });\n dispatch(setFontSize(getSetting(\"fontSize\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n const getEffectiveRange = (preferred: [number, number] | undefined, fallback: [number, number], supportedRange: [number, number] | undefined): [number, number] => {\n if (!supportedRange) {\n return preferred || fallback\n }\n if (preferred && isRangeWithinSupportedRange(preferred, supportedRange)) {\n return preferred;\n }\n if (fallback && isRangeWithinSupportedRange(fallback, supportedRange)) {\n return fallback;\n }\n return supportedRange;\n }\n \n const isRangeWithinSupportedRange = (range: [number, number], supportedRange: [number, number]): boolean => {\n return Math.min(range[0], range[1]) >= Math.min(supportedRange[0], supportedRange[1]) &&\n Math.max(range[0], range[1]) <= Math.max(supportedRange[0], supportedRange[1]);\n }\n\n const zoomRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.variant || defaultFontSize.variant,\n range: preferencesEditor?.fontSize.supportedRange\n ? getEffectiveRange(RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range, defaultFontSize.range, preferencesEditor?.fontSize.supportedRange)\n : RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range || defaultFontSize.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.step || preferencesEditor?.fontSize.step || defaultFontSize.step\n }\n\n return (\n <>\n { zoomRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField\n standalone={ true}\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value) } \n label={ isFXL ? Locale.reader.settings.zoom.title : Locale.reader.settings.fontSize.title }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n steppers={{\n decrementIcon: isFXL ? ZoomOut : Decrease,\n decrementLabel: isFXL ? Locale.reader.settings.zoom.decrease : Locale.reader.settings.fontSize.decrease,\n incrementIcon: isFXL ? ZoomIn : Increase,\n incrementLabel: isFXL ? Locale.reader.settings.zoom.increase : Locale.reader.settings.fontSize.increase\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ true }\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value as number) } \n label={ isFXL ? Locale.reader.settings.zoom.title : Locale.reader.settings.fontSize.title }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n formatOptions={{ style: \"percent\" }} \n />\n } \n </>\n );\n};","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { ThActionsDockedPref } from \"@/preferences\";\n\nimport { DockStateObject } from \"@/lib/actionsReducer\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\n// TODO: Responsive.\n// When resizing the window, all widths should be recalculated.\n// There is no guarantee that the panel group is the same size as the window,\n// so we have to rewrite this hook to observe the panel group, and push the new\n// widths to the StatefulDockingWrapper so that it can update panels.\n// Note that the StatefulDockingWrapper cannot pass PanelGroup as a ref, \n// it requires using a utility method: getPanelGroupElement(id)\n// See https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels#can-a-attach-a-ref-to-the-dom-elements\nexport const useResizablePanel = (panel: DockStateObject) => {\n const RSPrefs = usePreferences();\n const defaultWidth = RSPrefs.theming.layout.defaults.dockingWidth;\n const [pref, setPref] = useState<ThActionsDockedPref | null>(\n panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null\n );\n\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const previouslyCollapsed = usePrevious(panel.collapsed);\n\n const previousWidth = actions.getDockedWidth(panel.actionKey) || null;\n const width = pref?.width || defaultWidth;\n const minWidth = pref?.minWidth && pref.minWidth < width \n ? pref.minWidth \n : defaultWidth < width \n ? defaultWidth\n : width;\n const maxWidth = pref?.maxWidth && pref.maxWidth > width \n ? pref.maxWidth \n : defaultWidth > width\n ? defaultWidth\n : width;\n\n const isPopulated = () => {\n return panel.active && actions.isOpen(panel.actionKey);\n };\n\n const isCollapsed = () => {\n return panel.collapsed;\n }\n\n const forceExpand = () => {\n return !!(isPopulated() && previouslyCollapsed && !panel.collapsed);\n }\n\n const currentKey = () => {\n return panel.actionKey;\n };\n\n const isResizable = () => {\n return isPopulated() ? Math.round(width) > Math.round(minWidth) && Math.round(width) < Math.round(maxWidth) : false;\n };\n\n const hasDragIndicator = () => {\n return pref?.dragIndicator || false;\n };\n\n const getWidth = useCallback(() => {\n return previousWidth \n ? Math.round((previousWidth / window.innerWidth) * 100) \n : Math.round((width / window.innerWidth) * 100);\n }, [previousWidth, width]);\n\n const getMinWidth = useCallback(() => {\n return Math.round((minWidth / window.innerWidth) * 100);\n }, [minWidth]);\n\n const getMaxWidth = useCallback(() => {\n return Math.round((maxWidth / window.innerWidth) * 100);\n }, [maxWidth]);\n\n const getCurrentPxWidth = useCallback((percentage: number) => {\n let current = Math.round((percentage * window.innerWidth) / 100);\n \n if (current < minWidth) {\n current = minWidth;\n }\n \n if (current > maxWidth) {\n current = maxWidth;\n }\n \n return current;\n }, [minWidth, maxWidth]);\n\n // When the docked action changes, we need to update its preferences \n useEffect(() => {\n setPref(panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null);\n }, [panel.actionKey, RSPrefs]);\n\n return {\n currentKey, \n isPopulated, \n isCollapsed, \n forceExpand, \n isResizable,\n hasDragIndicator, \n getWidth,\n getMinWidth,\n getMaxWidth,\n getCurrentPxWidth\n }\n}","\"use client\";\n\nimport { ReactNode, useCallback, useEffect, useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\n\nimport { ImperativePanelHandle, Panel, PanelGroup, PanelResizeHandle } from \"react-resizable-panels\";\n\nimport { ThDockingTypes, ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useResizablePanel } from \"./hooks/useResizablePanel\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { activateDockPanel, collapseDockPanel, deactivateDockPanel, expandDockPanel, setDockPanelWidth } from \"@/lib/actionsReducer\";\n\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport classNames from \"classnames\";\nimport parseTemplate from \"json-templates\";\n\nexport interface DockPanelSizes {\n width: number;\n minWidth: number;\n maxWidth: number;\n getCurrentPxWidth: (percentage: number) => number;\n}\n\nconst DockHandle = ({\n flow,\n isResizable,\n isPopulated, \n hasDragIndicator\n}: { \n flow: ThDockingKeys.start | ThDockingKeys.end;\n isResizable: boolean;\n isPopulated: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const handleID = `${ flow }-resize-handle`;\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabLeft : dockingStyles.dockResizeHandleGrabRight;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabRight : dockingStyles.dockResizeHandleGrabLeft;\n }\n }, [flow, direction]);\n\n return(\n <>\n <PanelResizeHandle \n id={ handleID } \n className={ dockingStyles.dockResizeHandle }\n disabled={ !isResizable }\n tabIndex={ isPopulated ? 0 : -1 }\n >\n { isResizable && hasDragIndicator && \n <div className={ classNames(dockingStyles.dockResizeHandleGrab, classFromFlow()) }></div> \n }\n </PanelResizeHandle>\n </>\n )\n};\n\nconst DockPanel = ({\n actionKey,\n flow,\n sizes,\n isResizable,\n isPopulated,\n isCollapsed,\n forceExpand,\n hasDragIndicator \n}: {\n actionKey: ActionsStateKeys | null;\n flow: ThDockingKeys.start | ThDockingKeys.end;\n sizes: DockPanelSizes;\n isResizable: boolean;\n isPopulated: boolean;\n isCollapsed: boolean;\n forceExpand: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const panelRef = useRef<ImperativePanelHandle>(null);\n const direction = useAppSelector(state => state.reader.direction);\n const dispatch = useAppDispatch();\n\n const dockClassName = flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr ? \"right-dock\" : \"left-dock\";\n\n const makeDockLabel = useCallback(() => { \n let label = \"\";\n if (flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr) {\n label += Locale.reader.app.docking.dockingRight;\n } else {\n label += Locale.reader.app.docking.dockingLeft\n }\n\n if (actionKey) {\n if (!isPopulated) {\n const jsonTemplate = parseTemplate(Locale.reader.app.docking.dockingClosed);\n // @ts-ignore\n label += ` – ${ jsonTemplate({ action: Locale.reader[actionKey].heading }) }`\n } else if (isCollapsed) {\n const jsonTemplate = parseTemplate(Locale.reader.app.docking.dockingCollapsed);\n // @ts-ignore\n label += ` – ${ jsonTemplate({ action: Locale.reader[actionKey].heading }) }`\n }\n } else {\n label += ` – ${ Locale.reader.app.docking.dockingEmpty }`\n }\n\n return label;\n }, [flow, direction, isPopulated, isCollapsed, actionKey]);\n\n const collapsePanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.collapse();\n dispatch(collapseDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n const expandPanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.expand();\n dispatch(expandDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n dispatch(activateDockPanel(flow));\n\n return () => {\n dispatch(deactivateDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n isPopulated || forceExpand ? expandPanel() : collapsePanel();\n }, [isPopulated, forceExpand, collapsePanel, expandPanel]);\n\n return(\n <>\n { flow === ThDockingKeys.end &&\n <DockHandle \n flow={ ThDockingKeys.end } \n isResizable={ isResizable } \n isPopulated={ isPopulated }\n hasDragIndicator={ hasDragIndicator } \n /> \n } \n <Panel \n id={ `${ flow }-panel` } \n order={ flow === ThDockingKeys.end ? 3 : 1 } \n collapsible={ true }\n collapsedSize={ 0 }\n ref={ panelRef }\n defaultSize={ isPopulated ? sizes.width : 0 } \n minSize={ sizes.minWidth } \n maxSize={ sizes.maxWidth }\n onCollapse={ collapsePanel }\n onExpand={ expandPanel }\n onResize={ (size: number) => size !== 0 && dispatch(setDockPanelWidth({\n key: flow,\n width: sizes.getCurrentPxWidth(size)\n }))}\n inert={ isCollapsed } \n >\n <div \n id={ flow } \n aria-label={ makeDockLabel() }\n className={ classNames(dockingStyles.dockPanelContainer, dockClassName) }\n ></div>\n </Panel>\n { flow === ThDockingKeys.start && \n <DockHandle \n flow={ ThDockingKeys.start } \n isResizable={ isResizable } \n isPopulated={ isPopulated } \n hasDragIndicator={ hasDragIndicator } \n /> \n } \n </>\n );\n};\n\nexport const StatefulDockingWrapper = ({ \n children\n}: { \n children: ReactNode; \n}) => {\n const RSPrefs = usePreferences();\n const dockingStart = useAppSelector(state => state.actions.dock[ThDockingKeys.start]);\n const dockingEnd = useAppSelector(state => state.actions.dock[ThDockingKeys.end])\n const startPanel = useResizablePanel(dockingStart);\n const endPanel = useResizablePanel(dockingEnd);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n if (!RSPrefs.docking.dock) {\n return(\n <>\n { children }\n </>\n )\n } else {\n const dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none\n });\n\n const dockConfig = breakpoint && dockingMap[breakpoint] || ThDockingTypes.both;\n\n return (\n <>\n <PanelGroup direction=\"horizontal\">\n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.start) \n && <DockPanel \n actionKey={ startPanel.currentKey() }\n flow={ ThDockingKeys.start } \n sizes={{\n width: startPanel.getWidth(),\n minWidth: startPanel.getMinWidth(),\n maxWidth: startPanel.getMaxWidth(),\n getCurrentPxWidth: startPanel.getCurrentPxWidth\n }} \n isResizable={ startPanel.isResizable() }\n isPopulated={ startPanel.isPopulated() }\n isCollapsed={ startPanel.isCollapsed() } \n forceExpand={ startPanel.forceExpand() }\n hasDragIndicator={ startPanel.hasDragIndicator() }\n />\n }\n \n <Panel id=\"main-panel\" order={ 2 }>\n { children }\n </Panel>\n \n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.end)\n && <DockPanel \n actionKey={ endPanel.currentKey() }\n flow={ ThDockingKeys.end } \n sizes={{\n width: endPanel.getWidth(),\n minWidth: endPanel.getMinWidth(),\n maxWidth: endPanel.getMaxWidth(),\n getCurrentPxWidth: endPanel.getCurrentPxWidth\n }} \n isResizable={ endPanel.isResizable() }\n isPopulated={ endPanel.isPopulated() }\n isCollapsed={ endPanel.isCollapsed() } \n forceExpand={ endPanel.forceExpand() }\n hasDragIndicator={ endPanel.hasDragIndicator() }\n />\n }\n </PanelGroup>\n </>\n )\n }\n}","import * as React from \"react\";\nconst SvgMoreVert = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z\" /></svg>;\nexport default SvgMoreVert;","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { TooltipProps } from \"react-aria-components\";\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport { ThActionButton, ThActionButtonProps } from \"@/core/Components/Buttons/ThActionButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement, isKeyboardTriggered } from \"@/core/Helpers/focusUtilities\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulActionIconProps extends ThActionButtonProps {\n visibility?: ThCollapsibilityVisibility;\n placement?: TooltipProps[\"placement\"];\n tooltipLabel?: string;\n}\n\nexport const StatefulActionIcon = ({\n visibility,\n placement,\n tooltipLabel,\n children,\n ...props\n}: StatefulActionIconProps) => {\n const RSPrefs = usePreferences();\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n const dispatch = useAppDispatch();\n\n const handleClassNameFromState = () => {\n let className = \"\";\n \n switch(visibility) {\n case ThCollapsibilityVisibility.always:\n className = readerSharedUI.alwaysVisible;\n break;\n case ThCollapsibilityVisibility.partially:\n className = readerSharedUI.partiallyVisible;\n break;\n case ThCollapsibilityVisibility.overflow:\n default:\n break;\n }\n\n return className\n };\n\n const defaultOnPressFunc = () => {\n dispatch(setImmersive(false));\n };\n\n const handleImmersive = (event: React.FocusEvent) => {\n // Check whether the focus was triggered by keyboard…\n // We don’t have access to type/modality, unlike onPress\n if (isKeyboardTriggered(event.target)) {\n dispatch(setImmersive(false));\n }\n };\n\n const blurOnEsc = (event: React.KeyboardEvent) => {\n // TODO: handle Tooltip cos first time you press esc, it’s the tooltip that is closed.\n if (triggerRef.current && isActiveElement(triggerRef.current) && event.code === \"Escape\") {\n triggerRef.current.blur();\n }\n };\n\n return (\n <ThActionButton\n ref={ triggerRef }\n className={ classNames(readerSharedUI.icon, handleClassNameFromState(), props.className) } \n onPress={ props.onPress || defaultOnPressFunc }\n onKeyDown={ blurOnEsc } \n onFocus={ handleImmersive }\n compounds={ tooltipLabel ? {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: placement,\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: tooltipLabel\n } : undefined }\n { ...Object.fromEntries(Object.entries(props).filter(([key]) => key !== \"className\")) }\n >\n { children }\n </ThActionButton>\n )\n};","\"use client\";\n\nimport React, { ReactNode, RefObject } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport overflowMenuStyles from \"./assets/styles/overflowMenu.module.css\";\n\nimport MenuIcon from \"./assets/icons/more_vert.svg\";\n\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { ThMenu } from \"@/core/Components/Menu/ThMenu\";\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionIcon } from \"./Triggers/StatefulActionIcon\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { toggleImmersive } from \"@/lib/readerReducer\";\nimport { setOverflow } from \"@/lib/actionsReducer\";\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\n\nexport interface StatefulOverflowMenuProps {\n id: string;\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n triggerRef: RefObject<HTMLElement | null>;\n className?: string;\n actionFallback?: boolean;\n display: boolean;\n children?: ReactNode;\n}\n\nexport const StatefulOverflowMenu = ({ \n id,\n className, \n actionFallback,\n display,\n items,\n triggerRef\n}: StatefulOverflowMenuProps) => {\n const dispatch = useAppDispatch();\n\n const toggleMenuState = (value: boolean) => {\n dispatch(setOverflow({\n key: id,\n isOpen: value\n }));\n }\n\n if (items.length > 0 && (display)) {\n return (\n <>\n <ThMenu \n id={ id }\n triggerRef={ triggerRef }\n selectionMode=\"none\" \n className={ overflowMenuStyles.overflowMenu }\n dependencies={ [\"Trigger\"] }\n items={ items }\n compounds={{\n menuTrigger: {\n onOpenChange: (val: boolean) => toggleMenuState(val)\n },\n popover: {\n placement: \"bottom\",\n className: overflowMenuStyles.overflowPopover\n },\n button: (\n <StatefulActionIcon\n className={ className ? className : overflowMenuStyles.activeButton }\n aria-label={ Locale.reader.overflowMenu.active.trigger }\n placement=\"bottom\"\n tooltipLabel={ Locale.reader.overflowMenu.active.tooltip }\n visibility={ ThCollapsibilityVisibility.always }\n >\n <MenuIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n ),\n }}\n />\n </>\n )\n } else {\n if (actionFallback) {\n return(\n <>\n <StatefulActionIcon \n className={ className ? className : overflowMenuStyles.hintButton } \n aria-label={ Locale.reader.overflowMenu.hint.trigger }\n placement=\"bottom\"\n tooltipLabel={ Locale.reader.overflowMenu.hint.tooltip } \n visibility={ ThCollapsibilityVisibility.always }\n onPress={ () => { dispatch(toggleImmersive()) } }\n preventFocusOnPress={ true }\n >\n <MenuIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n </>\n )\n } else {\n return(<></>)\n }\n }\n}","\"use client\";\n\nimport { useRef } from \"react\";\n\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThCollapsibleActionsBar, ThCollapsibleActionsBarProps } from \"@/core/Components/Actions/ThCollapsibleActionsBar\";\nimport { StatefulOverflowMenu } from \"./StatefulOverflowMenu\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport interface StatefulCollapsibleActionsBarProps extends ThCollapsibleActionsBarProps {\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n overflowActionCallback?: boolean;\n overflowMenuClassName?: string;\n overflowMenuDisplay?: boolean;\n}\n\nexport const StatefulCollapsibleActionsBar = ({\n id, \n items,\n overflowActionCallback,\n overflowMenuClassName,\n overflowMenuDisplay,\n ...props\n}: StatefulCollapsibleActionsBarProps) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n return (\n <>\n <ThCollapsibleActionsBar \n ref={ ref }\n id={ id }\n items={ items }\n breakpoint={ breakpoint }\n compounds={{\n menu: (<StatefulOverflowMenu \n id={ id }\n triggerRef={ ref }\n display={ overflowMenuDisplay || true }\n className={ overflowMenuClassName } \n actionFallback={ overflowActionCallback }\n items={ [] }\n />) }}\n { ...props }\n />\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { ActionKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport readerHeaderStyles from \"./assets/styles/readerHeader.module.css\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThHeader } from \"@/core/Components/Reader/ThHeader\";\nimport { ThRunningHead } from \"@/core/Components/Reader/ThRunningHead\";\nimport { StatefulCollapsibleActionsBar } from \"./Actions/StatefulCollapsibleActionsBar\";\n\nimport { usePlugins } from \"./Plugins/PluginProvider\";\nimport { usePreferences } from \"@/preferences/hooks\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\n\nexport const StatefulReaderHeader = () => {\n const { reflowActionKeys, fxlActionKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { actionsComponentsMap } = usePlugins();\n \n const isFXL = useAppSelector(state => state.publication.isFXL);\n const runningHead = useAppSelector(state => state.publication.runningHead);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n const dispatch = useAppDispatch();\n\n const setHover = () => {\n dispatch(setHovering(true));\n };\n\n const removeHover = () => {\n dispatch(setHovering(false));\n };\n\n const listActionItems = useCallback(() => {\n const actionKeys = isFXL? fxlActionKeys : reflowActionKeys;\n const actionsItems: ThActionEntry<ActionKeyType>[] = [];\n\n if (actionsComponentsMap && Object.keys(actionsComponentsMap).length > 0) {\n actionKeys.forEach((key) => { \n if (actionsComponentsMap[key]) {\n actionsItems.push({\n Trigger: actionsComponentsMap[key].Trigger,\n Target: actionsComponentsMap[key].Target,\n key: key\n });\n } else {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n }\n });\n }\n \n return actionsItems;\n }, [isFXL, fxlActionKeys, reflowActionKeys, actionsComponentsMap]);\n\n return (\n <>\n <ThHeader \n className={ readerHeaderStyles.header } \n id=\"top-bar\" \n aria-label={ Locale.reader.app.header.label } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n >\n <ThRunningHead \n label={ runningHead || Locale.reader.app.header.runningHeadFallback } \n syncDocTitle={ true }\n aria-label={ Locale.reader.app.header.runningHead }\n />\n \n <StatefulCollapsibleActionsBar \n id=\"reader-header-overflowMenu\" \n items={ listActionItems() }\n prefs={{ ...RSPrefs.actions, displayOrder: isFXL ? RSPrefs.actions.fxlOrder : RSPrefs.actions.reflowOrder }}\n className={ readerHeaderStyles.actionsWrapper } \n aria-label={ Locale.reader.app.header.actions } \n overflowActionCallback={ (isImmersive && !isHovering) }\n overflowMenuDisplay={ (!isImmersive || isHovering) }\n />\n </ThHeader>\n </>\n );\n}","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport arrowStyles from \"./assets/styles/readerArrowButton.module.css\";\nimport readerSharedUI from \"./assets/styles/readerSharedUI.module.css\";\n\nimport { PressEvent } from \"react-aria\";\n\nimport { ThNavigationButton, ThNavigationButtonProps } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setArrows } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulReaderArrowButtonProps extends ThNavigationButtonProps {\n direction: \"left\" | \"right\";\n occupySpace: boolean;\n}\n\nexport const StatefulReaderArrowButton = ({\n direction,\n occupySpace,\n className,\n isDisabled,\n onPress,\n ...props\n}: StatefulReaderArrowButtonProps) => {\n const RSPrefs = usePreferences();\n \n const buttonRef = useRef<HTMLButtonElement>(null);\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const hasArrows = useAppSelector(state => state.reader.hasArrows);\n\n const isScroll = useAppSelector(state => state.settings.scroll);\n const wasScroll = usePrevious(isScroll);\n\n const dispatch = useAppDispatch();\n\n const [isHovering, setIsHovering] = useState(false);\n\n const switchedFromScrollable = () => {\n return wasScroll && !isScroll;\n }\n\n const label = (\n direction === \"right\" && !isRTL || \n direction === \"left\" && isRTL\n ) \n ? Locale.reader.navigation.goForward \n : Locale.reader.navigation.goBackward;\n\n const handleClassNameFromState = () => {\n let className = \"\";\n if (!hasArrows && !switchedFromScrollable()) {\n className = arrowStyles.visuallyHidden;\n }\n return className;\n };\n\n const handleClassNameFromSpaceProp = () => {\n let className = \"\";\n if (occupySpace) {\n className = arrowStyles.viewportLarge;\n }\n return className;\n };\n\n useEffect(() => {\n if ((isDisabled || (!hasArrows && !isHovering)) && isActiveElement(buttonRef.current)) {\n buttonRef.current!.blur();\n }\n });\n\n const blurOnEsc = (event: React.KeyboardEvent) => { \n if (isActiveElement(buttonRef.current) && event.code === \"Escape\") {\n buttonRef.current!.blur();\n }\n };\n\n const handleOnPress = (e: PressEvent, cb: (e: PressEvent) => void) => {\n dispatch(setArrows(false));\n cb(e);\n }\n\n return (\n <>\n <ThNavigationButton \n direction={ direction }\n ref= { buttonRef }\n aria-label={ label }\n onPress={ (e: PressEvent) => onPress && handleOnPress(e, onPress) }\n onHoverChange={ (isHovering: boolean) => setIsHovering(isHovering) } \n onKeyDown={ blurOnEsc }\n className={ classNames(className, handleClassNameFromSpaceProp(), handleClassNameFromState()) }\n isDisabled={ isDisabled }\n preventFocusOnPress={ true }\n { ...props }\n compounds={ {\n tooltipTrigger: {\n delay: RSPrefs.theming.arrow.tooltipDelay,\n closeDelay: RSPrefs.theming.arrow.tooltipDelay\n },\n tooltip: {\n placement: direction === \"left\" ? \"right\" : \"left\",\n className: readerSharedUI.tooltip\n },\n label: label\n } }\n />\n </>\n )\n}","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\nimport progressionStyles from \"./assets/styles/readerProgression.module.css\";\n\nimport { ThProgression } from \"@/core/Components/Reader/ThProgression\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport parseTemplate from \"json-templates\";\n\nexport interface UnstableProgressionObject {\n totalPositions?: number;\n currentPositions?: number[];\n relativeProgression?: number;\n currentChapter?: string;\n totalProgression?: number;\n currentPublication?: string;\n}\n\nexport const StatefulReaderProgression = () => {\n const jsonTemplate = parseTemplate(Locale.reader.app.progression.of);\n const progression: UnstableProgressionObject = useAppSelector(state => state.publication.progression);\n\n const [current, setCurrent] = useState(\"\");\n const [reference, setReference] = useState(\"\");\n\n useEffect(() => {\n if (progression.totalPositions && progression.currentPositions) {\n setCurrent(progression.currentPositions.length === 2 ? `${progression.currentPositions[0]}–${progression.currentPositions[1]}` : `${progression.currentPositions}`);\n setReference(`${progression.totalPositions}`);\n } else if (progression.totalProgression !== undefined && progression.currentPublication) {\n setCurrent(`${Math.round(progression.totalProgression * 100)}%`);\n setReference(progression.currentPublication);\n } else if (progression.relativeProgression !== undefined && progression.currentChapter) {\n setCurrent(`${Math.round(progression.relativeProgression * 100)}%`);\n setReference(progression.currentChapter);\n } else {\n setCurrent(\"\");\n setReference(\"\");\n }\n }, [progression])\n\n return (\n <>\n {( current && reference ) \n && <ThProgression \n id={ progressionStyles.current } \n aria-label={ Locale.reader.app.progression.wrapper }\n >\n { jsonTemplate({ current: current, reference: reference }) }\n </ThProgression>}\n </>\n )\n}","\"use client\";\n\nimport React from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch } from \"@/lib/hooks\";\n\nimport { ThFooter } from \"@/core/Components/Reader/ThFooter\";\nimport { StatefulReaderProgression } from \"./StatefulReaderProgression\";\n\nexport const StatefulReaderFooter = () => {\n const dispatch = useAppDispatch();\n\n const setHover = () => {\n dispatch(setHovering(true));\n };\n\n const removeHover = () => {\n dispatch(setHovering(false));\n };\n\n return(\n <>\n <ThFooter \n id=\"bottom-bar\" \n aria-label={ Locale.reader.app.footer.label } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n >\n <StatefulReaderProgression />\n </ThFooter>\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useEffect, useRef } from \"react\";\n\nimport { \n defaultFontFamilyOptions, \n defaultLineHeights, \n ThemeKeyType, \n usePreferenceKeys, \n useTheming\n} from \"../../preferences\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport \"../assets/styles/reader.css\";\nimport arrowStyles from \"../assets/styles/readerArrowButton.module.css\";\n\nimport { \n ThActionsKeys, \n ThBreakpoints, \n ThLineHeightOptions, \n ThScrollBackTo, \n ThSettingsKeys, \n ThTextAlignOptions, \n ThLayoutStrategy, \n ThLayoutUI\n} from \"../../preferences/models/enums\";\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\n\nimport { ThPlugin, ThPluginRegistry } from \"../Plugins/PluginRegistry\";\n\nimport { I18nProvider } from \"react-aria\";\nimport { ThPluginProvider } from \"../Plugins/PluginProvider\";\n\nimport {\n BasicTextSelection,\n FrameClickEvent,\n} from \"@readium/navigator-html-injectables\";\nimport { \n EpubNavigatorListeners, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences, \n LayoutStrategy, \n TextAlignment\n} from \"@readium/navigator\";\nimport { \n Locator, \n Manifest, \n Publication, \n Fetcher, \n HttpFetcher, \n EPUBLayout, \n ReadingProgression, \n Link\n} from \"@readium/shared\";\n\nimport { StatefulDockingWrapper } from \"../Docking/StatefulDockingWrapper\";\nimport { StatefulReaderHeader } from \"../StatefulReaderHeader\";\nimport { StatefulReaderArrowButton } from \"../StatefulReaderArrowButton\";\nimport { StatefulReaderFooter } from \"../StatefulReaderFooter\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\n\nimport { toggleActionOpen } from \"@/lib/actionsReducer\";\nimport { useAppSelector, useAppDispatch, useAppStore } from \"@/lib/hooks\";\nimport { AppDispatch } from \"@/lib/store\";\nimport { \n setBreakpoint, \n setColorScheme, \n setContrast, \n setForcedColors, \n setMonochrome, \n setReducedMotion, \n setReducedTransparency, \n setTheme, \n ThemeStateObject \n} from \"@/lib/themeReducer\";\nimport { \n setImmersive, \n setLoading,\n setHovering, \n toggleImmersive, \n setPlatformModifier, \n setDirection, \n setArrows, \n setFullscreen\n} from \"@/lib/readerReducer\";\nimport { \n setFXL, \n setRTL, \n setProgression, \n setRunningHead, \n setTocTree, \n setTocEntry,\n setPositionsList\n} from \"@/lib/publicationReducer\";\nimport { LineLengthStateObject } from \"@/lib/settingsReducer\";\n\nimport classNames from \"classnames\";\nimport debounce from \"debounce\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\nimport { createDefaultPlugin } from \"../Plugins/helpers/createDefaultPlugin\";\nimport Peripherals from \"../../helpers/peripherals\";\nimport { TH_CUSTOM_SCHEME, ThScrollActions } from \"@/core/Hooks/Epub/scrollAffordance\";\nimport { localData } from \"@/core/Helpers/localData\";\nimport { getPlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { createTocTree, TocItem } from \"@/helpers/createTocTree\";\nimport { deserializePositions } from \"@/helpers/deserializePositions\";\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\n\nexport interface ReadiumCSSSettings {\n columnCount: string;\n fontFamily: keyof typeof defaultFontFamilyOptions | null;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineLength: LineLengthStateObject;\n lineHeight: ThLineHeightOptions | null;\n layoutStrategy: ThLayoutStrategy;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n textAlign: ThTextAlignOptions | null;\n textNormalization: boolean;\n theme?: string;\n wordSpacing: number | null;\n}\n\nexport interface StatelessCache {\n layoutUI: ThLayoutUI;\n isImmersive: boolean;\n arrowsOccupySpace: boolean;\n settings: ReadiumCSSSettings;\n tocTree?: TocItem[];\n positionsList: Locator[];\n colorScheme?: ThColorScheme;\n reducedMotion?: boolean;\n}\n\nexport interface StatefulReaderProps {\n rawManifest: object;\n selfHref: string;\n plugins?: ThPlugin[];\n}\n\nexport const StatefulReader = ({ \n rawManifest, \n selfHref, \n plugins \n}: StatefulReaderProps) => {\n if (plugins && plugins.length > 0) {\n plugins.forEach(plugin => {\n ThPluginRegistry.register(plugin);\n });\n } else {\n ThPluginRegistry.register(createDefaultPlugin());\n }\n \n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n \n const container = useRef<HTMLDivElement>(null);\n const publication = useRef<Publication | null>(null);\n const localDataKey = useRef(`${selfHref}-current-location`);\n const arrowsWidth = useRef(2 * ((RSPrefs.theming.arrow.size || 40) + (RSPrefs.theming.arrow.offset || 0)));\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const tocTree = useAppSelector(state => state.publication.tocTree);\n const tocEntry = useAppSelector(state => state.publication.tocEntry);\n\n const layoutUI = isFXL \n ? RSPrefs.theming.layout.ui?.fxl || ThLayoutUI.layered \n : ThLayoutUI.stacked;\n\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const columnCount = useAppSelector(state => state.settings.columnCount);\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontSize = useAppSelector(state => state.settings.fontSize);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const layoutStrategy = useAppSelector(state => state.settings.layoutStrategy);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const lineLength = useAppSelector(state => state.settings.lineLength);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isPaged = !scroll;\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const previousTheme = usePrevious(theme);\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const arrowsOccupySpace = breakpoint && \n (breakpoint === ThBreakpoints.large || breakpoint === ThBreakpoints.xLarge);\n \n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n // Init theming (breakpoints, theme, media queries…)\n useTheming<ThemeKeyType>({ \n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemKeys: RSPrefs.theming.themes.systemThemes,\n breakpointsMap: RSPrefs.theming.breakpoints,\n initProps: {\n ...propsToCSSVars(RSPrefs.theming.arrow, \"arrow\"), \n ...propsToCSSVars(RSPrefs.theming.icon, \"icon\"),\n ...propsToCSSVars(RSPrefs.theming.layout, \"layout\")\n },\n onBreakpointChange: (breakpoint) => dispatch(setBreakpoint(breakpoint)),\n onColorSchemeChange: (colorScheme) => dispatch(setColorScheme(colorScheme)),\n onContrastChange: (contrast) => dispatch(setContrast(contrast)),\n onForcedColorsChange: (forcedColors) => dispatch(setForcedColors(forcedColors)),\n onMonochromeChange: (isMonochrome) => dispatch(setMonochrome(isMonochrome)),\n onReducedMotionChange: (reducedMotion) => dispatch(setReducedMotion(reducedMotion)),\n onReducedTransparencyChange: (reducedTransparency) => dispatch(setReducedTransparency(reducedTransparency))\n });\n\n // We need to use a cache so that we can use updated values\n // without re-rendering the component, and reloading EpubNavigator\n const cache = useRef<StatelessCache>({\n layoutUI: layoutUI,\n isImmersive: isImmersive,\n arrowsOccupySpace: arrowsOccupySpace || false,\n settings: {\n columnCount: columnCount,\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeight: fontWeight,\n hyphens: hyphens,\n layoutStrategy: layoutStrategy,\n letterSpacing: letterSpacing,\n lineHeight: lineHeight,\n lineLength: lineLength,\n paragraphIndent: paragraphIndent,\n paragraphSpacing: paragraphSpacing,\n publisherStyles: publisherStyles,\n scroll: scroll,\n textAlign: textAlign,\n textNormalization: textNormalization,\n theme: theme,\n wordSpacing: wordSpacing\n },\n tocTree: tocTree,\n positionsList: positionsList || [],\n colorScheme: colorScheme,\n reducedMotion: reducedMotion\n });\n\n const atPublicationStart = useAppSelector(state => state.publication.atPublicationStart);\n const atPublicationEnd = useAppSelector(state => state.publication.atPublicationEnd);\n\n const dispatch = useAppDispatch();\n\n const onFsChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n const fs = useFullscreen(onFsChange);\n\n const { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \n goLeft, \n goRight, \n goBackward, \n goForward, \n scrollBackTo, \n navLayout,\n currentLocator,\n currentPositions,\n getCframes,\n onFXLPositionChange,\n handleScrollAffordances,\n submitPreferences\n } = useEpubNavigator();\n\n const activateImmersiveOnAction = useCallback(() => {\n if (!cache.current.isImmersive) dispatch(setImmersive(true));\n }, [dispatch]);\n\n const toggleIsImmersive = useCallback(() => {\n // If tap/click in iframe, then header/footer no longer hoovering \n dispatch(setHovering(false));\n dispatch(setArrows(false));\n dispatch(toggleImmersive());\n }, [dispatch]);\n\n useEffect(() => {\n cache.current.isImmersive = isImmersive;\n }, [isImmersive]);\n\n // Warning: this is using navigator’s internal methods that will become private, do not rely on them\n // See https://github.com/edrlab/thorium-web/issues/25\n const handleTap = (event: FrameClickEvent) => {\n const _cframes = getCframes();\n if (_cframes && !cache.current.settings.scroll) {\n const oneQuarter = ((_cframes.length === 2 ? _cframes[0]!.window.innerWidth + _cframes[1]!.window.innerWidth : _cframes![0]!.window.innerWidth) * window.devicePixelRatio) / 4;\n \n if (event.x < oneQuarter) {\n goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\n } \n else if (event.x > oneQuarter * 3) {\n goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n } else if (oneQuarter <= event.x && event.x <= oneQuarter * 3) {\n toggleIsImmersive();\n }\n } else {\n toggleIsImmersive();\n }\n };\n\n const handleProgression = useCallback((locator: Locator) => {\n const relativeRef = locator.title || Locale.reader.app.progression.referenceFallback;\n \n dispatch(setProgression( { \n currentPositions: currentPositions(), \n relativeProgression: locator.locations.progression, \n currentChapter: relativeRef, \n totalProgression: locator.locations.totalProgression \n }));\n }, [dispatch, currentPositions]);\n\n const handleTocEntryOnNav = useCallback((locator?: Locator) => {\n if (!locator) return;\n\n if (cache.current.tocTree) {\n const findMatch = (items: TocItem[], link?: Link): TocItem | undefined => {\n for (const item of items) {\n if (item.href === link?.href) {\n return item;\n }\n if (item.children) {\n const match = findMatch(item.children, link);\n if (match) {\n return match;\n }\n }\n }\n return undefined;\n };\n\n // First try to find a match for the current position\n const currentMatch = findMatch(cache.current.tocTree, new Link(locator));\n if (currentMatch) {\n dispatch(setTocEntry(currentMatch.id));\n return;\n }\n\n // If we're in FXL and didn't find a match, try to find a match for the other position in the spread\n if (navLayout() === EPUBLayout.fixed) {\n const positions = currentPositions();\n if (positions && positions.length === 2) {\n // We have a spread, get the other position\n const otherPosition = positions[0] === locator.locations.position ? positions[1] : positions[0];\n \n // Find the other position in positionsList\n const otherPositionInList = cache.current.positionsList.find((pos: Locator) => pos.locations.position === otherPosition);\n if (otherPositionInList) {\n const match = findMatch(cache.current.tocTree, new Link(otherPositionInList));\n if (match) {\n dispatch(setTocEntry(match.id));\n return;\n }\n }\n }\n }\n }\n }, [dispatch, currentPositions, navLayout]);\n\n // We need this as a workaround due to positionChanged being unreliable\n // in FXL – if the frame is in the pool hidden and is shown again,\n // positionChanged won’t fire.\n const handleFXLProgression = useCallback((locator: Locator) => {\n handleProgression(locator);\n handleTocEntryOnNav(locator);\n localData.set(localDataKey.current, locator);\n }, [handleProgression, handleTocEntryOnNav]);\n\n onFXLPositionChange(handleFXLProgression);\n\n const initReadingEnv = async () => {\n if (navLayout() === EPUBLayout.fixed) {\n // [TMP] Working around positionChanged not firing consistently for FXL\n // Init’ing so that progression can be populated on first spread loaded\n const cLoc = currentLocator();\n if (cLoc) {\n handleFXLProgression(cLoc);\n };\n } else {\n // [TMP] We need to handle this in multiple places due to the lack of Injection API.\n // This mounts and unmounts scroll affordances on iframe loaded\n handleScrollAffordances(cache.current.settings.scroll);\n }\n };\n\n const p = new Peripherals(useAppStore(), RSPrefs.actions, {\n moveTo: (direction) => {\n switch(direction) {\n case \"right\":\n if (!cache.current.settings.scroll) goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n break;\n case \"left\":\n if (!cache.current.settings.scroll) goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\n break;\n case \"up\":\n case \"home\":\n // Home should probably go to first column/page of chapter in reflow?\n if (cache.current.settings.scroll) activateImmersiveOnAction();\n break;\n case \"down\":\n case \"end\":\n // End should probably go to last column/page of chapter in reflow?\n if (cache.current.settings.scroll) activateImmersiveOnAction();\n break;\n default:\n break;\n }\n },\n goProgression: (shiftKey) => {\n if (!cache.current.settings?.scroll) {\n shiftKey \n ? goBackward(!cache.current.reducedMotion, activateImmersiveOnAction) \n : goForward(!cache.current.reducedMotion, activateImmersiveOnAction);\n } else {\n activateImmersiveOnAction();\n }\n },\n toggleAction: (actionKey) => {\n switch (actionKey) {\n case ThActionsKeys.fullscreen:\n fs.handleFullscreen();\n break;\n case ThActionsKeys.settings:\n case ThActionsKeys.toc:\n dispatch(toggleActionOpen({\n key: actionKey\n }))\n break;\n // case ThActionsKeys.jumpToPosition:\n default:\n break\n }\n }\n });\n\n const listeners: EpubNavigatorListeners = {\n frameLoaded: async function (_wnd: Window): Promise<void> {\n await initReadingEnv();\n // Warning: this is using navigator’s internal methods that will become private, do not rely on them\n // See https://github.com/edrlab/thorium-web/issues/25\n const _cframes = getCframes();\n _cframes?.forEach(\n (frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) p.observe(frameManager.window);\n }\n );\n p.observe(window);\n },\n positionChanged: async function (locator: Locator): Promise<void> {\n const currentLocator = localData.get(localDataKey.current);\n if (currentLocator?.href !== locator.href) {\n handleTocEntryOnNav(locator);\n }\n\n // This can’t be relied upon with FXL to handleProgression at the moment,\n // Only reflowable snappers will register the \"progress\" event\n // that triggers positionChanged every time the progression changes\n // in FXL, only first_visible_locator will, which is why it triggers when\n // the spread has not been shown yet, but won’t if you just slid to them.\n if (navLayout() === EPUBLayout.reflowable) {\n // Due to the lack of injection API we need to force scroll \n // to mount/unmount scroll affordances ATM \n const debouncedHandleProgression = debounce(\n async () => {\n // TMP: To mount/unmount scroll affordances in the absence of the injection API.\n // This is to make sure frames already loaded will mount/unmount scroll affordances. \n // We need to debounce because of swipe, which has a 150ms animation in Column Snapper, \n // otherwise the iframe will stay hidden since we must change the ReadingProgression,\n // that requires re-loading the frame pool\n if (currentLocator?.href !== locator.href) {\n handleScrollAffordances(cache.current.settings.scroll);\n }\n handleProgression(locator);\n localData.set(localDataKey.current, locator);\n }, 250);\n debouncedHandleProgression();\n }\n },\n tap: function (_e: FrameClickEvent): boolean {\n handleTap(_e);\n return true;\n },\n click: function (_e: FrameClickEvent): boolean {\n (cache.current.layoutUI === ThLayoutUI.layered) && handleTap(_e);\n return true;\n },\n zoom: function (_scale: number): void {},\n miscPointer: function (_amount: number): void {},\n customEvent: function (_key: string, _data: unknown): void {},\n handleLocator: function (locator: Locator): boolean {\n const href = locator.href;\n\n // Scroll Affordances\n // That’s not great though\n if (href.includes(TH_CUSTOM_SCHEME)) {\n if (href.includes(ThScrollActions.prev)) {\n goLeft(false, () => { scrollBackTo(RSPrefs.scroll.backTo) }); \n } else if (href.includes(ThScrollActions.next)) {\n goRight(false, () => { scrollBackTo(ThScrollBackTo.top) });\n }\n } else if (\n href.startsWith(\"http://\") ||\n href.startsWith(\"https://\") ||\n href.startsWith(\"mailto:\") ||\n href.startsWith(\"tel:\")\n ) {\n if (confirm(`Open \"${href}\" ?`)) window.open(href, \"_blank\");\n } else {\n console.warn(\"Unhandled locator\", locator);\n }\n return false;\n },\n textSelected: function (_selection: BasicTextSelection): void {},\n };\n\n const applyConstraint = useCallback(async (value: number) => {\n await submitPreferences({\n constraint: value\n })\n }, [submitPreferences]);\n\n // Handling side effects on Navigator\n\n useEffect(() => {\n cache.current.layoutUI = layoutUI;\n }, [layoutUI]);\n\n useEffect(() => {\n cache.current.settings.scroll = scroll;\n\n const handleConstraint = async (value: number) => {\n await applyConstraint(value)\n }\n\n if (!scroll) {\n handleConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n .catch(console.error);\n } else {\n handleConstraint(0)\n .catch(console.error);\n }\n }, [scroll, arrowsOccupySpace, applyConstraint]);\n\n useEffect(() => {\n cache.current.settings.columnCount = columnCount;\n }, [columnCount]);\n\n useEffect(() => {\n cache.current.settings.fontFamily = fontFamily;\n }, [fontFamily]);\n\n useEffect(() => {\n cache.current.settings.fontSize = fontSize;\n }, [fontSize]);\n\n useEffect(() => {\n cache.current.settings.fontWeight = fontWeight;\n }, [fontWeight]);\n\n useEffect(() => {\n cache.current.settings.hyphens = hyphens;\n }, [hyphens]);\n\n useEffect(() => {\n cache.current.settings.layoutStrategy = layoutStrategy;\n }, [layoutStrategy]);\n\n useEffect(() => {\n cache.current.settings.letterSpacing = letterSpacing;\n }, [letterSpacing]);\n\n useEffect(() => {\n cache.current.settings.lineHeight = lineHeight;\n }, [lineHeight]);\n\n useEffect(() => {\n cache.current.settings.lineLength = lineLength;\n }, [lineLength]);\n\n useEffect(() => {\n cache.current.settings.paragraphIndent = paragraphIndent;\n }, [paragraphIndent]);\n\n useEffect(() => {\n cache.current.settings.paragraphSpacing = paragraphSpacing;\n }, [paragraphSpacing]);\n\n useEffect(() => {\n cache.current.settings.textAlign = textAlign;\n }, [textAlign]);\n\n useEffect(() => {\n cache.current.settings.textNormalization = textNormalization;\n }, [textNormalization]);\n\n useEffect(() => {\n cache.current.settings.theme = theme;\n }, [theme]);\n\n useEffect(() => {\n cache.current.settings.wordSpacing = wordSpacing;\n }, [wordSpacing]);\n\n useEffect(() => {\n cache.current.positionsList = positionsList || [];\n }, [positionsList]);\n\n useEffect(() => {\n cache.current.tocTree = tocTree;\n\n if (tocEntry) return;\n\n const knownPosition: Locator = localData.get(localDataKey.current);\n if (knownPosition) {\n handleTocEntryOnNav(knownPosition);\n } else {\n const initialTocEntry = tocTree?.[0];\n if (initialTocEntry) {\n handleTocEntryOnNav(new Locator({ href: initialTocEntry.href, type: \"\" }));\n }\n }\n }, [tocTree, tocEntry, handleTocEntryOnNav]);\n\n useEffect(() => {\n cache.current.arrowsOccupySpace = arrowsOccupySpace || false;\n }, [arrowsOccupySpace]);\n\n useEffect(() => {\n cache.current.reducedMotion = reducedMotion;\n }, [reducedMotion]);\n\n // Theme can also change on colorScheme change so\n // we have to handle this side-effect but we can’t\n // from the ReadingDisplayTheme component since it\n // would have to be mounted for this to work\n useEffect(() => {\n if (cache.current.colorScheme !== colorScheme) {\n cache.current.colorScheme = colorScheme;\n }\n\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n\n // Protecting against re-applying on theme change\n if (theme !== \"auto\" && previousTheme !== theme) return;\n\n const applyCurrentTheme = async () => {\n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const themeKey = themeKeys.includes(theme as any) ? theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: themeKey,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme\n });\n await submitPreferences(themeProps);\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: themeKey \n }));\n };\n\n applyCurrentTheme()\n .catch(console.error);\n }, [themeObject, previousTheme, RSPrefs.theming.themes, fxlThemeKeys, reflowThemeKeys, colorScheme, isFXL, submitPreferences, dispatch]);\n\n useEffect(() => {\n RSPrefs.direction && dispatch(setDirection(RSPrefs.direction));\n dispatch(setPlatformModifier(getPlatformModifier()));\n }, [RSPrefs.direction, dispatch]);\n\n useEffect(() => {\n const handleConstraint = async () => {\n await applyConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n }\n handleConstraint()\n .catch(console.error);\n }, [arrowsOccupySpace, applyConstraint]);\n\n useEffect(() => {\n const fetcher: Fetcher = new HttpFetcher(undefined, selfHref);\n const manifest = Manifest.deserialize(rawManifest)!;\n manifest.setSelfLink(selfHref);\n\n publication.current = new Publication({\n manifest: manifest,\n fetcher: fetcher\n });\n\n dispatch(setRTL(publication.current.metadata.effectiveReadingProgression === ReadingProgression.rtl));\n dispatch(setFXL(publication.current.metadata.getPresentation()?.layout === EPUBLayout.fixed));\n\n const pubTitle = publication.current.metadata.title.getTranslation(\"en\");\n\n dispatch(setRunningHead(pubTitle));\n dispatch(setProgression({ currentPublication: pubTitle }));\n\n let positionsList: Locator[] | undefined;\n\n const fetchPositions = async () => {\n positionsList = await publication.current?.positionsFromManifest();\n if (positionsList && positionsList.length > 0) {\n dispatch(setProgression( { totalPositions: positionsList.length }))\n };\n const deserializedPositionsList = deserializePositions(positionsList);\n dispatch(setPositionsList(deserializedPositionsList));\n };\n\n fetchPositions()\n .catch(console.error)\n .then(() => {\n const isFXL = publication.current?.metadata.getPresentation()?.layout === EPUBLayout.fixed;\n\n const initialPosition: Locator = localData.get(localDataKey.current);\n\n // Create a heirarchical tree structure for the table of contents\n // where each entry has a unique id property and store this on the publication state\n let idCounter = 0;\n const idGenerator = () => `toc-${++idCounter}`;\n const tocTree = createTocTree(publication.current?.tableOfContents?.items || [], idGenerator, positionsList);\n dispatch(setTocTree(tocTree));\n\n const initialConstraint = cache.current.arrowsOccupySpace ? arrowsWidth.current : 0;\n \n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const theme = themeKeys.includes(cache.current.settings.theme as any) ? cache.current.settings.theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme: cache.current.colorScheme\n });\n\n const lineHeightOptions = {\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n };\n\n const preferences: IEpubPreferences = isFXL ? {} : {\n columnCount: cache.current.settings.columnCount === \"auto\" ? null : Number(cache.current.settings.columnCount),\n constraint: initialConstraint,\n fontFamily: cache.current.settings.fontFamily && defaultFontFamilyOptions[cache.current.settings.fontFamily],\n fontSize: cache.current.settings.fontSize,\n fontWeight: cache.current.settings.fontWeight,\n hyphens: cache.current.settings.hyphens,\n layoutStrategy: cache.current.settings.layoutStrategy as unknown as LayoutStrategy | null | undefined,\n letterSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.letterSpacing,\n lineHeight: cache.current.settings.publisherStyles \n ? undefined \n : cache.current.settings.lineHeight === null \n ? null \n : lineHeightOptions[cache.current.settings.lineHeight],\n optimalLineLength: cache.current.settings.lineLength?.optimal,\n maximalLineLength: cache.current.settings.lineLength?.max?.isDisabled \n ? null \n : cache.current.settings.lineLength?.max?.chars,\n minimalLineLength: cache.current.settings.lineLength?.min?.isDisabled \n ? null \n : cache.current.settings.lineLength?.min?.chars,\n paragraphIndent: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphIndent,\n paragraphSpacing: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphSpacing,\n scroll: cache.current.settings.scroll,\n textAlign: cache.current.settings.textAlign as unknown as TextAlignment | null | undefined,\n textNormalization: cache.current.settings.textNormalization,\n wordSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.wordSpacing,\n ...themeProps\n };\n\n const defaults: IEpubDefaults = isFXL ? {} : {\n layoutStrategy: RSPrefs.typography.layoutStrategy as LayoutStrategy | null | undefined,\n maximalLineLength: RSPrefs.typography.maximalLineLength, \n minimalLineLength: RSPrefs.typography.minimalLineLength, \n optimalLineLength: RSPrefs.typography.optimalLineLength,\n pageGutter: RSPrefs.typography.pageGutter\n }\n \n EpubNavigatorLoad({\n container: container.current, \n publication: publication.current!,\n listeners: listeners, \n positionsList: positionsList,\n initialPosition: initialPosition,\n preferences: preferences,\n defaults: defaults,\n scrollAffordances: {\n top: RSPrefs.scroll.topAffordance,\n bottom: RSPrefs.scroll.bottomAffordance\n }\n }, () => p.observe(window));\n })\n .finally(() => {\n const setLoadingThunk = (dispatch: AppDispatch) => {\n dispatch(setLoading(false));\n };\n dispatch(setLoadingThunk);\n });\n\n return () => {\n EpubNavigatorDestroy(() => p.destroy());\n };\n }, [rawManifest, selfHref, RSPrefs, fxlThemeKeys, reflowThemeKeys]);\n\n // If breakpoint is not defined, we are not ready to render\n // since useDocking needs it to derive the sheet type\n // Same for arrows and collapsible actions.\n if (!breakpoint) return null;\n\n return (\n <>\n <I18nProvider locale={ RSPrefs.locale }>\n <ThPluginProvider>\n <main>\n <StatefulDockingWrapper>\n <div \n id=\"reader-main\" \n className={ \n classNames(\n isFXL ? \"isFXL\" : \"isReflow\",\n isImmersive ? \"isImmersive\" : \"\",\n isHovering ? \"isHovering\" : \"\",\n layoutUI\n )\n }\n >\n <StatefulReaderHeader />\n\n { isPaged \n ? <nav className={ arrowStyles.container } id={ arrowStyles.left }>\n <StatefulReaderArrowButton \n direction=\"left\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationStart } \n onPress={ () => goLeft(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <article id=\"wrapper\" aria-label={ Locale.reader.app.publicationWrapper }>\n <div id=\"container\" ref={ container }></div>\n </article>\n\n { isPaged \n ? <nav className={ arrowStyles.container } id={ arrowStyles.right }>\n <StatefulReaderArrowButton \n direction=\"right\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationEnd } \n onPress={ () => goRight(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n { isPaged ? <StatefulReaderFooter /> : <></> }\n </div>\n </StatefulDockingWrapper>\n </main>\n </ThPluginProvider>\n </I18nProvider>\n </>\n)};","import * as React from \"react\";\nconst SvgFullscreen = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z\" /></svg>;\nexport default SvgFullscreen;","import * as React from \"react\";\nconst SvgFullscreenExit = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-120v-120H120v-80h200v200h-80Zm400 0v-200h200v80H720v120h-80ZM120-640v-80h120v-120h80v200H120Zm520 0v-200h80v120h120v80H640Z\" /></svg>;\nexport default SvgFullscreenExit;","\"use client\";\n\nimport React from \"react\";\n\nimport { UnstableShortcut, UnstableShortcutRepresentation, buildShortcut, metaKeys } from \"@/core/Helpers/keyboardUtilities\";\n\nimport { Keyboard } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport const UnstableStatefulShortcut = ({\n className,\n rawForm,\n representation,\n joiner\n}: UnstableShortcut) => {\n const RSPrefs = usePreferences();\n const platformModifier = useAppSelector(state => state.reader.platformModifier);\n\n representation = representation ? representation : RSPrefs.shortcuts.representation || UnstableShortcutRepresentation.symbol;\n joiner = joiner ? joiner : RSPrefs.shortcuts.joiner || \" + \";\n\n const shortcutObj = buildShortcut(rawForm);\n\n if (shortcutObj) {\n let shortcutRepresentation = [];\n\n for (const prop in shortcutObj.modifiers) {\n if (shortcutObj.modifiers[prop]) {\n if (prop === \"platformKey\") {\n shortcutRepresentation.push(platformModifier[representation]);\n } else {\n const metaKey = metaKeys[prop];\n shortcutRepresentation.push(metaKey[representation as UnstableShortcutRepresentation]);\n }\n }\n }\n\n if (shortcutObj.char) {\n shortcutRepresentation.push(shortcutObj.char);\n }\n\n if (shortcutRepresentation.length > 0) {\n const displayShortcut = shortcutRepresentation.join(joiner);\n \n return (\n <Keyboard className={ className }>{ displayShortcut }</Keyboard>\n ) \n } else {\n return (\n <></>\n )\n }\n }\n\n return (\n <></>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nimport overflowMenuStyles from \"../assets/styles/overflowMenu.module.css\";\n\nimport { Text } from \"react-aria-components\";\nimport { UnstableStatefulShortcut as StatefulShortcut } from \"./UnstableStatefulShortcut\";\n\nimport { ThMenuItem, ThMenuItemProps } from \"@/core/Components/Menu/ThMenuItem\";\n\nexport interface StatefulOverflowMenuItemProps extends Omit<ThMenuItemProps, \"shortcut\"> {\n shortcut?: string | null\n}\n\nexport const StatefulOverflowMenuItem = ({\n id,\n label,\n SVGIcon,\n shortcut = undefined,\n ...props\n}: StatefulOverflowMenuItemProps) => {\n const menuItemLabelId = `${id}-label`;\n \n return(\n <>\n <ThMenuItem \n id={ id } \n label={ label }\n className={ overflowMenuStyles.menuItem } \n aria-labelledby={ menuItemLabelId } \n { ...props }\n >\n { SVGIcon && <SVGIcon aria-hidden=\"true\" focusable=\"false\" /> }\n <Text \n className={ overflowMenuStyles.menuItemLabel } \n slot=\"label\"\n id={ menuItemLabelId }\n >\n { label }\n </Text>\n { shortcut && <StatefulShortcut\n className={ overflowMenuStyles.menuItemKbdShortcut } \n rawForm={ shortcut } \n /> }\n </ThMenuItem>\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport FullscreenCorners from \"./assets/icons/fullscreen.svg\";\nimport FullscreenExit from \"./assets/icons/fullscreen_exit.svg\";\n\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setFullscreen, setHovering } from \"@/lib/readerReducer\";\nimport { isIOSish } from \"@/core/Helpers/getPlatform\";\n\nexport const StatefulFullscreenTrigger = ({ variant }: StatefulActionTriggerProps) => {\n // Note: Not using React Aria ToggleButton here as fullscreen is quite\n // difficult to control in isolation due to collapsibility + shortcuts\n\n const RSPrefs = usePreferences();\n\n const dispatch = useAppDispatch();\n const onChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n \n const fs = useFullscreen(onChange);\n\n const label = fs.isFullscreen ? Locale.reader.fullscreen.close : Locale.reader.fullscreen.trigger;\n const Icon = fs.isFullscreen ? FullscreenExit : FullscreenCorners;\n\n const handlePress = () => {\n fs.handleFullscreen();\n // Has to be dispatched manually, otherwise stays true… \n dispatch(setHovering(false));\n // TODO: fix hover state on exit, if even possible w/o a lot of getting around…\n };\n\n // Per React doc/principles this isn’t common but FullScreen is quite an edge case cos’ of iPadOS…\n // And Actions is still a work in progress, with opportunities to rewrite/refactor\n // Note we don’t check window.matchMedia(\"(display-mode: standalone)\").matches as this is not a PWA yet\n // And more values here: https://web.dev/learn/pwa/detection\n if (!document.fullscreenEnabled || isIOSish()) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ label }\n SVGIcon={ Icon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].shortcut }\n onAction={ fs.handleFullscreen } \n id={ ThActionsKeys.fullscreen }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.iconCompSm }\n visibility={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].visibility } \n aria-label={ label }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.fullscreen.tooltip } \n onPress={ handlePress } \n >\n <Icon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgPinDrop = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M480-301q99-80 149.5-154T680-594q0-90-56-148t-144-58q-88 0-144 58t-56 148q0 65 50.5 139T480-301Zm0 101Q339-304 269.5-402T200-594q0-125 78-205.5T480-880q124 0 202 80.5T760-594q0 94-69.5 192T480-200Zm0-320q33 0 56.5-23.5T560-600q0-33-23.5-56.5T480-680q-33 0-56.5 23.5T400-600q0 33 23.5 56.5T480-520ZM200-80v-80h560v80H200Zm280-520Z\" /></svg>;\nexport default SvgPinDrop;","\"use client\";\n\nimport React from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport TargetIcon from \"./assets/icons/pin_drop.svg\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { setActionOpen, useAppDispatch, useAppSelector } from \"@/lib\";\n\nexport const StatefulJumpToPositionTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.jumpToPosition,\n isOpen: value \n }));\n }\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.jumpToPosition.trigger }\n SVGIcon={ TargetIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].shortcut }\n id={ ThActionsKeys.jumpToPosition }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon\n visibility={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].visibility } \n aria-label={ Locale.reader.jumpToPosition.trigger }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.jumpToPosition.tooltip }\n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TargetIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgDockToRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\" /></svg>;\nexport default SvgDockToRight;","import * as React from \"react\";\nconst SvgDockToLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm440-80h120v-560H640v560Zm-80 0v-560H200v560h360Zm80 0h120-120Z\" /></svg>;\nexport default SvgDockToLeft;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockStart = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const localeKey = isRTL ? Locale.reader.app.docker.dockToRight : Locale.reader.app.docker.dockToLeft;\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.start;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.start\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DocktoRight : DockToLeft } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.start].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.start }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockEnd = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const localeKey = isRTL ? Locale.reader.app.docker.dockToLeft : Locale.reader.app.docker.dockToRight;\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.end;\n\n const dispatch = useAppDispatch();\n \n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.end\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DockToLeft : DocktoRight } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.end].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.end }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgStack = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-400v80h-80q-33 0-56.5-23.5T80-400v-400q0-33 23.5-56.5T160-880h400q33 0 56.5 23.5T640-800v80h-80v-80H160v400h80ZM400-80q-33 0-56.5-23.5T320-160v-400q0-33 23.5-56.5T400-640h400q33 0 56.5 23.5T880-560v400q0 33-23.5 56.5T800-80H400Zm0-80h400v-400H400v400Zm200-200Z\" /></svg>;\nexport default SvgStack;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport Stack from \"./assets/icons/stack.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockTransientPopover = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const isDisabled = !actions.isDocked(associatedKey) || actions.whichDocked(associatedKey) === ThDockingKeys.transient;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.transient\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.app.docker.popover.trigger }\n SVGIcon={ Stack } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.transient].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.transient }-${ associatedKey }` } \n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ Locale.reader.app.docker.popover.trigger }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.app.docker.popover.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n <Stack aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { Toolbar } from \"react-aria-components\";\n\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\nimport { StatefulCollapsibleActionsBar } from \"../Actions/StatefulCollapsibleActionsBar\";\n\nimport { StatefulDockStart } from \"./StatefulDockStart\";\nimport { StatefulDockEnd } from \"./StatefulDockEnd\";\nimport { StatefulDockTransientPopover } from \"./StatefulDockTransientPopover\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nconst dockingComponentsMap = {\n [ThDockingKeys.start]: {\n trigger: StatefulDockStart\n },\n [ThDockingKeys.end]: {\n trigger: StatefulDockEnd\n },\n [ThDockingKeys.transient]: {\n trigger: StatefulDockTransientPopover\n }\n}\n\nexport interface StatefulDockerProps {\n id: ActionsStateKeys;\n keys: ThDockingKeys[];\n ref: React.ForwardedRef<HTMLButtonElement>;\n onClose: () => void;\n}\n\nexport const StatefulDocker = ({\n id,\n keys,\n ref,\n onClose\n}: StatefulDockerProps) => {\n const RSPrefs = usePreferences();\n \n const listActionItems = useCallback(() => {\n const actionsItems: ThActionEntry<ThDockingKeys>[] = [];\n\n keys.map((key) => {\n actionsItems.push({\n Trigger: dockingComponentsMap[key].trigger,\n key: key,\n associatedKey: id\n })\n });\n\n return actionsItems;\n }, [keys, id]);\n\n return(\n <>\n <Toolbar className={ dockingStyles.dockerWrapper }>\n <StatefulCollapsibleActionsBar \n id={ `${ id }-docker-overflowMenu` }\n items={ listActionItems() }\n className={ dockingStyles.docker } \n overflowMenuClassName={ readerSharedUI.dockerButton }\n prefs={ RSPrefs.docking }\n aria-label={ Locale.reader.app.docker.wrapper }\n />\n\n <ThCloseButton \n ref={ ref }\n className={ readerSharedUI.dockerButton } \n aria-label={ Locale.reader.app.docker.close.trigger } \n onPress={ onClose }\n compounds={ {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip\n },\n label: Locale.reader.app.docker.close.tooltip\n }}\n />\n </Toolbar>\n </>\n )\n}\n\n","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { PopoverProps } from \"react-aria-components\";\n\nimport { ThPopover } from \"@/core/Components/Containers/ThPopover\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulPopoverSheetProps extends StatefulSheet {\n placement?: PopoverProps[\"placement\"];\n}\n\nexport const StatefulPopoverSheet = ({ \n id,\n triggerRef,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n placement,\n docker,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n }: StatefulPopoverSheetProps) => {\n const direction = useAppSelector(state => state.reader.direction);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const popoverHeaderRef = useRef<HTMLDivElement | null>(null);\n const popoverBodyRef = useRef<HTMLDivElement | null>(null);\n const popoverCloseRef = useRef<HTMLButtonElement | null>(null);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThPopover \n ref={ popoverRef }\n triggerRef={ triggerRef }\n focusOptions={{\n withinRef: focusWithinRef ?? popoverBodyRef,\n trackedState: isOpen,\n fallbackRef: popoverCloseRef,\n updateState: resetFocus\n }}\n placement={ placement || \"bottom\" }\n className={ classNames(sheetStyles.popOverSheet , className) }\n isOpen={ isOpen }\n onOpenChange={ onOpenChange } \n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": popoverHeaderRef.current ? `${ popoverHeaderRef.current.clientHeight }px` : undefined\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n >\n <ThContainerHeader \n ref={ popoverHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ Locale.reader.app.back.trigger }\n ref={ popoverCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n />\n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ popoverCloseRef }\n onClose={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody\n ref={ popoverBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThPopover>\n </>\n ) \n }\n}","\"use client\";\n\nimport React, { CSSProperties, KeyboardEvent, useCallback, useMemo, useRef } from \"react\";\n\nimport { ThBottomSheetDetent, ThSheetHeaderVariant } from \"@/preferences\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { SheetRef } from \"react-modal-sheet\";\n\nimport { ThBottomSheet } from \"@/core/Components/Containers/ThBottomSheet\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulBottomSheetProps extends StatefulSheet {};\n\nexport interface ScrimPref {\n active: boolean;\n override?: string;\n}\n\nconst DEFAULT_SNAPPOINTS = {\n min: 0.3,\n peek: 0.5,\n max: 1\n}\n\nexport const StatefulBottomSheet = ({\n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n}: StatefulBottomSheetProps) => {\n const RSPrefs = usePreferences();\n const direction = useAppSelector((state) => state.reader.direction);\n const prefersReducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const sheetRef = useRef<SheetRef | null>(null);\n const sheetContainerRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const detent = useRef<ThBottomSheetDetent>(\"full-height\");\n const isDraggable = useRef<boolean>(true);\n\n const snapArray = useMemo(() => {\n // Val is always checked in 0...1 range\n const getSecureVal = (val: number, ref: number) => {\n if (val > ref) {\n return val;\n } else {\n return ((1 - ref) / 2) + ref;\n }\n };\n\n // Array needs max @ index 0 and min @ index 2 when complete\n // If it doesn’t have a max, then peek is @ index 0. This means\n // the initialProp should always be one item from last\n let snapArray: number[] = [];\n\n const snapPref = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped;\n if (snapPref) {\n // We must start with minHeight to see if it’s \n // constrained by a detent as it means\n // the bottom sheet is not draggable.\n // Hence why unshifting into the array instead of pushing\n if (snapPref.minHeight) {\n switch(snapPref.minHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.minHeight === 100 ? \"full-height\" : snapPref.minHeight;\n isDraggable.current = false;\n return [];\n default:\n const minVal = snapPref.minHeight / 100;\n // Protecting against pref > 100\n minVal > 0 && minVal < 1 \n ? snapArray.unshift(minVal) \n : snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n }\n\n // From now on, check if value is greater than the previous one in array\n // If not, use DEFAULT_SNAPPOINTS fallback and check it as well\n // This is to protect from cases that don’t validate min < peek < max\n\n // If peekHeight is constrained by a detent\n // then there is no maxHeight\n if (snapPref.peekHeight) {\n switch(snapPref.peekHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.peekHeight === 100 ? \"full-height\" : snapPref.peekHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const peekVal = snapPref.peekHeight / 100;\n const prevVal = snapArray[0];\n\n peekVal > 0 && peekVal < 1\n ? snapArray.unshift(getSecureVal(peekVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, prevVal))\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, snapArray[0]));\n }\n\n // If max-height is constrained by a content-height detent\n // then it means the bottom sheet can’t be fullscreen\n // Otherwise we can remove the top corners radii\n if (snapPref.maxHeight) {\n switch(snapPref.maxHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.maxHeight === 100 ? \"full-height\" : snapPref.maxHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const maxVal = snapPref.maxHeight / 100;\n const prevVal = snapArray[0];\n\n maxVal > 0 && maxVal < 1 \n ? snapArray.unshift(getSecureVal(maxVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, prevVal));\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, snapArray[0]));\n }\n } else {\n // There is no pref set\n // Reminder: order of React Modal Sheet is descending so max, peek, min\n snapArray.push(DEFAULT_SNAPPOINTS.max, DEFAULT_SNAPPOINTS.peek, DEFAULT_SNAPPOINTS.min);\n }\n\n return snapArray;\n }, [id, RSPrefs]);\n\n const snapIdx = useRef<number | null>(null);\n\n const onDragPressCallback = useCallback(() => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n const nextIdx = snapIdx.current === 0 ? snapArray.length - 1 : (snapIdx.current - 1);\n sheetRef.current?.snapTo(nextIdx);\n }\n }, [snapArray]);\n\n const onDragKeyCallback = useCallback((e: KeyboardEvent) => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n // Implementation is being kept consistent with React Resizable Panels, which\n // implements this logic by default for PanelResizeHandle when focused\n switch(e.code) {\n case \"PageUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(0);\n break;\n case \"ArrowUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(snapIdx.current - 1);\n break;\n case \"PageDown\":\n onClosePress();\n break;\n case \"ArrowDown\":\n if (snapIdx.current === snapArray.length - 1) {\n onClosePress();\n break;\n }\n sheetRef.current?.snapTo(snapIdx.current + 1)\n break;\n default:\n break;\n }\n }\n }, [snapArray, onClosePress]);\n\n const maxWidthPref = useMemo(() => {\n const maxWidth = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.maxWidth;\n if (typeof maxWidth === \"undefined\") {\n return undefined;\n } else if (maxWidth === null) {\n return \"100%\";\n } else {\n return `${ maxWidth }px`;\n }\n }, [id, RSPrefs]);\n\n const scrimPref = useMemo(() => {\n let scrimPref: ScrimPref = {\n active: false,\n override: undefined\n }\n const scrim = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.scrim;\n if (scrim) {\n scrimPref.active = true;\n\n if (typeof scrim === \"string\") {\n scrimPref.override = scrim;\n }\n }\n\n return scrimPref;\n }, [id, RSPrefs]);\n\n const detentClassName = useMemo(() => {\n let className = \"\";\n if (detent.current === \"content-height\") {\n className = sheetStyles.bottomSheetModalContentHeightDetent;\n } else {\n className = sheetStyles.bottomSheetModalFullHeightDetent;\n }\n return className;\n }, [detent]);\n\n const scrimClassName = useMemo(() => {\n return scrimPref.active ? sheetStyles.bottomSheetScrim : \"\";\n }, [scrimPref]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThBottomSheet\n id={ id }\n ref={ sheetRef }\n isOpen={ isOpen }\n focusOptions={{\n withinRef: focusWithinRef ?? bottomSheetBodyRef,\n trackedState: isOpen,\n fallbackRef: bottomSheetCloseRef,\n updateState: resetFocus\n }}\n onOpenChange={ onOpenChange }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n { ...(snapArray.length > 1 \n ? { \n snapPoints: snapArray, \n initialSnap: snapArray.length - 2,\n detent: detent.current\n } \n : {\n detent: detent.current\n }) \n }\n onSnap={ (index) => { snapIdx.current = index }}\n prefersReducedMotion={ prefersReducedMotion }\n compounds={ {\n container: {\n className: classNames(sheetStyles.bottomSheetModal, detentClassName),\n ref: sheetContainerRef,\n style: {\n maxWidth: maxWidthPref \n } as CSSProperties\n },\n dragIndicator: {\n className: sheetStyles.dragIndicator,\n onPress: onDragPressCallback,\n onKeyDown: onDragKeyCallback\n },\n content: {\n className: classNames(sheetStyles.bottomSheet, className),\n disableDrag: true\n },\n scroller: {\n className: classNames(sheetStyles.bottomSheetScroller, sheetStyles.sheetBody),\n draggable: false\n },\n backdrop: {\n className: classNames(sheetStyles.bottomSheetBackdrop, scrimClassName),\n style: { \"--defaults-scrim\": scrimPref.override }\n }\n } }\n >\n <ThContainerHeader\n label={ heading }\n className={ sheetStyles.bottomSheetHeader }\n compounds={ {\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ Locale.reader.app.back.trigger }\n ref={ bottomSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n /> \n : <ThCloseButton\n ref={ bottomSheetCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ Locale.reader.app.docker.close.trigger } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ bottomSheetBodyRef }\n >\n { children }\n </ThContainerBody>\n </ThBottomSheet>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThModal } from \"@/core/Components/Containers/ThModal\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulFullScreenSheetProps extends StatefulSheet {};\n\nexport const StatefulFullScreenSheet = ({\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n }: StatefulFullScreenSheetProps) => {\n const direction = useAppSelector(state => state.reader.direction);\n const fullScreenHeaderRef = useRef<HTMLDivElement | null>(null);\n const fullScreenBodyRef = useRef<HTMLDivElement | null>(null);\n const fullScreenCloseRef = useRef<HTMLButtonElement | null>(null);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThModal \n ref={ fullScreenBodyRef }\n focusOptions={{\n withinRef: focusWithinRef ?? fullScreenBodyRef,\n trackedState: isOpen,\n fallbackRef: fullScreenCloseRef,\n updateState: resetFocus\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n isOpen={ isOpen }\n onOpenChange={ onOpenChange }\n isDismissable={ true }\n className={ classNames(sheetStyles.fullScreenSheet, className) }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": fullScreenHeaderRef.current ? `${ fullScreenHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ fullScreenHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous\n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ Locale.reader.app.back.trigger }\n ref={ fullScreenCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n />\n : <ThCloseButton\n ref={ fullScreenCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ Locale.reader.app.docker.close.trigger } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ fullScreenBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThModal>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThDockingKeys, ThSheetHeaderVariant, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockedPanel } from \"@/core/Components/Containers/ThDockedPanel\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulDockedSheetProps extends StatefulSheet {\n flow: ThDockingKeys.start | ThDockingKeys.end | null;\n}\n\nexport const StatefulDockedSheet = ({ \n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onClosePress,\n docker, \n flow,\n children,\n resetFocus,\n focusWithinRef\n }: StatefulDockedSheetProps) => {\n const dockPortal = flow && document.getElementById(flow);\n const dockedSheetHeaderRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetLeftBorder : sheetStyles.dockedSheetRightBorder;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetRightBorder : sheetStyles.dockedSheetLeftBorder;\n }\n }, [flow, direction]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThDockedPanel\n isOpen={ isOpen }\n portal={ dockPortal }\n focusOptions={ {\n withinRef: focusWithinRef ?? dockedSheetBodyRef, \n trackedState: isOpen, \n fallbackRef: dockedSheetCloseRef,\n autoFocus: false,\n updateState: resetFocus\n }}\n className={ classNames(sheetStyles.dockedSheet, className, classFromFlow()) }\n style={{\n \"--sheet-sticky-header\": dockedSheetHeaderRef.current ? `${ dockedSheetHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ dockedSheetHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" } \n label={ Locale.reader.app.back.trigger }\n ref={ dockedSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n /> \n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ dockedSheetCloseRef }\n onClose={ onClosePress }\n />\n } \n </ThContainerHeader>\n <ThContainerBody \n ref={ dockedSheetBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThDockedPanel>\n </>\n )\n }\n}","\"use client\";\n\nimport { ReactNode } from \"react\";\n\nimport { ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { ThTypedComponentRenderer } from \"@/core/Components/Containers/ThTypedComponentRenderer\";\nimport { StatefulPopoverSheet, StatefulPopoverSheetProps } from \"./StatefulPopoverSheet\";\nimport { StatefulBottomSheet, StatefulBottomSheetProps } from \"./StatefulBottomSheet\";\nimport { StatefulFullScreenSheet, StatefulFullScreenSheetProps } from \"./StatefulFullScreenSheet\";\nimport { StatefulDockedSheet, StatefulDockedSheetProps } from \"./StatefulDockedSheet\";\n\nconst componentMap = {\n [ThSheetTypes.popover]: StatefulPopoverSheet,\n [ThSheetTypes.bottomSheet]: StatefulBottomSheet,\n [ThSheetTypes.fullscreen]: StatefulFullScreenSheet,\n [ThSheetTypes.dockedStart]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.start } />,\n [ThSheetTypes.dockedEnd]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.end } />\n};\n\nexport const StatefulSheetWrapper = ({\n sheetType,\n sheetProps,\n children\n}: {\n sheetType: ThSheetTypes,\n sheetProps: StatefulPopoverSheetProps | StatefulFullScreenSheetProps | StatefulDockedSheetProps | StatefulBottomSheetProps,\n children: ReactNode\n}) => {\n\n return (\n <ThTypedComponentRenderer\n type={ sheetType }\n componentMap={ componentMap }\n props={ sheetProps }\n >\n { children }\n </ThTypedComponentRenderer>\n );\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThDockingTypes, ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport { dockAction, setActionOpen } from \"@/lib/actionsReducer\";\n\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nlet dockingMap: Required<BreakpointsMap<ThDockingTypes>> | null = null;\n\nexport const useDocking = <T extends string>(key: T) => {\n const RSPrefs = usePreferences();\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actionState = actionsMap[key];\n const dispatch = useAppDispatch();\n\n const actions = useActions(actionsMap);\n\n if (!dockingMap) {\n dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none \n });\n }\n const currentDockConfig = breakpoint && dockingMap[breakpoint];\n \n // Use type assertion to tell TypeScript that the key is valid\n const dockablePref = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.docked?.dockable || ThDockingTypes.none;\n \n const defaultSheet = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover;\n \n const sheetMap = makeBreakpointsMap<ThSheetTypes>({\n defaultValue: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover,\n fromEnum: ThSheetTypes,\n pref: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.breakpoints\n });\n const sheetPref = breakpoint && sheetMap[breakpoint] || defaultSheet;\n\n const [sheetType, setSheetType] = useState<ThSheetTypes>(defaultSheet);\n const previousSheetType = usePrevious(sheetType);\n\n // Checks whether the action can be docked: its pref should match the docking pref\n const canBeDocked = useCallback((slot: ThDockingTypes.start | ThDockingTypes.end) => {\n return (currentDockConfig === slot || currentDockConfig === ThDockingTypes.both) \n && (dockablePref === slot || dockablePref === ThDockingTypes.both);\n }, [currentDockConfig, dockablePref]);\n\n // Checks whether the sheet pref is of Dock type \n const isDockedSheetPref = useCallback((type?: ThSheetTypes.dockedStart | ThSheetTypes.dockedEnd) => {\n if (type) {\n return sheetPref === type;\n } else {\n return sheetPref === ThSheetTypes.dockedStart || sheetPref === ThSheetTypes.dockedEnd\n }\n }, [sheetPref]);\n \n // Builds the docker for the action based on all preferences\n const getDocker = useCallback((): ThDockingKeys[] => {\n // First let’s handle the cases where docker shouldn’t be used\n // The sheet is not dockable, per key.docked.dockable pref\n if (dockablePref === ThDockingTypes.none) return [];\n // There’s no docking slot available, per docking.dock pref\n if (currentDockConfig === ThDockingTypes.none) return [];\n // The sheet type is not compatible with docking\n if (sheetPref === ThSheetTypes.fullscreen || sheetPref === ThSheetTypes.bottomSheet) return [];\n\n // We can now build the docker from the display order\n let dockerKeys: ThDockingKeys[] = [];\n // In order for an action to be dockable, the dock slot has to exist\n // and the dockable preference of key.docked should match the values\n RSPrefs.docking.displayOrder.forEach((dockingKey: ThDockingKeys) => {\n switch(dockingKey) {\n case ThDockingKeys.transient:\n // We already handled both cases for none \n dockerKeys.push(dockingKey);\n break;\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n dockerKeys.push(dockingKey);\n }\n break;\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n dockerKeys.push(dockingKey);\n }\n break;\n default:\n break;\n }\n });\n\n // If the action can only be transient, then it can’t be docked\n if (dockerKeys.length === 1 && dockerKeys[0] === ThDockingKeys.transient) return [];\n\n return dockerKeys;\n }, [RSPrefs.docking.displayOrder, currentDockConfig, sheetPref, dockablePref, canBeDocked]);\n\n const getSheetType = useCallback(() => {\n // First check the dockable pref is none to return early\n if (dockablePref === ThDockingTypes.none) {\n // Sheet is of docked type, we return the default\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n // Sheet pref is not of docked type, we can return it\n return sheetPref;\n }\n };\n\n // We now need to check whether the user has docked the action themselves\n // ActionsReducer should has made sure there is no conflict to handle here \n // by updating states of actions on docking\n switch (actionState?.docking) {\n \n // if action.docking is transient we need to check the pref, \n // it can be docked and in that case we need to pick the default\n case ThDockingKeys.transient:\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n return sheetPref;\n }\n \n // If action.docking is set to start/end then we check the docking slot is available\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n // if the pref is not docked start, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedStart)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n // if the pref is not docked end, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n \n // If action.docking is null or undefined then we rely on pref \n // as it means the user did not pick another option\n case null:\n case undefined:\n // We have to check sheetPref is compatible with docking prefs\n if (isDockedSheetPref(ThSheetTypes.dockedStart)) {\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n return defaultSheet;\n }\n } else if (isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n return defaultSheet;\n }\n } else {\n return sheetPref;\n }\n default:\n return defaultSheet;\n }\n }, [dockablePref, sheetPref, defaultSheet, actionState?.docking, canBeDocked, isDockedSheetPref]);\n\n // When docking or breakpoints-related prefs change, get the correct sheet type\n useEffect(() => {\n setSheetType(getSheetType());\n }, [sheetPref, currentDockConfig, actionState?.docking, getSheetType]);\n\n // Dismiss/Close when sheetType has changed from docked to transient\n useEffect(() => {\n // This was not dismissed on breakpoint change, but by the user\n if (actionState?.docking === ThDockingKeys.transient) return;\n\n if (sheetType !== ThSheetTypes.dockedStart && sheetType !== ThSheetTypes.dockedEnd) {\n if (previousSheetType === ThSheetTypes.dockedStart || previousSheetType === ThSheetTypes.dockedEnd) {\n dispatch(setActionOpen({\n key: key,\n isOpen: false\n }));\n }\n }\n }, [dispatch, key, sheetType, previousSheetType, actionState?.docking]);\n\n // on mount, check whether we should update states for docked sheets from pref\n useEffect(() => {\n if (actionState?.isOpen == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n }\n }\n });\n\n // Edge case where the sheet has been opened/closed and\n // is of dockable type, but the dock panel is not populated\n // e.g. action was mounted as a different type of sheet (breakpoint),\n // and opened/closed. If the user resizes the window (another breakpoint) \n // but we don’t dispatch docking, then it can’t be displayed \n // since the docking slot has never been populated.\n useEffect(() => {\n // Action has been opened/closed by user\n // but it’s not been manually docked, \n // which means the pref is used but \n // has not be instantiated yet, and \n // couldn’t be on first mount because\n // a different type was used in prefs\n if (actionState?.isOpen != null && actionState?.docking == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.start) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n }\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.end) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n }\n }\n }\n }, [dispatch, key, sheetType, actionState?.isOpen, actionState?.docking, actions]);\n\n return {\n getDocker,\n sheetType\n }\n}","\"use client\";\n\nimport React, { FormEvent, useCallback, useEffect, useState } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport jumpToPositionStyles from \"./assets/styles/jumpToPosition.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThForm } from \"@/core/Components/Form/ThForm\";\nimport { ThFormNumberField } from \"@/core/Components/Form/Fields/ThFormNumberField\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nimport parseTemplate from \"json-templates\";\n\nexport const StatefulJumpToPositionContainer = ({ \n triggerRef \n}: StatefulActionContainerProps) => {\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n\n // TODO: Update. We don’t have a timeline yet, so we use the progression we already have\n const positionNumbers = useAppSelector(state => state.publication.progression.currentPositions);\n\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const dispatch = useAppDispatch();\n\n const docking = useDocking(ThActionsKeys.jumpToPosition);\n const sheetType = docking.sheetType;\n\n const { go } = useEpubNavigator();\n\n // Component has to handle updates locally since EpubNavigator updates positions, \n // so we use these as an intermediary\n const [position, setPosition] = useState(0);\n\n // Position Numbers can be a range so we must check position is in range\n // And not only that the array simply includes the position\n const positionInRange = useCallback(() => {\n if (!positionNumbers) return false;\n return positionNumbers.length === 2\n ? position >= positionNumbers[0] && position <= positionNumbers[1]\n : position === positionNumbers[0];\n }, [position, positionNumbers]);\n\n // Label indicates the total number of positions for the book\n const makeFieldLabel = useCallback(() => {\n const jsonTemplate = parseTemplate(Locale.reader.jumpToPosition.label);\n return jsonTemplate({ positionStart: 1, positionEnd: positionsList.length });\n }, [positionsList]);\n\n const setOpen = useCallback((value: boolean) => {\n dispatch(setActionOpen({\n key: ThActionsKeys.jumpToPosition,\n isOpen: value\n }));\n }, [dispatch]);\n\n // NumberField onChange won’t fire if the value has been typed\n // so we need to handle the input manually\n const handleInput = useCallback((e: FormEvent<HTMLInputElement>) => {\n const target = e.target as HTMLInputElement;\n setPosition(parseInt(target.value));\n }, []);\n\n // This is a form submit handler so we have to preventDefault\n // We have to use this otherwise any change will trigger a navigation\n const handleAction = useCallback((e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (!positionsList) return;\n\n const item = positionsList.find(item => item.locations.position === position);\n\n if (!item || positionInRange()) return setOpen(false);\n\n go(item, !reducedMotion, () => setOpen(false));\n }, [position, positionsList, reducedMotion, positionInRange, go, setOpen]);\n\n // Since we are using an intermediary local state, we must keep track when positionNumbers changes\n useEffect(() => {\n positionNumbers && setPosition(positionNumbers[0]);\n }, [positionNumbers]);\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return (\n <>\n <StatefulSheetWrapper\n sheetType={sheetType}\n sheetProps={{\n id: ThActionsKeys.jumpToPosition,\n triggerRef: triggerRef,\n heading: Locale.reader.jumpToPosition.heading,\n className: jumpToPositionStyles.jumpToPosition,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker()\n }}\n >\n <ThForm\n label={ Locale.reader.jumpToPosition.go }\n className={ jumpToPositionStyles.jumpToPositionForm }\n onSubmit={ handleAction }\n compounds={{\n button: {\n className: jumpToPositionStyles.jumpToPositionButton,\n isDisabled: !position || positionInRange()\n }\n }}\n >\n <ThFormNumberField\n label={ makeFieldLabel() }\n name=\"jumpToPosition\"\n className={ jumpToPositionStyles.jumpToPositionNumberField }\n onChange={ setPosition }\n onInput={ handleInput }\n value={ position }\n minValue={ 1 }\n maxValue={ positionsList.length }\n step={ 1 }\n formatOptions={{ style: \"decimal\" }}\n isWheelDisabled={ true }\n compounds={{\n label: {\n className: jumpToPositionStyles.jumpToPositionLabel\n },\n input: {\n className: jumpToPositionStyles.jumpToPositionInput,\n inputMode: \"numeric\"\n }\n }}\n />\n </ThForm>\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgMatchCase = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z\" /></svg>;\nexport default SvgMatchCase;","\"use client\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport TuneIcon from \"./assets/icons/match_case.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.settings.trigger }\n SVGIcon={ TuneIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.settings].shortcut } \n id={ ThActionsKeys.settings }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.settings].visibility }\n aria-label={ Locale.reader.settings.trigger }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.settings.tooltip } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TuneIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n usePreferenceKeys\n} from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { \n ThActionsKeys, \n ThSettingsContainerKeys, \n ThSheetHeaderVariant\n} from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\n\nimport { StatefulSpacingGroupContainer } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextGroupContainer } from \"../../Epub/Settings/StatefulTextGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"@/components/Plugins/PluginProvider\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\n\nimport { setHovering, setSettingsContainer } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsContainer = ({ \n triggerRef\n}: StatefulActionContainerProps) => {\n const { \n fxlSettingsKeys, \n mainSpacingSettingsKeys,\n mainTextSettingsKeys,\n reflowSettingsKeys,\n subPanelSpacingSettingsKeys,\n subPanelTextSettingsKeys,\n } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { settingsComponentsMap } = usePlugins();\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const contains = useAppSelector(state => state.reader.settingsContainer);\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const settingItems = useMemo(() => {\n return isFXL ? fxlSettingsKeys : reflowSettingsKeys\n }, [isFXL, fxlSettingsKeys, reflowSettingsKeys]);\n \n const docking = useDocking(ThActionsKeys.settings);\n const sheetType = docking.sheetType;\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n const setInitial = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }, [dispatch]);\n\n const isTextNested = useCallback((key: string) => {\n const textSettings = [\n mainTextSettingsKeys || defaultTextSettingsMain,\n subPanelTextSettingsKeys || defaultTextSettingsSubpanel,\n ].flat() as string[];\n \n return textSettings.includes(key);\n }, [mainTextSettingsKeys, subPanelTextSettingsKeys]);\n \n const isSpacingNested = useCallback((key: string) => {\n const spacingSettings = [\n mainSpacingSettingsKeys || defaultSpacingSettingsMain,\n subPanelSpacingSettingsKeys || defaultSpacingSettingsSubpanel,\n ].flat() as string[];\n \n return spacingSettings.includes(key);\n }, [mainSpacingSettingsKeys, subPanelSpacingSettingsKeys]);\n\n const renderSettings = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return <StatefulTextGroupContainer />;\n \n case ThSettingsContainerKeys.spacing:\n return <StatefulSpacingGroupContainer />;\n\n case ThSettingsContainerKeys.initial:\n default:\n return (\n <>\n { settingItems.length > 0 && settingsComponentsMap \n ? settingItems\n .filter((key) => !(isTextNested(key) || isSpacingNested(key)))\n .map((key) => {\n const match = settingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } { ...match.props } />;\n })\n : <></>\n }\n </>\n );\n }\n }, [settingsComponentsMap, contains, settingItems, isTextNested, isSpacingNested]);\n\n const getHeading = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return Locale.reader.settings.text.title;\n\n case ThSettingsContainerKeys.spacing:\n return Locale.reader.settings.spacing.title;\n\n case ThSettingsContainerKeys.initial:\n default:\n return Locale.reader.settings.heading;\n }\n }, [contains]);\n\n const getHeaderVariant = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return RSPrefs.settings.text?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.spacing:\n return RSPrefs.settings.spacing?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.initial:\n default:\n return ThSheetHeaderVariant.close;\n }\n }, [contains, RSPrefs.settings.spacing, RSPrefs.settings.text]);\n\nuseEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && contains !== ThSettingsContainerKeys.initial) {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n}, [contains, dispatch]);\n\n\n // Reset when closed\n useEffect(() => {\n if (!actionState?.isOpen) setInitial();\n }, [actionState?.isOpen, setInitial]);\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.settings,\n triggerRef: triggerRef,\n heading: getHeading(),\n headerVariant: getHeaderVariant(),\n className: settingsStyles.readerSettings,\n placement: \"bottom\", \n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen, \n onClosePress: () => { contains === ThSettingsContainerKeys.initial ? setOpen(false) : setInitial() },\n docker: docking.getDocker(),\n resetFocus: contains,\n dismissEscapeKeyClose: contains !== ThSettingsContainerKeys.initial\n } }\n >\n { renderSettings() }\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgToc = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-280v-80h560v80H120Zm0-160v-80h560v80H120Zm0-160v-80h560v80H120Zm680 320q-17 0-28.5-11.5T760-320q0-17 11.5-28.5T800-360q17 0 28.5 11.5T840-320q0 17-11.5 28.5T800-280Zm0-160q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440Zm0-160q-17 0-28.5-11.5T760-640q0-17 11.5-28.5T800-680q17 0 28.5 11.5T840-640q0 17-11.5 28.5T800-600Z\" /></svg>;\nexport default SvgToc;","\"use client\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport TocIcon from \"./assets/icons/toc.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulTocTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.toc.trigger }\n SVGIcon={ TocIcon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.toc].shortcut }\n id={ ThActionsKeys.toc }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.toc].visibility }\n aria-label={ Locale.reader.toc.trigger } \n placement=\"bottom\"\n tooltipLabel={ Locale.reader.toc.tooltip } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TocIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" /></svg>;\nexport default SvgChevronRight;","\"use client\";\n\nimport React, { CSSProperties, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { Link } from \"@readium/shared\";\nimport { ThActionsKeys, ThDockingKeys, ThSheetTypes, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\nimport { TocItem } from \"@/helpers/createTocTree\";\n\nimport tocStyles from \"./assets/styles/toc.module.css\";\n\nimport Chevron from \"./assets/icons/chevron_right.svg\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThFormSearchField } from \"@/core/Components\";\nimport { Button, Collection, Selection, useFilter } from \"react-aria-components\";\nimport {\n Tree,\n TreeItem,\n TreeItemContent\n} from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTocEntry } from \"@/lib/publicationReducer\";\nimport { setHovering, setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\nexport const StatefulTocContainer = ({ triggerRef }: StatefulActionContainerProps) => {\n const treeRef = useRef<HTMLDivElement | null>(null);\n \n const tocEntry = useAppSelector(state => state.publication.tocEntry);\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const tocTree = useAppSelector(state => state.publication.tocTree);\n const dispatch = useAppDispatch();\n\n const previousTocEntry = usePrevious(tocEntry);\n const [forceRerender, setForceRerender] = useState(0);\n\n const { goLink } = useEpubNavigator();\n\n const docking = useDocking(ThActionsKeys.toc);\n const sheetType = docking.sheetType;\n\n const { contains } = useFilter({ sensitivity: \"base\" });\n const [filterValue, setFilterValue] = React.useState(\"\");\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n const filterTocTree = (items: TocItem[], filterValue: string): TocItem[] => {\n if (!filterValue) {\n return items;\n }\n\n const recursiveFilter = (items: TocItem[]): TocItem[] => {\n return items.reduce((acc: TocItem[], item: TocItem) => {\n if (item.title && contains(item.title, filterValue)) {\n acc.push({ ...item, children: undefined });\n }\n if (item.children) {\n acc.push(...recursiveFilter(item.children));\n }\n return acc;\n }, []);\n };\n\n const result = recursiveFilter(items);\n return result.map((item: TocItem, index: number) => ({ ...item, key: `${item.id}-${index}` }));\n };\n\n const displayedTocTree = filterTocTree(tocTree || [], filterValue);\n\n const setOpen = useCallback((value: boolean) => {\n if (!value) setFilterValue(\"\");\n\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }, [dispatch, setFilterValue]);\n\n const handleAction = (keys: Selection) => {\n if (keys === \"all\" || !keys || keys.size === 0) return;\n\n const key = [...keys][0];\n \n const el = document.querySelector(`[data-key=${key}]`);\n const href = el?.getAttribute(\"data-href\");\n\n if (!href) return;\n\n const link: Link = new Link({ href: href });\n\n const cb = actionState?.isOpen && \n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd)\n ? () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n dispatch(setHovering(false));\n } \n : () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n dispatch(setHovering(false));\n setOpen(false);\n }\n\n goLink(link, true, cb);\n };\n\n // Since React Aria components intercept keys and do not continue propagation\n // we have to handle the escape key in capture phase\n useEffect(() => {\n if (actionState?.isOpen && (!actionState?.docking || actionState?.docking === ThDockingKeys.transient)) { \n const handleEscape = (event: KeyboardEvent) => {\n if ((!isActiveElement(searchInputRef.current) && !filterValue) && event.key === \"Escape\" ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n }\n }, [actionState, setOpen, filterValue]);\n\n // For docked sheets they are mounted before we could even retrieve tocEntry…\n // So we need to force a rerender as we cannot rely on dependencies prop\n // TODO: Once we handle fragments, etc. this can be removed, and we can add a condition\n // tocEntry has to be defined to render Tree\n useEffect(() => {\n if (\n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd) && \n tocEntry !== undefined && \n previousTocEntry === undefined\n ) {\n setForceRerender(Math.random());\n }\n }, [sheetType, tocEntry, previousTocEntry]);\n\n const isItemInChildren = (item: TocItem, tocEntry?: string): boolean => {\n if (item.children && tocEntry) {\n return item.children.some(child => child.id === tocEntry || isItemInChildren(child, tocEntry));\n }\n return false;\n };\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.toc,\n triggerRef: triggerRef, \n heading: Locale.reader.toc.heading,\n className: tocStyles.toc,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker(),\n focusWithinRef: treeRef\n } }\n >\n { tocTree && tocTree.length > 0 \n ? (<>\n <ThFormSearchField\n aria-label={ Locale.reader.toc.search.label }\n value={ filterValue }\n onChange={ setFilterValue }\n onClear={ () => setFilterValue(\"\") }\n className={ tocStyles.tocSearch }\n compounds={{\n label: {\n className: tocStyles.tocSearchLabel\n },\n input: {\n ref: searchInputRef,\n className: tocStyles.tocSearchInput,\n placeholder: Locale.reader.toc.search.placeholder\n },\n searchIcon: {\n className: tocStyles.tocSearchIcon,\n hidden: !!filterValue\n },\n clearButton: {\n className: tocStyles.tocClearButton,\n isDisabled: !filterValue\n }\n }}\n />\n <Tree\n // TODO: Remove this when we handle fragments\n key={ forceRerender }\n ref={ treeRef }\n aria-label={ Locale.reader.toc.entries }\n selectionMode=\"single\"\n items={ displayedTocTree }\n className={ tocStyles.tocTree }\n onSelectionChange={ handleAction }\n defaultSelectedKeys={ tocEntry ? [tocEntry] : [] }\n selectedKeys={ tocEntry ? [tocEntry] : [] }\n defaultExpandedKeys={ tocTree\n .filter(item => isItemInChildren(item, tocEntry))\n .map(item => item.id) \n }\n >\n { function renderItem(item) {\n return (\n <TreeItem\n data-href={ item.href }\n className={ tocStyles.tocTreeItem }\n textValue={ item.title || \"\" }\n >\n <TreeItemContent>\n { item.children\n ? (<Button\n slot=\"chevron\"\n className={ tocStyles.tocTreeItemButton }\n { ...(isRTL ? { style: { transform: \"scaleX(-1)\" } } as CSSProperties : {}) }\n >\n <Chevron aria-hidden=\"true\" focusable=\"false\" />\n </Button>)\n : null\n }\n <div className={ tocStyles.tocTreeItemText }>\n <div className={ tocStyles.tocTreeItemTextTitle }>{ item.title }</div>\n { item.position && <div className={ tocStyles.tocTreeItemTextPosition }>{ item.position }</div> }\n </div>\n </TreeItemContent>\n <Collection items={ item.children }>\n { renderItem }\n </Collection>\n </TreeItem>\n );\n } }\n </Tree>\n </>) \n : <div className={ tocStyles.empty }>{ Locale.reader.toc.empty }</div>\n }\n </StatefulSheetWrapper>\n </>\n )\n}","import { ThPlugin } from \"../PluginRegistry\";\nimport { ThActionsKeys, ThSettingsKeys } from \"@/preferences/models/enums\";\n\nimport { StatefulFullscreenTrigger } from \"../../Actions/Fullscreen/StatefulFullscreenTrigger\";\nimport { StatefulJumpToPositionTrigger } from \"../../Actions/JumpToPosition/StatefulJumpToPositionTrigger\";\nimport { StatefulJumpToPositionContainer } from \"../../Actions/JumpToPosition/StatefulJumpToPositionContainer\";\nimport { StatefulSettingsTrigger } from \"../../Actions/Settings/StatefulSettingsTrigger\";\nimport { StatefulSettingsContainer } from \"../../Actions/Settings/StatefulSettingsContainer\";\nimport { StatefulTocTrigger } from \"../../Actions/Toc/StatefulTocTrigger\";\nimport { StatefulTocContainer } from \"../../Actions/Toc/StatefulTocContainer\";\n\nimport { StatefulColumns } from \"../../Epub/Settings/StatefulColumns\";\nimport { StatefulFontFamily } from \"../../Epub/Settings/StatefulFontFamily\";\nimport { StatefulFontWeight } from \"../../Epub/Settings/StatefulFontWeight\";\nimport { StatefulHyphens } from \"../../Epub/Settings/StatefulHyphens\";\nimport { StatefulLayout } from \"../../Epub/Settings/StatefulLayout\";\nimport { StatefulLetterSpacing } from \"../../Epub/Settings/StatefulLetterSpacing\";\nimport { StatefulLineHeight } from \"../../Epub/Settings/StatefulLineHeight\";\nimport { StatefulParagraphIndent } from \"../../Epub/Settings/StatefulParagraphIndent\";\nimport { StatefulParagraphSpacing } from \"../../Epub/Settings/StatefulParagraphSpacing\";\nimport { StatefulPublisherStyles } from \"../../Epub/Settings/StatefulPublisherStyles\";\nimport { StatefulSpacingGroup } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextAlign } from \"../../Epub/Settings/StatefulTextAlign\";\nimport { StatefulTextGroup } from \"../../Epub/Settings/StatefulTextGroup\";\nimport { StatefulTextNormalize } from \"../../Epub/Settings/StatefulTextNormalize\";\nimport { StatefulTheme } from \"../../Epub/Settings/StatefulTheme\";\nimport { StatefulWordSpacing } from \"../../Epub/Settings/StatefulWordSpacing\";\nimport { StatefulZoom } from \"../../Epub/Settings/StatefulZoom\";\n\nexport const createDefaultPlugin = (): ThPlugin => {\n return {\n id: \"core\",\n name: \"Core Components\",\n description: \"Default components for Thorium Web StatefulReader\",\n version: \"1.0.0-beta.1\",\n components: {\n actions: {\n [ThActionsKeys.fullscreen]: {\n Trigger: StatefulFullscreenTrigger\n },\n [ThActionsKeys.jumpToPosition]: {\n Trigger: StatefulJumpToPositionTrigger,\n Target: StatefulJumpToPositionContainer\n },\n [ThActionsKeys.settings]: {\n Trigger: StatefulSettingsTrigger,\n Target: StatefulSettingsContainer\n },\n [ThActionsKeys.toc]: {\n Trigger: StatefulTocTrigger,\n Target: StatefulTocContainer\n }\n },\n settings: {\n [ThSettingsKeys.columns]: {\n Comp: StatefulColumns\n },\n [ThSettingsKeys.fontFamily]: {\n Comp: StatefulFontFamily,\n type: \"text\"\n },\n [ThSettingsKeys.fontWeight]: {\n Comp: StatefulFontWeight,\n type: \"text\"\n },\n [ThSettingsKeys.hyphens]: {\n Comp: StatefulHyphens,\n type: \"text\"\n },\n [ThSettingsKeys.layout]: {\n Comp: StatefulLayout\n },\n [ThSettingsKeys.letterSpacing]: {\n Comp: StatefulLetterSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.lineHeight]: {\n Comp: StatefulLineHeight,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphIndent]: {\n Comp: StatefulParagraphIndent,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphSpacing]: {\n Comp: StatefulParagraphSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.publisherStyles]: {\n Comp: StatefulPublisherStyles,\n type: \"spacing\"\n },\n [ThSettingsKeys.spacingGroup]: {\n Comp: StatefulSpacingGroup,\n },\n [ThSettingsKeys.textAlign]: {\n Comp: StatefulTextAlign,\n type: \"text\"\n },\n [ThSettingsKeys.textGroup]: {\n Comp: StatefulTextGroup\n },\n [ThSettingsKeys.textNormalize]: {\n Comp: StatefulTextNormalize,\n type: \"text\"\n },\n [ThSettingsKeys.theme]: {\n Comp: StatefulTheme,\n props: {\n mapArrowNav: 2\n }\n },\n [ThSettingsKeys.wordSpacing]: {\n Comp: StatefulWordSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.zoom]: {\n Comp: StatefulZoom\n }\n }\n }\n };\n};","// Peripherals based on XBReader\nimport { ThActionsPref } from \"@/preferences\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport { buildShortcut, UnstablePShortcut } from \"@/core/Helpers/keyboardUtilities\";\nimport { isInteractiveElement } from \"@/core/Helpers/focusUtilities\";\n\nimport { useAppStore } from \"@/lib/hooks\";\n\nexport interface PCallbacks {\n moveTo: (direction: \"left\" | \"right\" | \"up\" | \"down\" | \"home\" | \"end\") => void;\n goProgression: (shiftKey?: boolean) => void;\n toggleAction: (action: ThActionsKeys) => void;\n}\n\nexport interface PShortcuts {\n [key: string]: {\n actionKey: ThActionsKeys;\n modifiers: UnstablePShortcut[\"modifiers\"];\n }\n}\n\nexport default class Peripherals {\n private readonly observers = [\"keydown\"];\n private targets: EventTarget[] = [];\n private readonly callbacks: PCallbacks;\n private readonly store: ReturnType<typeof useAppStore>;\n private readonly actionsPref: ThActionsPref<ThActionsKeys> | undefined;\n private readonly shortcuts: PShortcuts;\n\n constructor(store: ReturnType<typeof useAppStore>, actionsPref: ThActionsPref<ThActionsKeys> | undefined, callbacks: PCallbacks) {\n this.observers.forEach((method) => {\n (this as any)[\"on\" + method] = (this as any)[\"on\" + method].bind(this);\n });\n this.store = store;\n this.actionsPref = actionsPref;\n this.callbacks = callbacks;\n this.shortcuts = this.retrieveShortcuts();\n }\n\n private getPlatformModifier(): \"ctrlKey\" | \"metaKey\" {\n return this.store.getState().reader.platformModifier.modifier;\n }\n\n private retrieveShortcuts() {\n if (!this.actionsPref) return {};\n\n const shortcutsObj: PShortcuts = {};\n\n const displayOrder = this.store.getState().publication.isFXL\n ? this.actionsPref.fxlOrder\n : this.actionsPref.reflowOrder;\n\n for (const actionKey of displayOrder) {\n const shortcutString = this.actionsPref.keys[actionKey as keyof typeof ThActionsKeys].shortcut;\n \n if (shortcutString) {\n const shortcutObj = buildShortcut(shortcutString);\n\n if (shortcutObj?.key) {\n Object.defineProperty(shortcutsObj, shortcutObj.key, {\n value: {\n actionKey: actionKey,\n modifiers: shortcutObj.modifiers\n },\n writable: false,\n enumerable: true\n });\n }\n }\n };\n \n return shortcutsObj;\n }\n\n destroy() {\n this.targets.forEach((t) => this.unobserve(t));\n }\n\n unobserve(item: EventTarget) {\n if (!item) return;\n this.observers.forEach((EventName) => {\n item.removeEventListener(\n EventName,\n (this as any)[\"on\" + EventName],\n false\n );\n });\n this.targets = this.targets.filter((t) => t !== item);\n }\n\n observe(item: EventTarget) {\n if (!item) return;\n if (this.targets.includes(item)) return;\n this.observers.forEach((EventName) => {\n item.addEventListener(EventName, (this as any)[\"on\" + EventName], false);\n });\n this.targets.push(item);\n }\n\n onkeydown(e: KeyboardEvent) {\n const focusIsSafe = !isInteractiveElement(document.activeElement);\n \n switch(e.code) {\n case \"Space\":\n focusIsSafe && this.callbacks.goProgression(e.shiftKey);\n break;\n case \"ArrowRight\":\n focusIsSafe && this.callbacks.moveTo(\"right\");\n break;\n case \"ArrowLeft\":\n focusIsSafe && this.callbacks.moveTo(\"left\");\n break;\n case \"ArrowUp\":\n case \"PageUp\":\n focusIsSafe && this.callbacks.moveTo(\"up\");\n break;\n case \"ArrowDown\":\n case \"PageDown\":\n focusIsSafe && this.callbacks.moveTo(\"down\");\n break;\n case \"Home\":\n focusIsSafe && this.callbacks.moveTo(\"home\");\n break;\n case \"End\":\n focusIsSafe && this.callbacks.moveTo(\"end\");\n break;\n default:\n if (this.shortcuts.hasOwnProperty(e.code)) {\n const customShortcutObj = this.shortcuts[e.code];\n const sendCallback = Object.entries(customShortcutObj.modifiers).every(( [modifier, value] ) => {\n if (modifier === \"platformKey\") {\n return e[this.getPlatformModifier()] === value;\n } else {\n return e[modifier as \"altKey\" | \"ctrlKey\" | \"metaKey\" | \"shiftKey\"] === value;\n }\n })\n \n if (sendCallback) {\n e.preventDefault();\n this.callbacks.toggleAction(customShortcutObj.actionKey)\n };\n }\n break;\n }\n }\n}","\"use client\";\n\nimport { Link, Locator } from \"@readium/shared\";\n\nexport interface TocItem {\n id: string;\n href: string;\n title?: string;\n children?: TocItem[];\n position?: number;\n}\n\n/**\n * Recursively adds an ID to each Link in a list of Links, and returns a new list of TocItems.\n * @param links - The list of Links to process.\n * @param idGenerator - A function that generates a unique ID for each Link.\n * @returns A new list of TocItems with an id added to each.\n * \n * NOTE: This is temporary and is meant to be replace with a concept of Timeline so that it can be reused\n * across multiple components (Go To Position, progression, table of contents, etc.)\n */\nexport function createTocTree(\n links: Link[],\n idGenerator: () => string,\n positionsList?: Locator[]\n): TocItem[] {\n return links.map((link) => {\n // Generate a new ID for the current Link\n const newId = idGenerator();\n\n // Create a plain object for compatibility with Tree components\n let href = link.href;\n const fragmentIndex = href.indexOf(\"#\");\n if (fragmentIndex !== -1) {\n const baseHref = href.substring(0, fragmentIndex);\n const duplicateLink = links.find((l) => l.href.startsWith(baseHref) && l.href !== href);\n if (!duplicateLink) {\n href = baseHref;\n }\n }\n\n const treeNode: TocItem = {\n id: newId,\n href: href,\n title: link.title,\n position: positionsList?.find((position) => position.href === href)?.locations.position\n };\n\n // Recursively process children if they exist\n if (link.children) {\n treeNode.children = createTocTree(link.children.items, idGenerator, positionsList);\n }\n\n return treeNode;\n });\n}","import { Locator } from \"@readium/shared\";\n\n export const deserializePositions = (positionsList?: Locator[]) => {\n return positionsList?.map((locator) => ({\n href: locator.href,\n type: locator.type,\n locations: {\n position: locator.locations.position,\n progression: locator.locations.progression,\n totalProgression: locator.locations.totalProgression\n },\n }));\n };","\"use client\";\n\nimport { useState } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport bookUrlConverterStyles from \"./assets/styles/bookUrlConverter.module.css\";\n\nimport { ThForm } from \"@/core/Components/Form/ThForm\";\nimport { ThFormTextField } from \"@/core/Components\";\n\nexport const BookUrlConverter = () => {\n const [bookUrl, setBookUrl] = useState(\"\");\n \n const handleAction = (e: React.FormEvent) => {\n e.preventDefault();\n if (!bookUrl) return;\n \n try {\n // Convert the book URL to base64Url format using TextEncoder for proper Unicode handling\n const bytes = new TextEncoder().encode(bookUrl);\n const binString = Array.from(bytes, byte => String.fromCodePoint(byte)).join('');\n const base64 = btoa(binString);\n const base64Url = base64\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n \n // Redirect to the /read page with the base64 URL as a query parameter\n window.location.href = new URL(\n `read?book=https://publication-server.readium.org/${encodeURIComponent(base64Url)}/manifest.json`, \n window.location.href\n ).href;\n } catch (error) {\n console.error(\"Error encoding URL:\", error);\n // You could add user-friendly error handling here\n }\n };\n\n return (\n <>\n <ThForm\n label={ Locale.bookUrlConverter.button }\n className={ bookUrlConverterStyles.bookConverterForm }\n onSubmit={ handleAction }\n compounds={{\n button: {\n className: bookUrlConverterStyles.bookConverterFormButton,\n isDisabled: !bookUrl\n }\n }}\n >\n <ThFormTextField\n label={ Locale.bookUrlConverter.label }\n name=\"book-url-converter\"\n className={ bookUrlConverterStyles.bookConverterFormTextField }\n type=\"url\"\n errorMessage={ Locale.bookUrlConverter.error }\n compounds={{\n label: {\n className: bookUrlConverterStyles.bookConverterFormLabel\n },\n input: {\n className: bookUrlConverterStyles.bookConverterFormInput,\n value: bookUrl,\n onChange: (e) => setBookUrl(e.target.value),\n placeholder: Locale.bookUrlConverter.placeholder\n },\n fieldError: {\n className: bookUrlConverterStyles.bookConverterFormFieldError\n }\n }}\n />\n </ThForm>\n </>\n )\n}","import { ReactNode } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport readerLoaderStyles from \"./assets/styles/readerLoader.module.css\";\n\nimport { ThLoader } from \"@/core/Components/Reader/ThLoader\";\n\nexport const StatefulLoader = ({ isLoading, children }: { isLoading: boolean, children: ReactNode }) => {\n return (\n <>\n <ThLoader \n isLoading={ isLoading } \n loader={ <div className={ readerLoaderStyles.readerLoader}>{ Locale.reader.app.loading }</div> } \n className={ readerLoaderStyles.readerLoaderWrapper } \n >\n { children }\n </ThLoader>\n </>\n )\n}"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/object-path@0.11.8/node_modules/object-path/index.js","../../../node_modules/.pnpm/json-templates@5.2.0/node_modules/json-templates/dist/index.js","../../../src/resources/locales/en.json","../../../src/components/Epub/Settings/assets/icons/document_scanner.svg","../../../src/components/Epub/Settings/assets/icons/article.svg","../../../src/components/Epub/Settings/assets/icons/menu_book.svg","../../../src/components/Settings/StatefulRadioGroup.tsx","../../../src/components/Epub/Settings/StatefulColumns.tsx","../../../src/components/Epub/Settings/StatefulFontFamily.tsx","../../../src/components/Settings/StatefulSlider.tsx","../../../src/components/Epub/Settings/StatefulFontWeight.tsx","../../../src/components/Settings/StatefulSwitch.tsx","../../../src/components/Epub/Settings/StatefulHyphens.tsx","../../../src/components/Epub/Settings/assets/icons/contract.svg","../../../src/components/Epub/Settings/assets/icons/docs.svg","../../../src/components/Epub/Settings/StatefulLayout.tsx","../../../src/components/Settings/StatefulNumberField.tsx","../../../src/components/Epub/Settings/StatefulLetterSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/book.svg","../../../src/components/Epub/Settings/assets/icons/density_small.svg","../../../src/components/Epub/Settings/assets/icons/density_medium.svg","../../../src/components/Epub/Settings/assets/icons/density_large.svg","../../../src/components/Epub/Settings/StatefulLineHeight.tsx","../../../src/components/Epub/Settings/StatefulParagraphIndent.tsx","../../../src/components/Epub/Settings/StatefulParagraphSpacing.tsx","../../../src/components/Epub/Settings/StatefulPublisherStyles.tsx","../../../src/components/Settings/StatefulGroupWrapper.tsx","../../../src/components/Plugins/PluginRegistry.ts","../../../src/components/Plugins/PluginProvider.tsx","../../../src/components/Epub/Settings/StatefulSpacingGroup.tsx","../../../src/components/Epub/Settings/assets/icons/format_align_left.svg","../../../src/components/Epub/Settings/assets/icons/format_align_right.svg","../../../src/components/Epub/Settings/assets/icons/format_align_justify.svg","../../../src/components/Epub/Settings/StatefulTextAlign.tsx","../../../src/components/Epub/Settings/StatefulTextGroup.tsx","../../../src/components/Epub/Settings/StatefulTextNormalize.tsx","../../../src/components/Epub/Settings/assets/icons/check.svg","../../../src/components/Epub/Settings/StatefulTheme.tsx","../../../src/components/Epub/Settings/StatefulWordSpacing.tsx","../../../src/components/Epub/Settings/assets/icons/text_decrease.svg","../../../src/components/Epub/Settings/assets/icons/text_increase.svg","../../../src/components/Epub/Settings/assets/icons/zoom_out.svg","../../../src/components/Epub/Settings/assets/icons/zoom_in.svg","../../../src/components/Epub/Settings/StatefulZoom.tsx","../../../src/components/Docking/hooks/useResizablePanel.ts","../../../src/components/Docking/StatefulDockingWrapper.tsx","../../../src/components/Actions/assets/icons/more_vert.svg","../../../src/components/Actions/Triggers/StatefulActionIcon.tsx","../../../src/components/Actions/StatefulOverflowMenu.tsx","../../../src/components/Actions/StatefulCollapsibleActionsBar.tsx","../../../src/components/StatefulReaderHeader.tsx","../../../src/components/StatefulReaderArrowButton.tsx","../../../src/components/StatefulReaderProgression.tsx","../../../src/components/StatefulPagination.tsx","../../../src/components/StatefulReaderFooter.tsx","../../../src/components/Epub/StatefulReader.tsx","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen.svg","../../../src/components/Actions/Fullscreen/assets/icons/fullscreen_exit.svg","../../../src/components/Actions/Triggers/UnstableStatefulShortcut.tsx","../../../src/components/Actions/Triggers/StatefulOverflowMenuItem.tsx","../../../src/components/Actions/Fullscreen/StatefulFullscreenTrigger.tsx","../../../src/components/Actions/JumpToPosition/assets/icons/pin_drop.svg","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionTrigger.tsx","../../../src/components/Docking/assets/icons/dock_to_right.svg","../../../src/components/Docking/assets/icons/dock_to_left.svg","../../../src/components/Docking/StatefulDockStart.tsx","../../../src/components/Docking/StatefulDockEnd.tsx","../../../src/components/Docking/assets/icons/stack.svg","../../../src/components/Docking/StatefulDockTransientPopover.tsx","../../../src/components/Docking/StatefulDocker.tsx","../../../src/components/Sheets/hooks/useWebkitPatch.ts","../../../src/components/Sheets/StatefulPopoverSheet.tsx","../../../src/components/Sheets/StatefulBottomSheet.tsx","../../../src/components/Sheets/StatefulFullScreenSheet.tsx","../../../src/components/Sheets/StatefulDockedSheet.tsx","../../../src/components/Sheets/StatefulSheetWrapper.tsx","../../../src/components/Docking/hooks/useDocking.ts","../../../src/components/Actions/JumpToPosition/StatefulJumpToPositionContainer.tsx","../../../src/components/Actions/Settings/assets/icons/match_case.svg","../../../src/components/Actions/Settings/StatefulSettingsTrigger.tsx","../../../src/components/Actions/Settings/StatefulSettingsContainer.tsx","../../../src/components/Actions/Toc/assets/icons/toc.svg","../../../src/components/Actions/Toc/StatefulTocTrigger.tsx","../../../src/components/Actions/Toc/assets/icons/chevron_right.svg","../../../src/components/Actions/Toc/StatefulTocContainer.tsx","../../../src/components/Plugins/helpers/createDefaultPlugin.ts","../../../src/helpers/peripherals.ts","../../../src/helpers/deserializePositions.ts","../../../src/components/StatefulLoader.tsx","../../../src/components/PublicationGrid.tsx","../../../src/hooks/usePublication.ts"],"names":["jsx","settingsStyles","debounce","Fragment","useCallback","key","classNames","readerSharedUI","useRef","value","useState","useEffect","textAlign","theme","parseTemplate","jsxs","dockingMap","overflowMenuStyles","className","arrowStyles","isHovering","import_json_templates","readerPaginationStyles","useFocusWithin","import_debounce","dockingStyles","React","sheetStyles","useMemo","snapArray","scrimPref","item","filterValue","items","Link","tocEntry","breakpoint","colorScheme","reducedMotion","timeline","positionsList","isFXL","dispatch","HttpFetcher","error"],"mappings":"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","file":"index.mjs","sourcesContent":["(function (root, factory) {\n 'use strict'\n\n /*istanbul ignore next:cant test*/\n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = factory()\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory)\n } else {\n // Browser globals\n root.objectPath = factory()\n }\n})(this, function () {\n 'use strict'\n\n var toStr = Object.prototype.toString\n\n function hasOwnProperty (obj, prop) {\n if (obj == null) {\n return false\n }\n //to handle objects with null prototypes (too edge case?)\n return Object.prototype.hasOwnProperty.call(obj, prop)\n }\n\n function isEmpty (value) {\n if (!value) {\n return true\n }\n if (isArray(value) && value.length === 0) {\n return true\n } else if (typeof value !== 'string') {\n for (var i in value) {\n if (hasOwnProperty(value, i)) {\n return false\n }\n }\n return true\n }\n return false\n }\n\n function toString (type) {\n return toStr.call(type)\n }\n\n function isObject (obj) {\n return typeof obj === 'object' && toString(obj) === '[object Object]'\n }\n\n var isArray = Array.isArray || function (obj) {\n /*istanbul ignore next:cant test*/\n return toStr.call(obj) === '[object Array]'\n }\n\n function isBoolean (obj) {\n return typeof obj === 'boolean' || toString(obj) === '[object Boolean]'\n }\n\n function getKey (key) {\n var intKey = parseInt(key)\n if (intKey.toString() === key) {\n return intKey\n }\n return key\n }\n\n function factory (options) {\n options = options || {}\n\n var objectPath = function (obj) {\n return Object.keys(objectPath).reduce(function (proxy, prop) {\n if (prop === 'create') {\n return proxy\n }\n\n /*istanbul ignore else*/\n if (typeof objectPath[prop] === 'function') {\n proxy[prop] = objectPath[prop].bind(objectPath, obj)\n }\n\n return proxy\n }, {})\n }\n\n var hasShallowProperty\n if (options.includeInheritedProps) {\n hasShallowProperty = function () {\n return true\n }\n } else {\n hasShallowProperty = function (obj, prop) {\n return (typeof prop === 'number' && Array.isArray(obj)) || hasOwnProperty(obj, prop)\n }\n }\n\n function getShallowProperty (obj, prop) {\n if (hasShallowProperty(obj, prop)) {\n return obj[prop]\n }\n }\n\n var getShallowPropertySafely\n if (options.includeInheritedProps) {\n getShallowPropertySafely = function (obj, currentPath) {\n if (typeof currentPath !== 'string' && typeof currentPath !== 'number') {\n currentPath = String(currentPath)\n }\n var currentValue = getShallowProperty(obj, currentPath)\n if (currentPath === '__proto__' || currentPath === 'prototype' ||\n (currentPath === 'constructor' && typeof currentValue === 'function')) {\n throw new Error('For security reasons, object\\'s magic properties cannot be set')\n }\n return currentValue\n }\n } else {\n getShallowPropertySafely = function (obj, currentPath) {\n return getShallowProperty(obj, currentPath)\n }\n }\n\n function set (obj, path, value, doNotReplace) {\n if (typeof path === 'number') {\n path = [path]\n }\n if (!path || path.length === 0) {\n return obj\n }\n if (typeof path === 'string') {\n return set(obj, path.split('.').map(getKey), value, doNotReplace)\n }\n var currentPath = path[0]\n var currentValue = getShallowPropertySafely(obj, currentPath)\n if (path.length === 1) {\n if (currentValue === void 0 || !doNotReplace) {\n obj[currentPath] = value\n }\n return currentValue\n }\n\n if (currentValue === void 0) {\n //check if we assume an array\n if (typeof path[1] === 'number') {\n obj[currentPath] = []\n } else {\n obj[currentPath] = {}\n }\n }\n\n return set(obj[currentPath], path.slice(1), value, doNotReplace)\n }\n\n objectPath.has = function (obj, path) {\n if (typeof path === 'number') {\n path = [path]\n } else if (typeof path === 'string') {\n path = path.split('.')\n }\n\n if (!path || path.length === 0) {\n return !!obj\n }\n\n for (var i = 0; i < path.length; i++) {\n var j = getKey(path[i])\n\n if ((typeof j === 'number' && isArray(obj) && j < obj.length) ||\n (options.includeInheritedProps ? (j in Object(obj)) : hasOwnProperty(obj, j))) {\n obj = obj[j]\n } else {\n return false\n }\n }\n\n return true\n }\n\n objectPath.ensureExists = function (obj, path, value) {\n return set(obj, path, value, true)\n }\n\n objectPath.set = function (obj, path, value, doNotReplace) {\n return set(obj, path, value, doNotReplace)\n }\n\n objectPath.insert = function (obj, path, value, at) {\n var arr = objectPath.get(obj, path)\n at = ~~at\n if (!isArray(arr)) {\n arr = []\n objectPath.set(obj, path, arr)\n }\n arr.splice(at, 0, value)\n }\n\n objectPath.empty = function (obj, path) {\n if (isEmpty(path)) {\n return void 0\n }\n if (obj == null) {\n return void 0\n }\n\n var value, i\n if (!(value = objectPath.get(obj, path))) {\n return void 0\n }\n\n if (typeof value === 'string') {\n return objectPath.set(obj, path, '')\n } else if (isBoolean(value)) {\n return objectPath.set(obj, path, false)\n } else if (typeof value === 'number') {\n return objectPath.set(obj, path, 0)\n } else if (isArray(value)) {\n value.length = 0\n } else if (isObject(value)) {\n for (i in value) {\n if (hasShallowProperty(value, i)) {\n delete value[i]\n }\n }\n } else {\n return objectPath.set(obj, path, null)\n }\n }\n\n objectPath.push = function (obj, path /*, values */) {\n var arr = objectPath.get(obj, path)\n if (!isArray(arr)) {\n arr = []\n objectPath.set(obj, path, arr)\n }\n\n arr.push.apply(arr, Array.prototype.slice.call(arguments, 2))\n }\n\n objectPath.coalesce = function (obj, paths, defaultValue) {\n var value\n\n for (var i = 0, len = paths.length; i < len; i++) {\n if ((value = objectPath.get(obj, paths[i])) !== void 0) {\n return value\n }\n }\n\n return defaultValue\n }\n\n objectPath.get = function (obj, path, defaultValue) {\n if (typeof path === 'number') {\n path = [path]\n }\n if (!path || path.length === 0) {\n return obj\n }\n if (obj == null) {\n return defaultValue\n }\n if (typeof path === 'string') {\n return objectPath.get(obj, path.split('.'), defaultValue)\n }\n\n var currentPath = getKey(path[0])\n var nextObj = getShallowPropertySafely(obj, currentPath)\n if (nextObj === void 0) {\n return defaultValue\n }\n\n if (path.length === 1) {\n return nextObj\n }\n\n return objectPath.get(obj[currentPath], path.slice(1), defaultValue)\n }\n\n objectPath.del = function del (obj, path) {\n if (typeof path === 'number') {\n path = [path]\n }\n\n if (obj == null) {\n return obj\n }\n\n if (isEmpty(path)) {\n return obj\n }\n if (typeof path === 'string') {\n return objectPath.del(obj, path.split('.'))\n }\n\n var currentPath = getKey(path[0])\n getShallowPropertySafely(obj, currentPath)\n if (!hasShallowProperty(obj, currentPath)) {\n return obj\n }\n\n if (path.length === 1) {\n if (isArray(obj)) {\n obj.splice(currentPath, 1)\n } else {\n delete obj[currentPath]\n }\n } else {\n return objectPath.del(obj[currentPath], path.slice(1))\n }\n\n return obj\n }\n\n return objectPath\n }\n\n var mod = factory()\n mod.create = factory\n mod.withInheritedProps = factory({includeInheritedProps: true})\n return mod\n})\n","(function (factory) {\n typeof define === 'function' && define.amd ? define(factory) :\n factory();\n})((function () { 'use strict';\n\n // json-templates\n // Simple templating within JSON structures.\n //\n // Created by Curran Kelleher and Chrostophe Serafin.\n // Contributions from Paul Brewer and Javier Blanco Martinez.\n var objectPath = require('object-path');\n\n // An enhanced version of `typeof` that handles arrays and dates as well.\n function type(value) {\n var valueType = typeof value;\n if (Array.isArray(value)) {\n valueType = 'array';\n } else if (value instanceof Date) {\n valueType = 'date';\n } else if (value === null) {\n valueType = 'null';\n }\n\n return valueType;\n }\n\n // Constructs a template function with deduped `parameters` property.\n function Template(fn, parameters) {\n fn.parameters = Array.from(\n new Map(parameters.map(function (parameter) { return [parameter.key, parameter]; })).values()\n );\n return fn;\n }\n\n // Parses the given template object.\n //\n // Returns a function `template(context)` that will \"fill in\" the template\n // with the context object passed to it.\n //\n // The returned function has a `parameters` property,\n // which is an array of parameter descriptor objects,\n // each of which has a `key` property and possibly a `defaultValue` property.\n function parse(value, options) {\n switch (type(value)) {\n case 'string':\n return parseString(value, options);\n case 'object':\n return parseObject(value, options);\n case 'array':\n return parseArray(value, options);\n default:\n return Template(function () {\n return value;\n }, []);\n }\n }\n\n // Parses leaf nodes of the template object that are strings.\n // Also used for parsing keys that contain templates.\n function parseString(str, options) {\n if ( options === void 0 ) options = {};\n\n var regex = /\\{\\{[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*((?:[\\$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])(?:[\\$\\x2D\\.0-9A-Z_a-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])*)(?::((?:(?!\\})[\\s\\S])*))?[\\t-\\r \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]*\\}\\}/g;\n\n var templateFn = function () { return str; };\n\n var matches = Array.from(str.matchAll(regex));\n var parameters = matches.map(function (match) {\n var r = {\n key: match[1],\n };\n if (match[2]) {\n r.defaultValue = match[2];\n }\n return r;\n });\n\n if (matches.length > 0) {\n templateFn = function (context) {\n if ( context === void 0 ) context = {};\n\n return matches.reduce(function (result, match, i) {\n var parameter = parameters[i];\n var value = objectPath.get(\n context,\n options.rawKey ? [parameter.key] : parameter.key\n );\n\n if (typeof value === 'undefined') {\n value = parameter.defaultValue;\n }\n\n if (typeof value === 'function') {\n value = value();\n }\n\n if (matches.length === 1 && str.trim() === match[0]) {\n return value;\n }\n\n if (value instanceof Date) {\n value = value.toISOString();\n }\n\n return result.replace(match[0], value == null ? '' : value);\n }, str);\n };\n }\n\n return Template(templateFn, parameters);\n }\n\n // Parses non-leaf-nodes in the template object that are objects.\n function parseObject(object, options) {\n var children = Object.keys(object).map(function (key) { return ({\n keyTemplate: parseString(key, options),\n valueTemplate: parse(object[key], options),\n }); });\n var templateParameters = children.reduce(\n function (parameters, child) { return parameters.concat(\n child.valueTemplate.parameters,\n child.keyTemplate.parameters\n ); },\n []\n );\n var templateFn = function (context) {\n return children.reduce(function (newObject, child) {\n newObject[child.keyTemplate(context)] = child.valueTemplate(context);\n return newObject;\n }, {});\n };\n\n return Template(templateFn, templateParameters);\n }\n\n // Parses non-leaf-nodes in the template object that are arrays.\n function parseArray(array, options) {\n var templates = array.map(function (t) { return parse(t, options); });\n var templateParameters = templates.reduce(\n function (parameters, template) { return parameters.concat(template.parameters); },\n []\n );\n var templateFn = function (context) { return templates.map(function (template) { return template(context); }); };\n\n return Template(templateFn, templateParameters);\n }\n\n module.exports = parse;\n\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}","import * as React from \"react\";\nconst SvgDocumentScanner = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M80-720v-200h200v80H160v120H80Zm720 0v-120H680v-80h200v200h-80ZM80-40v-200h80v120h120v80H80Zm600 0v-80h120v-120h80v200H680ZM280-240h400v-480H280v480Zm0 80q-33 0-56.5-23.5T200-240v-480q0-33 23.5-56.5T280-800h400q33 0 56.5 23.5T760-720v480q0 33-23.5 56.5T680-160H280Zm80-400h240v-80H360v80Zm0 120h240v-80H360v80Zm0 120h240v-80H360v80Zm-80 80v-480 480Z\" /></svg>;\nexport default SvgDocumentScanner;","import * as React from \"react\";\nconst SvgArticle = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M280-280h280v-80H280v80Zm0-160h400v-80H280v80Zm0-160h400v-80H280v80Zm-80 480q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\" /></svg>;\nexport default SvgArticle;","import * as React from \"react\";\nconst SvgMenuBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M560-564v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-600q-38 0-73 9.5T560-564Zm0 220v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-380q-38 0-73 9t-67 27Zm0-110v-68q33-14 67.5-21t72.5-7q26 0 51 4t49 10v64q-24-9-48.5-13.5T700-490q-38 0-73 9.5T560-454ZM260-320q47 0 91.5 10.5T440-278v-394q-41-24-87-36t-93-12q-36 0-71.5 7T120-692v396q35-12 69.5-18t70.5-6Zm260 42q44-21 88.5-31.5T700-320q36 0 70.5 6t69.5 18v-396q-33-14-68.5-21t-71.5-7q-47 0-93 12t-87 36v394Zm-40 118q-48-38-104-59t-116-21q-42 0-82.5 11T100-198q-21 11-40.5-1T40-234v-482q0-11 5.5-21T62-752q46-24 96-36t102-12q58 0 113.5 15T480-740q51-30 106.5-45T700-800q52 0 102 12t96 36q11 5 16.5 15t5.5 21v482q0 23-19.5 35t-40.5 1q-37-20-77.5-31T700-240q-60 0-116 21t-104 59ZM280-494Z\" /></svg>;\nexport default SvgMenuBook;","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThRadioGroup, ThRadioGroupProps } from \"@/core/Components/Settings/ThRadioGroup\"\n\nexport interface StatefulRadioGroupProps extends Omit<ThRadioGroupProps, \"classNames\"> {\n standalone?: boolean\n}\n\nexport const StatefulRadioGroup = ({\n standalone,\n label,\n children,\n ...props\n}: StatefulRadioGroupProps) => {\n return (\n <>\n <ThRadioGroup \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ standalone ? settingsStyles.readerSettingsGroup : \"\" }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsRadioWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n radio: {\n className: settingsStyles.readerSettingsRadio\n }\n }}\n >\n { children }\n </ThRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport AutoLayoutIcon from \"./assets/icons/document_scanner.svg\";\nimport OneColIcon from \"./assets/icons/article.svg\";\nimport TwoColsIcon from \"./assets/icons/menu_book.svg\";\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useAppSelector, useAppDispatch } from \"@/lib/hooks\";\nimport { setColumnCount } from \"@/lib/settingsReducer\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport debounce from \"debounce\";\n\nexport const StatefulColumns = () => {\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const columnCount = useAppSelector(state => state.settings.columnCount) || \"auto\";\n const [effectiveValue, setEffectiveValue] = useState(columnCount);\n\n const fontSize = useAppSelector(state => state.settings.fontSize);\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const layoutSettings = useMemo(() => {\n return {\n fontSize,\n fontFamily,\n wordSpacing,\n letterSpacing,\n publisherStyles\n };\n }, [fontSize, fontFamily, wordSpacing, letterSpacing, publisherStyles]);\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences, getSetting } = useEpubNavigator();\n\n const updateEffectiveValue = useCallback((preference: string, setting: number | null) => {\n const derivedValue = preference === \"auto\" || setting === null ? \"auto\" : setting.toString();\n setEffectiveValue(derivedValue);\n }, []);\n\n const updatePreference = useCallback(async (value: string) => {\n const colCount = value === \"auto\" ? null : Number(value);\n await submitPreferences({ columnCount: colCount });\n updateEffectiveValue(value, getSetting(\"columnCount\"));\n dispatch(setColumnCount(value));\n }, [submitPreferences, getSetting, updateEffectiveValue, dispatch]);\n\n const debouncedUpdate = useCallback(() => {\n const update = () => updateEffectiveValue(columnCount, getSetting(\"columnCount\"));\n debounce(update, 50)();\n\n // layoutSettings is required as a dependency because it contains all the settings\n // that affect column layout (fontSize, fontFamily, wordSpacing, letterSpacing, publisherStyles)\n // and we need to recalculate the layout when any of these change.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [columnCount, layoutSettings, getSetting, updateEffectiveValue]);\n\n useEffect(() => {\n debouncedUpdate();\n\n window.addEventListener(\"resize\", debouncedUpdate);\n\n return () => {\n window.removeEventListener(\"resize\", debouncedUpdate);\n };\n }, [debouncedUpdate]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ true }\n label={ Locale.reader.settings.column.title }\n orientation=\"horizontal\"\n value={ effectiveValue }\n onChange={ async (val: string) => await updatePreference(val) }\n isDisabled={ isScroll }\n items={[\n {\n icon: AutoLayoutIcon,\n label: Locale.reader.settings.column.auto, \n value: \"auto\" \n },\n {\n icon: OneColIcon,\n label: Locale.reader.settings.column.one, \n value: \"1\" \n },\n {\n icon: TwoColsIcon,\n label: Locale.reader.settings.column.two, \n value: \"2\",\n // This is subpar when the columnCount is 1 though because\n // it won’t be disabled, but it’s the best we can do with\n // the preferences API at the moment\n isDisabled: effectiveValue === \"1\" && columnCount === \"2\"\n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { CSSProperties, Key, useCallback, useRef } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { ThDropdown } from \"@/core/Components/Settings/ThDropdown\";\n\nimport { ListBox, ListBoxItem } from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontFamily } from \"@/lib/settingsReducer\";\nimport { defaultFontFamilyOptions } from \"@/preferences/models/const\";\n\nexport const StatefulFontFamily = ({ standalone = true }: StatefulSettingsItemProps) => {\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontFamilyOptions = useRef(Object.entries(defaultFontFamilyOptions).map(([property, stack]) => ({\n id: property,\n label: Locale.reader.settings.fontFamily.labels[property as keyof typeof Locale.reader.settings.fontFamily.labels],\n value: stack\n }))\n );\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (key: Key | null) => {\n if (!key || key === fontFamily) return;\n\n const selectedOption = fontFamilyOptions.current.find((option) => option.id === key) as {\n id: keyof typeof defaultFontFamilyOptions;\n label: string;\n value: string | null;\n };\n \n if (selectedOption) {\n await submitPreferences({ fontFamily: selectedOption.value });\n \n const currentSetting = getSetting(\"fontFamily\");\n const selectedOptionId = Object.keys(defaultFontFamilyOptions).find(key => defaultFontFamilyOptions[key as keyof typeof defaultFontFamilyOptions] === currentSetting) as keyof typeof defaultFontFamilyOptions;\n dispatch(setFontFamily(selectedOptionId || defaultFontFamilyOptions.publisher));\n }\n }, [fontFamily, submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <ThDropdown \n { ...(standalone \n ? { \n className: settingsStyles.readerSettingsGroup,\n label: Locale.reader.settings.fontFamily.title\n } \n : {\n \"aria-label\": Locale.reader.settings.fontFamily.title\n }) }\n selectedKey={ fontFamily }\n onSelectionChange={ async (key) => await updatePreference(key) }\n compounds={ {\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n button: {\n className: settingsStyles.readerSettingsDropdownButton\n },\n popover: {\n className: settingsStyles.readerSettingsDropdownPopover,\n placement: \"bottom\"\n },\n listbox: (\n <ListBox\n className={ settingsStyles.readerSettingsDropdownListbox }\n items={ fontFamilyOptions.current }\n >\n { (item) => (\n <ListBoxItem\n className={ settingsStyles.readerSettingsDropdownListboxItem }\n id={ item.id }\n key={ item.id }\n textValue={ item.value || undefined }\n style={{ fontFamily: item.value || undefined } as CSSProperties}\n >\n { item.label }\n </ListBoxItem>\n )}\n </ListBox>\n )\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSlider, ThSliderProps } from \"@/core/Components/Settings/ThSlider\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulSliderProps extends Omit<ThSliderProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSlider = ({\n standalone,\n label,\n ...props\n}: StatefulSliderProps) => {\n return(\n <>\n <ThSlider\n { ...props }\n { ...(standalone ? { label: label } : {\"aria-label\": label}) }\n className={ classNames(settingsStyles.readerSettingsSlider, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n label: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsSliderLabel)\n },\n output: {\n className: settingsStyles.readerSettingsSliderOutput\n },\n track: {\n className: settingsStyles.readerSettingsSliderTrack\n },\n thumb: {\n className: settingsStyles.readerSettingsSliderThumb\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { fontWeightRangeConfig } from \"@readium/navigator\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontWeight } from \"@/lib/settingsReducer\";\n\nexport const StatefulFontWeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontWeight: value });\n\n dispatch(setFontWeight(getSetting(\"fontWeight\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.fontWeight.title }\n defaultValue={ 400 } \n value={ fontWeight } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ fontWeightRangeConfig.range }\n step={ fontWeightRangeConfig.step }\n isDisabled={ fontFamily === \"publisher\" }\n /> \n </>\n )\n}","\"use client\";\n\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSwitch, ThSwitchProps } from \"@/core/Components/Settings/ThSwitch\";\n\nexport interface StatefulSwitchProps extends Omit<ThSwitchProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulSwitch = ({\n standalone,\n label,\n heading, \n ...props\n}: StatefulSwitchProps) => {\n return(\n <>\n <ThSwitch \n { ...props }\n { ...(standalone ? { heading: heading } : {}) }\n label={ label }\n className={ settingsStyles.readerSettingsSwitch }\n compounds={{\n wrapper: {\n className: settingsStyles.readerSettingsGroup\n },\n heading: {\n className: settingsStyles.readerSettingsLabel\n },\n indicator: {\n className: settingsStyles.readerSettingsSwitchIndicator\n }\n }}\n />\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setHyphens } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulHyphens = ({ standalone = true }: StatefulSettingsItemProps) => {\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n\n const dispatch = useAppDispatch();\n \n const { getSetting, submitPreferences } = useEpubNavigator();\n \n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ \n hyphens: value \n });\n \n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ Locale.reader.settings.hyphens.title }\n label={ Locale.reader.settings.hyphens.label }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ hyphens ?? false }\n isDisabled={ textAlign === ThTextAlignOptions.publisher }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgContract = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-50 0-85-35t-35-85v-120h120v-560h600v680q0 50-35 85t-85 35H240Zm480-80q17 0 28.5-11.5T760-200v-600H320v480h360v120q0 17 11.5 28.5T720-160ZM360-600v-80h360v80H360Zm0 120v-80h360v80H360ZM240-160h360v-80H200v40q0 17 11.5 28.5T240-160Zm0 0h-40 400-360Z\" /></svg>;\nexport default SvgContract;","import * as React from \"react\";\nconst SvgDocs = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M320-440h320v-80H320v80Zm0 120h320v-80H320v80Zm0 120h200v-80H320v80ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\" /></svg>;\nexport default SvgDocs;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThLayoutOptions } from \"@/preferences/models/enums\";\n\nimport ScrollableIcon from \"./assets/icons/contract.svg\";\nimport PaginatedIcon from \"./assets/icons/docs.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setScroll } from \"@/lib/settingsReducer\";\n\nexport const StatefulLayout = () => {\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => { \n const derivedValue = value === ThLayoutOptions.scroll;\n await submitPreferences({ scroll: derivedValue });\n dispatch(setScroll(getSetting(\"scroll\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup\n standalone={ true }\n label={ Locale.reader.settings.layout.title }\n orientation=\"horizontal\"\n value={ isScroll ? ThLayoutOptions.scroll : ThLayoutOptions.paginated }\n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: PaginatedIcon,\n label: Locale.reader.settings.layout.paginated,\n value: ThLayoutOptions.paginated\n },\n {\n icon: ScrollableIcon,\n label: Locale.reader.settings.layout.scrolled,\n value: ThLayoutOptions.scroll\n }\n ]} \n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThNumberField, ThNumberFieldProps } from \"@/core/Components/Settings/ThNumberField\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulNumberFieldProps extends Omit<ThNumberFieldProps, \"classNames\"> {\n standalone?: boolean;\n}\n\nexport const StatefulNumberField = ({\n standalone,\n label,\n ...props\n}: StatefulNumberFieldProps) => {\n\n return (\n <ThNumberField \n { ...props }\n { ...(standalone ? { label: label } : { \"aria-label\": label }) }\n className={ classNames(settingsStyles.readerSettingsNumbfield, standalone ? settingsStyles.readerSettingsGroup : \"\") }\n compounds={{\n group: {\n className: settingsStyles.readerSettingsGroupWrapper\n },\n label: {\n className: settingsStyles.readerSettingsLabel\n },\n stepper: {\n className: readerSharedUI.icon\n },\n input: {\n className: settingsStyles.readerSettingsInput\n }\n }}\n />\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultLetterSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLetterSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLetterSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const letterSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.variant ?? defaultLetterSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.range ?? defaultLetterSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.letterSpacing]?.step ?? defaultLetterSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n letterSpacing: value\n });\n\n dispatch(setLetterSpacing(getSetting(\"letterSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { letterSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.letterSpacing.title }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.letterSpacing.decrease,\n incrementLabel: Locale.reader.settings.letterSpacing.increase\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.letterSpacing.title }\n defaultValue={ 0 } \n value={ letterSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ letterSpacingRangeConfig.range }\n step={ letterSpacingRangeConfig.step }\n formatOptions={ { style: \"percent\" } }\n />\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgBook = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h480q33 0 56.5 23.5T800-800v640q0 33-23.5 56.5T720-80H240Zm0-80h480v-640h-80v280l-100-60-100 60v-280H240v640Zm0 0v-640 640Zm200-360 100-60 100 60-100-60-100 60Z\" /></svg>;\nexport default SvgBook;","import * as React from \"react\";\nconst SvgDensitySmall = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-80v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Zm0-240v-80h720v80H120Z\" /></svg>;\nexport default SvgDensitySmall;","import * as React from \"react\";\nconst SvgDensityMedium = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-320v-80h720v80H120Zm0-320v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityMedium;","import * as React from \"react\";\nconst SvgDensityLarge = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-640v-80h720v80H120Z\" /></svg>;\nexport default SvgDensityLarge;","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport SmallIcon from \"./assets/icons/density_small.svg\";\nimport MediumIcon from \"./assets/icons/density_medium.svg\";\nimport LargeIcon from \"./assets/icons/density_large.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setLineHeight, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulLineHeight = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const updatePreference = useCallback(async (value: string) => {\n const computedValue = value === ThLineHeightOptions.publisher\n ? null \n : lineHeightOptions.current[value as keyof typeof ThLineHeightOptions];\n \n await submitPreferences({\n lineHeight: computedValue\n });\n\n const currentLineHeight = getSetting(\"lineHeight\");\n const currentDisplayLineHeightOption = Object.entries(lineHeightOptions.current).find(([key, value]) => value === currentLineHeight)?.[0] as ThLineHeightOptions;\n\n dispatch(setLineHeight(currentDisplayLineHeightOption));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone }\n label={ Locale.reader.settings.lineHeight.title }\n orientation=\"horizontal\"\n value={ publisherStyles ? ThLineHeightOptions.publisher : lineHeight } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: Locale.reader.settings.lineHeight.publisher, \n value: ThLineHeightOptions.publisher \n },\n {\n icon: SmallIcon,\n label: Locale.reader.settings.lineHeight.small, \n value: ThLineHeightOptions.small \n },\n {\n icon: MediumIcon,\n label: Locale.reader.settings.lineHeight.medium, \n value: ThLineHeightOptions.medium \n },\n {\n icon: LargeIcon,\n label: Locale.reader.settings.lineHeight.large, \n value: ThLineHeightOptions.large \n },\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphIndent, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphIndent, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphIndent = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphIndentRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.variant ?? defaultParagraphIndent.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.range ?? defaultParagraphIndent.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphIndent]?.step ?? defaultParagraphIndent.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphIndent: value\n });\n\n dispatch(setParagraphIndent(getSetting(\"paragraphIndent\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphIndentRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.paraIndent.title }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.paraIndent.decrease,\n incrementLabel: Locale.reader.settings.paraIndent.increase\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.paraIndent.title }\n defaultValue={ 0 } \n value={ paragraphIndent || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphIndentRangeConfig.range }\n step={ paragraphIndentRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n />\n } \n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultParagraphSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setParagraphSpacing, setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulParagraphSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const paragraphSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.variant ?? defaultParagraphSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.range ?? defaultParagraphSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.paragraphSpacing]?.step ?? defaultParagraphSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n paragraphSpacing: value\n });\n\n dispatch(setParagraphSpacing(getSetting(\"paragraphSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { paragraphSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.paraSpacing.title }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.paraSpacing.decrease,\n incrementLabel: Locale.reader.settings.paraSpacing.increase\n }}\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.paraSpacing.title }\n defaultValue={ 0 } \n value={ paragraphSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ paragraphSpacingRangeConfig.range }\n step={ paragraphSpacingRangeConfig.step }\n formatOptions={{\n signDisplay: \"exceptZero\",\n minimumFractionDigits: 0,\n maximumFractionDigits: 2\n }}\n /> \n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useRef } from \"react\";\n\nimport { defaultLineHeights, ThLineHeightOptions, ThSettingsKeys } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles } from \"@/lib/settingsReducer\";\n\nexport const StatefulPublisherStyles = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n\n const dispatch = useAppDispatch();\n\n const lineHeightOptions = useRef({\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n });\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (isSelected: boolean) => {\n const values = isSelected ? \n {\n lineHeight: null,\n paragraphIndent: null,\n paragraphSpacing: null,\n letterSpacing: null,\n wordSpacing: null\n } : \n {\n lineHeight: lineHeight === ThLineHeightOptions.publisher \n ? null \n : lineHeightOptions.current[lineHeight as keyof typeof ThLineHeightOptions],\n paragraphIndent: paragraphIndent || 0,\n paragraphSpacing: paragraphSpacing || 0,\n letterSpacing: letterSpacing || 0,\n wordSpacing: wordSpacing || 0\n };\n await submitPreferences(values);\n\n dispatch(setPublisherStyles(isSelected ? true : false));\n }, [submitPreferences, dispatch, lineHeight, paragraphIndent, paragraphSpacing, letterSpacing, wordSpacing]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n label={ Locale.reader.settings.publisherStyles.label }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ publisherStyles }\n />\n </>\n )\n}","\"use client\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\nimport settingsStyles from \"./assets/styles/settings.module.css\";\n\nimport { ThSettingsGroupPref, ThSpacingSettingsKeys, ThTextSettingsKeys } from \"@/preferences\";\nimport { PressEvent } from \"react-aria\";\nimport { SettingComponent } from \"@/components/Plugins/PluginRegistry\";\n\nimport { ThSettingsWrapper } from \"@/core/Components/Settings/ThSettingsWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulGroupWrapperProps {\n heading: string;\n moreLabel: string;\n moreTooltip: string;\n onPressMore: (e: PressEvent) => void;\n componentsMap: Record<string, SettingComponent>;\n prefs?: ThSettingsGroupPref<ThTextSettingsKeys | ThSpacingSettingsKeys>;\n defaultPrefs: {\n main: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n subPanel: ThTextSettingsKeys[] | ThSpacingSettingsKeys[];\n };\n}\n\nexport const StatefulGroupWrapper = ({\n heading,\n moreLabel,\n moreTooltip,\n onPressMore,\n componentsMap,\n prefs,\n defaultPrefs\n}: StatefulGroupWrapperProps) => {\n const RSPrefs = usePreferences();\n \n const main = prefs?.main || defaultPrefs.main;\n const displayOrder = prefs?.subPanel !== undefined \n ? prefs.subPanel \n : defaultPrefs.subPanel;\n\n const resolvedPrefs = {\n main: main,\n subPanel: displayOrder\n };\n \n return(\n <>\n <ThSettingsWrapper\n className={ classNames(settingsStyles.readerSettingsGroup, settingsStyles.readerSettingsAdvancedGroup) }\n items={ componentsMap }\n prefs={ resolvedPrefs }\n compounds={{\n label: heading,\n heading: {\n className: classNames(settingsStyles.readerSettingsLabel, settingsStyles.readerSettingsGroupLabel)\n },\n button: {\n className: classNames(readerSharedUI.icon, settingsStyles.readerSettingsAdvancedIcon),\n \"aria-label\": moreLabel,\n compounds: {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: \"top\",\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: moreTooltip\n },\n onPress: onPressMore\n }\n }}\n />\n </>\n )\n}","import { ThSettingsEntry } from \"@/core/Components\";\nimport { StatefulActionsMapObject } from \"../Actions\";\n\nexport enum ThPluginType {\n ACTION = \"action\",\n SETTING = \"setting\",\n}\n\nexport type ActionComponent = StatefulActionsMapObject;\n\nexport interface SettingComponent extends ThSettingsEntry {\n type?: \"text\" | \"spacing\";\n props?: any;\n}\n\nexport interface ThPlugin {\n id: string;\n name: string;\n description?: string;\n version?: string;\n components: {\n actions?: Record<string, ActionComponent>;\n settings?: Record<string, SettingComponent>;\n };\n}\n\n// Store plugins in a module-level variable to ensure persistence\nconst pluginsStore: ThPlugin[] = [];\n\nclass PluginRegistryClass {\n register(plugin: ThPlugin): void {\n const existingPluginIndex = pluginsStore.findIndex(p => p.id === plugin.id);\n \n if (existingPluginIndex >= 0) {\n pluginsStore[existingPluginIndex] = plugin;\n } else {\n pluginsStore.push(plugin);\n }\n }\n \n unregister(pluginId: string): void {\n const filteredPlugins = pluginsStore.filter(plugin => plugin.id !== pluginId);\n \n // Clear the array and repopulate it\n pluginsStore.length = 0;\n pluginsStore.push(...filteredPlugins);\n }\n \n getPlugins(): ThPlugin[] {\n return [...pluginsStore];\n }\n \n getComponentMaps() { \n const actionsComponentsMap: Record<string, ActionComponent> = {} as Record<string, ActionComponent>;\n const settingsComponentsMap: Record<string, SettingComponent> = {} as Record<string, SettingComponent>;\n \n // Process plugins in reverse order so later plugins override earlier ones\n [...pluginsStore].reverse().forEach(plugin => { \n // Merge actions components\n if (plugin.components.actions) {\n Object.entries(plugin.components.actions).forEach(([key, component]) => {\n actionsComponentsMap[key as string] = component;\n });\n }\n \n // Merge settings components\n if (plugin.components.settings) {\n Object.entries(plugin.components.settings).forEach(([key, component]) => {\n settingsComponentsMap[key as string] = component;\n });\n }\n });\n \n return {\n actionsComponentsMap,\n settingsComponentsMap\n };\n }\n}\n\n// Export singleton instance\nexport const ThPluginRegistry = new PluginRegistryClass();","\"use client\";\n\nimport React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { ThPluginRegistry, ActionComponent, SettingComponent } from \"./PluginRegistry\";\n\ninterface ThPluginContextType {\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n registerPlugin: typeof ThPluginRegistry.register;\n unregisterPlugin: typeof ThPluginRegistry.unregister;\n}\n\nconst ThPluginContext = createContext<ThPluginContextType>({\n actionsComponentsMap: {} as Record<string, ActionComponent>,\n settingsComponentsMap: {} as Record<string, SettingComponent>,\n textSettingsComponentsMap: {} as Record<string, SettingComponent>,\n spacingSettingsComponentsMap: {} as Record<string, SettingComponent>,\n registerPlugin: ThPluginRegistry.register.bind(ThPluginRegistry),\n unregisterPlugin: ThPluginRegistry.unregister.bind(ThPluginRegistry)\n});\n\nexport const usePlugins = () => useContext(ThPluginContext);\n\nexport const ThPluginProvider = ({ children }: { children: React.ReactNode }) => {\n const [componentMaps, setComponentMaps] = useState<{\n actionsComponentsMap: Record<string, ActionComponent>;\n settingsComponentsMap: Record<string, SettingComponent>;\n textSettingsComponentsMap: Record<string, SettingComponent>;\n spacingSettingsComponentsMap: Record<string, SettingComponent>;\n }>(() => {\n // Force a fresh retrieval of component maps\n const maps = ThPluginRegistry.getComponentMaps();\n return {\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n };\n });\n \n // Helper function to filter settings components by type\n function getTypedSettingsComponents(\n componentsMap: Record<string, SettingComponent>,\n type: \"text\" | \"spacing\"\n ): Record<string, SettingComponent> {\n return Object.entries(componentsMap)\n .filter(([_, component]) => component.type === type)\n .reduce((acc, [key, component]) => {\n acc[key] = component;\n return acc;\n }, {} as Record<string, SettingComponent>);\n }\n \n // Update component maps when plugins change\n useEffect(() => {\n const updateComponentMaps = () => {\n const maps = ThPluginRegistry.getComponentMaps();\n setComponentMaps({\n ...maps,\n textSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"text\"),\n spacingSettingsComponentsMap: getTypedSettingsComponents(maps.settingsComponentsMap, \"spacing\")\n });\n };\n \n // Initial update to ensure we have the latest maps\n updateComponentMaps();\n }, []);\n \n // Wrapper for register that triggers an update\n const registerPlugin = (plugin: Parameters<typeof ThPluginRegistry.register>[0]) => {\n ThPluginRegistry.register(plugin);\n };\n \n // Wrapper for unregister that triggers an update\n const unregisterPlugin = (pluginId: string) => {\n ThPluginRegistry.unregister(pluginId);\n };\n \n // Provide the component maps and plugin management functions\n const value = {\n ...componentMaps,\n registerPlugin,\n unregisterPlugin\n };\n \n return (\n <ThPluginContext.Provider value={ value }>\n { children }\n </ThPluginContext.Provider>\n );\n};","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n ThSettingsContainerKeys, \n ThSpacingSettingsKeys \n} from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulSpacingGroup = () => {\n const RSPrefs = usePreferences();\n const { spacingSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n \n const setSpacingContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.spacing));\n }, [dispatch]);\n\n return (\n <>\n <StatefulGroupWrapper \n heading={ Locale.reader.settings.spacing.title }\n moreLabel={ Locale.reader.settings.spacing.advanced.trigger }\n moreTooltip={ Locale.reader.settings.spacing.advanced.tooltip }\n onPressMore={ setSpacingContainer }\n componentsMap={ spacingSettingsComponentsMap }\n prefs={ RSPrefs.settings.spacing }\n defaultPrefs={ {\n main: defaultSpacingSettingsMain, \n subPanel: defaultSpacingSettingsSubpanel\n }}\n />\n </>\n );\n}\n\nexport const StatefulSpacingGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.spacing?.subPanel as ThSpacingSettingsKeys[] | null | undefined || defaultSpacingSettingsSubpanel;\n const { spacingSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThSpacingSettingsKeys) => {\n const match = spacingSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Setting key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","import * as React from \"react\";\nconst SvgFormatAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignLeft;","import * as React from \"react\";\nconst SvgFormatAlignRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignRight;","import * as React from \"react\";\nconst SvgFormatAlignJustify = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z\" /></svg>;\nexport default SvgFormatAlignJustify;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThTextAlignOptions } from \"@/preferences/models/enums\";\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\nimport { TextAlignment } from \"@readium/navigator\";\n\nimport BookIcon from \"./assets/icons/book.svg\";\nimport LeftAlignIcon from \"./assets/icons/format_align_left.svg\";\nimport RightAlignIcon from \"./assets/icons/format_align_right.svg\";\nimport JustifyIcon from \"./assets/icons/format_align_justify.svg\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextAlign, setHyphens } from \"@/lib/settingsReducer\";\n\nexport const StatefulTextAlign = ({ standalone = true }: StatefulSettingsItemProps) => {\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: string) => {\n const textAlign: TextAlignment | null = value === ThTextAlignOptions.publisher \n ? null \n : value === ThTextAlignOptions.start \n ? TextAlignment.start \n : TextAlignment.justify;\n \n const currentHyphens = getSetting(\"hyphens\") as boolean | undefined | null;\n \n const hyphens = textAlign === null \n ? null \n : (currentHyphens ?? textAlign === TextAlignment.justify);\n \n await submitPreferences({\n textAlign: textAlign,\n hyphens: hyphens\n });\n \n const textAlignSetting = getSetting(\"textAlign\") as TextAlignment | null;\n const textAlignValue = textAlignSetting === null ? ThTextAlignOptions.publisher : textAlignSetting as unknown as ThTextAlignOptions;\n \n dispatch(setTextAlign(textAlignValue));\n dispatch(setHyphens(getSetting(\"hyphens\")));\n }, [getSetting, submitPreferences, dispatch]);\n\n return (\n <>\n <StatefulRadioGroup \n standalone={ standalone } \n label={ Locale.reader.settings.align.title }\n orientation=\"horizontal\" \n value={ textAlign } \n onChange={ async (val: string) => await updatePreference(val) }\n items={[\n {\n icon: BookIcon,\n label: Locale.reader.settings.align.publisher, \n value: ThTextAlignOptions.publisher \n },\n {\n icon: isRTL ? RightAlignIcon : LeftAlignIcon,\n label: isRTL ? Locale.reader.settings.align.right : Locale.reader.settings.align.left, \n value: ThTextAlignOptions.start \n },\n {\n icon: JustifyIcon,\n label: Locale.reader.settings.align.justify, \n value: ThTextAlignOptions.justify \n }\n ]}\n />\n </>\n );\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n ThSettingsContainerKeys, \n ThTextSettingsKeys \n} from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulGroupWrapper } from \"../../Settings/StatefulGroupWrapper\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"../../Plugins/PluginProvider\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setSettingsContainer } from \"@/lib/readerReducer\";\n\nexport const StatefulTextGroup = () => {\n const RSPrefs = usePreferences();\n const { textSettingsComponentsMap } = usePlugins();\n const dispatch = useAppDispatch();\n\n const setTextContainer = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.text));\n }, [dispatch]);\n\n return(\n <>\n <StatefulGroupWrapper \n heading={ Locale.reader.settings.text.title }\n moreLabel={ Locale.reader.settings.text.advanced.trigger }\n moreTooltip={ Locale.reader.settings.text.advanced.tooltip }\n onPressMore={ setTextContainer }\n componentsMap={ textSettingsComponentsMap }\n prefs={ RSPrefs.settings.text }\n defaultPrefs={ {\n main: defaultTextSettingsMain, \n subPanel: defaultTextSettingsSubpanel\n }}\n />\n </>\n )\n}\n\nexport const StatefulTextGroupContainer = () => {\n const RSPrefs = usePreferences();\n const displayOrder = RSPrefs.settings.text?.subPanel as ThTextSettingsKeys[] | null | undefined || defaultTextSettingsSubpanel;\n const { textSettingsComponentsMap } = usePlugins();\n\n return(\n <>\n { displayOrder.map((key: ThTextSettingsKeys) => {\n const match = textSettingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } standalone={ true } />;\n }) }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulSwitch } from \"../../Settings/StatefulSwitch\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setTextNormalization } from \"@/lib/settingsReducer\";\n\n// TMP Component that is not meant to be implemented AS-IS, for testing purposes\nexport const StatefulTextNormalize = ({ standalone = true }: StatefulSettingsItemProps) => {\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: boolean) => {\n await submitPreferences({ textNormalization: value });\n\n dispatch(setTextNormalization(getSetting(\"textNormalization\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n return(\n <>\n <StatefulSwitch \n standalone={ standalone }\n heading={ Locale.reader.settings.normalizeText.title }\n label={ Locale.reader.settings.normalizeText.label }\n onChange={ async (isSelected: boolean) => await updatePreference(isSelected) }\n isSelected={ textNormalization ?? false }\n />\n </>\n )\n}","import * as React from \"react\";\nconst SvgCheck = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\" /></svg>;\nexport default SvgCheck;","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ThemeKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport CheckIcon from \"./assets/icons/check.svg\";\n\nimport { ThActionsKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport { StatefulRadioGroup } from \"../../Settings/StatefulRadioGroup\";\nimport { Radio } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTheme } from \"@/lib/themeReducer\";\n\nimport classNames from \"classnames\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\n\nexport const StatefulTheme = ({ mapArrowNav }: { mapArrowNav?: number }) => {\n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const radioGroupRef = useRef<HTMLDivElement | null>(null);\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n const themeArray = isFXL ? fxlThemeKeys : reflowThemeKeys;\n\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n\n const themeItems = useRef<(ThemeKeyType | \"auto\")[]>(\n themeArray.filter((theme: ThemeKeyType | \"auto\") => {\n if (theme === \"auto\") {\n return RSPrefs.theming.themes.systemThemes !== undefined && \n Object.values(RSPrefs.theming.themes.systemThemes).every(t => \n themeArray.includes(t)\n );\n }\n return true;\n })\n );\n\n const dispatch = useAppDispatch();\n\n const { submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: ThemeKeyType | \"auto\") => {\n const themeProps = buildThemeObject<typeof value>({\n theme: value,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme\n })\n await submitPreferences(themeProps);\n\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: value\n }));\n }, [isFXL, RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, submitPreferences, dispatch, colorScheme]);\n\n // It’s easier to inline styles from preferences for these\n // than spamming the entire app with all custom properties right now\n const doStyles = useCallback((t: ThemeKeyType | \"auto\") => {\n // For some reason Typescript will just refuse to create dts files\n // for the packages if we set it to CSSProperties…\n let cssProps: any = {\n boxSizing: \"border-box\",\n color: \"#999999\"\n };\n\n if (t === \"auto\") {\n if (RSPrefs.theming.themes.systemThemes !== undefined) {\n cssProps.background = isRTL \n ? `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 100%)` \n : `linear-gradient(148deg, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].background } 0%, ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.dark].background } 48%)`;\n cssProps.color = \"#ffffff\";\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[RSPrefs.theming.themes.systemThemes.light].subdue }`;\n } else {\n cssProps.display = \"none\";\n }\n } else {\n cssProps.background = RSPrefs.theming.themes.keys[t].background;\n cssProps.color = RSPrefs.theming.themes.keys[t].text;\n cssProps.border = `1px solid ${ RSPrefs.theming.themes.keys[t].subdue }`;\n };\n \n return cssProps;\n }, [RSPrefs.theming.themes.keys, RSPrefs.theming.themes.systemThemes, isRTL]);\n\n // mapArrowNav is the number of columns. This assumption \n // should be safe since even in vertical-writing, \n // the layout should be horizontal (?)\n const handleKeyboardNav = async (e: React.KeyboardEvent) => {\n \n if (mapArrowNav && !isNaN(mapArrowNav)) {\n const findNextVisualTheme = async (perRow: number) => {\n const currentIdx = themeItems.current.findIndex((val) => val === theme);\n const nextIdx = currentIdx + perRow;\n if (nextIdx >= 0 && nextIdx < themeItems.current.length) {\n await updatePreference(themeItems.current[nextIdx]);\n\n // Focusing here instead of useEffect on theme change so that \n // it doesn’t steal focus when themes is not the first radio group in the sheet\n if (radioGroupRef.current) {\n const themeToFocus = radioGroupRef.current.querySelector(`#${themeItems.current[nextIdx]}`) as HTMLElement;\n if (themeToFocus) themeToFocus.focus();\n }\n }\n };\n\n switch(e.code) {\n case \"Escape\":\n dispatch(setActionOpen({ \n key: ThActionsKeys.settings,\n isOpen: false \n })); \n break;\n case \"ArrowUp\":\n e.preventDefault();\n await findNextVisualTheme(-mapArrowNav);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n await findNextVisualTheme(mapArrowNav);\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(1) : await findNextVisualTheme(-1);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n isRTL ? await findNextVisualTheme(-1) : await findNextVisualTheme(1);\n break;\n default:\n break;\n }\n }\n };\n\n // Edge case where the value stored is auto, but the array doesn’t have it\n useEffect(() => {\n if (theme === \"auto\" && !themeItems.current.includes(theme)) {\n updatePreference(themeItems.current[0]);\n }\n }, [theme, updatePreference]);\n\n return (\n <>\n <StatefulRadioGroup\n ref={ radioGroupRef }\n standalone={ true }\n label={ Locale.reader.settings.themes.title }\n value={ theme }\n onChange={ async (val) => await updatePreference(val as ThemeKeyType) }\n >\n <div className={ classNames(settingsStyles.readerSettingsRadioWrapper, settingsStyles.readerSettingsThemesWrapper) }>\n { themeItems.current.map(( t ) => \n <Radio\n className={ classNames(\n settingsStyles.readerSettingsRadio, \n settingsStyles.readerSettingsThemeRadio\n ) }\n value={ t }\n id={ t }\n key={ t }\n style={ doStyles(t) }\n { ...(mapArrowNav && !isNaN(mapArrowNav) ? {\n onKeyDown: (async (e: React.KeyboardEvent) => await handleKeyboardNav(e))\n } : {}) }\n >\n <span>\n { t in Locale.reader.settings.themes \n ? Locale.reader.settings.themes[t as keyof typeof Locale.reader.settings.themes]\n : t\n } \n { t === theme ? <CheckIcon aria-hidden=\"true\" focusable=\"false\" /> : <></> }\n </span>\n </Radio>\n ) }\n </div>\n </StatefulRadioGroup>\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport { defaultWordSpacing, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { StatefulSettingsItemProps } from \"../../Settings/models/settings\";\n\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setPublisherStyles, setWordSpacing } from \"@/lib/settingsReducer\";\n\nexport const StatefulWordSpacing = ({ standalone = true }: StatefulSettingsItemProps) => {\n const RSPrefs = usePreferences();\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const wordSpacingRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.variant ?? defaultWordSpacing.variant,\n range: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.range ?? defaultWordSpacing.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.wordSpacing]?.step ?? defaultWordSpacing.step\n };\n const dispatch = useAppDispatch();\n\n const { getSetting, submitPreferences } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({\n wordSpacing: value\n });\n\n dispatch(setWordSpacing(getSetting(\"wordSpacing\")));\n dispatch(setPublisherStyles(false));\n }, [submitPreferences, getSetting, dispatch]);\n\n return (\n <>\n { wordSpacingRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField \n standalone={ standalone }\n label={ Locale.reader.settings.wordSpacing.title }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n steppers={{\n decrementLabel: Locale.reader.settings.wordSpacing.decrease,\n incrementLabel: Locale.reader.settings.wordSpacing.increase\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ standalone }\n label={ Locale.reader.settings.wordSpacing.title }\n defaultValue={ 0 } \n value={ wordSpacing || 0 } \n onChange={ async(value) => await updatePreference(value as number) } \n range={ wordSpacingRangeConfig.range }\n step={ wordSpacingRangeConfig.step }\n formatOptions={{ style: \"percent\" }}\n /> \n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgTextDecrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm384-16v-80h320v80H600Z\" /></svg>;\nexport default SvgTextDecrease;","import * as React from \"react\";\nconst SvgTextIncrease = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"m40-200 210-560h100l210 560h-96l-51-143H187l-51 143H40Zm176-224h168l-82-232h-4l-82 232Zm504 104v-120H600v-80h120v-120h80v120h120v80H800v120h-80Z\" /></svg>;\nexport default SvgTextIncrease;","import * as React from \"react\";\nconst SvgZoomOut = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400ZM280-540v-80h200v80H280Z\" /></svg>;\nexport default SvgZoomOut;","import * as React from \"react\";\nconst SvgZoomIn = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Zm-40-60v-80h-80v-80h80v-80h80v80h80v80h-80v80h-80Z\" /></svg>;\nexport default SvgZoomIn;","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport { defaultFontSize, ThSettingsKeys, ThSettingsRangeVariant } from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport Decrease from \"./assets/icons/text_decrease.svg\";\nimport Increase from \"./assets/icons/text_increase.svg\";\nimport ZoomOut from \"./assets/icons/zoom_out.svg\";\nimport ZoomIn from \"./assets/icons/zoom_in.svg\";\n\nimport { StatefulSlider } from \"../../Settings/StatefulSlider\";\nimport { StatefulNumberField } from \"../../Settings/StatefulNumberField\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setFontSize } from \"@/lib/settingsReducer\";\n\nexport const StatefulZoom = () => {\n const RSPrefs = usePreferences();\n const fontSize = useAppSelector((state) => state.settings.fontSize);\n const isFXL = useAppSelector((state) => state.publication.isFXL);\n const dispatch = useAppDispatch();\n \n const { \n getSetting, \n submitPreferences,\n preferencesEditor \n } = useEpubNavigator();\n\n const updatePreference = useCallback(async (value: number) => {\n await submitPreferences({ fontSize: value });\n dispatch(setFontSize(getSetting(\"fontSize\")));\n }, [submitPreferences, getSetting, dispatch]);\n\n const getEffectiveRange = (preferred: [number, number] | undefined, fallback: [number, number], supportedRange: [number, number] | undefined): [number, number] => {\n if (!supportedRange) {\n return preferred || fallback\n }\n if (preferred && isRangeWithinSupportedRange(preferred, supportedRange)) {\n return preferred;\n }\n if (fallback && isRangeWithinSupportedRange(fallback, supportedRange)) {\n return fallback;\n }\n return supportedRange;\n }\n \n const isRangeWithinSupportedRange = (range: [number, number], supportedRange: [number, number]): boolean => {\n return Math.min(range[0], range[1]) >= Math.min(supportedRange[0], supportedRange[1]) &&\n Math.max(range[0], range[1]) <= Math.max(supportedRange[0], supportedRange[1]);\n }\n\n const zoomRangeConfig = {\n variant: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.variant || defaultFontSize.variant,\n range: preferencesEditor?.fontSize.supportedRange\n ? getEffectiveRange(RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range, defaultFontSize.range, preferencesEditor?.fontSize.supportedRange)\n : RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.range || defaultFontSize.range,\n step: RSPrefs.settings.keys?.[ThSettingsKeys.zoom]?.step || preferencesEditor?.fontSize.step || defaultFontSize.step\n }\n\n return (\n <>\n { zoomRangeConfig.variant === ThSettingsRangeVariant.numberField \n ? <StatefulNumberField\n standalone={ true}\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value) } \n label={ isFXL ? Locale.reader.settings.zoom.title : Locale.reader.settings.fontSize.title }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n steppers={{\n decrementIcon: isFXL ? ZoomOut : Decrease,\n decrementLabel: isFXL ? Locale.reader.settings.zoom.decrease : Locale.reader.settings.fontSize.decrease,\n incrementIcon: isFXL ? ZoomIn : Increase,\n incrementLabel: isFXL ? Locale.reader.settings.zoom.increase : Locale.reader.settings.fontSize.increase\n }}\n formatOptions={{ style: \"percent\" }} \n isWheelDisabled={ true }\n isVirtualKeyboardDisabled={ true }\n />\n : <StatefulSlider\n standalone={ true }\n defaultValue={ 1 } \n value={ fontSize } \n onChange={ async(value) => await updatePreference(value as number) } \n label={ isFXL ? Locale.reader.settings.zoom.title : Locale.reader.settings.fontSize.title }\n range={ zoomRangeConfig.range }\n step={ zoomRangeConfig.step }\n formatOptions={{ style: \"percent\" }} \n />\n } \n </>\n );\n};","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { ThActionsDockedPref } from \"@/preferences\";\n\nimport { DockStateObject } from \"@/lib/actionsReducer\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\n// TODO: Responsive.\n// When resizing the window, all widths should be recalculated.\n// There is no guarantee that the panel group is the same size as the window,\n// so we have to rewrite this hook to observe the panel group, and push the new\n// widths to the StatefulDockingWrapper so that it can update panels.\n// Note that the StatefulDockingWrapper cannot pass PanelGroup as a ref, \n// it requires using a utility method: getPanelGroupElement(id)\n// See https://github.com/bvaughn/react-resizable-panels/tree/main/packages/react-resizable-panels#can-a-attach-a-ref-to-the-dom-elements\nexport const useResizablePanel = (panel: DockStateObject) => {\n const RSPrefs = usePreferences();\n const defaultWidth = RSPrefs.theming.layout.defaults.dockingWidth;\n const [pref, setPref] = useState<ThActionsDockedPref | null>(\n panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null\n );\n\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const previouslyCollapsed = usePrevious(panel.collapsed);\n\n const previousWidth = actions.getDockedWidth(panel.actionKey) || null;\n const width = pref?.width || defaultWidth;\n const minWidth = pref?.minWidth && pref.minWidth < width \n ? pref.minWidth \n : defaultWidth < width \n ? defaultWidth\n : width;\n const maxWidth = pref?.maxWidth && pref.maxWidth > width \n ? pref.maxWidth \n : defaultWidth > width\n ? defaultWidth\n : width;\n\n const isPopulated = () => {\n return panel.active && actions.isOpen(panel.actionKey);\n };\n\n const isCollapsed = () => {\n return panel.collapsed;\n }\n\n const forceExpand = () => {\n return !!(isPopulated() && previouslyCollapsed && !panel.collapsed);\n }\n\n const currentKey = () => {\n return panel.actionKey;\n };\n\n const isResizable = () => {\n return isPopulated() ? Math.round(width) > Math.round(minWidth) && Math.round(width) < Math.round(maxWidth) : false;\n };\n\n const hasDragIndicator = () => {\n return pref?.dragIndicator || false;\n };\n\n const getWidth = useCallback(() => {\n return previousWidth \n ? Math.round((previousWidth / window.innerWidth) * 100) \n : Math.round((width / window.innerWidth) * 100);\n }, [previousWidth, width]);\n\n const getMinWidth = useCallback(() => {\n return Math.round((minWidth / window.innerWidth) * 100);\n }, [minWidth]);\n\n const getMaxWidth = useCallback(() => {\n return Math.round((maxWidth / window.innerWidth) * 100);\n }, [maxWidth]);\n\n const getCurrentPxWidth = useCallback((percentage: number) => {\n let current = Math.round((percentage * window.innerWidth) / 100);\n \n if (current < minWidth) {\n current = minWidth;\n }\n \n if (current > maxWidth) {\n current = maxWidth;\n }\n \n return current;\n }, [minWidth, maxWidth]);\n\n // When the docked action changes, we need to update its preferences \n useEffect(() => {\n setPref(panel.actionKey ? RSPrefs.actions.keys[panel.actionKey as keyof typeof RSPrefs.actions.keys].docked || null : null);\n }, [panel.actionKey, RSPrefs]);\n\n return {\n currentKey, \n isPopulated, \n isCollapsed, \n forceExpand, \n isResizable,\n hasDragIndicator, \n getWidth,\n getMinWidth,\n getMaxWidth,\n getCurrentPxWidth\n }\n}","\"use client\";\n\nimport { ReactNode, useCallback, useEffect, useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\n\nimport { ImperativePanelHandle, Panel, PanelGroup, PanelResizeHandle } from \"react-resizable-panels\";\n\nimport { ThDockingTypes, ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useResizablePanel } from \"./hooks/useResizablePanel\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { activateDockPanel, collapseDockPanel, deactivateDockPanel, expandDockPanel, setDockPanelWidth } from \"@/lib/actionsReducer\";\n\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport classNames from \"classnames\";\nimport parseTemplate from \"json-templates\";\n\nexport interface DockPanelSizes {\n width: number;\n minWidth: number;\n maxWidth: number;\n getCurrentPxWidth: (percentage: number) => number;\n}\n\nconst DockHandle = ({\n flow,\n isResizable,\n isPopulated, \n hasDragIndicator\n}: { \n flow: ThDockingKeys.start | ThDockingKeys.end;\n isResizable: boolean;\n isPopulated: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const handleID = `${ flow }-resize-handle`;\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabLeft : dockingStyles.dockResizeHandleGrabRight;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? dockingStyles.dockResizeHandleGrabRight : dockingStyles.dockResizeHandleGrabLeft;\n }\n }, [flow, direction]);\n\n return(\n <>\n <PanelResizeHandle \n id={ handleID } \n className={ dockingStyles.dockResizeHandle }\n disabled={ !isResizable }\n tabIndex={ isPopulated ? 0 : -1 }\n >\n { isResizable && hasDragIndicator && \n <div className={ classNames(dockingStyles.dockResizeHandleGrab, classFromFlow()) }></div> \n }\n </PanelResizeHandle>\n </>\n )\n};\n\nconst DockPanel = ({\n actionKey,\n flow,\n sizes,\n isResizable,\n isPopulated,\n isCollapsed,\n forceExpand,\n hasDragIndicator \n}: {\n actionKey: ActionsStateKeys | null;\n flow: ThDockingKeys.start | ThDockingKeys.end;\n sizes: DockPanelSizes;\n isResizable: boolean;\n isPopulated: boolean;\n isCollapsed: boolean;\n forceExpand: boolean;\n hasDragIndicator?: boolean;\n}) => {\n const panelRef = useRef<ImperativePanelHandle>(null);\n const direction = useAppSelector(state => state.reader.direction);\n const dispatch = useAppDispatch();\n\n const dockClassName = flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr ? \"right-dock\" : \"left-dock\";\n\n const makeDockLabel = useCallback(() => { \n let label = \"\";\n if (flow === ThDockingKeys.end && direction === ThLayoutDirection.ltr) {\n label += Locale.reader.app.docking.dockingRight;\n } else {\n label += Locale.reader.app.docking.dockingLeft\n }\n\n if (actionKey) {\n if (!isPopulated) {\n const jsonTemplate = parseTemplate(Locale.reader.app.docking.dockingClosed);\n // @ts-ignore\n label += ` – ${ jsonTemplate({ action: Locale.reader[actionKey].heading }) }`\n } else if (isCollapsed) {\n const jsonTemplate = parseTemplate(Locale.reader.app.docking.dockingCollapsed);\n // @ts-ignore\n label += ` – ${ jsonTemplate({ action: Locale.reader[actionKey].heading }) }`\n }\n } else {\n label += ` – ${ Locale.reader.app.docking.dockingEmpty }`\n }\n\n return label;\n }, [flow, direction, isPopulated, isCollapsed, actionKey]);\n\n const collapsePanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.collapse();\n dispatch(collapseDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n const expandPanel = useCallback(() => {\n if (panelRef.current) {\n panelRef.current.expand();\n dispatch(expandDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n dispatch(activateDockPanel(flow));\n\n return () => {\n dispatch(deactivateDockPanel(flow));\n }\n }, [dispatch, flow]);\n\n useEffect(() => {\n isPopulated || forceExpand ? expandPanel() : collapsePanel();\n }, [isPopulated, forceExpand, collapsePanel, expandPanel]);\n\n return(\n <>\n { flow === ThDockingKeys.end &&\n <DockHandle \n flow={ ThDockingKeys.end } \n isResizable={ isResizable } \n isPopulated={ isPopulated }\n hasDragIndicator={ hasDragIndicator } \n /> \n } \n <Panel \n id={ `${ flow }-panel` } \n order={ flow === ThDockingKeys.end ? 3 : 1 } \n collapsible={ true }\n collapsedSize={ 0 }\n ref={ panelRef }\n defaultSize={ isPopulated ? sizes.width : 0 } \n minSize={ sizes.minWidth } \n maxSize={ sizes.maxWidth }\n onCollapse={ collapsePanel }\n onExpand={ expandPanel }\n onResize={ (size: number) => size !== 0 && dispatch(setDockPanelWidth({\n key: flow,\n width: sizes.getCurrentPxWidth(size)\n }))}\n inert={ isCollapsed } \n >\n <div \n id={ flow } \n aria-label={ makeDockLabel() }\n className={ classNames(dockingStyles.dockPanelContainer, dockClassName) }\n ></div>\n </Panel>\n { flow === ThDockingKeys.start && \n <DockHandle \n flow={ ThDockingKeys.start } \n isResizable={ isResizable } \n isPopulated={ isPopulated } \n hasDragIndicator={ hasDragIndicator } \n /> \n } \n </>\n );\n};\n\nexport const StatefulDockingWrapper = ({ \n children\n}: { \n children: ReactNode; \n}) => {\n const RSPrefs = usePreferences();\n const dockingStart = useAppSelector(state => state.actions.dock[ThDockingKeys.start]);\n const dockingEnd = useAppSelector(state => state.actions.dock[ThDockingKeys.end])\n const startPanel = useResizablePanel(dockingStart);\n const endPanel = useResizablePanel(dockingEnd);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n if (!RSPrefs.docking.dock) {\n return(\n <>\n { children }\n </>\n )\n } else {\n const dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none\n });\n\n const dockConfig = breakpoint && dockingMap[breakpoint] || ThDockingTypes.both;\n\n return (\n <>\n <PanelGroup direction=\"horizontal\">\n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.start) \n && <DockPanel \n actionKey={ startPanel.currentKey() }\n flow={ ThDockingKeys.start } \n sizes={{\n width: startPanel.getWidth(),\n minWidth: startPanel.getMinWidth(),\n maxWidth: startPanel.getMaxWidth(),\n getCurrentPxWidth: startPanel.getCurrentPxWidth\n }} \n isResizable={ startPanel.isResizable() }\n isPopulated={ startPanel.isPopulated() }\n isCollapsed={ startPanel.isCollapsed() } \n forceExpand={ startPanel.forceExpand() }\n hasDragIndicator={ startPanel.hasDragIndicator() }\n />\n }\n \n <Panel id=\"main-panel\" order={ 2 }>\n { children }\n </Panel>\n \n { \n (dockConfig === ThDockingTypes.both || dockConfig === ThDockingTypes.end)\n && <DockPanel \n actionKey={ endPanel.currentKey() }\n flow={ ThDockingKeys.end } \n sizes={{\n width: endPanel.getWidth(),\n minWidth: endPanel.getMinWidth(),\n maxWidth: endPanel.getMaxWidth(),\n getCurrentPxWidth: endPanel.getCurrentPxWidth\n }} \n isResizable={ endPanel.isResizable() }\n isPopulated={ endPanel.isPopulated() }\n isCollapsed={ endPanel.isCollapsed() } \n forceExpand={ endPanel.forceExpand() }\n hasDragIndicator={ endPanel.hasDragIndicator() }\n />\n }\n </PanelGroup>\n </>\n )\n }\n}","import * as React from \"react\";\nconst SvgMoreVert = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M480-160q-33 0-56.5-23.5T400-240q0-33 23.5-56.5T480-320q33 0 56.5 23.5T560-240q0 33-23.5 56.5T480-160Zm0-240q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm0-240q-33 0-56.5-23.5T400-720q0-33 23.5-56.5T480-800q33 0 56.5 23.5T560-720q0 33-23.5 56.5T480-640Z\" /></svg>;\nexport default SvgMoreVert;","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport { TooltipProps } from \"react-aria-components\";\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport { ThActionButton, ThActionButtonProps } from \"@/core/Components/Buttons/ThActionButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement, isKeyboardTriggered } from \"@/core/Helpers/focusUtilities\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulActionIconProps extends ThActionButtonProps {\n visibility?: ThCollapsibilityVisibility;\n placement?: TooltipProps[\"placement\"];\n tooltipLabel?: string;\n}\n\nexport const StatefulActionIcon = ({\n visibility,\n placement,\n tooltipLabel,\n children,\n ...props\n}: StatefulActionIconProps) => {\n const RSPrefs = usePreferences();\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const dispatch = useAppDispatch();\n\n const handleClassNameFromState = () => {\n let className = \"\";\n \n switch(visibility) {\n case ThCollapsibilityVisibility.always:\n className = readerSharedUI.alwaysVisible;\n break;\n case ThCollapsibilityVisibility.partially:\n className = readerSharedUI.partiallyVisible;\n break;\n case ThCollapsibilityVisibility.overflow:\n default:\n break;\n }\n\n return className\n };\n\n const defaultOnPressFunc = () => {\n dispatch(setImmersive(false));\n };\n\n const handleImmersive = (event: React.FocusEvent) => {\n // Check whether the focus was triggered by keyboard…\n // We don’t have access to type/modality, unlike onPress\n if (isKeyboardTriggered(event.target)) {\n dispatch(setImmersive(false));\n }\n };\n\n const blurOnEsc = (event: React.KeyboardEvent) => {\n // TODO: handle Tooltip cos first time you press esc, it’s the tooltip that is closed.\n if (triggerRef.current && isActiveElement(triggerRef.current) && event.code === \"Escape\") {\n triggerRef.current.blur();\n }\n };\n\n return (\n <ThActionButton\n ref={ triggerRef }\n className={ classNames(readerSharedUI.icon, handleClassNameFromState(), props.className) } \n onPress={ props.onPress || defaultOnPressFunc }\n onKeyDown={ blurOnEsc } \n onFocus={ handleImmersive }\n compounds={ tooltipLabel ? {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip,\n placement: placement,\n offset: RSPrefs.theming.icon.tooltipOffset || 0\n },\n label: tooltipLabel\n } : undefined }\n { ...Object.fromEntries(Object.entries(props).filter(([key]) => key !== \"className\")) }\n >\n { children }\n </ThActionButton>\n )\n};","\"use client\";\n\nimport React, { ReactNode, RefObject } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport overflowMenuStyles from \"./assets/styles/overflowMenu.module.css\";\n\nimport MenuIcon from \"./assets/icons/more_vert.svg\";\n\nimport { ThCollapsibilityVisibility } from \"@/core/Components/Actions/hooks/useCollapsibility\";\nimport { ThMenu } from \"@/core/Components/Menu/ThMenu\";\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionIcon } from \"./Triggers/StatefulActionIcon\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setOverflow } from \"@/lib/actionsReducer\";\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulOverflowMenuProps {\n id: string;\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n triggerRef: RefObject<HTMLElement | null>;\n className?: string;\n children?: ReactNode;\n}\n\nexport const StatefulOverflowMenu = ({ \n id,\n className, \n items,\n triggerRef\n}: StatefulOverflowMenuProps) => {\n const dispatch = useAppDispatch();\n\n const toggleMenuState = (value: boolean) => {\n dispatch(setOverflow({\n key: id,\n isOpen: value\n }));\n }\n\n if (items.length > 0) {\n return (\n <>\n <ThMenu \n id={ id }\n triggerRef={ triggerRef }\n selectionMode=\"none\" \n className={ overflowMenuStyles.overflowMenu }\n dependencies={ [\"Trigger\"] }\n items={ items }\n compounds={{\n menuTrigger: {\n onOpenChange: (val: boolean) => toggleMenuState(val)\n },\n popover: {\n placement: \"bottom\",\n className: overflowMenuStyles.overflowPopover\n },\n button: (\n <StatefulActionIcon\n className={ classNames(className, overflowMenuStyles.activeButton) }\n aria-label={ Locale.reader.overflowMenu.active.trigger }\n placement=\"bottom\"\n tooltipLabel={ Locale.reader.overflowMenu.active.tooltip }\n visibility={ ThCollapsibilityVisibility.always }\n >\n <MenuIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n ),\n }}\n />\n </>\n )\n }\n}","\"use client\";\n\nimport { useRef } from \"react\";\n\nimport { ThActionsKeys, ThDockingKeys } from \"@/preferences\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThCollapsibleActionsBar, ThCollapsibleActionsBarProps } from \"@/core/Components/Actions/ThCollapsibleActionsBar\";\nimport { StatefulOverflowMenu } from \"./StatefulOverflowMenu\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport interface StatefulCollapsibleActionsBarProps extends ThCollapsibleActionsBarProps {\n items: ThActionEntry<string | ThActionsKeys | ThDockingKeys>[];\n overflowMenuClassName?: string;\n}\n\nexport const StatefulCollapsibleActionsBar = ({\n id, \n items,\n overflowMenuClassName,\n ...props\n}: StatefulCollapsibleActionsBarProps) => {\n const ref = useRef<HTMLDivElement | null>(null);\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n\n return (\n <>\n <ThCollapsibleActionsBar \n ref={ ref }\n id={ id }\n items={ items }\n breakpoint={ breakpoint }\n compounds={{\n menu: (<StatefulOverflowMenu \n id={ id }\n triggerRef={ ref }\n className={ overflowMenuClassName } \n items={ [] }\n />) }}\n { ...props }\n />\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport { ActionKeyType, usePreferenceKeys } from \"@/preferences\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport readerHeaderStyles from \"./assets/styles/readerHeader.module.css\";\nimport overflowMenuStyles from \"./Actions/assets/styles/overflowMenu.module.css\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThHeader } from \"@/core/Components/Reader/ThHeader\";\nimport { ThRunningHead } from \"@/core/Components/Reader/ThRunningHead\";\nimport { ThInteractiveOverlay } from \"../core/Components/Reader/ThInteractiveOverlay\";\nimport { StatefulCollapsibleActionsBar } from \"./Actions/StatefulCollapsibleActionsBar\";\n\nimport { usePlugins } from \"./Plugins/PluginProvider\";\nimport { usePreferences } from \"@/preferences/hooks\";\nimport { useActions } from \"@/core/Components\";\nimport { useFocusWithin } from \"react-aria\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { ThLayoutUI } from \"@/preferences/models/enums\";\n\nexport const StatefulReaderHeader = ({\n layout\n}: {\n layout: ThLayoutUI;\n}) => {\n const headerRef = useRef<HTMLDivElement>(null);\n const { reflowActionKeys, fxlActionKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { actionsComponentsMap } = usePlugins();\n \n const actionsMap = useAppSelector(state => state.actions.keys);\n const overflowMap = useAppSelector(state => state.actions.overflow);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = useAppSelector(state => state.settings.scroll);\n const runningHead = useAppSelector(state => state.publication.runningHead);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n const hasScrollAffordance = useAppSelector(state => state.reader.hasScrollAffordance);\n\n const actions = useActions({ ...actionsMap, ...overflowMap });\n const dispatch = useAppDispatch();\n\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin() {\n dispatch(setHovering(true));\n },\n onBlurWithin() { \n if (actions.everyOpenDocked()) {\n dispatch(setHovering(false));\n }\n }\n });\n\n const setHover = () => {\n if (!hasScrollAffordance && actions.everyOpenDocked()) {\n dispatch(setHovering(true));\n }\n };\n\n const removeHover = () => {\n if (!hasScrollAffordance && actions.everyOpenDocked()) {\n dispatch(setHovering(false));\n }\n };\n\n const listActionItems = useCallback(() => {\n const actionKeys = isFXL? fxlActionKeys : reflowActionKeys;\n const actionsItems: ThActionEntry<ActionKeyType>[] = [];\n\n if (actionsComponentsMap && Object.keys(actionsComponentsMap).length > 0) {\n actionKeys.forEach((key) => { \n if (actionsComponentsMap[key]) {\n actionsItems.push({\n Trigger: actionsComponentsMap[key].Trigger,\n Target: actionsComponentsMap[key].Target,\n key: key\n });\n } else {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n }\n });\n }\n \n return actionsItems;\n }, [isFXL, fxlActionKeys, reflowActionKeys, actionsComponentsMap]);\n\n useEffect(() => {\n // Blur any focused element when entering immersive mode\n if (isImmersive) {\n const focusElement = document.activeElement;\n if (focusElement && headerRef.current?.contains(focusElement)) {\n (focusElement as HTMLElement).blur();\n }\n }\n }, [isImmersive]);\n\n return (\n <>\n <ThInteractiveOverlay \n id=\"reader-header-overlay\"\n className=\"bar-overlay\"\n isActive={ layout === ThLayoutUI.layered && isImmersive && !isHovering }\n onMouseEnter={ setHover }\n onMouseLeave={ removeHover }\n />\n\n <ThHeader \n ref={ headerRef }\n className={ readerHeaderStyles.header } \n id=\"top-bar\" \n aria-label={ Locale.reader.app.header.label } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n { ...focusWithinProps }\n >\n <ThRunningHead \n label={ runningHead || Locale.reader.app.header.runningHeadFallback } \n syncDocTitle={ true }\n aria-label={ Locale.reader.app.header.runningHead }\n />\n \n <StatefulCollapsibleActionsBar \n id=\"reader-header-overflowMenu\" \n items={ listActionItems() }\n prefs={{ \n ...RSPrefs.actions, \n displayOrder: isFXL \n ? RSPrefs.actions.fxlOrder \n : RSPrefs.actions.reflowOrder \n }}\n className={ readerHeaderStyles.actionsWrapper } \n aria-label={ Locale.reader.app.header.actions } \n overflowMenuClassName={ \n (!isScroll || RSPrefs.affordances.scroll.hintInImmersive) \n ? overflowMenuStyles.hintButton \n : undefined \n }\n />\n </ThHeader>\n </>\n );\n}","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport arrowStyles from \"./assets/styles/readerArrowButton.module.css\";\nimport readerSharedUI from \"./assets/styles/readerSharedUI.module.css\";\n\nimport { PressEvent } from \"react-aria\";\n\nimport { ThNavigationButton, ThNavigationButtonProps } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setArrows } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulReaderArrowButtonProps extends ThNavigationButtonProps {\n direction: \"left\" | \"right\";\n occupySpace: boolean;\n}\n\nexport const StatefulReaderArrowButton = ({\n direction,\n occupySpace,\n className,\n isDisabled,\n onPress,\n ...props\n}: StatefulReaderArrowButtonProps) => {\n const RSPrefs = usePreferences();\n \n const buttonRef = useRef<HTMLButtonElement>(null);\n const isRTL = useAppSelector(state => state.publication.isRTL);\n const hasArrows = useAppSelector(state => state.reader.hasArrows);\n\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n \n const wasScroll = usePrevious(isScroll);\n\n const dispatch = useAppDispatch();\n\n const [isHovering, setIsHovering] = useState(false);\n\n const switchedFromScrollable = () => {\n return wasScroll && !isScroll;\n }\n\n const label = (\n direction === \"right\" && !isRTL || \n direction === \"left\" && isRTL\n ) \n ? Locale.reader.navigation.goForward \n : Locale.reader.navigation.goBackward;\n\n const handleClassNameFromState = () => {\n let className = \"\";\n if (!hasArrows && !switchedFromScrollable()) {\n className = arrowStyles.visuallyHidden;\n }\n return className;\n };\n\n const handleClassNameFromSpaceProp = () => {\n let className = \"\";\n if (occupySpace) {\n className = arrowStyles.viewportLarge;\n }\n return className;\n };\n\n useEffect(() => {\n if ((isDisabled || (!hasArrows && !isHovering)) && isActiveElement(buttonRef.current)) {\n buttonRef.current!.blur();\n }\n });\n\n const blurOnEsc = (event: React.KeyboardEvent) => { \n if (isActiveElement(buttonRef.current) && event.code === \"Escape\") {\n buttonRef.current!.blur();\n }\n };\n\n const handleOnPress = (e: PressEvent, cb: (e: PressEvent) => void) => {\n dispatch(setArrows(false));\n cb(e);\n }\n\n return (\n <>\n <ThNavigationButton \n direction={ direction }\n ref= { buttonRef }\n aria-label={ label }\n onPress={ (e: PressEvent) => onPress && handleOnPress(e, onPress) }\n onHoverChange={ (isHovering: boolean) => setIsHovering(isHovering) } \n onKeyDown={ blurOnEsc }\n className={ classNames(className, handleClassNameFromSpaceProp(), handleClassNameFromState()) }\n isDisabled={ isDisabled }\n preventFocusOnPress={ true }\n { ...props }\n compounds={ {\n tooltipTrigger: {\n delay: RSPrefs.theming.arrow.tooltipDelay,\n closeDelay: RSPrefs.theming.arrow.tooltipDelay\n },\n tooltip: {\n placement: direction === \"left\" ? \"right\" : \"left\",\n className: readerSharedUI.tooltip\n },\n label: label\n } }\n />\n </>\n )\n}","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\nimport progressionStyles from \"./assets/styles/readerProgression.module.css\";\n\nimport { ThProgression } from \"@/core/Components/Reader/ThProgression\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport parseTemplate from \"json-templates\";\n\nexport interface UnstableProgressionObject {\n totalPositions?: number;\n currentPositions?: number[];\n relativeProgression?: number;\n currentChapter?: string;\n totalProgression?: number;\n currentPublication?: string;\n}\n\nexport const StatefulReaderProgression = ({ \n className \n}: { \n className?: string \n}) => {\n const jsonTemplate = parseTemplate(Locale.reader.app.progression.of);\n const progression: UnstableProgressionObject = useAppSelector(state => state.publication.progression);\n\n const [current, setCurrent] = useState(\"\");\n const [reference, setReference] = useState(\"\");\n\n useEffect(() => {\n if (progression.totalPositions && progression.currentPositions) {\n setCurrent(progression.currentPositions.length === 2 ? `${progression.currentPositions[0]}–${progression.currentPositions[1]}` : `${progression.currentPositions}`);\n setReference(`${progression.totalPositions}`);\n } else if (progression.totalProgression !== undefined && progression.currentPublication) {\n setCurrent(`${Math.round(progression.totalProgression * 100)}%`);\n setReference(progression.currentPublication);\n } else if (progression.relativeProgression !== undefined && progression.currentChapter) {\n setCurrent(`${Math.round(progression.relativeProgression * 100)}%`);\n setReference(progression.currentChapter);\n } else {\n setCurrent(\"\");\n setReference(\"\");\n }\n }, [progression])\n\n return (\n <>\n {( current && reference ) \n && <ThProgression \n id={ progressionStyles.current } \n aria-label={ Locale.reader.app.progression.wrapper }\n className={ className }\n >\n { jsonTemplate({ current: current, reference: reference }) }\n </ThProgression>}\n </>\n )\n}","\"use client\";\n\nimport { useRef, KeyboardEvent } from \"react\";\n\nimport { ThPagination, ThPaginationProps } from \"@/core/Components/Reader/ThPagination\";\n\nimport readerPaginationStyles from \"./assets/styles/readerPagination.module.css\";\n \nexport const StatefulPagination = ({\n ref,\n links,\n compounds,\n children,\n ...props\n}: ThPaginationProps) => {\n const previousButtonRef = useRef<HTMLButtonElement>(null);\n const nextButtonRef = useRef<HTMLButtonElement>(null);\n\n const updatedCompounds = {\n ...compounds,\n previousButton: {\n ...compounds?.previousButton,\n ref: previousButtonRef,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n previousButtonRef.current?.blur();\n }\n }\n },\n nextButton: {\n ...compounds?.nextButton,\n ref: nextButtonRef,\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n nextButtonRef.current?.blur();\n }\n }\n }\n };\n\n return (\n <ThPagination \n ref={ ref } \n className={ readerPaginationStyles.pagination }\n links={ links } \n compounds={ updatedCompounds } \n { ...props }\n >\n { children }\n </ThPagination>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useRef } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport readerPaginationStyles from \"./assets/styles/readerPagination.module.css\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\n\nimport { ThFooter } from \"@/core/Components/Reader/ThFooter\";\nimport { StatefulReaderProgression } from \"./StatefulReaderProgression\";\nimport { ThInteractiveOverlay } from \"../core/Components/Reader/ThInteractiveOverlay\";\nimport { StatefulPagination } from \"./StatefulPagination\";\nimport { ThPaginationLinkProps } from \"@/core/Components/Reader/ThPagination\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useFocusWithin } from \"react-aria\";\nimport { ThBreakpoints, ThLayoutUI } from \"@/preferences/models/enums\";\n\nexport const StatefulReaderFooter = ({\n layout\n}: {\n layout: ThLayoutUI;\n}) => {\n const footerRef = useRef<HTMLDivElement>(null);\n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n const hasScrollAffordance = useAppSelector(state => state.reader.hasScrollAffordance);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const timeline = useAppSelector(state => state.publication.unstableTimeline);\n\n const dispatch = useAppDispatch();\n\n const { focusWithinProps } = useFocusWithin({\n onFocusWithin() {\n dispatch(setHovering(true));\n },\n onBlurWithin() {\n dispatch(setHovering(false));\n }\n });\n\n const setHover = () => {\n if (!hasScrollAffordance) {\n dispatch(setHovering(true));\n }\n };\n\n const removeHover = () => {\n if (!hasScrollAffordance) {\n dispatch(setHovering(false));\n }\n };\n\n const { previousLocator, nextLocator, go } = useEpubNavigator();\n\n const updateLinks = useCallback(() => {\n const links: { previous?: ThPaginationLinkProps; next?: ThPaginationLinkProps } = {\n previous: undefined,\n next: undefined\n };\n\n const previous = previousLocator();\n const next = nextLocator();\n\n if (previous) {\n links.previous = {\n node: breakpoint !== ThBreakpoints.compact && breakpoint !== ThBreakpoints.medium ? (\n <>\n <span className=\"sr-only\">{ Locale.reader.navigation.scroll.prevA11yLabel }</span>\n <span className={ readerPaginationStyles.paginationLabel }>{ timeline?.previousItem?.title || previous.title || Locale.reader.navigation.scroll.prevLabel }</span>\n </>\n ) : (\n <>\n <span className={ readerPaginationStyles.paginationLabel }>{ Locale.reader.navigation.scroll.prevLabel }</span>\n </>\n ),\n onPress: () => go(previous, !reducedMotion, () => {})\n }\n }\n\n if (next) {\n links.next = {\n node: breakpoint !== ThBreakpoints.compact && breakpoint !== ThBreakpoints.medium ? (\n <>\n <span className=\"sr-only\">{ Locale.reader.navigation.scroll.nextA11yLabel }</span>\n <span className={ readerPaginationStyles.paginationLabel }>{ timeline?.nextItem?.title || next.title || Locale.reader.navigation.scroll.nextLabel }</span>\n </>\n ) : ( \n <>\n <span className={ readerPaginationStyles.paginationLabel }>{ Locale.reader.navigation.scroll.nextLabel }</span>\n </>\n ),\n onPress: () => go(next, !reducedMotion, () => {})\n }\n }\n\n return links;\n }, [go, previousLocator, nextLocator, timeline, breakpoint, reducedMotion]);\n\n useEffect(() => {\n updateLinks();\n }, [timeline, updateLinks]);\n\n useEffect(() => {\n // Blur any focused element when entering immersive mode\n if (isImmersive) {\n const focusElement = document.activeElement;\n if (focusElement && footerRef.current?.contains(focusElement)) {\n (focusElement as HTMLElement).blur();\n }\n }\n }, [isImmersive]);\n\n return(\n <>\n <ThInteractiveOverlay \n id=\"reader-footer-overlay\"\n className=\"bar-overlay\"\n isActive={ layout === ThLayoutUI.layered && isImmersive && !isHovering }\n onMouseEnter={ setHover }\n onMouseLeave={ removeHover }\n />\n \n <ThFooter \n ref={ footerRef }\n id=\"bottom-bar\" \n aria-label={ Locale.reader.app.footer.label } \n onMouseEnter={ setHover } \n onMouseLeave={ removeHover }\n { ...focusWithinProps }\n >\n { isScroll && !isFXL\n ? <StatefulPagination \n aria-label={ Locale.reader.navigation.scroll.wrapper }\n links={ updateLinks() } \n compounds={ {\n listItem: {\n className: readerPaginationStyles.paginationListItem\n },\n previousButton: {\n className: readerPaginationStyles.previousButton,\n preventFocusOnPress: true\n },\n nextButton: {\n className: readerPaginationStyles.nextButton,\n preventFocusOnPress: true\n }\n } } \n >\n <StatefulReaderProgression className={ readerPaginationStyles.progression } />\n </StatefulPagination> \n : <StatefulReaderProgression /> }\n </ThFooter>\n </>\n )\n}","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { \n defaultFontFamilyOptions, \n defaultLineHeights, \n ThemeKeyType, \n usePreferenceKeys, \n useTheming\n} from \"../../preferences\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport \"../assets/styles/reader.css\";\nimport arrowStyles from \"../assets/styles/readerArrowButton.module.css\";\n\nimport { \n ThActionsKeys, \n ThBreakpoints, \n ThLineHeightOptions, \n ThSettingsKeys, \n ThTextAlignOptions, \n ThLayoutUI\n} from \"../../preferences/models/enums\";\nimport { ThColorScheme } from \"@/core/Hooks/useColorScheme\";\n\nimport { ThPlugin, ThPluginRegistry } from \"../Plugins/PluginRegistry\";\n\nimport { I18nProvider } from \"react-aria\";\nimport { ThPluginProvider } from \"../Plugins/PluginProvider\";\n\nimport {\n BasicTextSelection,\n FrameClickEvent,\n} from \"@readium/navigator-html-injectables\";\nimport { \n EpubNavigatorListeners, \n FrameManager, \n FXLFrameManager, \n IEpubDefaults, \n IEpubPreferences, \n TextAlignment\n} from \"@readium/navigator\";\nimport { \n Locator, \n Manifest, \n Publication, \n Fetcher, \n HttpFetcher, \n EPUBLayout, \n ReadingProgression\n} from \"@readium/shared\";\n\nimport { StatefulDockingWrapper } from \"../Docking/StatefulDockingWrapper\";\nimport { StatefulReaderHeader } from \"../StatefulReaderHeader\";\nimport { StatefulReaderArrowButton } from \"../StatefulReaderArrowButton\";\nimport { StatefulReaderFooter } from \"../StatefulReaderFooter\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useTimeline } from \"@/core/Hooks/useTimeline\";\nimport { useLocalStorage } from \"@/core/Hooks/useLocalStorage\";\n\nimport { toggleActionOpen } from \"@/lib/actionsReducer\";\nimport { useAppSelector, useAppDispatch, useAppStore } from \"@/lib/hooks\";\nimport { AppDispatch } from \"@/lib/store\";\nimport { \n setBreakpoint, \n setColorScheme, \n setContrast, \n setForcedColors, \n setMonochrome, \n setReducedMotion, \n setReducedTransparency, \n setTheme \n} from \"@/lib/themeReducer\";\nimport { \n setImmersive, \n setLoading,\n setHovering, \n toggleImmersive, \n setPlatformModifier, \n setDirection, \n setArrows, \n setFullscreen,\n setScrollAffordance\n} from \"@/lib/readerReducer\";\nimport { \n setFXL, \n setRTL, \n setProgression, \n setRunningHead, \n setPositionsList,\n setTimeline,\n setPublicationStart,\n setPublicationEnd\n} from \"@/lib/publicationReducer\";\nimport { LineLengthStateObject } from \"@/lib/settingsReducer\";\n\nimport classNames from \"classnames\";\nimport debounce from \"debounce\";\nimport { buildThemeObject } from \"@/preferences/helpers/buildThemeObject\";\nimport { createDefaultPlugin } from \"../Plugins/helpers/createDefaultPlugin\";\nimport Peripherals from \"../../helpers/peripherals\";\nimport { getPlatformModifier } from \"@/core/Helpers/keyboardUtilities\";\nimport { deserializePositions } from \"@/helpers/deserializePositions\";\nimport { propsToCSSVars } from \"@/core/Helpers/propsToCSSVars\";\n\nexport interface ReadiumCSSSettings {\n columnCount: string;\n fontFamily: keyof typeof defaultFontFamilyOptions | null;\n fontSize: number;\n fontWeight: number;\n hyphens: boolean | null;\n letterSpacing: number | null;\n lineLength: LineLengthStateObject | null;\n lineHeight: ThLineHeightOptions | null;\n paragraphIndent: number | null;\n paragraphSpacing: number | null;\n publisherStyles: boolean;\n scroll: boolean;\n textAlign: ThTextAlignOptions | null;\n textNormalization: boolean;\n theme?: string;\n wordSpacing: number | null;\n}\n\nexport interface StatelessCache {\n layoutUI: ThLayoutUI;\n isImmersive: boolean;\n isHovering: boolean;\n arrowsOccupySpace: boolean;\n settings: ReadiumCSSSettings;\n positionsList: Locator[];\n colorScheme?: ThColorScheme;\n reducedMotion?: boolean;\n}\n\nexport interface StatefulReaderProps {\n rawManifest: object;\n selfHref: string;\n plugins?: ThPlugin[];\n}\n\nexport const StatefulReader = ({ \n rawManifest, \n selfHref, \n plugins \n}: StatefulReaderProps) => {\n if (plugins && plugins.length > 0) {\n plugins.forEach(plugin => {\n ThPluginRegistry.register(plugin);\n });\n } else {\n ThPluginRegistry.register(createDefaultPlugin());\n }\n \n const { fxlThemeKeys, reflowThemeKeys } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n\n const [publication, setPublication] = useState<Publication | null>(null);\n\n const container = useRef<HTMLDivElement>(null);\n const localDataKey = useRef(`${selfHref}-current-location`);\n const arrowsWidth = useRef(2 * ((RSPrefs.theming.arrow.size || 40) + (RSPrefs.theming.arrow.offset || 0)));\n\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const progression = useAppSelector(state => state.publication.progression);\n\n const textAlign = useAppSelector(state => state.settings.textAlign);\n const columnCount = useAppSelector(state => state.settings.columnCount);\n const fontFamily = useAppSelector(state => state.settings.fontFamily);\n const fontSize = useAppSelector(state => state.settings.fontSize);\n const fontWeight = useAppSelector(state => state.settings.fontWeight);\n const hyphens = useAppSelector(state => state.settings.hyphens);\n const letterSpacing = useAppSelector(state => state.settings.letterSpacing);\n const lineLength = useAppSelector(state => state.settings.lineLength);\n const lineHeight = useAppSelector(state => state.settings.lineHeight);\n const paragraphIndent = useAppSelector(state => state.settings.paragraphIndent);\n const paragraphSpacing = useAppSelector(state => state.settings.paragraphSpacing);\n const publisherStyles = useAppSelector(state => state.settings.publisherStyles);\n const scroll = useAppSelector(state => state.settings.scroll);\n const isScroll = scroll && !isFXL;\n const textNormalization = useAppSelector(state => state.settings.textNormalization);\n const wordSpacing = useAppSelector(state => state.settings.wordSpacing);\n const themeObject = useAppSelector(state => state.theming.theme);\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n const previousTheme = usePrevious(theme);\n const colorScheme = useAppSelector(state => state.theming.colorScheme);\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const arrowsOccupySpace = !isScroll && breakpoint &&\n (breakpoint === ThBreakpoints.large || breakpoint === ThBreakpoints.xLarge);\n \n const isImmersive = useAppSelector(state => state.reader.isImmersive);\n const isHovering = useAppSelector(state => state.reader.isHovering);\n\n const layoutUI = isFXL \n ? RSPrefs.theming.layout.ui?.fxl || ThLayoutUI.layered \n : isScroll \n ? RSPrefs.theming.layout.ui?.reflow || ThLayoutUI.layered\n : ThLayoutUI.stacked;\n\n // Init theming (breakpoints, theme, media queries…)\n useTheming<ThemeKeyType>({ \n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemKeys: RSPrefs.theming.themes.systemThemes,\n breakpointsMap: RSPrefs.theming.breakpoints,\n initProps: {\n ...propsToCSSVars(RSPrefs.theming.arrow, \"arrow\"), \n ...propsToCSSVars(RSPrefs.theming.icon, \"icon\"),\n ...propsToCSSVars(RSPrefs.theming.layout, \"layout\")\n },\n onBreakpointChange: (breakpoint) => dispatch(setBreakpoint(breakpoint)),\n onColorSchemeChange: (colorScheme) => dispatch(setColorScheme(colorScheme)),\n onContrastChange: (contrast) => dispatch(setContrast(contrast)),\n onForcedColorsChange: (forcedColors) => dispatch(setForcedColors(forcedColors)),\n onMonochromeChange: (isMonochrome) => dispatch(setMonochrome(isMonochrome)),\n onReducedMotionChange: (reducedMotion) => dispatch(setReducedMotion(reducedMotion)),\n onReducedTransparencyChange: (reducedTransparency) => dispatch(setReducedTransparency(reducedTransparency))\n });\n\n const atPublicationStart = useAppSelector(state => state.publication.atPublicationStart);\n const atPublicationEnd = useAppSelector(state => state.publication.atPublicationEnd);\n\n const dispatch = useAppDispatch();\n\n const onFsChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n const fs = useFullscreen(onFsChange);\n\n const { \n EpubNavigatorLoad, \n EpubNavigatorDestroy, \n goLeft, \n goRight, \n goBackward, \n goForward, \n navLayout,\n currentLocator,\n currentPositions,\n canGoBackward,\n canGoForward,\n isScrollStart,\n isScrollEnd,\n getCframes,\n onFXLPositionChange,\n submitPreferences\n } = useEpubNavigator();\n\n const { setLocalData, getLocalData, localData } = useLocalStorage(localDataKey.current);\n\n const timeline = useTimeline({\n publication: publication,\n currentLocation: localData,\n currentPositions: progression.currentPositions || [],\n positionsList: positionsList,\n onChange: (timeline) => {\n dispatch(setTimeline(timeline));\n }\n });\n\n // We need to use a cache so that we can use updated values\n // without re-rendering the component, and reloading EpubNavigator\n const cache = useRef<StatelessCache>({\n layoutUI: layoutUI,\n isImmersive: isImmersive,\n isHovering: isHovering,\n arrowsOccupySpace: arrowsOccupySpace || false,\n settings: {\n columnCount: columnCount,\n fontFamily: fontFamily,\n fontSize: fontSize,\n fontWeight: fontWeight,\n hyphens: hyphens,\n letterSpacing: letterSpacing,\n lineHeight: lineHeight,\n lineLength: lineLength,\n paragraphIndent: paragraphIndent,\n paragraphSpacing: paragraphSpacing,\n publisherStyles: publisherStyles,\n scroll: isScroll,\n textAlign: textAlign,\n textNormalization: textNormalization,\n theme: theme,\n wordSpacing: wordSpacing\n },\n positionsList: positionsList || [],\n colorScheme: colorScheme,\n reducedMotion: reducedMotion\n });\n\n const activateImmersiveOnAction = useCallback(() => {\n if (!cache.current.isImmersive) dispatch(setImmersive(true));\n }, [dispatch]);\n\n const toggleIsImmersive = useCallback(() => {\n // If tap/click in iframe, then header/footer no longer hoovering \n dispatch(setHovering(false));\n dispatch(setArrows(false));\n dispatch(toggleImmersive());\n }, [dispatch]);\n\n // Warning: this is using navigator’s internal methods that will become private, do not rely on them\n // See https://github.com/edrlab/thorium-web/issues/25\n const handleTap = (event: FrameClickEvent) => {\n const _cframes = getCframes();\n if (_cframes) {\n if (!cache.current.settings.scroll) {\n const oneQuarter = ((_cframes.length === 2 ? _cframes[0]!.window.innerWidth + _cframes[1]!.window.innerWidth : _cframes![0]!.window.innerWidth) * window.devicePixelRatio) / 4;\n \n if (event.x < oneQuarter) {\n goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\n } \n else if (event.x > oneQuarter * 3) {\n goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n } else if (oneQuarter <= event.x && event.x <= oneQuarter * 3) {\n toggleIsImmersive();\n }\n } else {\n if (RSPrefs.affordances.scroll.toggleOnMiddlePointer.includes(\"tap\")) {\n toggleIsImmersive();\n }\n }\n }\n };\n\n const handleProgression = useCallback((locator: Locator) => {\n const relativeRef = locator.title || Locale.reader.app.progression.referenceFallback;\n \n dispatch(setProgression( { \n currentPositions: currentPositions(), \n relativeProgression: locator.locations.progression, \n currentChapter: relativeRef, \n totalProgression: locator.locations.totalProgression \n }));\n }, [dispatch, currentPositions]);\n\n // We need this as a workaround due to positionChanged being unreliable\n // in FXL – if the frame is in the pool hidden and is shown again,\n // positionChanged won’t fire.\n const handleFXLProgression = useCallback((locator: Locator) => {\n handleProgression(locator);\n setLocalData(locator);\n }, [handleProgression, setLocalData]);\n\n onFXLPositionChange(handleFXLProgression);\n\n const initReadingEnv = async () => {\n if (navLayout() === EPUBLayout.fixed) {\n // [TMP] Working around positionChanged not firing consistently for FXL\n // Init’ing so that progression can be populated on first spread loaded\n const cLoc = currentLocator();\n if (cLoc) {\n handleFXLProgression(cLoc);\n };\n }\n };\n\n const p = new Peripherals(useAppStore(), RSPrefs.actions, {\n moveTo: (direction) => {\n switch(direction) {\n case \"right\":\n if (!cache.current.settings.scroll) goRight(!cache.current.reducedMotion, activateImmersiveOnAction);\n break;\n case \"left\":\n if (!cache.current.settings.scroll) goLeft(!cache.current.reducedMotion, activateImmersiveOnAction);\n break;\n case \"up\":\n case \"home\":\n // Home should probably go to first column/page of chapter in reflow?\n break;\n case \"down\":\n case \"end\":\n // End should probably go to last column/page of chapter in reflow?\n break;\n default:\n break;\n }\n },\n goProgression: (shiftKey) => {\n if (!cache.current.settings?.scroll) {\n shiftKey \n ? goBackward(!cache.current.reducedMotion, activateImmersiveOnAction) \n : goForward(!cache.current.reducedMotion, activateImmersiveOnAction);\n }\n },\n toggleAction: (actionKey) => {\n switch (actionKey) {\n case ThActionsKeys.fullscreen:\n fs.handleFullscreen();\n break;\n case ThActionsKeys.settings:\n case ThActionsKeys.toc:\n dispatch(toggleActionOpen({\n key: actionKey\n }))\n break;\n // case ThActionsKeys.jumpToPosition:\n default:\n break\n }\n }\n });\n\n const listeners: EpubNavigatorListeners = {\n frameLoaded: async function (_wnd: Window): Promise<void> {\n await initReadingEnv();\n // Warning: this is using navigator’s internal methods that will become private, do not rely on them\n // See https://github.com/edrlab/thorium-web/issues/25\n const _cframes = getCframes();\n _cframes?.forEach(\n (frameManager: FrameManager | FXLFrameManager | undefined) => {\n if (frameManager) p.observe(frameManager.window);\n }\n );\n p.observe(window);\n },\n positionChanged: async function (locator: Locator): Promise<void> {\n if (navLayout() === EPUBLayout.reflowable) {\n const debouncedHandleProgression = debounce(\n async () => {\n handleProgression(locator);\n setLocalData(locator);\n }, 250);\n debouncedHandleProgression();\n }\n\n // We could use canGoBackward() and canGoForward() directly on arrows\n // but maybe we will need to sync the state for other features in the future\n if (canGoBackward()) {\n dispatch(setPublicationStart(false));\n } else {\n dispatch(setPublicationStart(true));\n }\n \n if (canGoForward()) {\n dispatch(setPublicationEnd(false));\n } else {\n dispatch(setPublicationEnd(true));\n }\n },\n tap: function (_e: FrameClickEvent): boolean {\n handleTap(_e);\n return true;\n },\n click: function (_e: FrameClickEvent): boolean {\n if (cache.current.layoutUI === ThLayoutUI.layered) {\n if (\n !cache.current.settings.scroll ||\n RSPrefs.affordances.scroll.toggleOnMiddlePointer.includes(\"click\")\n ) {\n handleTap(_e);\n }\n }\n return true;\n },\n zoom: function (_scale: number): void {},\n miscPointer: function (_amount: number): void {},\n scroll: function (_delta: number): void {\n if (\n cache.current.settings.scroll && \n navLayout() === EPUBLayout.reflowable\n ) { \n if (isScrollStart() || isScrollEnd()) {\n if (\n // Keep consistent with pagination behavior\n cache.current.layoutUI === ThLayoutUI.layered\n ) {\n dispatch(setScrollAffordance(true));\n }\n } else if (!cache.current.isImmersive && _delta > 20) {\n if (RSPrefs.affordances.scroll.hideOnForwardScroll) {\n dispatch(setImmersive(true));\n }\n } else if (cache.current.isImmersive && _delta < -20) {\n if (\n // Keep consistent with pagination behavior\n cache.current.layoutUI === ThLayoutUI.layered && \n RSPrefs.affordances.scroll.showOnBackwardScroll\n ) {\n dispatch(setImmersive(false));\n }\n }\n }\n },\n customEvent: function (_key: string, _data: unknown): void {},\n handleLocator: function (locator: Locator): boolean {\n const href = locator.href;\n\n if (\n href.startsWith(\"http://\") ||\n href.startsWith(\"https://\") ||\n href.startsWith(\"mailto:\") ||\n href.startsWith(\"tel:\")\n ) {\n if (confirm(`Open \"${href}\" ?`)) window.open(href, \"_blank\");\n } else {\n console.warn(\"Unhandled locator\", locator);\n }\n return false;\n },\n textSelected: function (_selection: BasicTextSelection): void {},\n };\n\n const applyConstraint = useCallback(async (value: number) => {\n await submitPreferences({\n constraint: value\n })\n }, [submitPreferences]);\n\n // Handling side effects on Navigator\n\n useEffect(() => {\n cache.current.isImmersive = isImmersive;\n }, [isImmersive]);\n\n useEffect(() => {\n cache.current.isHovering = isHovering;\n }, [isHovering]);\n\n useEffect(() => {\n cache.current.layoutUI = layoutUI;\n }, [layoutUI]);\n\n useEffect(() => {\n cache.current.settings.scroll = isScroll;\n\n // Reset top bar visibility and last position\n dispatch(setImmersive(false));\n\n const handleConstraint = async (value: number) => {\n await applyConstraint(value)\n }\n\n if (!isScroll) {\n handleConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n .catch(console.error);\n } else {\n handleConstraint(0)\n .catch(console.error);\n }\n }, [isScroll, arrowsOccupySpace, applyConstraint, dispatch]);\n\n useEffect(() => {\n cache.current.settings.columnCount = columnCount;\n }, [columnCount]);\n\n useEffect(() => {\n cache.current.settings.fontFamily = fontFamily;\n }, [fontFamily]);\n\n useEffect(() => {\n cache.current.settings.fontSize = fontSize;\n }, [fontSize]);\n\n useEffect(() => {\n cache.current.settings.fontWeight = fontWeight;\n }, [fontWeight]);\n\n useEffect(() => {\n cache.current.settings.hyphens = hyphens;\n }, [hyphens]);\n\n useEffect(() => {\n cache.current.settings.letterSpacing = letterSpacing;\n }, [letterSpacing]);\n\n useEffect(() => {\n cache.current.settings.lineHeight = lineHeight;\n }, [lineHeight]);\n\n useEffect(() => {\n cache.current.settings.lineLength = lineLength;\n }, [lineLength]);\n\n useEffect(() => {\n cache.current.settings.paragraphIndent = paragraphIndent;\n }, [paragraphIndent]);\n\n useEffect(() => {\n cache.current.settings.paragraphSpacing = paragraphSpacing;\n }, [paragraphSpacing]);\n\n useEffect(() => {\n cache.current.settings.textAlign = textAlign;\n }, [textAlign]);\n\n useEffect(() => {\n cache.current.settings.textNormalization = textNormalization;\n }, [textNormalization]);\n\n useEffect(() => {\n cache.current.settings.theme = theme;\n }, [theme]);\n\n useEffect(() => {\n cache.current.settings.wordSpacing = wordSpacing;\n }, [wordSpacing]);\n\n useEffect(() => {\n cache.current.positionsList = positionsList || [];\n }, [positionsList]);\n\n useEffect(() => {\n cache.current.arrowsOccupySpace = arrowsOccupySpace || false;\n }, [arrowsOccupySpace]);\n\n useEffect(() => {\n cache.current.reducedMotion = reducedMotion;\n }, [reducedMotion]);\n\n // Theme can also change on colorScheme change so\n // we have to handle this side-effect but we can’t\n // from the ReadingDisplayTheme component since it\n // would have to be mounted for this to work\n useEffect(() => {\n if (cache.current.colorScheme !== colorScheme) {\n cache.current.colorScheme = colorScheme;\n }\n\n const theme = isFXL ? themeObject.fxl : themeObject.reflow;\n\n // Protecting against re-applying on theme change\n if (theme !== \"auto\" && previousTheme !== theme) return;\n\n const applyCurrentTheme = async () => {\n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const themeKey = themeKeys.includes(theme as any) ? theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: themeKey,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme\n });\n await submitPreferences(themeProps);\n dispatch(setTheme({ \n key: isFXL ? \"fxl\" : \"reflow\", \n value: themeKey \n }));\n };\n\n applyCurrentTheme()\n .catch(console.error);\n }, [themeObject, previousTheme, RSPrefs.theming.themes, fxlThemeKeys, reflowThemeKeys, colorScheme, isFXL, submitPreferences, dispatch]);\n\n useEffect(() => {\n RSPrefs.direction && dispatch(setDirection(RSPrefs.direction));\n dispatch(setPlatformModifier(getPlatformModifier()));\n }, [RSPrefs.direction, dispatch]);\n\n useEffect(() => {\n const handleConstraint = async () => {\n await applyConstraint(arrowsOccupySpace ? arrowsWidth.current : 0)\n }\n handleConstraint()\n .catch(console.error);\n }, [arrowsOccupySpace, applyConstraint]);\n\n useEffect(() => {\n const fetcher: Fetcher = new HttpFetcher(undefined, selfHref);\n const manifest = Manifest.deserialize(rawManifest)!;\n manifest.setSelfLink(selfHref);\n\n setPublication(new Publication({\n manifest: manifest,\n fetcher: fetcher\n }));\n }, [rawManifest, selfHref]);\n\n useEffect(() => {\n if (!publication) return;\n\n dispatch(setRTL(publication.metadata.effectiveReadingProgression === ReadingProgression.rtl));\n dispatch(setFXL(publication.metadata.getPresentation()?.layout === EPUBLayout.fixed));\n\n const pubTitle = publication.metadata.title.getTranslation(\"en\");\n\n dispatch(setRunningHead(pubTitle));\n dispatch(setProgression({ currentPublication: pubTitle }));\n\n let positionsList: Locator[] | undefined;\n\n const fetchPositions = async () => {\n positionsList = await publication.positionsFromManifest();\n if (positionsList && positionsList.length > 0) {\n dispatch(setProgression( { totalPositions: positionsList.length }))\n };\n const deserializedPositionsList = deserializePositions(positionsList);\n dispatch(setPositionsList(deserializedPositionsList));\n };\n\n fetchPositions()\n .catch(console.error)\n .then(() => {\n const isFXL = publication.metadata.getPresentation()?.layout === EPUBLayout.fixed;\n\n const initialPosition: Locator | null = getLocalData();\n\n const initialConstraint = cache.current.arrowsOccupySpace ? arrowsWidth.current : 0;\n \n const themeKeys = isFXL ? fxlThemeKeys : reflowThemeKeys;\n const theme = themeKeys.includes(cache.current.settings.theme as any) ? cache.current.settings.theme : \"auto\";\n const themeProps = buildThemeObject<ThemeKeyType>({\n theme: theme,\n themeKeys: RSPrefs.theming.themes.keys,\n systemThemes: RSPrefs.theming.themes.systemThemes,\n colorScheme: cache.current.colorScheme\n });\n\n const lineHeightOptions = {\n [ThLineHeightOptions.publisher]: null,\n [ThLineHeightOptions.small]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.small] || defaultLineHeights[ThLineHeightOptions.small],\n [ThLineHeightOptions.medium]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.medium] || defaultLineHeights[ThLineHeightOptions.medium],\n [ThLineHeightOptions.large]: RSPrefs.settings.keys?.[ThSettingsKeys.lineHeight]?.[ThLineHeightOptions.large] || defaultLineHeights[ThLineHeightOptions.large],\n };\n\n const preferences: IEpubPreferences = isFXL ? {} : {\n columnCount: cache.current.settings.columnCount === \"auto\" ? null : Number(cache.current.settings.columnCount),\n constraint: initialConstraint,\n fontFamily: cache.current.settings.fontFamily && defaultFontFamilyOptions[cache.current.settings.fontFamily],\n fontSize: cache.current.settings.fontSize,\n fontWeight: cache.current.settings.fontWeight,\n hyphens: cache.current.settings.hyphens,\n letterSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.letterSpacing,\n lineHeight: cache.current.settings.publisherStyles \n ? undefined \n : cache.current.settings.lineHeight === null \n ? null \n : lineHeightOptions[cache.current.settings.lineHeight],\n optimalLineLength: cache.current.settings.lineLength?.optimal,\n maximalLineLength: cache.current.settings.lineLength?.max?.isDisabled \n ? null \n : cache.current.settings.lineLength?.max?.chars,\n minimalLineLength: cache.current.settings.lineLength?.min?.isDisabled \n ? null \n : cache.current.settings.lineLength?.min?.chars,\n paragraphIndent: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphIndent,\n paragraphSpacing: cache.current.settings.publisherStyles ? undefined :cache.current.settings.paragraphSpacing,\n scroll: cache.current.settings.scroll,\n textAlign: cache.current.settings.textAlign as unknown as TextAlignment | null | undefined,\n textNormalization: cache.current.settings.textNormalization,\n wordSpacing: cache.current.settings.publisherStyles ? undefined : cache.current.settings.wordSpacing,\n ...themeProps\n };\n\n const defaults: IEpubDefaults = isFXL ? {} : {\n maximalLineLength: RSPrefs.typography.maximalLineLength, \n minimalLineLength: RSPrefs.typography.minimalLineLength, \n optimalLineLength: RSPrefs.typography.optimalLineLength,\n pageGutter: RSPrefs.typography.pageGutter,\n scrollPaddingTop: RSPrefs.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (RSPrefs.theming.icon.size || 24) * 3 \n : (RSPrefs.theming.icon.size || 24),\n scrollPaddingBottom: RSPrefs.theming.layout.ui?.reflow === ThLayoutUI.layered \n ? (RSPrefs.theming.icon.size || 24) * 5 \n : (RSPrefs.theming.icon.size || 24)\n }\n \n EpubNavigatorLoad({\n container: container.current, \n publication: publication,\n listeners: listeners, \n positionsList: positionsList,\n initialPosition: initialPosition ?? undefined,\n preferences: preferences,\n defaults: defaults\n }, () => p.observe(window));\n })\n .finally(() => {\n const setLoadingThunk = (dispatch: AppDispatch) => {\n dispatch(setLoading(false));\n };\n dispatch(setLoadingThunk);\n });\n\n return () => {\n EpubNavigatorDestroy(() => p.destroy());\n };\n }, [publication, RSPrefs, fxlThemeKeys, reflowThemeKeys]);\n\n // If breakpoint is not defined, we are not ready to render\n // since useDocking needs it to derive the sheet type\n // Same for arrows and collapsible actions.\n if (!breakpoint) return null;\n\n return (\n <>\n <I18nProvider locale={ RSPrefs.locale }>\n <ThPluginProvider>\n <main id=\"reader-main\">\n <StatefulDockingWrapper>\n <div \n id=\"reader-shell\" \n className={ \n classNames(\n isFXL ? \"isFXL\" : \"isReflow\",\n isImmersive ? \"isImmersive\" : \"\",\n isHovering ? \"isHovering\" : \"\",\n isScroll ? \"isScroll\" : \"isPaged\",\n layoutUI,\n breakpoint\n )\n }\n >\n <StatefulReaderHeader layout={ layoutUI } />\n\n { !isScroll \n ? <nav className={ arrowStyles.container } id={ arrowStyles.left }>\n <StatefulReaderArrowButton \n direction=\"left\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationStart } \n onPress={ () => goLeft(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <article id=\"wrapper\" aria-label={ Locale.reader.app.publicationWrapper }>\n <div id=\"container\" ref={ container }></div>\n </article>\n\n { !isScroll \n ? <nav className={ arrowStyles.container } id={ arrowStyles.right }>\n <StatefulReaderArrowButton \n direction=\"right\" \n occupySpace={ arrowsOccupySpace || false }\n isDisabled={ atPublicationEnd } \n onPress={ () => goRight(!reducedMotion, activateImmersiveOnAction) }\n />\n </nav> \n : <></> }\n\n <StatefulReaderFooter layout={ layoutUI } />\n </div>\n </StatefulDockingWrapper>\n </main>\n </ThPluginProvider>\n </I18nProvider>\n </>\n)};","import * as React from \"react\";\nconst SvgFullscreen = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z\" /></svg>;\nexport default SvgFullscreen;","import * as React from \"react\";\nconst SvgFullscreenExit = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-120v-120H120v-80h200v200h-80Zm400 0v-200h200v80H720v120h-80ZM120-640v-80h120v-120h80v200H120Zm520 0v-200h80v120h120v80H640Z\" /></svg>;\nexport default SvgFullscreenExit;","\"use client\";\n\nimport React from \"react\";\n\nimport { UnstableShortcut, UnstableShortcutRepresentation, buildShortcut, metaKeys } from \"@/core/Helpers/keyboardUtilities\";\n\nimport { Keyboard } from \"react-aria-components\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nexport const UnstableStatefulShortcut = ({\n className,\n rawForm,\n representation,\n joiner\n}: UnstableShortcut) => {\n const RSPrefs = usePreferences();\n const platformModifier = useAppSelector(state => state.reader.platformModifier);\n\n representation = representation ? representation : RSPrefs.shortcuts.representation || UnstableShortcutRepresentation.symbol;\n joiner = joiner ? joiner : RSPrefs.shortcuts.joiner || \" + \";\n\n const shortcutObj = buildShortcut(rawForm);\n\n if (shortcutObj) {\n let shortcutRepresentation = [];\n\n for (const prop in shortcutObj.modifiers) {\n if (shortcutObj.modifiers[prop]) {\n if (prop === \"platformKey\") {\n shortcutRepresentation.push(platformModifier[representation]);\n } else {\n const metaKey = metaKeys[prop];\n shortcutRepresentation.push(metaKey[representation as UnstableShortcutRepresentation]);\n }\n }\n }\n\n if (shortcutObj.char) {\n shortcutRepresentation.push(shortcutObj.char);\n }\n\n if (shortcutRepresentation.length > 0) {\n const displayShortcut = shortcutRepresentation.join(joiner);\n \n return (\n <Keyboard className={ className }>{ displayShortcut }</Keyboard>\n ) \n } else {\n return (\n <></>\n )\n }\n }\n\n return (\n <></>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\n\nimport overflowMenuStyles from \"../assets/styles/overflowMenu.module.css\";\n\nimport { Text } from \"react-aria-components\";\nimport { UnstableStatefulShortcut as StatefulShortcut } from \"./UnstableStatefulShortcut\";\n\nimport { ThMenuItem, ThMenuItemProps } from \"@/core/Components/Menu/ThMenuItem\";\n\nexport interface StatefulOverflowMenuItemProps extends Omit<ThMenuItemProps, \"shortcut\"> {\n shortcut?: string | null\n}\n\nexport const StatefulOverflowMenuItem = ({\n id,\n label,\n SVGIcon,\n shortcut = undefined,\n ...props\n}: StatefulOverflowMenuItemProps) => {\n const menuItemLabelId = `${id}-label`;\n \n return(\n <>\n <ThMenuItem \n id={ id } \n label={ label }\n className={ overflowMenuStyles.menuItem } \n aria-labelledby={ menuItemLabelId } \n { ...props }\n >\n { SVGIcon && <SVGIcon aria-hidden=\"true\" focusable=\"false\" /> }\n <Text \n className={ overflowMenuStyles.menuItemLabel } \n slot=\"label\"\n id={ menuItemLabelId }\n >\n { label }\n </Text>\n { shortcut && <StatefulShortcut\n className={ overflowMenuStyles.menuItemKbdShortcut } \n rawForm={ shortcut } \n /> }\n </ThMenuItem>\n </>\n )\n}\n","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport readerSharedUI from \"../../assets/styles/readerSharedUI.module.css\";\n\nimport FullscreenCorners from \"./assets/icons/fullscreen.svg\";\nimport FullscreenExit from \"./assets/icons/fullscreen_exit.svg\";\n\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { useFullscreen } from \"@/core/Hooks/useFullscreen\";\n\nimport { useAppDispatch } from \"@/lib/hooks\";\nimport { setFullscreen, setHovering } from \"@/lib/readerReducer\";\nimport { isIOSish } from \"@/core/Helpers/getPlatform\";\n\nexport const StatefulFullscreenTrigger = ({ variant }: StatefulActionTriggerProps) => {\n // Note: Not using React Aria ToggleButton here as fullscreen is quite\n // difficult to control in isolation due to collapsibility + shortcuts\n\n const RSPrefs = usePreferences();\n\n const dispatch = useAppDispatch();\n const onChange = useCallback((isFullscreen: boolean) => {\n dispatch(setFullscreen(isFullscreen));\n }, [dispatch]);\n \n const fs = useFullscreen(onChange);\n\n const label = fs.isFullscreen ? Locale.reader.fullscreen.close : Locale.reader.fullscreen.trigger;\n const Icon = fs.isFullscreen ? FullscreenExit : FullscreenCorners;\n\n const handlePress = () => {\n fs.handleFullscreen();\n // Has to be dispatched manually, otherwise stays true… \n dispatch(setHovering(false));\n // TODO: fix hover state on exit, if even possible w/o a lot of getting around…\n };\n\n // Per React doc/principles this isn’t common but FullScreen is quite an edge case cos’ of iPadOS…\n // And Actions is still a work in progress, with opportunities to rewrite/refactor\n // Note we don’t check window.matchMedia(\"(display-mode: standalone)\").matches as this is not a PWA yet\n // And more values here: https://web.dev/learn/pwa/detection\n if (!document.fullscreenEnabled || isIOSish()) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ label }\n SVGIcon={ Icon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].shortcut }\n onAction={ fs.handleFullscreen } \n id={ ThActionsKeys.fullscreen }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.iconCompSm }\n visibility={ RSPrefs.actions.keys[ThActionsKeys.fullscreen].visibility } \n aria-label={ label }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.fullscreen.tooltip } \n onPress={ handlePress } \n >\n <Icon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n } \n </>\n )\n}","import * as React from \"react\";\nconst SvgPinDrop = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"Inherit\" {...props}><path d=\"M480-301q99-80 149.5-154T680-594q0-90-56-148t-144-58q-88 0-144 58t-56 148q0 65 50.5 139T480-301Zm0 101Q339-304 269.5-402T200-594q0-125 78-205.5T480-880q124 0 202 80.5T760-594q0 94-69.5 192T480-200Zm0-320q33 0 56.5-23.5T560-600q0-33-23.5-56.5T480-680q-33 0-56.5 23.5T400-600q0 33 23.5 56.5T480-520ZM200-80v-80h560v80H200Zm280-520Z\" /></svg>;\nexport default SvgPinDrop;","\"use client\";\n\nimport React from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport TargetIcon from \"./assets/icons/pin_drop.svg\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { setActionOpen, useAppDispatch, useAppSelector } from \"@/lib\";\n\nexport const StatefulJumpToPositionTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.jumpToPosition,\n isOpen: value \n }));\n }\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.jumpToPosition.trigger }\n SVGIcon={ TargetIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].shortcut }\n id={ ThActionsKeys.jumpToPosition }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon\n visibility={ RSPrefs.actions.keys[ThActionsKeys.jumpToPosition].visibility } \n aria-label={ Locale.reader.jumpToPosition.trigger }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.jumpToPosition.tooltip }\n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TargetIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgDockToRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\" /></svg>;\nexport default SvgDockToRight;","import * as React from \"react\";\nconst SvgDockToLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm440-80h120v-560H640v560Zm-80 0v-560H200v560h360Zm80 0h120-120Z\" /></svg>;\nexport default SvgDockToLeft;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockStart = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const localeKey = isRTL ? Locale.reader.app.docker.dockToRight : Locale.reader.app.docker.dockToLeft;\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.start;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.start\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DocktoRight : DockToLeft } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.start].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.start }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport DockToLeft from \"./assets/icons/dock_to_right.svg\";\nimport DocktoRight from \"./assets/icons/dock_to_left.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockEnd = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const direction = useAppSelector(state => state.reader.direction);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const isRTL = direction === ThLayoutDirection.rtl;\n const localeKey = isRTL ? Locale.reader.app.docker.dockToLeft : Locale.reader.app.docker.dockToRight;\n\n const actions = useActions(actionsMap);\n const isDisabled = actions.whichDocked(associatedKey) === ThDockingKeys.end;\n\n const dispatch = useAppDispatch();\n \n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.end\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ localeKey.trigger }\n SVGIcon={ isRTL ? DockToLeft : DocktoRight } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.end].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.end }-${ associatedKey }` }\n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ localeKey.trigger }\n placement=\"bottom\" \n tooltipLabel={ localeKey.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n { isRTL \n ? <DocktoRight aria-hidden=\"true\" focusable=\"false\" /> \n : <DockToLeft aria-hidden=\"true\" focusable=\"false\" /> \n }\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgStack = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M240-400v80h-80q-33 0-56.5-23.5T80-400v-400q0-33 23.5-56.5T160-880h400q33 0 56.5 23.5T640-800v80h-80v-80H160v400h80ZM400-80q-33 0-56.5-23.5T320-160v-400q0-33 23.5-56.5T400-640h400q33 0 56.5 23.5T880-560v400q0 33-23.5 56.5T800-80H400Zm0-80h400v-400H400v400Zm200-200Z\" /></svg>;\nexport default SvgStack;","\"use client\";\n\nimport { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { StatefulActionTriggerProps } from \"@/components/Actions/models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport Stack from \"./assets/icons/stack.svg\";\n\nimport { StatefulActionIcon } from \"../Actions/Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Actions/Triggers/StatefulOverflowMenuItem\";\n\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { dockAction } from \"@/lib/actionsReducer\";\n\nexport const StatefulDockTransientPopover = ({ variant, associatedKey }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actions = useActions(actionsMap);\n const isDisabled = !actions.isDocked(associatedKey) || actions.whichDocked(associatedKey) === ThDockingKeys.transient;\n \n const dispatch = useAppDispatch();\n\n const handlePress = useCallback(() => {\n if (associatedKey) {\n dispatch(dockAction({\n key: associatedKey,\n dockingKey: ThDockingKeys.transient\n }))\n }\n }, [dispatch, associatedKey]);\n \n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.app.docker.popover.trigger }\n SVGIcon={ Stack } \n shortcut={ RSPrefs.docking.keys[ThDockingKeys.transient].shortcut }\n onAction={ handlePress } \n id={ `${ ThDockingKeys.transient }-${ associatedKey }` } \n isDisabled={ isDisabled }\n />\n : <StatefulActionIcon \n className={ readerSharedUI.dockerButton } \n aria-label={ Locale.reader.app.docker.popover.trigger }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.app.docker.popover.tooltip } \n onPress={ handlePress } \n isDisabled={ isDisabled }\n >\n <Stack aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport dockingStyles from \"./assets/styles/docking.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockingKeys } from \"@/preferences/models/enums\";\n\nimport { Toolbar } from \"react-aria-components\";\n\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\nimport { StatefulCollapsibleActionsBar } from \"../Actions/StatefulCollapsibleActionsBar\";\n\nimport { StatefulDockStart } from \"./StatefulDockStart\";\nimport { StatefulDockEnd } from \"./StatefulDockEnd\";\nimport { StatefulDockTransientPopover } from \"./StatefulDockTransientPopover\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { ThActionEntry } from \"@/core/Components/Actions/ThActionsBar\";\nimport { ActionsStateKeys } from \"@/lib/actionsReducer\";\n\nconst dockingComponentsMap = {\n [ThDockingKeys.start]: {\n trigger: StatefulDockStart\n },\n [ThDockingKeys.end]: {\n trigger: StatefulDockEnd\n },\n [ThDockingKeys.transient]: {\n trigger: StatefulDockTransientPopover\n }\n}\n\nexport interface StatefulDockerProps {\n id: ActionsStateKeys;\n keys: ThDockingKeys[];\n ref: React.ForwardedRef<HTMLButtonElement>;\n onClose: () => void;\n}\n\nexport const StatefulDocker = ({\n id,\n keys,\n ref,\n onClose\n}: StatefulDockerProps) => {\n const RSPrefs = usePreferences();\n \n const listActionItems = useCallback(() => {\n const actionsItems: ThActionEntry<ThDockingKeys>[] = [];\n\n keys.map((key) => {\n actionsItems.push({\n Trigger: dockingComponentsMap[key].trigger,\n key: key,\n associatedKey: id\n })\n });\n\n return actionsItems;\n }, [keys, id]);\n\n return(\n <>\n <Toolbar className={ dockingStyles.dockerWrapper }>\n <StatefulCollapsibleActionsBar \n id={ `${ id }-docker-overflowMenu` }\n items={ listActionItems() }\n className={ dockingStyles.docker } \n overflowMenuClassName={ readerSharedUI.dockerButton }\n prefs={ RSPrefs.docking }\n aria-label={ Locale.reader.app.docker.wrapper }\n />\n\n <ThCloseButton \n ref={ ref }\n className={ readerSharedUI.dockerButton } \n aria-label={ Locale.reader.app.docker.close.trigger } \n onPress={ onClose }\n compounds={ {\n tooltipTrigger: {\n delay: RSPrefs.theming.icon.tooltipDelay,\n closeDelay: RSPrefs.theming.icon.tooltipDelay\n },\n tooltip: {\n className: readerSharedUI.tooltip\n },\n label: Locale.reader.app.docker.close.tooltip\n }}\n />\n </Toolbar>\n </>\n )\n}\n\n","import { useEffect } from \"react\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\n\nimport { useAppSelector } from \"@/lib\";\n\n/** For some unknown reason, React Aria Components’ Popover and Modal Components\n * are breaking scroll on webkit based browsers in version 1.11.0. \n * It is all the more mind-boggling that the hook we are using for \n * the Bottom Sheet don’t seem to be affected by this issue – but it could be forcing\n * a reflow thanks to its animation. \n * \n * NOTE: This is treating the symptoms and is unsustainable in the long run. \n * We have to find the root cause of this issue and fix it, \n * especially as TS-Toolkit already resolves this bug\n * when the resources are loaded into the iframe directly as scroll. \n*/\nexport const useWebkitPatch = (isOpen: boolean) => {\n const scroll = useAppSelector(state => state.settings.scroll);\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const isScroll = scroll && !isFXL;\n\n const {\n getCframes\n } = useEpubNavigator();\n\n useEffect(() => {\n if (isScroll && !isOpen) {\n // We have to force a reflow on the iframe container to fix the issue.\n // Using the infamous Recalc technique (adding a style element with *{}) \n // in the iframe contentDocument does not work.\n const container = document.getElementById(\"container\");\n if (!container) return;\n\n const currentHeight = container.offsetHeight;\n container.style.height = `${ currentHeight - 1 }px`;\n\n // Otherwise Safari will ignore the reflow.\n setTimeout(() => {\n container.style.height = \"\";\n\n // This is where it becomes unsustainable, because we have to \n // force a scroll on the iframe scrolling element so that Safari\n // even renders the content that is below the viewport…\n // We only have access to the iframe scrolling element\n // because we are on the same origin…\n const frame = getCframes()?.[0];\n if (!frame?.window?.document?.scrollingElement) return;\n\n const currentScrollTop = frame.window.document.scrollingElement.scrollTop;\n\n if (currentScrollTop > 1) {\n frame.window.document.scrollingElement.scrollTop = currentScrollTop - 1;\n } else {\n frame.window.document.scrollingElement.scrollTop = currentScrollTop + 1;\n }\n\n frame.window.document.scrollingElement.scrollTop = currentScrollTop;\n }, 0);\n }\n }, [isScroll, isOpen, getCframes]);\n};\n","\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { PopoverProps } from \"react-aria-components\";\n\nimport { ThPopover } from \"@/core/Components/Containers/ThPopover\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\n\nimport { useWebkitPatch } from \"./hooks/useWebkitPatch\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulPopoverSheetProps extends StatefulSheet {\n placement?: PopoverProps[\"placement\"];\n}\n\nexport const StatefulPopoverSheet = ({ \n id,\n triggerRef,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n placement,\n docker,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n}: StatefulPopoverSheetProps) => {\n const direction = useAppSelector(state => state.reader.direction);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n const popoverHeaderRef = useRef<HTMLDivElement | null>(null);\n const popoverBodyRef = useRef<HTMLDivElement | null>(null);\n const popoverCloseRef = useRef<HTMLButtonElement | null>(null);\n\n // Warning: This is a temporary fix for a bug in React Aria Components.\n useWebkitPatch(!!isOpen);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThPopover \n ref={ popoverRef }\n triggerRef={ triggerRef }\n focusOptions={{\n withinRef: focusWithinRef ?? popoverBodyRef,\n trackedState: isOpen,\n fallbackRef: popoverCloseRef,\n updateState: resetFocus\n }}\n placement={ placement || \"bottom\" }\n className={ classNames(sheetStyles.popOverSheet , className) }\n isOpen={ isOpen }\n onOpenChange={ onOpenChange } \n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": popoverHeaderRef.current ? `${ popoverHeaderRef.current.clientHeight }px` : undefined\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n >\n <ThContainerHeader \n ref={ popoverHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ Locale.reader.app.back.trigger }\n ref={ popoverCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n />\n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ popoverCloseRef }\n onClose={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody\n ref={ popoverBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThPopover>\n </>\n ) \n }\n}","\"use client\";\n\nimport React, { CSSProperties, KeyboardEvent, useCallback, useMemo, useRef } from \"react\";\n\nimport { ThBottomSheetDetent, ThSheetHeaderVariant } from \"@/preferences\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { SheetRef } from \"react-modal-sheet\";\n\nimport { ThBottomSheet } from \"@/core/Components/Containers/ThBottomSheet\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulBottomSheetProps extends StatefulSheet {};\n\nexport interface ScrimPref {\n active: boolean;\n override?: string;\n}\n\nconst DEFAULT_SNAPPOINTS = {\n min: 0.3,\n peek: 0.5,\n max: 1\n}\n\nexport const StatefulBottomSheet = ({\n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n}: StatefulBottomSheetProps) => {\n const RSPrefs = usePreferences();\n const direction = useAppSelector((state) => state.reader.direction);\n const prefersReducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n\n const sheetRef = useRef<SheetRef | null>(null);\n const sheetContainerRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const bottomSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const detent = useRef<ThBottomSheetDetent>(\"full-height\");\n const isDraggable = useRef<boolean>(true);\n\n const snapArray = useMemo(() => {\n // Val is always checked in 0...1 range\n const getSecureVal = (val: number, ref: number) => {\n if (val > ref) {\n return val;\n } else {\n return ((1 - ref) / 2) + ref;\n }\n };\n\n // Array needs max @ index 0 and min @ index 2 when complete\n // If it doesn’t have a max, then peek is @ index 0. This means\n // the initialProp should always be one item from last\n let snapArray: number[] = [];\n\n const snapPref = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped;\n if (snapPref) {\n // We must start with minHeight to see if it’s \n // constrained by a detent as it means\n // the bottom sheet is not draggable.\n // Hence why unshifting into the array instead of pushing\n if (snapPref.minHeight) {\n switch(snapPref.minHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.minHeight === 100 ? \"full-height\" : snapPref.minHeight;\n isDraggable.current = false;\n return [];\n default:\n const minVal = snapPref.minHeight / 100;\n // Protecting against pref > 100\n minVal > 0 && minVal < 1 \n ? snapArray.unshift(minVal) \n : snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(DEFAULT_SNAPPOINTS.min);\n }\n\n // From now on, check if value is greater than the previous one in array\n // If not, use DEFAULT_SNAPPOINTS fallback and check it as well\n // This is to protect from cases that don’t validate min < peek < max\n\n // If peekHeight is constrained by a detent\n // then there is no maxHeight\n if (snapPref.peekHeight) {\n switch(snapPref.peekHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.peekHeight === 100 ? \"full-height\" : snapPref.peekHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const peekVal = snapPref.peekHeight / 100;\n const prevVal = snapArray[0];\n\n peekVal > 0 && peekVal < 1\n ? snapArray.unshift(getSecureVal(peekVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, prevVal))\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.peek, snapArray[0]));\n }\n\n // If max-height is constrained by a content-height detent\n // then it means the bottom sheet can’t be fullscreen\n // Otherwise we can remove the top corners radii\n if (snapPref.maxHeight) {\n switch(snapPref.maxHeight) {\n case \"content-height\":\n case \"full-height\":\n case 100:\n detent.current = snapPref.maxHeight === 100 ? \"full-height\" : snapPref.maxHeight;\n snapArray.unshift(1);\n return snapArray;\n default:\n const maxVal = snapPref.maxHeight / 100;\n const prevVal = snapArray[0];\n\n maxVal > 0 && maxVal < 1 \n ? snapArray.unshift(getSecureVal(maxVal, prevVal)) \n : snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, prevVal));\n break;\n }\n } else {\n // Fallback value\n snapArray.unshift(getSecureVal(DEFAULT_SNAPPOINTS.max, snapArray[0]));\n }\n } else {\n // There is no pref set\n // Reminder: order of React Modal Sheet is descending so max, peek, min\n snapArray.push(DEFAULT_SNAPPOINTS.max, DEFAULT_SNAPPOINTS.peek, DEFAULT_SNAPPOINTS.min);\n }\n\n return snapArray;\n }, [id, RSPrefs]);\n\n const snapIdx = useRef<number | null>(null);\n\n const onDragPressCallback = useCallback(() => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n const nextIdx = snapIdx.current === 0 ? snapArray.length - 1 : (snapIdx.current - 1);\n sheetRef.current?.snapTo(nextIdx);\n }\n }, [snapArray]);\n\n const onDragKeyCallback = useCallback((e: KeyboardEvent) => {\n if (snapIdx.current !== null) {\n // Don’t forget we’re having to handle max @ 0 and min @ 2 (decreasing order)\n // Implementation is being kept consistent with React Resizable Panels, which\n // implements this logic by default for PanelResizeHandle when focused\n switch(e.code) {\n case \"PageUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(0);\n break;\n case \"ArrowUp\":\n if (snapIdx.current === 0) return;\n sheetRef.current?.snapTo(snapIdx.current - 1);\n break;\n case \"PageDown\":\n onClosePress();\n break;\n case \"ArrowDown\":\n if (snapIdx.current === snapArray.length - 1) {\n onClosePress();\n break;\n }\n sheetRef.current?.snapTo(snapIdx.current + 1)\n break;\n default:\n break;\n }\n }\n }, [snapArray, onClosePress]);\n\n const maxWidthPref = useMemo(() => {\n const maxWidth = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.maxWidth;\n if (typeof maxWidth === \"undefined\") {\n return undefined;\n } else if (maxWidth === null) {\n return \"100%\";\n } else {\n return `${ maxWidth }px`;\n }\n }, [id, RSPrefs]);\n\n const scrimPref = useMemo(() => {\n let scrimPref: ScrimPref = {\n active: false,\n override: undefined\n }\n const scrim = RSPrefs.actions.keys[id as keyof typeof RSPrefs.actions.keys].snapped?.scrim;\n if (scrim) {\n scrimPref.active = true;\n\n if (typeof scrim === \"string\") {\n scrimPref.override = scrim;\n }\n }\n\n return scrimPref;\n }, [id, RSPrefs]);\n\n const detentClassName = useMemo(() => {\n let className = \"\";\n if (detent.current === \"content-height\") {\n className = sheetStyles.bottomSheetModalContentHeightDetent;\n } else {\n className = sheetStyles.bottomSheetModalFullHeightDetent;\n }\n return className;\n }, [detent]);\n\n const scrimClassName = useMemo(() => {\n return scrimPref.active ? sheetStyles.bottomSheetScrim : \"\";\n }, [scrimPref]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThBottomSheet\n id={ id }\n ref={ sheetRef }\n isOpen={ isOpen }\n focusOptions={{\n withinRef: focusWithinRef ?? bottomSheetBodyRef,\n trackedState: isOpen,\n fallbackRef: bottomSheetCloseRef,\n updateState: resetFocus\n }}\n onOpenChange={ onOpenChange }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n { ...(snapArray.length > 1 \n ? { \n snapPoints: snapArray, \n initialSnap: snapArray.length - 2,\n detent: detent.current\n } \n : {\n detent: detent.current\n }) \n }\n onSnap={ (index) => { snapIdx.current = index }}\n prefersReducedMotion={ prefersReducedMotion }\n compounds={ {\n container: {\n className: classNames(sheetStyles.bottomSheetModal, detentClassName),\n ref: sheetContainerRef,\n style: {\n maxWidth: maxWidthPref \n } as CSSProperties\n },\n dragIndicator: {\n className: sheetStyles.dragIndicator,\n onPress: onDragPressCallback,\n onKeyDown: onDragKeyCallback\n },\n content: {\n className: classNames(sheetStyles.bottomSheet, className),\n disableDrag: true\n },\n scroller: {\n className: classNames(sheetStyles.bottomSheetScroller, sheetStyles.sheetBody),\n draggable: false\n },\n backdrop: {\n className: classNames(sheetStyles.bottomSheetBackdrop, scrimClassName),\n style: { \"--defaults-scrim\": scrimPref.override }\n }\n } }\n >\n <ThContainerHeader\n label={ heading }\n className={ sheetStyles.bottomSheetHeader }\n compounds={ {\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton \n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ Locale.reader.app.back.trigger }\n ref={ bottomSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n /> \n : <ThCloseButton\n ref={ bottomSheetCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ Locale.reader.app.docker.close.trigger } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ bottomSheetBodyRef }\n >\n { children }\n </ThContainerBody>\n </ThBottomSheet>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThSheetHeaderVariant } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThModal } from \"@/core/Components/Containers/ThModal\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\nimport { ThCloseButton } from \"@/core/Components/Buttons/ThCloseButton\";\n\nimport { useWebkitPatch } from \"./hooks/useWebkitPatch\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulFullScreenSheetProps extends StatefulSheet {};\n\nexport const StatefulFullScreenSheet = ({\n heading,\n headerVariant,\n className, \n isOpen,\n onOpenChange, \n onClosePress,\n children,\n resetFocus,\n focusWithinRef,\n dismissEscapeKeyClose\n}: StatefulFullScreenSheetProps) => {\n const direction = useAppSelector(state => state.reader.direction);\n const fullScreenHeaderRef = useRef<HTMLDivElement | null>(null);\n const fullScreenBodyRef = useRef<HTMLDivElement | null>(null);\n const fullScreenCloseRef = useRef<HTMLButtonElement | null>(null);\n\n // Warning: This is a temporary fix for a bug in React Aria Components.\n useWebkitPatch(!!isOpen);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThModal \n ref={ fullScreenBodyRef }\n focusOptions={{\n withinRef: focusWithinRef ?? fullScreenBodyRef,\n trackedState: isOpen,\n fallbackRef: fullScreenCloseRef,\n updateState: resetFocus\n }}\n compounds={{\n dialog: {\n className: sheetStyles.sheetDialog\n }\n }}\n isOpen={ isOpen }\n onOpenChange={ onOpenChange }\n isDismissable={ true }\n className={ classNames(sheetStyles.fullScreenSheet, className) }\n isKeyboardDismissDisabled={ dismissEscapeKeyClose }\n style={{\n \"--sheet-sticky-header\": fullScreenHeaderRef.current ? `${ fullScreenHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ fullScreenHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous\n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" }\n label={ Locale.reader.app.back.trigger }\n ref={ fullScreenCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n />\n : <ThCloseButton\n ref={ fullScreenCloseRef }\n className={ readerSharedUI.closeButton } \n aria-label={ Locale.reader.app.docker.close.trigger } \n onPress={ onClosePress }\n />\n }\n </ThContainerHeader>\n <ThContainerBody \n ref={ fullScreenBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThModal>\n </>\n )\n }\n}","\"use client\";\n\nimport React, { useCallback, useRef } from \"react\";\n\nimport Locale from \"../../resources/locales/en.json\";\n\nimport { StatefulSheet } from \"./models/sheets\";\nimport { ThDockingKeys, ThSheetHeaderVariant, ThLayoutDirection } from \"@/preferences/models/enums\";\n\nimport sheetStyles from \"./assets/styles/sheets.module.css\";\nimport readerSharedUI from \"../assets/styles/readerSharedUI.module.css\";\n\nimport { ThDockedPanel } from \"@/core/Components/Containers/ThDockedPanel\";\nimport { ThContainerHeader } from \"@/core/Components/Containers/ThContainerHeader\";\nimport { ThContainerBody } from \"@/core/Components/Containers/ThContainerBody\";\nimport { StatefulDocker } from \"../Docking/StatefulDocker\";\nimport { ThNavigationButton } from \"@/core/Components/Buttons/ThNavigationButton\";\n\nimport { useAppSelector } from \"@/lib/hooks\";\n\nimport classNames from \"classnames\";\n\nexport interface StatefulDockedSheetProps extends StatefulSheet {\n flow: ThDockingKeys.start | ThDockingKeys.end | null;\n}\n\nexport const StatefulDockedSheet = ({ \n id,\n heading,\n headerVariant,\n className, \n isOpen,\n onClosePress,\n docker, \n flow,\n children,\n resetFocus,\n focusWithinRef\n}: StatefulDockedSheetProps) => {\n const dockPortal = flow && document.getElementById(flow);\n const dockedSheetHeaderRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetBodyRef = useRef<HTMLDivElement | null>(null);\n const dockedSheetCloseRef = useRef<HTMLButtonElement | null>(null);\n\n const direction = useAppSelector(state => state.reader.direction);\n\n const classFromFlow = useCallback(() => {\n if (flow === ThDockingKeys.start) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetLeftBorder : sheetStyles.dockedSheetRightBorder;\n } else if (flow === ThDockingKeys.end) {\n return direction === ThLayoutDirection.ltr ? sheetStyles.dockedSheetRightBorder : sheetStyles.dockedSheetLeftBorder;\n }\n }, [flow, direction]);\n\n if (React.Children.toArray(children).length > 0) {\n return(\n <>\n <ThDockedPanel\n isOpen={ isOpen }\n portal={ dockPortal }\n focusOptions={ {\n withinRef: focusWithinRef ?? dockedSheetBodyRef, \n trackedState: isOpen, \n fallbackRef: dockedSheetCloseRef,\n autoFocus: false,\n updateState: resetFocus\n }}\n className={ classNames(sheetStyles.dockedSheet, className, classFromFlow()) }\n style={{\n \"--sheet-sticky-header\": dockedSheetHeaderRef.current ? `${ dockedSheetHeaderRef.current.clientHeight }px` : undefined\n }}\n >\n <ThContainerHeader \n ref={ dockedSheetHeaderRef }\n className={ sheetStyles.sheetHeader }\n label={ heading }\n compounds={{\n heading: {\n className: sheetStyles.sheetHeading\n }\n }}\n >\n { headerVariant === ThSheetHeaderVariant.previous \n ? <ThNavigationButton\n direction={ direction === \"ltr\" ? \"left\" : \"right\" } \n label={ Locale.reader.app.back.trigger }\n ref={ dockedSheetCloseRef }\n className={ classNames(className, readerSharedUI.backButton) } \n aria-label={ Locale.reader.app.back.trigger }\n onPress={ onClosePress }\n /> \n : <StatefulDocker \n id={ id }\n keys={ docker || [] }\n ref={ dockedSheetCloseRef }\n onClose={ onClosePress }\n />\n } \n </ThContainerHeader>\n <ThContainerBody \n ref={ dockedSheetBodyRef }\n className={ sheetStyles.sheetBody }\n >\n { children }\n </ThContainerBody>\n </ThDockedPanel>\n </>\n )\n }\n}","\"use client\";\n\nimport { ReactNode } from \"react\";\n\nimport { ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { ThTypedComponentRenderer } from \"@/core/Components/Containers/ThTypedComponentRenderer\";\nimport { StatefulPopoverSheet, StatefulPopoverSheetProps } from \"./StatefulPopoverSheet\";\nimport { StatefulBottomSheet, StatefulBottomSheetProps } from \"./StatefulBottomSheet\";\nimport { StatefulFullScreenSheet, StatefulFullScreenSheetProps } from \"./StatefulFullScreenSheet\";\nimport { StatefulDockedSheet, StatefulDockedSheetProps } from \"./StatefulDockedSheet\";\n\nconst componentMap = {\n [ThSheetTypes.popover]: StatefulPopoverSheet,\n [ThSheetTypes.bottomSheet]: StatefulBottomSheet,\n [ThSheetTypes.fullscreen]: StatefulFullScreenSheet,\n [ThSheetTypes.dockedStart]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.start } />,\n [ThSheetTypes.dockedEnd]: (props: StatefulDockedSheetProps) => <StatefulDockedSheet { ...props } flow={ ThDockingKeys.end } />\n};\n\nexport const StatefulSheetWrapper = ({\n sheetType,\n sheetProps,\n children\n}: {\n sheetType: ThSheetTypes,\n sheetProps: StatefulPopoverSheetProps | StatefulFullScreenSheetProps | StatefulDockedSheetProps | StatefulBottomSheetProps,\n children: ReactNode\n}) => {\n\n return (\n <ThTypedComponentRenderer\n type={ sheetType }\n componentMap={ componentMap }\n props={ sheetProps }\n >\n { children }\n </ThTypedComponentRenderer>\n );\n}","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { BreakpointsMap } from \"@/core/Hooks/useBreakpoints\";\nimport { ThDockingTypes, ThDockingKeys, ThSheetTypes } from \"@/preferences/models/enums\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { makeBreakpointsMap } from \"@/core/Helpers/breakpointsMap\";\nimport { dockAction, setActionOpen } from \"@/lib/actionsReducer\";\n\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\nimport { useActions } from \"@/core/Components/Actions/hooks/useActions\";\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nlet dockingMap: Required<BreakpointsMap<ThDockingTypes>> | null = null;\n\nexport const useDocking = <T extends string>(key: T) => {\n const RSPrefs = usePreferences();\n const breakpoint = useAppSelector(state => state.theming.breakpoint);\n const actionsMap = useAppSelector(state => state.actions.keys);\n const actionState = actionsMap[key];\n const dispatch = useAppDispatch();\n\n const actions = useActions(actionsMap);\n\n if (!dockingMap) {\n dockingMap = makeBreakpointsMap<ThDockingTypes>({\n defaultValue: ThDockingTypes.both, \n fromEnum: ThDockingTypes, \n pref: RSPrefs.docking.dock, \n disabledValue: ThDockingTypes.none \n });\n }\n const currentDockConfig = breakpoint && dockingMap[breakpoint];\n \n // Use type assertion to tell TypeScript that the key is valid\n const dockablePref = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.docked?.dockable || ThDockingTypes.none;\n \n const defaultSheet = (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover;\n \n const sheetMap = makeBreakpointsMap<ThSheetTypes>({\n defaultValue: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.defaultSheet || ThSheetTypes.popover,\n fromEnum: ThSheetTypes,\n pref: (RSPrefs.actions.keys[key as keyof typeof RSPrefs.actions.keys])?.sheet?.breakpoints\n });\n const sheetPref = breakpoint && sheetMap[breakpoint] || defaultSheet;\n\n const [sheetType, setSheetType] = useState<ThSheetTypes>(defaultSheet);\n const previousSheetType = usePrevious(sheetType);\n\n // Checks whether the action can be docked: its pref should match the docking pref\n const canBeDocked = useCallback((slot: ThDockingTypes.start | ThDockingTypes.end) => {\n return (currentDockConfig === slot || currentDockConfig === ThDockingTypes.both) \n && (dockablePref === slot || dockablePref === ThDockingTypes.both);\n }, [currentDockConfig, dockablePref]);\n\n // Checks whether the sheet pref is of Dock type \n const isDockedSheetPref = useCallback((type?: ThSheetTypes.dockedStart | ThSheetTypes.dockedEnd) => {\n if (type) {\n return sheetPref === type;\n } else {\n return sheetPref === ThSheetTypes.dockedStart || sheetPref === ThSheetTypes.dockedEnd\n }\n }, [sheetPref]);\n \n // Builds the docker for the action based on all preferences\n const getDocker = useCallback((): ThDockingKeys[] => {\n // First let’s handle the cases where docker shouldn’t be used\n // The sheet is not dockable, per key.docked.dockable pref\n if (dockablePref === ThDockingTypes.none) return [];\n // There’s no docking slot available, per docking.dock pref\n if (currentDockConfig === ThDockingTypes.none) return [];\n // The sheet type is not compatible with docking\n if (sheetPref === ThSheetTypes.fullscreen || sheetPref === ThSheetTypes.bottomSheet) return [];\n\n // We can now build the docker from the display order\n let dockerKeys: ThDockingKeys[] = [];\n // In order for an action to be dockable, the dock slot has to exist\n // and the dockable preference of key.docked should match the values\n RSPrefs.docking.displayOrder.forEach((dockingKey: ThDockingKeys) => {\n switch(dockingKey) {\n case ThDockingKeys.transient:\n // We already handled both cases for none \n dockerKeys.push(dockingKey);\n break;\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n dockerKeys.push(dockingKey);\n }\n break;\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n dockerKeys.push(dockingKey);\n }\n break;\n default:\n break;\n }\n });\n\n // If the action can only be transient, then it can’t be docked\n if (dockerKeys.length === 1 && dockerKeys[0] === ThDockingKeys.transient) return [];\n\n return dockerKeys;\n }, [RSPrefs.docking.displayOrder, currentDockConfig, sheetPref, dockablePref, canBeDocked]);\n\n const getSheetType = useCallback(() => {\n // First check the dockable pref is none to return early\n if (dockablePref === ThDockingTypes.none) {\n // Sheet is of docked type, we return the default\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n // Sheet pref is not of docked type, we can return it\n return sheetPref;\n }\n };\n\n // We now need to check whether the user has docked the action themselves\n // ActionsReducer should has made sure there is no conflict to handle here \n // by updating states of actions on docking\n switch (actionState?.docking) {\n \n // if action.docking is transient we need to check the pref, \n // it can be docked and in that case we need to pick the default\n case ThDockingKeys.transient:\n if (isDockedSheetPref()) {\n return defaultSheet;\n } else {\n return sheetPref;\n }\n \n // If action.docking is set to start/end then we check the docking slot is available\n case ThDockingKeys.start:\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n // if the pref is not docked start, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedStart)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n\n case ThDockingKeys.end:\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n // if the pref is not docked end, return the pref \n // else return the default\n if (!isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n return sheetPref;\n } else {\n return defaultSheet;\n }\n }\n \n // If action.docking is null or undefined then we rely on pref \n // as it means the user did not pick another option\n case null:\n case undefined:\n // We have to check sheetPref is compatible with docking prefs\n if (isDockedSheetPref(ThSheetTypes.dockedStart)) {\n if (canBeDocked(ThDockingTypes.start)) {\n return ThSheetTypes.dockedStart;\n } else {\n return defaultSheet;\n }\n } else if (isDockedSheetPref(ThSheetTypes.dockedEnd)) {\n if (canBeDocked(ThDockingTypes.end)) {\n return ThSheetTypes.dockedEnd;\n } else {\n return defaultSheet;\n }\n } else {\n return sheetPref;\n }\n default:\n return defaultSheet;\n }\n }, [dockablePref, sheetPref, defaultSheet, actionState?.docking, canBeDocked, isDockedSheetPref]);\n\n // When docking or breakpoints-related prefs change, get the correct sheet type\n useEffect(() => {\n setSheetType(getSheetType());\n }, [sheetPref, currentDockConfig, actionState?.docking, getSheetType]);\n\n // Dismiss/Close when sheetType has changed from docked to transient\n useEffect(() => {\n // This was not dismissed on breakpoint change, but by the user\n if (actionState?.docking === ThDockingKeys.transient) return;\n\n if (sheetType !== ThSheetTypes.dockedStart && sheetType !== ThSheetTypes.dockedEnd) {\n if (previousSheetType === ThSheetTypes.dockedStart || previousSheetType === ThSheetTypes.dockedEnd) {\n dispatch(setActionOpen({\n key: key,\n isOpen: false\n }));\n }\n }\n }, [dispatch, key, sheetType, previousSheetType, actionState?.docking]);\n\n // on mount, check whether we should update states for docked sheets from pref\n useEffect(() => {\n if (actionState?.isOpen == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n dispatch(setActionOpen({\n key: key,\n isOpen: true\n }));\n }\n }\n });\n\n // Edge case where the sheet has been opened/closed and\n // is of dockable type, but the dock panel is not populated\n // e.g. action was mounted as a different type of sheet (breakpoint),\n // and opened/closed. If the user resizes the window (another breakpoint) \n // but we don’t dispatch docking, then it can’t be displayed \n // since the docking slot has never been populated.\n useEffect(() => {\n // Action has been opened/closed by user\n // but it’s not been manually docked, \n // which means the pref is used but \n // has not be instantiated yet, and \n // couldn’t be on first mount because\n // a different type was used in prefs\n if (actionState?.isOpen != null && actionState?.docking == null) {\n if (sheetType === ThSheetTypes.dockedStart) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.start) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.start\n }));\n }\n } else if (sheetType === ThSheetTypes.dockedEnd) {\n // Check if the action is docked in practice\n // if it isn’t dispatch docking of the action\n const dockingKey = actions.whichDocked(key);\n if (dockingKey !== ThDockingKeys.end) {\n dispatch(dockAction({\n key: key,\n dockingKey: ThDockingKeys.end\n }));\n }\n }\n }\n }, [dispatch, key, sheetType, actionState?.isOpen, actionState?.docking, actions]);\n\n return {\n getDocker,\n sheetType\n }\n}","\"use client\";\n\nimport React, { FormEvent, useCallback, useEffect, useState } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport jumpToPositionStyles from \"./assets/styles/jumpToPosition.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThForm } from \"@/core/Components/Form/ThForm\";\nimport { ThFormNumberField } from \"@/core/Components/Form/Fields/ThFormNumberField\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nimport parseTemplate from \"json-templates\";\n\nexport const StatefulJumpToPositionContainer = ({ \n triggerRef \n}: StatefulActionContainerProps) => {\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.jumpToPosition]);\n const positionsList = useAppSelector(state => state.publication.positionsList);\n\n // TODO: Update. We don’t have a timeline yet, so we use the progression we already have\n const positionNumbers = useAppSelector(state => state.publication.progression.currentPositions);\n\n const reducedMotion = useAppSelector(state => state.theming.prefersReducedMotion);\n const dispatch = useAppDispatch();\n\n const docking = useDocking(ThActionsKeys.jumpToPosition);\n const sheetType = docking.sheetType;\n\n const { go } = useEpubNavigator();\n\n // Component has to handle updates locally since EpubNavigator updates positions, \n // so we use these as an intermediary\n const [position, setPosition] = useState(0);\n\n // Position Numbers can be a range so we must check position is in range\n // And not only that the array simply includes the position\n const positionInRange = useCallback(() => {\n if (!positionNumbers) return false;\n return positionNumbers.length === 2\n ? position >= positionNumbers[0] && position <= positionNumbers[1]\n : position === positionNumbers[0];\n }, [position, positionNumbers]);\n\n // Label indicates the total number of positions for the book\n const makeFieldLabel = useCallback(() => {\n const jsonTemplate = parseTemplate(Locale.reader.jumpToPosition.label);\n return jsonTemplate({ positionStart: 1, positionEnd: positionsList.length });\n }, [positionsList]);\n\n const setOpen = useCallback((value: boolean) => {\n dispatch(setActionOpen({\n key: ThActionsKeys.jumpToPosition,\n isOpen: value\n }));\n }, [dispatch]);\n\n // NumberField onChange won’t fire if the value has been typed\n // so we need to handle the input manually\n const handleInput = useCallback((e: FormEvent<HTMLInputElement>) => {\n const target = e.target as HTMLInputElement;\n setPosition(parseInt(target.value));\n }, []);\n\n // This is a form submit handler so we have to preventDefault\n // We have to use this otherwise any change will trigger a navigation\n const handleAction = useCallback((e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n if (!positionsList) return;\n\n const item = positionsList.find(item => item.locations.position === position);\n\n if (!item || positionInRange()) return setOpen(false);\n\n go(item, !reducedMotion, () => setOpen(false));\n }, [position, positionsList, reducedMotion, positionInRange, go, setOpen]);\n\n // Since we are using an intermediary local state, we must keep track when positionNumbers changes\n useEffect(() => {\n positionNumbers && setPosition(positionNumbers[0]);\n }, [positionNumbers]);\n\n // In case there is no positions list we return\n if (!positionsList) return null;\n\n return (\n <>\n <StatefulSheetWrapper\n sheetType={sheetType}\n sheetProps={{\n id: ThActionsKeys.jumpToPosition,\n triggerRef: triggerRef,\n heading: Locale.reader.jumpToPosition.heading,\n className: jumpToPositionStyles.jumpToPosition,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker()\n }}\n >\n <ThForm\n label={ Locale.reader.jumpToPosition.go }\n className={ jumpToPositionStyles.jumpToPositionForm }\n onSubmit={ handleAction }\n compounds={{\n button: {\n className: jumpToPositionStyles.jumpToPositionButton,\n isDisabled: !position || positionInRange()\n }\n }}\n >\n <ThFormNumberField\n label={ makeFieldLabel() }\n name=\"jumpToPosition\"\n className={ jumpToPositionStyles.jumpToPositionNumberField }\n onChange={ setPosition }\n onInput={ handleInput }\n value={ position }\n minValue={ 1 }\n maxValue={ positionsList.length }\n step={ 1 }\n formatOptions={{ style: \"decimal\" }}\n isWheelDisabled={ true }\n compounds={{\n label: {\n className: jumpToPositionStyles.jumpToPositionLabel\n },\n input: {\n className: jumpToPositionStyles.jumpToPositionInput,\n inputMode: \"numeric\"\n }\n }}\n />\n </ThForm>\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgMatchCase = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z\" /></svg>;\nexport default SvgMatchCase;","\"use client\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport TuneIcon from \"./assets/icons/match_case.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { setHovering } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.settings.trigger }\n SVGIcon={ TuneIcon }\n shortcut={ RSPrefs.actions.keys[ThActionsKeys.settings].shortcut } \n id={ ThActionsKeys.settings }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.settings].visibility }\n aria-label={ Locale.reader.settings.trigger }\n placement=\"bottom\" \n tooltipLabel={ Locale.reader.settings.tooltip } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TuneIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","\"use client\";\n\nimport React, { useCallback, useEffect, useMemo } from \"react\";\n\nimport { \n defaultSpacingSettingsMain, \n defaultSpacingSettingsSubpanel, \n defaultTextSettingsMain, \n defaultTextSettingsSubpanel, \n usePreferenceKeys\n} from \"@/preferences\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { \n ThActionsKeys, \n ThSettingsContainerKeys, \n ThSheetHeaderVariant\n} from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\n\nimport settingsStyles from \"../../Settings/assets/styles/settings.module.css\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\n\nimport { StatefulSpacingGroupContainer } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextGroupContainer } from \"../../Epub/Settings/StatefulTextGroup\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\nimport { usePlugins } from \"@/components/Plugins/PluginProvider\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\n\nimport { setHovering, setSettingsContainer } from \"@/lib/readerReducer\";\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulSettingsContainer = ({ \n triggerRef\n}: StatefulActionContainerProps) => {\n const { \n fxlSettingsKeys, \n mainSpacingSettingsKeys,\n mainTextSettingsKeys,\n reflowSettingsKeys,\n subPanelSpacingSettingsKeys,\n subPanelTextSettingsKeys,\n } = usePreferenceKeys();\n const RSPrefs = usePreferences();\n const { settingsComponentsMap } = usePlugins();\n const isFXL = useAppSelector(state => state.publication.isFXL);\n const contains = useAppSelector(state => state.reader.settingsContainer);\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.settings]);\n const dispatch = useAppDispatch();\n\n const settingItems = useMemo(() => {\n return isFXL ? fxlSettingsKeys : reflowSettingsKeys\n }, [isFXL, fxlSettingsKeys, reflowSettingsKeys]);\n \n const docking = useDocking(ThActionsKeys.settings);\n const sheetType = docking.sheetType;\n\n const setOpen = (value: boolean) => { \n dispatch(setActionOpen({\n key: ThActionsKeys.settings,\n isOpen: value\n }));\n\n // hover false otherwise it tends to stay on close button press…\n if (!value) dispatch(setHovering(false));\n }\n\n const setInitial = useCallback(() => {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }, [dispatch]);\n\n const isTextNested = useCallback((key: string) => {\n const textSettings = [\n mainTextSettingsKeys || defaultTextSettingsMain,\n subPanelTextSettingsKeys || defaultTextSettingsSubpanel,\n ].flat() as string[];\n \n return textSettings.includes(key);\n }, [mainTextSettingsKeys, subPanelTextSettingsKeys]);\n \n const isSpacingNested = useCallback((key: string) => {\n const spacingSettings = [\n mainSpacingSettingsKeys || defaultSpacingSettingsMain,\n subPanelSpacingSettingsKeys || defaultSpacingSettingsSubpanel,\n ].flat() as string[];\n \n return spacingSettings.includes(key);\n }, [mainSpacingSettingsKeys, subPanelSpacingSettingsKeys]);\n\n const renderSettings = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return <StatefulTextGroupContainer />;\n \n case ThSettingsContainerKeys.spacing:\n return <StatefulSpacingGroupContainer />;\n\n case ThSettingsContainerKeys.initial:\n default:\n return (\n <>\n { settingItems.length > 0 && settingsComponentsMap \n ? settingItems\n .filter((key) => !(isTextNested(key) || isSpacingNested(key)))\n .map((key) => {\n const match = settingsComponentsMap[key];\n if (!match) {\n console.warn(`Action key \"${ key }\" not found in the plugin registry while present in preferences.`);\n return null;\n }\n return <match.Comp key={ key } { ...match.props } />;\n })\n : <></>\n }\n </>\n );\n }\n }, [settingsComponentsMap, contains, settingItems, isTextNested, isSpacingNested]);\n\n const getHeading = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return Locale.reader.settings.text.title;\n\n case ThSettingsContainerKeys.spacing:\n return Locale.reader.settings.spacing.title;\n\n case ThSettingsContainerKeys.initial:\n default:\n return Locale.reader.settings.heading;\n }\n }, [contains]);\n\n const getHeaderVariant = useCallback(() => {\n switch (contains) {\n case ThSettingsContainerKeys.text:\n return RSPrefs.settings.text?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.spacing:\n return RSPrefs.settings.spacing?.header || ThSheetHeaderVariant.close;\n\n case ThSettingsContainerKeys.initial:\n default:\n return ThSheetHeaderVariant.close;\n }\n }, [contains, RSPrefs.settings.spacing, RSPrefs.settings.text]);\n\nuseEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && contains !== ThSettingsContainerKeys.initial) {\n dispatch(setSettingsContainer(ThSettingsContainerKeys.initial));\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n}, [contains, dispatch]);\n\n\n // Reset when closed\n useEffect(() => {\n if (!actionState?.isOpen) setInitial();\n }, [actionState?.isOpen, setInitial]);\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.settings,\n triggerRef: triggerRef,\n heading: getHeading(),\n headerVariant: getHeaderVariant(),\n className: settingsStyles.readerSettings,\n placement: \"bottom\", \n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen, \n onClosePress: () => { contains === ThSettingsContainerKeys.initial ? setOpen(false) : setInitial() },\n docker: docking.getDocker(),\n resetFocus: contains,\n dismissEscapeKeyClose: contains !== ThSettingsContainerKeys.initial\n } }\n >\n { renderSettings() }\n </StatefulSheetWrapper>\n </>\n )\n}","import * as React from \"react\";\nconst SvgToc = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M120-280v-80h560v80H120Zm0-160v-80h560v80H120Zm0-160v-80h560v80H120Zm680 320q-17 0-28.5-11.5T760-320q0-17 11.5-28.5T800-360q17 0 28.5 11.5T840-320q0 17-11.5 28.5T800-280Zm0-160q-17 0-28.5-11.5T760-480q0-17 11.5-28.5T800-520q17 0 28.5 11.5T840-480q0 17-11.5 28.5T800-440Zm0-160q-17 0-28.5-11.5T760-640q0-17 11.5-28.5T800-680q17 0 28.5 11.5T840-640q0 17-11.5 28.5T800-600Z\" /></svg>;\nexport default SvgToc;","\"use client\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport TocIcon from \"./assets/icons/toc.svg\";\n\nimport { StatefulActionTriggerProps } from \"../models/actions\";\nimport { ThActionsTriggerVariant } from \"@/core/Components/Actions/ThActionsBar\";\n\nimport { StatefulActionIcon } from \"../Triggers/StatefulActionIcon\";\nimport { StatefulOverflowMenuItem } from \"../Triggers/StatefulOverflowMenuItem\";\n\nimport { usePreferences } from \"@/preferences/hooks/usePreferences\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\n\nexport const StatefulTocTrigger = ({ variant }: StatefulActionTriggerProps) => {\n const RSPrefs = usePreferences();\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const setOpen = (value: boolean) => {\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }\n\n return(\n <>\n { (variant && variant === ThActionsTriggerVariant.menu) \n ? <StatefulOverflowMenuItem \n label={ Locale.reader.toc.trigger }\n SVGIcon={ TocIcon } \n shortcut={ RSPrefs.actions.keys[ThActionsKeys.toc].shortcut }\n id={ ThActionsKeys.toc }\n onAction={ () => setOpen(!actionState?.isOpen) }\n />\n : <StatefulActionIcon \n visibility={ RSPrefs.actions.keys[ThActionsKeys.toc].visibility }\n aria-label={ Locale.reader.toc.trigger } \n placement=\"bottom\"\n tooltipLabel={ Locale.reader.toc.tooltip } \n onPress={ () => setOpen(!actionState?.isOpen) }\n >\n <TocIcon aria-hidden=\"true\" focusable=\"false\" />\n </StatefulActionIcon>\n }\n </>\n )\n}","import * as React from \"react\";\nconst SvgChevronRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"inherit\" {...props}><path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" /></svg>;\nexport default SvgChevronRight;","\"use client\";\n\nimport React, { CSSProperties, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport Locale from \"../../../resources/locales/en.json\";\n\nimport { Link } from \"@readium/shared\";\nimport { ThActionsKeys, ThDockingKeys, ThSheetTypes, ThLayoutDirection } from \"@/preferences/models/enums\";\nimport { StatefulActionContainerProps } from \"../models/actions\";\nimport { TocItem } from \"@/core/Hooks/useTimeline\";\n\nimport tocStyles from \"./assets/styles/toc.module.css\";\n\nimport Chevron from \"./assets/icons/chevron_right.svg\";\n\nimport { StatefulSheetWrapper } from \"../../Sheets/StatefulSheetWrapper\";\nimport { ThFormSearchField } from \"@/core/Components\";\nimport { Button, Collection, Selection, useFilter } from \"react-aria-components\";\nimport {\n Tree,\n TreeItem,\n TreeItemContent\n} from \"react-aria-components\";\n\nimport { useEpubNavigator } from \"@/core/Hooks/Epub/useEpubNavigator\";\nimport { useDocking } from \"../../Docking/hooks/useDocking\";\nimport { usePrevious } from \"@/core/Hooks/usePrevious\";\n\nimport { useAppDispatch, useAppSelector } from \"@/lib/hooks\";\nimport { setActionOpen } from \"@/lib/actionsReducer\";\nimport { setTocEntry } from \"@/lib/publicationReducer\";\nimport { setImmersive } from \"@/lib/readerReducer\";\n\nimport { isActiveElement } from \"@/core/Helpers/focusUtilities\";\n\nexport const StatefulTocContainer = ({ triggerRef }: StatefulActionContainerProps) => {\n const treeRef = useRef<HTMLDivElement | null>(null);\n\n const unstableTimeline = useAppSelector(state => state.publication.unstableTimeline);\n const tocEntry = unstableTimeline?.toc?.currentEntry;\n const tocTree = unstableTimeline?.toc?.tree;\n\n const direction = useAppSelector(state => state.reader.direction);\n const isRTL = direction === ThLayoutDirection.rtl;\n\n const actionState = useAppSelector(state => state.actions.keys[ThActionsKeys.toc]);\n const dispatch = useAppDispatch();\n\n const previousTocEntry = usePrevious(tocEntry);\n const [forceRerender, setForceRerender] = useState(0);\n\n const { goLink } = useEpubNavigator();\n\n const docking = useDocking(ThActionsKeys.toc);\n const sheetType = docking.sheetType;\n\n const { contains } = useFilter({ sensitivity: \"base\" });\n const [filterValue, setFilterValue] = React.useState(\"\");\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n\n const filterTocTree = (items: TocItem[], filterValue: string): TocItem[] => {\n if (!filterValue) {\n return items;\n }\n\n const recursiveFilter = (items: TocItem[]): TocItem[] => {\n return items.reduce((acc: TocItem[], item: TocItem) => {\n if (item.title && contains(item.title, filterValue)) {\n acc.push({ ...item, children: undefined });\n }\n if (item.children) {\n acc.push(...recursiveFilter(item.children));\n }\n return acc;\n }, []);\n };\n\n const result = recursiveFilter(items);\n return result.map((item: TocItem, index: number) => ({ ...item, key: `${item.id}-${index}` }));\n };\n\n const displayedTocTree = filterTocTree(tocTree || [], filterValue);\n\n const setOpen = useCallback((value: boolean) => {\n if (!value) setFilterValue(\"\");\n\n dispatch(setActionOpen({ \n key: ThActionsKeys.toc,\n isOpen: value \n }));\n }, [dispatch, setFilterValue]);\n\n const handleAction = (keys: Selection) => {\n if (keys === \"all\" || !keys || keys.size === 0) return;\n\n const key = [...keys][0];\n \n const el = document.querySelector(`[data-key=${key}]`);\n const href = el?.getAttribute(\"data-href\");\n\n if (!href) return;\n\n const link: Link = new Link({ href: href });\n\n const cb = actionState?.isOpen && \n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd)\n ? () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n } \n : () => {\n dispatch(setTocEntry(key));\n dispatch(setImmersive(true));\n setOpen(false);\n }\n\n goLink(link, true, cb);\n };\n\n // Since React Aria components intercept keys and do not continue propagation\n // we have to handle the escape key in capture phase\n useEffect(() => {\n if (actionState?.isOpen && (!actionState?.docking || actionState?.docking === ThDockingKeys.transient)) { \n const handleEscape = (event: KeyboardEvent) => {\n if ((!isActiveElement(searchInputRef.current) && !filterValue) && event.key === \"Escape\" ) {\n setOpen(false);\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape, true);\n\n return () => {\n document.removeEventListener(\"keydown\", handleEscape, true);\n };\n }\n }, [actionState, setOpen, filterValue]);\n\n // For docked sheets they are mounted before we could even retrieve tocEntry…\n // So we need to force a rerender as we cannot rely on dependencies prop\n // TODO: Once we handle fragments, etc. this can be removed, and we can add a condition\n // tocEntry has to be defined to render Tree\n useEffect(() => {\n if (\n (sheetType === ThSheetTypes.dockedStart || sheetType === ThSheetTypes.dockedEnd) && \n tocEntry !== undefined && \n (!previousTocEntry || previousTocEntry !== tocEntry)\n ) {\n setForceRerender(Math.random());\n }\n }, [sheetType, tocEntry, previousTocEntry]);\n\n const isItemInChildren = (item: TocItem, tocEntry?: string | null): boolean => {\n if (item.children && tocEntry) {\n return item.children.some(child => child.id === tocEntry || isItemInChildren(child, tocEntry));\n }\n return false;\n };\n\n return(\n <>\n <StatefulSheetWrapper \n sheetType={ sheetType }\n sheetProps={ {\n id: ThActionsKeys.toc,\n triggerRef: triggerRef, \n heading: Locale.reader.toc.heading,\n className: tocStyles.toc,\n placement: \"bottom\",\n isOpen: actionState?.isOpen || false,\n onOpenChange: setOpen,\n onClosePress: () => setOpen(false),\n docker: docking.getDocker(),\n focusWithinRef: treeRef\n } }\n >\n { tocTree && tocTree.length > 0 \n ? (<>\n <ThFormSearchField\n aria-label={ Locale.reader.toc.search.label }\n value={ filterValue }\n onChange={ setFilterValue }\n onClear={ () => setFilterValue(\"\") }\n className={ tocStyles.tocSearch }\n compounds={{\n label: {\n className: tocStyles.tocSearchLabel\n },\n input: {\n ref: searchInputRef,\n className: tocStyles.tocSearchInput,\n placeholder: Locale.reader.toc.search.placeholder\n },\n searchIcon: {\n className: tocStyles.tocSearchIcon,\n hidden: !!filterValue\n },\n clearButton: {\n className: tocStyles.tocClearButton,\n isDisabled: !filterValue\n }\n }}\n />\n <Tree\n // TODO: Remove this when we handle fragments\n key={ forceRerender }\n ref={ treeRef }\n aria-label={ Locale.reader.toc.entries }\n selectionMode=\"single\"\n items={ displayedTocTree }\n className={ tocStyles.tocTree }\n onSelectionChange={ handleAction }\n defaultSelectedKeys={ tocEntry ? [tocEntry] : [] }\n selectedKeys={ tocEntry ? [tocEntry] : [] }\n defaultExpandedKeys={ tocTree\n .filter(item => isItemInChildren(item, tocEntry))\n .map(item => item.id) \n }\n >\n { function renderItem(item) {\n return (\n <TreeItem\n data-href={ item.href }\n className={ tocStyles.tocTreeItem }\n textValue={ item.title || \"\" }\n >\n <TreeItemContent>\n {item.children && (\n <Button\n slot=\"chevron\"\n className={tocStyles.tocTreeItemButton}\n style={{ transform: isRTL ? \"scaleX(-1)\" : \"none\" } as CSSProperties}\n >\n <Chevron aria-hidden=\"true\" focusable=\"false\" />\n </Button>\n )}\n <div className={ tocStyles.tocTreeItemText }>\n <div className={ tocStyles.tocTreeItemTextTitle }>{ item.title }</div>\n { item.position && <div className={ tocStyles.tocTreeItemTextPosition }>{ item.position }</div> }\n </div>\n </TreeItemContent>\n <Collection items={ item.children }>\n { renderItem }\n </Collection>\n </TreeItem>\n );\n } }\n </Tree>\n </>) \n : <div className={ tocStyles.empty }>{ Locale.reader.toc.empty }</div>\n }\n </StatefulSheetWrapper>\n </>\n )\n}","import { ThPlugin } from \"../PluginRegistry\";\nimport { ThActionsKeys, ThSettingsKeys } from \"@/preferences/models/enums\";\n\nimport { StatefulFullscreenTrigger } from \"../../Actions/Fullscreen/StatefulFullscreenTrigger\";\nimport { StatefulJumpToPositionTrigger } from \"../../Actions/JumpToPosition/StatefulJumpToPositionTrigger\";\nimport { StatefulJumpToPositionContainer } from \"../../Actions/JumpToPosition/StatefulJumpToPositionContainer\";\nimport { StatefulSettingsTrigger } from \"../../Actions/Settings/StatefulSettingsTrigger\";\nimport { StatefulSettingsContainer } from \"../../Actions/Settings/StatefulSettingsContainer\";\nimport { StatefulTocTrigger } from \"../../Actions/Toc/StatefulTocTrigger\";\nimport { StatefulTocContainer } from \"../../Actions/Toc/StatefulTocContainer\";\n\nimport { StatefulColumns } from \"../../Epub/Settings/StatefulColumns\";\nimport { StatefulFontFamily } from \"../../Epub/Settings/StatefulFontFamily\";\nimport { StatefulFontWeight } from \"../../Epub/Settings/StatefulFontWeight\";\nimport { StatefulHyphens } from \"../../Epub/Settings/StatefulHyphens\";\nimport { StatefulLayout } from \"../../Epub/Settings/StatefulLayout\";\nimport { StatefulLetterSpacing } from \"../../Epub/Settings/StatefulLetterSpacing\";\nimport { StatefulLineHeight } from \"../../Epub/Settings/StatefulLineHeight\";\nimport { StatefulParagraphIndent } from \"../../Epub/Settings/StatefulParagraphIndent\";\nimport { StatefulParagraphSpacing } from \"../../Epub/Settings/StatefulParagraphSpacing\";\nimport { StatefulPublisherStyles } from \"../../Epub/Settings/StatefulPublisherStyles\";\nimport { StatefulSpacingGroup } from \"../../Epub/Settings/StatefulSpacingGroup\";\nimport { StatefulTextAlign } from \"../../Epub/Settings/StatefulTextAlign\";\nimport { StatefulTextGroup } from \"../../Epub/Settings/StatefulTextGroup\";\nimport { StatefulTextNormalize } from \"../../Epub/Settings/StatefulTextNormalize\";\nimport { StatefulTheme } from \"../../Epub/Settings/StatefulTheme\";\nimport { StatefulWordSpacing } from \"../../Epub/Settings/StatefulWordSpacing\";\nimport { StatefulZoom } from \"../../Epub/Settings/StatefulZoom\";\n\nexport const createDefaultPlugin = (): ThPlugin => {\n return {\n id: \"core\",\n name: \"Core Components\",\n description: \"Default components for Thorium Web StatefulReader\",\n version: \"1.0.0-beta.1\",\n components: {\n actions: {\n [ThActionsKeys.fullscreen]: {\n Trigger: StatefulFullscreenTrigger\n },\n [ThActionsKeys.jumpToPosition]: {\n Trigger: StatefulJumpToPositionTrigger,\n Target: StatefulJumpToPositionContainer\n },\n [ThActionsKeys.settings]: {\n Trigger: StatefulSettingsTrigger,\n Target: StatefulSettingsContainer\n },\n [ThActionsKeys.toc]: {\n Trigger: StatefulTocTrigger,\n Target: StatefulTocContainer\n }\n },\n settings: {\n [ThSettingsKeys.columns]: {\n Comp: StatefulColumns\n },\n [ThSettingsKeys.fontFamily]: {\n Comp: StatefulFontFamily,\n type: \"text\"\n },\n [ThSettingsKeys.fontWeight]: {\n Comp: StatefulFontWeight,\n type: \"text\"\n },\n [ThSettingsKeys.hyphens]: {\n Comp: StatefulHyphens,\n type: \"text\"\n },\n [ThSettingsKeys.layout]: {\n Comp: StatefulLayout\n },\n [ThSettingsKeys.letterSpacing]: {\n Comp: StatefulLetterSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.lineHeight]: {\n Comp: StatefulLineHeight,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphIndent]: {\n Comp: StatefulParagraphIndent,\n type: \"spacing\"\n },\n [ThSettingsKeys.paragraphSpacing]: {\n Comp: StatefulParagraphSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.publisherStyles]: {\n Comp: StatefulPublisherStyles,\n type: \"spacing\"\n },\n [ThSettingsKeys.spacingGroup]: {\n Comp: StatefulSpacingGroup,\n },\n [ThSettingsKeys.textAlign]: {\n Comp: StatefulTextAlign,\n type: \"text\"\n },\n [ThSettingsKeys.textGroup]: {\n Comp: StatefulTextGroup\n },\n [ThSettingsKeys.textNormalize]: {\n Comp: StatefulTextNormalize,\n type: \"text\"\n },\n [ThSettingsKeys.theme]: {\n Comp: StatefulTheme,\n props: {\n mapArrowNav: 2\n }\n },\n [ThSettingsKeys.wordSpacing]: {\n Comp: StatefulWordSpacing,\n type: \"spacing\"\n },\n [ThSettingsKeys.zoom]: {\n Comp: StatefulZoom\n }\n }\n }\n };\n};","// Peripherals based on XBReader\nimport { ThActionsPref } from \"@/preferences\";\n\nimport { ThActionsKeys } from \"@/preferences/models/enums\";\n\nimport { buildShortcut, UnstablePShortcut } from \"@/core/Helpers/keyboardUtilities\";\nimport { isInteractiveElement } from \"@/core/Helpers/focusUtilities\";\n\nimport { useAppStore } from \"@/lib/hooks\";\n\nexport interface PCallbacks {\n moveTo: (direction: \"left\" | \"right\" | \"up\" | \"down\" | \"home\" | \"end\") => void;\n goProgression: (shiftKey?: boolean) => void;\n toggleAction: (action: ThActionsKeys) => void;\n}\n\nexport interface PShortcuts {\n [key: string]: {\n actionKey: ThActionsKeys;\n modifiers: UnstablePShortcut[\"modifiers\"];\n }\n}\n\nexport default class Peripherals {\n private readonly observers = [\"keydown\"];\n private targets: EventTarget[] = [];\n private readonly callbacks: PCallbacks;\n private readonly store: ReturnType<typeof useAppStore>;\n private readonly actionsPref: ThActionsPref<ThActionsKeys> | undefined;\n private readonly shortcuts: PShortcuts;\n\n constructor(store: ReturnType<typeof useAppStore>, actionsPref: ThActionsPref<ThActionsKeys> | undefined, callbacks: PCallbacks) {\n this.observers.forEach((method) => {\n (this as any)[\"on\" + method] = (this as any)[\"on\" + method].bind(this);\n });\n this.store = store;\n this.actionsPref = actionsPref;\n this.callbacks = callbacks;\n this.shortcuts = this.retrieveShortcuts();\n }\n\n private getPlatformModifier(): \"ctrlKey\" | \"metaKey\" {\n return this.store.getState().reader.platformModifier.modifier;\n }\n\n private retrieveShortcuts() {\n if (!this.actionsPref) return {};\n\n const shortcutsObj: PShortcuts = {};\n\n const displayOrder = this.store.getState().publication.isFXL\n ? this.actionsPref.fxlOrder\n : this.actionsPref.reflowOrder;\n\n for (const actionKey of displayOrder) {\n const shortcutString = this.actionsPref.keys[actionKey as keyof typeof ThActionsKeys].shortcut;\n \n if (shortcutString) {\n const shortcutObj = buildShortcut(shortcutString);\n\n if (shortcutObj?.key) {\n Object.defineProperty(shortcutsObj, shortcutObj.key, {\n value: {\n actionKey: actionKey,\n modifiers: shortcutObj.modifiers\n },\n writable: false,\n enumerable: true\n });\n }\n }\n };\n \n return shortcutsObj;\n }\n\n destroy() {\n this.targets.forEach((t) => this.unobserve(t));\n }\n\n unobserve(item: EventTarget) {\n if (!item) return;\n this.observers.forEach((EventName) => {\n item.removeEventListener(\n EventName,\n (this as any)[\"on\" + EventName],\n false\n );\n });\n this.targets = this.targets.filter((t) => t !== item);\n }\n\n observe(item: EventTarget) {\n if (!item) return;\n if (this.targets.includes(item)) return;\n this.observers.forEach((EventName) => {\n item.addEventListener(EventName, (this as any)[\"on\" + EventName], false);\n });\n this.targets.push(item);\n }\n\n onkeydown(e: KeyboardEvent) {\n const focusIsSafe = !isInteractiveElement(document.activeElement);\n \n switch(e.code) {\n case \"Space\":\n focusIsSafe && this.callbacks.goProgression(e.shiftKey);\n break;\n case \"ArrowRight\":\n focusIsSafe && this.callbacks.moveTo(\"right\");\n break;\n case \"ArrowLeft\":\n focusIsSafe && this.callbacks.moveTo(\"left\");\n break;\n case \"ArrowUp\":\n case \"PageUp\":\n focusIsSafe && this.callbacks.moveTo(\"up\");\n break;\n case \"ArrowDown\":\n case \"PageDown\":\n focusIsSafe && this.callbacks.moveTo(\"down\");\n break;\n case \"Home\":\n focusIsSafe && this.callbacks.moveTo(\"home\");\n break;\n case \"End\":\n focusIsSafe && this.callbacks.moveTo(\"end\");\n break;\n default:\n if (this.shortcuts.hasOwnProperty(e.code)) {\n const customShortcutObj = this.shortcuts[e.code];\n const sendCallback = Object.entries(customShortcutObj.modifiers).every(( [modifier, value] ) => {\n if (modifier === \"platformKey\") {\n return e[this.getPlatformModifier()] === value;\n } else {\n return e[modifier as \"altKey\" | \"ctrlKey\" | \"metaKey\" | \"shiftKey\"] === value;\n }\n })\n \n if (sendCallback) {\n e.preventDefault();\n this.callbacks.toggleAction(customShortcutObj.actionKey)\n };\n }\n break;\n }\n }\n}","import { Locator } from \"@readium/shared\";\n\n export const deserializePositions = (positionsList?: Locator[]) => {\n return positionsList?.map((locator) => ({\n href: locator.href,\n type: locator.type,\n locations: {\n position: locator.locations.position,\n progression: locator.locations.progression,\n totalProgression: locator.locations.totalProgression\n },\n }));\n };","import { ReactNode } from \"react\";\n\nimport Locale from \"../resources/locales/en.json\";\n\nimport readerLoaderStyles from \"./assets/styles/readerLoader.module.css\";\n\nimport { ThLoader } from \"@/core/Components/Reader/ThLoader\";\n\nexport const StatefulLoader = ({ isLoading, children }: { isLoading: boolean, children: ReactNode }) => {\n return (\n <>\n <ThLoader \n isLoading={ isLoading } \n loader={ <div className={ readerLoaderStyles.readerLoader}>{ Locale.reader.app.loading }</div> } \n className={ readerLoaderStyles.readerLoaderWrapper } \n >\n { children }\n </ThLoader>\n </>\n )\n}","\"use client\";\n\nimport React, { cloneElement, isValidElement } from \"react\";\n\nimport publicationGridStyles from \"./assets/styles/publicationGrid.module.css\";\n\nimport { ThGrid } from \"@/core/Components\";\nimport { Link } from \"react-aria-components\";\n\nimport classNames from \"classnames\";\n\nexport const DefaultImage = ({\n src,\n alt = \"\"\n}: {\n src: string;\n alt?: string;\n}) => (\n <img\n src={ src }\n alt={ alt }\n className={ publicationGridStyles.publicationImage }\n loading=\"lazy\"\n />\n);\n\nexport interface Publication {\n title: string;\n author: string;\n cover: string;\n url: string;\n rendition?: string;\n}\n\nexport interface PublicationGridProps {\n publications: Publication[];\n columnWidth?: number;\n gap?: string;\n renderCover?: (publication: Publication) => React.ReactElement<React.ImgHTMLAttributes<HTMLImageElement>>;\n}\n\nexport const PublicationGrid = ({ \n publications,\n columnWidth = 400,\n gap = \"1.5rem\",\n renderCover = (publication) => (\n <DefaultImage\n src={ publication.cover }\n alt=\"\"\n />\n ),\n}: PublicationGridProps) => {\n const renderCoverWithClass = (publication: Publication) => {\n const cover = renderCover(publication);\n \n if (!isValidElement<React.ImgHTMLAttributes<HTMLImageElement>>(cover)) {\n return (\n <DefaultImage\n src={ publication.cover }\n alt=\"\"\n />\n );\n }\n\n return cloneElement(cover, {\n className: classNames(\n publicationGridStyles.publicationImage,\n cover.props.className\n )\n });\n };\n\n return (\n <ThGrid\n className={ publicationGridStyles.publicationGrid }\n items={ publications }\n columnWidth={ columnWidth }\n gap={ gap }\n renderItem={ (publication, index) => (\n <Link\n href={ publication.url }\n key={ index }\n className={ publicationGridStyles.publicationCard }\n >\n <figure className={ publicationGridStyles.publicationCover }>\n { renderCoverWithClass(publication) }\n </figure>\n <div className={ publicationGridStyles.publicationInfo }>\n <h2 className={ publicationGridStyles.publicationTitle }>\n { publication.title }\n </h2>\n <p className={ publicationGridStyles.publicationAuthor }>\n { publication.author }\n </p>\n { publication.rendition && (\n <p className={ publicationGridStyles.publicationRendition }>\n { publication.rendition }\n </p>\n ) }\n </div>\n </Link>\n ) }\n />\n );\n};","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Link } from \"@readium/shared\";\nimport { HttpFetcher } from \"@readium/shared\";\n\nexport interface UsePublicationOptions {\n url: string;\n onError?: (error: string) => void;\n}\n\nexport function usePublication({ url, onError = () => {} }: UsePublicationOptions) {\n const [error, setError] = useState(\"\");\n const [manifest, setManifest] = useState<object | undefined>(undefined);\n const [selfLink, setSelfLink] = useState<string | undefined>(undefined);\n\n // Basic URL validation and loading\n useEffect(() => {\n if (!url) {\n setError(\"Manifest URL is required\");\n return;\n }\n\n // Decode URL if needed\n const decodedUrl = decodeURIComponent(url);\n const manifestLink = new Link({ href: decodedUrl });\n const fetcher = new HttpFetcher(undefined);\n\n try {\n const fetched = fetcher.get(manifestLink);\n \n // Get self-link first\n fetched.link().then((link) => {\n setSelfLink(link.toURL(decodedUrl));\n });\n\n // Then get manifest data\n fetched.readAsJSON().then((manifestData) => {\n setManifest(manifestData as object);\n }).catch((error) => {\n console.error(\"Error loading manifest:\", error);\n setError(`Failed loading manifest ${ decodedUrl }: ${ error instanceof Error ? error.message : \"Unknown error\" }`);\n });\n } catch (error: unknown) {\n console.error(\"Error loading manifest:\", error);\n setError(`Failed loading manifest ${ decodedUrl }: ${ error instanceof Error ? error.message : \"Unknown error\" }`);\n }\n }, [url]);\n\n // Call onError callback when error changes\n useEffect(() => {\n if (error) {\n onError(error);\n }\n }, [error, onError]);\n\n return {\n error,\n manifest,\n selfLink\n };\n}\n"]}