@tindtechnologies/pdfjs-viewer 5.4.624-tind.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 (408) hide show
  1. package/LICENSE +177 -0
  2. package/README.md +3 -0
  3. package/build/pdf.mjs +26370 -0
  4. package/build/pdf.mjs.map +1 -0
  5. package/build/pdf.sandbox.mjs +241 -0
  6. package/build/pdf.sandbox.mjs.map +1 -0
  7. package/build/pdf.worker.mjs +61080 -0
  8. package/build/pdf.worker.mjs.map +1 -0
  9. package/package.json +9 -0
  10. package/web/cmaps/78-EUC-H.bcmap +0 -0
  11. package/web/cmaps/78-EUC-V.bcmap +0 -0
  12. package/web/cmaps/78-H.bcmap +0 -0
  13. package/web/cmaps/78-RKSJ-H.bcmap +0 -0
  14. package/web/cmaps/78-RKSJ-V.bcmap +0 -0
  15. package/web/cmaps/78-V.bcmap +0 -0
  16. package/web/cmaps/78ms-RKSJ-H.bcmap +0 -0
  17. package/web/cmaps/78ms-RKSJ-V.bcmap +0 -0
  18. package/web/cmaps/83pv-RKSJ-H.bcmap +0 -0
  19. package/web/cmaps/90ms-RKSJ-H.bcmap +0 -0
  20. package/web/cmaps/90ms-RKSJ-V.bcmap +0 -0
  21. package/web/cmaps/90msp-RKSJ-H.bcmap +0 -0
  22. package/web/cmaps/90msp-RKSJ-V.bcmap +0 -0
  23. package/web/cmaps/90pv-RKSJ-H.bcmap +0 -0
  24. package/web/cmaps/90pv-RKSJ-V.bcmap +0 -0
  25. package/web/cmaps/Add-H.bcmap +0 -0
  26. package/web/cmaps/Add-RKSJ-H.bcmap +0 -0
  27. package/web/cmaps/Add-RKSJ-V.bcmap +0 -0
  28. package/web/cmaps/Add-V.bcmap +0 -0
  29. package/web/cmaps/Adobe-CNS1-0.bcmap +0 -0
  30. package/web/cmaps/Adobe-CNS1-1.bcmap +0 -0
  31. package/web/cmaps/Adobe-CNS1-2.bcmap +0 -0
  32. package/web/cmaps/Adobe-CNS1-3.bcmap +0 -0
  33. package/web/cmaps/Adobe-CNS1-4.bcmap +0 -0
  34. package/web/cmaps/Adobe-CNS1-5.bcmap +0 -0
  35. package/web/cmaps/Adobe-CNS1-6.bcmap +0 -0
  36. package/web/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  37. package/web/cmaps/Adobe-GB1-0.bcmap +0 -0
  38. package/web/cmaps/Adobe-GB1-1.bcmap +0 -0
  39. package/web/cmaps/Adobe-GB1-2.bcmap +0 -0
  40. package/web/cmaps/Adobe-GB1-3.bcmap +0 -0
  41. package/web/cmaps/Adobe-GB1-4.bcmap +0 -0
  42. package/web/cmaps/Adobe-GB1-5.bcmap +0 -0
  43. package/web/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  44. package/web/cmaps/Adobe-Japan1-0.bcmap +0 -0
  45. package/web/cmaps/Adobe-Japan1-1.bcmap +0 -0
  46. package/web/cmaps/Adobe-Japan1-2.bcmap +0 -0
  47. package/web/cmaps/Adobe-Japan1-3.bcmap +0 -0
  48. package/web/cmaps/Adobe-Japan1-4.bcmap +0 -0
  49. package/web/cmaps/Adobe-Japan1-5.bcmap +0 -0
  50. package/web/cmaps/Adobe-Japan1-6.bcmap +0 -0
  51. package/web/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  52. package/web/cmaps/Adobe-Korea1-0.bcmap +0 -0
  53. package/web/cmaps/Adobe-Korea1-1.bcmap +0 -0
  54. package/web/cmaps/Adobe-Korea1-2.bcmap +0 -0
  55. package/web/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  56. package/web/cmaps/B5-H.bcmap +0 -0
  57. package/web/cmaps/B5-V.bcmap +0 -0
  58. package/web/cmaps/B5pc-H.bcmap +0 -0
  59. package/web/cmaps/B5pc-V.bcmap +0 -0
  60. package/web/cmaps/CNS-EUC-H.bcmap +0 -0
  61. package/web/cmaps/CNS-EUC-V.bcmap +0 -0
  62. package/web/cmaps/CNS1-H.bcmap +0 -0
  63. package/web/cmaps/CNS1-V.bcmap +0 -0
  64. package/web/cmaps/CNS2-H.bcmap +0 -0
  65. package/web/cmaps/CNS2-V.bcmap +3 -0
  66. package/web/cmaps/ETHK-B5-H.bcmap +0 -0
  67. package/web/cmaps/ETHK-B5-V.bcmap +0 -0
  68. package/web/cmaps/ETen-B5-H.bcmap +0 -0
  69. package/web/cmaps/ETen-B5-V.bcmap +0 -0
  70. package/web/cmaps/ETenms-B5-H.bcmap +3 -0
  71. package/web/cmaps/ETenms-B5-V.bcmap +0 -0
  72. package/web/cmaps/EUC-H.bcmap +0 -0
  73. package/web/cmaps/EUC-V.bcmap +0 -0
  74. package/web/cmaps/Ext-H.bcmap +0 -0
  75. package/web/cmaps/Ext-RKSJ-H.bcmap +0 -0
  76. package/web/cmaps/Ext-RKSJ-V.bcmap +0 -0
  77. package/web/cmaps/Ext-V.bcmap +0 -0
  78. package/web/cmaps/GB-EUC-H.bcmap +0 -0
  79. package/web/cmaps/GB-EUC-V.bcmap +0 -0
  80. package/web/cmaps/GB-H.bcmap +4 -0
  81. package/web/cmaps/GB-V.bcmap +0 -0
  82. package/web/cmaps/GBK-EUC-H.bcmap +0 -0
  83. package/web/cmaps/GBK-EUC-V.bcmap +0 -0
  84. package/web/cmaps/GBK2K-H.bcmap +0 -0
  85. package/web/cmaps/GBK2K-V.bcmap +0 -0
  86. package/web/cmaps/GBKp-EUC-H.bcmap +0 -0
  87. package/web/cmaps/GBKp-EUC-V.bcmap +0 -0
  88. package/web/cmaps/GBT-EUC-H.bcmap +0 -0
  89. package/web/cmaps/GBT-EUC-V.bcmap +0 -0
  90. package/web/cmaps/GBT-H.bcmap +0 -0
  91. package/web/cmaps/GBT-V.bcmap +0 -0
  92. package/web/cmaps/GBTpc-EUC-H.bcmap +0 -0
  93. package/web/cmaps/GBTpc-EUC-V.bcmap +0 -0
  94. package/web/cmaps/GBpc-EUC-H.bcmap +0 -0
  95. package/web/cmaps/GBpc-EUC-V.bcmap +0 -0
  96. package/web/cmaps/H.bcmap +0 -0
  97. package/web/cmaps/HKdla-B5-H.bcmap +0 -0
  98. package/web/cmaps/HKdla-B5-V.bcmap +0 -0
  99. package/web/cmaps/HKdlb-B5-H.bcmap +0 -0
  100. package/web/cmaps/HKdlb-B5-V.bcmap +0 -0
  101. package/web/cmaps/HKgccs-B5-H.bcmap +0 -0
  102. package/web/cmaps/HKgccs-B5-V.bcmap +0 -0
  103. package/web/cmaps/HKm314-B5-H.bcmap +0 -0
  104. package/web/cmaps/HKm314-B5-V.bcmap +0 -0
  105. package/web/cmaps/HKm471-B5-H.bcmap +0 -0
  106. package/web/cmaps/HKm471-B5-V.bcmap +0 -0
  107. package/web/cmaps/HKscs-B5-H.bcmap +0 -0
  108. package/web/cmaps/HKscs-B5-V.bcmap +0 -0
  109. package/web/cmaps/Hankaku.bcmap +0 -0
  110. package/web/cmaps/Hiragana.bcmap +0 -0
  111. package/web/cmaps/KSC-EUC-H.bcmap +0 -0
  112. package/web/cmaps/KSC-EUC-V.bcmap +0 -0
  113. package/web/cmaps/KSC-H.bcmap +0 -0
  114. package/web/cmaps/KSC-Johab-H.bcmap +0 -0
  115. package/web/cmaps/KSC-Johab-V.bcmap +0 -0
  116. package/web/cmaps/KSC-V.bcmap +0 -0
  117. package/web/cmaps/KSCms-UHC-H.bcmap +0 -0
  118. package/web/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  119. package/web/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  120. package/web/cmaps/KSCms-UHC-V.bcmap +0 -0
  121. package/web/cmaps/KSCpc-EUC-H.bcmap +0 -0
  122. package/web/cmaps/KSCpc-EUC-V.bcmap +0 -0
  123. package/web/cmaps/Katakana.bcmap +0 -0
  124. package/web/cmaps/LICENSE +36 -0
  125. package/web/cmaps/NWP-H.bcmap +0 -0
  126. package/web/cmaps/NWP-V.bcmap +0 -0
  127. package/web/cmaps/RKSJ-H.bcmap +0 -0
  128. package/web/cmaps/RKSJ-V.bcmap +0 -0
  129. package/web/cmaps/Roman.bcmap +0 -0
  130. package/web/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  131. package/web/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  132. package/web/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  133. package/web/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  134. package/web/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  135. package/web/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  136. package/web/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  137. package/web/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  138. package/web/cmaps/UniGB-UCS2-H.bcmap +0 -0
  139. package/web/cmaps/UniGB-UCS2-V.bcmap +0 -0
  140. package/web/cmaps/UniGB-UTF16-H.bcmap +0 -0
  141. package/web/cmaps/UniGB-UTF16-V.bcmap +0 -0
  142. package/web/cmaps/UniGB-UTF32-H.bcmap +0 -0
  143. package/web/cmaps/UniGB-UTF32-V.bcmap +0 -0
  144. package/web/cmaps/UniGB-UTF8-H.bcmap +0 -0
  145. package/web/cmaps/UniGB-UTF8-V.bcmap +0 -0
  146. package/web/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  147. package/web/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  148. package/web/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  149. package/web/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  150. package/web/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  151. package/web/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  152. package/web/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  153. package/web/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  154. package/web/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  155. package/web/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  156. package/web/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  157. package/web/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  158. package/web/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  159. package/web/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  160. package/web/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  161. package/web/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  162. package/web/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  163. package/web/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  164. package/web/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  165. package/web/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  166. package/web/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  167. package/web/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  168. package/web/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  169. package/web/cmaps/UniKS-UCS2-H.bcmap +0 -0
  170. package/web/cmaps/UniKS-UCS2-V.bcmap +0 -0
  171. package/web/cmaps/UniKS-UTF16-H.bcmap +0 -0
  172. package/web/cmaps/UniKS-UTF16-V.bcmap +0 -0
  173. package/web/cmaps/UniKS-UTF32-H.bcmap +0 -0
  174. package/web/cmaps/UniKS-UTF32-V.bcmap +0 -0
  175. package/web/cmaps/UniKS-UTF8-H.bcmap +0 -0
  176. package/web/cmaps/UniKS-UTF8-V.bcmap +0 -0
  177. package/web/cmaps/V.bcmap +0 -0
  178. package/web/cmaps/WP-Symbol.bcmap +0 -0
  179. package/web/compressed.tracemonkey-pldi-09.pdf +0 -0
  180. package/web/debugger.css +145 -0
  181. package/web/debugger.mjs +848 -0
  182. package/web/iccs/CGATS001Compat-v2-micro.icc +0 -0
  183. package/web/iccs/LICENSE +116 -0
  184. package/web/images/altText_add.svg +3 -0
  185. package/web/images/altText_disclaimer.svg +3 -0
  186. package/web/images/altText_done.svg +3 -0
  187. package/web/images/altText_spinner.svg +30 -0
  188. package/web/images/altText_warning.svg +3 -0
  189. package/web/images/annotation-check.svg +11 -0
  190. package/web/images/annotation-comment.svg +16 -0
  191. package/web/images/annotation-help.svg +26 -0
  192. package/web/images/annotation-insert.svg +10 -0
  193. package/web/images/annotation-key.svg +11 -0
  194. package/web/images/annotation-newparagraph.svg +11 -0
  195. package/web/images/annotation-noicon.svg +7 -0
  196. package/web/images/annotation-note.svg +42 -0
  197. package/web/images/annotation-paperclip.svg +6 -0
  198. package/web/images/annotation-paragraph.svg +16 -0
  199. package/web/images/annotation-pushpin.svg +7 -0
  200. package/web/images/checkmark.svg +5 -0
  201. package/web/images/comment-actionsButton.svg +3 -0
  202. package/web/images/comment-closeButton.svg +3 -0
  203. package/web/images/comment-editButton.svg +8 -0
  204. package/web/images/comment-popup-editButton.svg +5 -0
  205. package/web/images/cursor-editorFreeHighlight.svg +6 -0
  206. package/web/images/cursor-editorFreeText.svg +3 -0
  207. package/web/images/cursor-editorInk.svg +4 -0
  208. package/web/images/cursor-editorTextHighlight.svg +8 -0
  209. package/web/images/editor-toolbar-delete.svg +5 -0
  210. package/web/images/editor-toolbar-edit.svg +3 -0
  211. package/web/images/findbarButton-next.svg +3 -0
  212. package/web/images/findbarButton-previous.svg +3 -0
  213. package/web/images/gv-toolbarButton-download.svg +3 -0
  214. package/web/images/loading-icon.gif +0 -0
  215. package/web/images/loading.svg +1 -0
  216. package/web/images/messageBar_closingButton.svg +3 -0
  217. package/web/images/messageBar_info.svg +3 -0
  218. package/web/images/messageBar_warning.svg +3 -0
  219. package/web/images/pages_closeButton.svg +3 -0
  220. package/web/images/pages_selected.svg +7 -0
  221. package/web/images/pages_viewArrow.svg +3 -0
  222. package/web/images/pages_viewButton.svg +3 -0
  223. package/web/images/secondaryToolbarButton-documentProperties.svg +3 -0
  224. package/web/images/secondaryToolbarButton-firstPage.svg +3 -0
  225. package/web/images/secondaryToolbarButton-handTool.svg +3 -0
  226. package/web/images/secondaryToolbarButton-lastPage.svg +3 -0
  227. package/web/images/secondaryToolbarButton-rotateCcw.svg +3 -0
  228. package/web/images/secondaryToolbarButton-rotateCw.svg +3 -0
  229. package/web/images/secondaryToolbarButton-scrollHorizontal.svg +3 -0
  230. package/web/images/secondaryToolbarButton-scrollPage.svg +3 -0
  231. package/web/images/secondaryToolbarButton-scrollVertical.svg +3 -0
  232. package/web/images/secondaryToolbarButton-scrollWrapped.svg +3 -0
  233. package/web/images/secondaryToolbarButton-selectTool.svg +3 -0
  234. package/web/images/secondaryToolbarButton-spreadEven.svg +3 -0
  235. package/web/images/secondaryToolbarButton-spreadNone.svg +3 -0
  236. package/web/images/secondaryToolbarButton-spreadOdd.svg +3 -0
  237. package/web/images/toolbarButton-bookmark.svg +3 -0
  238. package/web/images/toolbarButton-currentOutlineItem.svg +3 -0
  239. package/web/images/toolbarButton-download.svg +4 -0
  240. package/web/images/toolbarButton-editorFreeText.svg +5 -0
  241. package/web/images/toolbarButton-editorHighlight.svg +6 -0
  242. package/web/images/toolbarButton-editorInk.svg +4 -0
  243. package/web/images/toolbarButton-editorSignature.svg +6 -0
  244. package/web/images/toolbarButton-editorStamp.svg +8 -0
  245. package/web/images/toolbarButton-menuArrow.svg +3 -0
  246. package/web/images/toolbarButton-openFile.svg +3 -0
  247. package/web/images/toolbarButton-pageDown.svg +3 -0
  248. package/web/images/toolbarButton-pageUp.svg +3 -0
  249. package/web/images/toolbarButton-presentationMode.svg +3 -0
  250. package/web/images/toolbarButton-print.svg +3 -0
  251. package/web/images/toolbarButton-search.svg +3 -0
  252. package/web/images/toolbarButton-secondaryToolbarToggle.svg +3 -0
  253. package/web/images/toolbarButton-viewAttachments.svg +3 -0
  254. package/web/images/toolbarButton-viewLayers.svg +3 -0
  255. package/web/images/toolbarButton-viewOutline.svg +3 -0
  256. package/web/images/toolbarButton-viewThumbnail.svg +3 -0
  257. package/web/images/toolbarButton-viewsManagerToggle.svg +3 -0
  258. package/web/images/toolbarButton-zoomIn.svg +3 -0
  259. package/web/images/toolbarButton-zoomOut.svg +3 -0
  260. package/web/images/treeitem-collapsed.svg +1 -0
  261. package/web/images/treeitem-expanded.svg +1 -0
  262. package/web/locale/ach/viewer.ftl +200 -0
  263. package/web/locale/af/viewer.ftl +179 -0
  264. package/web/locale/an/viewer.ftl +228 -0
  265. package/web/locale/ar/viewer.ftl +595 -0
  266. package/web/locale/ast/viewer.ftl +172 -0
  267. package/web/locale/az/viewer.ftl +228 -0
  268. package/web/locale/be/viewer.ftl +652 -0
  269. package/web/locale/bg/viewer.ftl +388 -0
  270. package/web/locale/bn/viewer.ftl +218 -0
  271. package/web/locale/bo/viewer.ftl +222 -0
  272. package/web/locale/br/viewer.ftl +323 -0
  273. package/web/locale/brx/viewer.ftl +189 -0
  274. package/web/locale/bs/viewer.ftl +588 -0
  275. package/web/locale/ca/viewer.ftl +274 -0
  276. package/web/locale/cak/viewer.ftl +264 -0
  277. package/web/locale/ckb/viewer.ftl +213 -0
  278. package/web/locale/cs/viewer.ftl +656 -0
  279. package/web/locale/cy/viewer.ftl +664 -0
  280. package/web/locale/da/viewer.ftl +648 -0
  281. package/web/locale/de/viewer.ftl +648 -0
  282. package/web/locale/dsb/viewer.ftl +656 -0
  283. package/web/locale/el/viewer.ftl +648 -0
  284. package/web/locale/en-CA/viewer.ftl +648 -0
  285. package/web/locale/en-GB/viewer.ftl +648 -0
  286. package/web/locale/en-US/viewer.ftl +770 -0
  287. package/web/locale/eo/viewer.ftl +648 -0
  288. package/web/locale/es-AR/viewer.ftl +648 -0
  289. package/web/locale/es-CL/viewer.ftl +648 -0
  290. package/web/locale/es-ES/viewer.ftl +648 -0
  291. package/web/locale/es-MX/viewer.ftl +648 -0
  292. package/web/locale/et/viewer.ftl +246 -0
  293. package/web/locale/eu/viewer.ftl +652 -0
  294. package/web/locale/fa/viewer.ftl +322 -0
  295. package/web/locale/ff/viewer.ftl +222 -0
  296. package/web/locale/fi/viewer.ftl +648 -0
  297. package/web/locale/fr/viewer.ftl +644 -0
  298. package/web/locale/fur/viewer.ftl +648 -0
  299. package/web/locale/fy-NL/viewer.ftl +648 -0
  300. package/web/locale/ga-IE/viewer.ftl +180 -0
  301. package/web/locale/gd/viewer.ftl +266 -0
  302. package/web/locale/gl/viewer.ftl +591 -0
  303. package/web/locale/gn/viewer.ftl +647 -0
  304. package/web/locale/gu-IN/viewer.ftl +222 -0
  305. package/web/locale/he/viewer.ftl +648 -0
  306. package/web/locale/hi-IN/viewer.ftl +221 -0
  307. package/web/locale/hr/viewer.ftl +652 -0
  308. package/web/locale/hsb/viewer.ftl +656 -0
  309. package/web/locale/hu/viewer.ftl +648 -0
  310. package/web/locale/hy-AM/viewer.ftl +601 -0
  311. package/web/locale/hye/viewer.ftl +242 -0
  312. package/web/locale/ia/viewer.ftl +648 -0
  313. package/web/locale/id/viewer.ftl +589 -0
  314. package/web/locale/is/viewer.ftl +572 -0
  315. package/web/locale/it/viewer.ftl +648 -0
  316. package/web/locale/ja/viewer.ftl +632 -0
  317. package/web/locale/ka/viewer.ftl +648 -0
  318. package/web/locale/kab/viewer.ftl +624 -0
  319. package/web/locale/kk/viewer.ftl +648 -0
  320. package/web/locale/km/viewer.ftl +198 -0
  321. package/web/locale/kn/viewer.ftl +180 -0
  322. package/web/locale/ko/viewer.ftl +632 -0
  323. package/web/locale/lij/viewer.ftl +222 -0
  324. package/web/locale/lo/viewer.ftl +266 -0
  325. package/web/locale/locale.json +1 -0
  326. package/web/locale/lt/viewer.ftl +242 -0
  327. package/web/locale/ltg/viewer.ftl +221 -0
  328. package/web/locale/lv/viewer.ftl +222 -0
  329. package/web/locale/meh/viewer.ftl +48 -0
  330. package/web/locale/mk/viewer.ftl +183 -0
  331. package/web/locale/ml/viewer.ftl +494 -0
  332. package/web/locale/mr/viewer.ftl +210 -0
  333. package/web/locale/ms/viewer.ftl +222 -0
  334. package/web/locale/my/viewer.ftl +173 -0
  335. package/web/locale/nb-NO/viewer.ftl +648 -0
  336. package/web/locale/ne-NP/viewer.ftl +201 -0
  337. package/web/locale/nl/viewer.ftl +648 -0
  338. package/web/locale/nn-NO/viewer.ftl +648 -0
  339. package/web/locale/oc/viewer.ftl +381 -0
  340. package/web/locale/pa-IN/viewer.ftl +648 -0
  341. package/web/locale/pl/viewer.ftl +651 -0
  342. package/web/locale/pt-BR/viewer.ftl +648 -0
  343. package/web/locale/pt-PT/viewer.ftl +618 -0
  344. package/web/locale/rm/viewer.ftl +639 -0
  345. package/web/locale/ro/viewer.ftl +651 -0
  346. package/web/locale/ru/viewer.ftl +652 -0
  347. package/web/locale/sat/viewer.ftl +278 -0
  348. package/web/locale/sc/viewer.ftl +342 -0
  349. package/web/locale/scn/viewer.ftl +32 -0
  350. package/web/locale/sco/viewer.ftl +238 -0
  351. package/web/locale/si/viewer.ftl +228 -0
  352. package/web/locale/sk/viewer.ftl +656 -0
  353. package/web/locale/skr/viewer.ftl +465 -0
  354. package/web/locale/sl/viewer.ftl +656 -0
  355. package/web/locale/son/viewer.ftl +173 -0
  356. package/web/locale/sq/viewer.ftl +639 -0
  357. package/web/locale/sr/viewer.ftl +386 -0
  358. package/web/locale/sv-SE/viewer.ftl +648 -0
  359. package/web/locale/szl/viewer.ftl +228 -0
  360. package/web/locale/ta/viewer.ftl +198 -0
  361. package/web/locale/te/viewer.ftl +213 -0
  362. package/web/locale/tg/viewer.ftl +648 -0
  363. package/web/locale/th/viewer.ftl +632 -0
  364. package/web/locale/tl/viewer.ftl +228 -0
  365. package/web/locale/tr/viewer.ftl +648 -0
  366. package/web/locale/trs/viewer.ftl +163 -0
  367. package/web/locale/uk/viewer.ftl +586 -0
  368. package/web/locale/ur/viewer.ftl +222 -0
  369. package/web/locale/uz/viewer.ftl +154 -0
  370. package/web/locale/vi/viewer.ftl +632 -0
  371. package/web/locale/wo/viewer.ftl +100 -0
  372. package/web/locale/xh/viewer.ftl +179 -0
  373. package/web/locale/zh-CN/viewer.ftl +632 -0
  374. package/web/locale/zh-TW/viewer.ftl +632 -0
  375. package/web/only-register-download.js +28 -0
  376. package/web/override-pdf-viewer-application-open.js +20 -0
  377. package/web/pdf_viewer.html +854 -0
  378. package/web/pdf_viewer_view_only.html +854 -0
  379. package/web/standard_fonts/FoxitDingbats.pfb +0 -0
  380. package/web/standard_fonts/FoxitFixed.pfb +0 -0
  381. package/web/standard_fonts/FoxitFixedBold.pfb +0 -0
  382. package/web/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  383. package/web/standard_fonts/FoxitFixedItalic.pfb +0 -0
  384. package/web/standard_fonts/FoxitSerif.pfb +0 -0
  385. package/web/standard_fonts/FoxitSerifBold.pfb +0 -0
  386. package/web/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  387. package/web/standard_fonts/FoxitSerifItalic.pfb +0 -0
  388. package/web/standard_fonts/FoxitSymbol.pfb +0 -0
  389. package/web/standard_fonts/LICENSE_FOXIT +27 -0
  390. package/web/standard_fonts/LICENSE_LIBERATION +102 -0
  391. package/web/standard_fonts/LiberationSans-Bold.ttf +0 -0
  392. package/web/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  393. package/web/standard_fonts/LiberationSans-Italic.ttf +0 -0
  394. package/web/standard_fonts/LiberationSans-Regular.ttf +0 -0
  395. package/web/viewer.css +8572 -0
  396. package/web/viewer.html +1219 -0
  397. package/web/viewer.mjs +19380 -0
  398. package/web/viewer.mjs.map +1 -0
  399. package/web/wasm/LICENSE_JBIG2 +196 -0
  400. package/web/wasm/LICENSE_OPENJPEG +39 -0
  401. package/web/wasm/LICENSE_PDFJS_JBIG2 +13 -0
  402. package/web/wasm/LICENSE_PDFJS_OPENJPEG +22 -0
  403. package/web/wasm/LICENSE_PDFJS_QCMS +22 -0
  404. package/web/wasm/LICENSE_QCMS +21 -0
  405. package/web/wasm/jbig2.wasm +0 -0
  406. package/web/wasm/openjpeg.wasm +0 -0
  407. package/web/wasm/openjpeg_nowasm_fallback.js +17 -0
  408. package/web/wasm/qcms_bg.wasm +0 -0
