@papyrus-sdk/engine-native 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/dist/index.d.mts +90 -3
  2. package/dist/index.d.ts +90 -3
  3. package/dist/index.js +483 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +483 -4
  6. package/dist/index.mjs.map +1 -1
  7. package/ios/PapyrusNativeEngine.m +447 -372
  8. package/ios/PapyrusNativeEngine.podspec +15 -15
  9. package/ios/PapyrusPageView.h +19 -16
  10. package/ios/PapyrusPageView.m +63 -54
  11. package/package.json +36 -32
  12. package/LICENSE +0 -21
  13. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  14. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  15. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  16. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/cache-v2-55a2e41fcdfef7f23046.json +0 -1323
  17. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/cmakeFiles-v1-ce719ceafe10fdc060d9.json +0 -184
  18. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/codemodel-v2-ba59984c0779dea51592.json +0 -60
  19. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  20. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/index-2025-12-22T13-33-34-0909.json +0 -92
  21. package/android/.cxx/Debug/6t29645j/arm64-v8a/.cmake/api/v1/reply/target-papyrus_text-Debug-29cd4996bc13fe24a65c.json +0 -168
  22. package/android/.cxx/Debug/6t29645j/arm64-v8a/.ninja_deps +0 -0
  23. package/android/.cxx/Debug/6t29645j/arm64-v8a/.ninja_log +0 -20
  24. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeCache.txt +0 -400
  25. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  26. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  27. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  28. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  29. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  30. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  31. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  32. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  33. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  34. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/CMakeOutput.log +0 -264
  35. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/TargetDirectories.txt +0 -3
  36. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/cmake.check_cache +0 -1
  37. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  38. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  39. package/android/.cxx/Debug/6t29645j/arm64-v8a/CMakeFiles/rules.ninja +0 -64
  40. package/android/.cxx/Debug/6t29645j/arm64-v8a/additional_project_files.txt +0 -0
  41. package/android/.cxx/Debug/6t29645j/arm64-v8a/android_gradle_build.json +0 -38
  42. package/android/.cxx/Debug/6t29645j/arm64-v8a/android_gradle_build_mini.json +0 -27
  43. package/android/.cxx/Debug/6t29645j/arm64-v8a/build.ninja +0 -158
  44. package/android/.cxx/Debug/6t29645j/arm64-v8a/build_file_index.txt +0 -1
  45. package/android/.cxx/Debug/6t29645j/arm64-v8a/cmake_install.cmake +0 -54
  46. package/android/.cxx/Debug/6t29645j/arm64-v8a/compile_commands.json +0 -12
  47. package/android/.cxx/Debug/6t29645j/arm64-v8a/compile_commands.json.bin +0 -0
  48. package/android/.cxx/Debug/6t29645j/arm64-v8a/configure_fingerprint.bin +0 -28
  49. package/android/.cxx/Debug/6t29645j/arm64-v8a/metadata_generation_command.txt +0 -19
  50. package/android/.cxx/Debug/6t29645j/arm64-v8a/prefab_config.json +0 -4
  51. package/android/.cxx/Debug/6t29645j/arm64-v8a/symbol_folder_index.txt +0 -1
  52. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  53. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  54. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  55. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/cache-v2-7f933b968e76d6ce336c.json +0 -1323
  56. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/cmakeFiles-v1-439d2bc9e04bf2a43452.json +0 -184
  57. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/codemodel-v2-efc4cfee3dc3a5ec05be.json +0 -60
  58. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  59. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/index-2025-12-22T13-33-36-0881.json +0 -92
  60. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.cmake/api/v1/reply/target-papyrus_text-Debug-e3f83458cbaf3644c279.json +0 -168
  61. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.ninja_deps +0 -0
  62. package/android/.cxx/Debug/6t29645j/armeabi-v7a/.ninja_log +0 -20
  63. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeCache.txt +0 -400
  64. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  65. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  66. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  67. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  68. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  69. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  70. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  71. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  72. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  73. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/CMakeOutput.log +0 -268
  74. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/TargetDirectories.txt +0 -3
  75. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/cmake.check_cache +0 -1
  76. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  77. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  78. package/android/.cxx/Debug/6t29645j/armeabi-v7a/CMakeFiles/rules.ninja +0 -64
  79. package/android/.cxx/Debug/6t29645j/armeabi-v7a/additional_project_files.txt +0 -0
  80. package/android/.cxx/Debug/6t29645j/armeabi-v7a/android_gradle_build.json +0 -38
  81. package/android/.cxx/Debug/6t29645j/armeabi-v7a/android_gradle_build_mini.json +0 -27
  82. package/android/.cxx/Debug/6t29645j/armeabi-v7a/build.ninja +0 -158
  83. package/android/.cxx/Debug/6t29645j/armeabi-v7a/build_file_index.txt +0 -1
  84. package/android/.cxx/Debug/6t29645j/armeabi-v7a/cmake_install.cmake +0 -54
  85. package/android/.cxx/Debug/6t29645j/armeabi-v7a/compile_commands.json +0 -12
  86. package/android/.cxx/Debug/6t29645j/armeabi-v7a/compile_commands.json.bin +0 -0
  87. package/android/.cxx/Debug/6t29645j/armeabi-v7a/configure_fingerprint.bin +0 -28
  88. package/android/.cxx/Debug/6t29645j/armeabi-v7a/metadata_generation_command.txt +0 -19
  89. package/android/.cxx/Debug/6t29645j/armeabi-v7a/prefab_config.json +0 -4
  90. package/android/.cxx/Debug/6t29645j/armeabi-v7a/symbol_folder_index.txt +0 -1
  91. package/android/.cxx/Debug/6t29645j/hash_key.txt +0 -26
  92. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  93. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  94. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  95. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/cache-v2-921e99e188641cccb611.json +0 -1323
  96. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/cmakeFiles-v1-842a746390c683135141.json +0 -184
  97. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/codemodel-v2-5a1f9507fc5ae29259c9.json +0 -60
  98. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  99. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/index-2025-12-22T13-33-37-0961.json +0 -92
  100. package/android/.cxx/Debug/6t29645j/x86/.cmake/api/v1/reply/target-papyrus_text-Debug-3cc07532ad82ada3b95c.json +0 -168
  101. package/android/.cxx/Debug/6t29645j/x86/.ninja_deps +0 -0
  102. package/android/.cxx/Debug/6t29645j/x86/.ninja_log +0 -20
  103. package/android/.cxx/Debug/6t29645j/x86/CMakeCache.txt +0 -400
  104. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  105. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  106. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  107. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  108. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  109. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  110. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  111. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  112. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  113. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/CMakeOutput.log +0 -258
  114. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/TargetDirectories.txt +0 -3
  115. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/cmake.check_cache +0 -1
  116. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  117. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  118. package/android/.cxx/Debug/6t29645j/x86/CMakeFiles/rules.ninja +0 -64
  119. package/android/.cxx/Debug/6t29645j/x86/additional_project_files.txt +0 -0
  120. package/android/.cxx/Debug/6t29645j/x86/android_gradle_build.json +0 -38
  121. package/android/.cxx/Debug/6t29645j/x86/android_gradle_build_mini.json +0 -27
  122. package/android/.cxx/Debug/6t29645j/x86/build.ninja +0 -158
  123. package/android/.cxx/Debug/6t29645j/x86/build_file_index.txt +0 -1
  124. package/android/.cxx/Debug/6t29645j/x86/cmake_install.cmake +0 -54
  125. package/android/.cxx/Debug/6t29645j/x86/compile_commands.json +0 -12
  126. package/android/.cxx/Debug/6t29645j/x86/compile_commands.json.bin +0 -0
  127. package/android/.cxx/Debug/6t29645j/x86/configure_fingerprint.bin +0 -28
  128. package/android/.cxx/Debug/6t29645j/x86/metadata_generation_command.txt +0 -19
  129. package/android/.cxx/Debug/6t29645j/x86/prefab_config.json +0 -4
  130. package/android/.cxx/Debug/6t29645j/x86/symbol_folder_index.txt +0 -1
  131. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/cache-v2 +0 -0
  132. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/cmakeFiles-v1 +0 -0
  133. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/query/client-agp/codemodel-v2 +0 -0
  134. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/cache-v2-de693df49d051882903b.json +0 -1323
  135. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/cmakeFiles-v1-8206847cf10ce80b1459.json +0 -184
  136. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/codemodel-v2-ad9301b1a16c83f532c2.json +0 -60
  137. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/directory-.-Debug-d0094a50bb2071803777.json +0 -14
  138. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/index-2025-12-22T13-33-39-0005.json +0 -92
  139. package/android/.cxx/Debug/6t29645j/x86_64/.cmake/api/v1/reply/target-papyrus_text-Debug-e1bb1d27c41dc820b379.json +0 -168
  140. package/android/.cxx/Debug/6t29645j/x86_64/.ninja_deps +0 -0
  141. package/android/.cxx/Debug/6t29645j/x86_64/.ninja_log +0 -20
  142. package/android/.cxx/Debug/6t29645j/x86_64/CMakeCache.txt +0 -400
  143. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCCompiler.cmake +0 -72
  144. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeCXXCompiler.cmake +0 -83
  145. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_C.bin +0 -0
  146. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeDetermineCompilerABI_CXX.bin +0 -0
  147. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CMakeSystem.cmake +0 -15
  148. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.c +0 -803
  149. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdC/CMakeCCompilerId.o +0 -0
  150. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.cpp +0 -791
  151. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/3.22.1-g37088a8-dirty/CompilerIdCXX/CMakeCXXCompilerId.o +0 -0
  152. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/CMakeOutput.log +0 -258
  153. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/TargetDirectories.txt +0 -3
  154. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/cmake.check_cache +0 -1
  155. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/papyrus_text.dir/papyrus_outline.cpp.o +0 -0
  156. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/papyrus_text.dir/papyrus_text_search.cpp.o +0 -0
  157. package/android/.cxx/Debug/6t29645j/x86_64/CMakeFiles/rules.ninja +0 -64
  158. package/android/.cxx/Debug/6t29645j/x86_64/additional_project_files.txt +0 -0
  159. package/android/.cxx/Debug/6t29645j/x86_64/android_gradle_build.json +0 -38
  160. package/android/.cxx/Debug/6t29645j/x86_64/android_gradle_build_mini.json +0 -27
  161. package/android/.cxx/Debug/6t29645j/x86_64/build.ninja +0 -158
  162. package/android/.cxx/Debug/6t29645j/x86_64/build_file_index.txt +0 -1
  163. package/android/.cxx/Debug/6t29645j/x86_64/cmake_install.cmake +0 -54
  164. package/android/.cxx/Debug/6t29645j/x86_64/compile_commands.json +0 -12
  165. package/android/.cxx/Debug/6t29645j/x86_64/compile_commands.json.bin +0 -0
  166. package/android/.cxx/Debug/6t29645j/x86_64/configure_fingerprint.bin +0 -28
  167. package/android/.cxx/Debug/6t29645j/x86_64/metadata_generation_command.txt +0 -19
  168. package/android/.cxx/Debug/6t29645j/x86_64/prefab_config.json +0 -4
  169. package/android/.cxx/Debug/6t29645j/x86_64/symbol_folder_index.txt +0 -1
  170. package/android/.cxx/tools/debug/arm64-v8a/compile_commands.json +0 -12
  171. package/android/.cxx/tools/debug/armeabi-v7a/compile_commands.json +0 -12
  172. package/android/.cxx/tools/debug/x86/compile_commands.json +0 -12
  173. package/android/.cxx/tools/debug/x86_64/compile_commands.json +0 -12
  174. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/results.bin +0 -1
  175. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/android/support/v4/util/ArrayMap.dex +0 -0
  176. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/BuildConfig.dex +0 -0
  177. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusEngineStore$EngineState.dex +0 -0
  178. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusEngineStore.dex +0 -0
  179. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusNativeEngineModule$1.dex +0 -0
  180. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusNativeEngineModule.dex +0 -0
  181. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusOutline.dex +0 -0
  182. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusOutlineItem.dex +0 -0
  183. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPackage.dex +0 -0
  184. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPageView.dex +0 -0
  185. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusPageViewManager.dex +0 -0
  186. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextHit.dex +0 -0
  187. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSearch.dex +0 -0
  188. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSelect.dex +0 -0
  189. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/papyrus/engine/PapyrusTextSelection.dex +0 -0
  190. package/android/build/.transforms/2a70e7e4bf5a7ddacb39b95e5520ae88/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  191. package/android/build/.transforms/b336bac6032a9c6be0544a913e5a030c/results.bin +0 -1
  192. package/android/build/.transforms/b336bac6032a9c6be0544a913e5a030c/transformed/classes/classes_dex/classes.dex +0 -0
  193. package/android/build/generated/source/buildConfig/debug/com/papyrus/engine/BuildConfig.java +0 -10
  194. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
  195. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  196. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  197. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  198. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  199. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  200. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  201. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_command_papyrus_text.bat +0 -5
  202. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_model.json +0 -186
  203. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_stderr_papyrus_text.txt +0 -0
  204. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/build_stdout_papyrus_text.txt +0 -2
  205. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_157_timing.txt +0 -8
  206. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_167_timing.txt +0 -8
  207. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_168_timing.txt +0 -14
  208. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_172_timing.txt +0 -8
  209. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_2919_timing.txt +0 -6
  210. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_3311_timing.txt +0 -3
  211. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/generate_cxx_metadata_450_timing.txt +0 -3
  212. package/android/build/intermediates/cxx/Debug/6t29645j/logs/arm64-v8a/metadata_generation_record.json +0 -41
  213. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_command_papyrus_text.bat +0 -5
  214. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_model.json +0 -186
  215. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_stderr_papyrus_text.txt +0 -0
  216. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/build_stdout_papyrus_text.txt +0 -2
  217. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_158_timing.txt +0 -6
  218. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_160_timing.txt +0 -6
  219. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_164_timing.txt +0 -6
  220. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_168_timing.txt +0 -6
  221. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_2922_timing.txt +0 -6
  222. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_3311_timing.txt +0 -3
  223. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/generate_cxx_metadata_450_timing.txt +0 -3
  224. package/android/build/intermediates/cxx/Debug/6t29645j/logs/armeabi-v7a/metadata_generation_record.json +0 -41
  225. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_command_papyrus_text.bat +0 -5
  226. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_model.json +0 -186
  227. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_stderr_papyrus_text.txt +0 -0
  228. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/build_stdout_papyrus_text.txt +0 -2
  229. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_160_timing.txt +0 -5
  230. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_164_timing.txt +0 -3
  231. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_168_timing.txt +0 -6
  232. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_170_timing.txt +0 -6
  233. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_2907_timing.txt +0 -6
  234. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_3311_timing.txt +0 -3
  235. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/generate_cxx_metadata_450_timing.txt +0 -3
  236. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86/metadata_generation_record.json +0 -41
  237. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_command_papyrus_text.bat +0 -5
  238. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_model.json +0 -186
  239. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_stderr_papyrus_text.txt +0 -0
  240. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/build_stdout_papyrus_text.txt +0 -2
  241. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_155_timing.txt +0 -6
  242. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_160_timing.txt +0 -6
  243. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_164_timing.txt +0 -3
  244. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_168_timing.txt +0 -6
  245. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_2916_timing.txt +0 -6
  246. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_3311_timing.txt +0 -5
  247. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/generate_cxx_metadata_450_timing.txt +0 -6
  248. package/android/build/intermediates/cxx/Debug/6t29645j/logs/x86_64/metadata_generation_record.json +0 -41
  249. package/android/build/intermediates/cxx/Debug/6t29645j/obj/arm64-v8a/libpapyrus_text.so +0 -0
  250. package/android/build/intermediates/cxx/Debug/6t29645j/obj/armeabi-v7a/libpapyrus_text.so +0 -0
  251. package/android/build/intermediates/cxx/Debug/6t29645j/obj/x86/libpapyrus_text.so +0 -0
  252. package/android/build/intermediates/cxx/Debug/6t29645j/obj/x86_64/libpapyrus_text.so +0 -0
  253. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  254. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  255. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  256. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  257. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  258. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/android/support/v4/util/ArrayMap.class +0 -0
  259. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/BuildConfig.class +0 -0
  260. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusEngineStore$EngineState.class +0 -0
  261. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusEngineStore.class +0 -0
  262. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusNativeEngineModule$1.class +0 -0
  263. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusNativeEngineModule.class +0 -0
  264. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusOutline.class +0 -0
  265. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusOutlineItem.class +0 -0
  266. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPackage.class +0 -0
  267. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPageView.class +0 -0
  268. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusPageViewManager.class +0 -0
  269. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextHit.class +0 -0
  270. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSearch.class +0 -0
  271. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSelect.class +0 -0
  272. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/papyrus/engine/PapyrusTextSelection.class +0 -0
  273. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/arm64-v8a/libpapyrus_text.so +0 -0
  274. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/armeabi-v7a/libpapyrus_text.so +0 -0
  275. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86/libpapyrus_text.so +0 -0
  276. package/android/build/intermediates/library_jni/debug/copyDebugJniLibsProjectOnly/jni/x86_64/libpapyrus_text.so +0 -0
  277. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  278. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
  279. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
  280. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libpapyrus_text.so +0 -0
  281. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/armeabi-v7a/libpapyrus_text.so +0 -0
  282. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86/libpapyrus_text.so +0 -0
  283. package/android/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/x86_64/libpapyrus_text.so +0 -0
  284. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  285. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  286. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/android/support/v4/util/ArrayMap.class +0 -0
  287. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/BuildConfig.class +0 -0
  288. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusEngineStore$EngineState.class +0 -0
  289. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusEngineStore.class +0 -0
  290. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusNativeEngineModule$1.class +0 -0
  291. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusNativeEngineModule.class +0 -0
  292. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusOutline.class +0 -0
  293. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusOutlineItem.class +0 -0
  294. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPackage.class +0 -0
  295. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPageView.class +0 -0
  296. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusPageViewManager.class +0 -0
  297. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextHit.class +0 -0
  298. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSearch.class +0 -0
  299. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSelect.class +0 -0
  300. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/papyrus/engine/PapyrusTextSelection.class +0 -0
  301. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  302. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  303. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
  304. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusNativeEngineModule$1.class.uniqueId2 +0 -0
  305. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusNativeEngineModule.class.uniqueId1 +0 -0
  306. package/android/build/tmp/compileDebugJavaWithJavac/compileTransaction/stash-dir/PapyrusPackage.class.uniqueId0 +0 -0
  307. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
