@foxycape/core 1.1.3 → 1.1.5

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 (502) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  2. package/dist/core.css +2 -1
  3. package/dist/kernal/Constants.cjs +1 -1
  4. package/dist/kernal/Constants.mjs +4 -12
  5. package/dist/kernal/ContentRange.cjs +1 -1
  6. package/dist/kernal/ContentRange.mjs +4 -6
  7. package/dist/kernal/Context.cjs +1 -1
  8. package/dist/kernal/Context.mjs +31 -35
  9. package/dist/kernal/Debounce.cjs +1 -1
  10. package/dist/kernal/Debounce.mjs +31 -37
  11. package/dist/kernal/EventEmitter.cjs +1 -1
  12. package/dist/kernal/EventEmitter.mjs +58 -67
  13. package/dist/kernal/EventNames.cjs +1 -1
  14. package/dist/kernal/EventNames.mjs +178 -6
  15. package/dist/kernal/FileLoader.cjs +1 -1
  16. package/dist/kernal/FileLoader.d.ts +2 -0
  17. package/dist/kernal/FileLoader.mjs +91 -94
  18. package/dist/kernal/IDisposable.cjs +0 -1
  19. package/dist/kernal/IDisposable.mjs +0 -1
  20. package/dist/kernal/IDocument.cjs +1 -1
  21. package/dist/kernal/IDocument.mjs +12 -36
  22. package/dist/kernal/IDocumentsProvider.cjs +0 -1
  23. package/dist/kernal/IDocumentsProvider.mjs +0 -1
  24. package/dist/kernal/IEventEmitter.cjs +0 -1
  25. package/dist/kernal/IEventEmitter.mjs +0 -1
  26. package/dist/kernal/IFileParser.cjs +1 -1
  27. package/dist/kernal/IFileParser.mjs +12 -21
  28. package/dist/kernal/IRenderer.cjs +0 -1
  29. package/dist/kernal/IRenderer.mjs +0 -1
  30. package/dist/kernal/IRendererViewport.cjs +1 -1
  31. package/dist/kernal/IRendererViewport.mjs +4 -5
  32. package/dist/kernal/IStyleProvider.cjs +0 -1
  33. package/dist/kernal/IStyleProvider.mjs +0 -1
  34. package/dist/kernal/ISymbolCalclator.cjs +0 -1
  35. package/dist/kernal/ISymbolCalclator.mjs +0 -1
  36. package/dist/kernal/ITextDocument.cjs +0 -1
  37. package/dist/kernal/ITextDocument.mjs +0 -1
  38. package/dist/kernal/IThemeProvider.cjs +0 -1
  39. package/dist/kernal/IThemeProvider.mjs +0 -1
  40. package/dist/kernal/IWallpaperProvider.cjs +1 -1
  41. package/dist/kernal/IWallpaperProvider.mjs +7 -7
  42. package/dist/kernal/JsonConvert.cjs +1 -1
  43. package/dist/kernal/JsonConvert.mjs +51 -56
  44. package/dist/kernal/LifecycleHooks.cjs +0 -1
  45. package/dist/kernal/LifecycleHooks.mjs +0 -1
  46. package/dist/kernal/LocationState.cjs +1 -1
  47. package/dist/kernal/LocationState.mjs +4 -5
  48. package/dist/kernal/MediaTypeRegistry.cjs +1 -1
  49. package/dist/kernal/MediaTypeRegistry.mjs +39 -64
  50. package/dist/kernal/Metadata.cjs +1 -1
  51. package/dist/kernal/Metadata.mjs +7 -7
  52. package/dist/kernal/OpenOptions.cjs +1 -1
  53. package/dist/kernal/OpenOptions.mjs +4 -5
  54. package/dist/kernal/Options.cjs +1 -1
  55. package/dist/kernal/Options.mjs +39 -16
  56. package/dist/kernal/OptionsProvider.cjs +1 -1
  57. package/dist/kernal/OptionsProvider.mjs +22 -24
  58. package/dist/kernal/Reader.cjs +1 -1
  59. package/dist/kernal/Reader.mjs +238 -284
  60. package/dist/kernal/ReaderInfo.cjs +1 -1
  61. package/dist/kernal/ReaderInfo.mjs +25 -31
  62. package/dist/kernal/Theme.cjs +1 -1
  63. package/dist/kernal/Theme.mjs +80 -29
  64. package/dist/kernal/common/array.cjs +1 -1
  65. package/dist/kernal/common/array.mjs +11 -13
  66. package/dist/kernal/common/buffer.cjs +1 -1
  67. package/dist/kernal/common/buffer.mjs +32 -43
  68. package/dist/kernal/common/data.cjs +1 -1
  69. package/dist/kernal/common/data.mjs +20 -13
  70. package/dist/kernal/common/date.cjs +1 -1
  71. package/dist/kernal/common/date.mjs +40 -50
  72. package/dist/kernal/common/encoding.cjs +1 -1
  73. package/dist/kernal/common/encoding.mjs +29 -36
  74. package/dist/kernal/common/geometry.cjs +1 -1
  75. package/dist/kernal/common/geometry.mjs +28 -30
  76. package/dist/kernal/common/mimetypes.cjs +1 -1
  77. package/dist/kernal/common/mimetypes.mjs +99 -34
  78. package/dist/kernal/common/naming.cjs +1 -1
  79. package/dist/kernal/common/naming.mjs +4 -4
  80. package/dist/kernal/common/number.cjs +1 -1
  81. package/dist/kernal/common/number.mjs +42 -53
  82. package/dist/kernal/common/object.cjs +1 -1
  83. package/dist/kernal/common/object.mjs +20 -25
  84. package/dist/kernal/common/path.cjs +1 -1
  85. package/dist/kernal/common/path.mjs +45 -52
  86. package/dist/kernal/common/regex.cjs +1 -1
  87. package/dist/kernal/common/regex.mjs +15 -25
  88. package/dist/kernal/common/text.cjs +4 -4
  89. package/dist/kernal/common/text.mjs +67 -88
  90. package/dist/kernal/common/tree.cjs +1 -1
  91. package/dist/kernal/common/tree.mjs +13 -13
  92. package/dist/kernal/common/url.cjs +1 -1
  93. package/dist/kernal/common/url.mjs +78 -104
  94. package/dist/kernal/common/uuid.cjs +1 -1
  95. package/dist/kernal/common/uuid.mjs +24 -28
  96. package/dist/kernal/crypto/ICrypto.cjs +1 -1
  97. package/dist/kernal/crypto/ICrypto.mjs +4 -5
  98. package/dist/kernal/crypto/MD5.cjs +1 -1
  99. package/dist/kernal/crypto/MD5.mjs +26 -34
  100. package/dist/kernal/crypto/WebCrypto.cjs +1 -1
  101. package/dist/kernal/crypto/WebCrypto.mjs +77 -105
  102. package/dist/kernal/deepClone/buffer.cjs +1 -1
  103. package/dist/kernal/deepClone/buffer.mjs +7 -25
  104. package/dist/kernal/deepClone/clone.cjs +1 -1
  105. package/dist/kernal/deepClone/clone.mjs +52 -116
  106. package/dist/kernal/deepClone/collection.cjs +1 -1
  107. package/dist/kernal/deepClone/collection.mjs +43 -56
  108. package/dist/kernal/deepClone/detector.cjs +1 -1
  109. package/dist/kernal/deepClone/detector.mjs +8 -16
  110. package/dist/kernal/deepClone/index.cjs +1 -1
  111. package/dist/kernal/deepClone/index.mjs +24 -38
  112. package/dist/kernal/device/IDevice.cjs +1 -1
  113. package/dist/kernal/device/IDevice.d.ts +0 -2
  114. package/dist/kernal/device/IDevice.mjs +4 -5
  115. package/dist/kernal/device/IEnvironment.cjs +0 -1
  116. package/dist/kernal/device/IEnvironment.mjs +0 -1
  117. package/dist/kernal/device/IPlatform.cjs +0 -1
  118. package/dist/kernal/device/IPlatform.mjs +0 -1
  119. package/dist/kernal/device/WebBrowser.cjs +1 -1
  120. package/dist/kernal/device/WebBrowser.d.ts +0 -1
  121. package/dist/kernal/device/WebBrowser.mjs +54 -65
  122. package/dist/kernal/device/WebEnvironment.cjs +1 -1
  123. package/dist/kernal/device/WebEnvironment.mjs +21 -21
  124. package/dist/kernal/device/WebPlatform.cjs +1 -1
  125. package/dist/kernal/device/WebPlatform.mjs +48 -63
  126. package/dist/kernal/html/detector.cjs +1 -1
  127. package/dist/kernal/html/detector.mjs +38 -46
  128. package/dist/kernal/html/dom.cjs +1 -0
  129. package/dist/kernal/html/dom.d.ts +3 -0
  130. package/dist/kernal/html/dom.mjs +13 -0
  131. package/dist/kernal/html/events.cjs +1 -1
  132. package/dist/kernal/html/events.mjs +62 -67
  133. package/dist/kernal/html/finder.cjs +1 -1
  134. package/dist/kernal/html/finder.mjs +93 -134
  135. package/dist/kernal/html/geometry.cjs +1 -1
  136. package/dist/kernal/html/geometry.mjs +340 -384
  137. package/dist/kernal/html/image.cjs +1 -1
  138. package/dist/kernal/html/image.mjs +166 -181
  139. package/dist/kernal/html/injector.cjs +3 -3
  140. package/dist/kernal/html/injector.mjs +92 -109
  141. package/dist/kernal/html/manipulator.cjs +1 -1
  142. package/dist/kernal/html/manipulator.mjs +96 -116
  143. package/dist/kernal/html/parser.cjs +1 -1
  144. package/dist/kernal/html/parser.mjs +61 -60
  145. package/dist/kernal/html/position.cjs +1 -1
  146. package/dist/kernal/html/position.mjs +146 -193
  147. package/dist/kernal/html/selection.cjs +7 -7
  148. package/dist/kernal/html/selection.mjs +206 -238
  149. package/dist/kernal/html/style.cjs +1 -1
  150. package/dist/kernal/html/style.mjs +59 -79
  151. package/dist/kernal/html/text.cjs +2 -2
  152. package/dist/kernal/html/text.mjs +50 -65
  153. package/dist/kernal/html/types.cjs +1 -1
  154. package/dist/kernal/html/types.mjs +7 -7
  155. package/dist/kernal/i18n/DefaultLocale.cjs +1 -1
  156. package/dist/kernal/i18n/DefaultLocale.mjs +36 -41
  157. package/dist/kernal/i18n/ILocale.cjs +1 -1
  158. package/dist/kernal/i18n/ILocale.mjs +7 -14
  159. package/dist/kernal/index.cjs +1 -1
  160. package/dist/kernal/index.mjs +44 -127
  161. package/dist/kernal/logger/DefaultLogger.cjs +1 -1
  162. package/dist/kernal/logger/DefaultLogger.mjs +67 -67
  163. package/dist/kernal/logger/ILogger.cjs +1 -1
  164. package/dist/kernal/logger/ILogger.mjs +2 -5
  165. package/dist/kernal/logger/ILoggerFactory.cjs +0 -1
  166. package/dist/kernal/logger/ILoggerFactory.mjs +0 -1
  167. package/dist/kernal/logger/LogLevel.cjs +1 -1
  168. package/dist/kernal/logger/LogLevel.mjs +33 -11
  169. package/dist/kernal/logger/LoggerFactory.cjs +1 -1
  170. package/dist/kernal/logger/LoggerFactory.mjs +12 -12
  171. package/dist/kernal/logo-160x160.cjs +1 -0
  172. package/dist/kernal/logo-160x160.mjs +4 -0
  173. package/dist/kernal/mark/IMarker.cjs +0 -1
  174. package/dist/kernal/mark/IMarker.mjs +0 -1
  175. package/dist/kernal/mark/Mark.cjs +1 -1
  176. package/dist/kernal/mark/Mark.mjs +18 -19
  177. package/dist/kernal/mark/MarkConstants.cjs +1 -1
  178. package/dist/kernal/mark/MarkConstants.mjs +4 -7
  179. package/dist/kernal/mark/index.cjs +1 -1
  180. package/dist/kernal/mark/index.mjs +3 -10
  181. package/dist/kernal/mark/types.cjs +0 -1
  182. package/dist/kernal/mark/types.mjs +0 -1
  183. package/dist/kernal/nav/INavPointProvider.cjs +0 -1
  184. package/dist/kernal/nav/INavPointProvider.mjs +0 -1
  185. package/dist/kernal/nav/Nav.cjs +1 -1
  186. package/dist/kernal/nav/Nav.mjs +16 -18
  187. package/dist/kernal/navigator/INavPointNavigator.cjs +0 -1
  188. package/dist/kernal/navigator/INavPointNavigator.mjs +0 -1
  189. package/dist/kernal/navigator/INavigator.cjs +1 -1
  190. package/dist/kernal/navigator/INavigator.mjs +4 -5
  191. package/dist/kernal/navigator/IPagingNavigator.cjs +1 -1
  192. package/dist/kernal/navigator/IPagingNavigator.mjs +4 -8
  193. package/dist/kernal/network/HttpClient.cjs +1 -1
  194. package/dist/kernal/network/HttpClient.mjs +121 -146
  195. package/dist/kernal/network/IHttpClient.cjs +1 -1
  196. package/dist/kernal/network/IHttpClient.mjs +4 -5
  197. package/dist/kernal/pipelines/FileLoadPipeline.cjs +1 -1
  198. package/dist/kernal/pipelines/FileLoadPipeline.mjs +65 -84
  199. package/dist/kernal/pipelines/InputFormatter.cjs +1 -1
  200. package/dist/kernal/pipelines/InputFormatter.mjs +140 -160
  201. package/dist/kernal/pipelines/metadata.cjs +1 -1
  202. package/dist/kernal/pipelines/metadata.mjs +44 -49
  203. package/dist/kernal/plugins/PluginCore.cjs +1 -1
  204. package/dist/kernal/plugins/PluginCore.mjs +7 -8
  205. package/dist/kernal/plugins/PluginManager.cjs +1 -1
  206. package/dist/kernal/plugins/PluginManager.mjs +79 -105
  207. package/dist/kernal/plugins/PluginRegistry.cjs +1 -1
  208. package/dist/kernal/plugins/PluginRegistry.mjs +55 -91
  209. package/dist/kernal/plugins/keyboard/KeyboardPageTurning.cjs +1 -1
  210. package/dist/kernal/plugins/keyboard/KeyboardPageTurning.mjs +134 -133
  211. package/dist/kernal/plugins/mouse/WheelPageTurning.cjs +1 -1
  212. package/dist/kernal/plugins/mouse/WheelPageTurning.mjs +134 -127
  213. package/dist/kernal/progress/IProgressTracker.cjs +0 -1
  214. package/dist/kernal/progress/IProgressTracker.mjs +0 -1
  215. package/dist/kernal/progress/IReadingProgressStore.cjs +0 -1
  216. package/dist/kernal/progress/IReadingProgressStore.mjs +0 -1
  217. package/dist/kernal/progress/Progress.cjs +1 -1
  218. package/dist/kernal/progress/Progress.mjs +23 -40
  219. package/dist/kernal/progress/ReadingProgressStore.cjs +1 -1
  220. package/dist/kernal/progress/ReadingProgressStore.mjs +16 -16
  221. package/dist/kernal/services/ServiceCollection.cjs +1 -1
  222. package/dist/kernal/services/ServiceCollection.mjs +63 -88
  223. package/dist/kernal/services/docLoadLayer/HtmlLoadLayer.cjs +2 -2
  224. package/dist/kernal/services/docLoadLayer/HtmlLoadLayer.d.ts +1 -1
  225. package/dist/kernal/services/docLoadLayer/HtmlLoadLayer.mjs +63 -68
  226. package/dist/kernal/services/docLoadLayer/IHtmlLoadLayer.cjs +0 -1
  227. package/dist/kernal/services/docLoadLayer/IHtmlLoadLayer.mjs +0 -1
  228. package/dist/kernal/services/file/IFileDecrypter.cjs +1 -1
  229. package/dist/kernal/services/file/IFileDecrypter.mjs +11 -24
  230. package/dist/kernal/services/file/IFileProvider.cjs +0 -1
  231. package/dist/kernal/services/file/IFileProvider.mjs +0 -1
  232. package/dist/kernal/services/file/IFileUrlProvider.cjs +0 -1
  233. package/dist/kernal/services/file/IFileUrlProvider.mjs +0 -1
  234. package/dist/kernal/services/fileUrlParser/DefaultFileUrlParser.cjs +1 -1
  235. package/dist/kernal/services/fileUrlParser/DefaultFileUrlParser.mjs +109 -118
  236. package/dist/kernal/services/fileUrlParser/IFileUrlParser.cjs +1 -1
  237. package/dist/kernal/services/fileUrlParser/IFileUrlParser.mjs +7 -10
  238. package/dist/kernal/services/font/IFontProvider.cjs +1 -1
  239. package/dist/kernal/services/font/IFontProvider.mjs +19 -33
  240. package/dist/kernal/services/internalUrlBuilder/DefaultInternalUrlBuilder.cjs +1 -1
  241. package/dist/kernal/services/internalUrlBuilder/DefaultInternalUrlBuilder.mjs +14 -21
  242. package/dist/kernal/services/internalUrlBuilder/IInternalUrlBuilder.cjs +0 -1
  243. package/dist/kernal/services/internalUrlBuilder/IInternalUrlBuilder.mjs +0 -1
  244. package/dist/kernal/services/loading/DefaultLoading.cjs +1 -1
  245. package/dist/kernal/services/loading/DefaultLoading.mjs +46 -41
  246. package/dist/kernal/services/loading/ILoading.cjs +1 -1
  247. package/dist/kernal/services/loading/ILoading.mjs +4 -5
  248. package/dist/kernal/services/notifier/DefaultNotifier.cjs +1 -1
  249. package/dist/kernal/services/notifier/DefaultNotifier.mjs +63 -65
  250. package/dist/kernal/services/notifier/INotifier.cjs +0 -1
  251. package/dist/kernal/services/notifier/INotifier.mjs +0 -1
  252. package/dist/kernal/services/notifier/notyf/index.cjs +1 -1
  253. package/dist/kernal/services/notifier/notyf/index.mjs +5 -13
  254. package/dist/kernal/services/notifier/notyf/notyf.cjs +1 -1
  255. package/dist/kernal/services/notifier/notyf/notyf.mjs +79 -97
  256. package/dist/kernal/services/notifier/notyf/notyf.models.cjs +1 -1
  257. package/dist/kernal/services/notifier/notyf/notyf.models.mjs +39 -41
  258. package/dist/kernal/services/notifier/notyf/notyf.options.cjs +1 -1
  259. package/dist/kernal/services/notifier/notyf/notyf.options.mjs +30 -30
  260. package/dist/kernal/services/notifier/notyf/notyf.view.cjs +1 -1
  261. package/dist/kernal/services/notifier/notyf/notyf.view.mjs +146 -177
  262. package/dist/kernal/services/text/ITextDecoder.cjs +0 -1
  263. package/dist/kernal/services/text/ITextDecoder.mjs +0 -1
  264. package/dist/kernal/services/text/splitter.cjs +5 -5
  265. package/dist/kernal/services/text/splitter.mjs +184 -207
  266. package/dist/kernal/shape/ShapeSorter.cjs +1 -1
  267. package/dist/kernal/shape/ShapeSorter.mjs +77 -77
  268. package/dist/kernal/shape/SimpleMatrix.cjs +1 -1
  269. package/dist/kernal/shape/SimpleMatrix.mjs +20 -13
  270. package/dist/kernal/shape/definitions.cjs +0 -1
  271. package/dist/kernal/shape/definitions.mjs +0 -1
  272. package/dist/kernal/storage/IStorage.cjs +1 -1
  273. package/dist/kernal/storage/IStorage.mjs +4 -5
  274. package/dist/kernal/storage/WebStorage.cjs +1 -1
  275. package/dist/kernal/storage/WebStorage.mjs +164 -201
  276. package/dist/kernal/types.cjs +0 -1
  277. package/dist/kernal/types.mjs +0 -1
  278. package/dist/kernal/web/BrowserCapabilities.cjs +1 -1
  279. package/dist/kernal/web/BrowserCapabilities.mjs +167 -191
  280. package/dist/kernal/web/ua.cjs +1 -1
  281. package/dist/kernal/web/ua.mjs +5 -5
  282. package/dist/mediaTypes/adjacent.cjs +1 -1
  283. package/dist/mediaTypes/adjacent.mjs +41 -48
  284. package/dist/mediaTypes/base/fileParser/BaseFileParser.cjs +1 -1
  285. package/dist/mediaTypes/base/fileParser/BaseFileParser.mjs +184 -227
  286. package/dist/mediaTypes/base/index.cjs +1 -1
  287. package/dist/mediaTypes/base/index.mjs +4 -8
  288. package/dist/mediaTypes/base/renderer/BaseDocument.cjs +1 -1
  289. package/dist/mediaTypes/base/renderer/BaseDocument.mjs +41 -49
  290. package/dist/mediaTypes/base/renderer/BaseDocumentsProvider.cjs +1 -1
  291. package/dist/mediaTypes/base/renderer/BaseDocumentsProvider.mjs +64 -71
  292. package/dist/mediaTypes/base/renderer/eventKeys.cjs +1 -1
  293. package/dist/mediaTypes/base/renderer/eventKeys.mjs +7 -7
  294. package/dist/mediaTypes/html/HtmlOptions.cjs +1 -1
  295. package/dist/mediaTypes/html/HtmlOptions.mjs +34 -12
  296. package/dist/mediaTypes/html/HtmlSettings.cjs +1 -1
  297. package/dist/mediaTypes/html/HtmlSettings.mjs +43 -6
  298. package/dist/mediaTypes/html/fileParser/HtmlFileParser.cjs +1 -1
  299. package/dist/mediaTypes/html/fileParser/HtmlFileParser.mjs +52 -54
  300. package/dist/mediaTypes/html/fileParser/HtmlTextDocument.cjs +1 -1
  301. package/dist/mediaTypes/html/fileParser/HtmlTextDocument.mjs +52 -57
  302. package/dist/mediaTypes/html/fileParser/IHtmlFileParser.cjs +0 -1
  303. package/dist/mediaTypes/html/fileParser/IHtmlFileParser.mjs +0 -1
  304. package/dist/mediaTypes/html/renderer/HtmlRenderer.cjs +1 -1
  305. package/dist/mediaTypes/html/renderer/HtmlRenderer.mjs +89 -89
  306. package/dist/mediaTypes/html/renderer/IHtmlDocument.cjs +0 -1
  307. package/dist/mediaTypes/html/renderer/IHtmlDocument.mjs +0 -1
  308. package/dist/mediaTypes/html/renderer/IHtmlDocumentsProvider.cjs +0 -1
  309. package/dist/mediaTypes/html/renderer/IHtmlDocumentsProvider.mjs +0 -1
  310. package/dist/mediaTypes/html/renderer/IHtmlRenderer.cjs +0 -1
  311. package/dist/mediaTypes/html/renderer/IHtmlRenderer.mjs +0 -1
  312. package/dist/mediaTypes/html/renderer/IHtmlTextDocument.cjs +0 -1
  313. package/dist/mediaTypes/html/renderer/IHtmlTextDocument.mjs +0 -1
  314. package/dist/mediaTypes/html/renderer/document/HtmlDocument.cjs +1 -1
  315. package/dist/mediaTypes/html/renderer/document/HtmlDocument.mjs +183 -196
  316. package/dist/mediaTypes/html/renderer/document/HtmlDocumentResizeObserver.cjs +1 -1
  317. package/dist/mediaTypes/html/renderer/document/HtmlDocumentResizeObserver.mjs +28 -28
  318. package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.cjs +1 -1
  319. package/dist/mediaTypes/html/renderer/document/HtmlPageCalculator.mjs +77 -82
  320. package/dist/mediaTypes/html/renderer/document/HtmlSymbolCalclator.cjs +1 -1
  321. package/dist/mediaTypes/html/renderer/document/HtmlSymbolCalclator.mjs +87 -97
  322. package/dist/mediaTypes/html/renderer/documents/HtmlContainerBuilder.cjs +1 -1
  323. package/dist/mediaTypes/html/renderer/documents/HtmlContainerBuilder.mjs +49 -64
  324. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsIntersectionObserver.cjs +1 -1
  325. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsIntersectionObserver.mjs +29 -32
  326. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsPreloader.cjs +1 -1
  327. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsPreloader.mjs +76 -84
  328. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.cjs +1 -1
  329. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.d.ts +2 -1
  330. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsProvider.mjs +185 -208
  331. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsResizeObserver.cjs +1 -1
  332. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsResizeObserver.d.ts +2 -1
  333. package/dist/mediaTypes/html/renderer/documents/HtmlDocumentsResizeObserver.mjs +39 -41
  334. package/dist/mediaTypes/html/renderer/documents/IHtmlDocumentsPreloader.cjs +0 -1
  335. package/dist/mediaTypes/html/renderer/documents/IHtmlDocumentsPreloader.mjs +0 -1
  336. package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.cjs +1 -1
  337. package/dist/mediaTypes/html/renderer/html/HtmlContentProcessor.mjs +130 -182
  338. package/dist/mediaTypes/html/renderer/html/IHtmlContentProcessor.cjs +0 -1
  339. package/dist/mediaTypes/html/renderer/html/IHtmlContentProcessor.mjs +0 -1
  340. package/dist/mediaTypes/html/renderer/html/template.cjs +1 -1
  341. package/dist/mediaTypes/html/renderer/html/template.mjs +13 -16
  342. package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.cjs +1 -1
  343. package/dist/mediaTypes/html/renderer/image/HtmlImageLoader.mjs +371 -447
  344. package/dist/mediaTypes/html/renderer/image/HtmlImageObserver.cjs +1 -1
  345. package/dist/mediaTypes/html/renderer/image/HtmlImageObserver.mjs +91 -103
  346. package/dist/mediaTypes/html/renderer/image/IHtmlImageLoader.cjs +0 -1
  347. package/dist/mediaTypes/html/renderer/image/IHtmlImageLoader.mjs +0 -1
  348. package/dist/mediaTypes/html/renderer/image/error-image.cjs +1 -0
  349. package/dist/mediaTypes/html/renderer/image/error-image.mjs +4 -0
  350. package/dist/mediaTypes/html/renderer/image/placeholder.cjs +1 -0
  351. package/dist/mediaTypes/html/renderer/image/placeholder.mjs +4 -0
  352. package/dist/mediaTypes/html/renderer/layout/HtmlLayoutMetrics.cjs +1 -1
  353. package/dist/mediaTypes/html/renderer/layout/HtmlLayoutMetrics.mjs +5 -6
  354. package/dist/mediaTypes/html/renderer/layout/HtmlRendererLayout.cjs +1 -1
  355. package/dist/mediaTypes/html/renderer/layout/HtmlRendererLayout.mjs +81 -90
  356. package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.cjs +1 -1
  357. package/dist/mediaTypes/html/renderer/layout/HtmlRendererViewport.mjs +142 -169
  358. package/dist/mediaTypes/html/renderer/layout/IHtmlRendererLayout.cjs +0 -1
  359. package/dist/mediaTypes/html/renderer/layout/IHtmlRendererLayout.mjs +0 -1
  360. package/dist/mediaTypes/html/renderer/layout/ViewportCssVariableNames.cjs +1 -1
  361. package/dist/mediaTypes/html/renderer/layout/ViewportCssVariableNames.mjs +61 -6
  362. package/dist/mediaTypes/html/renderer/location/HtmlElementLocator.cjs +1 -1
  363. package/dist/mediaTypes/html/renderer/location/HtmlElementLocator.mjs +106 -118
  364. package/dist/mediaTypes/html/renderer/location/HtmlLocationCalculator.cjs +1 -1
  365. package/dist/mediaTypes/html/renderer/location/HtmlLocationCalculator.mjs +28 -34
  366. package/dist/mediaTypes/html/renderer/location/IHtmlElementLocator.cjs +0 -1
  367. package/dist/mediaTypes/html/renderer/location/IHtmlElementLocator.mjs +0 -1
  368. package/dist/mediaTypes/html/renderer/location/IHtmlLocationCalculator.cjs +0 -1
  369. package/dist/mediaTypes/html/renderer/location/IHtmlLocationCalculator.mjs +0 -1
  370. package/dist/mediaTypes/html/renderer/navigator/HtmlCoreNavigator.cjs +1 -1
  371. package/dist/mediaTypes/html/renderer/navigator/HtmlCoreNavigator.mjs +39 -42
  372. package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointNavigator.cjs +1 -1
  373. package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointNavigator.mjs +121 -125
  374. package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointProvider.cjs +1 -1
  375. package/dist/mediaTypes/html/renderer/navigator/HtmlNavPointProvider.mjs +151 -178
  376. package/dist/mediaTypes/html/renderer/navigator/HtmlPagingNavigator.cjs +1 -1
  377. package/dist/mediaTypes/html/renderer/navigator/HtmlPagingNavigator.mjs +78 -85
  378. package/dist/mediaTypes/html/renderer/progress/HtmlProgressTracker.cjs +1 -1
  379. package/dist/mediaTypes/html/renderer/progress/HtmlProgressTracker.mjs +119 -137
  380. package/dist/mediaTypes/html/renderer/progress/IHtmlIProgressTracker.cjs +0 -1
  381. package/dist/mediaTypes/html/renderer/progress/IHtmlIProgressTracker.mjs +0 -1
  382. package/dist/mediaTypes/html/renderer/progress/adjacent.cjs +1 -1
  383. package/dist/mediaTypes/html/renderer/progress/adjacent.mjs +41 -48
  384. package/dist/mediaTypes/html/renderer/style/ContentCssVariables.cjs +1 -1
  385. package/dist/mediaTypes/html/renderer/style/ContentCssVariables.mjs +40 -9
  386. package/dist/mediaTypes/html/renderer/style/ContentLayoutCssVariableNames.cjs +1 -1
  387. package/dist/mediaTypes/html/renderer/style/ContentLayoutCssVariableNames.mjs +40 -6
  388. package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.cjs +1 -1
  389. package/dist/mediaTypes/html/renderer/style/HtmlStyleProvider.mjs +62 -74
  390. package/dist/mediaTypes/html/renderer/style/HtmlThemeApplier.cjs +1 -1
  391. package/dist/mediaTypes/html/renderer/style/HtmlThemeApplier.mjs +58 -68
  392. package/dist/mediaTypes/html/renderer/style/IHtmlThemeApplier.cjs +0 -1
  393. package/dist/mediaTypes/html/renderer/style/IHtmlThemeApplier.mjs +0 -1
  394. package/dist/mediaTypes/html/renderer/style/{html-content.css.mjs → html-content.cjs} +2 -5
  395. package/dist/mediaTypes/html/renderer/style/html-content.mjs +4 -0
  396. package/dist/mediaTypes/html/renderer/visibilityCandidates.cjs +1 -1
  397. package/dist/mediaTypes/html/renderer/visibilityCandidates.mjs +116 -111
  398. package/dist/mediaTypes/pdf/PdfOptions.cjs +1 -1
  399. package/dist/mediaTypes/pdf/PdfOptions.mjs +7 -7
  400. package/dist/mediaTypes/pdf/ensurePdfWebWorker.cjs +1 -1
  401. package/dist/mediaTypes/pdf/ensurePdfWebWorker.mjs +16 -26
  402. package/dist/mediaTypes/pdf/fileParser/IPdfFileParser.cjs +0 -1
  403. package/dist/mediaTypes/pdf/fileParser/IPdfFileParser.d.ts +2 -0
  404. package/dist/mediaTypes/pdf/fileParser/IPdfFileParser.mjs +0 -1
  405. package/dist/mediaTypes/pdf/fileParser/PdfFileParser.cjs +1 -1
  406. package/dist/mediaTypes/pdf/fileParser/PdfFileParser.mjs +148 -170
  407. package/dist/mediaTypes/pdf/fileParser/PdfPasswordProvider.cjs +1 -1
  408. package/dist/mediaTypes/pdf/fileParser/PdfPasswordProvider.mjs +45 -52
  409. package/dist/mediaTypes/pdf/fileParser/PdfTextDocument.cjs +1 -1
  410. package/dist/mediaTypes/pdf/fileParser/PdfTextDocument.mjs +28 -28
  411. package/dist/mediaTypes/pdf/loadPdfDocument.cjs +1 -1
  412. package/dist/mediaTypes/pdf/loadPdfDocument.mjs +27 -23
  413. package/dist/mediaTypes/pdf/renderer/IPdfDocument.cjs +0 -1
  414. package/dist/mediaTypes/pdf/renderer/IPdfDocument.mjs +0 -1
  415. package/dist/mediaTypes/pdf/renderer/IPdfRenderer.cjs +0 -1
  416. package/dist/mediaTypes/pdf/renderer/IPdfRenderer.mjs +0 -1
  417. package/dist/mediaTypes/pdf/renderer/IPdfSvgBuilder.cjs +0 -1
  418. package/dist/mediaTypes/pdf/renderer/IPdfSvgBuilder.mjs +0 -1
  419. package/dist/mediaTypes/pdf/renderer/MultiPdfViewer.cjs +1 -1
  420. package/dist/mediaTypes/pdf/renderer/MultiPdfViewer.mjs +323 -625
  421. package/dist/mediaTypes/pdf/renderer/PdfCoreNavigator.cjs +1 -1
  422. package/dist/mediaTypes/pdf/renderer/PdfCoreNavigator.mjs +18 -18
  423. package/dist/mediaTypes/pdf/renderer/PdfCssVariableNames.cjs +1 -1
  424. package/dist/mediaTypes/pdf/renderer/PdfCssVariableNames.mjs +25 -6
  425. package/dist/mediaTypes/pdf/renderer/PdfDocument.cjs +1 -1
  426. package/dist/mediaTypes/pdf/renderer/PdfDocument.mjs +61 -70
  427. package/dist/mediaTypes/pdf/renderer/PdfNavPointNavigator.cjs +1 -1
  428. package/dist/mediaTypes/pdf/renderer/PdfNavPointNavigator.mjs +118 -122
  429. package/dist/mediaTypes/pdf/renderer/PdfNavPointProvider.cjs +1 -1
  430. package/dist/mediaTypes/pdf/renderer/PdfNavPointProvider.mjs +85 -111
  431. package/dist/mediaTypes/pdf/renderer/PdfNoopL10n.cjs +1 -1
  432. package/dist/mediaTypes/pdf/renderer/PdfNoopL10n.mjs +7 -10
  433. package/dist/mediaTypes/pdf/renderer/PdfPagingNavigator.cjs +1 -1
  434. package/dist/mediaTypes/pdf/renderer/PdfPagingNavigator.mjs +29 -32
  435. package/dist/mediaTypes/pdf/renderer/PdfRenderer.cjs +1 -1
  436. package/dist/mediaTypes/pdf/renderer/PdfRenderer.mjs +76 -79
  437. package/dist/mediaTypes/pdf/renderer/PdfSvgBuilder.cjs +1 -1
  438. package/dist/mediaTypes/pdf/renderer/PdfSvgBuilder.mjs +269 -236
  439. package/dist/mediaTypes/pdf/renderer/PdfViewerBuilder.cjs +1 -1
  440. package/dist/mediaTypes/pdf/renderer/PdfViewerBuilder.mjs +33 -36
  441. package/dist/mediaTypes/pdf/renderer/documents/IPdfDocumentsProvider.cjs +0 -1
  442. package/dist/mediaTypes/pdf/renderer/documents/IPdfDocumentsProvider.mjs +0 -1
  443. package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.cjs +2 -2
  444. package/dist/mediaTypes/pdf/renderer/documents/PdfDocumentsProvider.mjs +243 -290
  445. package/dist/mediaTypes/pdf/renderer/input/PdfDocumentEvents.cjs +1 -1
  446. package/dist/mediaTypes/pdf/renderer/input/PdfDocumentEvents.mjs +43 -50
  447. package/dist/mediaTypes/pdf/renderer/input/PdfKeyboardController.cjs +1 -1
  448. package/dist/mediaTypes/pdf/renderer/input/PdfKeyboardController.mjs +84 -105
  449. package/dist/mediaTypes/pdf/renderer/input/PdfViewerEvents.cjs +1 -1
  450. package/dist/mediaTypes/pdf/renderer/input/PdfViewerEvents.mjs +44 -59
  451. package/dist/mediaTypes/pdf/renderer/input/PdfZoomInputController.cjs +1 -1
  452. package/dist/mediaTypes/pdf/renderer/input/PdfZoomInputController.mjs +138 -177
  453. package/dist/mediaTypes/pdf/renderer/layout/IPdfRendererLayout.cjs +0 -1
  454. package/dist/mediaTypes/pdf/renderer/layout/IPdfRendererLayout.mjs +0 -1
  455. package/dist/mediaTypes/pdf/renderer/layout/PdfRendererLayout.cjs +1 -1
  456. package/dist/mediaTypes/pdf/renderer/layout/PdfRendererLayout.mjs +36 -42
  457. package/dist/mediaTypes/pdf/renderer/layout/PdfRendererViewport.cjs +1 -1
  458. package/dist/mediaTypes/pdf/renderer/layout/PdfRendererViewport.mjs +75 -82
  459. package/dist/mediaTypes/pdf/renderer/location/IPdfDestinationBuilder.cjs +0 -1
  460. package/dist/mediaTypes/pdf/renderer/location/IPdfDestinationBuilder.mjs +0 -1
  461. package/dist/mediaTypes/pdf/renderer/location/PdfDestinationBuilder.cjs +1 -1
  462. package/dist/mediaTypes/pdf/renderer/location/PdfDestinationBuilder.mjs +18 -21
  463. package/dist/mediaTypes/pdf/renderer/progress/IPdfProgressTracker.cjs +0 -1
  464. package/dist/mediaTypes/pdf/renderer/progress/IPdfProgressTracker.mjs +0 -1
  465. package/dist/mediaTypes/pdf/renderer/progress/PdfProgressTracker.cjs +1 -1
  466. package/dist/mediaTypes/pdf/renderer/progress/PdfProgressTracker.mjs +54 -68
  467. package/dist/mediaTypes/pdf/renderer/style/IPdfThemeApplier.cjs +0 -1
  468. package/dist/mediaTypes/pdf/renderer/style/IPdfThemeApplier.mjs +0 -1
  469. package/dist/mediaTypes/pdf/renderer/style/PdfThemeApplier.cjs +4 -4
  470. package/dist/mediaTypes/pdf/renderer/style/PdfThemeApplier.mjs +15 -15
  471. package/dist/mediaTypes/pdf/renderer/zoom/IPdfScalable.cjs +0 -1
  472. package/dist/mediaTypes/pdf/renderer/zoom/IPdfScalable.mjs +0 -1
  473. package/dist/mediaTypes/pdf/renderer/zoom/PdfScalable.cjs +1 -1
  474. package/dist/mediaTypes/pdf/renderer/zoom/PdfScalable.mjs +46 -41
  475. package/dist/mediaTypes/pdf/shared/geometry/index.cjs +1 -1
  476. package/dist/mediaTypes/pdf/shared/geometry/index.mjs +3 -13
  477. package/dist/mediaTypes/pdf/shared/geometry/selectionToFixedContentRange.cjs +1 -1
  478. package/dist/mediaTypes/pdf/shared/geometry/selectionToFixedContentRange.mjs +45 -45
  479. package/dist/mediaTypes/pdf/shared/geometry/textRects.cjs +1 -1
  480. package/dist/mediaTypes/pdf/shared/geometry/textRects.mjs +219 -263
  481. package/dist/mediaTypes/pdf/shared/range.cjs +1 -1
  482. package/dist/mediaTypes/pdf/shared/range.mjs +11 -14
  483. package/dist/mediaTypes/pdf/shared/selection/IPdfSelection.cjs +0 -1
  484. package/dist/mediaTypes/pdf/shared/selection/IPdfSelection.mjs +0 -1
  485. package/dist/mediaTypes/pdf/shared/selection/PdfSelection.cjs +2 -2
  486. package/dist/mediaTypes/pdf/shared/selection/PdfSelection.mjs +214 -236
  487. package/dist/mediaTypes/pdf/shared/selection/index.cjs +1 -1
  488. package/dist/mediaTypes/pdf/shared/selection/index.mjs +3 -6
  489. package/dist/mediaTypes/pdf/shared/text/bbox.cjs +1 -1
  490. package/dist/mediaTypes/pdf/shared/text/bbox.mjs +130 -142
  491. package/dist/mediaTypes/pdf/shared/text/pageText.cjs +5 -5
  492. package/dist/mediaTypes/pdf/shared/text/pageText.mjs +168 -185
  493. package/global.d.ts +17 -0
  494. package/package.json +19 -12
  495. package/types.d.ts +13 -0
  496. package/dist/kernal/logo-160x160.png.cjs +0 -1
  497. package/dist/kernal/logo-160x160.png.mjs +0 -4
  498. package/dist/mediaTypes/html/renderer/image/error-image.png.cjs +0 -1
  499. package/dist/mediaTypes/html/renderer/image/error-image.png.mjs +0 -4
  500. package/dist/mediaTypes/html/renderer/image/placeholder.png.cjs +0 -1
  501. package/dist/mediaTypes/html/renderer/image/placeholder.png.mjs +0 -4
  502. package/dist/mediaTypes/html/renderer/style/html-content.css.cjs +0 -316