@@ -0,0 +1,848 @@
1
+ /* Copyright 2012 Mozilla Foundation
2
+ *
3
+ * Licensed under the Apache License, Version 2.0 (the "License");
4
+ * you may not use this file except in compliance with the License.
5
+ * You may obtain a copy of the License at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software
10
+ * distributed under the License is distributed on an "AS IS" BASIS,
11
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ * See the License for the specific language governing permissions and
13
+ * limitations under the License.
14
+ */
15
+
16
+ const { OPS } = globalThis.pdfjsLib || (await import("pdfjs-lib"));
17
+
18
+ const opMap = Object.create(null);
19
+ for (const key in OPS) {
20
+ opMap[OPS[key]] = key;
21
+ }
22
+
23
+ const FontInspector = (function FontInspectorClosure() {
24
+ let fonts;
25
+ let active = false;
26
+ const fontAttribute = "data-font-name";
27
+ function removeSelection() {
28
+ const divs = document.querySelectorAll(`span[${fontAttribute}]`);
29
+ for (const div of divs) {
30
+ div.className = "";
31
+ }
32
+ }
33
+ function resetSelection() {
34
+ const divs = document.querySelectorAll(`span[${fontAttribute}]`);
35
+ for (const div of divs) {
36
+ div.className = "debuggerHideText";
37
+ }
38
+ }
39
+ function selectFont(fontName, show) {
40
+ const divs = document.querySelectorAll(
41
+ `span[${fontAttribute}=${fontName}]`
42
+ );
43
+ for (const div of divs) {
44
+ div.className = show ? "debuggerShowText" : "debuggerHideText";
45
+ }
46
+ }
47
+ function textLayerClick(e) {
48
+ if (
49
+ !e.target.dataset.fontName ||
50
+ e.target.tagName.toUpperCase() !== "SPAN"
51
+ ) {
52
+ return;
53
+ }
54
+ const fontName = e.target.dataset.fontName;
55
+ const selects = document.getElementsByTagName("input");
56
+ for (const select of selects) {
57
+ if (select.dataset.fontName !== fontName) {
58
+ continue;
59
+ }
60
+ select.checked = !select.checked;
61
+ selectFont(fontName, select.checked);
62
+ select.scrollIntoView();
63
+ }
64
+ }
65
+ return {
66
+ // Properties/functions needed by PDFBug.
67
+ id: "FontInspector",
68
+ name: "Font Inspector",
69
+ panel: null,
70
+ manager: null,
71
+ init() {
72
+ const panel = this.panel;
73
+ const tmp = document.createElement("button");
74
+ tmp.addEventListener("click", resetSelection);
75
+ tmp.textContent = "Refresh";
76
+ panel.append(tmp);
77
+
78
+ fonts = document.createElement("div");
79
+ panel.append(fonts);
80
+ },
81
+ cleanup() {
82
+ fonts.textContent = "";
83
+ },
84
+ enabled: false,
85
+ get active() {
86
+ return active;
87
+ },
88
+ set active(value) {
89
+ active = value;
90
+ if (active) {
91
+ document.body.addEventListener("click", textLayerClick, true);
92
+ resetSelection();
93
+ } else {
94
+ document.body.removeEventListener("click", textLayerClick, true);
95
+ removeSelection();
96
+ }
97
+ },
98
+ // FontInspector specific functions.
99
+ fontAdded(fontObj, url) {
100
+ function properties(obj, list) {
101
+ const moreInfo = document.createElement("table");
102
+ for (const entry of list) {
103
+ const tr = document.createElement("tr");
104
+ const td1 = document.createElement("td");
105
+ td1.textContent = entry;
106
+ tr.append(td1);
107
+ const td2 = document.createElement("td");
108
+ td2.textContent = obj[entry].toString();
109
+ tr.append(td2);
110
+ moreInfo.append(tr);
111
+ }
112
+ return moreInfo;
113
+ }
114
+
115
+ const moreInfo = fontObj.css
116
+ ? properties(fontObj, ["baseFontName"])
117
+ : properties(fontObj, ["name", "type"]);
118
+
119
+ const fontName = fontObj.loadedName;
120
+ const font = document.createElement("div");
121
+ const name = document.createElement("span");
122
+ name.textContent = fontName;
123
+ let download;
124
+ if (!fontObj.css) {
125
+ download = document.createElement("a");
126
+ if (url) {
127
+ url = /url\(['"]?([^)"']+)/.exec(url);
128
+ download.href = url[1];
129
+ } else if (fontObj.data) {
130
+ download.href = URL.createObjectURL(
131
+ new Blob([fontObj.data], { type: fontObj.mimetype })
132
+ );
133
+ }
134
+ download.textContent = "Download";
135
+ }
136
+
137
+ const logIt = document.createElement("a");
138
+ logIt.href = "";
139
+ logIt.textContent = "Log";
140
+ logIt.addEventListener("click", function (event) {
141
+ event.preventDefault();
142
+ console.log(fontObj);
143
+ });
144
+ const select = document.createElement("input");
145
+ select.setAttribute("type", "checkbox");
146
+ select.dataset.fontName = fontName;
147
+ select.addEventListener("click", function () {
148
+ selectFont(fontName, select.checked);
149
+ });
150
+ if (download) {
151
+ font.append(select, name, " ", download, " ", logIt, moreInfo);
152
+ } else {
153
+ font.append(select, name, " ", logIt, moreInfo);
154
+ }
155
+ fonts.append(font);
156
+ // Somewhat of a hack, should probably add a hook for when the text layer
157
+ // is done rendering.
158
+ setTimeout(() => {
159
+ if (this.active) {
160
+ resetSelection();
161
+ }
162
+ }, 2000);
163
+ },
164
+ };
165
+ })();
166
+
167
+ // Manages all the page steppers.
168
+ const StepperManager = (function StepperManagerClosure() {
169
+ let steppers = [];
170
+ let stepperDiv = null;
171
+ let stepperControls = null;
172
+ let stepperChooser = null;
173
+ let breakPoints = Object.create(null);
174
+ return {
175
+ // Properties/functions needed by PDFBug.
176
+ id: "Stepper",
177
+ name: "Stepper",
178
+ panel: null,
179
+ manager: null,
180
+ init() {
181
+ const self = this;
182
+ stepperControls = document.createElement("div");
183
+ stepperChooser = document.createElement("select");
184
+ stepperChooser.addEventListener("change", function (event) {
185
+ self.selectStepper(this.value);
186
+ });
187
+ stepperControls.append(stepperChooser);
188
+ stepperDiv = document.createElement("div");
189
+ this.panel.append(stepperControls, stepperDiv);
190
+ if (sessionStorage.getItem("pdfjsBreakPoints")) {
191
+ breakPoints = JSON.parse(sessionStorage.getItem("pdfjsBreakPoints"));
192
+ }
193
+ },
194
+ cleanup() {
195
+ stepperChooser.textContent = "";
196
+ stepperDiv.textContent = "";
197
+ steppers = [];
198
+ },
199
+ enabled: false,
200
+ active: false,
201
+ // Stepper specific functions.
202
+ create(pageIndex) {
203
+ const pageContainer = document.querySelector(
204
+ `#viewer div[data-page-number="${pageIndex + 1}"]`
205
+ );
206
+
207
+ const debug = document.createElement("div");
208
+ debug.id = "stepper" + pageIndex;
209
+ debug.hidden = true;
210
+ debug.className = "stepper";
211
+ stepperDiv.append(debug);
212
+ const b = document.createElement("option");
213
+ b.textContent = "Page " + (pageIndex + 1);
214
+ b.value = pageIndex;
215
+ stepperChooser.append(b);
216
+ const initBreakPoints = breakPoints[pageIndex] || [];
217
+ const stepper = new Stepper(
218
+ debug,
219
+ pageIndex,
220
+ initBreakPoints,
221
+ pageContainer
222
+ );
223
+ steppers.push(stepper);
224
+ if (steppers.length === 1) {
225
+ this.selectStepper(pageIndex, false);
226
+ }
227
+ return stepper;
228
+ },
229
+ selectStepper(pageIndex, selectPanel) {
230
+ pageIndex |= 0;
231
+ if (selectPanel) {
232
+ this.manager.selectPanel(this);
233
+ }
234
+ for (const stepper of steppers) {
235
+ stepper.panel.hidden = stepper.pageIndex !== pageIndex;
236
+ }
237
+ for (const option of stepperChooser.options) {
238
+ option.selected = (option.value | 0) === pageIndex;
239
+ }
240
+ },
241
+ saveBreakPoints(pageIndex, bps) {
242
+ breakPoints[pageIndex] = bps;
243
+ sessionStorage.setItem("pdfjsBreakPoints", JSON.stringify(breakPoints));
244
+ },
245
+ };
246
+ })();
247
+
248
+ // The stepper for each page's operatorList.
249
+ class Stepper {
250
+ // Shorter way to create element and optionally set textContent.
251
+ #c(tag, textContent) {
252
+ const d = document.createElement(tag);
253
+ if (textContent) {
254
+ d.textContent = textContent;
255
+ }
256
+ return d;
257
+ }
258
+
259
+ #simplifyArgs(args) {
260
+ if (typeof args === "string") {
261
+ const MAX_STRING_LENGTH = 75;
262
+ return args.length <= MAX_STRING_LENGTH
263
+ ? args
264
+ : args.substring(0, MAX_STRING_LENGTH) + "...";
265
+ }
266
+ if (typeof args !== "object" || args === null) {
267
+ return args;
268
+ }
269
+ if ("length" in args) {
270
+ // array
271
+ const MAX_ITEMS = 10,
272
+ simpleArgs = [];
273
+ let i, ii;
274
+ for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) {
275
+ simpleArgs.push(this.#simplifyArgs(args[i]));
276
+ }
277
+ if (i < args.length) {
278
+ simpleArgs.push("...");
279
+ }
280
+ return simpleArgs;
281
+ }
282
+ const simpleObj = {};
283
+ for (const key in args) {
284
+ simpleObj[key] = this.#simplifyArgs(args[key]);
285
+ }
286
+ return simpleObj;
287
+ }
288
+
289
+ constructor(panel, pageIndex, initialBreakPoints, pageContainer) {
290
+ this.panel = panel;
291
+ this.breakPoint = 0;
292
+ this.nextBreakPoint = null;
293
+ this.pageIndex = pageIndex;
294
+ this.breakPoints = initialBreakPoints;
295
+ this.currentIdx = -1;
296
+ this.operatorListIdx = 0;
297
+ this.indentLevel = 0;
298
+ this.operatorsGroups = null;
299
+ this.pageContainer = pageContainer;
300
+ }
301
+
302
+ init(operatorList) {
303
+ const panel = this.panel;
304
+ const content = this.#c("div", "c=continue, s=step");
305
+
306
+ const showBoxesToggle = this.#c("label", "Show bounding boxes");
307
+ const showBoxesCheckbox = this.#c("input");
308
+ showBoxesCheckbox.type = "checkbox";
309
+ showBoxesToggle.prepend(showBoxesCheckbox);
310
+ content.append(this.#c("br"), showBoxesToggle);
311
+
312
+ const table = this.#c("table");
313
+ content.append(table);
314
+ table.cellSpacing = 0;
315
+ const headerRow = this.#c("tr");
316
+ table.append(headerRow);
317
+ headerRow.append(
318
+ this.#c("th", "Break"),
319
+ this.#c("th", "Idx"),
320
+ this.#c("th", "fn"),
321
+ this.#c("th", "args")
322
+ );
323
+ panel.append(content);
324
+ this.table = table;
325
+ this.updateOperatorList(operatorList);
326
+
327
+ const hoverStyle = this.#c("style");
328
+ this.hoverStyle = hoverStyle;
329
+ content.prepend(hoverStyle);
330
+ table.addEventListener("mouseover", this.#handleStepHover.bind(this));
331
+ table.addEventListener("mouseleave", e => {
332
+ hoverStyle.innerText = "";
333
+ });
334
+
335
+ showBoxesCheckbox.addEventListener("change", () => {
336
+ if (showBoxesCheckbox.checked) {
337
+ this.pageContainer.classList.add("showDebugBoxes");
338
+ } else {
339
+ this.pageContainer.classList.remove("showDebugBoxes");
340
+ }
341
+ });
342
+ }
343
+
344
+ updateOperatorList(operatorList) {
345
+ const self = this;
346
+
347
+ function cboxOnClick() {
348
+ const x = +this.dataset.idx;
349
+ if (this.checked) {
350
+ self.breakPoints.push(x);
351
+ } else {
352
+ self.breakPoints.splice(self.breakPoints.indexOf(x), 1);
353
+ }
354
+ StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints);
355
+ }
356
+
357
+ const MAX_OPERATORS_COUNT = 15000;
358
+ if (this.operatorListIdx > MAX_OPERATORS_COUNT) {
359
+ return;
360
+ }
361
+
362
+ const chunk = document.createDocumentFragment();
363
+ const operatorsToDisplay = Math.min(
364
+ MAX_OPERATORS_COUNT,
365
+ operatorList.fnArray.length
366
+ );
367
+ for (let i = this.operatorListIdx; i < operatorsToDisplay; i++) {
368
+ const line = this.#c("tr");
369
+ line.className = "line";
370
+ line.dataset.idx = i;
371
+ chunk.append(line);
372
+ const checked = this.breakPoints.includes(i);
373
+ const args = operatorList.argsArray[i] || [];
374
+
375
+ const breakCell = this.#c("td");
376
+ const cbox = this.#c("input");
377
+ cbox.type = "checkbox";
378
+ cbox.className = "points";
379
+ cbox.checked = checked;
380
+ cbox.dataset.idx = i;
381
+ cbox.onclick = cboxOnClick;
382
+
383
+ breakCell.append(cbox);
384
+ line.append(breakCell, this.#c("td", i.toString()));
385
+ const fn = opMap[operatorList.fnArray[i]];
386
+ let decArgs = args;
387
+ if (fn === "showText") {
388
+ const glyphs = args[0];
389
+ const charCodeRow = this.#c("tr");
390
+ const fontCharRow = this.#c("tr");
391
+ const unicodeRow = this.#c("tr");
392
+ for (const glyph of glyphs) {
393
+ if (typeof glyph === "object" && glyph !== null) {
394
+ charCodeRow.append(this.#c("td", glyph.originalCharCode));
395
+ fontCharRow.append(this.#c("td", glyph.fontChar));
396
+ unicodeRow.append(this.#c("td", glyph.unicode));
397
+ } else {
398
+ // null or number
399
+ const advanceEl = this.#c("td", glyph);
400
+ advanceEl.classList.add("advance");
401
+ charCodeRow.append(advanceEl);
402
+ fontCharRow.append(this.#c("td"));
403
+ unicodeRow.append(this.#c("td"));
404
+ }
405
+ }
406
+ decArgs = this.#c("td");
407
+ const table = this.#c("table");
408
+ table.classList.add("showText");
409
+ decArgs.append(table);
410
+ table.append(charCodeRow, fontCharRow, unicodeRow);
411
+ } else if (fn === "constructPath") {
412
+ const [op, [path], minMax] = args;
413
+ decArgs = this.#c("td");
414
+ decArgs.append(JSON.stringify(this.#simplifyArgs(path)));
415
+ decArgs.append(this.#c("br"));
416
+ decArgs.append(`minMax: ${JSON.stringify(this.#simplifyArgs(minMax))}`);
417
+ decArgs.append(this.#c("br"));
418
+ decArgs.append(`→ ${opMap[op]}`);
419
+ } else if (fn === "restore" && this.indentLevel > 0) {
420
+ this.indentLevel--;
421
+ }
422
+ line.append(this.#c("td", " ".repeat(this.indentLevel * 2) + fn));
423
+ if (fn === "save") {
424
+ this.indentLevel++;
425
+ }
426
+
427
+ if (decArgs instanceof HTMLElement) {
428
+ line.append(decArgs);
429
+ } else {
430
+ line.append(this.#c("td", JSON.stringify(this.#simplifyArgs(decArgs))));
431
+ }
432
+ }
433
+ if (operatorsToDisplay < operatorList.fnArray.length) {
434
+ const lastCell = this.#c("td", "...");
435
+ lastCell.colspan = 4;
436
+ chunk.append(lastCell);
437
+ }
438
+ this.operatorListIdx = operatorList.fnArray.length;
439
+ this.table.append(chunk);
440
+ }
441
+
442
+ setOperatorBBoxes(bboxes, metadata) {
443
+ let boxesContainer = this.pageContainer.querySelector(".pdfBugGroupsLayer");
444
+ if (!boxesContainer) {
445
+ boxesContainer = this.#c("div");
446
+ boxesContainer.classList.add("pdfBugGroupsLayer");
447
+ this.pageContainer.append(boxesContainer);
448
+
449
+ boxesContainer.addEventListener(
450
+ "click",
451
+ this.#handleDebugBoxClick.bind(this)
452
+ );
453
+ boxesContainer.addEventListener(
454
+ "mouseover",
455
+ this.#handleDebugBoxHover.bind(this)
456
+ );
457
+ }
458
+ boxesContainer.innerHTML = "";
459
+
460
+ const dependents = new Map();
461
+ for (const [dependentIdx, { dependencies: ownDependencies }] of metadata) {
462
+ for (const dependencyIdx of ownDependencies) {
463
+ let ownDependents = dependents.get(dependencyIdx);
464
+ if (!ownDependents) {
465
+ dependents.set(dependencyIdx, (ownDependents = new Set()));
466
+ }
467
+ ownDependents.add(dependentIdx);
468
+ }
469
+ }
470
+
471
+ const groups = Array.from({ length: bboxes.length }, (_, i) => {
472
+ let minX = null;
473
+ let minY = null;
474
+ let maxX = null;
475
+ let maxY = null;
476
+ if (!bboxes.isEmpty(i)) {
477
+ minX = bboxes.minX(i);
478
+ minY = bboxes.minY(i);
479
+ maxX = bboxes.maxX(i);
480
+ maxY = bboxes.maxY(i);
481
+ }
482
+
483
+ return {
484
+ minX,
485
+ minY,
486
+ maxX,
487
+ maxY,
488
+ dependencies: Array.from(metadata.get(i)?.dependencies ?? []).sort(),
489
+ dependents: Array.from(dependents.get(i) ?? []).sort(),
490
+ isRenderingOperation: metadata.get(i)?.isRenderingOperation ?? false,
491
+ idx: i,
492
+ };
493
+ });
494
+ this.operatorsGroups = groups;
495
+
496
+ const operatorsGroupsByZindex = groups.toSorted((a, b) => {
497
+ if (a.minX === null) {
498
+ return b.minX === null ? 0 : 1;
499
+ }
500
+ if (b.minX === null) {
501
+ return -1;
502
+ }
503
+
504
+ const diffs = [
505
+ a.minY - b.minY,
506
+ a.minX - b.minX,
507
+ b.maxY - a.maxY,
508
+ b.maxX - a.maxX,
509
+ ];
510
+ for (const diff of diffs) {
511
+ if (Math.abs(diff) > 0.01) {
512
+ return Math.sign(diff);
513
+ }
514
+ }
515
+ for (const diff of diffs) {
516
+ if (Math.abs(diff) > 0.0001) {
517
+ return Math.sign(diff);
518
+ }
519
+ }
520
+ return 0;
521
+ });
522
+
523
+ for (let i = 0; i < operatorsGroupsByZindex.length; i++) {
524
+ const group = operatorsGroupsByZindex[i];
525
+ if (group.minX !== null) {
526
+ const el = this.#c("div");
527
+ el.style.left = `${group.minX * 100}%`;
528
+ el.style.top = `${group.minY * 100}%`;
529
+ el.style.width = `${(group.maxX - group.minX) * 100}%`;
530
+ el.style.height = `${(group.maxY - group.minY) * 100}%`;
531
+ el.dataset.idx = group.idx;
532
+ boxesContainer.append(el);
533
+ }
534
+ }
535
+ }
536
+
537
+ #handleStepHover(e) {
538
+ const tr = e.target.closest("tr");
539
+ if (!tr || tr.dataset.idx === undefined) {
540
+ return;
541
+ }
542
+
543
+ const index = +tr.dataset.idx;
544
+ this.#highlightStepsGroup(index);
545
+ }
546
+
547
+ #handleDebugBoxHover(e) {
548
+ if (e.target.dataset.idx === undefined) {
549
+ return;
550
+ }
551
+
552
+ const idx = Number(e.target.dataset.idx);
553
+ this.#highlightStepsGroup(idx);
554
+ }
555
+
556
+ #handleDebugBoxClick(e) {
557
+ if (e.target.dataset.idx === undefined) {
558
+ return;
559
+ }
560
+
561
+ const idx = Number(e.target.dataset.idx);
562
+
563
+ this.table.childNodes[idx].scrollIntoView();
564
+ }
565
+
566
+ #highlightStepsGroup(index) {
567
+ const group = this.operatorsGroups?.[index];
568
+ if (!group) {
569
+ return;
570
+ }
571
+
572
+ const renderingColor = `rgba(0, 0, 0, 0.1)`;
573
+ const dependencyColor = `rgba(0, 255, 255, 0.1)`;
574
+ const dependentColor = `rgba(255, 0, 0, 0.1)`;
575
+
576
+ const solid = color => `background-color: ${color}`;
577
+ // Used for operations that have an empty bounding box
578
+ const striped = color => `
579
+ background-image: repeating-linear-gradient(
580
+ -45deg,
581
+ white,
582
+ white 10px,
583
+ ${color} 10px,
584
+ ${color} 20px
585
+ )
586
+ `;
587
+
588
+ const select = idx => `#${this.panel.id} tr[data-idx="${idx}"]`;
589
+ const selectN = idxs =>
590
+ idxs.length === 0 ? "q:not(q)" : idxs.map(select).join(", ");
591
+
592
+ const isEmpty = idx =>
593
+ !this.operatorsGroups[idx] || this.operatorsGroups[idx].minX === null;
594
+
595
+ const selfColor = group.isRenderingOperation
596
+ ? renderingColor
597
+ : dependentColor;
598
+
599
+ this.hoverStyle.innerText = `${select(index)} {
600
+ ${group.minX === null ? striped(selfColor) : solid(selfColor)}
601
+ }`;
602
+ if (group.dependencies.length > 0) {
603
+ this.hoverStyle.innerText += `
604
+ ${selectN(group.dependencies.filter(idx => !isEmpty(idx)))} {
605
+ ${solid(dependencyColor)}
606
+ }
607
+ ${selectN(group.dependencies.filter(isEmpty))} {
608
+ ${striped(dependencyColor)}
609
+ }`;
610
+ }
611
+ if (group.dependents.length > 0) {
612
+ this.hoverStyle.innerText += `
613
+ ${selectN(group.dependents.filter(idx => !isEmpty(idx)))} {
614
+ ${solid(dependentColor)}
615
+ }
616
+ ${selectN(group.dependents.filter(isEmpty))} {
617
+ ${striped(dependentColor)}
618
+ }`;
619
+ }
620
+
621
+ this.hoverStyle.innerText += `
622
+ #viewer [data-page-number="${this.pageIndex + 1}"] .pdfBugGroupsLayer [data-idx="${index}"] {
623
+ background-color: var(--hover-background-color);
624
+ outline-style: var(--hover-outline-style);
625
+ }
626
+ `;
627
+ }
628
+
629
+ getNextBreakPoint() {
630
+ this.breakPoints.sort((a, b) => a - b);
631
+ for (const breakPoint of this.breakPoints) {
632
+ if (breakPoint > this.currentIdx) {
633
+ return breakPoint;
634
+ }
635
+ }
636
+ return null;
637
+ }
638
+
639
+ breakIt(idx, callback) {
640
+ StepperManager.selectStepper(this.pageIndex, true);
641
+ this.currentIdx = idx;
642
+
643
+ const listener = evt => {
644
+ switch (evt.keyCode) {
645
+ case 83: // step
646
+ document.removeEventListener("keydown", listener);
647
+ this.nextBreakPoint = this.currentIdx + 1;
648
+ this.goTo(-1);
649
+ callback();
650
+ break;
651
+ case 67: // continue
652
+ document.removeEventListener("keydown", listener);
653
+ this.nextBreakPoint = this.getNextBreakPoint();
654
+ this.goTo(-1);
655
+ callback();
656
+ break;
657
+ }
658
+ };
659
+ document.addEventListener("keydown", listener);
660
+ this.goTo(idx);
661
+ }
662
+
663
+ goTo(idx) {
664
+ const allRows = this.panel.getElementsByClassName("line");
665
+ for (const row of allRows) {
666
+ if ((row.dataset.idx | 0) === idx) {
667
+ row.style.backgroundColor = "rgb(251,250,207)";
668
+ row.scrollIntoView();
669
+ } else {
670
+ row.style.backgroundColor = null;
671
+ }
672
+ }
673
+ }
674
+ }
675
+
676
+ const Stats = (function Stats() {
677
+ let stats = [];
678
+ function clear(node) {
679
+ node.textContent = ""; // Remove any `node` contents from the DOM.
680
+ }
681
+ function getStatIndex(pageNumber) {
682
+ for (const [i, stat] of stats.entries()) {
683
+ if (stat.pageNumber === pageNumber) {
684
+ return i;
685
+ }
686
+ }
687
+ return false;
688
+ }
689
+ return {
690
+ // Properties/functions needed by PDFBug.
691
+ id: "Stats",
692
+ name: "Stats",
693
+ panel: null,
694
+ manager: null,
695
+ init() {},
696
+ enabled: false,
697
+ active: false,
698
+ // Stats specific functions.
699
+ add(pageNumber, stat) {
700
+ if (!stat) {
701
+ return;
702
+ }
703
+ const statsIndex = getStatIndex(pageNumber);
704
+ if (statsIndex !== false) {
705
+ stats[statsIndex].div.remove();
706
+ stats.splice(statsIndex, 1);
707
+ }
708
+ const wrapper = document.createElement("div");
709
+ wrapper.className = "stats";
710
+ const title = document.createElement("div");
711
+ title.className = "title";
712
+ title.textContent = "Page: " + pageNumber;
713
+ const statsDiv = document.createElement("div");
714
+ statsDiv.textContent = stat.toString();
715
+ wrapper.append(title, statsDiv);
716
+ stats.push({ pageNumber, div: wrapper });
717
+ stats.sort((a, b) => a.pageNumber - b.pageNumber);
718
+ clear(this.panel);
719
+ for (const entry of stats) {
720
+ this.panel.append(entry.div);
721
+ }
722
+ },
723
+ cleanup() {
724
+ stats = [];
725
+ clear(this.panel);
726
+ },
727
+ };
728
+ })();
729
+
730
+ // Manages all the debugging tools.
731
+ class PDFBug {
732
+ static #buttons = [];
733
+
734
+ static #activePanel = null;
735
+
736
+ static tools = [FontInspector, StepperManager, Stats];
737
+
738
+ static enable(ids) {
739
+ const all = ids.length === 1 && ids[0] === "all";
740
+ const tools = this.tools;
741
+ for (const tool of tools) {
742
+ if (all || ids.includes(tool.id)) {
743
+ tool.enabled = true;
744
+ }
745
+ }
746
+ if (!all) {
747
+ // Sort the tools by the order they are enabled.
748
+ tools.sort(function (a, b) {
749
+ let indexA = ids.indexOf(a.id);
750
+ indexA = indexA < 0 ? tools.length : indexA;
751
+ let indexB = ids.indexOf(b.id);
752
+ indexB = indexB < 0 ? tools.length : indexB;
753
+ return indexA - indexB;
754
+ });
755
+ }
756
+ }
757
+
758
+ static init(container, ids) {
759
+ this.loadCSS();
760
+ this.enable(ids);
761
+ /*
762
+ * Basic Layout:
763
+ * PDFBug
764
+ * Controls
765
+ * Panels
766
+ * Panel
767
+ * Panel
768
+ * ...
769
+ */
770
+ const ui = document.createElement("div");
771
+ ui.id = "PDFBug";
772
+
773
+ const controls = document.createElement("div");
774
+ controls.setAttribute("class", "controls");
775
+ ui.append(controls);
776
+
777
+ const panels = document.createElement("div");
778
+ panels.setAttribute("class", "panels");
779
+ ui.append(panels);
780
+
781
+ container.append(ui);
782
+ container.style.right = "var(--panel-width)";
783
+
784
+ // Initialize all the debugging tools.
785
+ for (const tool of this.tools) {
786
+ const panel = document.createElement("div");
787
+ const panelButton = document.createElement("button");
788
+ panelButton.textContent = tool.name;
789
+ panelButton.addEventListener("click", event => {
790
+ event.preventDefault();
791
+ this.selectPanel(tool);
792
+ });
793
+ controls.append(panelButton);
794
+ panels.append(panel);
795
+ tool.panel = panel;
796
+ tool.manager = this;
797
+ if (tool.enabled) {
798
+ tool.init();
799
+ } else {
800
+ panel.textContent =
801
+ `${tool.name} is disabled. To enable add "${tool.id}" to ` +
802
+ "the pdfBug parameter and refresh (separate multiple by commas).";
803
+ }
804
+ this.#buttons.push(panelButton);
805
+ }
806
+ this.selectPanel(0);
807
+ }
808
+
809
+ static loadCSS() {
810
+ const { url } = import.meta;
811
+
812
+ const link = document.createElement("link");
813
+ link.rel = "stylesheet";
814
+ link.href = url.replace(/\.mjs$/, ".css");
815
+
816
+ document.head.append(link);
817
+ }
818
+
819
+ static cleanup() {
820
+ for (const tool of this.tools) {
821
+ if (tool.enabled) {
822
+ tool.cleanup();
823
+ }
824
+ }
825
+ }
826
+
827
+ static selectPanel(index) {
828
+ if (typeof index !== "number") {
829
+ index = this.tools.indexOf(index);
830
+ }
831
+ if (index === this.#activePanel) {
832
+ return;
833
+ }
834
+ this.#activePanel = index;
835
+ for (const [j, tool] of this.tools.entries()) {
836
+ const isActive = j === index;
837
+ this.#buttons[j].classList.toggle("active", isActive);
838
+ tool.active = isActive;
839
+ tool.panel.hidden = !isActive;
840
+ }
841
+ }
842
+ }
843
+
844
+ globalThis.FontInspector = FontInspector;
845
+ globalThis.StepperManager = StepperManager;
846
+ globalThis.Stats = Stats;
847
+
848
+ export { PDFBug };