package/dist/index.js CHANGED
@@ -19,13 +19,112 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  // index.ts
20
20
  var index_exports = {};
21
21
  __export(index_exports, {
22
+ MobileDocumentEngine: () => MobileDocumentEngine,
22
23
  NativeDocumentEngine: () => NativeDocumentEngine,
23
- PapyrusPageView: () => PapyrusPageView
24
+ PapyrusPageView: () => PapyrusPageView,
25
+ WebViewDocumentEngine: () => WebViewDocumentEngine
24
26
  });
25
27
  module.exports = __toCommonJS(index_exports);
26
28
  var import_react_native = require("react-native");
27
29
  var import_core = require("@papyrus-sdk/core");
30
+ var import_types = require("@papyrus-sdk/types");
28
31
  var MODULE_NAME = "PapyrusNativeEngine";
32
+ var BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
33
+ var BASE64_LOOKUP = (() => {
34
+ const table = new Uint8Array(256);
35
+ table.fill(255);
36
+ for (let i = 0; i < BASE64_CHARS.length; i += 1) {
37
+ table[BASE64_CHARS.charCodeAt(i)] = i;
38
+ }
39
+ return table;
40
+ })();
41
+ var parseDataUri = (value) => {
42
+ const match = /^data:([^;,]+)?(;base64)?,(.*)$/.exec(value);
43
+ if (!match) return null;
44
+ return {
45
+ mime: match[1] ?? "",
46
+ isBase64: Boolean(match[2]),
47
+ data: match[3] ?? ""
48
+ };
49
+ };
50
+ var looksLikeUri = (value) => value.startsWith("http://") || value.startsWith("https://") || value.startsWith("/") || value.startsWith("./") || value.startsWith("../") || value.startsWith("file://");
51
+ var isLikelyBase64 = (value) => {
52
+ if (looksLikeUri(value)) return false;
53
+ if (value.includes(".")) return false;
54
+ if (value.length < 16) return false;
55
+ return /^[A-Za-z0-9+/=]+$/.test(value);
56
+ };
57
+ var isHttpUri = (value) => value.startsWith("http://") || value.startsWith("https://");
58
+ var decodeBase64 = (value) => {
59
+ const clean = value.replace(/[^A-Za-z0-9+/=]/g, "");
60
+ const padding = clean.endsWith("==") ? 2 : clean.endsWith("=") ? 1 : 0;
61
+ const outputLength = Math.max(0, clean.length * 3 / 4 - padding);
62
+ const output = new Uint8Array(outputLength);
63
+ let buffer = 0;
64
+ let bits = 0;
65
+ let index = 0;
66
+ for (let i = 0; i < clean.length; i += 1) {
67
+ const charCode = clean.charCodeAt(i);
68
+ if (charCode === 61) break;
69
+ const valueIndex = BASE64_LOOKUP[charCode];
70
+ if (valueIndex === 255) continue;
71
+ buffer = buffer << 6 | valueIndex;
72
+ bits += 6;
73
+ if (bits >= 8) {
74
+ bits -= 8;
75
+ output[index++] = buffer >> bits & 255;
76
+ }
77
+ }
78
+ return output;
79
+ };
80
+ var encodeBase64 = (bytes) => {
81
+ let output = "";
82
+ let buffer = 0;
83
+ let bits = 0;
84
+ for (let i = 0; i < bytes.length; i += 1) {
85
+ buffer = buffer << 8 | bytes[i];
86
+ bits += 8;
87
+ while (bits >= 6) {
88
+ bits -= 6;
89
+ output += BASE64_CHARS[buffer >> bits & 63];
90
+ }
91
+ }
92
+ if (bits > 0) {
93
+ output += BASE64_CHARS[buffer << 6 - bits & 63];
94
+ }
95
+ const remainder = bytes.length % 3;
96
+ if (remainder === 1) return `${output}==`;
97
+ if (remainder === 2) return `${output}=`;
98
+ return output;
99
+ };
100
+ var isLoadRequest = (input) => typeof input === "object" && input !== null && "source" in input && "type" in input;
101
+ var normalizeLoadInput = (input) => isLoadRequest(input) ? { source: input.source, type: input.type } : { source: input };
102
+ var inferDocumentType = (source) => {
103
+ if (typeof source === "string") {
104
+ const dataUri = parseDataUri(source);
105
+ if (dataUri?.mime) {
106
+ const mime = dataUri.mime.toLowerCase();
107
+ if (mime.includes("epub")) return "epub";
108
+ if (mime.includes("text")) return "text";
109
+ if (mime.includes("pdf")) return "pdf";
110
+ }
111
+ const clean = source.split("?")[0].split("#")[0];
112
+ const ext = clean.includes(".") ? clean.split(".").pop()?.toLowerCase() : void 0;
113
+ if (ext === "epub") return "epub";
114
+ if (ext === "txt") return "text";
115
+ if (ext === "pdf") return "pdf";
116
+ return "pdf";
117
+ }
118
+ if (typeof source === "object" && source !== null && "uri" in source) {
119
+ const uri = source.uri;
120
+ const clean = uri.split("?")[0].split("#")[0];
121
+ const ext = clean.includes(".") ? clean.split(".").pop()?.toLowerCase() : void 0;
122
+ if (ext === "epub") return "epub";
123
+ if (ext === "txt") return "text";
124
+ if (ext === "pdf") return "pdf";
125
+ }
126
+ return "pdf";
127
+ };
29
128
  var PapyrusPageView = (0, import_react_native.requireNativeComponent)("PapyrusPageView");
