web-doc 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/LICENSE-APACHE +201 -0
  2. package/LICENSE-MIT +21 -0
  3. package/README.md +148 -0
  4. package/THIRD_PARTY_NOTICES.md +20 -0
  5. package/bin/copy-assets.mjs +27 -0
  6. package/dist/abort.d.ts +1 -0
  7. package/dist/abort.js +18 -0
  8. package/dist/adapters/bitmap.d.ts +9 -0
  9. package/dist/adapters/bitmap.js +63 -0
  10. package/dist/adapters/csv-parser.d.ts +7 -0
  11. package/dist/adapters/csv-parser.js +124 -0
  12. package/dist/adapters/csv.d.ts +26 -0
  13. package/dist/adapters/csv.js +231 -0
  14. package/dist/adapters/image.d.ts +41 -0
  15. package/dist/adapters/image.js +198 -0
  16. package/dist/adapters/office.d.ts +211 -0
  17. package/dist/adapters/office.js +672 -0
  18. package/dist/adapters/pdf.d.ts +32 -0
  19. package/dist/adapters/pdf.js +429 -0
  20. package/dist/adapters/svg.d.ts +17 -0
  21. package/dist/adapters/svg.js +123 -0
  22. package/dist/assets/image/index.d.ts +75 -0
  23. package/dist/assets/image/index.js +289 -0
  24. package/dist/assets/image/index_bg.wasm +0 -0
  25. package/dist/assets/image/index_bg.wasm.d.ts +12 -0
  26. package/dist/assets/legacy/index.d.ts +54 -0
  27. package/dist/assets/legacy/index.js +306 -0
  28. package/dist/assets/legacy/index_bg.wasm +0 -0
  29. package/dist/assets/legacy/index_bg.wasm.d.ts +9 -0
  30. package/dist/assets/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  31. package/dist/assets/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  32. package/dist/assets/pdfjs/cmaps/78-H.bcmap +0 -0
  33. package/dist/assets/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  34. package/dist/assets/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  35. package/dist/assets/pdfjs/cmaps/78-V.bcmap +0 -0
  36. package/dist/assets/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  37. package/dist/assets/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  38. package/dist/assets/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  39. package/dist/assets/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  40. package/dist/assets/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  41. package/dist/assets/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  42. package/dist/assets/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  43. package/dist/assets/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  44. package/dist/assets/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  45. package/dist/assets/pdfjs/cmaps/Add-H.bcmap +0 -0
  46. package/dist/assets/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  47. package/dist/assets/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  48. package/dist/assets/pdfjs/cmaps/Add-V.bcmap +0 -0
  49. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  50. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  51. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  52. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  53. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  54. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  55. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  56. package/dist/assets/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  57. package/dist/assets/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  58. package/dist/assets/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  59. package/dist/assets/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  60. package/dist/assets/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  61. package/dist/assets/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  62. package/dist/assets/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  63. package/dist/assets/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  64. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  65. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  66. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  67. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  68. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  69. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  70. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  71. package/dist/assets/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  72. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  73. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  74. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  75. package/dist/assets/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  76. package/dist/assets/pdfjs/cmaps/B5-H.bcmap +0 -0
  77. package/dist/assets/pdfjs/cmaps/B5-V.bcmap +0 -0
  78. package/dist/assets/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  79. package/dist/assets/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  80. package/dist/assets/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  81. package/dist/assets/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  82. package/dist/assets/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  83. package/dist/assets/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  84. package/dist/assets/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  85. package/dist/assets/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  86. package/dist/assets/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  87. package/dist/assets/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  88. package/dist/assets/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  89. package/dist/assets/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  90. package/dist/assets/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  91. package/dist/assets/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  92. package/dist/assets/pdfjs/cmaps/EUC-H.bcmap +0 -0
  93. package/dist/assets/pdfjs/cmaps/EUC-V.bcmap +0 -0
  94. package/dist/assets/pdfjs/cmaps/Ext-H.bcmap +0 -0
  95. package/dist/assets/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  96. package/dist/assets/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  97. package/dist/assets/pdfjs/cmaps/Ext-V.bcmap +0 -0
  98. package/dist/assets/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  99. package/dist/assets/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  100. package/dist/assets/pdfjs/cmaps/GB-H.bcmap +4 -0
  101. package/dist/assets/pdfjs/cmaps/GB-V.bcmap +0 -0
  102. package/dist/assets/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  103. package/dist/assets/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  104. package/dist/assets/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  105. package/dist/assets/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  106. package/dist/assets/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  107. package/dist/assets/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  108. package/dist/assets/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  109. package/dist/assets/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  110. package/dist/assets/pdfjs/cmaps/GBT-H.bcmap +0 -0
  111. package/dist/assets/pdfjs/cmaps/GBT-V.bcmap +0 -0
  112. package/dist/assets/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  113. package/dist/assets/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  114. package/dist/assets/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  115. package/dist/assets/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  116. package/dist/assets/pdfjs/cmaps/H.bcmap +0 -0
  117. package/dist/assets/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  118. package/dist/assets/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  119. package/dist/assets/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  120. package/dist/assets/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  121. package/dist/assets/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  122. package/dist/assets/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  123. package/dist/assets/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  124. package/dist/assets/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  125. package/dist/assets/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  126. package/dist/assets/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  127. package/dist/assets/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  128. package/dist/assets/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  129. package/dist/assets/pdfjs/cmaps/Hankaku.bcmap +0 -0
  130. package/dist/assets/pdfjs/cmaps/Hiragana.bcmap +0 -0
  131. package/dist/assets/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  132. package/dist/assets/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  133. package/dist/assets/pdfjs/cmaps/KSC-H.bcmap +0 -0
  134. package/dist/assets/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  135. package/dist/assets/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  136. package/dist/assets/pdfjs/cmaps/KSC-V.bcmap +0 -0
  137. package/dist/assets/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  138. package/dist/assets/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  139. package/dist/assets/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  140. package/dist/assets/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  141. package/dist/assets/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  142. package/dist/assets/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  143. package/dist/assets/pdfjs/cmaps/Katakana.bcmap +0 -0
  144. package/dist/assets/pdfjs/cmaps/LICENSE +36 -0
  145. package/dist/assets/pdfjs/cmaps/NWP-H.bcmap +0 -0
  146. package/dist/assets/pdfjs/cmaps/NWP-V.bcmap +0 -0
  147. package/dist/assets/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  148. package/dist/assets/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  149. package/dist/assets/pdfjs/cmaps/Roman.bcmap +0 -0
  150. package/dist/assets/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  151. package/dist/assets/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  152. package/dist/assets/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  153. package/dist/assets/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  154. package/dist/assets/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  155. package/dist/assets/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  156. package/dist/assets/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  157. package/dist/assets/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  158. package/dist/assets/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  159. package/dist/assets/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  160. package/dist/assets/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  161. package/dist/assets/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  162. package/dist/assets/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  163. package/dist/assets/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  164. package/dist/assets/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  165. package/dist/assets/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  166. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  167. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  168. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  169. package/dist/assets/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  170. package/dist/assets/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  171. package/dist/assets/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  172. package/dist/assets/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  173. package/dist/assets/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  174. package/dist/assets/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  175. package/dist/assets/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  176. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  177. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  178. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  179. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  180. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  181. package/dist/assets/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  182. package/dist/assets/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  183. package/dist/assets/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  184. package/dist/assets/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  185. package/dist/assets/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  186. package/dist/assets/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  187. package/dist/assets/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  188. package/dist/assets/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  189. package/dist/assets/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  190. package/dist/assets/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  191. package/dist/assets/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  192. package/dist/assets/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  193. package/dist/assets/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  194. package/dist/assets/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  195. package/dist/assets/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  196. package/dist/assets/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  197. package/dist/assets/pdfjs/cmaps/V.bcmap +0 -0
  198. package/dist/assets/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  199. package/dist/assets/pdfjs/iccs/CGATS001Compat-v2-micro.icc +0 -0
  200. package/dist/assets/pdfjs/iccs/LICENSE +116 -0
  201. package/dist/assets/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  202. package/dist/assets/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  203. package/dist/assets/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  204. package/dist/assets/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  205. package/dist/assets/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  206. package/dist/assets/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  207. package/dist/assets/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  208. package/dist/assets/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  209. package/dist/assets/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  210. package/dist/assets/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  211. package/dist/assets/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  212. package/dist/assets/pdfjs/standard_fonts/LICENSE_LIBERATION +102 -0
  213. package/dist/assets/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  214. package/dist/assets/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  215. package/dist/assets/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  216. package/dist/assets/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  217. package/dist/assets/pdfjs/wasm/LICENSE_JBIG2 +196 -0
  218. package/dist/assets/pdfjs/wasm/LICENSE_OPENJPEG +39 -0
  219. package/dist/assets/pdfjs/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  220. package/dist/assets/pdfjs/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
  221. package/dist/assets/pdfjs/wasm/LICENSE_PDFJS_QCMS +22 -0
  222. package/dist/assets/pdfjs/wasm/LICENSE_QCMS +21 -0
  223. package/dist/assets/pdfjs/wasm/jbig2.wasm +0 -0
  224. package/dist/assets/pdfjs/wasm/jbig2_nowasm_fallback.js +15 -0
  225. package/dist/assets/pdfjs/wasm/openjpeg.wasm +0 -0
  226. package/dist/assets/pdfjs/wasm/openjpeg_nowasm_fallback.js +17 -0
  227. package/dist/assets/pdfjs/wasm/qcms_bg.wasm +0 -0
  228. package/dist/assets/pdfjs/wasm/quickjs-eval.js +16 -0
  229. package/dist/assets/pdfjs/wasm/quickjs-eval.wasm +0 -0
  230. package/dist/client.d.ts +20 -0
  231. package/dist/client.js +82 -0
  232. package/dist/contracts.d.ts +379 -0
  233. package/dist/contracts.js +22 -0
  234. package/dist/csv-worker.d.ts +1 -0
  235. package/dist/csv-worker.js +17 -0
  236. package/dist/detect.d.ts +15 -0
  237. package/dist/detect.js +290 -0
  238. package/dist/errors.d.ts +14 -0
  239. package/dist/errors.js +40 -0
  240. package/dist/font-manifest.d.ts +11 -0
  241. package/dist/font-manifest.js +31 -0
  242. package/dist/fonts/OFL-1.1.txt +88 -0
  243. package/dist/fonts/THIRD_PARTY_NOTICES.md +10 -0
  244. package/dist/fonts/manifest.json +83 -0
  245. package/dist/fonts/noto-sans-arabic.woff2 +0 -0
  246. package/dist/fonts/noto-sans-bengali.woff2 +0 -0
  247. package/dist/fonts/noto-sans-cjk.woff2 +0 -0
  248. package/dist/fonts/noto-sans-devanagari.woff2 +0 -0
  249. package/dist/fonts/noto-sans-gujarati.woff2 +0 -0
  250. package/dist/fonts/noto-sans-gurmukhi.woff2 +0 -0
  251. package/dist/fonts/noto-sans-japanese.woff2 +0 -0
  252. package/dist/fonts/noto-sans-kannada.woff2 +0 -0
  253. package/dist/fonts/noto-sans-korean.woff2 +0 -0
  254. package/dist/fonts/noto-sans-latin-cyrillic.woff2 +0 -0
  255. package/dist/fonts/noto-sans-malayalam.woff2 +0 -0
  256. package/dist/fonts/noto-sans-odia.woff2 +0 -0
  257. package/dist/fonts/noto-sans-tamil.woff2 +0 -0
  258. package/dist/fonts/noto-sans-telugu.woff2 +0 -0
  259. package/dist/fonts.d.ts +20 -0
  260. package/dist/fonts.js +238 -0
  261. package/dist/format.d.ts +1 -0
  262. package/dist/format.js +1 -0
  263. package/dist/headless.d.ts +18 -0
  264. package/dist/headless.js +18 -0
  265. package/dist/i18n.d.ts +4 -0
  266. package/dist/i18n.js +55 -0
  267. package/dist/image-worker.d.ts +1 -0
  268. package/dist/image-worker.js +41 -0
  269. package/dist/index.d.ts +27 -0
  270. package/dist/index.js +29 -0
  271. package/dist/interaction.d.ts +24 -0
  272. package/dist/interaction.js +183 -0
  273. package/dist/legacy-converter-worker.d.ts +1 -0
  274. package/dist/legacy-converter-worker.js +19 -0
  275. package/dist/limits.d.ts +4 -0
  276. package/dist/limits.js +162 -0
  277. package/dist/registry.d.ts +8 -0
  278. package/dist/registry.js +35 -0
  279. package/dist/render-scheduler.d.ts +8 -0
  280. package/dist/render-scheduler.js +63 -0
  281. package/dist/source.d.ts +14 -0
  282. package/dist/source.js +116 -0
  283. package/dist/spreadsheet-viewport.d.ts +34 -0
  284. package/dist/spreadsheet-viewport.js +1035 -0
  285. package/dist/styles.css +137 -0
  286. package/dist/ui-styles.d.ts +1 -0
  287. package/dist/ui-styles.js +139 -0
  288. package/dist/ui.d.ts +8 -0
  289. package/dist/ui.js +390 -0
  290. package/dist/viewer.d.ts +52 -0
  291. package/dist/viewer.js +901 -0
  292. package/dist/viewport.d.ts +54 -0
  293. package/dist/viewport.js +907 -0
  294. package/dist/worker-adapter.d.ts +24 -0
  295. package/dist/worker-adapter.js +97 -0
  296. package/dist/worker-client.d.ts +23 -0
  297. package/dist/worker-client.js +105 -0
  298. package/dist/worker-endpoint.d.ts +13 -0
  299. package/dist/worker-endpoint.js +57 -0
  300. package/dist/worker-protocol.d.ts +48 -0
  301. package/dist/worker-protocol.js +14 -0
  302. package/dist/worker.d.ts +4 -0
  303. package/dist/worker.js +4 -0
  304. package/dist/workers/csv-worker.js +160 -0
  305. package/dist/workers/image-worker.js +41 -0
  306. package/dist/workers/legacy-converter-worker.js +19 -0
  307. package/dist/workers/pdf.worker.min.mjs +28 -0
  308. package/package.json +74 -0