@@ -1,183 +1,131 @@
1
- import { convertArrayBufferToString as w, convertStringToUint8Array as A } from "../../../../kernal/common/encoding.mjs";
2
- import { getExtension as S } from "../../../../kernal/common/path.mjs";
3
- import { isNullOrWhiteSpace as m, startsWithAny as k } from "../../../../kernal/common/text.mjs";
4
- import { checkIsAbsoluteUrl as c, getFullUrl as b } from "../../../../kernal/common/url.mjs";
5
- import { toBlob as H } from "../../../../kernal/common/buffer.mjs";
6
- import { compareTagName as y, getDocumentHead as R } from "../../../../kernal/html/finder.mjs";
7
- import { injectCssContent as x, createElement as E } from "../../../../kernal/html/injector.mjs";
8
- import { replaceFontSize as d, removeTextIndent as L, appendZeroTextIndentForCenterRightAlign as N } from "../../../../kernal/html/style.mjs";
9
- import { HtmlSettings as C } from "../../HtmlSettings.mjs";
10
- import { getRandomId as O } from "../../../../kernal/common/uuid.mjs";
11
- import { LastElementAttributeName as T } from "../../../../kernal/Constants.mjs";
12
- class K {
13
- /**
14
- * Constructor
15
- * @param fileParser
16
- */
17
- constructor(e) {
18
- this.fileParser = e, this.childrenUrls = /* @__PURE__ */ new Map(), this.errorLinks = [], this.docBlobUrls = /* @__PURE__ */ new Map(), this.opaqueDocumentBaseUrls = [];
19
- }
20
- /**
21
- * Prepare the content to be loaded
22
- * @param doc
23
- * @returns
24
- */
25
- async preprocess(e) {
26
- const o = (await e.getVirtualContentContainer())?.ownerDocument;
27
- o && (this.format(o), this.injectBaseUrl(o, e.url), await this.resetCssHref(o, e), await this.resetScriptSrc(o, e));
28
- }
29
- format(e) {
30
- const o = e.getElementsByTagName("*");
31
- let n = !1;
32
- for (let r = o.length - 1; r >= 0; r--) {
33
- const t = o[r];
34
- if (t.textContent.trim() || t.classList.add("lhx-text-empty"), t.style && (t.style.fontSize || t.style.textIndent)) {
35
- let i = t.getAttribute("style");
36
- t.style.fontSize && (i = d(i)), t.style.textIndent && (i = L(i)), t.setAttribute("style", i);
37
- }
38
- y(t.tagName, "TABLE") && (t.style.width = "100%", t.style.height = "auto"), n || (y(t.tagName, "SVG") || t.children.length == 0 && !y(t.parentElement.tagName, "SVG")) && (n = !0, t.setAttribute(T, "true")), t.getAttribute("epub:type") == "footnote" && t.style.setProperty("display", "none");
39
- }
40
- }
41
- /**
42
- * Reset CSS path
43
- */
44
- async resetCssHref(e, o) {
45
- const n = e.getElementsByTagName("link");
46
- for (let r = n.length - 1; r >= 0; r--) {
47
- const t = n[r].getAttribute("href");
48
- if (!n[r].rel || n[r].rel.toLowerCase() != "stylesheet" || m(t)) continue;
49
- const {
50
- href: s,
51
- cssContent: i,
52
- isHref: a
53
- } = await this.getActualCssLink(t, o);
54
- if (a && t)
55
- n[r].href = s, n[r].setAttribute(C.LinkOriginHrefPropertyName, t);
56
- else if (i) {
57
- const f = O(!0);
58
- x(e, i, !1, f), n[r].parentElement?.removeChild(n[r]);
59
- }
60
- }
61
- }
62
- async getActualCssLink(e, o) {
63
- if (m(e))
64
- return {
65
- href: e,
66
- cssContent: "",
67
- isHref: !0
68
- };
69
- if (c(e))
70
- return {
71
- href: e,
72
- cssContent: "",
73
- isHref: !0
74
- };
75
- try {
76
- const n = await this.fileParser.getFile(e, o.url, "blob"), r = w(await n.arrayBuffer()), t = r.matchAll(/url\(["']?(.*?)["']?\)/gi);
77
- for (const u of t) {
78
- const l = u[1];
79
- if (this.childrenUrls.get(l))
80
- continue;
81
- const U = S(l);
82
- if (U && U.toLowerCase() == ".css") {
83
- if (m(l) || c(l))
84
- continue;
85
- const {
86
- href: h
87
- } = await this.getActualCssLink(l, o);
88
- this.childrenUrls.set(l, h);
89
- } else {
90
- const h = b(l, e);
91
- if (!k(h.toString(), !0, "http://", "https://"))
92
- continue;
93
- const g = (h.pathname + h.search).substring(1);
94
- if (this.errorLinks.indexOf(g) >= 0)
95
- continue;
96
- try {
97
- const p = await this.fileParser.getFile(g, "", "blob"), B = URL.createObjectURL(p);
98
- this.childrenUrls.set(l, B);
99
- } catch (p) {
100
- this.errorLinks.indexOf(g) < 0 && this.errorLinks.push(g), this.logger.error(p), this.childrenUrls.set(l, h.toString());
101
- }
102
- }
103
- }
104
- let s = r.replace(/url\(["']?(.*?)["']?\)/gi, (u, l) => c(l) ? u : "");
105
- s = d(s), s = L(s), s = N(s);
106
- const i = A(s), a = H(i, {
107
- type: "text/css"
108
- }), f = URL.createObjectURL(a);
109
- return this.childrenUrls.set(e, f), {
110
- href: f,
111
- cssContent: s,
112
- isHref: !1
113
- };
114
- } catch (n) {
115
- return this.logger.error(n), {
116
- href: e,
117
- cssContent: "",
118
- isHref: !0
119
- };
120
- }
121
- }
122
- async dispose() {
123
- this.childrenUrls.clear(), this.errorLinks && this.errorLinks.splice(0), this.docBlobUrls.clear();
124
- for (const e of this.opaqueDocumentBaseUrls)
125
- try {
126
- URL.revokeObjectURL(e);
127
- } catch {
128
- }
129
- this.opaqueDocumentBaseUrls = [];
130
- }
131
- /**
132
- * Reset script path
133
- * @param virtualDocument
134
- * @returns
135
- */
136
- async resetScriptSrc(e, o) {
137
- let n = o.getRoot();
138
- n || (n = "");
139
- const r = e.getElementsByTagName("script");
140
- for (let t = 0; t < r.length; t++) {
141
- let s = r[t].getAttribute("src");
142
- if (!(!s || s.startsWith("/"))) {
143
- if (!c(s)) {
144
- const i = b(s, n);
145
- c(n) ? s = i.toString() : (s = i.pathname + i.search, s = s.substring(1));
146
- }
147
- if (!c(s)) {
148
- const i = b(s, n);
149
- let a = i.pathname + i.search;
150
- a = a.substring(1);
151
- const f = await this.fileParser.getFile(s, o.url, "blob"), u = URL.createObjectURL(f);
152
- r[t].src = u, r[t].setAttribute(C.LinkOriginHrefPropertyName, s);
153
- }
154
- }
155
- }
156
- }
157
- /**
158
- * Add baseUrl, for relative address parsing within the page.
159
- * about:blank / srcdoc inherit the host page baseURI; an explicit <base>
160
- * must not point at the host origin or relative assets will load the test page.
161
- */
162
- injectBaseUrl(e, o) {
163
- const n = e.getElementsByTagName("base");
164
- for (let a = 0; a < n.length; a++)
165
- if (!m(n[a].href))
166
- return;
167
- let r = o;
168
- !m(r) && c(r) || (r = this.createOpaqueDocumentBaseUrl());
169
- const s = E(e, "base", null, {
170
- href: r
171
- }), i = R(e);
172
- i.insertBefore(s, i.firstChild);
173
- }
174
- createOpaqueDocumentBaseUrl() {
175
- const e = URL.createObjectURL(new Blob(["<!doctype html><title></title>"], {
176
- type: "text/html"
177
- }));
178
- return this.opaqueDocumentBaseUrls.push(e), e;
179
- }
180
- }
181
- export {
182
- K as HtmlContentProcessor
1
+ import { getRandomId as e } from "../../../../kernal/common/uuid.mjs";
2
+ import { isNullOrWhiteSpace as t, startsWithAny as n } from "../../../../kernal/common/text.mjs";
3
+ import { checkIsAbsoluteUrl as r, getFullUrl as i } from "../../../../kernal/common/url.mjs";
4
+ import { getExtension as a } from "../../../../kernal/common/path.mjs";
5
+ import { toBlob as o } from "../../../../kernal/common/buffer.mjs";
6
+ import { LastElementAttributeName as s } from "../../../../kernal/Constants.mjs";
7
+ import { compareTagName as c, getDocumentHead as l } from "../../../../kernal/html/finder.mjs";
8
+ import { createElement as u, injectCssContent as d } from "../../../../kernal/html/injector.mjs";
9
+ import { appendZeroTextIndentForCenterRightAlign as f, removeTextIndent as p, replaceFontSize as m } from "../../../../kernal/html/style.mjs";
10
+ import { convertArrayBufferToString as h, convertStringToUint8Array as g } from "../../../../kernal/common/encoding.mjs";
11
+ import { HtmlSettings as _ } from "../../HtmlSettings.mjs";
12
+ //#region mediaTypes/html/renderer/html/HtmlContentProcessor.ts
13
+ var v = class {
14
+ constructor(e) {
15
+ this.fileParser = e, this.childrenUrls = /* @__PURE__ */ new Map(), this.errorLinks = [], this.docBlobUrls = /* @__PURE__ */ new Map(), this.opaqueDocumentBaseUrls = [];
16
+ }
17
+ async preprocess(e) {
18
+ let t = (await e.getVirtualContentContainer())?.ownerDocument;
19
+ t && (this.format(t), this.injectBaseUrl(t, e.url), await this.resetCssHref(t, e), await this.resetScriptSrc(t, e));
20
+ }
21
+ format(e) {
22
+ let t = e.getElementsByTagName("*"), n = !1;
23
+ for (let e = t.length - 1; e >= 0; e--) {
24
+ let r = t[e];
25
+ if (r.textContent.trim() || r.classList.add("lhx-text-empty"), r.style && (r.style.fontSize || r.style.textIndent)) {
26
+ let e = r.getAttribute("style");
27
+ r.style.fontSize && (e = m(e)), r.style.textIndent && (e = p(e)), r.setAttribute("style", e);
28
+ }
29
+ c(r.tagName, "TABLE") && (r.style.width = "100%", r.style.height = "auto"), n || (c(r.tagName, "SVG") || r.children.length == 0 && !c(r.parentElement.tagName, "SVG")) && (n = !0, r.setAttribute(s, "true")), r.getAttribute("epub:type") == "footnote" && r.style.setProperty("display", "none");
30
+ }
31
+ }
32
+ async resetCssHref(n, r) {
33
+ let i = n.getElementsByTagName("link");
34
+ for (let a = i.length - 1; a >= 0; a--) {
35
+ let o = i[a].getAttribute("href");
36
+ if (!i[a].rel || i[a].rel.toLowerCase() != "stylesheet" || t(o)) continue;
37
+ let { href: s, cssContent: c, isHref: l } = await this.getActualCssLink(o, r);
38
+ if (l && o) i[a].href = s, i[a].setAttribute(_.LinkOriginHrefPropertyName, o);
39
+ else if (c) {
40
+ let t = e(!0);
41
+ d(n, c, !1, t), i[a].parentElement?.removeChild(i[a]);
42
+ }
43
+ }
44
+ }
45
+ async getActualCssLink(e, s) {
46
+ if (t(e) || r(e)) return {
47
+ href: e,
48
+ cssContent: "",
49
+ isHref: !0
50
+ };
51
+ try {
52
+ let c = await this.fileParser.getFile(e, s.url, "blob"), l = h(await c.arrayBuffer()), u = l.matchAll(/url\(["']?(.*?)["']?\)/gi);
53
+ for (let o of u) {
54
+ let c = o[1];
55
+ if (this.childrenUrls.get(c)) continue;
56
+ let l = a(c);
57
+ if (l && l.toLowerCase() == ".css") {
58
+ if (t(c) || r(c)) continue;
59
+ let { href: e } = await this.getActualCssLink(c, s);
60
+ this.childrenUrls.set(c, e);
61
+ } else {
62
+ let t = i(c, e);
63
+ if (!n(t.toString(), !0, "http://", "https://")) continue;
64
+ let r = (t.pathname + t.search).substring(1);
65
+ if (this.errorLinks.indexOf(r) >= 0) continue;
66
+ try {
67
+ let e = await this.fileParser.getFile(r, "", "blob"), t = URL.createObjectURL(e);
68
+ this.childrenUrls.set(c, t);
69
+ } catch (e) {
70
+ this.errorLinks.indexOf(r) < 0 && this.errorLinks.push(r), this.logger.error(e), this.childrenUrls.set(c, t.toString());
71
+ }
72
+ }
73
+ }
74
+ let d = l.replace(/url\(["']?(.*?)["']?\)/gi, (e, t) => r(t) ? e : "");
75
+ d = m(d), d = p(d), d = f(d);
76
+ let _ = g(d), v = o(_, { type: "text/css" }), y = URL.createObjectURL(v);
77
+ return this.childrenUrls.set(e, y), {
78
+ href: y,
79
+ cssContent: d,
80
+ isHref: !1
81
+ };
82
+ } catch (t) {
83
+ return this.logger.error(t), {
84
+ href: e,
85
+ cssContent: "",
86
+ isHref: !0
87
+ };
88
+ }
89
+ }
90
+ async dispose() {
91
+ this.childrenUrls.clear(), this.errorLinks && this.errorLinks.splice(0), this.docBlobUrls.clear();
92
+ for (let e of this.opaqueDocumentBaseUrls) try {
93
+ URL.revokeObjectURL(e);
94
+ } catch {}
95
+ this.opaqueDocumentBaseUrls = [];
96
+ }
97
+ async resetScriptSrc(e, t) {
98
+ let n = t.getRoot();
99
+ n ||= "";
100
+ let a = e.getElementsByTagName("script");
101
+ for (let e = 0; e < a.length; e++) {
102
+ let o = a[e].getAttribute("src");
103
+ if (!(!o || o.startsWith("/"))) {
104
+ if (!r(o)) {
105
+ let e = i(o, n);
106
+ r(n) ? o = e.toString() : (o = e.pathname + e.search, o = o.substring(1));
107
+ }
108
+ if (!r(o)) {
109
+ let r = i(o, n), s = r.pathname + r.search;
110
+ s = s.substring(1);
111
+ let c = await this.fileParser.getFile(o, t.url, "blob"), l = URL.createObjectURL(c);
112
+ a[e].src = l, a[e].setAttribute(_.LinkOriginHrefPropertyName, o);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ injectBaseUrl(e, n) {
118
+ let i = e.getElementsByTagName("base");
119
+ for (let e = 0; e < i.length; e++) if (!t(i[e].href)) return;
120
+ let a = n;
121
+ !t(a) && r(a) || (a = this.createOpaqueDocumentBaseUrl());
122
+ let o = u(e, "base", null, { href: a }), s = l(e);
123
+ s.insertBefore(o, s.firstChild);
124
+ }
125
+ createOpaqueDocumentBaseUrl() {
126
+ let e = URL.createObjectURL(new Blob(["<!doctype html><title></title>"], { type: "text/html" }));
127
+ return this.opaqueDocumentBaseUrls.push(e), e;
128
+ }
183
129
  };
130
+ //#endregion
131
+ export { v as HtmlContentProcessor };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("../../../../kernal/html/injector.cjs"),l=require("../../../../kernal/common/data.cjs"),n=require("../../../../kernal/web/BrowserCapabilities.cjs"),s=require("../layout/ViewportCssVariableNames.cjs"),i='<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>{custom-htmls}</body></html>',m=e=>i.replace("{custom-htmls}",e),c=e=>{const r='<div style="min-height:50px;display:flex;justify-content:center;align-items:center;">The document is too big('+l.formatFileSize(e)+"), can't be loaded.</div>";return i.replace("{custom-htmls}",r)},h=(e,r,o)=>{const t=a.createElement(e,"iframe",r);return n.BrowserCapabilities.isFirefox()?t.setAttribute("src","javascript:"):t.setAttribute("src","about:blank"),t.setAttribute("data-role","content"),t.setAttribute("frameborder","0"),t.setAttribute("border","0"),t.setAttribute("width","100%"),t.setAttribute("height","100%"),t.setAttribute("style","display:block"),o?t.style.setProperty("width","100%"):t.style.setProperty("width","var("+s.ViewportCssVariableNames.ContentContainerWidth+")"),t.style.setProperty("height","var("+s.ViewportCssVariableNames.ContentContainerHeight+")"),t};exports.createIframe=h;exports.getHtmlTemplate=m;exports.getTooBigHtmlTemplate=c;exports.htmlTemplate=i;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/web/BrowserCapabilities.cjs"),t=require("../../../../kernal/html/injector.cjs"),n=require("../../../../kernal/common/data.cjs"),r=require("../layout/ViewportCssVariableNames.cjs");var i=`<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>{custom-htmls}</body></html>`,a=e=>i.replace(`{custom-htmls}`,e),o=e=>{let t=`<div style="min-height:50px;display:flex;justify-content:center;align-items:center;">The document is too big(`+n.formatFileSize(e)+`), can't be loaded.</div>`;return i.replace(`{custom-htmls}`,t)},s=(n,i,a)=>{let o=t.createElement(n,`iframe`,i);return e.BrowserCapabilities.isFirefox()?o.setAttribute(`src`,`javascript:`):o.setAttribute(`src`,`about:blank`),o.setAttribute(`data-role`,`content`),o.setAttribute(`frameborder`,`0`),o.setAttribute(`border`,`0`),o.setAttribute(`width`,`100%`),o.setAttribute(`height`,`100%`),o.setAttribute(`style`,`display:block`),a?o.style.setProperty(`width`,`100%`):o.style.setProperty(`width`,`var(`+r.ViewportCssVariableNames.ContentContainerWidth+`)`),o.style.setProperty(`height`,`var(`+r.ViewportCssVariableNames.ContentContainerHeight+`)`),o};exports.createIframe=s,exports.getHtmlTemplate=a,exports.getTooBigHtmlTemplate=o,exports.htmlTemplate=i;
@@ -1,17 +1,14 @@
1
- import { createElement as l } from "../../../../kernal/html/injector.mjs";
2
- import { formatFileSize as m } from "../../../../kernal/common/data.mjs";
3
- import { BrowserCapabilities as a } from "../../../../kernal/web/BrowserCapabilities.mjs";
4
- import { ViewportCssVariableNames as i } from "../layout/ViewportCssVariableNames.mjs";
5
- const o = '<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>{custom-htmls}</body></html>', b = (e) => o.replace("{custom-htmls}", e), d = (e) => {
6
- const r = '<div style="min-height:50px;display:flex;justify-content:center;align-items:center;">The document is too big(' + m(e) + "), can't be loaded.</div>";
7
- return o.replace("{custom-htmls}", r);
8
- }, u = (e, r, s) => {
9
- const t = l(e, "iframe", r);
10
- return a.isFirefox() ? t.setAttribute("src", "javascript:") : t.setAttribute("src", "about:blank"), t.setAttribute("data-role", "content"), t.setAttribute("frameborder", "0"), t.setAttribute("border", "0"), t.setAttribute("width", "100%"), t.setAttribute("height", "100%"), t.setAttribute("style", "display:block"), s ? t.style.setProperty("width", "100%") : t.style.setProperty("width", "var(" + i.ContentContainerWidth + ")"), t.style.setProperty("height", "var(" + i.ContentContainerHeight + ")"), t;
11
- };
12
- export {
13
- u as createIframe,
14
- b as getHtmlTemplate,
15
- d as getTooBigHtmlTemplate,
16
- o as htmlTemplate
1
+ import { BrowserCapabilities as e } from "../../../../kernal/web/BrowserCapabilities.mjs";
2
+ import { createElement as t } from "../../../../kernal/html/injector.mjs";
3
+ import { formatFileSize as n } from "../../../../kernal/common/data.mjs";
4
+ import { ViewportCssVariableNames as r } from "../layout/ViewportCssVariableNames.mjs";
5
+ //#region mediaTypes/html/renderer/html/template.ts
6
+ var i = "<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title></title></head><body>{custom-htmls}</body></html>", a = (e) => i.replace("{custom-htmls}", e), o = (e) => {
7
+ let t = "<div style=\"min-height:50px;display:flex;justify-content:center;align-items:center;\">The document is too big(" + n(e) + "), can't be loaded.</div>";
8
+ return i.replace("{custom-htmls}", t);
9
+ }, s = (n, i, a) => {
10
+ let o = t(n, "iframe", i);
11
+ return e.isFirefox() ? o.setAttribute("src", "javascript:") : o.setAttribute("src", "about:blank"), o.setAttribute("data-role", "content"), o.setAttribute("frameborder", "0"), o.setAttribute("border", "0"), o.setAttribute("width", "100%"), o.setAttribute("height", "100%"), o.setAttribute("style", "display:block"), a ? o.style.setProperty("width", "100%") : o.style.setProperty("width", "var(" + r.ContentContainerWidth + ")"), o.style.setProperty("height", "var(" + r.ContentContainerHeight + ")"), o;
17
12
  };
13
+ //#endregion
14
+ export { s as createIframe, a as getHtmlTemplate, o as getTooBigHtmlTemplate, i as htmlTemplate };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("../../../../kernal/common/encoding.cjs"),y=require("../../../../kernal/common/number.cjs"),d=require("../../../../kernal/common/text.cjs"),A=require("../../../../kernal/common/url.cjs"),h=require("../../../../kernal/html/finder.cjs"),C=require("../../../../kernal/html/image.cjs"),L=require("../../../../kernal/html/injector.cjs"),U=require("../../../../kernal/html/parser.cjs"),B=require("../../HtmlSettings.cjs"),f=require("../style/ContentLayoutCssVariableNames.cjs"),E=require("./error-image.png.cjs"),x=require("perfect-debounce"),I=require("../../../../kernal/EventNames.cjs"),S=require("../../../../kernal/web/BrowserCapabilities.cjs"),v=require("../../../../kernal/Constants.cjs"),H=T=>Object.freeze(Object.defineProperty({__proto__:null,default:T},Symbol.toStringTag,{value:"Module"})),D="lhx-svg",P="imageSizes-",V=5;class M{constructor(e,i,a){this.documentsProvider=e,this.rendererViewport=i,this.htmlOptions=a,this.documentImageSizesSummaries=new Map,this.blobUrls=new Map,this.isDisposed=!1,this.resetImageSizeTasks=[],this.onDocumentDisposing=t=>{this.revokeDocumentBlobUrls(t)},this.onImageElementsVisible=async t=>{for(const[r,s]of t.entries())await this.loadImages(r,s)},this.delayLoadOnImageElementsVisible=x.debounce(this.onImageElementsVisible,100),this.onLayoutChange=async()=>{await this.delayResetAllImageSize()},this.resetAllImageSize=async()=>{for(const t of this.documentsProvider.getLoadedDocuments())await this.resetImageSize(t)},this.delayResetAllImageSize=x.debounce(this.resetAllImageSize,100),this.prepareImageSize=async(t,r)=>{const s=`.${D} {width: 100% !important; height: auto !important; }`;L.injectCssContent(r,s,!1,"lhx-svg-style");const n=[...r.getElementsByTagName("img"),...r.getElementsByTagName("image")],o=this.getImageSizesSummary(r);o.total=n.length;const l=this.documentsProvider.getDocuments().indexOf(t),m=this.getResourceId(),c=await this.getStorage();let u=null;l>=0&&c&&m&&(u=await c.get(P+m,l.toString()));const w=n.length>100;for(let b=0;b<n.length;b++){if(this.isDisposed)return;try{const p=n[b];p.parentElement&&h.compareTagName(p.parentElement.tagName,"SVG")&&p.parentElement.classList.add(D);const z=this.getImageUrl(p);let N=u?.find(O=>O.url==z);N||(N=await this.prefetchImageSize(t,p,!0)),N&&(this.resetImageStyles(p,N.width,N.height),this.resetInlineImageSize(p)),w&&b%10==0&&(this.events.emit(I.EventNames.ProcessedImageCount,{doc:t,totalImageCount:n.length,processedImageCount:b}),await S.BrowserCapabilities.yieldToMain())}catch(p){this.logger.error(p)}}l>=0&&c&&m&&await this.persistImageSizes(c,m,l.toString(),u,o)},this.getImageUrl=t=>{const r=t.getAttribute("data-preset-preview-url")=="true";return h.compareTagName(t.tagName,"IMAGE")?r?t.getAttribute("data-src")??t.getAttribute("xlink:href")??t.getAttribute("href"):t.getAttribute("xlink:href")??t.getAttribute("href"):r?t.getAttribute("data-src"):t.getAttribute("src")},this.resetImageStyles=(t,r,s)=>{if(r<=0||s<=0||!S.BrowserCapabilities.supportCssAspectRatio())return;this.setWidthAndHeight(t,r,s);let n=t;if(h.compareTagName(t.tagName,"IMAGE")&&(n=t.parentElement),!n)return;n.setAttribute("width",`${r}`),n.setAttribute("height",`${s}`);const o=r/s,{columnWidth:g,columnHeight:l}=this.getColumnMetrics();let m=s;g>0&&r>g&&(m=g/r*s);const c=l>0?`min(${m}px,${l}px)`:`${m}px`,u=`calc(100% * var(${f.ContentLayoutCssVariableNames.MaxImageWidthRatio}))`;n.getAttribute("style")?(n.style.width=u,n.style.height="auto",n.style.maxWidth=u,n.style.maxHeight=c,n.style.aspectRatio=`${o}`):n.setAttribute("style",`max-width:${u};height:auto;max-height:${c};aspect-ratio:${o};width:${u}`)},this.resetImageWidthHeight=t=>{t.image.style?(t.image.style.setProperty("width","auto","important"),t.image.style.setProperty("max-width","100%","important"),t.image.style.setProperty("max-height","100%","important")):t.image.setAttribute("style","width:auto !important;max-width:100% !important;max-height:100% !important"),this.resetImageHeight(t.image,t.columnWidth,t.columnHeight,this.htmlOptions.maxImageHeightRatio)},this.flushResetImageSizeTasks=async()=>{if(S.BrowserCapabilities.supportCssAspectRatio()){this.resetImageSizeTasks=[];return}for(;this.resetImageSizeTasks.length>0;){if(this.isDisposed){this.resetImageSizeTasks=[];return}const t=this.resetImageSizeTasks.shift();if(!t)break;this.resetImageWidthHeight(t),await S.BrowserCapabilities.yieldToMain()}},this.resetImageSize=async t=>{const r=t.getContentContainer()?.ownerDocument;if(!r||!h.getDocumentBody(r))return;const{columnWidth:s,columnHeight:n}=this.getColumnMetrics(),o=[...r.getElementsByTagName("img"),...r.getElementsByTagName("image")];if(this.checkIsOnlyOneImageInDocument(r)){const g=o[0];this.handleOnlyOneImageInDocument(s,n,g),await this.loadSingleImage(t,g);return}for(const g of o)this.resetImageSizeTasks.push({image:g,columnWidth:s,columnHeight:n});await this.flushResetImageSizeTasks();for(let g=0;g<Math.min(V,o.length);g++)await this.loadSingleImage(t,o[g])},this.events=this.documentsProvider.owner.events,this.logger=this.documentsProvider.owner.loggerFactory.getLogger(this.constructor.name),this.bindEvents()}bindEvents(){this.events.on(I.EventNames.LayoutChange,this.onLayoutChange),this.events.on(I.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.on(I.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}unbindEvents(){this.events.off(I.EventNames.LayoutChange,this.onLayoutChange),this.events.off(I.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.off(I.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}addBlobUrl(e,i){if(!A.checkIsBlobUrl(i))return;const a=this.blobUrls.get(e);a?a.push(i):this.blobUrls.set(e,[i])}revokeDocumentBlobUrls(e){const i=this.blobUrls.get(e);if(i){for(const a of i)this.revokeObjectURL(a);this.blobUrls.delete(e)}}async preprocessImages(e){const i=e,a=(await i.getVirtualContentContainer())?.ownerDocument;a&&(await this.prepareImageSize(i,a),await this.setImagePreviewUrl(a))}async setImagePreviewUrl(e){const{default:i}=await Promise.resolve().then(()=>H(require("./placeholder.png.cjs"))),a=e.getElementsByTagName("img"),t=e.getElementsByTagName("image");for(let r=0;r<a.length;r++)this.applyPreviewUrl(a[r],a[r].getAttribute("src"),i,!1);for(let r=0;r<t.length;r++){const s=t[r],n=s.getAttribute("xlink:href")??s.getAttribute("href");this.applyPreviewUrl(s,n,i,!0)}}applyPreviewUrl(e,i,a,t){let r=e.getAttribute("data-preview-src");d.isNullOrWhiteSpace(r)&&(r=a,e.setAttribute("data-preview-src",a)),i!=a?e.getAttribute("data-src")!=a&&e.setAttribute("data-src",i??""):e.removeAttribute("data-loaded"),t?e.setAttribute("xlink:href",r):e.src=r,e.setAttribute("data-preset-preview-url","true"),this.setImageStyle(e)}setImageStyle(e){const i=e.parentElement;i&&i.children.length==1&&d.isNullOrWhiteSpace(i.innerText)&&(S.BrowserCapabilities.supportCssHas()||i.classList.add(B.HtmlSettings.BreakInsideAvoid),i.style.removeProperty("width"),i.style.removeProperty("height"))}async persistImageSizes(e,i,a,t,r){const s=Array.from(r.descriptors.values()).filter(o=>o.width>0);if(s.length==0)return;const n=P+i;if(t&&t.length>0){const o=new Set(t.map(l=>l.url)),g=s.filter(l=>!o.has(l.url));g.length>0&&(t.push(...g),await e.set(n,a,t))}else await e.set(n,a,s)}getResourceId(){const e=this.documentsProvider.owner.context;return d.isNullOrWhiteSpace(e.simpleId)?e.id:e.simpleId}async getStorage(){return await this.documentsProvider.owner.services.get("storage")}getImageSizesSummary(e){let i=this.documentImageSizesSummaries.get(e);return i||(i={total:0,checkedCount:0,descriptors:new Map},this.documentImageSizesSummaries.set(e,i)),i}async prefetchImageSize(e,i,a){const t=this.getImageUrl(i),r=i.getAttribute("data-width");if(r!=null){const l=y.parseNumber(i.getAttribute("data-height"),0);return this.addImageDescriptor(i,t,y.parseNumber(r,0),l,!0)}if(!a)return this.addImageDescriptor(i,t,0,0,!1);const n=this.getImageSizesSummary(i.ownerDocument).descriptors.get(t);if(n)return n;let o=0,g=0;try{if(A.checkIsAbsoluteUrl(t)){const l=await C.getImageSize(t);o=l.width,g=l.height}else{const l=await e.fileParser.getFile(t,e.url,"blob"),m=l&&l.size>0?l:E;try{const c=await C.getImageSize(m);o=c.width,g=c.height}catch{}}}catch(l){this.logger.error(l)}return this.addImageDescriptor(i,t,o,g,o<=0)}revokeObjectURL(e){if(!(!e||!d.startsWith(e,"blob:",!0)))try{URL.revokeObjectURL(e)}catch{}}addImageDescriptor(e,i,a,t,r){const s=this.getImageSizesSummary(e.ownerDocument);let n=s.descriptors.get(i);return n?(!n.checked&&r&&(s.checkedCount+=1),n.width=a,n.height=t,n.url=i,n.checked=r,n):(n={url:i,width:a,height:t,checked:r},r&&(s.checkedCount+=1),s.descriptors.set(i,n),n)}setWidthAndHeight(e,i,a){i>0&&a>0&&y.parseNumber(e.getAttribute("data-width"),0,"parseInt")<=0&&(e.setAttribute("data-width",`${i}`),e.setAttribute("data-height",`${a}`))}getColumnMetrics(){const e=this.rendererViewport.getLayoutMetrics();return{columnWidth:e.columnWidth,columnHeight:e.columnHeight}}resetInlineImageSize(e){const i=y.parseNumber(e.getAttribute("data-width"),0),a=y.parseNumber(e.getAttribute("data-height"),0);if(i<=0||a<=0)return;let t=!1;a<=200?t=this.checkIsInlineImage(e,i,a).foundInlineImage:(e.previousSibling?.nodeType==Node.TEXT_NODE&&e.previousSibling.textContent?.trim()?.length>0||e.nextSibling?.nodeType==Node.TEXT_NODE&&e.nextSibling.textContent?.trim()?.length>0)&&(t=this.checkIsInlineImage(e,i,a).foundInlineImage);const r=h.compareTagName(e.tagName,"IMG")?e:e.parentElement;if(!t||!r)return;const s="1em";e.getAttribute("style")?(e.style.setProperty("width","auto","important"),e.style.setProperty("max-width","100%","important"),e.style.setProperty("height",s,"important"),e.style.setProperty("margin-block-start","0","important"),e.style.setProperty("margin-block-end","0","important")):e.setAttribute("style",`width:auto !important;max-width:100% !important;height:${s} !important;margin-block-start:0 !important;margin-block-end:0 !important;`),r.style.setProperty("vertical-align","-0.2em","important"),r.setAttribute("data-inline-image","true")}handleOnlyOneImageInDocument(e,i,a){const t=a.ownerDocument,r=h.getDocumentBody(t);if(!d.isNullOrWhiteSpace(r.getAttribute("data-handled-one-image")))return;r.setAttribute("data-handled-one-image","true"),r.style.setProperty("display","flex","important"),r.style.setProperty("height","100%","important"),r.style.setProperty("justify-content","center","important"),r.style.setProperty("align-items","center","important");let s=a;h.compareTagName(a.parentElement?.tagName,"SVG")&&(s=a.parentElement,a.style.setProperty("width","auto","important"),a.style.setProperty("max-width","100%","important"),a.style.setProperty("max-height",i+"px","important"),a.style.setProperty("display","block","important")),s.style.setProperty("width","auto","important"),s.style.setProperty("max-width","100%","important"),s.style.setProperty("display","block","important"),s.parentElement&&(s.parentElement.style.textAlign="center"),this.resetImageHeight(a,e,i,.95,!0)}resetImageHeight(e,i,a,t,r){const s=h.compareTagName(e.tagName,"IMAGE")?e.parentElement:e;if(!s)return;const n=y.parseNumber(e.getAttribute("data-width"),0),o=y.parseNumber(e.getAttribute("data-height"),0);n<=0||o<=0||this.forceSetImageHeight(s,i,a,n,o,t,r)}forceSetImageHeight(e,i,a,t,r,s,n){if(S.BrowserCapabilities.supportCssMinMaxFunction()){let o;s&&n?o=`min(calc(${r}px * ${s}),calc(var(${f.ContentLayoutCssVariableNames.ColumnHeight}) * ${s}),calc(var(${f.ContentLayoutCssVariableNames.ColumnWidth}) / ${t} * ${r} * ${s}))`:o=`min(calc(${r}px * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})),calc(var(${f.ContentLayoutCssVariableNames.ColumnHeight}) * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})),calc(var(${f.ContentLayoutCssVariableNames.ColumnWidth}) / ${t} * ${r} * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})))`,e.style.setProperty("height",o,"important")}else{const o=this.calcImageHeight(i,a,t,r)*s;e.style.setProperty("height",o+"px","important")}}calcImageHeight(e,i,a,t){if(i>=t&&e>=a)return t;const r=e/i,s=a/t;return r<=s?e/a*t:i}checkIsOnlyOneImageInDocument(e){const i=h.getDocumentBody(e);return!i||i.textContent.trim()?!1:i.getElementsByTagName("img").length==1||i.getElementsByTagName("image").length==1}checkIsInlineTag(e){const i=e.nodeName;return d.isNullOrWhiteSpace(i)?!1:this.htmlOptions.htmlInlineTags.indexOf(i.toLowerCase())>=0}checkIsInlineImage(e,i,a){let{foundInlineImage:t,imageHeight:r}=this.getInlineImageProperties(e,a);if(t)return{foundInlineImage:t,imageHeight:r};let s=e.parentElement,n=e;for(;s&&!h.compareTagName(s.tagName,"BODY");){if(s.children.length>1||s.children.length==1&&s.textContent.trim().length>0)return this.getInlineImageProperties(n,a);n=s,s=s.parentElement}return{foundInlineImage:t,imageHeight:r}}findSiblingNodes(e){let i=e.previousSibling,a=e.nextSibling;for(;i!=null&&!(!d.isNullOrWhiteSpace(i.textContent)||i.nodeType==Node.ELEMENT_NODE);)i=i.previousSibling;for(;a!=null&&!(!d.isNullOrWhiteSpace(a.textContent)||a.nodeType==Node.ELEMENT_NODE);)a=a.nextSibling;return{previousSiblingNode:i,nextSiblingNode:a}}getInlineImageProperties(e,i){const{previousSiblingNode:a,nextSiblingNode:t}=this.findSiblingNodes(e);let r=!1,s;if(!a&&!t)return{foundInlineImage:r,imageHeight:s};const n=a?.ownerDocument?.defaultView??t?.ownerDocument?.defaultView;let o;if(a?.nodeType==Node.TEXT_NODE&&!d.isNullOrWhiteSpace(a.nodeValue)?o=a.parentElement:t?.nodeType==Node.TEXT_NODE&&!d.isNullOrWhiteSpace(t.nodeValue)?o=t.parentElement:a&&this.checkIsInlineTag(a)?o=a:t&&this.checkIsInlineTag(t)&&(o=t),!o)return{foundInlineImage:r,imageHeight:s};const g=1.25,l=n?.getComputedStyle(o);let m,c,u;l?(m=parseFloat(l.fontSize),c=parseFloat(l.lineHeight),u=parseFloat(l.height)):(m=20,c=m*g,u=c);const w=c>m*g?m*g:c;return this.checkElementIsFootnote(e)||h.compareTagName(e.parentElement?.tagName,"A")&&(h.compareTagName(e.parentElement?.parentElement?.tagName,"SUB")||h.compareTagName(e.parentElement?.parentElement?.tagName,"SUP"))?s=m:u&&u<=w?s=u:s=w,i&&i<s&&(s=i),r=!0,{foundInlineImage:r,imageHeight:s}}checkElementIsFootnote(e){return e.getAttribute("class")?.indexOf("footnote")>=0||e.getAttribute("epub:type")=="noteref"||h.compareTagName(e.tagName,"SUB")||h.compareTagName(e.tagName,"SUP")?!0:e.children.length>0?this.checkElementIsFootnote(e.children[0]):!1}async loadImages(e,i){const a=e;if(!(!a||!i?.length))for(const t of i){if(this.isDisposed||!t)return;const r=t.ownerDocument.defaultView;if(r)if(t instanceof r.HTMLImageElement||t instanceof r.SVGImageElement){const s=t.getAttribute(v.ElementInitialNumberName),n=t.ownerDocument.querySelector(`[${v.ElementInitialNumberName}='${s}']`);n&&await this.loadSingleImage(a,n)}else{const s=t.getElementsByTagName("img");for(let l=0;l<s.length;l++)await this.loadSingleImage(a,s[l]);const n=t.getAttribute(v.ElementInitialNumberName),o=e.getContentContainer()?.querySelector(`[${v.ElementInitialNumberName}='${n}']`),g=o&&o!=t?o.getElementsByTagName("image"):t.getElementsByTagName("image");for(let l=0;l<g.length;l++)await this.loadSingleImage(a,g[l])}}}async loadSingleImage(e,i){if(!i||!e)return;const a=i.getAttribute("data-load-state");if(a=="loaded"||a=="loading"||a=="fail")return;i.setAttribute("data-load-state","loading"),i.onload=()=>{i.setAttribute("data-load-state","loaded")},i.onerror=()=>{i.setAttribute("data-load-state","fail")};let t=i.getAttribute("src")??"";const r=i.getAttribute("data-src")??"";d.isNullOrWhiteSpace(r)||(t=r);let s=t;if(!A.checkIsAbsoluteUrl(s)){const n=await e.fileParser.getFile(s,e.url,"blob");if(n&&n.size>0)if(n.type?.toLowerCase()=="image/svg+xml"){const o=k.convertArrayBufferToString(await n.arrayBuffer()),l=U.getFormatDocument(o).querySelector("image");if(l){s=l.getAttribute("xlink:href")??l.getAttribute("href");try{const m=await C.getImageSize(s),c=m.width,u=m.height;i.setAttribute("data-width",c.toString()),i.setAttribute("data-height",u.toString());const{columnWidth:w,columnHeight:b}=this.getColumnMetrics();this.forceSetImageHeight(i,w,b,c,u,this.htmlOptions.maxImageHeightRatio)}catch(m){this.logger.error(m)}}else s="data:image/svg+xml,"+encodeURIComponent(o)}else s=URL.createObjectURL(n),this.addBlobUrl(e,s);else s=E}if(h.compareTagName(i.tagName,"IMG")){const n=i;if(n.src=s,n.decode)try{await n.decode()}catch(o){this.logger.error("image decode failed","imageUrl",s,o),this.revokeObjectURL(s),setTimeout(async()=>{try{const g=await e.fileParser.getFile(t,e.url,"blob");if(g&&g.size>0){const l=URL.createObjectURL(g);this.addBlobUrl(e,l),n.src=l}else n.src=E}catch(g){this.logger.error(g),n.src=E}},500)}}else S.BrowserCapabilities.isSafari()?i.href.baseVal=s:i.setAttribute("xlink:href",s)}async dispose(){this.isDisposed=!0,this.unbindEvents(),this.documentImageSizesSummaries.clear(),this.resetImageSizeTasks=[];for(const e of[...this.blobUrls.keys()])this.revokeDocumentBlobUrls(e);this.blobUrls.clear()}}exports.HtmlImageLoader=M;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../../kernal/web/BrowserCapabilities.cjs"),t=require("../../../../kernal/EventNames.cjs"),n=require("../../../../kernal/common/text.cjs"),r=require("../../../../kernal/common/url.cjs"),i=require("../../../../kernal/Constants.cjs"),a=require("../../../../kernal/common/number.cjs"),o=require("../../../../kernal/html/finder.cjs"),s=require("../../../../kernal/html/injector.cjs"),c=require("../../../../kernal/html/parser.cjs"),l=require("../../../../kernal/html/image.cjs"),u=require("../../../../kernal/common/encoding.cjs"),d=require("../../HtmlSettings.cjs"),f=require("../style/ContentLayoutCssVariableNames.cjs"),p=require("./error-image.cjs");let m=require("perfect-debounce");var h=`lhx-svg`,g=`imageSizes-`,_=5,v=class{constructor(n,r,i){this.documentsProvider=n,this.rendererViewport=r,this.htmlOptions=i,this.documentImageSizesSummaries=new Map,this.blobUrls=new Map,this.isDisposed=!1,this.resetImageSizeTasks=[],this.onDocumentDisposing=e=>{this.revokeDocumentBlobUrls(e)},this.onImageElementsVisible=async e=>{for(let[t,n]of e.entries())await this.loadImages(t,n)},this.delayLoadOnImageElementsVisible=(0,m.debounce)(this.onImageElementsVisible,100),this.onLayoutChange=async()=>{await this.delayResetAllImageSize()},this.resetAllImageSize=async()=>{for(let e of this.documentsProvider.getLoadedDocuments())await this.resetImageSize(e)},this.delayResetAllImageSize=(0,m.debounce)(this.resetAllImageSize,100),this.prepareImageSize=async(n,r)=>{s.injectCssContent(r,`.${h} {width: 100% !important; height: auto !important; }`,!1,`lhx-svg-style`);let i=[...r.getElementsByTagName(`img`),...r.getElementsByTagName(`image`)],a=this.getImageSizesSummary(r);a.total=i.length;let c=this.documentsProvider.getDocuments().indexOf(n),l=this.getResourceId(),u=await this.getStorage(),d=null;c>=0&&u&&l&&(d=await u.get(g+l,c.toString()));let f=i.length>100;for(let r=0;r<i.length;r++){if(this.isDisposed)return;try{let a=i[r];a.parentElement&&o.compareTagName(a.parentElement.tagName,`SVG`)&&a.parentElement.classList.add(h);let s=this.getImageUrl(a),c=d?.find(e=>e.url==s);c||=await this.prefetchImageSize(n,a,!0),c&&(this.resetImageStyles(a,c.width,c.height),this.resetInlineImageSize(a)),f&&r%10==0&&(this.events.emit(t.EventNames.ProcessedImageCount,{doc:n,totalImageCount:i.length,processedImageCount:r}),await e.BrowserCapabilities.yieldToMain())}catch(e){this.logger.error(e)}}c>=0&&u&&l&&await this.persistImageSizes(u,l,c.toString(),d,a)},this.getImageUrl=e=>{let t=e.getAttribute(`data-preset-preview-url`)==`true`;return o.compareTagName(e.tagName,`IMAGE`)?t?e.getAttribute(`data-src`)??e.getAttribute(`xlink:href`)??e.getAttribute(`href`):e.getAttribute(`xlink:href`)??e.getAttribute(`href`):t?e.getAttribute(`data-src`):e.getAttribute(`src`)},this.resetImageStyles=(t,n,r)=>{if(n<=0||r<=0||!e.BrowserCapabilities.supportCssAspectRatio())return;this.setWidthAndHeight(t,n,r);let i=t;if(o.compareTagName(t.tagName,`IMAGE`)&&(i=t.parentElement),!i)return;i.setAttribute(`width`,`${n}`),i.setAttribute(`height`,`${r}`);let a=n/r,{columnWidth:s,columnHeight:c}=this.getColumnMetrics(),l=r;s>0&&n>s&&(l=s/n*r);let u=c>0?`min(${l}px,${c}px)`:`${l}px`,d=`calc(100% * var(${f.ContentLayoutCssVariableNames.MaxImageWidthRatio}))`;i.getAttribute(`style`)?(i.style.width=d,i.style.height=`auto`,i.style.maxWidth=d,i.style.maxHeight=u,i.style.aspectRatio=`${a}`):i.setAttribute(`style`,`max-width:${d};height:auto;max-height:${u};aspect-ratio:${a};width:${d}`)},this.resetImageWidthHeight=e=>{e.image.style?(e.image.style.setProperty(`width`,`auto`,`important`),e.image.style.setProperty(`max-width`,`100%`,`important`),e.image.style.setProperty(`max-height`,`100%`,`important`)):e.image.setAttribute(`style`,`width:auto !important;max-width:100% !important;max-height:100% !important`),this.resetImageHeight(e.image,e.columnWidth,e.columnHeight,this.htmlOptions.maxImageHeightRatio)},this.flushResetImageSizeTasks=async()=>{if(e.BrowserCapabilities.supportCssAspectRatio()){this.resetImageSizeTasks=[];return}for(;this.resetImageSizeTasks.length>0;){if(this.isDisposed){this.resetImageSizeTasks=[];return}let t=this.resetImageSizeTasks.shift();if(!t)break;this.resetImageWidthHeight(t),await e.BrowserCapabilities.yieldToMain()}},this.resetImageSize=async e=>{let t=e.getContentContainer()?.ownerDocument;if(!t||!o.getDocumentBody(t))return;let{columnWidth:n,columnHeight:r}=this.getColumnMetrics(),i=[...t.getElementsByTagName(`img`),...t.getElementsByTagName(`image`)];if(this.checkIsOnlyOneImageInDocument(t)){let t=i[0];this.handleOnlyOneImageInDocument(n,r,t),await this.loadSingleImage(e,t);return}for(let e of i)this.resetImageSizeTasks.push({image:e,columnWidth:n,columnHeight:r});await this.flushResetImageSizeTasks();for(let t=0;t<Math.min(_,i.length);t++)await this.loadSingleImage(e,i[t])},this.events=this.documentsProvider.owner.events,this.logger=this.documentsProvider.owner.loggerFactory.getLogger(this.constructor.name),this.bindEvents()}bindEvents(){this.events.on(t.EventNames.LayoutChange,this.onLayoutChange),this.events.on(t.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.on(t.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}unbindEvents(){this.events.off(t.EventNames.LayoutChange,this.onLayoutChange),this.events.off(t.EventNames.DocumentDisposing,this.onDocumentDisposing),this.events.off(t.EventNames.ImageElementsVisible,this.delayLoadOnImageElementsVisible)}addBlobUrl(e,t){if(!r.checkIsBlobUrl(t))return;let n=this.blobUrls.get(e);n?n.push(t):this.blobUrls.set(e,[t])}revokeDocumentBlobUrls(e){let t=this.blobUrls.get(e);if(t){for(let e of t)this.revokeObjectURL(e);this.blobUrls.delete(e)}}async preprocessImages(e){let t=e,n=(await t.getVirtualContentContainer())?.ownerDocument;n&&(await this.prepareImageSize(t,n),await this.setImagePreviewUrl(n))}async setImagePreviewUrl(e){let{default:t}=await Promise.resolve().then(()=>require("./placeholder.cjs")),n=e.getElementsByTagName(`img`),r=e.getElementsByTagName(`image`);for(let e=0;e<n.length;e++)this.applyPreviewUrl(n[e],n[e].getAttribute(`src`),t,!1);for(let e=0;e<r.length;e++){let n=r[e],i=n.getAttribute(`xlink:href`)??n.getAttribute(`href`);this.applyPreviewUrl(n,i,t,!0)}}applyPreviewUrl(e,t,r,i){let a=e.getAttribute(`data-preview-src`);n.isNullOrWhiteSpace(a)&&(a=r,e.setAttribute(`data-preview-src`,r)),t==r?e.removeAttribute(`data-loaded`):e.getAttribute(`data-src`)!=r&&e.setAttribute(`data-src`,t??``),i?e.setAttribute(`xlink:href`,a):e.src=a,e.setAttribute(`data-preset-preview-url`,`true`),this.setImageStyle(e)}setImageStyle(t){let r=t.parentElement;r&&r.children.length==1&&n.isNullOrWhiteSpace(r.innerText)&&(e.BrowserCapabilities.supportCssHas()||r.classList.add(d.HtmlSettings.BreakInsideAvoid),r.style.removeProperty(`width`),r.style.removeProperty(`height`))}async persistImageSizes(e,t,n,r,i){let a=Array.from(i.descriptors.values()).filter(e=>e.width>0);if(a.length==0)return;let o=g+t;if(r&&r.length>0){let t=new Set(r.map(e=>e.url)),i=a.filter(e=>!t.has(e.url));i.length>0&&(r.push(...i),await e.set(o,n,r))}else await e.set(o,n,a)}getResourceId(){let e=this.documentsProvider.owner.context;return n.isNullOrWhiteSpace(e.simpleId)?e.id:e.simpleId}async getStorage(){return await this.documentsProvider.owner.services.get(`storage`)}getImageSizesSummary(e){let t=this.documentImageSizesSummaries.get(e);return t||(t={total:0,checkedCount:0,descriptors:new Map},this.documentImageSizesSummaries.set(e,t)),t}async prefetchImageSize(e,t,n){let i=this.getImageUrl(t),o=t.getAttribute(`data-width`);if(o!=null){let e=a.parseNumber(t.getAttribute(`data-height`),0);return this.addImageDescriptor(t,i,a.parseNumber(o,0),e,!0)}if(!n)return this.addImageDescriptor(t,i,0,0,!1);let s=this.getImageSizesSummary(t.ownerDocument).descriptors.get(i);if(s)return s;let c=0,u=0;try{if(r.checkIsAbsoluteUrl(i)){let e=await l.getImageSize(i);c=e.width,u=e.height}else{let t=await e.fileParser.getFile(i,e.url,`blob`),n=t&&t.size>0?t:p.default;try{let e=await l.getImageSize(n);c=e.width,u=e.height}catch{}}}catch(e){this.logger.error(e)}return this.addImageDescriptor(t,i,c,u,c<=0)}revokeObjectURL(e){if(!(!e||!n.startsWith(e,`blob:`,!0)))try{URL.revokeObjectURL(e)}catch{}}addImageDescriptor(e,t,n,r,i){let a=this.getImageSizesSummary(e.ownerDocument),o=a.descriptors.get(t);return o?(!o.checked&&i&&(a.checkedCount+=1),o.width=n,o.height=r,o.url=t,o.checked=i,o):(o={url:t,width:n,height:r,checked:i},i&&(a.checkedCount+=1),a.descriptors.set(t,o),o)}setWidthAndHeight(e,t,n){t>0&&n>0&&a.parseNumber(e.getAttribute(`data-width`),0,`parseInt`)<=0&&(e.setAttribute(`data-width`,`${t}`),e.setAttribute(`data-height`,`${n}`))}getColumnMetrics(){let e=this.rendererViewport.getLayoutMetrics();return{columnWidth:e.columnWidth,columnHeight:e.columnHeight}}resetInlineImageSize(e){let t=a.parseNumber(e.getAttribute(`data-width`),0),n=a.parseNumber(e.getAttribute(`data-height`),0);if(t<=0||n<=0)return;let r=!1;(n<=200||e.previousSibling?.nodeType==Node.TEXT_NODE&&e.previousSibling.textContent?.trim()?.length>0||e.nextSibling?.nodeType==Node.TEXT_NODE&&e.nextSibling.textContent?.trim()?.length>0)&&(r=this.checkIsInlineImage(e,t,n).foundInlineImage);let i=o.compareTagName(e.tagName,`IMG`)?e:e.parentElement;!r||!i||(e.getAttribute(`style`)?(e.style.setProperty(`width`,`auto`,`important`),e.style.setProperty(`max-width`,`100%`,`important`),e.style.setProperty(`height`,`1em`,`important`),e.style.setProperty(`margin-block-start`,`0`,`important`),e.style.setProperty(`margin-block-end`,`0`,`important`)):e.setAttribute(`style`,`width:auto !important;max-width:100% !important;height:1em !important;margin-block-start:0 !important;margin-block-end:0 !important;`),i.style.setProperty(`vertical-align`,`-0.2em`,`important`),i.setAttribute(`data-inline-image`,`true`))}handleOnlyOneImageInDocument(e,t,r){let i=r.ownerDocument,a=o.getDocumentBody(i);if(!n.isNullOrWhiteSpace(a.getAttribute(`data-handled-one-image`)))return;a.setAttribute(`data-handled-one-image`,`true`),a.style.setProperty(`display`,`flex`,`important`),a.style.setProperty(`height`,`100%`,`important`),a.style.setProperty(`justify-content`,`center`,`important`),a.style.setProperty(`align-items`,`center`,`important`);let s=r;o.compareTagName(r.parentElement?.tagName,`SVG`)&&(s=r.parentElement,r.style.setProperty(`width`,`auto`,`important`),r.style.setProperty(`max-width`,`100%`,`important`),r.style.setProperty(`max-height`,t+`px`,`important`),r.style.setProperty(`display`,`block`,`important`)),s.style.setProperty(`width`,`auto`,`important`),s.style.setProperty(`max-width`,`100%`,`important`),s.style.setProperty(`display`,`block`,`important`),s.parentElement&&(s.parentElement.style.textAlign=`center`),this.resetImageHeight(r,e,t,.95,!0)}resetImageHeight(e,t,n,r,i){let s=o.compareTagName(e.tagName,`IMAGE`)?e.parentElement:e;if(!s)return;let c=a.parseNumber(e.getAttribute(`data-width`),0),l=a.parseNumber(e.getAttribute(`data-height`),0);c<=0||l<=0||this.forceSetImageHeight(s,t,n,c,l,r,i)}forceSetImageHeight(t,n,r,i,a,o,s){if(e.BrowserCapabilities.supportCssMinMaxFunction()){let e;e=o&&s?`min(calc(${a}px * ${o}),calc(var(${f.ContentLayoutCssVariableNames.ColumnHeight}) * ${o}),calc(var(${f.ContentLayoutCssVariableNames.ColumnWidth}) / ${i} * ${a} * ${o}))`:`min(calc(${a}px * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})),calc(var(${f.ContentLayoutCssVariableNames.ColumnHeight}) * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})),calc(var(${f.ContentLayoutCssVariableNames.ColumnWidth}) / ${i} * ${a} * var(${f.ContentLayoutCssVariableNames.MaxImageHeightRatio})))`,t.style.setProperty(`height`,e,`important`)}else{let e=this.calcImageHeight(n,r,i,a)*o;t.style.setProperty(`height`,e+`px`,`important`)}}calcImageHeight(e,t,n,r){return t>=r&&e>=n?r:e/t<=n/r?e/n*r:t}checkIsOnlyOneImageInDocument(e){let t=o.getDocumentBody(e);return!t||t.textContent.trim()?!1:t.getElementsByTagName(`img`).length==1||t.getElementsByTagName(`image`).length==1}checkIsInlineTag(e){let t=e.nodeName;return!n.isNullOrWhiteSpace(t)&&this.htmlOptions.htmlInlineTags.indexOf(t.toLowerCase())>=0}checkIsInlineImage(e,t,n){let{foundInlineImage:r,imageHeight:i}=this.getInlineImageProperties(e,n);if(r)return{foundInlineImage:r,imageHeight:i};let a=e.parentElement,s=e;for(;a&&!o.compareTagName(a.tagName,`BODY`);){if(a.children.length>1||a.children.length==1&&a.textContent.trim().length>0)return this.getInlineImageProperties(s,n);s=a,a=a.parentElement}return{foundInlineImage:r,imageHeight:i}}findSiblingNodes(e){let t=e.previousSibling,r=e.nextSibling;for(;t!=null&&!(!n.isNullOrWhiteSpace(t.textContent)||t.nodeType==Node.ELEMENT_NODE);)t=t.previousSibling;for(;r!=null&&!(!n.isNullOrWhiteSpace(r.textContent)||r.nodeType==Node.ELEMENT_NODE);)r=r.nextSibling;return{previousSiblingNode:t,nextSiblingNode:r}}getInlineImageProperties(e,t){let{previousSiblingNode:r,nextSiblingNode:i}=this.findSiblingNodes(e),a=!1,s;if(!r&&!i)return{foundInlineImage:a,imageHeight:s};let c=r?.ownerDocument?.defaultView??i?.ownerDocument?.defaultView,l;if(r?.nodeType==Node.TEXT_NODE&&!n.isNullOrWhiteSpace(r.nodeValue)?l=r.parentElement:i?.nodeType==Node.TEXT_NODE&&!n.isNullOrWhiteSpace(i.nodeValue)?l=i.parentElement:r&&this.checkIsInlineTag(r)?l=r:i&&this.checkIsInlineTag(i)&&(l=i),!l)return{foundInlineImage:a,imageHeight:s};let u=1.25,d=c?.getComputedStyle(l),f,p,m;d?(f=parseFloat(d.fontSize),p=parseFloat(d.lineHeight),m=parseFloat(d.height)):(f=20,p=f*u,m=p);let h=p>f*u?f*u:p;return s=this.checkElementIsFootnote(e)||o.compareTagName(e.parentElement?.tagName,`A`)&&(o.compareTagName(e.parentElement?.parentElement?.tagName,`SUB`)||o.compareTagName(e.parentElement?.parentElement?.tagName,`SUP`))?f:m&&m<=h?m:h,t&&t<s&&(s=t),a=!0,{foundInlineImage:a,imageHeight:s}}checkElementIsFootnote(e){return e.getAttribute(`class`)?.indexOf(`footnote`)>=0||e.getAttribute(`epub:type`)==`noteref`||o.compareTagName(e.tagName,`SUB`)||o.compareTagName(e.tagName,`SUP`)?!0:e.children.length>0&&this.checkElementIsFootnote(e.children[0])}async loadImages(e,t){let n=e;if(!(!n||!t?.length))for(let r of t){if(this.isDisposed||!r)return;let t=r.ownerDocument.defaultView;if(t){if(r instanceof t.HTMLImageElement||r instanceof t.SVGImageElement){let e=r.getAttribute(i.ElementInitialNumberName),t=r.ownerDocument.querySelector(`[${i.ElementInitialNumberName}='${e}']`);t&&await this.loadSingleImage(n,t)}else{let t=r.getElementsByTagName(`img`);for(let e=0;e<t.length;e++)await this.loadSingleImage(n,t[e]);let a=r.getAttribute(i.ElementInitialNumberName),o=e.getContentContainer()?.querySelector(`[${i.ElementInitialNumberName}='${a}']`),s=o&&o!=r?o.getElementsByTagName(`image`):r.getElementsByTagName(`image`);for(let e=0;e<s.length;e++)await this.loadSingleImage(n,s[e])}}}}async loadSingleImage(t,i){if(!i||!t)return;let a=i.getAttribute(`data-load-state`);if(a==`loaded`||a==`loading`||a==`fail`)return;i.setAttribute(`data-load-state`,`loading`),i.onload=()=>{i.setAttribute(`data-load-state`,`loaded`)},i.onerror=()=>{i.setAttribute(`data-load-state`,`fail`)};let s=i.getAttribute(`src`)??``,d=i.getAttribute(`data-src`)??``;n.isNullOrWhiteSpace(d)||(s=d);let f=s;if(!r.checkIsAbsoluteUrl(f)){let e=await t.fileParser.getFile(f,t.url,`blob`);if(e&&e.size>0){if(e.type?.toLowerCase()==`image/svg+xml`){let t=u.convertArrayBufferToString(await e.arrayBuffer()),n=c.getFormatDocument(t).querySelector(`image`);if(n){f=n.getAttribute(`xlink:href`)??n.getAttribute(`href`);try{let e=await l.getImageSize(f),t=e.width,n=e.height;i.setAttribute(`data-width`,t.toString()),i.setAttribute(`data-height`,n.toString());let{columnWidth:r,columnHeight:a}=this.getColumnMetrics();this.forceSetImageHeight(i,r,a,t,n,this.htmlOptions.maxImageHeightRatio)}catch(e){this.logger.error(e)}}else f=`data:image/svg+xml,`+encodeURIComponent(t)}else f=URL.createObjectURL(e),this.addBlobUrl(t,f)}else f=p.default}if(o.compareTagName(i.tagName,`IMG`)){let e=i;if(e.src=f,e.decode)try{await e.decode()}catch(n){this.logger.error(`image decode failed`,`imageUrl`,f,n),this.revokeObjectURL(f),setTimeout(async()=>{try{let n=await t.fileParser.getFile(s,t.url,`blob`);if(n&&n.size>0){let r=URL.createObjectURL(n);this.addBlobUrl(t,r),e.src=r}else e.src=p.default}catch(t){this.logger.error(t),e.src=p.default}},500)}}else e.BrowserCapabilities.isSafari()?i.href.baseVal=f:i.setAttribute(`xlink:href`,f)}async dispose(){this.isDisposed=!0,this.unbindEvents(),this.documentImageSizesSummaries.clear(),this.resetImageSizeTasks=[];for(let e of[...this.blobUrls.keys()])this.revokeDocumentBlobUrls(e);this.blobUrls.clear()}};exports.HtmlImageLoader=v;