30
129
  var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
31
130
  constructor() {
@@ -39,7 +138,11 @@ var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
39
138
  this.nativeModule = import_react_native.NativeModules[MODULE_NAME] ?? null;
40
139
  this.engineId = this.nativeModule?.createEngine ? this.nativeModule.createEngine() : "default";
41
140
  }
42
- async load(source) {
141
+ async load(input) {
142
+ const { source, type } = normalizeLoadInput(input);
143
+ if (type && type !== "pdf") {
144
+ throw new Error(`[NativeDocumentEngine] Tipo de documento n\xE3o suportado: ${type}`);
145
+ }
43
146
  const native = this.assertNativeModule();
44
147
  const normalized = await this.normalizeSource(source);
45
148
  const result = native.load ? await native.load(this.engineId, normalized) : void 0;
@@ -134,7 +237,15 @@ var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
134
237
  return this.nativeModule;
135
238
  }
136
239
  async normalizeSource(source) {
137
- if (typeof source === "string") return { uri: source };
240
+ if (typeof source === "string") {
241
+ const dataUri = parseDataUri(source);
242
+ if (dataUri?.isBase64) {
243
+ return { data: decodeBase64(dataUri.data) };
244
+ }
245
+ if (looksLikeUri(source)) return { uri: source };
246
+ if (isLikelyBase64(source)) return { data: decodeBase64(source) };
247
+ return { uri: source };
248
+ }
138
249
  if (this.isUriSource(source)) return { uri: source.uri };
139
250
  if (this.isDataSource(source)) return { data: source.data };
140
251
  if (this.isFileLike(source)) return { data: await source.arrayBuffer() };
@@ -156,9 +267,377 @@ var NativeDocumentEngine = class extends import_core.BaseDocumentEngine {
156
267
  return null;
157
268
  }
158
269
  };
270
+ var WebViewDocumentEngine = class extends import_core.BaseDocumentEngine {
271
+ constructor() {
272
+ super(...arguments);
273
+ this.bridge = null;
274
+ this.ready = false;
275
+ this.requestId = 0;
276
+ this.pending = /* @__PURE__ */ new Map();
277
+ this.bridgeResolvers = [];
278
+ this.readyResolvers = [];
279
+ this.pageCount = 0;
280
+ this.currentPage = 1;
281
+ this.zoom = 1;
282
+ this.rotation = 0;
283
+ this.outline = [];
284
+ }
285
+ getRenderTargetType() {
286
+ return "webview";
287
+ }
288
+ attachBridge(bridge) {
289
+ this.bridge = bridge;
290
+ this.bridgeResolvers.forEach((resolve) => resolve(bridge));
291
+ this.bridgeResolvers = [];
292
+ }
293
+ handleMessage(raw) {
294
+ let message = null;
295
+ try {
296
+ message = JSON.parse(raw);
297
+ } catch {
298
+ return;
299
+ }
300
+ if (!message) return;
301
+ if (message.type === "ready") {
302
+ this.ready = true;
303
+ this.readyResolvers.forEach((resolve) => resolve());
304
+ this.readyResolvers = [];
305
+ return;
306
+ }
307
+ if (message.type === "response") {
308
+ const pending = this.pending.get(message.id);
309
+ if (!pending) return;
310
+ this.pending.delete(message.id);
311
+ if (message.ok) {
312
+ pending.resolve(message.data);
313
+ } else {
314
+ pending.reject(new Error(message.error ?? "[Papyrus] WebView runtime error"));
315
+ }
316
+ return;
317
+ }
318
+ if (message.type === "state") {
319
+ if (typeof message.payload.pageCount === "number") this.pageCount = message.payload.pageCount;
320
+ if (typeof message.payload.currentPage === "number") this.currentPage = message.payload.currentPage;
321
+ if (typeof message.payload.zoom === "number") this.zoom = message.payload.zoom;
322
+ if (Array.isArray(message.payload.outline)) this.outline = message.payload.outline;
323
+ return;
324
+ }
325
+ if (message.type === "event") {
326
+ const payload = message.payload ?? {};
327
+ if (message.name === "RUNTIME_LOG") {
328
+ if (__DEV__) {
329
+ const text = typeof payload?.message === "string" ? payload.message : JSON.stringify(payload);
330
+ console.log("[Papyrus WebView runtime]", text);
331
+ }
332
+ return;
333
+ }
334
+ if (message.name === "RUNTIME_ERROR") {
335
+ if (__DEV__) {
336
+ console.warn("[Papyrus WebView runtime]", payload);
337
+ }
338
+ return;
339
+ }
340
+ if (message.name === import_types.PapyrusEventType.TEXT_SELECTED) {
341
+ import_core.papyrusEvents.emit(import_types.PapyrusEventType.TEXT_SELECTED, payload);
342
+ } else if (message.name === import_types.PapyrusEventType.SEARCH_TRIGGERED) {
343
+ import_core.papyrusEvents.emit(import_types.PapyrusEventType.SEARCH_TRIGGERED, payload);
344
+ } else if (message.name === import_types.PapyrusEventType.DOCUMENT_LOADED) {
345
+ if (typeof payload.pageCount === "number") {
346
+ this.pageCount = payload.pageCount;
347
+ }
348
+ import_core.papyrusEvents.emit(import_types.PapyrusEventType.DOCUMENT_LOADED, payload);
349
+ }
350
+ return;
351
+ }
352
+ if (__DEV__) {
353
+ console.warn("[Papyrus WebView] Unknown message", message);
354
+ }
355
+ }
356
+ async load(input) {
357
+ const { source, type } = normalizeLoadInput(input);
358
+ const resolvedType = type ?? inferDocumentType(source);
359
+ if (resolvedType === "pdf") {
360
+ throw new Error("[WebViewDocumentEngine] Use o NativeDocumentEngine para PDFs no mobile.");
361
+ }
362
+ const payloadSource = await this.normalizeRuntimeSource(resolvedType, source);
363
+ const response = await this.request("load", {
364
+ type: resolvedType,
365
+ source: payloadSource
366
+ });
367
+ if (typeof response?.pageCount === "number") this.pageCount = response.pageCount;
368
+ if (Array.isArray(response?.outline)) this.outline = response.outline;
369
+ this.currentPage = 1;
370
+ }
371
+ getPageCount() {
372
+ return this.pageCount;
373
+ }
374
+ getCurrentPage() {
375
+ return this.currentPage;
376
+ }
377
+ goToPage(page) {
378
+ if (page < 1) return;
379
+ this.currentPage = page;
380
+ void this.request("go-to-page", { page });
381
+ }
382
+ setZoom(zoom) {
383
+ this.zoom = Math.max(0.5, Math.min(4, zoom));
384
+ void this.request("set-zoom", { zoom: this.zoom });
385
+ }
386
+ getZoom() {
387
+ return this.zoom;
388
+ }
389
+ rotate(direction) {
390
+ if (direction === "clockwise") {
391
+ this.rotation = (this.rotation + 90) % 360;
392
+ } else {
393
+ this.rotation = (this.rotation - 90) % 360;
394
+ if (this.rotation < 0) this.rotation += 360;
395
+ }
396
+ void this.request("set-rotation", { rotation: this.rotation });
397
+ }
398
+ getRotation() {
399
+ return this.rotation;
400
+ }
401
+ async renderPage(pageIndex, target, scale) {
402
+ void pageIndex;
403
+ void target;
404
+ void scale;
405
+ }
406
+ async renderTextLayer(pageIndex, container, scale) {
407
+ void pageIndex;
408
+ void container;
409
+ void scale;
410
+ }
411
+ async getTextContent(pageIndex) {
412
+ return await this.request("get-text-content", { pageIndex });
413
+ }
414
+ async getPageDimensions(pageIndex) {
415
+ return await this.request("get-page-dimensions", { pageIndex });
416
+ }
417
+ async searchText(query) {
418
+ return await this.request("search-text", { query });
419
+ }
420
+ async selectText(pageIndex, rect) {
421
+ return await this.request("select-text", { pageIndex, rect });
422
+ }
423
+ async getOutline() {
424
+ if (this.outline.length > 0) return this.outline;
425
+ return await this.request("get-outline");
426
+ }
427
+ async getPageIndex(dest) {
428
+ return await this.request("get-page-index", { dest });
429
+ }
430
+ destroy() {
431
+ this.pending.forEach(({ reject }) => reject(new Error("[Papyrus] WebView engine destroyed")));
432
+ this.pending.clear();
433
+ this.bridge = null;
434
+ this.ready = false;
435
+ }
436
+ async ensureBridge() {
437
+ if (this.bridge) return this.bridge;
438
+ return new Promise((resolve) => {
439
+ this.bridgeResolvers.push(resolve);
440
+ });
441
+ }
442
+ async ensureReady() {
443
+ if (this.ready) return;
444
+ return new Promise((resolve) => {
445
+ this.readyResolvers.push(resolve);
446
+ });
447
+ }
448
+ async request(kind, payload) {
449
+ const bridge = await this.ensureBridge();
450
+ await this.ensureReady();
451
+ const id = `${Date.now()}-${this.requestId++}`;
452
+ return new Promise((resolve, reject) => {
453
+ const timeoutMs = kind === "load" ? 3e4 : 8e3;
454
+ const timeoutId = setTimeout(() => {
455
+ this.pending.delete(id);
456
+ reject(new Error(`[Papyrus] WebView response timeout: ${kind}`));
457
+ }, timeoutMs);
458
+ this.pending.set(id, {
459
+ resolve: (data) => {
460
+ clearTimeout(timeoutId);
461
+ resolve(data);
462
+ },
463
+ reject: (error) => {
464
+ clearTimeout(timeoutId);
465
+ reject(error);
466
+ }
467
+ });
468
+ bridge.postMessage(JSON.stringify({ id, kind, payload }));
469
+ });
470
+ }
471
+ async normalizeRuntimeSource(type, source) {
472
+ if (typeof source === "string") {
473
+ const dataUri = parseDataUri(source);
474
+ if (dataUri) {
475
+ if (dataUri.isBase64) {
476
+ return { kind: "base64", data: dataUri.data, mime: dataUri.mime || void 0 };
477
+ }
478
+ const text = decodeURIComponent(dataUri.data);
479
+ return { kind: "text", text };
480
+ }
481
+ if (looksLikeUri(source)) {
482
+ if (isHttpUri(source)) {
483
+ const fetched = await this.fetchRemoteSource(type, source);
484
+ if (fetched) return fetched;
485
+ }
486
+ return { kind: "uri", uri: source };
487
+ }
488
+ if (isLikelyBase64(source)) {
489
+ return { kind: "base64", data: source };
490
+ }
491
+ if (type === "text") {
492
+ return { kind: "text", text: source };
493
+ }
494
+ return { kind: "uri", uri: source };
495
+ }
496
+ if (this.isUriSource(source)) {
497
+ const uri = source.uri;
498
+ if (isHttpUri(uri)) {
499
+ const fetched = await this.fetchRemoteSource(type, uri);
500
+ if (fetched) return fetched;
501
+ }
502
+ return { kind: "uri", uri };
503
+ }
504
+ if (this.isDataSource(source)) {
505
+ const bytes = source.data instanceof Uint8Array ? source.data : new Uint8Array(source.data);
506
+ return { kind: "base64", data: encodeBase64(bytes) };
507
+ }
508
+ if (this.isFileLike(source)) {
509
+ const buffer = await source.arrayBuffer();
510
+ return { kind: "base64", data: encodeBase64(new Uint8Array(buffer)) };
511
+ }
512
+ if (source instanceof ArrayBuffer || source instanceof Uint8Array) {
513
+ const bytes = source instanceof Uint8Array ? source : new Uint8Array(source);
514
+ return { kind: "base64", data: encodeBase64(bytes) };
515
+ }
516
+ return { kind: "base64", data: encodeBase64(new Uint8Array(source)) };
517
+ }
518
+ async fetchRemoteSource(type, uri) {
519
+ try {
520
+ const response = await fetch(uri);
521
+ if (!response.ok) return null;
522
+ if (type === "text") {
523
+ const text = await response.text();
524
+ return { kind: "text", text };
525
+ }
526
+ if (type === "epub") {
527
+ const buffer = await this.readResponseBuffer(response);
528
+ return { kind: "base64", data: encodeBase64(new Uint8Array(buffer)) };
529
+ }
530
+ return null;
531
+ } catch {
532
+ return null;
533
+ }
534
+ }
535
+ async readResponseBuffer(response) {
536
+ try {
537
+ return await response.arrayBuffer();
538
+ } catch {
539
+ const blob = await response.blob();
540
+ return await new Promise((resolve, reject) => {
541
+ const reader = new FileReader();
542
+ reader.onerror = () => reject(new Error("[Papyrus] Failed to read response blob"));
543
+ reader.onload = () => resolve(reader.result);
544
+ reader.readAsArrayBuffer(blob);
545
+ });
546
+ }
547
+ }
548
+ isUriSource(source) {
549
+ return typeof source === "object" && source !== null && "uri" in source;
550
+ }
551
+ isDataSource(source) {
552
+ return typeof source === "object" && source !== null && "data" in source;
553
+ }
554
+ isFileLike(source) {
555
+ return typeof source === "object" && source !== null && typeof source.arrayBuffer === "function";
556
+ }
557
+ };
558
+ var MobileDocumentEngine = class extends import_core.BaseDocumentEngine {
559
+ constructor() {
560
+ super();
561
+ this.pdfEngine = new NativeDocumentEngine();
562
+ this.webEngine = new WebViewDocumentEngine();
563
+ this.activeEngine = this.pdfEngine;
564
+ }
565
+ getRenderTargetType() {
566
+ return this.activeEngine.getRenderTargetType?.() ?? "canvas";
567
+ }
568
+ attachWebView(bridge) {
569
+ this.webEngine.attachBridge(bridge);
570
+ }
571
+ handleWebViewMessage(data) {
572
+ this.webEngine.handleMessage(data);
573
+ }
574
+ async load(input) {
575
+ const { source, type } = normalizeLoadInput(input);
576
+ const resolvedType = type ?? inferDocumentType(source);
577
+ this.activeEngine = resolvedType === "pdf" ? this.pdfEngine : this.webEngine;
578
+ await this.activeEngine.load({ type: resolvedType, source });
579
+ }
580
+ getPageCount() {
581
+ return this.activeEngine.getPageCount();
582
+ }
583
+ getCurrentPage() {
584
+ return this.activeEngine.getCurrentPage();
585
+ }
586
+ goToPage(page) {
587
+ this.activeEngine.goToPage(page);
588
+ }
589
+ setZoom(zoom) {
590
+ this.activeEngine.setZoom(zoom);
591
+ }
592
+ getZoom() {
593
+ return this.activeEngine.getZoom();
594
+ }
595
+ rotate(direction) {
596
+ this.activeEngine.rotate(direction);
597
+ }
598
+ getRotation() {
599
+ return this.activeEngine.getRotation();
600
+ }
601
+ async renderPage(pageIndex, target, scale) {
602
+ await this.activeEngine.renderPage(pageIndex, target, scale);
603
+ }
604
+ async renderTextLayer(pageIndex, container, scale) {
605
+ await this.activeEngine.renderTextLayer(pageIndex, container, scale);
606
+ }
607
+ async getTextContent(pageIndex) {
608
+ return await this.activeEngine.getTextContent(pageIndex);
609
+ }
610
+ async getPageDimensions(pageIndex) {
611
+ return await this.activeEngine.getPageDimensions(pageIndex);
612
+ }
613
+ async searchText(query) {
614
+ if (typeof this.activeEngine.searchText === "function") {
615
+ return await this.activeEngine.searchText(query);
616
+ }
617
+ return [];
618
+ }
619
+ async selectText(pageIndex, rect) {
620
+ if (typeof this.activeEngine.selectText === "function") {
621
+ return await this.activeEngine.selectText(pageIndex, rect);
622
+ }
623
+ return null;
624
+ }
625
+ async getOutline() {
626
+ return await this.activeEngine.getOutline();
627
+ }
628
+ async getPageIndex(dest) {
629
+ return await this.activeEngine.getPageIndex(dest);
630
+ }
631
+ destroy() {
632
+ this.pdfEngine.destroy();
633
+ this.webEngine.destroy();
634
+ }
635
+ };
159
636
  // Annotate the CommonJS export names for ESM import in node:
160
637
  0 && (module.exports = {
638
+ MobileDocumentEngine,
161
639
  NativeDocumentEngine,
162
- PapyrusPageView
640
+ PapyrusPageView,
641
+ WebViewDocumentEngine
163
642
  });
164
643
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../index.ts"],"sourcesContent":["import { NativeModules, requireNativeComponent, type ViewProps } from 'react-native';\r\nimport { BaseDocumentEngine } from '@papyrus-sdk/core';\r\nimport { DocumentSource, TextItem, OutlineItem, FileLike, SearchResult, TextSelection } from '@papyrus-sdk/types';\r\n\r\nconst MODULE_NAME = 'PapyrusNativeEngine';\r\n\r\ntype NativeDocumentSource = {\r\n uri?: string;\r\n data?: ArrayBuffer | Uint8Array;\r\n};\r\n\r\ntype NativeEngineModule = {\r\n createEngine?: () => string;\r\n destroyEngine?: (engineId: string) => void;\r\n load?: (engineId: string, source: NativeDocumentSource) => Promise<{ pageCount?: number } | void>;\r\n getPageCount?: (engineId: string) => number;\r\n renderPage?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n renderTextLayer?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n getTextContent?: (engineId: string, pageIndex: number) => Promise<TextItem[]>;\r\n getPageDimensions?: (engineId: string, pageIndex: number) => Promise<{ width: number; height: number }>;\r\n searchText?: (engineId: string, query: string) => Promise<SearchResult[]>;\r\n selectText?: (engineId: string, pageIndex: number, x: number, y: number, width: number, height: number) => Promise<TextSelection | null>;\r\n getOutline?: (engineId: string) => Promise<OutlineItem[]>;\r\n getPageIndex?: (engineId: string, dest: any) => Promise<number | null>;\r\n};\r\n\r\nexport type PapyrusPageViewProps = ViewProps & {\r\n engineId?: string;\r\n};\r\n\r\nexport const PapyrusPageView = requireNativeComponent<PapyrusPageViewProps>('PapyrusPageView');\r\n\r\nexport class NativeDocumentEngine extends BaseDocumentEngine {\r\n private nativeModule: NativeEngineModule | null = null;\r\n private engineId: string = 'default';\r\n private pageCount: number = 0;\r\n private currentPage: number = 1;\r\n private zoom: number = 1.0;\r\n private rotation: number = 0;\r\n\r\n constructor() {\r\n super();\r\n this.nativeModule = (NativeModules as any)[MODULE_NAME] ?? null;\r\n this.engineId = this.nativeModule?.createEngine ? this.nativeModule.createEngine() : 'default';\r\n }\r\n\r\n async load(source: DocumentSource): Promise<void> {\r\n const native = this.assertNativeModule();\r\n const normalized = await this.normalizeSource(source);\r\n const result = native.load ? await native.load(this.engineId, normalized) : undefined;\r\n\r\n if (result && typeof result.pageCount === 'number') {\r\n this.pageCount = result.pageCount;\r\n } else if (native.getPageCount) {\r\n this.pageCount = native.getPageCount(this.engineId);\r\n } else {\r\n this.pageCount = 0;\r\n }\r\n\r\n this.currentPage = 1;\r\n }\r\n\r\n getPageCount(): number {\r\n return this.pageCount;\r\n }\r\n\r\n getCurrentPage(): number {\r\n return this.currentPage;\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page >= 1 && page <= this.pageCount) {\r\n this.currentPage = page;\r\n }\r\n }\r\n\r\n setZoom(zoom: number): void {\r\n this.zoom = Math.max(0.1, Math.min(5.0, zoom));\r\n }\r\n\r\n getZoom(): number {\r\n return this.zoom;\r\n }\r\n\r\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\r\n if (direction === 'clockwise') {\r\n this.rotation = (this.rotation + 90) % 360;\r\n } else {\r\n this.rotation = (this.rotation - 90) % 360;\r\n if (this.rotation < 0) this.rotation += 360;\r\n }\r\n }\r\n\r\n getRotation(): number {\r\n return this.rotation;\r\n }\r\n\r\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderPage) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderPage(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async renderTextLayer(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderTextLayer) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderTextLayer(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getTextContent) return [];\r\n return native.getTextContent(this.engineId, pageIndex);\r\n }\r\n\r\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageDimensions) return { width: 0, height: 0 };\r\n return native.getPageDimensions(this.engineId, pageIndex);\r\n }\r\n\r\n async selectText(\r\n pageIndex: number,\r\n rect: { x: number; y: number; width: number; height: number }\r\n ): Promise<TextSelection | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.selectText) return null;\r\n return native.selectText(this.engineId, pageIndex, rect.x, rect.y, rect.width, rect.height);\r\n }\r\n\r\n async getOutline(): Promise<OutlineItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getOutline) return [];\r\n return native.getOutline(this.engineId);\r\n }\r\n\r\n async searchText(query: string): Promise<SearchResult[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.searchText) return [];\r\n return native.searchText(this.engineId, query);\r\n }\r\n\r\n async getPageIndex(dest: any): Promise<number | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageIndex) return null;\r\n return native.getPageIndex(this.engineId, dest);\r\n }\r\n\r\n destroy(): void {\r\n this.nativeModule?.destroyEngine?.(this.engineId);\r\n }\r\n\r\n private assertNativeModule(): NativeEngineModule {\r\n if (!this.nativeModule) {\r\n throw new Error(`[Papyrus] Native module \"${MODULE_NAME}\" not found. Did you run pod install / gradle sync?`);\r\n }\r\n return this.nativeModule;\r\n }\r\n\r\n private async normalizeSource(source: DocumentSource): Promise<NativeDocumentSource> {\r\n if (typeof source === 'string') return { uri: source };\r\n if (this.isUriSource(source)) return { uri: source.uri };\r\n if (this.isDataSource(source)) return { data: source.data };\r\n if (this.isFileLike(source)) return { data: await source.arrayBuffer() };\r\n if (source instanceof ArrayBuffer || source instanceof Uint8Array) return { data: source };\r\n return { data: source as ArrayBuffer };\r\n }\r\n\r\n private isUriSource(source: DocumentSource): source is { uri: string } {\r\n return typeof source === 'object' && source !== null && 'uri' in source;\r\n }\r\n\r\n private isDataSource(source: DocumentSource): source is { data: ArrayBuffer | Uint8Array } {\r\n return typeof source === 'object' && source !== null && 'data' in source;\r\n }\r\n\r\n private isFileLike(source: DocumentSource): source is FileLike {\r\n return typeof source === 'object' && source !== null && typeof (source as FileLike).arrayBuffer === 'function';\r\n }\r\n\r\n private toNativeViewTag(target: any): number | null {\r\n if (typeof target === 'number') return target;\r\n if (target?.nativeTag && typeof target.nativeTag === 'number') return target.nativeTag;\r\n return null;\r\n }\r\n}\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../index.ts"],"sourcesContent":["import { NativeModules, requireNativeComponent, type ViewProps } from 'react-native';\nimport { BaseDocumentEngine, papyrusEvents } from '@papyrus-sdk/core';\nimport {\n DocumentLoadInput,\n DocumentLoadRequest,\n DocumentEngine,\n DocumentSource,\n DocumentType,\n PapyrusEventType,\n RenderTargetType,\n TextItem,\n OutlineItem,\n FileLike,\n SearchResult,\n TextSelection,\n} from '@papyrus-sdk/types';\n\r\nconst MODULE_NAME = 'PapyrusNativeEngine';\n\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nconst BASE64_LOOKUP = (() => {\n const table = new Uint8Array(256);\n table.fill(255);\n for (let i = 0; i < BASE64_CHARS.length; i += 1) {\n table[BASE64_CHARS.charCodeAt(i)] = i;\n }\n return table;\n})();\n\nconst parseDataUri = (value: string): { mime: string; isBase64: boolean; data: string } | null => {\n const match = /^data:([^;,]+)?(;base64)?,(.*)$/.exec(value);\n if (!match) return null;\n return {\n mime: match[1] ?? '',\n isBase64: Boolean(match[2]),\n data: match[3] ?? '',\n };\n};\n\nconst looksLikeUri = (value: string): boolean =>\n value.startsWith('http://') ||\n value.startsWith('https://') ||\n value.startsWith('/') ||\n value.startsWith('./') ||\n value.startsWith('../') ||\n value.startsWith('file://');\n\nconst isLikelyBase64 = (value: string): boolean => {\n if (looksLikeUri(value)) return false;\n if (value.includes('.')) return false;\n if (value.length < 16) return false;\n return /^[A-Za-z0-9+/=]+$/.test(value);\n};\n\nconst isHttpUri = (value: string): boolean =>\n value.startsWith('http://') || value.startsWith('https://');\n\nconst decodeBase64 = (value: string): Uint8Array => {\n const clean = value.replace(/[^A-Za-z0-9+/=]/g, '');\n const padding = clean.endsWith('==') ? 2 : clean.endsWith('=') ? 1 : 0;\n const outputLength = Math.max(0, (clean.length * 3) / 4 - padding);\n const output = new Uint8Array(outputLength);\n\n let buffer = 0;\n let bits = 0;\n let index = 0;\n\n for (let i = 0; i < clean.length; i += 1) {\n const charCode = clean.charCodeAt(i);\n if (charCode === 61) break;\n const valueIndex = BASE64_LOOKUP[charCode];\n if (valueIndex === 255) continue;\n buffer = (buffer << 6) | valueIndex;\n bits += 6;\n if (bits >= 8) {\n bits -= 8;\n output[index++] = (buffer >> bits) & 0xff;\n }\n }\n return output;\n};\n\nconst encodeBase64 = (bytes: Uint8Array): string => {\n let output = '';\n let buffer = 0;\n let bits = 0;\n\n for (let i = 0; i < bytes.length; i += 1) {\n buffer = (buffer << 8) | bytes[i];\n bits += 8;\n while (bits >= 6) {\n bits -= 6;\n output += BASE64_CHARS[(buffer >> bits) & 0x3f];\n }\n }\n\n if (bits > 0) {\n output += BASE64_CHARS[(buffer << (6 - bits)) & 0x3f];\n }\n\n const remainder = bytes.length % 3;\n if (remainder === 1) return `${output}==`;\n if (remainder === 2) return `${output}=`;\n return output;\n};\n\nconst isLoadRequest = (input: DocumentLoadInput): input is DocumentLoadRequest =>\n typeof input === 'object' && input !== null && 'source' in input && 'type' in input;\n\nconst normalizeLoadInput = (input: DocumentLoadInput): { source: DocumentSource; type?: DocumentType } =>\n isLoadRequest(input) ? { source: input.source, type: input.type } : { source: input };\n\nconst inferDocumentType = (source: DocumentSource): DocumentType => {\n if (typeof source === 'string') {\n const dataUri = parseDataUri(source);\n if (dataUri?.mime) {\n const mime = dataUri.mime.toLowerCase();\n if (mime.includes('epub')) return 'epub';\n if (mime.includes('text')) return 'text';\n if (mime.includes('pdf')) return 'pdf';\n }\n\n const clean = source.split('?')[0].split('#')[0];\n const ext = clean.includes('.') ? clean.split('.').pop()?.toLowerCase() : undefined;\n if (ext === 'epub') return 'epub';\n if (ext === 'txt') return 'text';\n if (ext === 'pdf') return 'pdf';\n return 'pdf';\n }\n\n if (typeof source === 'object' && source !== null && 'uri' in source) {\n const uri = source.uri;\n const clean = uri.split('?')[0].split('#')[0];\n const ext = clean.includes('.') ? clean.split('.').pop()?.toLowerCase() : undefined;\n if (ext === 'epub') return 'epub';\n if (ext === 'txt') return 'text';\n if (ext === 'pdf') return 'pdf';\n }\n\n return 'pdf';\n};\n\r\ntype NativeDocumentSource = {\r\n uri?: string;\r\n data?: ArrayBuffer | Uint8Array;\r\n};\r\n\r\ntype NativeEngineModule = {\r\n createEngine?: () => string;\r\n destroyEngine?: (engineId: string) => void;\r\n load?: (engineId: string, source: NativeDocumentSource) => Promise<{ pageCount?: number } | void>;\r\n getPageCount?: (engineId: string) => number;\r\n renderPage?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n renderTextLayer?: (engineId: string, pageIndex: number, target: number, scale: number, zoom: number, rotation: number) => void;\r\n getTextContent?: (engineId: string, pageIndex: number) => Promise<TextItem[]>;\r\n getPageDimensions?: (engineId: string, pageIndex: number) => Promise<{ width: number; height: number }>;\r\n searchText?: (engineId: string, query: string) => Promise<SearchResult[]>;\r\n selectText?: (engineId: string, pageIndex: number, x: number, y: number, width: number, height: number) => Promise<TextSelection | null>;\r\n getOutline?: (engineId: string) => Promise<OutlineItem[]>;\r\n getPageIndex?: (engineId: string, dest: any) => Promise<number | null>;\r\n};\r\n\r\nexport type PapyrusPageViewProps = ViewProps & {\r\n engineId?: string;\r\n};\r\n\r\nexport const PapyrusPageView = requireNativeComponent<PapyrusPageViewProps>('PapyrusPageView');\r\n\r\nexport class NativeDocumentEngine extends BaseDocumentEngine {\n private nativeModule: NativeEngineModule | null = null;\r\n private engineId: string = 'default';\r\n private pageCount: number = 0;\r\n private currentPage: number = 1;\r\n private zoom: number = 1.0;\r\n private rotation: number = 0;\r\n\r\n constructor() {\r\n super();\r\n this.nativeModule = (NativeModules as any)[MODULE_NAME] ?? null;\r\n this.engineId = this.nativeModule?.createEngine ? this.nativeModule.createEngine() : 'default';\r\n }\r\n\r\n async load(input: DocumentLoadInput): Promise<void> {\n const { source, type } = normalizeLoadInput(input);\n if (type && type !== 'pdf') {\n throw new Error(`[NativeDocumentEngine] Tipo de documento não suportado: ${type}`);\n }\n\n const native = this.assertNativeModule();\n const normalized = await this.normalizeSource(source);\n const result = native.load ? await native.load(this.engineId, normalized) : undefined;\n\r\n if (result && typeof result.pageCount === 'number') {\r\n this.pageCount = result.pageCount;\r\n } else if (native.getPageCount) {\r\n this.pageCount = native.getPageCount(this.engineId);\r\n } else {\r\n this.pageCount = 0;\r\n }\r\n\r\n this.currentPage = 1;\r\n }\r\n\r\n getPageCount(): number {\r\n return this.pageCount;\r\n }\r\n\r\n getCurrentPage(): number {\r\n return this.currentPage;\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (page >= 1 && page <= this.pageCount) {\r\n this.currentPage = page;\r\n }\r\n }\r\n\r\n setZoom(zoom: number): void {\r\n this.zoom = Math.max(0.1, Math.min(5.0, zoom));\r\n }\r\n\r\n getZoom(): number {\r\n return this.zoom;\r\n }\r\n\r\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\r\n if (direction === 'clockwise') {\r\n this.rotation = (this.rotation + 90) % 360;\r\n } else {\r\n this.rotation = (this.rotation - 90) % 360;\r\n if (this.rotation < 0) this.rotation += 360;\r\n }\r\n }\r\n\r\n getRotation(): number {\r\n return this.rotation;\r\n }\r\n\r\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderPage) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderPage(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async renderTextLayer(pageIndex: number, target: any, scale: number): Promise<void> {\r\n const native = this.assertNativeModule();\r\n if (!native.renderTextLayer) return;\r\n const viewTag = this.toNativeViewTag(target);\r\n if (viewTag === null) return;\r\n native.renderTextLayer(this.engineId, pageIndex, viewTag, scale, this.zoom, this.rotation);\r\n }\r\n\r\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getTextContent) return [];\r\n return native.getTextContent(this.engineId, pageIndex);\r\n }\r\n\r\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageDimensions) return { width: 0, height: 0 };\r\n return native.getPageDimensions(this.engineId, pageIndex);\r\n }\r\n\r\n async selectText(\r\n pageIndex: number,\r\n rect: { x: number; y: number; width: number; height: number }\r\n ): Promise<TextSelection | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.selectText) return null;\r\n return native.selectText(this.engineId, pageIndex, rect.x, rect.y, rect.width, rect.height);\r\n }\r\n\r\n async getOutline(): Promise<OutlineItem[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.getOutline) return [];\r\n return native.getOutline(this.engineId);\r\n }\r\n\r\n async searchText(query: string): Promise<SearchResult[]> {\r\n const native = this.assertNativeModule();\r\n if (!native.searchText) return [];\r\n return native.searchText(this.engineId, query);\r\n }\r\n\r\n async getPageIndex(dest: any): Promise<number | null> {\r\n const native = this.assertNativeModule();\r\n if (!native.getPageIndex) return null;\r\n return native.getPageIndex(this.engineId, dest);\r\n }\r\n\r\n destroy(): void {\r\n this.nativeModule?.destroyEngine?.(this.engineId);\r\n }\r\n\r\n private assertNativeModule(): NativeEngineModule {\r\n if (!this.nativeModule) {\r\n throw new Error(`[Papyrus] Native module \"${MODULE_NAME}\" not found. Did you run pod install / gradle sync?`);\r\n }\r\n return this.nativeModule;\r\n }\r\n\r\n private async normalizeSource(source: DocumentSource): Promise<NativeDocumentSource> {\n if (typeof source === 'string') {\n const dataUri = parseDataUri(source);\n if (dataUri?.isBase64) {\n return { data: decodeBase64(dataUri.data) };\n }\n if (looksLikeUri(source)) return { uri: source };\n if (isLikelyBase64(source)) return { data: decodeBase64(source) };\n return { uri: source };\n }\n if (this.isUriSource(source)) return { uri: source.uri };\n if (this.isDataSource(source)) return { data: source.data };\n if (this.isFileLike(source)) return { data: await source.arrayBuffer() };\r\n if (source instanceof ArrayBuffer || source instanceof Uint8Array) return { data: source };\r\n return { data: source as ArrayBuffer };\r\n }\r\n\r\n private isUriSource(source: DocumentSource): source is { uri: string } {\r\n return typeof source === 'object' && source !== null && 'uri' in source;\r\n }\r\n\r\n private isDataSource(source: DocumentSource): source is { data: ArrayBuffer | Uint8Array } {\r\n return typeof source === 'object' && source !== null && 'data' in source;\r\n }\r\n\r\n private isFileLike(source: DocumentSource): source is FileLike {\r\n return typeof source === 'object' && source !== null && typeof (source as FileLike).arrayBuffer === 'function';\r\n }\r\n\r\n private toNativeViewTag(target: any): number | null {\n if (typeof target === 'number') return target;\n if (target?.nativeTag && typeof target.nativeTag === 'number') return target.nativeTag;\n return null;\n }\n}\n\ntype WebViewBridge = {\n postMessage: (message: string) => void;\n};\n\ntype WebViewResponseMessage = {\n type: 'response';\n id: string;\n ok: boolean;\n data?: any;\n error?: string;\n};\n\ntype WebViewEventMessage = {\n type: 'event';\n name: string;\n payload?: any;\n};\n\ntype WebViewStateMessage = {\n type: 'state';\n payload: {\n pageCount?: number;\n currentPage?: number;\n zoom?: number;\n outline?: OutlineItem[];\n };\n};\n\ntype WebViewReadyMessage = {\n type: 'ready';\n};\n\ntype WebViewRuntimeMessage =\n | WebViewResponseMessage\n | WebViewEventMessage\n | WebViewStateMessage\n | WebViewReadyMessage;\n\ntype WebViewSourcePayload =\n | { kind: 'uri'; uri: string }\n | { kind: 'base64'; data: string; mime?: string }\n | { kind: 'text'; text: string };\n\nexport class WebViewDocumentEngine extends BaseDocumentEngine {\n private bridge: WebViewBridge | null = null;\n private ready = false;\n private requestId = 0;\n private pending = new Map<string, { resolve: (data: any) => void; reject: (error: Error) => void }>();\n private bridgeResolvers: Array<(bridge: WebViewBridge) => void> = [];\n private readyResolvers: Array<() => void> = [];\n private pageCount = 0;\n private currentPage = 1;\n private zoom = 1.0;\n private rotation = 0;\n private outline: OutlineItem[] = [];\n\n getRenderTargetType(): 'webview' {\n return 'webview';\n }\n\n attachBridge(bridge: WebViewBridge): void {\n this.bridge = bridge;\n this.bridgeResolvers.forEach((resolve) => resolve(bridge));\n this.bridgeResolvers = [];\n }\n\n handleMessage(raw: string): void {\n let message: WebViewRuntimeMessage | null = null;\n try {\n message = JSON.parse(raw) as WebViewRuntimeMessage;\n } catch {\n return;\n }\n\n if (!message) return;\n\n if (message.type === 'ready') {\n this.ready = true;\n this.readyResolvers.forEach((resolve) => resolve());\n this.readyResolvers = [];\n return;\n }\n\n if (message.type === 'response') {\n const pending = this.pending.get(message.id);\n if (!pending) return;\n this.pending.delete(message.id);\n if (message.ok) {\n pending.resolve(message.data);\n } else {\n pending.reject(new Error(message.error ?? '[Papyrus] WebView runtime error'));\n }\n return;\n }\n\n if (message.type === 'state') {\n if (typeof message.payload.pageCount === 'number') this.pageCount = message.payload.pageCount;\n if (typeof message.payload.currentPage === 'number') this.currentPage = message.payload.currentPage;\n if (typeof message.payload.zoom === 'number') this.zoom = message.payload.zoom;\n if (Array.isArray(message.payload.outline)) this.outline = message.payload.outline;\n return;\n }\n\n if (message.type === 'event') {\n const payload = message.payload ?? {};\n if (message.name === 'RUNTIME_LOG') {\n if (__DEV__) {\n const text = typeof payload?.message === 'string' ? payload.message : JSON.stringify(payload);\n console.log('[Papyrus WebView runtime]', text);\n }\n return;\n }\n if (message.name === 'RUNTIME_ERROR') {\n if (__DEV__) {\n console.warn('[Papyrus WebView runtime]', payload);\n }\n return;\n }\n if (message.name === PapyrusEventType.TEXT_SELECTED) {\n papyrusEvents.emit(PapyrusEventType.TEXT_SELECTED, payload);\n } else if (message.name === PapyrusEventType.SEARCH_TRIGGERED) {\n papyrusEvents.emit(PapyrusEventType.SEARCH_TRIGGERED, payload);\n } else if (message.name === PapyrusEventType.DOCUMENT_LOADED) {\n if (typeof payload.pageCount === 'number') {\n this.pageCount = payload.pageCount;\n }\n papyrusEvents.emit(PapyrusEventType.DOCUMENT_LOADED, payload);\n }\n return;\n }\n\n if (__DEV__) {\n console.warn('[Papyrus WebView] Unknown message', message);\n }\n }\n\n async load(input: DocumentLoadInput): Promise<void> {\n const { source, type } = normalizeLoadInput(input);\n const resolvedType = type ?? inferDocumentType(source);\n if (resolvedType === 'pdf') {\n throw new Error('[WebViewDocumentEngine] Use o NativeDocumentEngine para PDFs no mobile.');\n }\n\n const payloadSource = await this.normalizeRuntimeSource(resolvedType, source);\n const response = await this.request<{ pageCount?: number; outline?: OutlineItem[] }>('load', {\n type: resolvedType,\n source: payloadSource,\n });\n\n if (typeof response?.pageCount === 'number') this.pageCount = response.pageCount;\n if (Array.isArray(response?.outline)) this.outline = response.outline;\n this.currentPage = 1;\n }\n\n getPageCount(): number {\n return this.pageCount;\n }\n\n getCurrentPage(): number {\n return this.currentPage;\n }\n\n goToPage(page: number): void {\n if (page < 1) return;\n this.currentPage = page;\n void this.request('go-to-page', { page });\n }\n\n setZoom(zoom: number): void {\n this.zoom = Math.max(0.5, Math.min(4.0, zoom));\n void this.request('set-zoom', { zoom: this.zoom });\n }\n\n getZoom(): number {\n return this.zoom;\n }\n\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\n if (direction === 'clockwise') {\n this.rotation = (this.rotation + 90) % 360;\n } else {\n this.rotation = (this.rotation - 90) % 360;\n if (this.rotation < 0) this.rotation += 360;\n }\n void this.request('set-rotation', { rotation: this.rotation });\n }\n\n getRotation(): number {\n return this.rotation;\n }\n\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\n void pageIndex;\n void target;\n void scale;\n }\n\n async renderTextLayer(pageIndex: number, container: any, scale: number): Promise<void> {\n void pageIndex;\n void container;\n void scale;\n }\n\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\n return await this.request<TextItem[]>('get-text-content', { pageIndex });\n }\n\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\n return await this.request<{ width: number; height: number }>('get-page-dimensions', { pageIndex });\n }\n\n async searchText(query: string): Promise<SearchResult[]> {\n return await this.request<SearchResult[]>('search-text', { query });\n }\n\n async selectText(\n pageIndex: number,\n rect: { x: number; y: number; width: number; height: number }\n ): Promise<TextSelection | null> {\n return await this.request<TextSelection | null>('select-text', { pageIndex, rect });\n }\n\n async getOutline(): Promise<OutlineItem[]> {\n if (this.outline.length > 0) return this.outline;\n return await this.request<OutlineItem[]>('get-outline');\n }\n\n async getPageIndex(dest: any): Promise<number | null> {\n return await this.request<number | null>('get-page-index', { dest });\n }\n\n destroy(): void {\n this.pending.forEach(({ reject }) => reject(new Error('[Papyrus] WebView engine destroyed')));\n this.pending.clear();\n this.bridge = null;\n this.ready = false;\n }\n\n private async ensureBridge(): Promise<WebViewBridge> {\n if (this.bridge) return this.bridge;\n return new Promise((resolve) => {\n this.bridgeResolvers.push(resolve);\n });\n }\n\n private async ensureReady(): Promise<void> {\n if (this.ready) return;\n return new Promise((resolve) => {\n this.readyResolvers.push(resolve);\n });\n }\n\n private async request<T = any>(kind: string, payload?: any): Promise<T> {\n const bridge = await this.ensureBridge();\n await this.ensureReady();\n const id = `${Date.now()}-${this.requestId++}`;\n return new Promise<T>((resolve, reject) => {\n const timeoutMs = kind === 'load' ? 30000 : 8000;\n const timeoutId = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(`[Papyrus] WebView response timeout: ${kind}`));\n }, timeoutMs);\n this.pending.set(id, {\n resolve: (data) => {\n clearTimeout(timeoutId);\n resolve(data);\n },\n reject: (error) => {\n clearTimeout(timeoutId);\n reject(error);\n },\n });\n bridge.postMessage(JSON.stringify({ id, kind, payload }));\n });\n }\n\n private async normalizeRuntimeSource(type: DocumentType, source: DocumentSource): Promise<WebViewSourcePayload> {\n if (typeof source === 'string') {\n const dataUri = parseDataUri(source);\n if (dataUri) {\n if (dataUri.isBase64) {\n return { kind: 'base64', data: dataUri.data, mime: dataUri.mime || undefined };\n }\n const text = decodeURIComponent(dataUri.data);\n return { kind: 'text', text };\n }\n\n if (looksLikeUri(source)) {\n if (isHttpUri(source)) {\n const fetched = await this.fetchRemoteSource(type, source);\n if (fetched) return fetched;\n }\n return { kind: 'uri', uri: source };\n }\n\n if (isLikelyBase64(source)) {\n return { kind: 'base64', data: source };\n }\n\n if (type === 'text') {\n return { kind: 'text', text: source };\n }\n\n return { kind: 'uri', uri: source };\n }\n\n if (this.isUriSource(source)) {\n const uri = source.uri;\n if (isHttpUri(uri)) {\n const fetched = await this.fetchRemoteSource(type, uri);\n if (fetched) return fetched;\n }\n return { kind: 'uri', uri };\n }\n if (this.isDataSource(source)) {\n const bytes = source.data instanceof Uint8Array ? source.data : new Uint8Array(source.data);\n return { kind: 'base64', data: encodeBase64(bytes) };\n }\n if (this.isFileLike(source)) {\n const buffer = await source.arrayBuffer();\n return { kind: 'base64', data: encodeBase64(new Uint8Array(buffer)) };\n }\n if (source instanceof ArrayBuffer || source instanceof Uint8Array) {\n const bytes = source instanceof Uint8Array ? source : new Uint8Array(source);\n return { kind: 'base64', data: encodeBase64(bytes) };\n }\n\n return { kind: 'base64', data: encodeBase64(new Uint8Array(source as ArrayBuffer)) };\n }\n\n private async fetchRemoteSource(type: DocumentType, uri: string): Promise<WebViewSourcePayload | null> {\n try {\n const response = await fetch(uri);\n if (!response.ok) return null;\n if (type === 'text') {\n const text = await response.text();\n return { kind: 'text', text };\n }\n if (type === 'epub') {\n const buffer = await this.readResponseBuffer(response);\n return { kind: 'base64', data: encodeBase64(new Uint8Array(buffer)) };\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private async readResponseBuffer(response: Response): Promise<ArrayBuffer> {\n try {\n return await response.arrayBuffer();\n } catch {\n const blob = await response.blob();\n return await new Promise<ArrayBuffer>((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = () => reject(new Error('[Papyrus] Failed to read response blob'));\n reader.onload = () => resolve(reader.result as ArrayBuffer);\n reader.readAsArrayBuffer(blob);\n });\n }\n }\n\n private isUriSource(source: DocumentSource): source is { uri: string } {\n return typeof source === 'object' && source !== null && 'uri' in source;\n }\n\n private isDataSource(source: DocumentSource): source is { data: ArrayBuffer | Uint8Array } {\n return typeof source === 'object' && source !== null && 'data' in source;\n }\n\n private isFileLike(source: DocumentSource): source is FileLike {\n return typeof source === 'object' && source !== null && typeof (source as FileLike).arrayBuffer === 'function';\n }\n}\n\nexport class MobileDocumentEngine extends BaseDocumentEngine {\n private pdfEngine: NativeDocumentEngine;\n private webEngine: WebViewDocumentEngine;\n private activeEngine: DocumentEngine;\n\n constructor() {\n super();\n this.pdfEngine = new NativeDocumentEngine();\n this.webEngine = new WebViewDocumentEngine();\n this.activeEngine = this.pdfEngine;\n }\n\n getRenderTargetType(): RenderTargetType {\n return this.activeEngine.getRenderTargetType?.() ?? 'canvas';\n }\n\n attachWebView(bridge: WebViewBridge): void {\n this.webEngine.attachBridge(bridge);\n }\n\n handleWebViewMessage(data: string): void {\n this.webEngine.handleMessage(data);\n }\n\n async load(input: DocumentLoadInput): Promise<void> {\n const { source, type } = normalizeLoadInput(input);\n const resolvedType = type ?? inferDocumentType(source);\n this.activeEngine = resolvedType === 'pdf' ? this.pdfEngine : this.webEngine;\n await this.activeEngine.load({ type: resolvedType, source });\n }\n\n getPageCount(): number {\n return this.activeEngine.getPageCount();\n }\n\n getCurrentPage(): number {\n return this.activeEngine.getCurrentPage();\n }\n\n goToPage(page: number): void {\n this.activeEngine.goToPage(page);\n }\n\n setZoom(zoom: number): void {\n this.activeEngine.setZoom(zoom);\n }\n\n getZoom(): number {\n return this.activeEngine.getZoom();\n }\n\n rotate(direction: 'clockwise' | 'counterclockwise'): void {\n this.activeEngine.rotate(direction);\n }\n\n getRotation(): number {\n return this.activeEngine.getRotation();\n }\n\n async renderPage(pageIndex: number, target: any, scale: number): Promise<void> {\n await this.activeEngine.renderPage(pageIndex, target, scale);\n }\n\n async renderTextLayer(pageIndex: number, container: any, scale: number): Promise<void> {\n await this.activeEngine.renderTextLayer(pageIndex, container, scale);\n }\n\n async getTextContent(pageIndex: number): Promise<TextItem[]> {\n return await this.activeEngine.getTextContent(pageIndex);\n }\n\n async getPageDimensions(pageIndex: number): Promise<{ width: number; height: number }> {\n return await this.activeEngine.getPageDimensions(pageIndex);\n }\n\n async searchText(query: string): Promise<SearchResult[]> {\n if (typeof this.activeEngine.searchText === 'function') {\n return await this.activeEngine.searchText(query);\n }\n return [];\n }\n\n async selectText(\n pageIndex: number,\n rect: { x: number; y: number; width: number; height: number }\n ): Promise<TextSelection | null> {\n if (typeof this.activeEngine.selectText === 'function') {\n return await this.activeEngine.selectText(pageIndex, rect);\n }\n return null;\n }\n\n async getOutline(): Promise<OutlineItem[]> {\n return await this.activeEngine.getOutline();\n }\n\n async getPageIndex(dest: any): Promise<number | null> {\n return await this.activeEngine.getPageIndex(dest);\n }\n\n destroy(): void {\n this.pdfEngine.destroy();\n this.webEngine.destroy();\n }\n}\n"],"mappings":"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","names":[]}