package/dist/fonts.js ADDED
@@ -0,0 +1,238 @@
1
+ import { fallbackFontPacks } from "./font-manifest.js";
2
+ const FALLBACK_FAMILY = "Zrimo Noto";
3
+ export class FontManager {
4
+ #policy;
5
+ #registered;
6
+ #assetBaseUrl;
7
+ #fetch;
8
+ #environment;
9
+ #loads = new Map();
10
+ #faces = new Set();
11
+ #warned = new Set();
12
+ #destroyed = false;
13
+ constructor(options) {
14
+ this.#policy = { mode: options.policy?.mode ?? "auto", ...options.policy };
15
+ this.#registered = options.registered ?? [];
16
+ this.#assetBaseUrl = options.assetBaseUrl;
17
+ this.#fetch = options.fetch;
18
+ this.#environment = options.environment ?? {
19
+ FontFace: globalThis.FontFace,
20
+ fonts: globalThis.document?.fonts,
21
+ };
22
+ }
23
+ async ensureRuns(runs, reportWarning, signal) {
24
+ // PDF.js owns embedded/subset/standard-font loading for both its canvas and
25
+ // text layer. Resolving those generated families through the viewer's Noto
26
+ // policy would race the backend and can substitute the wrong metrics.
27
+ const requests = fontRequestsForRuns(runs.filter((run) => run.textLayer !== "pdf"));
28
+ await Promise.all(requests.map((request) => this.#ensureRequest(request, reportWarning, signal)));
29
+ }
30
+ async destroy() {
31
+ if (this.#destroyed)
32
+ return;
33
+ this.#destroyed = true;
34
+ await Promise.allSettled(this.#loads.values());
35
+ const fonts = this.#environment.fonts;
36
+ if (fonts)
37
+ for (const face of this.#faces)
38
+ fonts.delete(face);
39
+ this.#faces.clear();
40
+ this.#loads.clear();
41
+ }
42
+ async #ensureRequest(request, reportWarning, signal) {
43
+ if (this.#destroyed || signal?.aborted)
44
+ return;
45
+ const matching = this.#registered.filter((font) => (!font.scripts || font.scripts.includes(request.script)) &&
46
+ (!request.family || font.family === request.family));
47
+ if (matching.length > 0) {
48
+ const loaded = await Promise.all(matching.map((font) => this.#loadResolution(`registered:${font.family}:${request.script}:${font.weight ?? 400}:${font.style ?? "normal"}`, font, request, reportWarning, signal)));
49
+ if (loaded.some(Boolean))
50
+ return;
51
+ }
52
+ if (this.#hasSystemFont(request))
53
+ return;
54
+ if (this.#policy.mode === "offline") {
55
+ this.#warnUnavailable(request, reportWarning, "offline policy has no matching registered or system font");
56
+ return;
57
+ }
58
+ if (this.#policy.mode === "custom") {
59
+ const resolution = await this.#policy.resolver?.(request, signal ?? new AbortController().signal);
60
+ if (resolution &&
61
+ (await this.#loadResolution(`custom:${request.family ?? "fallback"}:${request.script}:${request.weight}:${request.style}`, resolution, request, reportWarning, signal)))
62
+ return;
63
+ this.#warnUnavailable(request, reportWarning, "custom resolver returned no usable font");
64
+ return;
65
+ }
66
+ const packs = fallbackFontPacks.filter((pack) => pack.scripts.includes(request.script));
67
+ const loaded = await Promise.all(packs.map((pack) => this.#loadPack(pack, request, reportWarning, signal)));
68
+ if (!loaded.some(Boolean))
69
+ this.#warnUnavailable(request, reportWarning, "packaged fallback could not be loaded");
70
+ }
71
+ #hasSystemFont(request) {
72
+ const fonts = this.#environment.fonts;
73
+ if (!fonts)
74
+ return false;
75
+ if (!request.family &&
76
+ request.script !== "latin" &&
77
+ request.script !== "cyrillic")
78
+ return false;
79
+ const family = request.family ? quoteFamily(request.family) : "system-ui";
80
+ return fonts.check(`${request.style} ${request.weight} 16px ${family}`, String.fromCodePoint(...request.codepoints.slice(0, 32)));
81
+ }
82
+ #loadPack(pack, request, reportWarning, signal) {
83
+ const base = this.#assetBaseUrl ?? new URL("./", import.meta.url);
84
+ return this.#loadResolution(`pack:${pack.id}`, {
85
+ family: pack.family,
86
+ source: new URL(`fonts/${pack.file}`, base),
87
+ weight: 400,
88
+ style: "normal",
89
+ }, request, reportWarning, signal, pack.unicodeRange);
90
+ }
91
+ #loadResolution(key, resolution, request, reportWarning, signal, unicodeRange) {
92
+ const cached = this.#loads.get(key);
93
+ if (cached)
94
+ return cached;
95
+ const loading = this.#createFace(resolution.family ?? FALLBACK_FAMILY, resolution.source, resolution.weight ?? request.weight, resolution.style ?? request.style, unicodeRange, signal).catch((error) => {
96
+ this.#warnOnce(`load:${key}`, reportWarning, {
97
+ code: "font-unavailable",
98
+ message: `Font ${resolution.family ?? FALLBACK_FAMILY} could not be loaded`,
99
+ details: {
100
+ script: request.script,
101
+ reason: error instanceof Error ? error.message : String(error),
102
+ },
103
+ });
104
+ return false;
105
+ });
106
+ this.#loads.set(key, loading);
107
+ return loading;
108
+ }
109
+ async #createFace(family, source, weight, style, unicodeRange, signal) {
110
+ if (this.#destroyed || signal?.aborted)
111
+ return false;
112
+ const FontFaceConstructor = this.#environment.FontFace;
113
+ const fonts = this.#environment.fonts;
114
+ if (!FontFaceConstructor || !fonts)
115
+ return false;
116
+ const bytes = await fontBytes(source, this.#fetch, signal);
117
+ if (signal?.aborted)
118
+ return false;
119
+ const face = new FontFaceConstructor(family, bytes, {
120
+ weight: String(weight),
121
+ style,
122
+ ...(unicodeRange ? { unicodeRange } : {}),
123
+ });
124
+ this.#faces.add(face);
125
+ fonts.add(face);
126
+ try {
127
+ await face.load();
128
+ return true;
129
+ }
130
+ catch (error) {
131
+ fonts.delete(face);
132
+ this.#faces.delete(face);
133
+ throw error;
134
+ }
135
+ }
136
+ #warnUnavailable(request, reportWarning, reason) {
137
+ this.#warnOnce(`missing:${request.script}:${request.family ?? ""}`, reportWarning, {
138
+ code: "font-unavailable",
139
+ message: `No font was available for ${request.script} content`,
140
+ details: {
141
+ script: request.script,
142
+ requestedFamily: request.family,
143
+ substitution: FALLBACK_FAMILY,
144
+ reason,
145
+ },
146
+ });
147
+ }
148
+ #warnOnce(key, reportWarning, warning) {
149
+ if (this.#warned.has(key))
150
+ return;
151
+ this.#warned.add(key);
152
+ reportWarning(warning);
153
+ }
154
+ }
155
+ export function fontRequestsForRuns(runs) {
156
+ const requests = new Map();
157
+ const details = new Map();
158
+ for (const run of runs) {
159
+ for (const character of run.text) {
160
+ const codepoint = character.codePointAt(0);
161
+ const script = scriptForCodepoint(codepoint);
162
+ if (script === "unknown")
163
+ continue;
164
+ const weight = run.fontWeight ?? 400;
165
+ const style = run.fontStyle ?? "normal";
166
+ const key = `${run.fontFamily ?? ""}:${weight}:${style}:${script}`;
167
+ const points = requests.get(key) ?? new Set();
168
+ points.add(codepoint);
169
+ requests.set(key, points);
170
+ details.set(key, {
171
+ ...(run.fontFamily ? { family: run.fontFamily } : {}),
172
+ weight,
173
+ style,
174
+ script,
175
+ });
176
+ }
177
+ }
178
+ return [...requests].map(([key, codepoints]) => Object.freeze({
179
+ ...details.get(key),
180
+ codepoints: Object.freeze([...codepoints]),
181
+ }));
182
+ }
183
+ export function scriptForCodepoint(codepoint) {
184
+ if (inRanges(codepoint, [0x3040, 0x30ff, 0x31f0, 0x31ff]))
185
+ return "japanese";
186
+ if (inRanges(codepoint, [0x1100, 0x11ff, 0x3130, 0x318f, 0xac00, 0xd7af]))
187
+ return "korean";
188
+ if (inRanges(codepoint, [0x2e80, 0x2fff, 0x3400, 0x4dbf, 0x4e00, 0x9fff, 0xf900, 0xfaff]))
189
+ return "cjk";
190
+ if (inRanges(codepoint, [
191
+ 0x0600, 0x06ff, 0x0750, 0x077f, 0x08a0, 0x08ff, 0xfb50, 0xfdff, 0xfe70,
192
+ 0xfeff,
193
+ ]))
194
+ return "arabic";
195
+ if (inRanges(codepoint, [0x0900, 0x097f, 0xa8e0, 0xa8ff]))
196
+ return "devanagari";
197
+ if (inRanges(codepoint, [0x0980, 0x09ff]))
198
+ return "bengali";
199
+ if (inRanges(codepoint, [0x0a00, 0x0a7f]))
200
+ return "gurmukhi";
201
+ if (inRanges(codepoint, [0x0a80, 0x0aff]))
202
+ return "gujarati";
203
+ if (inRanges(codepoint, [0x0b00, 0x0b7f]))
204
+ return "odia";
205
+ if (inRanges(codepoint, [0x0b80, 0x0bff]))
206
+ return "tamil";
207
+ if (inRanges(codepoint, [0x0c00, 0x0c7f]))
208
+ return "telugu";
209
+ if (inRanges(codepoint, [0x0c80, 0x0cff]))
210
+ return "kannada";
211
+ if (inRanges(codepoint, [0x0d00, 0x0d7f]))
212
+ return "malayalam";
213
+ if (inRanges(codepoint, [0x0400, 0x052f]))
214
+ return "cyrillic";
215
+ if (inRanges(codepoint, [0x0000, 0x024f, 0x1e00, 0x1eff]) &&
216
+ /\p{Script=Latin}/u.test(String.fromCodePoint(codepoint)))
217
+ return "latin";
218
+ return "unknown";
219
+ }
220
+ async function fontBytes(source, fetch, signal) {
221
+ if (source instanceof ArrayBuffer)
222
+ return source.slice(0);
223
+ if (source instanceof Uint8Array)
224
+ return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);
225
+ const response = await fetch(source, signal ? { signal } : undefined);
226
+ if (!response.ok)
227
+ throw new Error(`Font request failed with HTTP ${response.status}`);
228
+ return response.arrayBuffer();
229
+ }
230
+ function inRanges(codepoint, ranges) {
231
+ for (let index = 0; index < ranges.length; index += 2)
232
+ if (codepoint >= ranges[index] && codepoint <= ranges[index + 1])
233
+ return true;
234
+ return false;
235
+ }
236
+ function quoteFamily(family) {
237
+ return `"${family.replaceAll('"', '\\"')}"`;
238
+ }
@@ -0,0 +1 @@
1
+ export { detectFormat, formatFromFileName, formatFromMime, sniffFormat, } from "./detect.js";
package/dist/format.js ADDED
@@ -0,0 +1 @@
1
+ export { detectFormat, formatFromFileName, formatFromMime, sniffFormat, } from "./detect.js";
@@ -0,0 +1,18 @@
1
+ export * from "./contracts.js";
2
+ export * from "./client.js";
3
+ export * from "./viewer.js";
4
+ export * from "./detect.js";
5
+ export * from "./errors.js";
6
+ export * from "./format.js";
7
+ export * from "./limits.js";
8
+ export * from "./interaction.js";
9
+ export * from "./render-scheduler.js";
10
+ export * from "./font-manifest.js";
11
+ export * from "./fonts.js";
12
+ export * from "./registry.js";
13
+ export * from "./adapters/office.js";
14
+ export * from "./adapters/pdf.js";
15
+ export * from "./adapters/image.js";
16
+ export * from "./adapters/csv.js";
17
+ export * from "./adapters/csv-parser.js";
18
+ export * from "./adapters/svg.js";
@@ -0,0 +1,18 @@
1
+ export * from "./contracts.js";
2
+ export * from "./client.js";
3
+ export * from "./viewer.js";
4
+ export * from "./detect.js";
5
+ export * from "./errors.js";
6
+ export * from "./format.js";
7
+ export * from "./limits.js";
8
+ export * from "./interaction.js";
9
+ export * from "./render-scheduler.js";
10
+ export * from "./font-manifest.js";
11
+ export * from "./fonts.js";
12
+ export * from "./registry.js";
13
+ export * from "./adapters/office.js";
14
+ export * from "./adapters/pdf.js";
15
+ export * from "./adapters/image.js";
16
+ export * from "./adapters/csv.js";
17
+ export * from "./adapters/csv-parser.js";
18
+ export * from "./adapters/svg.js";
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import type { ViewerLocale, ViewerTranslations } from "./contracts.js";
2
+ export declare const englishTranslations: ViewerTranslations;
3
+ export declare const russianTranslations: ViewerTranslations;
4
+ export declare function resolveTranslations(locale: ViewerLocale | undefined, overrides: Partial<ViewerTranslations> | undefined): ViewerTranslations;
package/dist/i18n.js ADDED
@@ -0,0 +1,55 @@
1
+ export const englishTranslations = Object.freeze({
2
+ previous: "Previous",
3
+ next: "Next",
4
+ page: "Page",
5
+ of: "of",
6
+ zoomIn: "Zoom in",
7
+ zoomOut: "Zoom out",
8
+ fitWidth: "Fit width",
9
+ fitPage: "Fit page",
10
+ search: "Search",
11
+ searchPlaceholder: "Search document",
12
+ matches: "matches",
13
+ thumbnails: "Thumbnails",
14
+ fullscreen: "Fullscreen",
15
+ exitFullscreen: "Exit fullscreen",
16
+ download: "Download original",
17
+ sheets: "Sheets",
18
+ selectedRange: "Selected range",
19
+ loading: "Loading…",
20
+ close: "Close",
21
+ noMatches: "No matches",
22
+ });
23
+ export const russianTranslations = Object.freeze({
24
+ previous: "Назад",
25
+ next: "Вперёд",
26
+ page: "Страница",
27
+ of: "из",
28
+ zoomIn: "Увеличить",
29
+ zoomOut: "Уменьшить",
30
+ fitWidth: "По ширине",
31
+ fitPage: "Вся страница",
32
+ search: "Поиск",
33
+ searchPlaceholder: "Найти в документе",
34
+ matches: "совпадений",
35
+ thumbnails: "Миниатюры",
36
+ fullscreen: "На весь экран",
37
+ exitFullscreen: "Выйти из полноэкранного режима",
38
+ download: "Скачать оригинал",
39
+ sheets: "Листы",
40
+ selectedRange: "Выбранный диапазон",
41
+ loading: "Загрузка…",
42
+ close: "Закрыть",
43
+ noMatches: "Совпадений нет",
44
+ });
45
+ const dictionaries = {
46
+ en: englishTranslations,
47
+ ru: russianTranslations,
48
+ };
49
+ export function resolveTranslations(locale, overrides) {
50
+ return Object.freeze({
51
+ ...englishTranslations,
52
+ ...(locale ? dictionaries[locale] : undefined),
53
+ ...overrides,
54
+ });
55
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ const workerScope = self;
2
+ let document;
3
+ workerScope.onmessage = async (event) => {
4
+ const request = event.data;
5
+ try {
6
+ if (request.type === "open") {
7
+ if (!request.moduleUrl || !request.data || !request.maxPixels)
8
+ throw new Error("Invalid TIFF open request");
9
+ const module = (await import(
10
+ /* @vite-ignore */ request.moduleUrl));
11
+ await module.default();
12
+ document?.free();
13
+ document = new module.TiffViewerDocument(new Uint8Array(request.data), request.maxPixels);
14
+ const pages = Array.from({ length: document.pageCount() }, (_, pageIndex) => ({
15
+ width: document.pageWidth(pageIndex),
16
+ height: document.pageHeight(pageIndex),
17
+ }));
18
+ workerScope.postMessage({ id: request.id, ok: true, pages });
19
+ }
20
+ else if (request.type === "render") {
21
+ if (!document || request.pageIndex === undefined)
22
+ throw new Error("TIFF is not open");
23
+ const png = document.renderPagePng(request.pageIndex);
24
+ const data = png.slice().buffer;
25
+ workerScope.postMessage({ id: request.id, ok: true, data }, [data]);
26
+ }
27
+ else {
28
+ document?.free();
29
+ document = undefined;
30
+ workerScope.postMessage({ id: request.id, ok: true });
31
+ }
32
+ }
33
+ catch (error) {
34
+ workerScope.postMessage({
35
+ id: request.id,
36
+ ok: false,
37
+ message: error instanceof Error ? error.message : String(error),
38
+ });
39
+ }
40
+ };
41
+ export {};
@@ -0,0 +1,27 @@
1
+ export * from "./contracts.js";
2
+ export * from "./client.js";
3
+ export * from "./detect.js";
4
+ export * from "./errors.js";
5
+ export * from "./format.js";
6
+ export * from "./limits.js";
7
+ export * from "./interaction.js";
8
+ export * from "./render-scheduler.js";
9
+ export * from "./i18n.js";
10
+ export * from "./font-manifest.js";
11
+ export * from "./fonts.js";
12
+ export * from "./ui.js";
13
+ export * from "./ui-styles.js";
14
+ export * from "./registry.js";
15
+ export * from "./viewer.js";
16
+ export * from "./worker-client.js";
17
+ export * from "./worker-adapter.js";
18
+ export * from "./worker-endpoint.js";
19
+ export * from "./worker-protocol.js";
20
+ export * from "./adapters/office.js";
21
+ export * from "./adapters/pdf.js";
22
+ export * from "./adapters/image.js";
23
+ export * from "./adapters/csv.js";
24
+ export * from "./adapters/csv-parser.js";
25
+ export * from "./adapters/svg.js";
26
+ import type { ViewerClientOptions, ViewerOptions } from "./contracts.js";
27
+ export declare function createViewer(options?: ViewerOptions, clientOptions?: ViewerClientOptions): import("./viewer.js").DocumentViewer;
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ export * from "./contracts.js";
2
+ export * from "./client.js";
3
+ export * from "./detect.js";
4
+ export * from "./errors.js";
5
+ export * from "./format.js";
6
+ export * from "./limits.js";
7
+ export * from "./interaction.js";
8
+ export * from "./render-scheduler.js";
9
+ export * from "./i18n.js";
10
+ export * from "./font-manifest.js";
11
+ export * from "./fonts.js";
12
+ export * from "./ui.js";
13
+ export * from "./ui-styles.js";
14
+ export * from "./registry.js";
15
+ export * from "./viewer.js";
16
+ export * from "./worker-client.js";
17
+ export * from "./worker-adapter.js";
18
+ export * from "./worker-endpoint.js";
19
+ export * from "./worker-protocol.js";
20
+ export * from "./adapters/office.js";
21
+ export * from "./adapters/pdf.js";
22
+ export * from "./adapters/image.js";
23
+ export * from "./adapters/csv.js";
24
+ export * from "./adapters/csv-parser.js";
25
+ export * from "./adapters/svg.js";
26
+ import { ViewerClient } from "./client.js";
27
+ export function createViewer(options = {}, clientOptions = {}) {
28
+ return ViewerClient.create(clientOptions).createViewer(options);
29
+ }
@@ -0,0 +1,24 @@
1
+ import type { CellRange, SearchMatch } from "./contracts.js";
2
+ export interface VirtualRange {
3
+ readonly start: number;
4
+ readonly end: number;
5
+ }
6
+ export declare function visibleRange(scrollOffset: number, viewportExtent: number, itemExtent: number, itemCount: number, overscan?: number): VirtualRange;
7
+ export declare function normalizeCellRange(range: CellRange): CellRange;
8
+ export declare function findNormalizedMatches(text: string, query: string, pageIndex: number, caseSensitive?: boolean): readonly SearchMatch[];
9
+ export declare function normalizeSearchText(text: string, caseSensitive?: boolean): string;
10
+ /** Clamp a UTF-16 DOM offset to a grapheme boundary for native selection UI. */
11
+ export declare function snapGraphemeOffset(text: string, offset: number, edge: "start" | "end"): number;
12
+ export declare function cellRangeToTsv(range: CellRange, cells: ReadonlyMap<string, string>): string;
13
+ export declare function cellRangesToTsv(ranges: readonly CellRange[], cells: ReadonlyMap<string, string>): string;
14
+ export declare class LruMap<K, V> {
15
+ #private;
16
+ constructor(capacity: number);
17
+ get size(): number;
18
+ get(key: K): V | undefined;
19
+ set(key: K, value: V): {
20
+ key: K;
21
+ value: V;
22
+ } | undefined;
23
+ clear(): void;
24
+ }
@@ -0,0 +1,183 @@
1
+ export function visibleRange(scrollOffset, viewportExtent, itemExtent, itemCount, overscan = 1) {
2
+ if (itemCount <= 0 || itemExtent <= 0)
3
+ return { start: 0, end: 0 };
4
+ const first = Math.floor(Math.max(0, scrollOffset) / itemExtent);
5
+ const last = Math.ceil((Math.max(0, scrollOffset) + Math.max(0, viewportExtent)) / itemExtent);
6
+ return {
7
+ start: Math.max(0, first - Math.max(0, Math.trunc(overscan))),
8
+ end: Math.min(itemCount, last + Math.max(0, Math.trunc(overscan))),
9
+ };
10
+ }
11
+ export function normalizeCellRange(range) {
12
+ return {
13
+ sheetIndex: Math.max(0, Math.trunc(range.sheetIndex)),
14
+ startRow: Math.max(1, Math.min(range.startRow, range.endRow)),
15
+ startColumn: Math.max(1, Math.min(range.startColumn, range.endColumn)),
16
+ endRow: Math.max(1, Math.max(range.startRow, range.endRow)),
17
+ endColumn: Math.max(1, Math.max(range.startColumn, range.endColumn)),
18
+ };
19
+ }
20
+ export function findNormalizedMatches(text, query, pageIndex, caseSensitive = false) {
21
+ const haystack = normalizeWithMap(text, caseSensitive);
22
+ const needle = normalizeSearchText(query, caseSensitive);
23
+ if (!needle)
24
+ return [];
25
+ const matches = [];
26
+ let offset = 0;
27
+ while (offset <= haystack.text.length - needle.length) {
28
+ const found = haystack.text.indexOf(needle, offset);
29
+ if (found < 0)
30
+ break;
31
+ const last = found + needle.length - 1;
32
+ const start = haystack.starts[found] ?? 0;
33
+ const end = haystack.ends[last] ?? start;
34
+ matches.push({
35
+ pageIndex,
36
+ start,
37
+ end,
38
+ text: text.slice(start, end),
39
+ });
40
+ offset = found + Math.max(1, needle.length);
41
+ }
42
+ return matches;
43
+ }
44
+ export function normalizeSearchText(text, caseSensitive = false) {
45
+ const normalized = text.normalize("NFKC");
46
+ return caseSensitive ? normalized : unicodeCaseFold(normalized);
47
+ }
48
+ /** Clamp a UTF-16 DOM offset to a grapheme boundary for native selection UI. */
49
+ export function snapGraphemeOffset(text, offset, edge) {
50
+ const safeOffset = Math.max(0, Math.min(text.length, Math.trunc(offset)));
51
+ for (const segment of graphemeSegments(text)) {
52
+ if (safeOffset === segment.start || safeOffset === segment.end)
53
+ return safeOffset;
54
+ if (safeOffset > segment.start && safeOffset < segment.end)
55
+ return edge === "start" ? segment.start : segment.end;
56
+ }
57
+ return safeOffset;
58
+ }
59
+ export function cellRangeToTsv(range, cells) {
60
+ const normalized = normalizeCellRange(range);
61
+ const rows = [];
62
+ for (let row = normalized.startRow; row <= normalized.endRow; row += 1) {
63
+ const values = [];
64
+ for (let column = normalized.startColumn; column <= normalized.endColumn; column += 1)
65
+ values.push(escapeTsv(cells.get(`${row}:${column}`) ?? ""));
66
+ rows.push(values.join("\t"));
67
+ }
68
+ return rows.join("\n");
69
+ }
70
+ export function cellRangesToTsv(ranges, cells) {
71
+ if (ranges.length === 0)
72
+ return "";
73
+ if (ranges.length === 1)
74
+ return cellRangeToTsv(ranges[0], cells);
75
+ const rows = new Map();
76
+ for (const rawRange of ranges) {
77
+ const range = normalizeCellRange(rawRange);
78
+ for (let row = range.startRow; row <= range.endRow; row += 1) {
79
+ const intervals = rows.get(row) ?? [];
80
+ intervals.push({ start: range.startColumn, end: range.endColumn });
81
+ rows.set(row, intervals);
82
+ }
83
+ }
84
+ const output = [];
85
+ for (const [row, intervals] of [...rows].sort(([left], [right]) => left - right)) {
86
+ const selected = mergeIntervals(intervals);
87
+ const start = selected[0].start;
88
+ const end = selected[selected.length - 1].end;
89
+ const values = [];
90
+ for (let column = start; column <= end; column += 1) {
91
+ const included = selected.some((interval) => column >= interval.start && column <= interval.end);
92
+ values.push(included ? escapeTsv(cells.get(`${row}:${column}`) ?? "") : "");
93
+ }
94
+ output.push(values.join("\t"));
95
+ }
96
+ return output.join("\n");
97
+ }
98
+ export class LruMap {
99
+ #values = new Map();
100
+ #capacity;
101
+ constructor(capacity) {
102
+ this.#capacity = Math.max(1, Math.trunc(capacity));
103
+ }
104
+ get size() {
105
+ return this.#values.size;
106
+ }
107
+ get(key) {
108
+ const value = this.#values.get(key);
109
+ if (value === undefined)
110
+ return undefined;
111
+ this.#values.delete(key);
112
+ this.#values.set(key, value);
113
+ return value;
114
+ }
115
+ set(key, value) {
116
+ if (this.#values.has(key))
117
+ this.#values.delete(key);
118
+ this.#values.set(key, value);
119
+ if (this.#values.size <= this.#capacity)
120
+ return undefined;
121
+ const oldest = this.#values.entries().next().value;
122
+ this.#values.delete(oldest[0]);
123
+ return { key: oldest[0], value: oldest[1] };
124
+ }
125
+ clear() {
126
+ this.#values.clear();
127
+ }
128
+ }
129
+ function normalizeWithMap(text, caseSensitive) {
130
+ const output = [];
131
+ const starts = [];
132
+ const ends = [];
133
+ const segments = graphemeSegments(text);
134
+ for (const segment of segments) {
135
+ const normalized = normalizeSearchText(segment.value, caseSensitive);
136
+ output.push(normalized);
137
+ for (let index = 0; index < normalized.length; index += 1) {
138
+ starts.push(segment.start);
139
+ ends.push(segment.end);
140
+ }
141
+ }
142
+ return { text: output.join(""), starts, ends };
143
+ }
144
+ function graphemeSegments(text) {
145
+ if (typeof Intl.Segmenter === "function") {
146
+ const segmenter = new Intl.Segmenter(undefined, {
147
+ granularity: "grapheme",
148
+ });
149
+ return [...segmenter.segment(text)].map((segment) => ({
150
+ value: segment.segment,
151
+ start: segment.index,
152
+ end: segment.index + segment.segment.length,
153
+ }));
154
+ }
155
+ const result = [];
156
+ let offset = 0;
157
+ for (const value of text) {
158
+ result.push({ value, start: offset, end: offset + value.length });
159
+ offset += value.length;
160
+ }
161
+ return result;
162
+ }
163
+ function unicodeCaseFold(text) {
164
+ return text
165
+ .toLocaleLowerCase("und")
166
+ .replaceAll("ß", "ss")
167
+ .replaceAll("ς", "σ");
168
+ }
169
+ function escapeTsv(value) {
170
+ return /[\t\n\r"]/.test(value) ? `"${value.replaceAll('"', '""')}"` : value;
171
+ }
172
+ function mergeIntervals(intervals) {
173
+ const sorted = [...intervals].sort((left, right) => left.start - right.start);
174
+ const merged = [];
175
+ for (const interval of sorted) {
176
+ const previous = merged.at(-1);
177
+ if (previous && interval.start <= previous.end + 1)
178
+ previous.end = Math.max(previous.end, interval.end);
179
+ else
180
+ merged.push({ ...interval });
181
+ }
182
+ return merged;
183
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ const workerScope = self;
2
+ workerScope.onmessage = async (event) => {
3
+ try {
4
+ const module = (await import(
5
+ /* @vite-ignore */ event.data.moduleUrl));
6
+ await module.default();
7
+ const output = module.convertLegacyToOoxml(new Uint8Array(event.data.data), event.data.format);
8
+ const data = output.slice().buffer;
9
+ workerScope.postMessage({ ok: true, data }, [data]);
10
+ }
11
+ catch (error) {
12
+ workerScope.postMessage({
13
+ ok: false,
14
+ data: new ArrayBuffer(0),
15
+ message: error instanceof Error ? error.message : String(error),
16
+ });
17
+ }
18
+ };
19
+ export {};