@linloir/limr 0.0.0-stage → 0.1.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 (421) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +197 -2
  3. package/benchmarks/results/browser.json +237 -0
  4. package/benchmarks/results/node.json +75 -0
  5. package/benchmarks/results/selection.json +172 -0
  6. package/dist/THIRD_PARTY_LICENSES.txt +117 -0
  7. package/dist/base.css +451 -0
  8. package/dist/chunk-65V5OZ4G.js +3070 -0
  9. package/dist/chunk-65V5OZ4G.js.map +1 -0
  10. package/dist/chunk-6N6TFHEN.js +83 -0
  11. package/dist/chunk-6N6TFHEN.js.map +1 -0
  12. package/dist/chunk-7JF5HHVF.js +465 -0
  13. package/dist/chunk-7JF5HHVF.js.map +1 -0
  14. package/dist/chunk-ETHLPBKQ.js +1193 -0
  15. package/dist/chunk-ETHLPBKQ.js.map +1 -0
  16. package/dist/chunk-V2OG4Y3F.js +1 -0
  17. package/dist/chunk-V2OG4Y3F.js.map +1 -0
  18. package/dist/core/index.d.ts +54 -0
  19. package/dist/core/index.js +37 -0
  20. package/dist/core/index.js.map +1 -0
  21. package/dist/engine-43u8B4yt.d.ts +172 -0
  22. package/dist/extensions/index.d.ts +130 -0
  23. package/dist/extensions/index.js +50 -0
  24. package/dist/extensions/index.js.map +1 -0
  25. package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
  26. package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
  27. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  28. package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  29. package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  30. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  31. package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  32. package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  33. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  34. package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  35. package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  36. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  37. package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  38. package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  39. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  40. package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
  41. package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
  42. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  43. package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  44. package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  45. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  46. package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
  47. package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
  48. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  49. package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
  50. package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
  51. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  52. package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  53. package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  54. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  55. package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
  56. package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
  57. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  58. package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  59. package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  60. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  61. package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  62. package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  63. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  64. package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  65. package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  66. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  67. package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
  68. package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
  69. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  70. package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
  71. package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
  72. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  73. package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
  74. package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
  75. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  76. package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
  77. package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
  78. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  79. package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
  80. package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
  81. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  82. package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  83. package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  84. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  85. package/dist/fonts/LICENSE.txt +93 -0
  86. package/dist/fonts/manifest.json +2204 -0
  87. package/dist/fonts/maple-7.9-bold-005-5530d8c1d6.woff2 +0 -0
  88. package/dist/fonts/maple-7.9-bold-00f-1179d800a7.woff2 +0 -0
  89. package/dist/fonts/maple-7.9-bold-010-9974a942b1.woff2 +0 -0
  90. package/dist/fonts/maple-7.9-bold-011-9b9230baf2.woff2 +0 -0
  91. package/dist/fonts/maple-7.9-bold-012-c2545292b1.woff2 +0 -0
  92. package/dist/fonts/maple-7.9-bold-013-877b19fe05.woff2 +0 -0
  93. package/dist/fonts/maple-7.9-bold-014-6acf4a4e92.woff2 +0 -0
  94. package/dist/fonts/maple-7.9-bold-015-c889146da3.woff2 +0 -0
  95. package/dist/fonts/maple-7.9-bold-018-419ad5f31f.woff2 +0 -0
  96. package/dist/fonts/maple-7.9-bold-027-dd414483da.woff2 +0 -0
  97. package/dist/fonts/maple-7.9-bold-028-263744fbc7.woff2 +0 -0
  98. package/dist/fonts/maple-7.9-bold-029-ae3a163d8b.woff2 +0 -0
  99. package/dist/fonts/maple-7.9-bold-02a-515f0a82c2.woff2 +0 -0
  100. package/dist/fonts/maple-7.9-bold-02b-0823c5133d.woff2 +0 -0
  101. package/dist/fonts/maple-7.9-bold-02c-296fd5db38.woff2 +0 -0
  102. package/dist/fonts/maple-7.9-bold-02d-0bb4734363.woff2 +0 -0
  103. package/dist/fonts/maple-7.9-bold-02e-25415fed50.woff2 +0 -0
  104. package/dist/fonts/maple-7.9-bold-02f-19ed79a84e.woff2 +0 -0
  105. package/dist/fonts/maple-7.9-bold-030-21962a0327.woff2 +0 -0
  106. package/dist/fonts/maple-7.9-bold-031-d216fc0d68.woff2 +0 -0
  107. package/dist/fonts/maple-7.9-bold-032-d90ba34901.woff2 +0 -0
  108. package/dist/fonts/maple-7.9-bold-033-55ea37ea00.woff2 +0 -0
  109. package/dist/fonts/maple-7.9-bold-034-bc8649f808.woff2 +0 -0
  110. package/dist/fonts/maple-7.9-bold-035-03604fe40b.woff2 +0 -0
  111. package/dist/fonts/maple-7.9-bold-036-44fc7f77b2.woff2 +0 -0
  112. package/dist/fonts/maple-7.9-bold-037-8a1440f155.woff2 +0 -0
  113. package/dist/fonts/maple-7.9-bold-038-c65a618d5c.woff2 +0 -0
  114. package/dist/fonts/maple-7.9-bold-039-be05db966d.woff2 +0 -0
  115. package/dist/fonts/maple-7.9-bold-03a-ca3a10002d.woff2 +0 -0
  116. package/dist/fonts/maple-7.9-bold-03b-067b32e10b.woff2 +0 -0
  117. package/dist/fonts/maple-7.9-bold-03c-4da4f84530.woff2 +0 -0
  118. package/dist/fonts/maple-7.9-bold-03d-f0fe6a68c8.woff2 +0 -0
  119. package/dist/fonts/maple-7.9-bold-03e-0e97f89433.woff2 +0 -0
  120. package/dist/fonts/maple-7.9-bold-03f-3289a5e3bc.woff2 +0 -0
  121. package/dist/fonts/maple-7.9-bold-040-232dcd0d7b.woff2 +0 -0
  122. package/dist/fonts/maple-7.9-bold-041-e25e9a9c41.woff2 +0 -0
  123. package/dist/fonts/maple-7.9-bold-042-d64a2b1824.woff2 +0 -0
  124. package/dist/fonts/maple-7.9-bold-043-2d01cf5e52.woff2 +0 -0
  125. package/dist/fonts/maple-7.9-bold-044-0ab808b5f1.woff2 +0 -0
  126. package/dist/fonts/maple-7.9-bold-045-e41dc814b4.woff2 +0 -0
  127. package/dist/fonts/maple-7.9-bold-046-d5fe26344d.woff2 +0 -0
  128. package/dist/fonts/maple-7.9-bold-047-f322ded671.woff2 +0 -0
  129. package/dist/fonts/maple-7.9-bold-048-0cdcf7257f.woff2 +0 -0
  130. package/dist/fonts/maple-7.9-bold-049-aa280ca08a.woff2 +0 -0
  131. package/dist/fonts/maple-7.9-bold-04a-f51ad4d92c.woff2 +0 -0
  132. package/dist/fonts/maple-7.9-bold-04b-4e8c6fa3ee.woff2 +0 -0
  133. package/dist/fonts/maple-7.9-bold-04c-9bfdf4d743.woff2 +0 -0
  134. package/dist/fonts/maple-7.9-bold-04d-83ac1f5bb3.woff2 +0 -0
  135. package/dist/fonts/maple-7.9-bold-04e-bcec89804a.woff2 +0 -0
  136. package/dist/fonts/maple-7.9-bold-04f-d31e83b6ce.woff2 +0 -0
  137. package/dist/fonts/maple-7.9-bold-070-8a3b0fdf98.woff2 +0 -0
  138. package/dist/fonts/maple-7.9-bold-071-5bee0a62c4.woff2 +0 -0
  139. package/dist/fonts/maple-7.9-bold-072-97d891eee4.woff2 +0 -0
  140. package/dist/fonts/maple-7.9-bold-073-4d4c36aca0.woff2 +0 -0
  141. package/dist/fonts/maple-7.9-bold-074-6d3cc01e90.woff2 +0 -0
  142. package/dist/fonts/maple-7.9-bold-075-eab42ad657.woff2 +0 -0
  143. package/dist/fonts/maple-7.9-bold-076-2b1f5c4a42.woff2 +0 -0
  144. package/dist/fonts/maple-7.9-bold-077-1db0d50873.woff2 +0 -0
  145. package/dist/fonts/maple-7.9-bold-078-bc6994a28f.woff2 +0 -0
  146. package/dist/fonts/maple-7.9-bold-079-ad6c1757ce.woff2 +0 -0
  147. package/dist/fonts/maple-7.9-bold-07a-d08ed2b87d.woff2 +0 -0
  148. package/dist/fonts/maple-7.9-bold-07f-2f4af46cc6.woff2 +0 -0
  149. package/dist/fonts/maple-7.9-bold-0fc-42ed90884c.woff2 +0 -0
  150. package/dist/fonts/maple-7.9-bold-780-261fac1b24.woff2 +0 -0
  151. package/dist/fonts/maple-7.9-bold-781-377319a91b.woff2 +0 -0
  152. package/dist/fonts/maple-7.9-bold-782-3106f0be62.woff2 +0 -0
  153. package/dist/fonts/maple-7.9-bold-783-74fbfa8648.woff2 +0 -0
  154. package/dist/fonts/maple-7.9-bold-784-8570270664.woff2 +0 -0
  155. package/dist/fonts/maple-7.9-bold-785-cee8de1ded.woff2 +0 -0
  156. package/dist/fonts/maple-7.9-bold-786-5ab5ff7149.woff2 +0 -0
  157. package/dist/fonts/maple-7.9-bold-787-844b4c4373.woff2 +0 -0
  158. package/dist/fonts/maple-7.9-bold-788-01731198ab.woff2 +0 -0
  159. package/dist/fonts/maple-7.9-bold-789-f4c75fa806.woff2 +0 -0
  160. package/dist/fonts/maple-7.9-bold-78a-4370321ec6.woff2 +0 -0
  161. package/dist/fonts/maple-7.9-bold-78b-5cd412b56f.woff2 +0 -0
  162. package/dist/fonts/maple-7.9-bold-78c-f88e331085.woff2 +0 -0
  163. package/dist/fonts/maple-7.9-bold-78d-1b9b77f6e8.woff2 +0 -0
  164. package/dist/fonts/maple-7.9-bold-latin-3b4b2831f3.woff2 +0 -0
  165. package/dist/fonts/maple-7.9-bolditalic-005-d59fef8639.woff2 +0 -0
  166. package/dist/fonts/maple-7.9-bolditalic-00f-1bbda7af69.woff2 +0 -0
  167. package/dist/fonts/maple-7.9-bolditalic-010-5cdd4b46a7.woff2 +0 -0
  168. package/dist/fonts/maple-7.9-bolditalic-011-0d1f1ae687.woff2 +0 -0
  169. package/dist/fonts/maple-7.9-bolditalic-012-4ceb000b2e.woff2 +0 -0
  170. package/dist/fonts/maple-7.9-bolditalic-013-ad0a4f4313.woff2 +0 -0
  171. package/dist/fonts/maple-7.9-bolditalic-014-94d54b71b3.woff2 +0 -0
  172. package/dist/fonts/maple-7.9-bolditalic-015-7aede280da.woff2 +0 -0
  173. package/dist/fonts/maple-7.9-bolditalic-018-f21221b1c2.woff2 +0 -0
  174. package/dist/fonts/maple-7.9-bolditalic-027-d23d0e80a4.woff2 +0 -0
  175. package/dist/fonts/maple-7.9-bolditalic-028-23bd6f24df.woff2 +0 -0
  176. package/dist/fonts/maple-7.9-bolditalic-029-c481c0ad50.woff2 +0 -0
  177. package/dist/fonts/maple-7.9-bolditalic-02a-1c134be68e.woff2 +0 -0
  178. package/dist/fonts/maple-7.9-bolditalic-02b-3feb29ecfd.woff2 +0 -0
  179. package/dist/fonts/maple-7.9-bolditalic-02c-de8cc5a063.woff2 +0 -0
  180. package/dist/fonts/maple-7.9-bolditalic-02d-ea25c21fad.woff2 +0 -0
  181. package/dist/fonts/maple-7.9-bolditalic-02e-e68d6bd335.woff2 +0 -0
  182. package/dist/fonts/maple-7.9-bolditalic-02f-c88d1e92dc.woff2 +0 -0
  183. package/dist/fonts/maple-7.9-bolditalic-030-f26fefe87e.woff2 +0 -0
  184. package/dist/fonts/maple-7.9-bolditalic-031-f2aa1b8e22.woff2 +0 -0
  185. package/dist/fonts/maple-7.9-bolditalic-032-c4fafc4aa6.woff2 +0 -0
  186. package/dist/fonts/maple-7.9-bolditalic-033-288a1639ca.woff2 +0 -0
  187. package/dist/fonts/maple-7.9-bolditalic-034-7c982125bc.woff2 +0 -0
  188. package/dist/fonts/maple-7.9-bolditalic-035-fd1575dea2.woff2 +0 -0
  189. package/dist/fonts/maple-7.9-bolditalic-036-f6bf406353.woff2 +0 -0
  190. package/dist/fonts/maple-7.9-bolditalic-037-8ac1466916.woff2 +0 -0
  191. package/dist/fonts/maple-7.9-bolditalic-038-e9f7fed6a6.woff2 +0 -0
  192. package/dist/fonts/maple-7.9-bolditalic-039-6f90d42310.woff2 +0 -0
  193. package/dist/fonts/maple-7.9-bolditalic-03a-30c9409a7e.woff2 +0 -0
  194. package/dist/fonts/maple-7.9-bolditalic-03b-4f1741e9e9.woff2 +0 -0
  195. package/dist/fonts/maple-7.9-bolditalic-03c-6551c74e78.woff2 +0 -0
  196. package/dist/fonts/maple-7.9-bolditalic-03d-c8e2b07106.woff2 +0 -0
  197. package/dist/fonts/maple-7.9-bolditalic-03e-c3e98613d4.woff2 +0 -0
  198. package/dist/fonts/maple-7.9-bolditalic-03f-f1c580bad4.woff2 +0 -0
  199. package/dist/fonts/maple-7.9-bolditalic-040-32e8260076.woff2 +0 -0
  200. package/dist/fonts/maple-7.9-bolditalic-041-39805a0ed7.woff2 +0 -0
  201. package/dist/fonts/maple-7.9-bolditalic-042-13b4d84cd3.woff2 +0 -0
  202. package/dist/fonts/maple-7.9-bolditalic-043-d85780d0bd.woff2 +0 -0
  203. package/dist/fonts/maple-7.9-bolditalic-044-1b5eb624d7.woff2 +0 -0
  204. package/dist/fonts/maple-7.9-bolditalic-045-ad0b4f8762.woff2 +0 -0
  205. package/dist/fonts/maple-7.9-bolditalic-046-9966021b3a.woff2 +0 -0
  206. package/dist/fonts/maple-7.9-bolditalic-047-100d4f6f4e.woff2 +0 -0
  207. package/dist/fonts/maple-7.9-bolditalic-048-a0a1e8b29c.woff2 +0 -0
  208. package/dist/fonts/maple-7.9-bolditalic-049-0806f9b3cc.woff2 +0 -0
  209. package/dist/fonts/maple-7.9-bolditalic-04a-28fdef78b3.woff2 +0 -0
  210. package/dist/fonts/maple-7.9-bolditalic-04b-6e93ef0086.woff2 +0 -0
  211. package/dist/fonts/maple-7.9-bolditalic-04c-50b8da6282.woff2 +0 -0
  212. package/dist/fonts/maple-7.9-bolditalic-04d-f93277723d.woff2 +0 -0
  213. package/dist/fonts/maple-7.9-bolditalic-04e-72e2644690.woff2 +0 -0
  214. package/dist/fonts/maple-7.9-bolditalic-04f-4f234f1802.woff2 +0 -0
  215. package/dist/fonts/maple-7.9-bolditalic-070-a3658a8a23.woff2 +0 -0
  216. package/dist/fonts/maple-7.9-bolditalic-071-4987e49732.woff2 +0 -0
  217. package/dist/fonts/maple-7.9-bolditalic-072-e587fa72cd.woff2 +0 -0
  218. package/dist/fonts/maple-7.9-bolditalic-073-2aca01fdf6.woff2 +0 -0
  219. package/dist/fonts/maple-7.9-bolditalic-074-ae89f99a60.woff2 +0 -0
  220. package/dist/fonts/maple-7.9-bolditalic-075-5a77191665.woff2 +0 -0
  221. package/dist/fonts/maple-7.9-bolditalic-076-4c54a87277.woff2 +0 -0
  222. package/dist/fonts/maple-7.9-bolditalic-077-e47dce25ee.woff2 +0 -0
  223. package/dist/fonts/maple-7.9-bolditalic-078-b0b720dab6.woff2 +0 -0
  224. package/dist/fonts/maple-7.9-bolditalic-079-316ee96f6a.woff2 +0 -0
  225. package/dist/fonts/maple-7.9-bolditalic-07a-b10ccb8107.woff2 +0 -0
  226. package/dist/fonts/maple-7.9-bolditalic-07d-5667cb3be1.woff2 +0 -0
  227. package/dist/fonts/maple-7.9-bolditalic-07f-2ac6735ff8.woff2 +0 -0
  228. package/dist/fonts/maple-7.9-bolditalic-0fc-52171ca01e.woff2 +0 -0
  229. package/dist/fonts/maple-7.9-bolditalic-780-3c090c5f89.woff2 +0 -0
  230. package/dist/fonts/maple-7.9-bolditalic-781-ca4077b4fa.woff2 +0 -0
  231. package/dist/fonts/maple-7.9-bolditalic-782-42c3d52206.woff2 +0 -0
  232. package/dist/fonts/maple-7.9-bolditalic-783-d72840dd37.woff2 +0 -0
  233. package/dist/fonts/maple-7.9-bolditalic-784-b9ca097e50.woff2 +0 -0
  234. package/dist/fonts/maple-7.9-bolditalic-785-b81dec6af9.woff2 +0 -0
  235. package/dist/fonts/maple-7.9-bolditalic-786-76c266f6f5.woff2 +0 -0
  236. package/dist/fonts/maple-7.9-bolditalic-787-403bd73766.woff2 +0 -0
  237. package/dist/fonts/maple-7.9-bolditalic-788-71a4b8c2c5.woff2 +0 -0
  238. package/dist/fonts/maple-7.9-bolditalic-789-94527f3fa4.woff2 +0 -0
  239. package/dist/fonts/maple-7.9-bolditalic-78a-81918568b8.woff2 +0 -0
  240. package/dist/fonts/maple-7.9-bolditalic-78b-d0302b4bfe.woff2 +0 -0
  241. package/dist/fonts/maple-7.9-bolditalic-78c-e864792049.woff2 +0 -0
  242. package/dist/fonts/maple-7.9-bolditalic-78d-105ff69bf4.woff2 +0 -0
  243. package/dist/fonts/maple-7.9-bolditalic-latin-96412d165b.woff2 +0 -0
  244. package/dist/fonts/maple-7.9-italic-005-23b09473f8.woff2 +0 -0
  245. package/dist/fonts/maple-7.9-italic-00f-e9bf4dd93c.woff2 +0 -0
  246. package/dist/fonts/maple-7.9-italic-010-22933d6d77.woff2 +0 -0
  247. package/dist/fonts/maple-7.9-italic-011-71b0157ddc.woff2 +0 -0
  248. package/dist/fonts/maple-7.9-italic-012-b751ab3752.woff2 +0 -0
  249. package/dist/fonts/maple-7.9-italic-013-530b1d3f8b.woff2 +0 -0
  250. package/dist/fonts/maple-7.9-italic-014-0e842f6749.woff2 +0 -0
  251. package/dist/fonts/maple-7.9-italic-015-642211b03a.woff2 +0 -0
  252. package/dist/fonts/maple-7.9-italic-018-0c5b0001c6.woff2 +0 -0
  253. package/dist/fonts/maple-7.9-italic-027-9a09afbbb1.woff2 +0 -0
  254. package/dist/fonts/maple-7.9-italic-028-93fea67326.woff2 +0 -0
  255. package/dist/fonts/maple-7.9-italic-029-7d7627d4cc.woff2 +0 -0
  256. package/dist/fonts/maple-7.9-italic-02a-88e76d051b.woff2 +0 -0
  257. package/dist/fonts/maple-7.9-italic-02b-7d9219748b.woff2 +0 -0
  258. package/dist/fonts/maple-7.9-italic-02c-049df19d84.woff2 +0 -0
  259. package/dist/fonts/maple-7.9-italic-02d-663fc73c6e.woff2 +0 -0
  260. package/dist/fonts/maple-7.9-italic-02e-a98ed33998.woff2 +0 -0
  261. package/dist/fonts/maple-7.9-italic-02f-8ef9d93d09.woff2 +0 -0
  262. package/dist/fonts/maple-7.9-italic-030-74885d994d.woff2 +0 -0
  263. package/dist/fonts/maple-7.9-italic-031-4cf66c5d65.woff2 +0 -0
  264. package/dist/fonts/maple-7.9-italic-032-a608b7aed4.woff2 +0 -0
  265. package/dist/fonts/maple-7.9-italic-033-2978f66e55.woff2 +0 -0
  266. package/dist/fonts/maple-7.9-italic-034-38f7a0bf87.woff2 +0 -0
  267. package/dist/fonts/maple-7.9-italic-035-5cc45cd3b7.woff2 +0 -0
  268. package/dist/fonts/maple-7.9-italic-036-ca92d327e5.woff2 +0 -0
  269. package/dist/fonts/maple-7.9-italic-037-f887681c7d.woff2 +0 -0
  270. package/dist/fonts/maple-7.9-italic-038-06150b88f8.woff2 +0 -0
  271. package/dist/fonts/maple-7.9-italic-039-761da333b7.woff2 +0 -0
  272. package/dist/fonts/maple-7.9-italic-03a-1408ddaf2c.woff2 +0 -0
  273. package/dist/fonts/maple-7.9-italic-03b-1542b3b67c.woff2 +0 -0
  274. package/dist/fonts/maple-7.9-italic-03c-479f2f5011.woff2 +0 -0
  275. package/dist/fonts/maple-7.9-italic-03d-0f10590b11.woff2 +0 -0
  276. package/dist/fonts/maple-7.9-italic-03e-8b93e0ee0e.woff2 +0 -0
  277. package/dist/fonts/maple-7.9-italic-03f-2bd8815e3e.woff2 +0 -0
  278. package/dist/fonts/maple-7.9-italic-040-b85023679a.woff2 +0 -0
  279. package/dist/fonts/maple-7.9-italic-041-eb881b7b92.woff2 +0 -0
  280. package/dist/fonts/maple-7.9-italic-042-01490a139e.woff2 +0 -0
  281. package/dist/fonts/maple-7.9-italic-043-ffb21b6c4c.woff2 +0 -0
  282. package/dist/fonts/maple-7.9-italic-044-05cd1a1b14.woff2 +0 -0
  283. package/dist/fonts/maple-7.9-italic-045-1270935363.woff2 +0 -0
  284. package/dist/fonts/maple-7.9-italic-046-857077eab1.woff2 +0 -0
  285. package/dist/fonts/maple-7.9-italic-047-ca57774cc3.woff2 +0 -0
  286. package/dist/fonts/maple-7.9-italic-048-20969d6307.woff2 +0 -0
  287. package/dist/fonts/maple-7.9-italic-049-4066aa1a18.woff2 +0 -0
  288. package/dist/fonts/maple-7.9-italic-04a-1ed360d580.woff2 +0 -0
  289. package/dist/fonts/maple-7.9-italic-04b-2eba62d76b.woff2 +0 -0
  290. package/dist/fonts/maple-7.9-italic-04c-2f4effc460.woff2 +0 -0
  291. package/dist/fonts/maple-7.9-italic-04d-d858c0a9c1.woff2 +0 -0
  292. package/dist/fonts/maple-7.9-italic-04e-a19eb0289f.woff2 +0 -0
  293. package/dist/fonts/maple-7.9-italic-04f-8addde15f2.woff2 +0 -0
  294. package/dist/fonts/maple-7.9-italic-070-f0bd641f1c.woff2 +0 -0
  295. package/dist/fonts/maple-7.9-italic-071-e6ac564431.woff2 +0 -0
  296. package/dist/fonts/maple-7.9-italic-072-e6fea65bca.woff2 +0 -0
  297. package/dist/fonts/maple-7.9-italic-073-71621c00dc.woff2 +0 -0
  298. package/dist/fonts/maple-7.9-italic-074-4bd488962a.woff2 +0 -0
  299. package/dist/fonts/maple-7.9-italic-075-2838d95bd6.woff2 +0 -0
  300. package/dist/fonts/maple-7.9-italic-076-94e02ecc03.woff2 +0 -0
  301. package/dist/fonts/maple-7.9-italic-077-32c536ab6b.woff2 +0 -0
  302. package/dist/fonts/maple-7.9-italic-078-18256447bd.woff2 +0 -0
  303. package/dist/fonts/maple-7.9-italic-079-7a735e61cf.woff2 +0 -0
  304. package/dist/fonts/maple-7.9-italic-07a-2b57a6a905.woff2 +0 -0
  305. package/dist/fonts/maple-7.9-italic-07d-8ba1bbfb50.woff2 +0 -0
  306. package/dist/fonts/maple-7.9-italic-07f-0240d80c69.woff2 +0 -0
  307. package/dist/fonts/maple-7.9-italic-0fc-e5b20a692e.woff2 +0 -0
  308. package/dist/fonts/maple-7.9-italic-780-093cc90a9b.woff2 +0 -0
  309. package/dist/fonts/maple-7.9-italic-781-f6ec357f6d.woff2 +0 -0
  310. package/dist/fonts/maple-7.9-italic-782-5ca2ef4ddd.woff2 +0 -0
  311. package/dist/fonts/maple-7.9-italic-783-7450baabee.woff2 +0 -0
  312. package/dist/fonts/maple-7.9-italic-784-14a93cc4bd.woff2 +0 -0
  313. package/dist/fonts/maple-7.9-italic-785-d62fb8b4d7.woff2 +0 -0
  314. package/dist/fonts/maple-7.9-italic-786-1d2959dc83.woff2 +0 -0
  315. package/dist/fonts/maple-7.9-italic-787-70ae947136.woff2 +0 -0
  316. package/dist/fonts/maple-7.9-italic-788-cf1f156ebf.woff2 +0 -0
  317. package/dist/fonts/maple-7.9-italic-789-f0b79f9680.woff2 +0 -0
  318. package/dist/fonts/maple-7.9-italic-78a-5a53fd7870.woff2 +0 -0
  319. package/dist/fonts/maple-7.9-italic-78b-40be093bfd.woff2 +0 -0
  320. package/dist/fonts/maple-7.9-italic-78c-3b11646f8e.woff2 +0 -0
  321. package/dist/fonts/maple-7.9-italic-78d-b13ed8c48b.woff2 +0 -0
  322. package/dist/fonts/maple-7.9-italic-latin-befeb2b610.woff2 +0 -0
  323. package/dist/fonts/maple-7.9-regular-005-90bff107ac.woff2 +0 -0
  324. package/dist/fonts/maple-7.9-regular-00f-001e503e53.woff2 +0 -0
  325. package/dist/fonts/maple-7.9-regular-010-374da1ebb4.woff2 +0 -0
  326. package/dist/fonts/maple-7.9-regular-011-8f91fcc9e7.woff2 +0 -0
  327. package/dist/fonts/maple-7.9-regular-012-e4ec3016ef.woff2 +0 -0
  328. package/dist/fonts/maple-7.9-regular-013-e779e13a12.woff2 +0 -0
  329. package/dist/fonts/maple-7.9-regular-014-6b833ad501.woff2 +0 -0
  330. package/dist/fonts/maple-7.9-regular-015-4e058c4c42.woff2 +0 -0
  331. package/dist/fonts/maple-7.9-regular-018-6f776bc19b.woff2 +0 -0
  332. package/dist/fonts/maple-7.9-regular-027-92c0be3439.woff2 +0 -0
  333. package/dist/fonts/maple-7.9-regular-028-154c8c3039.woff2 +0 -0
  334. package/dist/fonts/maple-7.9-regular-029-9d88470aca.woff2 +0 -0
  335. package/dist/fonts/maple-7.9-regular-02a-7a94cb26f2.woff2 +0 -0
  336. package/dist/fonts/maple-7.9-regular-02b-1725b841c2.woff2 +0 -0
  337. package/dist/fonts/maple-7.9-regular-02c-e080c435d6.woff2 +0 -0
  338. package/dist/fonts/maple-7.9-regular-02d-a6461c4708.woff2 +0 -0
  339. package/dist/fonts/maple-7.9-regular-02e-2e55d9b957.woff2 +0 -0
  340. package/dist/fonts/maple-7.9-regular-02f-858a76fa1f.woff2 +0 -0
  341. package/dist/fonts/maple-7.9-regular-030-bbbe80f8ad.woff2 +0 -0
  342. package/dist/fonts/maple-7.9-regular-031-cafc1258ad.woff2 +0 -0
  343. package/dist/fonts/maple-7.9-regular-032-0ca83ecceb.woff2 +0 -0
  344. package/dist/fonts/maple-7.9-regular-033-6cb995f2e7.woff2 +0 -0
  345. package/dist/fonts/maple-7.9-regular-034-5877222be6.woff2 +0 -0
  346. package/dist/fonts/maple-7.9-regular-035-988d8f2d26.woff2 +0 -0
  347. package/dist/fonts/maple-7.9-regular-036-e91853e3ca.woff2 +0 -0
  348. package/dist/fonts/maple-7.9-regular-037-3eed60f359.woff2 +0 -0
  349. package/dist/fonts/maple-7.9-regular-038-5681f42a4a.woff2 +0 -0
  350. package/dist/fonts/maple-7.9-regular-039-07036fe444.woff2 +0 -0
  351. package/dist/fonts/maple-7.9-regular-03a-5495eead93.woff2 +0 -0
  352. package/dist/fonts/maple-7.9-regular-03b-d07b1d6c1e.woff2 +0 -0
  353. package/dist/fonts/maple-7.9-regular-03c-6291400ee0.woff2 +0 -0
  354. package/dist/fonts/maple-7.9-regular-03d-3787a51772.woff2 +0 -0
  355. package/dist/fonts/maple-7.9-regular-03e-ce4d945844.woff2 +0 -0
  356. package/dist/fonts/maple-7.9-regular-03f-95e98b329c.woff2 +0 -0
  357. package/dist/fonts/maple-7.9-regular-040-693b769fe8.woff2 +0 -0
  358. package/dist/fonts/maple-7.9-regular-041-7b436d2c09.woff2 +0 -0
  359. package/dist/fonts/maple-7.9-regular-042-9ad884cd73.woff2 +0 -0
  360. package/dist/fonts/maple-7.9-regular-043-372231e8e2.woff2 +0 -0
  361. package/dist/fonts/maple-7.9-regular-044-9922b540b1.woff2 +0 -0
  362. package/dist/fonts/maple-7.9-regular-045-8a88a91c22.woff2 +0 -0
  363. package/dist/fonts/maple-7.9-regular-046-82859ede10.woff2 +0 -0
  364. package/dist/fonts/maple-7.9-regular-047-6532babd62.woff2 +0 -0
  365. package/dist/fonts/maple-7.9-regular-048-abfdc5d7ce.woff2 +0 -0
  366. package/dist/fonts/maple-7.9-regular-049-adb7fa9ed3.woff2 +0 -0
  367. package/dist/fonts/maple-7.9-regular-04a-f3f794b1cb.woff2 +0 -0
  368. package/dist/fonts/maple-7.9-regular-04b-715211b8dd.woff2 +0 -0
  369. package/dist/fonts/maple-7.9-regular-04c-c6f978d10d.woff2 +0 -0
  370. package/dist/fonts/maple-7.9-regular-04d-61019a1c8f.woff2 +0 -0
  371. package/dist/fonts/maple-7.9-regular-04e-806d6efe85.woff2 +0 -0
  372. package/dist/fonts/maple-7.9-regular-04f-99d19aa8db.woff2 +0 -0
  373. package/dist/fonts/maple-7.9-regular-070-e94ba9445d.woff2 +0 -0
  374. package/dist/fonts/maple-7.9-regular-071-057314b533.woff2 +0 -0
  375. package/dist/fonts/maple-7.9-regular-072-a7699beb84.woff2 +0 -0
  376. package/dist/fonts/maple-7.9-regular-073-ebe1bd9ef4.woff2 +0 -0
  377. package/dist/fonts/maple-7.9-regular-074-722db38100.woff2 +0 -0
  378. package/dist/fonts/maple-7.9-regular-075-150ff7187b.woff2 +0 -0
  379. package/dist/fonts/maple-7.9-regular-076-c14595e715.woff2 +0 -0
  380. package/dist/fonts/maple-7.9-regular-077-6c88302a32.woff2 +0 -0
  381. package/dist/fonts/maple-7.9-regular-078-549b294c78.woff2 +0 -0
  382. package/dist/fonts/maple-7.9-regular-079-5131c42759.woff2 +0 -0
  383. package/dist/fonts/maple-7.9-regular-07a-c0dad221b5.woff2 +0 -0
  384. package/dist/fonts/maple-7.9-regular-07f-5cf5ebe065.woff2 +0 -0
  385. package/dist/fonts/maple-7.9-regular-0fc-b644c0c6d9.woff2 +0 -0
  386. package/dist/fonts/maple-7.9-regular-780-c6000d472a.woff2 +0 -0
  387. package/dist/fonts/maple-7.9-regular-781-86409ab7f7.woff2 +0 -0
  388. package/dist/fonts/maple-7.9-regular-782-9cd950637c.woff2 +0 -0
  389. package/dist/fonts/maple-7.9-regular-783-105c4d02df.woff2 +0 -0
  390. package/dist/fonts/maple-7.9-regular-784-00c042af97.woff2 +0 -0
  391. package/dist/fonts/maple-7.9-regular-785-022568d0b8.woff2 +0 -0
  392. package/dist/fonts/maple-7.9-regular-786-90b6f3aef5.woff2 +0 -0
  393. package/dist/fonts/maple-7.9-regular-787-e2888596c9.woff2 +0 -0
  394. package/dist/fonts/maple-7.9-regular-788-3416e1fda3.woff2 +0 -0
  395. package/dist/fonts/maple-7.9-regular-789-9ffc917b0b.woff2 +0 -0
  396. package/dist/fonts/maple-7.9-regular-78a-4a921d07f6.woff2 +0 -0
  397. package/dist/fonts/maple-7.9-regular-78b-9d71c5327b.woff2 +0 -0
  398. package/dist/fonts/maple-7.9-regular-78c-9ec048314b.woff2 +0 -0
  399. package/dist/fonts/maple-7.9-regular-78d-46a2ebd113.woff2 +0 -0
  400. package/dist/fonts/maple-7.9-regular-latin-59c752ba1d.woff2 +0 -0
  401. package/dist/fonts/maple.css +315 -0
  402. package/dist/index.d.ts +9 -0
  403. package/dist/index.js +132 -0
  404. package/dist/index.js.map +1 -0
  405. package/dist/math-renderer-L6DOH4RX.js +21 -0
  406. package/dist/math-renderer-L6DOH4RX.js.map +1 -0
  407. package/dist/math.css +1 -0
  408. package/dist/react/index.d.ts +112 -0
  409. package/dist/react/index.js +57 -0
  410. package/dist/react/index.js.map +1 -0
  411. package/dist/styles.css +451 -0
  412. package/dist/translations-BliabrPd.d.ts +310 -0
  413. package/docs/api.md +161 -0
  414. package/docs/extensions.md +309 -0
  415. package/docs/implementation.md +79 -0
  416. package/docs/performance.md +84 -0
  417. package/docs/styles.md +103 -0
  418. package/docs/visual-upgrade.md +148 -0
  419. package/examples/assistant.tsx +52 -0
  420. package/examples/notes.tsx +73 -0
  421. package/package.json +110 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/motion.ts","../src/react/runtime.ts","../src/extensions/gfm.ts","../src/extensions/math.tsx","../src/components/CopyButton.tsx","../src/react/context.tsx","../src/extensions/code.tsx","../src/react/literal.ts","../src/extensions/annotations.tsx","../src/react/Markdown.tsx","../src/react/render.tsx","../src/react/text-binding.ts","../src/react/selection.ts","../src/react/source-geometry.ts","../src/react/selection-paint.tsx","../src/components/OverlayScrollArea.tsx","../src/components/AnnotationCard.tsx","../src/extensions/translations.tsx","../src/components/InlineMarker.tsx","../src/components/Collapse.tsx","../src/extensions/blocks.tsx","../src/extensions/define.ts","../src/components/Disclosure.tsx","../src/components/DiamondCheck.tsx","../src/extensions/video.tsx","../src/extensions/figures.tsx","../src/extensions/figure-layout.ts","../src/extensions/standard.ts","../src/components/ToolIcon.tsx","../src/extensions/selection-actions.tsx"],"sourcesContent":["const flights = new WeakMap<object, () => void>();\n\n/** Interruptible, distance-limited scroll; pointer/wheel intent always wins. */\nexport function scrollWithMotion(root: HTMLElement | Window, top: number) {\n flights.get(root)?.();\n const element = root instanceof Window ? root.document.documentElement : root;\n const start = root instanceof Window ? root.scrollY : root.scrollTop;\n const target = Math.max(0, Math.min(top, element.scrollHeight - (root instanceof Window ? root.innerHeight : root.clientHeight)));\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) { root.scrollTo({ top: target, behavior: 'instant' }); return; }\n const duration = Math.min(560, 220 + Math.abs(target - start) * .15);\n let frame = 0, begun = 0;\n const keyboard = (event: Event) => { if (['ArrowDown', 'ArrowUp', 'PageDown', 'PageUp', 'Home', 'End', ' '].includes((event as KeyboardEvent).key)) stop(); };\n const stop = () => { cancelAnimationFrame(frame); root.removeEventListener('wheel', stop); root.removeEventListener('touchstart', stop); root.removeEventListener('pointerdown', stop); root.removeEventListener('keydown', keyboard); flights.delete(root); };\n const step = (time: number) => {\n begun ||= time;\n const t = Math.min(1, (time - begun) / duration);\n root.scrollTo({ top: start + (target - start) * (1 - Math.pow(1 - t, 4)), behavior: 'instant' });\n if (t < 1) frame = requestAnimationFrame(step); else stop();\n };\n flights.set(root, stop);\n root.addEventListener('wheel', stop, { passive: true }); root.addEventListener('touchstart', stop, { passive: true }); root.addEventListener('pointerdown', stop, { passive: true });\n root.addEventListener('keydown', keyboard);\n frame = requestAnimationFrame(step);\n}\n","import { createDocument, defaultHighlight, resolveAnnotationAnchors, sameRange, ResourceCache, selectionFromRange } from '../core';\nimport { intersects } from '../core/tree';\nimport type { Annotation, AnnotationOccurrence, DocumentEngine, DocumentSnapshot, HighlightData, SelectionSnapshot, SourceRange } from '../core';\nimport type { AnnotationType, DocumentCommands, LiMRLocale, NodeRenderer, RendererExtension, ViewConfiguration } from './types';\nimport { scrollWithMotion } from './motion';\n\nexport const english: LiMRLocale = {\n contents: 'Contents', annotations: 'Annotations', expand: 'Expand', collapse: 'Collapse', close: 'Close', copy: 'Copy', copied: 'Copied',\n copyFailed: 'Copy failed', copyImage: 'Copy image URL', copyFigures: 'Copy figures Markdown',\n loading: 'Loading…', retry: 'Retry', unavailable: 'Content unavailable', footnotes: 'Footnotes',\n definition: 'Definition', question: 'Question', note: 'Note', extra: 'Extended reading', hint: 'Hint', answer: 'Answer', submit: 'Submit',\n correct: 'Correct', incorrect: 'Try again', play: 'Play video',\n highlight: 'Highlight', addHighlight: 'Add highlight', editHighlight: 'Edit highlight', highlightColor: 'Color', highlightStyle: 'Style',\n highlightBackground: 'Background', highlightUnderline: 'Underline', highlightDotted: 'Dotted', highlightWavy: 'Wavy',\n hideHighlight: 'Hide highlight', showHighlight: 'Show highlight',\n deleteAnnotations: 'Delete', deleteAnnotationsHint: 'Deletes {count} annotations on this text and any highlight.',\n};\nexport const chinese: LiMRLocale = {\n contents: '目录', annotations: '注释', expand: '展开', collapse: '收起', close: '关闭', copy: '复制', copied: '已复制',\n copyFailed: '复制失败', copyImage: '复制图片 URL', copyFigures: '复制图组 Markdown',\n loading: '加载中…', retry: '重试', unavailable: '暂无内容', footnotes: '脚注',\n definition: '释义', question: '提问', note: '注释', extra: '拓展阅读', hint: '提示', answer: '答案', submit: '提交',\n correct: '回答正确', incorrect: '再试一次', play: '播放视频',\n highlight: '高亮', addHighlight: '添加高亮', editHighlight: '调整高亮', highlightColor: '颜色', highlightStyle: '样式',\n highlightBackground: '底色', highlightUnderline: '下划线', highlightDotted: '点线', highlightWavy: '波浪线',\n hideHighlight: '隐藏高亮', showHighlight: '显示高亮',\n deleteAnnotations: '删除', deleteAnnotationsHint: '将删除这段文字关联的 {count} 个注释及高亮。',\n};\n\nexport class Store<T> {\n private listeners = new Set<() => void>();\n constructor(private value: T) {}\n get = () => this.value;\n subscribe = (listener: () => void) => { this.listeners.add(listener); return () => this.listeners.delete(listener); };\n set(value: T) { if (Object.is(this.value, value)) return; this.value = value; for (const listener of this.listeners) listener(); }\n}\nexport interface InteractionState {\n selection: SelectionSnapshot | null;\n activeHeading: string | null;\n hovered: string | null;\n active: string | null;\n editing: string | null;\n activeHighlight: string | null;\n hoveredHighlight: string | null;\n hoverSource?: 'marker' | 'sidebar' | null;\n activeSource?: 'marker' | 'sidebar' | null;\n}\nexport interface PaintHighlight extends HighlightData { id: string; annotationId: string; range: SourceRange }\nexport interface Decorations {\n annotations: ReadonlyMap<string, Annotation>;\n highlights: ReadonlyMap<string, PaintHighlight>;\n occurrences: readonly AnnotationOccurrence[];\n byBlock: ReadonlyMap<string, BlockDecorations>;\n}\nexport interface BlockDecorations { occurrences: readonly AnnotationOccurrence[]; highlights: readonly PaintHighlight[] }\nexport interface SourceBinding {\n range: SourceRange;\n atomic: boolean;\n /** Source interval for a DOM text boundary (UTF-16). */\n resolve?: (offset: number, edge: 'start' | 'end') => number;\n exact?: boolean;\n}\n\nconst EMPTY: readonly never[] = Object.freeze([]);\nexport const emptyDecorations: BlockDecorations = Object.freeze({ occurrences: EMPTY, highlights: EMPTY });\nexport class ReaderRuntime {\n readonly document: DocumentEngine;\n readonly interaction = new Store<InteractionState>({ selection: null, activeHeading: null, hovered: null, active: null, editing: null, activeHighlight: null, hoveredHighlight: null });\n readonly layout = new Store(0);\n readonly viewport = new Store(0);\n readonly documentOffset = new Store(0);\n readonly decorations = new Store<Decorations>({ annotations: new Map(), highlights: new Map(), occurrences: [], byBlock: new Map() });\n readonly configuration: Store<ViewConfiguration>;\n readonly resources = new ResourceCache<unknown>(128);\n readonly resourceVersions = new Store<ReadonlyMap<string, number>>(new Map());\n private resourceKeys = new Map<string, { annotation: Annotation; key: string }>();\n private nextResource = 0;\n readonly anchors = new Map<string, HTMLElement>();\n readonly blocks = new Map<string, HTMLElement>();\n readonly headings = new Map<string, HTMLElement>();\n readonly bindings = new WeakMap<Node, SourceBinding>();\n readonly textBinders = new WeakMap<HTMLElement, () => void>();\n components: Readonly<Record<string, NodeRenderer>> = {};\n annotationTypes = new Map<string, AnnotationType>();\n locale = english;\n content: HTMLElement | null = null;\n selectionRange: Range | null = null;\n /** Live geometry supplied by the paint layer; independent of native selection. */\n highlightReference: { getBoundingClientRect: () => DOMRect; getClientRects: () => DOMRect[]; text?: string } | null = null;\n private layoutFrame = 0;\n private observer: ResizeObserver | null = null;\n private headingPositions: { id: string; top: number }[] = [];\n private localAnnotations: readonly Annotation[] = [];\n private pendingOpen: string | null = null;\n private pendingAnnotations?: { input: readonly Annotation[]; value: readonly Annotation[] };\n private taskController = new AbortController();\n get signal() { return this.taskController.signal; }\n readonly commands: DocumentCommands = {\n addAnnotation: (annotation, options = {}) => {\n this.changeAnnotations(items => {\n const next = [...items.filter(item => item.id !== annotation.id), annotation];\n if (annotation.type !== 'highlight' && options.highlight !== false) {\n const doc = this.document.getSnapshot();\n for (const anchor of resolveAnnotationAnchors(annotation, doc)) {\n if (anchor.range.start === anchor.range.end || next.some(item => item.type === 'highlight' && resolveAnnotationAnchors(item, doc).some(other => sameRange(other.range, anchor.range)))) continue;\n next.push({ id: `highlight-${crypto.randomUUID()}`, type: 'highlight', anchors: [{ ...anchor, id: undefined }], data: { ...defaultHighlight, ...options.highlight } });\n }\n }\n return next;\n });\n if (options.edit) this.commands.editAnnotation(annotation.id);\n },\n updateAnnotation: (id, update) => this.changeAnnotations(items => items.map(item => item.id === id ? { ...item, ...update, id } : item)),\n removeAnnotation: id => this.changeAnnotations(items => items.filter(item => item.id !== id)),\n removeAnnotationsAt: ranges => this.changeAnnotations(items => items.flatMap(item => {\n const anchors = item.anchors ?? (item.range ? [{ range: item.range }] : []);\n const keep = anchors.filter(anchor => !resolveAnnotationAnchors({ ...item, range: undefined, anchors: [anchor] }, this.document.getSnapshot()).some(resolved => ranges.some(range => sameRange(range, resolved.range))));\n if (keep.length === anchors.length) return [item];\n return keep.length ? [{ ...item, range: undefined, anchors: keep }] : [];\n })),\n editAnnotation: id => {\n this.updateInteraction({ editing: id });\n if (id) this.commands.activateAnnotation(id);\n },\n activateAnnotation: id => {\n const occurrence = this.decorations.get().occurrences.find(item => item.id === id || item.annotationIds.includes(id ?? ''));\n this.pendingOpen = id && !occurrence ? id : null;\n this.activate(occurrence?.id ?? null);\n },\n };\n private changeAnnotations(update: (items: readonly Annotation[]) => readonly Annotation[]) {\n const config = this.configuration.get();\n const current = this.pendingAnnotations && this.pendingAnnotations.input === config.annotations ? this.pendingAnnotations.value : config.annotations ?? this.localAnnotations;\n const next = update(current);\n if (config.annotations !== undefined && !config.onAnnotationsChange) throw new Error('Controlled annotations require onAnnotationsChange to accept edits.');\n if (config.annotations === undefined) { this.localAnnotations = next; this.rebuildDecorations(); }\n else this.pendingAnnotations = { input: config.annotations, value: next };\n config.onAnnotationsChange?.(next);\n }\n start() { if (this.taskController.signal.aborted) this.taskController = new AbortController(); }\n dispose() { this.taskController.abort(); this.resources.invalidate(); this.resourceKeys.clear(); }\n getResourceKey(annotation: Annotation) {\n const old = this.resourceKeys.get(annotation.id);\n if (old?.annotation === annotation) return old.key;\n if (old) this.resources.invalidate(old.key);\n const key = `${annotation.id}:${++this.nextResource}`;\n this.resourceKeys.set(annotation.id, { annotation, key });\n return key;\n }\n invalidateAnnotation(id: string) {\n const current = this.resourceKeys.get(id);\n if (current) this.resources.invalidate(current.key);\n const versions = new Map(this.resourceVersions.get());\n versions.set(id, (versions.get(id) ?? 0) + 1);\n this.resourceVersions.set(versions);\n }\n\n constructor(id: string, source: string, streaming: boolean, config: ViewConfiguration) {\n this.configuration = new Store(config);\n this.installConfiguration(config);\n this.document = createDocument(source, { id, streaming, extensions: config.extensions });\n this.rebuildDecorations();\n this.document.subscribe(() => {\n this.rebuildDecorations();\n const selection = this.interaction.get().selection;\n if (selection && selection.raw.ranges.length === 1) {\n const doc = this.document.getSnapshot(), range = selection.raw.ranges[0];\n this.updateInteraction({ selection: doc.source.slice(range.start, range.end) === selection.raw.sourceText ? selectionFromRange(doc, range, { text: selection.text, quality: selection.quality, settled: selection.settled }) : null });\n }\n this.requestLayout();\n this.configuration.get().onDocumentChange?.(this.document.getSnapshot());\n });\n }\n private installConfiguration(config: ViewConfiguration) {\n this.components = Object.assign({}, ...(config.extensions ?? []).map(ext => ext.components), config.components);\n const annotationTypes = [...(config.extensions ?? []).flatMap(ext => [...ext.annotationTypes ?? []]), ...config.annotationTypes ?? []];\n this.annotationTypes = new Map(annotationTypes.map(type => [type.type, type]));\n this.locale = { ...english, ...config.locale };\n }\n configure(config: ViewConfiguration) {\n const old = this.configuration.get();\n if (this.pendingAnnotations?.input !== config.annotations) this.pendingAnnotations = undefined;\n this.installConfiguration(config);\n this.configuration.set(config);\n if (old.extensions !== config.extensions) this.document.setExtensions(config.extensions ?? []);\n if (old.annotations !== config.annotations) this.rebuildDecorations();\n if (old.annotationTypes !== config.annotationTypes || old.extensions !== config.extensions) this.resources.invalidate();\n }\n updateInteraction(patch: Partial<InteractionState>) {\n const old = this.interaction.get();\n if (Object.keys(patch).every(key => Object.is(old[key as keyof InteractionState], patch[key as keyof InteractionState]))) return;\n this.interaction.set({ ...old, ...patch });\n if ('selection' in patch) this.configuration.get().onSelectionChange?.(patch.selection ?? null);\n }\n hover(id: string | null, source: 'marker' | 'sidebar' = 'marker') {\n this.updateInteraction({ hovered: id, hoverSource: id ? source : null });\n this.configuration.get().onAnnotationHover?.(this.decorations.get().occurrences.find(item => item.id === id) ?? null);\n }\n activate(id: string | null, source: 'marker' | 'sidebar' = 'marker') {\n this.updateInteraction({ active: id, activeSource: id ? source : null, hovered: null, hoverSource: null });\n const occurrence = this.decorations.get().occurrences.find(item => item.id === id);\n if (occurrence) this.configuration.get().onAnnotationClick?.(occurrence);\n }\n hoverHighlight(id: string | null) {\n if (this.interaction.get().hoveredHighlight === id) return;\n this.updateInteraction({ hoveredHighlight: id });\n this.configuration.get().onHighlightHover?.(id ? this.decorations.get().annotations.get(this.decorations.get().highlights.get(id)?.annotationId ?? '') as Annotation<HighlightData> ?? null : null);\n }\n activateHighlight(id: string | null) {\n this.updateInteraction({ activeHighlight: id, selection: null });\n const highlight = id && this.decorations.get().highlights.get(id);\n if (highlight) this.configuration.get().onHighlightClick?.(this.decorations.get().annotations.get(highlight.annotationId) as Annotation<HighlightData>);\n else this.highlightReference = null;\n }\n clearSelection() {\n this.selectionRange = null;\n const selection = typeof window === 'undefined' ? null : window.getSelection();\n if (selection?.anchorNode && this.content?.contains(selection.anchorNode)) selection.removeAllRanges();\n this.highlightReference = null;\n this.updateInteraction({ selection: null, activeHighlight: null });\n }\n prepareTextBindings(element: Element) {\n const block = element.closest<HTMLElement>('[data-limr-block]');\n const bind = block && this.textBinders.get(block);\n if (bind) { this.textBinders.delete(block!); bind(); }\n }\n private rebuildDecorations() {\n const doc = this.document.getSnapshot();\n const config = this.configuration.get();\n const previous = this.decorations.get();\n const annotations = new Map(doc.annotations.map(annotation => [annotation.id, annotation]));\n for (const annotation of config.annotations ?? this.localAnnotations) annotations.set(annotation.id, annotation);\n for (const [id, resource] of this.resourceKeys) if (!annotations.has(id)) {\n this.resources.invalidate(resource.key); this.resourceKeys.delete(id);\n }\n const versions = this.resourceVersions.get();\n if ([...versions.keys()].some(id => !annotations.has(id))) this.resourceVersions.set(new Map([...versions].filter(([id]) => annotations.has(id))));\n const occurrences: AnnotationOccurrence[] = [...doc.occurrences];\n const allHighlights: PaintHighlight[] = [];\n for (const annotation of config.annotations ?? this.localAnnotations) {\n resolveAnnotationAnchors(annotation, doc).forEach((anchor, index) => {\n if (annotation.type === 'highlight') {\n const id = index ? `${annotation.id}:${index}` : annotation.id;\n const value = { ...(annotation.data as HighlightData), id, annotationId: annotation.id, range: anchor.range };\n const old = previous.highlights.get(id);\n allHighlights.push(old && sameRange(old.range, value.range) && old.color === value.color && old.style === value.style && old.hidden === value.hidden ? old : value);\n } else occurrences.push({ ...anchor, id: anchor.id ?? `${doc.id}-${annotation.id}-${index}`, annotationIds: [annotation.id] });\n });\n }\n occurrences.sort((a, b) => a.range.end - b.range.end || a.id.localeCompare(b.id));\n const byBlock = new Map<string, BlockDecorations>();\n for (const block of occurrences.length || allHighlights.length ? doc.blocks : []) {\n const marks = occurrences.filter(item => !item.embedded && item.range.end > block.range.start && item.range.end <= block.range.end);\n const before = previous.byBlock.get(block.id) ?? emptyDecorations;\n const old = before.occurrences;\n const same = old && old.length === marks.length && old.every((item, index) => item.id === marks[index].id && item.range.start === marks[index].range.start && item.range.end === marks[index].range.end && item.annotationIds.join('\\0') === marks[index].annotationIds.join('\\0'));\n const highlights = allHighlights.filter(item => intersects(item.range, block.range));\n const oldHighlights = before.highlights;\n const sameHighlights = oldHighlights.length === highlights.length && oldHighlights.every((item, i) => item === highlights[i]);\n if (marks.length || highlights.length) byBlock.set(block.id, same && sameHighlights ? before : { occurrences: same ? old : marks, highlights: sameHighlights ? oldHighlights : highlights });\n }\n const sameBlocks = byBlock.size === previous.byBlock.size && [...byBlock].every(([id, value]) => previous.byBlock.get(id) === value);\n const highlights = new Map(allHighlights.map(item => [item.id, item]));\n this.decorations.set({ annotations, highlights, occurrences, byBlock: sameBlocks ? previous.byBlock : byBlock });\n const state = this.interaction.get();\n if (state.editing && !annotations.has(state.editing) && this.pendingOpen !== state.editing) this.updateInteraction({ editing: null });\n if (state.activeHighlight && !highlights.has(state.activeHighlight)) this.activateHighlight(null);\n if (state.hoveredHighlight && !highlights.has(state.hoveredHighlight)) this.hoverHighlight(null);\n if (state.active && !occurrences.some(item => item.id === state.active)) this.activate(null);\n if (state.hovered && !occurrences.some(item => item.id === state.hovered)) this.hover(null);\n if (this.pendingOpen) {\n const occurrence = occurrences.find(item => item.id === this.pendingOpen || item.annotationIds.includes(this.pendingOpen!));\n if (occurrence) { this.pendingOpen = null; this.activate(occurrence.id); }\n }\n }\n registerAnchor(id: string, element: HTMLElement | null) { if (element) this.anchors.set(id, element); else this.anchors.delete(id); this.requestLayout(); }\n registerHeading(id: string, element: HTMLElement | null) { if (element) this.headings.set(id, element); else this.headings.delete(id); this.requestLayout(); }\n observeBlock(element: HTMLElement | null) { if (element) { if (element.dataset.limrBlock) this.blocks.set(element.dataset.limrBlock, element); this.observer?.observe(element); } }\n unobserveBlock(element: HTMLElement) { if (element.dataset.limrBlock) this.blocks.delete(element.dataset.limrBlock); this.observer?.unobserve(element); }\n getScrollTop() { return this.configuration.get().scrollRoot?.scrollTop ?? (typeof window !== 'undefined' ? window.scrollY : 0); }\n getViewportTop() { return this.configuration.get().scrollRoot?.getBoundingClientRect().top ?? 0; }\n getContentOffset() {\n // Read the interpolated value during motion, not the destination offset.\n const translate = this.content && getComputedStyle(this.content).translate;\n return translate ? parseFloat(translate.split(' ')[1] ?? '0') || 0 : 0;\n }\n scrollTo(top: number, behavior: ScrollBehavior = 'smooth') {\n const root = this.configuration.get().scrollRoot ?? window;\n if (behavior === 'smooth') scrollWithMotion(root, top);\n else root.scrollTo({ top: Math.max(0, top), behavior });\n }\n scrollToHeading(id: string) {\n const element = this.headings.get(id);\n if (element) this.scrollTo(element.getBoundingClientRect().top - this.getViewportTop() + this.getScrollTop() - (this.configuration.get().scrollOffset ?? 24));\n }\n scrollToOccurrence(id: string) {\n const element = this.anchors.get(id);\n if (element) this.scrollTo(element.getBoundingClientRect().top - this.getViewportTop() + this.getScrollTop() - (this.configuration.get().scrollOffset ?? 24));\n }\n private followFragment = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n const link = event.target instanceof Element ? event.target.closest<HTMLAnchorElement>('a[href]') : null;\n if (!link || link.hasAttribute('download') || link.target && link.target !== '_self' || !this.content?.contains(link)) return;\n const url = new URL(link.href, document.baseURI);\n if (!url.hash || url.origin !== location.origin || url.pathname !== location.pathname || url.search !== location.search) return;\n let id: string;\n try { id = decodeURIComponent(url.hash.slice(1)); } catch { return; }\n const target = this.content.querySelector<HTMLElement>(`[id=\"${CSS.escape(id)}\"]`);\n if (!target) return;\n event.preventDefault();\n this.scrollTo(target.getBoundingClientRect().top - this.getViewportTop() + this.getScrollTop() - (this.configuration.get().scrollOffset ?? 24));\n // Keyboard navigation retains a meaningful destination without a second jump.\n if (event.detail === 0) {\n if (!target.hasAttribute('tabindex')) { target.tabIndex = -1; target.addEventListener('blur', () => target.removeAttribute('tabindex'), { once: true }); }\n target.focus({ preventScroll: true });\n }\n };\n requestLayout = () => {\n if (typeof window === 'undefined' || !this.content || this.layoutFrame) return;\n this.layoutFrame = window.requestAnimationFrame(() => {\n this.layoutFrame = 0;\n const offset = this.getScrollTop() - this.getViewportTop();\n this.headingPositions = [...this.headings].filter(([, element]) => !element.closest('[inert]')).map(([id, element]) => ({ id, top: element.getBoundingClientRect().top + offset })).sort((a, b) => a.top - b.top);\n const state = this.interaction.get();\n if (state.active && this.anchors.get(state.active)?.closest('[inert]')) this.activate(null);\n if (state.hovered && this.anchors.get(state.hovered)?.closest('[inert]')) this.hover(null);\n this.layout.set(this.layout.get() + 1);\n this.trackHeading();\n });\n };\n private trackHeading = () => {\n const positions = this.headingPositions;\n const top = this.getScrollTop() + (this.configuration.get().scrollOffset ?? 24) + 2;\n let lo = 0, hi = positions.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (positions[mid].top <= top) lo = mid + 1; else hi = mid; }\n const root = this.configuration.get().scrollRoot;\n const maximum = (root?.scrollHeight ?? document.documentElement.scrollHeight) - (root?.clientHeight ?? window.innerHeight);\n const atEnd = maximum > 0 && this.getScrollTop() >= maximum - 2;\n this.updateInteraction({ activeHeading: positions[atEnd ? positions.length - 1 : Math.max(0, lo - 1)]?.id ?? null });\n };\n mountContent(element: HTMLElement): () => void {\n this.content = element;\n this.observer = new ResizeObserver(this.requestLayout);\n this.observer.observe(element);\n element.querySelectorAll<HTMLElement>('[data-limr-block]').forEach(block => this.observer!.observe(block));\n let frame = 0;\n const scroll = () => {\n if (frame) return;\n frame = requestAnimationFrame(() => { frame = 0; this.trackHeading(); this.viewport.set(this.viewport.get() + 1); });\n };\n const scrollRoot = this.configuration.get().scrollRoot ?? window;\n scrollRoot.addEventListener('scroll', scroll, { passive: true });\n window.addEventListener('resize', this.requestLayout);\n document.fonts?.addEventListener('loadingdone', this.requestLayout);\n element.addEventListener('load', this.requestLayout, true);\n element.addEventListener('click', this.followFragment);\n this.requestLayout();\n return () => {\n this.content = null; this.observer?.disconnect(); this.observer = null;\n cancelAnimationFrame(frame); cancelAnimationFrame(this.layoutFrame); this.layoutFrame = 0;\n scrollRoot.removeEventListener('scroll', scroll); window.removeEventListener('resize', this.requestLayout);\n document.fonts?.removeEventListener('loadingdone', this.requestLayout); element.removeEventListener('load', this.requestLayout, true);\n element.removeEventListener('click', this.followFragment);\n };\n }\n}\n\nexport const emptyList = EMPTY;\n","import { gfm as syntax } from 'micromark-extension-gfm';\nimport { gfmFromMarkdown } from 'mdast-util-gfm';\nimport type { RendererExtension } from '../react/types';\n\nexport function gfm(): RendererExtension { return { name: 'gfm', micromark: [syntax()], mdast: gfmFromMarkdown(), scope: 'local' }; }\n","import { lazy, Suspense, type ComponentType } from 'react';\nimport { math as syntax } from 'micromark-extension-math';\nimport { mathFromMarkdown } from 'mdast-util-math';\nimport type { KatexOptions } from 'katex';\nimport type { NodeRendererProps, RendererExtension } from '../react/types';\nimport { CopyButton } from '../components/CopyButton';\n\nlet loaded: ComponentType<{ value: string; display: boolean; options: MathOptions }> | undefined;\nlet loading: Promise<typeof import('./math-renderer')> | undefined;\nconst load = () => loading ??= import('./math-renderer').then(module => { loaded = module.default; return module; });\nconst MathContent = lazy(load);\n/** Optional: await before synchronous server rendering to include formula HTML. */\nexport async function preloadMath(): Promise<void> { await load(); }\nexport interface MathOptions { macros?: Record<string, string>; strict?: KatexOptions['strict'] }\n\nexport function math(options: MathOptions = {}): RendererExtension {\n function MathNode({ node }: NodeRendererProps) {\n const display = node.type === 'math';\n const fallback = <code className=\"limr-math-source\">{node.value}</code>;\n const Renderer = loaded ?? MathContent;\n const content = <Suspense fallback={fallback}><Renderer value={node.value ?? ''} display={display} options={options} /></Suspense>;\n return display ? <div className=\"limr-math-block\">{content}<CopyButton className=\"limr-math-copy\" variant=\"glass\" label=\"Copy LaTeX\" value={`$$\\n${node.value ?? ''}\\n$$`} /></div> : content;\n }\n return { name: 'math', micromark: [syntax()], mdast: [mathFromMarkdown()], scope: 'local', components: { math: MathNode, inlineMath: MathNode } };\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { useLocale } from '../react/context';\n\n/** Shared skin primitive; glyphs are original SVG, independent of an icon font. */\nexport function CopyButton({ value = '', onCopy, label, variant = 'plain', className = '' }: { value?: string; onCopy?: () => Promise<void>; label?: string; variant?: 'plain' | 'glass'; className?: string }) {\n const locale = useLocale();\n const [status, setStatus] = useState<'idle' | 'copied' | 'error'>('idle');\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const mounted = useRef(true);\n const title = status === 'copied' ? locale.copied : status === 'error' ? locale.copyFailed : label ?? locale.copy;\n useEffect(() => { mounted.current = true; return () => { mounted.current = false; clearTimeout(timer.current); }; }, []);\n const copy = async () => {\n try {\n if (onCopy) await onCopy(); else await navigator.clipboard.writeText(value);\n if (!mounted.current) return;\n setStatus('copied');\n } catch { if (!mounted.current) return; setStatus('error'); }\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setStatus('idle'), 2200);\n };\n return <button type=\"button\" className={`limr-copy-button ${className}`} data-variant={variant} data-status={status} data-limr-ignore=\"true\"\n aria-label={title} title={title} onClick={copy}>\n <svg className=\"limr-copy-glyph\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <g className=\"limr-copy-sheets\"><rect x=\"8.5\" y=\"8\" width=\"10.5\" height=\"12\" rx=\"3\" /><path d=\"M15.5 8V6.8A2.8 2.8 0 0 0 12.7 4H7A3 3 0 0 0 4 7v6a3 3 0 0 0 3 3h1.5\" /></g>\n <path className=\"limr-copy-check\" d=\"m5.5 12 4.2 4.2 8.8-9\" pathLength=\"1\" />\n </svg>\n <span className={status === 'error' ? 'limr-copy-error' : 'limr-sr-only'} role=\"status\">{status === 'copied' ? locale.copied : status === 'error' ? locale.copyFailed : ''}</span>\n </button>;\n}\n","import { createContext, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore, type ReactNode } from 'react';\nimport type { Annotation, AnnotationOccurrence, DocumentEngine, DocumentSnapshot, SelectionSnapshot } from '../core';\nimport { ReaderRuntime, type Store, type InteractionState } from './runtime';\nimport type { RendererExtension, RendererParameters, ViewConfiguration } from './types';\nimport { standard } from '../extensions/standard';\n\nlet defaults: readonly RendererExtension[] | undefined;\nexport const RuntimeContext = createContext<ReaderRuntime | null>(null);\nexport const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport interface DocumentProviderProps extends ViewConfiguration {\n source?: string;\n streaming?: boolean;\n documentId?: string;\n children: ReactNode;\n}\n\nexport function DocumentProvider({ children, source = '', streaming = false, documentId, ...options }: DocumentProviderProps) {\n const generatedId = useId();\n const extensions = useMemo(() => {\n const base = options.extensions ?? (defaults ??= standard());\n return options.plugins?.length ? [...base, ...options.plugins] : base;\n }, [options.extensions, options.plugins]);\n const config: ViewConfiguration = { ...options, extensions };\n const [runtime] = useState(() => new ReaderRuntime(documentId ?? `limr-${generatedId.replace(/[^a-z\\d_-]/gi, '')}`, source, streaming, config));\n const previous = useRef({ source, streaming, config });\n useIsomorphicLayoutEffect(() => {\n const old = previous.current;\n const changed = Object.keys({ ...old.config, ...config }).some(key => old.config[key as keyof ViewConfiguration] !== config[key as keyof ViewConfiguration]);\n if (changed) runtime.configure(config);\n if (old.source !== source || old.streaming !== streaming) runtime.document.update(source, { streaming });\n previous.current = { source, streaming, config };\n });\n useEffect(() => { runtime.start(); return () => runtime.dispose(); }, [runtime]);\n return <RuntimeContext.Provider value={runtime}>{children}</RuntimeContext.Provider>;\n}\n\nexport function useRuntime(): ReaderRuntime {\n const runtime = useContext(RuntimeContext);\n if (!runtime) throw new Error('This LiMR component needs a DocumentProvider or Reader. Markdown can also be used on its own.');\n return runtime;\n}\n\n/** Only the requested value is subscribed; changing a parameter never reparses source. */\nexport function useRendererParameter<K extends keyof RendererParameters>(name: K): RendererParameters[K] {\n const runtime = useRuntime();\n return useStoreSelector(runtime.configuration, config => {\n if (config.parameters?.[name] !== undefined) return config.parameters[name];\n for (let index = (config.extensions?.length ?? 0) - 1; index >= 0; index--) {\n const parameters = config.extensions![index].parameters;\n if (parameters && name in parameters) return parameters[name];\n }\n return undefined as RendererParameters[K];\n });\n}\n\n/** Selective subscription: unchanged values do not re-render the subscriber. */\nexport function useStoreSelector<T, R>(store: { subscribe: (listener: () => void) => () => void; get: () => T }, select: (state: T) => R): R {\n const selectRef = useRef(select);\n selectRef.current = select;\n const cache = useRef<{ state: T; select: typeof select; value: R } | undefined>(undefined);\n const get = useCallback(() => {\n const state = store.get();\n if (cache.current && cache.current.state === state && cache.current.select === selectRef.current) return cache.current.value;\n const value = selectRef.current(state);\n cache.current = { state, select: selectRef.current, value };\n return value;\n }, [store]);\n return useSyncExternalStore(store.subscribe, get, get);\n}\n\nexport function useDocument(): DocumentSnapshot {\n const runtime = useRuntime();\n return useSyncExternalStore(runtime.document.subscribe, runtime.document.getSnapshot, runtime.document.getSnapshot);\n}\nexport function useDocumentSelector<R>(select: (snapshot: DocumentSnapshot) => R): R {\n const runtime = useRuntime();\n const store = useMemo(() => ({ subscribe: runtime.document.subscribe, get: runtime.document.getSnapshot }), [runtime]);\n return useStoreSelector(store, select);\n}\nexport function useSelection(): SelectionSnapshot | null { return useStoreSelector(useRuntime().interaction, state => state.selection); }\nexport function useTheme() { return useStoreSelector(useRuntime().configuration, config => config.theme ?? 'light'); }\nexport function useAppearance() { return useStoreSelector(useRuntime().configuration, config => config.appearance ?? 'classic'); }\nexport function useLocale() {\n const runtime = useRuntime();\n useStoreSelector(runtime.configuration, config => config.locale);\n return runtime.locale;\n}\nexport function useAnnotation(id: string): Annotation | undefined { return useStoreSelector(useRuntime().decorations, state => state.annotations.get(id)); }\nexport function useAnnotations() {\n const state = useStoreSelector(useRuntime().decorations, state => state);\n return useMemo(() => ({ annotations: state.annotations, occurrences: state.occurrences }), [state.annotations, state.occurrences]);\n}\nexport function useAnnotationState() {\n const runtime = useRuntime();\n const active = useStoreSelector(runtime.interaction, state => state.active);\n const hovered = useStoreSelector(runtime.interaction, state => state.hovered);\n return { active, hovered, activate: (id: string | null) => runtime.activate(id), hover: (id: string | null) => runtime.hover(id) };\n}\nexport function useAnchor(id: string) {\n const runtime = useRuntime();\n useSyncExternalStore(runtime.layout.subscribe, runtime.layout.get, runtime.layout.get);\n useSyncExternalStore(runtime.viewport.subscribe, runtime.viewport.get, runtime.viewport.get);\n const element = runtime.anchors.get(id);\n return { element: element ?? null, rect: element?.getBoundingClientRect() ?? null, contentRect: runtime.content?.getBoundingClientRect() ?? null };\n}\nexport function useLiMR() {\n const runtime = useRuntime();\n return useMemo(() => ({\n ...runtime.commands,\n document: runtime.document,\n get signal() { return runtime.signal; },\n clearSelection: () => runtime.clearSelection(),\n scrollToHeading: (id: string) => runtime.scrollToHeading(id),\n scrollToAnnotation: (id: string) => runtime.scrollToOccurrence(id),\n invalidateAnnotation: (id: string) => runtime.invalidateAnnotation(id),\n }), [runtime]);\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { ResourceCache } from '../core/cache';\nimport type { NodeRendererProps, RendererExtension, TextToken } from '../react/types';\nimport { useRuntime } from '../react/context';\nimport { CopyButton } from '../components/CopyButton';\nimport { literalValue } from '../react/literal';\n\nconst cache = new ResourceCache<readonly TextToken[]>(96);\nexport interface CodeHighlightOptions { languages?: readonly string[]; lightTheme?: string; darkTheme?: string; eager?: boolean; maxLength?: number }\nconst aliases: Record<string, string> = { js: 'javascript', ts: 'typescript', py: 'python', sh: 'bash', yml: 'yaml', md: 'markdown', rs: 'rust', 'c++': 'cpp', text: 'text', txt: 'text' };\n\nexport function codeHighlight(options: CodeHighlightOptions = {}): RendererExtension {\n function CodeNode({ node, pending, renderValue }: NodeRendererProps) {\n const runtime = useRuntime();\n const code = literalValue(node);\n const language = String(node.lang ?? 'text').toLowerCase();\n const normalized = aliases[language] ?? language;\n const [result, setResult] = useState<{ code: string; tokens: readonly TextToken[] } | null>(null);\n const [visible, setVisible] = useState(options.eager ?? false);\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (visible) return;\n if (typeof IntersectionObserver === 'undefined') { setVisible(true); return; }\n const observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) { setVisible(true); observer.disconnect(); }\n }, { root: runtime.configuration.get().scrollRoot, rootMargin: '400px' });\n if (ref.current) observer.observe(ref.current);\n return () => observer.disconnect();\n }, [visible, runtime]);\n useEffect(() => {\n if (!visible || code.length > (options.maxLength ?? 100_000)) return;\n let disposed = false;\n let release: (() => void) | undefined;\n // A growing fence stays readable without re-highlighting its entire history\n // for every token. The final tree is highlighted as soon as it settles.\n const timer = setTimeout(() => {\n if (normalized === 'text' || options.languages && !options.languages.includes(normalized)) return;\n const request = cache.acquire(JSON.stringify([code, normalized, options.lightTheme, options.darkTheme]), async () => {\n const shiki = await import('shiki');\n if (!(normalized in shiki.bundledLanguages) && !(normalized in shiki.bundledLanguagesAlias)) return [];\n const result = await shiki.codeToTokens(code, { lang: normalized as import('shiki').BundledLanguage, themes: { light: options.lightTheme ?? 'github-light', dark: options.darkTheme ?? 'github-dark' }, defaultColor: false });\n let offset = 0;\n return result.tokens.flatMap((line, index) => {\n const tokens: TextToken[] = line.map(token => { const start = offset; offset += token.content.length; return { content: token.content, offset: start, style: token.htmlStyle }; });\n if (index < result.tokens.length - 1) {\n tokens.push({ content: '\\n', offset: offset++ });\n }\n return tokens;\n });\n });\n release = request.release;\n request.promise.then(tokens => { if (!disposed) setResult({ code, tokens }); }).catch(() => { /* Plain source is a usable fallback. */ });\n }, pending ? 180 : 0);\n return () => { disposed = true; clearTimeout(timer); release?.(); };\n }, [code, normalized, pending, visible]);\n const tokens = result?.code === code ? result.tokens : undefined;\n return <div className=\"limr-code-block\" ref={ref}>\n <div className=\"limr-code-header\" data-limr-ignore=\"true\"><span>{language}</span><CopyButton value={code} /></div>\n <pre className={tokens?.length ? 'shiki' : undefined}><code>{renderValue(tokens)}</code></pre>\n </div>;\n }\n return { name: 'code-highlight', scope: 'local', components: { code: CodeNode } };\n}\n","import { rangeOf, type MarkdownNode, type TextMapping } from '../core';\n\nexport function literalValue(node: MarkdownNode): string { return (node.value ?? '').replace(/\\r\\n?|\\n/g, node.type === 'inlineCode' ? ' ' : '\\n'); }\n\n/** Literal code does not decode Markdown entities/escapes. Map only its visible\n * payload, including CommonMark code-span whitespace and fence indentation. */\nexport function mapLiteral(source: string, node: MarkdownNode): TextMapping {\n const range = rangeOf(node), raw = source.slice(range.start, range.end), value = literalValue(node);\n const starts: number[] = [], ends: number[] = [];\n if (node.type === 'inlineCode') {\n const fence = /^`+/.exec(raw)?.[0].length ?? 0;\n let from = fence, until = raw.length - fence;\n const normalized = raw.slice(from, until).replace(/\\r\\n?|\\n/g, ' ');\n if (normalized.startsWith(' ') && normalized.endsWith(' ') && /[^ ]/.test(normalized)) {\n from += raw.slice(from, from + 2) === '\\r\\n' ? 2 : 1;\n until -= raw.slice(until - 2, until) === '\\r\\n' ? 2 : 1;\n }\n for (let at = from; at < until; at++) {\n const length = raw[at] === '\\r' && raw[at + 1] === '\\n' ? 2 : 1;\n starts.push(range.start + at); ends.push(range.start + at + length); at += length - 1;\n }\n return { starts, ends, exact: starts.length === value.length };\n }\n const lines = [...raw.matchAll(/[^\\r\\n]*(?:\\r\\n|\\r|\\n|$)/g)].filter(match => match[0]);\n const fenced = /^[ \\t]*(?:`{3,}|~{3,})/.test(lines[0]?.[0] ?? '');\n let index = fenced ? 1 : 0;\n let exact = true;\n const values = value.split('\\n');\n for (let line = 0; line < values.length; line++, index++) {\n const match = lines[index], text = values[line];\n const rawLine = (match?.[0] ?? '').replace(/[\\r\\n]+$/, '');\n const at = rawLine.endsWith(text) ? rawLine.length - text.length : -1;\n if (at < 0 || !match) exact = false;\n const start = range.start + (match?.index ?? raw.length) + Math.max(0, at);\n for (let unit = 0; unit < text.length; unit++) { starts.push(start + unit); ends.push(start + unit + 1); }\n if (line < values.length - 1) {\n starts.push(range.start + (match?.index ?? 0) + rawLine.length);\n ends.push(range.start + (match?.index ?? 0) + (match?.[0].length ?? rawLine.length));\n }\n }\n return { starts, ends, exact };\n}\n","import { useMemo, useRef } from 'react';\nimport { fromMarkdown } from 'mdast-util-from-markdown';\nimport { safeUrl, textContent, walk } from '../core/tree';\nimport type { MarkdownNode } from '../core/types';\nimport type { AnnotationContentProps, AnnotationOverlayCardProps, AnnotationSidebarPreviewProps, AnnotationType, NodeRenderer, RendererExtension } from '../react/types';\nimport { Markdown, type MarkdownProps } from '../react/Markdown';\nimport { useLocale, useRuntime, useStoreSelector } from '../react/context';\nimport { AnnotationCard } from '../components/AnnotationCard';\n\nexport interface CitationData { title?: string; url?: string; description?: string; summary?: string }\nconst CitationParagraph: NodeRenderer = ({ children }) => <p><span className=\"limr-underline\">{children}</span></p>;\nfunction CitationIcon() {\n return <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" fill=\"currentColor\"><path d=\"M2.5 4.2h4.3v4.3c0 2.1-1.2 3.3-3.5 3.8l-.5-1.4c1.4-.4 2-1 2-2H2.5V4.2Zm6.7 0h4.3v4.3c0 2.1-1.2 3.3-3.5 3.8l-.5-1.4c1.4-.4 2-1 2-2H9.2V4.2Z\" /></svg>;\n}\nexport function AnnotationMarkdown({ source, className, ...props }: MarkdownProps & { source: string }) {\n const runtime = useRuntime();\n const config = useStoreSelector(runtime.configuration, config => config);\n return <Markdown source={source} extensions={config.extensions} parameters={config.parameters} components={config.components} annotationTypes={config.annotationTypes} theme={config.theme} appearance={config.appearance} locale={config.locale} interactive={false} {...props} className={`limr-annotation-markdown ${className ?? ''}`} />;\n}\n\nexport function citation(options: Partial<AnnotationType<CitationData>> = {}): RendererExtension {\n function Preview({ annotations }: AnnotationSidebarPreviewProps<CitationData>) {\n const summary = useMemo(() => annotations.filter(annotation => annotation.type === (options.type ?? 'citation')).map(annotation => {\n const data = annotation.data as CitationData | undefined;\n const source = data?.summary?.trim() || data?.description?.trim();\n // Summaries need readable text, without mounting another interactive\n // reader or exposing Markdown punctuation in a two-line preview.\n if (source) return (fromMarkdown(source) as unknown as MarkdownNode).children?.map(textContent).join(' ').replace(/\\s+/g, ' ').trim();\n return safeUrl(data?.url) || data?.title;\n }).filter(Boolean).join(' · '), [annotations]);\n return summary ? <span title={summary}>{summary}</span> : null;\n }\n function Card(props: AnnotationOverlayCardProps<CitationData>) {\n const locale = useLocale();\n return <AnnotationCard {...props} title={locale.annotations} />;\n }\n function Content({ data }: AnnotationContentProps<CitationData>) {\n const runtime = useRuntime();\n const configured = useStoreSelector(runtime.configuration, () => runtime.components);\n const components = useMemo(() => ({ ...configured, paragraph: configured.paragraph ?? CitationParagraph }), [configured]);\n const link = useRef<HTMLAnchorElement>(null);\n const url = safeUrl(data?.url);\n return <div className=\"limr-citation-content\" data-linked={!!url || undefined} onClick={event => {\n if (url && !event.defaultPrevented && !(event.target as Element).closest('a,button,input,textarea,select,summary,[role=\"button\"],[contenteditable=\"true\"],[data-limr-card-interactive]') && window.getSelection()?.isCollapsed !== false) link.current?.click();\n }}>\n <a ref={link} className=\"limr-citation-title\" href={url} target=\"_blank\" rel=\"noopener noreferrer\"><span className=\"limr-underline\">{data?.title ?? data?.url ?? 'Citation'}</span></a>\n {(data?.description || data?.summary) && <AnnotationMarkdown source={data.description || data.summary!} components={components} />}\n </div>;\n }\n return {\n name: 'citation', tags: ['citation', 'ref'], scope: 'local',\n annotationTypes: [{ type: 'citation', label: 'Citation', icon: CitationIcon, color: '#6366f1', Content, ...options, sidebar: { Preview, collapseOnContentClick: false, ...options.sidebar }, overlay: { Card, expand: false, ...options.overlay } }],\n transform(root) {\n walk(root, node => {\n if (node.type !== 'component') return;\n if (node.name === 'citation') {\n const attributes = node.attributes ?? {};\n const id = String(attributes['cite-id'] ?? attributes.id ?? '');\n node.type = 'annotationDefinition';\n node.annotation = { id, type: 'citation', data: { title: attributes.title, url: attributes.url, description: attributes.desc ?? attributes.description, summary: attributes.summary } };\n } else if (node.name === 'ref') {\n const value = String(node.attributes?.['cite-from-ids'] ?? node.attributes?.ids ?? node.attributes?.id ?? '');\n let ids: string[];\n try { const parsed = JSON.parse(value); ids = Array.isArray(parsed) ? parsed.map(String) : [String(parsed)]; }\n catch { ids = value.split(',').map(id => id.trim()).filter(Boolean); }\n node.type = 'annotationReference'; node.annotationIds = ids;\n }\n });\n },\n };\n}\n","import { useContext, useEffect, useRef } from 'react';\nimport { useAppearance, DocumentProvider, RuntimeContext, useDocument, useIsomorphicLayoutEffect, useRuntime, useStoreSelector, type DocumentProviderProps } from './context';\nimport { BlockView, Footnotes } from './render';\nimport { useSelectionTracking } from './selection';\nimport type { StyledProps } from './types';\nimport { emptyDecorations } from './runtime';\nimport { SelectionPaint } from './selection-paint';\n\nexport interface MarkdownProps extends Omit<DocumentProviderProps, 'children'>, StyledProps {\n interactive?: boolean;\n /** Follow generated output while the reader remains near the bottom. */\n followOutput?: boolean;\n}\nexport function Markdown({ className, style, interactive = true, followOutput = false, justify, ...props }: MarkdownProps) {\n const parent = useContext(RuntimeContext);\n if (props.source !== undefined || !parent) return <DocumentProvider {...props} justify={justify}><MarkdownBody className={className} style={style} interactive={interactive} followOutput={followOutput} /></DocumentProvider>;\n return <MarkdownBody className={className} style={style} interactive={interactive} followOutput={followOutput} justify={justify} />;\n}\n\nfunction MarkdownBody({ className, style, interactive, followOutput, justify }: StyledProps & { interactive: boolean; followOutput: boolean; justify?: boolean }) {\n const runtime = useRuntime();\n const document = useDocument();\n const appearance = useAppearance();\n const theme = useStoreSelector(runtime.configuration, config => config.theme ?? 'light');\n const configuredJustify = useStoreSelector(runtime.configuration, config => config.justify ?? false);\n const scrollRoot = useStoreSelector(runtime.configuration, config => config.scrollRoot);\n const offset = useStoreSelector(runtime.documentOffset, value => value);\n const components = useStoreSelector(runtime.configuration, config => config.components);\n const extensions = useStoreSelector(runtime.configuration, config => config.extensions);\n const decorations = useStoreSelector(runtime.decorations, state => state.byBlock);\n const ref = useRef<HTMLElement>(null);\n const pinned = useRef(true);\n useIsomorphicLayoutEffect(() => ref.current ? runtime.mountContent(ref.current) : undefined, [runtime, scrollRoot]);\n useIsomorphicLayoutEffect(() => runtime.requestLayout(), [runtime, justify, configuredJustify]);\n useSelectionTracking(runtime, interactive);\n useEffect(() => {\n if (!followOutput) return;\n const root = scrollRoot ?? window;\n const onScroll = () => {\n const element = scrollRoot ?? window.document.documentElement;\n const viewport = scrollRoot?.clientHeight ?? window.innerHeight;\n pinned.current = element.scrollHeight - runtime.getScrollTop() - viewport < 48;\n };\n root.addEventListener('scroll', onScroll, { passive: true });\n return () => root.removeEventListener('scroll', onScroll);\n }, [runtime, followOutput, scrollRoot]);\n useIsomorphicLayoutEffect(() => {\n if (!followOutput || !document.streaming || !pinned.current) return;\n const frame = requestAnimationFrame(() => runtime.scrollTo(scrollRoot?.scrollHeight ?? window.document.documentElement.scrollHeight, 'instant'));\n return () => cancelAnimationFrame(frame);\n }, [document, runtime, followOutput, scrollRoot]);\n return <article ref={ref} className={`limr-prose ${className ?? ''}`} style={{ ...style, translate: offset ? `0 ${offset}px` : style?.translate }} data-limr-theme={theme} data-limr-appearance={appearance} data-limr-document={document.id} data-limr-justify={justify ?? configuredJustify}>\n {document.blocks.map(block => <BlockView key={block.id} block={block} runtime={runtime} components={components} extensions={extensions} decorations={decorations.get(block.id) ?? emptyDecorations} />)}\n <Footnotes />\n <SelectionPaint runtime={runtime} interactive={interactive} />\n </article>;\n}\n","import type { PaintHighlight } from './runtime';\nimport { cloneElement, Component, createElement, Fragment, isValidElement, memo, useCallback, useMemo, useRef, type ComponentType, type CSSProperties, type ErrorInfo, type ReactElement, type ReactNode } from 'react';\nimport { mapText, rangeOf, safeUrl, walk, type AnnotationOccurrence, type Block, type MarkdownNode, type TextMapping } from '../core';\nimport { intersects } from '../core/tree';\nimport { useDocumentSelector, useRuntime, useStoreSelector } from './context';\nimport { emptyDecorations, emptyList, type BlockDecorations, type ReaderRuntime } from './runtime';\nimport type { TextToken, ViewConfiguration } from './types';\nimport { bindCompactText, compactTextNodes } from './text-binding';\nimport { literalValue, mapLiteral } from './literal';\n\ninterface RenderContext {\n runtime: ReaderRuntime;\n block: Block;\n marks: Map<MarkdownNode, readonly AnnotationOccurrence[]>;\n afterMarks: Map<MarkdownNode, readonly AnnotationOccurrence[]>;\n highlights: readonly PaintHighlight[];\n occurrences: readonly AnnotationOccurrence[];\n tightList?: boolean;\n compact?: boolean;\n blockElement?: BlockElement;\n}\ninterface BlockElement { id: string; range: Block['range']; pending: boolean; ref: (element: HTMLElement | null) => void }\nconst blockAttributes = (block?: BlockElement) => block ? { 'data-limr-block': block.id, 'data-source-start': block.range.start, 'data-source-end': block.range.end, 'data-pending': block.pending || undefined } : {};\n\nexport function AnnotationMarker({ occurrence }: { occurrence: AnnotationOccurrence }) {\n const runtime = useRuntime();\n const annotation = useStoreSelector(runtime.decorations, state => state.annotations.get(occurrence.annotationIds[0]));\n const active = useStoreSelector(runtime.interaction, state => state.active === occurrence.id);\n const hovered = useStoreSelector(runtime.interaction, state => state.hovered === occurrence.id);\n const definition = useStoreSelector(runtime.configuration, () => runtime.annotationTypes.get(annotation?.type ?? 'citation'));\n const Icon = definition?.icon;\n const Custom = definition?.Marker;\n const icon = typeof Icon === 'function' || Icon && typeof Icon === 'object' && !isValidElement(Icon) && '$$typeof' in Icon\n ? createElement(Icon as ComponentType) : Icon;\n return <span className=\"limr-mark-wrap\" data-limr-ignore=\"true\" data-limr-marker={occurrence.id} data-source-start={occurrence.range.start} data-source-end={occurrence.range.end}><button type=\"button\"\n ref={element => runtime.registerAnchor(occurrence.id, element)}\n className=\"limr-mark\" data-limr-anchor={occurrence.id} data-active={active || hovered || undefined}\n style={{ '--limr-mark-color': definition?.color } as CSSProperties}\n aria-label={definition?.label ?? annotation?.type ?? 'Annotation'} aria-expanded={active}\n onPointerEnter={event => { if (event.pointerType !== 'touch') runtime.hover(occurrence.id); }}\n onPointerLeave={event => { if (event.pointerType !== 'touch' && runtime.interaction.get().hovered === occurrence.id && runtime.interaction.get().hoverSource === 'marker') runtime.hover(null); }}\n onFocus={event => { if (event.currentTarget.matches(':focus-visible')) runtime.hover(occurrence.id); }} onBlur={event => {\n // Focus can move from a marker into its hovered sidebar card on mousedown.\n // That blur must not erase the card's hover before its click toggles it.\n if (event.relatedTarget instanceof Element && event.relatedTarget.closest('[data-occurrence]')?.getAttribute('data-occurrence') === occurrence.id) return;\n if (runtime.interaction.get().hovered === occurrence.id && runtime.interaction.get().hoverSource === 'marker') runtime.hover(null);\n }}\n onClick={() => {\n const hovering = runtime.interaction.get().hovered === occurrence.id;\n runtime.activate(active ? null : occurrence.id);\n // A click does not move the pointer. Preserve hover across both toggles.\n if (hovering) runtime.hover(occurrence.id);\n }}>\n <span className=\"limr-mark-icon\">{Custom && annotation ? <Custom annotation={annotation} active={active} /> : icon ?? '•'}</span>\n {occurrence.annotationIds.length > 1 && <span className=\"limr-mark-count\">{occurrence.annotationIds.length}</span>}\n </button></span>;\n}\n\nfunction Text({ node, context, mapping: literalMapping, marks: literalMarks, style, className }: { node: MarkdownNode; context: RenderContext; mapping?: TextMapping; marks?: readonly AnnotationOccurrence[]; style?: CSSProperties; className?: string }) {\n const { runtime } = context;\n const value = node.value ?? '';\n const range = rangeOf(node);\n const source = runtime.document.getSnapshot().source;\n const mapped = useMemo(() => {\n let mapping: ReturnType<typeof mapText> | undefined;\n const raw = source.slice(range.start, range.end);\n return () => {\n if (literalMapping) return literalMapping;\n if (!mapping) {\n const relative = mapText(raw, value, { start: 0, end: raw.length }, { escapes: node.verbatimEscapes !== true });\n mapping = { starts: relative.starts.map(offset => offset + range.start), ends: relative.ends.map(offset => offset + range.start), exact: relative.exact };\n }\n return mapping;\n };\n }, [node, literalMapping]);\n const marks = literalMarks ?? context.marks.get(node) ?? emptyList;\n const highlights = context.highlights.filter(highlight => intersects(highlight.range, range));\n if (!marks.length && !highlights.length) {\n // Most text is undecorated. Build character maps only when an actual\n // selection needs decoded entity/escape positions, never during SSR.\n const direct = !literalMapping && source.slice(range.start, range.end) === value;\n return <span style={style} className={className} data-limr-text=\"\" data-source-start={range.start} data-source-end={range.end} ref={element => {\n if (element) runtime.bindings.set(element, {\n range, atomic: false,\n get exact() { return direct || mapped().exact; },\n resolve: (offset, edge) => direct ? Math.max(range.start, Math.min(range.end, range.start + offset)) : edge === 'start' ? mapped().starts[offset] ?? range.end : mapped().ends[offset - 1] ?? range.start,\n });\n }}>{value}</span>;\n }\n const mapping = mapped();\n const markerAt = new Map<number, AnnotationOccurrence[]>();\n const boundaries = new Set([0, value.length]);\n for (const mark of marks) {\n let index = mapping.ends.findIndex(end => end >= mark.range.end);\n index = index < 0 ? value.length : index + 1;\n boundaries.add(index); markerAt.set(index, [...markerAt.get(index) ?? [], mark]);\n }\n for (const highlight of highlights) {\n const start = mapping.ends.findIndex(end => end > highlight.range.start);\n const end = mapping.starts.findIndex(start => start >= highlight.range.end);\n boundaries.add(Math.max(0, start)); boundaries.add(end < 0 ? value.length : end);\n }\n const points = [...boundaries].sort((a, b) => a - b);\n return <>{points.slice(1).map((end, index) => {\n const start = points[index];\n const segmentRange = { start: mapping.starts[start] ?? range.start, end: mapping.ends[end - 1] ?? range.end };\n const styles = highlights.filter(highlight => intersects(highlight.range, segmentRange));\n let text: ReactNode = value.slice(start, end);\n for (const highlight of styles) text = <mark key={highlight.id} data-limr-highlight={highlight.id} data-hidden={highlight.hidden || undefined} className={`limr-highlight limr-highlight-${highlight.style ?? 'background'}`} style={{ '--limr-highlight': highlight.color ?? '#f3ce7380' } as CSSProperties}>{text}</mark>;\n return <span key={start} style={style} className={className} ref={element => {\n if (element) runtime.bindings.set(element, { range: segmentRange, atomic: false, exact: mapping.exact, resolve: (offset, edge) => {\n const at = Math.max(start, Math.min(end, start + offset));\n return edge === 'start' ? mapping.starts[at] ?? segmentRange.end : mapping.ends[at - 1] ?? segmentRange.start;\n } });\n }} data-limr-text=\"\" data-source-start={segmentRange.start} data-source-end={segmentRange.end}>\n {text}{markerAt.get(end)?.map(occurrence => <AnnotationMarker key={occurrence.id} occurrence={occurrence} />)}\n </span>;\n })}</>;\n}\n\nfunction LiteralValue({ node, context, tokens }: { node: MarkdownNode; context: RenderContext; tokens?: readonly TextToken[] }) {\n const source = context.runtime.document.getSnapshot().source;\n const mapping = useMemo(() => mapLiteral(source, node), [node]);\n const value = literalValue(node);\n const marks = context.marks.get(node) ?? emptyList;\n const segments = tokens?.length ? tokens : [{ content: value, offset: 0 }];\n return <>{segments.map((token, index) => {\n const start = token.offset, end = start + token.content.length;\n const mapped = { starts: mapping.starts.slice(start, end), ends: mapping.ends.slice(start, end), exact: mapping.exact };\n const range = { start: mapped.starts[0] ?? rangeOf(node).start, end: mapped.ends.at(-1) ?? rangeOf(node).end };\n const leaf: MarkdownNode = { type: 'text', value: token.content, position: { start: { offset: range.start, line: 0, column: 0 }, end: { offset: range.end, line: 0, column: 0 } } };\n return <Text key={index} className={token.style ? 'limr-code-token' : undefined} style={token.style} node={leaf} context={context} mapping={mapped} marks={marks.filter(mark => mark.range.end > range.start && mark.range.end <= range.end)} />;\n })}</>;\n}\n\nfunction Atomic({ node, context, children, inline, blockElement }: { node: MarkdownNode; context: RenderContext; children: ReactNode; inline: boolean; blockElement?: BlockElement }) {\n const range = rangeOf(node);\n const selected = useStoreSelector(context.runtime.interaction, state => state.selection?.raw.ranges.some(selection => intersects(selection, range)) ?? false);\n const highlights = context.highlights.filter(highlight => !highlight.hidden && intersects(highlight.range, range));\n const Tag = inline ? 'span' : 'div';\n const image = ['image', 'imageReference'].includes(node.type) || node.type === 'component' && node.name === 'img';\n const corner = image || !inline;\n const marks = [...context.marks.get(node) ?? [], ...corner ? context.afterMarks.get(node) ?? [] : []];\n const markers = marks.map(occurrence => <AnnotationMarker key={occurrence.id} occurrence={occurrence} />);\n return <><Tag {...blockAttributes(blockElement)} className={`limr-atomic${image ? ' limr-atomic-image' : ''}${corner ? ' limr-atomic-corner' : ''}${highlights.length ? ' limr-atomic-highlight' : ''}`} data-selected={selected || undefined}\n data-limr-media={image ? 'image' : undefined}\n data-limr-atomic={inline ? 'inline' : 'block'} data-source-start={range.start} data-source-end={range.end}\n style={{ '--limr-highlight': highlights[0]?.color ?? '#f3ce7380' } as CSSProperties}\n ref={element => { if (element) context.runtime.bindings.set(element, { range, atomic: true }); blockElement?.ref(element); }}>\n {children}\n {corner && !!marks.length && <span className=\"limr-corner-marks\" data-limr-ignore=\"true\">{markers}</span>}\n </Tag>{!corner && markers}</>;\n}\n\nfunction HeadingNode({ node, children, runtime, blockElement }: { node: MarkdownNode; children: ReactNode; runtime: ReaderRuntime; blockElement?: BlockElement }) {\n const id = (() => {\n const doc = runtime.document.getSnapshot();\n const offset = node.position?.start.offset ?? 0;\n let lo = 0, hi = doc.headings.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (doc.headings[mid].range.start < offset) lo = mid + 1; else hi = mid; }\n return doc.headings[lo]?.range.start === offset ? doc.headings[lo].id : undefined;\n })();\n return createElement(`h${node.depth}`, { ...blockAttributes(blockElement), id, ref: (element: HTMLElement | null) => { if (id) runtime.registerHeading(id, element); blockElement?.ref(element); } }, children);\n}\nfunction Reference({ node, children, image }: { node: MarkdownNode; children: ReactNode; image: boolean }) {\n const definition = useDocumentSelector(doc => doc.definitions.get(String(node.identifier)));\n if (!definition) return <>{children || String(node.alt ?? node.label ?? '')}</>;\n return image ? <img src={safeUrl(definition.url, true)} alt={String(node.alt ?? '')} title={definition.title ? String(definition.title) : undefined} loading=\"lazy\" decoding=\"async\" /> : <a href={safeUrl(definition.url)} title={definition.title ? String(definition.title) : undefined}>{children}</a>;\n}\nfunction FootnoteReference({ node }: { node: MarkdownNode }) {\n const runtime = useRuntime();\n const identifier = String(node.identifier);\n const number = useDocumentSelector(doc => doc.footnoteOrder.indexOf(identifier) + 1);\n return <sup data-limr-ignore=\"true\"><a href={`#${runtime.document.id}-fn-${encodeURIComponent(identifier)}`} id={`${runtime.document.id}-fnref-${rangeOf(node).start}`} aria-label={`Footnote ${number}`}>{number}</a></sup>;\n}\n\nclass ExtensionBoundary extends Component<{ children: ReactNode; fallback: string }, { failed: boolean }> {\n state = { failed: false };\n static getDerivedStateFromError() { return { failed: true }; }\n componentDidCatch(_error: Error, _info: ErrorInfo) { /* Isolate a third-party rendering failure to its source block. */ }\n componentDidUpdate(previous: Readonly<{ children: ReactNode; fallback: string }>) {\n if (this.state.failed && previous.fallback !== this.props.fallback) this.setState({ failed: false });\n }\n render() { return this.state.failed ? <pre className=\"limr-extension-error\">{this.props.fallback}</pre> : this.props.children; }\n}\n\nfunction containsBlock(node: MarkdownNode): boolean {\n return (node.type === 'component' && !node.inline) || ['math', 'code', 'list', 'table', 'blockquote'].includes(node.type) || (node.children?.some(containsBlock) ?? false);\n}\n\nfunction renderNode(node: MarkdownNode, context: RenderContext, index = 0, trailing?: ReactNode): ReactNode {\n const { runtime } = context;\n if (node.type === 'text' && context.compact) return node.value ?? '';\n const blockElement = node === context.block.node ? context.blockElement : undefined;\n const key = `${node.type}-${node.position?.start.offset ?? index}-${index}`;\n const childContext = node.type === 'list' ? { ...context, tightList: !node.spread } : context;\n const renderChildren = (nodes: readonly MarkdownNode[], options?: { trailing?: ReactNode }) => {\n let last = -1;\n nodes.forEach((child, i) => { if (!['definition', 'footnoteDefinition', 'annotationDefinition'].includes(child.type)) last = i; });\n if (last < 0 && options?.trailing) return [<Fragment key=\"trailing\">{options.trailing}</Fragment>];\n return nodes.map((child, i) => renderNode(child, childContext, i, i === last ? options?.trailing : undefined));\n };\n const children = node.type === 'table' ? [] : node.type === 'listItem' && context.tightList\n ? (node.children ?? []).flatMap((child, index) => child.type === 'paragraph' ? renderChildren(child.children ?? []) : renderNode(child, context, index))\n : renderChildren(node.children ?? []);\n const Renderer = runtime.components[node.type === 'component' ? node.name ?? '' : node.type];\n let element: ReactNode;\n if (Renderer) {\n const range = rangeOf(node);\n const renderAttribute = (name: string) => {\n const attribute = node.attributeNodes?.[name];\n if (!attribute) return String(node.attributes?.[name] ?? '');\n const range = rangeOf(attribute);\n return <Text node={attribute} context={context} marks={context.occurrences.filter(item => item.range.end > range.start && item.range.end <= range.end)} />;\n };\n element = <ExtensionBoundary key={key} fallback={runtime.document.getSnapshot().source.slice(range.start, range.end)}><Renderer node={node} children={children} pending={context.block.pending} source={runtime.document.getSnapshot().source.slice(range.start, range.end)} renderChildren={renderChildren} renderValue={tokens => <LiteralValue node={node} context={context} tokens={tokens} />} renderAttribute={renderAttribute} /></ExtensionBoundary>;\n } else {\n switch (node.type) {\n case 'text': return <Fragment key={key}>{context.compact ? node.value ?? '' : <Text node={node} context={context} />}{trailing}</Fragment>;\n case 'paragraph': element = containsBlock(node) ? <div className=\"limr-paragraph\">{children}{trailing}</div> : <p>{children}{trailing}</p>; trailing = undefined; break;\n case 'heading': return <HeadingNode key={key} node={node} runtime={runtime} blockElement={blockElement}>{children}{trailing}</HeadingNode>;\n case 'strong': element = <strong>{children}</strong>; break;\n case 'emphasis': element = <em>{children}</em>; break;\n case 'delete': element = <del>{children}</del>; break;\n case 'inlineCode': element = <code className=\"limr-inline-code\" data-limr-inline-syntax=\"\" data-source-start={rangeOf(node).start} data-source-end={rangeOf(node).end}><LiteralValue node={node} context={context} /></code>; break;\n case 'code': element = <pre><code><LiteralValue node={node} context={context} /></code></pre>; break;\n case 'math': case 'inlineMath': element = <code>{node.value}</code>; break;\n case 'blockquote': element = <blockquote className=\"limr-note\"><div className=\"limr-card-label\" data-limr-ignore=\"true\">{runtime.locale.note}</div><div className=\"limr-block-content\">{children}</div></blockquote>; break;\n case 'list': element = node.ordered ? <ol start={Number(node.start ?? 1)}>{children}</ol> : <ul>{children}</ul>; break;\n case 'listItem': element = <li className={typeof node.checked === 'boolean' ? 'limr-task-item' : undefined}>{typeof node.checked === 'boolean' && <input type=\"checkbox\" checked={node.checked} disabled aria-label=\"Task\" />}{children}</li>; break;\n case 'link': element = <a href={safeUrl(node.url)} title={node.title ? String(node.title) : undefined}>{children}</a>; break;\n case 'image': element = <img src={safeUrl(node.url, true)} alt={String(node.alt ?? '')} title={node.title ? String(node.title) : undefined} loading=\"lazy\" decoding=\"async\" />; break;\n case 'linkReference': element = <Reference node={node} image={false}>{children}</Reference>; break;\n case 'imageReference': element = <Reference node={node} image>{children}</Reference>; break;\n case 'thematicBreak': element = <hr />; break;\n case 'break': element = <br />; break;\n case 'table': {\n const rows = node.children ?? [], alignment = node.align as (string | null)[];\n element = <div className=\"limr-table-scroll\"><table><thead>{rows.slice(0, 1).map((row, i) => <tr key={i}>{row.children?.map((cell, j) => <th key={j} style={{ textAlign: alignment?.[j] as CSSProperties['textAlign'] }}>{renderChildren(cell.children ?? [])}</th>)}</tr>)}</thead><tbody>{rows.slice(1).map((row, i) => <tr key={i}>{row.children?.map((cell, j) => <td key={j} style={{ textAlign: alignment?.[j] as CSSProperties['textAlign'] }}>{renderChildren(cell.children ?? [])}</td>)}</tr>)}</tbody></table></div>; break;\n }\n case 'definition': case 'footnoteDefinition': case 'annotationDefinition': return null;\n case 'footnoteReference': return <Fragment key={key}><FootnoteReference node={node} />{trailing}</Fragment>;\n case 'annotationReference': {\n const Tag = node.inline ? 'span' : 'div';\n element = <Tag>{children}<AnnotationMarker occurrence={{ id: `${runtime.document.id}-ref-${rangeOf(node).start}`, range: rangeOf(node), annotationIds: node.annotationIds as string[], embedded: true }} /></Tag>; break;\n }\n case 'html': element = <span className=\"limr-literal\">{node.value}</span>; break;\n case 'component': element = children; break;\n default: element = children.length ? children : node.value ?? null;\n }\n }\n const atomic = node.selection === 'atomic' || ['math', 'inlineMath', 'image', 'imageReference', 'html'].includes(node.type);\n const corner = atomic && (!node.inline && !['inlineCode', 'inlineMath', 'html'].includes(node.type) || ['image', 'imageReference'].includes(node.type) || node.name === 'img');\n const after = corner ? undefined : context.afterMarks.get(node);\n const withMarkers = (element: ReactNode) => after?.length || trailing ? <Fragment key={key}>{element}{after?.map(occurrence => <AnnotationMarker key={occurrence.id} occurrence={occurrence} />)}{trailing}</Fragment> : element;\n if (atomic) return withMarkers(<Atomic key={key} node={node} context={context} blockElement={blockElement} inline={node.inline || ['inlineCode', 'inlineMath', 'image', 'imageReference', 'html'].includes(node.type)}>{element}</Atomic>);\n if (blockElement) {\n const attributes = { ...blockAttributes(blockElement), ref: blockElement.ref };\n // Ordinary blocks carry their own metadata; only arbitrary custom renderers\n // need an outer host element to participate in layout and selection.\n return withMarkers(isValidElement(element) && typeof element.type === 'string'\n ? cloneElement(element as ReactElement<Record<string, unknown>>, { ...attributes, key })\n : <div key={key} {...attributes}>{element}</div>);\n }\n return withMarkers(isValidElement(element) ? cloneElement(element, { key }) : <Fragment key={key}>{element}</Fragment>);\n}\n\nexport const BlockView = memo(function BlockView({ block, runtime, components, extensions, decorations, footnoteId }: { block: Block; runtime: ReaderRuntime; decorations: BlockDecorations; footnoteId?: string } & Pick<ViewConfiguration, 'components' | 'extensions'>) {\n const element = useRef<HTMLElement | null>(null);\n const clearBindings = useRef<(() => void) | undefined>(undefined);\n const { occurrences, highlights } = decorations;\n const root = useMemo(() => footnoteId ? { ...block.node, type: 'listItem' } : block.node, [block, footnoteId]);\n const texts = useMemo(() => compactTextNodes(root, runtime.components), [root, runtime, components, extensions]);\n const compact = !!texts && !occurrences.length && !highlights.length;\n const observe = useCallback((next: HTMLElement | null) => {\n clearBindings.current?.(); clearBindings.current = undefined;\n if (element.current) runtime.textBinders.delete(element.current);\n if (element.current && element.current !== next) runtime.unobserveBlock(element.current);\n element.current = next;\n runtime.observeBlock(next);\n if (next && compact && texts!.length) runtime.textBinders.set(next, () => { clearBindings.current = bindCompactText(next, texts!, runtime); });\n }, [runtime, compact, texts]);\n const { marks, afterMarks } = useMemo(() => {\n const map = new Map<MarkdownNode, AnnotationOccurrence[]>();\n const after = new Map<MarkdownNode, AnnotationOccurrence[]>();\n if (!occurrences.length) return { marks: map, afterMarks: after };\n const leaves: MarkdownNode[] = [];\n const attributes: MarkdownNode[] = [];\n const paths = new Map<MarkdownNode, readonly MarkdownNode[]>();\n const outside = new Set(['strong', 'emphasis', 'delete', 'link', 'linkReference', 'inlineCode', 'code', 'math', 'inlineMath', 'image', 'imageReference', 'html']);\n function collect(node: MarkdownNode, ancestors: readonly MarkdownNode[] = []) {\n if (node.attributeNodes) attributes.push(...Object.values(node.attributeNodes));\n const path = [...ancestors, node];\n if (node.selection === 'atomic' || ['text', 'inlineCode', 'code', 'math', 'inlineMath', 'image', 'imageReference', 'html'].includes(node.type)) { leaves.push(node); paths.set(node, path); }\n else node.children?.forEach(child => collect(child, path));\n }\n collect(block.node);\n for (const occurrence of occurrences) {\n const target = [...leaves].reverse().find(node => rangeOf(node).start < occurrence.range.end) ?? leaves[0];\n // An attribute can supply an atomic image, or text rendered separately as\n // its caption. Only the latter is handled by renderAttribute's Text node.\n const image = target && (['image', 'imageReference'].includes(target.type) || target.name === 'img') && rangeOf(target).end >= occurrence.range.end;\n if (!image && attributes.some(attribute => { const range = rangeOf(attribute); return occurrence.range.end > range.start && occurrence.range.end <= range.end; })) continue;\n if (target) {\n // An absorbed closing delimiter places the marker after its outermost\n // completed format. A partial code selection keeps its exact inner end.\n const outer = paths.get(target)?.find(node => (outside.has(node.type) || node.selection === 'atomic') && rangeOf(node).end <= occurrence.range.end);\n const destination = outer ? after : map, node = outer ?? target;\n destination.set(node, [...destination.get(node) ?? [], occurrence]);\n }\n }\n return { marks: map, afterMarks: after };\n }, [block, occurrences]);\n if (!footnoteId && ['definition', 'footnoteDefinition', 'annotationDefinition'].includes(block.node.type)) return null;\n const context: RenderContext = { runtime, block, marks, afterMarks, highlights, occurrences, compact, blockElement: { id: block.id, range: block.range, pending: block.pending, ref: observe } };\n if (footnoteId) return <li id={`${runtime.document.id}-fn-${encodeURIComponent(footnoteId)}`} {...blockAttributes(context.blockElement)} ref={observe}>{block.node.children?.map((child, index) => renderNode(child, { ...context, blockElement: undefined }, index))}</li>;\n return renderNode(block.node, context);\n});\n\nexport function Footnotes() {\n const runtime = useRuntime();\n const doc = useDocumentSelector(snapshot => snapshot);\n const components = useStoreSelector(runtime.configuration, config => config.components);\n const extensions = useStoreSelector(runtime.configuration, config => config.extensions);\n const decorations = useStoreSelector(runtime.decorations, state => state.byBlock);\n const blocks = useMemo(() => new Map(doc.blocks.filter(block => block.node.type === 'footnoteDefinition').map(block => [String(block.node.identifier), block])), [doc.blocks]);\n if (!doc.footnoteOrder.length) return null;\n return <section className=\"limr-footnotes\" aria-label={runtime.locale.footnotes}><hr /><ol>{doc.footnoteOrder.map(id => {\n const node = doc.footnotes.get(id);\n if (!node) return null;\n const block: Block = blocks.get(id) ?? { id: `${doc.id}-fn-${id}`, range: rangeOf(node), node, pending: false };\n return <BlockView key={id} block={block} runtime={runtime} components={components} extensions={extensions} footnoteId={id} decorations={decorations.get(block.id) ?? emptyDecorations} />;\n })}</ol></section>;\n}\n","import { mapText, rangeOf, type MarkdownNode } from '../core';\nimport type { NodeRenderer } from './types';\nimport type { ReaderRuntime, SourceBinding } from './runtime';\n\nconst atomic = new Set(['inlineCode', 'code', 'math', 'inlineMath', 'image', 'imageReference', 'html']);\nconst hidden = new Set(['definition', 'footnoteDefinition', 'annotationDefinition', 'footnoteReference']);\nconst ordinary = new Set(['text', 'paragraph', 'heading', 'strong', 'emphasis', 'delete', 'blockquote', 'list', 'listItem', 'link', 'linkReference', 'table', 'tableRow', 'tableCell', 'thematicBreak', 'break', 'annotationReference']);\n\n/** Native text nodes suffice for ordinary Markdown. Custom layouts keep explicit\n * wrappers so reordered/conditional children retain independent source bindings. */\nexport function compactTextNodes(node: MarkdownNode, components: Readonly<Record<string, NodeRenderer>>): readonly MarkdownNode[] | null {\n const texts: MarkdownNode[] = [];\n let supported = true;\n const visit = (node: MarkdownNode) => {\n if (node.selection === 'atomic' || atomic.has(node.type) || hidden.has(node.type)) return;\n if (!ordinary.has(node.type) || components[node.type]) { supported = false; return; }\n if (node.type === 'text') { if (node.value) texts.push(node); return; }\n node.children?.forEach(visit);\n };\n visit(node);\n return supported ? texts : null;\n}\n\nfunction bindingFor(node: MarkdownNode, source: string): SourceBinding {\n const range = rangeOf(node), value = node.value ?? '';\n // Retain only this node's raw slice, never the history of streaming prefixes.\n const raw = source.slice(range.start, range.end);\n const direct = raw === value;\n let mapping: ReturnType<typeof mapText> | undefined;\n const mapped = () => mapping ??= mapText(raw, value, { start: 0, end: raw.length });\n return {\n range, atomic: false,\n get exact() { return direct || mapped().exact; },\n resolve(offset, edge) {\n const at = Math.max(0, Math.min(value.length, offset));\n return direct ? range.start + at : range.start + (edge === 'start' ? mapped().starts[at] ?? raw.length : mapped().ends[at - 1] ?? 0);\n },\n };\n}\n\n/** Attach metadata only: React continues to own all text and element mutations. */\nexport function bindCompactText(element: HTMLElement, nodes: readonly MarkdownNode[], runtime: ReaderRuntime): () => void {\n const bound: Node[] = [];\n const clear = () => bound.forEach(node => runtime.bindings.delete(node));\n const bindings = nodes.map(node => bindingFor(node, runtime.document.getSnapshot().source));\n const walker = element.ownerDocument.createTreeWalker(element, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, {\n acceptNode(node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n return element.hasAttribute('data-limr-ignore') || element.hasAttribute('data-limr-text') || runtime.bindings.get(element)?.atomic ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_SKIP;\n }\n return NodeFilter.FILTER_ACCEPT;\n },\n });\n let index = 0, inValue = 0;\n for (let text = walker.nextNode(); text; text = walker.nextNode()) {\n const value = text.textContent ?? '';\n if (!value) continue;\n const parts: { start: number; end: number; offset: number; binding: SourceBinding }[] = [];\n for (let at = 0; at < value.length;) {\n const expected = nodes[index]?.value ?? '';\n const size = Math.min(value.length - at, expected.length - inValue);\n if (size <= 0 || value.slice(at, at + size) !== expected.slice(inValue, inValue + size)) { clear(); return () => {}; }\n parts.push({ start: at, end: at + size, offset: inValue, binding: bindings[index] });\n at += size; inValue += size;\n if (inValue === expected.length) { index++; inValue = 0; }\n }\n const first = parts[0], last = parts[parts.length - 1];\n runtime.bindings.set(text, parts.length === 1 && first.offset === 0 && value === nodes[index - 1]?.value ? first.binding : {\n range: { start: first.binding.range.start, end: last.binding.range.end }, atomic: false,\n get exact() { return parts.every(part => part.binding.exact); },\n resolve(offset, edge) {\n const part = parts.find(part => edge === 'start' ? part.end > offset : part.end >= offset) ?? last;\n return part.binding.resolve!(part.offset + offset - part.start, edge);\n },\n });\n bound.push(text);\n }\n return clear;\n}\n","import { useEffect } from 'react';\nimport { selectionFromRange, type SelectionSnapshot, type SourceRange } from '../core';\nimport type { ReaderRuntime } from './runtime';\nimport { leavesIn } from './source-geometry';\n\n/** Attribute captions can occur before an image in source, while being rendered\n * after it. Project these selections in reading order without covering captions\n * the user did not select. Ordinary prose keeps its fast endpoint-only path. */\nfunction visualSelection(runtime: ReaderRuntime, native: Range, options: Parameters<typeof selectionFromRange>[2]): SelectionSnapshot | undefined {\n if (![...runtime.content!.querySelectorAll('[data-limr-selection-order=\"visual\"]')].some(element => native.intersectsNode(element))) return;\n const blocks = [...runtime.blocks.values()].filter(block => native.intersectsNode(block));\n blocks.sort((a, b) => a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1);\n const leaves = blocks.flatMap(block => leavesIn(block, runtime)).filter(leaf => leaf.kind !== 'marker');\n const selected: SourceRange[] = [];\n for (const leaf of leaves) {\n if (!native.intersectsNode(leaf.node)) continue;\n if (leaf.kind !== 'text') { selected.push(leaf.range); continue; }\n const node = leaf.node as Text;\n const start = native.startContainer === node ? native.startOffset : 0;\n const end = native.endContainer === node ? native.endOffset : node.length;\n if (start < end) selected.push({ start: leaf.binding!.resolve!(leaf.offset + start, 'start'), end: leaf.binding!.resolve!(leaf.offset + end, 'end') });\n }\n if (!selected.length) return;\n // Only bridge syntax gaps: a previously visited or unselected rendered leaf\n // in that source gap would otherwise be painted a second time.\n const sourceOrder = leaves.map(leaf => leaf.range).sort((a, b) => a.end - b.end);\n const ranges: SourceRange[] = [];\n for (const range of selected) {\n const previous = ranges.at(-1);\n let lo = 0, hi = sourceOrder.length;\n if (previous) while (lo < hi) { const mid = (lo + hi) >>> 1; if (sourceOrder[mid].end <= previous.end) lo = mid + 1; else hi = mid; }\n if (previous && range.start >= previous.end && (!sourceOrder[lo] || sourceOrder[lo].start >= range.start)) previous.end = range.end;\n else ranges.push({ ...range });\n }\n const snapshot = runtime.document.getSnapshot();\n const selections = ranges.map(range => selectionFromRange(snapshot, range, options));\n const combine = (key: 'raw' | 'syntax' | 'blocks') => {\n const seen = new Set<string>();\n const ranges = selections.flatMap(selection => selection[key].ranges).filter(range => { const key = `${range.start}:${range.end}`; if (seen.has(key)) return false; seen.add(key); return true; });\n return { ranges, sourceText: ranges.map(range => snapshot.source.slice(range.start, range.end)).join('\\n\\n') };\n };\n return { ...selections[0], raw: combine('raw'), syntax: combine('syntax'), blocks: combine('blocks') };\n}\n\nexport function useSelectionTracking(runtime: ReaderRuntime, enabled: boolean) {\n useEffect(() => {\n const container = runtime.content;\n if (!container || !enabled) return;\n let frame = 0, dragging = false;\n let previous: { startNode: Node; start: number; endNode: Node; end: number; revision: number; settled: boolean } | undefined;\n type Endpoint = { offset: number; atomic: boolean; exact: boolean } | null;\n function resolve(node: Node, offset: number, edge: 'start' | 'end'): Endpoint {\n let element = node.nodeType === Node.ELEMENT_NODE ? node as Element : node.parentElement;\n if (!element || element.closest('[data-limr-document]') !== container || element.closest('[data-limr-ignore]')) return null;\n runtime.prepareTextBindings(element);\n const native = node.nodeType === Node.TEXT_NODE ? runtime.bindings.get(node) : undefined;\n if (native?.resolve) return { offset: native.resolve(offset, edge), atomic: false, exact: native.exact !== false };\n while (element && element !== container) {\n const binding = runtime.bindings.get(element);\n if (binding) {\n if (binding.atomic) return { offset: edge === 'start' ? binding.range.start : binding.range.end, atomic: true, exact: true };\n const range = document.createRange();\n range.setStart(element, 0);\n try { range.setEnd(node, offset); } catch { return null; }\n const localOffset = range.toString().length;\n return { offset: binding.resolve?.(localOffset, edge) ?? (edge === 'start' ? binding.range.start : binding.range.end), atomic: false, exact: binding.exact !== false };\n }\n element = element.parentElement;\n }\n // Native select-all and paragraph-boundary selections can have element\n // endpoints outside a text wrapper. Resolve their first/last visible leaf.\n const children = node.nodeType === Node.ELEMENT_NODE ? Array.from(node.childNodes) : [];\n const candidates = edge === 'start' ? children.slice(offset) : children.slice(0, offset).reverse();\n const descend = (candidate: Node): Endpoint => {\n if (candidate.nodeType === Node.TEXT_NODE && candidate.textContent) return resolve(candidate, edge === 'start' ? 0 : candidate.textContent.length, edge);\n if (candidate instanceof Element) {\n if (candidate.hasAttribute('data-limr-ignore') || candidate.hasAttribute('inert')) return null;\n const binding = runtime.bindings.get(candidate);\n if (binding?.atomic) return { offset: edge === 'start' ? binding.range.start : binding.range.end, atomic: true, exact: true };\n }\n const list = Array.from(candidate.childNodes);\n if (edge === 'end') list.reverse();\n for (const child of list) { const result = descend(child); if (result) return result; }\n return null;\n };\n for (const child of candidates) { const result = descend(child); if (result) return result; }\n return null;\n }\n function process() {\n frame = 0;\n // Selecting/editing text inside a plugin panel must never replace the\n // captured document selection with the form's own native selection.\n if (!dragging && document.activeElement instanceof Element && document.activeElement.closest('[data-limr-selection-ui]')) return;\n const selection = window.getSelection();\n if (!selection || selection.isCollapsed || !selection.rangeCount) {\n // A toolbar/dialog owns the captured snapshot while it has focus.\n if (!(document.activeElement instanceof Element) || !document.activeElement.closest('[data-limr-selection-ui]')) {\n previous = undefined; runtime.selectionRange = null; runtime.updateInteraction({ selection: null });\n }\n return;\n }\n const range = selection.getRangeAt(0);\n const revision = runtime.document.getSnapshot().revision;\n if (runtime.interaction.get().selection && previous?.startNode === range.startContainer && previous.start === range.startOffset && previous.endNode === range.endContainer && previous.end === range.endOffset && previous.revision === revision && previous.settled === !dragging) return;\n const start = resolve(range.startContainer, range.startOffset, 'start');\n const end = resolve(range.endContainer, range.endOffset, 'end');\n if (!start || !end) { previous = undefined; runtime.selectionRange = null; runtime.updateInteraction({ selection: null }); return; }\n previous = { startNode: range.startContainer, start: range.startOffset, endNode: range.endContainer, end: range.endOffset, revision, settled: !dragging };\n runtime.selectionRange = range.cloneRange();\n runtime.highlightReference = null;\n const options = {\n text: selection.toString(), settled: !dragging,\n quality: (!start.exact || !end.exact ? 'unmapped' : start.atomic || end.atomic ? 'atomic' : 'exact') as SelectionSnapshot['quality'],\n };\n runtime.updateInteraction({ activeHighlight: null, selection: visualSelection(runtime, range, options) ?? selectionFromRange(runtime.document.getSnapshot(), { start: start.offset, end: end.offset }, options) });\n }\n // Coalesce within a frame, never debounce a continuous drag. A resetting\n // timeout can starve updates for the entire gesture on a 60/120 Hz pointer.\n const schedule = () => { if (!frame) frame = requestAnimationFrame(process); };\n const down = () => { dragging = true; };\n const up = () => { dragging = false; schedule(); };\n document.addEventListener('selectionchange', schedule);\n container.addEventListener('pointerdown', down);\n document.addEventListener('pointerup', up);\n document.addEventListener('pointercancel', up);\n document.addEventListener('keyup', schedule);\n if (window.getSelection()?.isCollapsed === false) schedule();\n return () => { cancelAnimationFrame(frame); document.removeEventListener('selectionchange', schedule); container.removeEventListener('pointerdown', down); document.removeEventListener('pointerup', up); document.removeEventListener('pointercancel', up); document.removeEventListener('keyup', schedule); };\n }, [runtime, enabled]);\n}\n","import type { SourceRange } from '../core';\nimport { intersects } from '../core/tree';\nimport type { ReaderRuntime, SourceBinding } from './runtime';\n\nexport interface Leaf {\n node: Text | HTMLElement;\n kind: 'text' | 'marker' | 'inline' | 'block' | 'image';\n range: SourceRange;\n flow: HTMLElement;\n binding?: SourceBinding;\n offset: number;\n}\nexport interface Viewport { top: number; bottom: number; left: number; right: number }\n\nfunction flowOf(element: HTMLElement, container: HTMLElement): HTMLElement {\n const known = element.closest<HTMLElement>('pre,p,figcaption,li,th,td,h1,h2,h3,h4,h5,h6,.limr-choice-text,.limr-definition-title,.limr-question-title,.limr-block-content');\n return known && container.contains(known) ? known : element.closest<HTMLElement>('[data-limr-block]') ?? container;\n}\n\nexport function leavesIn(block: HTMLElement, runtime: ReaderRuntime): Leaf[] {\n runtime.prepareTextBindings(block);\n const result: Leaf[] = [];\n const visit = (node: Node, inherited?: { binding: SourceBinding; offset: number }) => {\n if (node instanceof HTMLElement) {\n if (node !== block && node.hasAttribute('data-limr-document') || node.hasAttribute('inert')) return;\n const marker = node.dataset.limrMarker;\n const atomic = node.dataset.limrAtomic;\n if (marker || atomic) {\n const image = node.dataset.limrMedia === 'image';\n result.push({ node, kind: marker ? 'marker' : image ? 'image' : atomic === 'block' ? 'block' : 'inline', range: { start: Number(node.dataset.sourceStart), end: Number(node.dataset.sourceEnd) }, flow: image ? node : flowOf(node, runtime.content!), offset: 0 });\n return;\n }\n if (node.hasAttribute('data-limr-ignore')) return;\n const binding = runtime.bindings.get(node);\n if (binding) inherited = { binding, offset: 0 };\n }\n if (node.nodeType === Node.TEXT_NODE) {\n const binding = runtime.bindings.get(node) ?? inherited?.binding;\n const offset = runtime.bindings.has(node) ? 0 : inherited?.offset ?? 0;\n const length = node.textContent?.length ?? 0;\n if (binding?.resolve && length) result.push({ node: node as Text, kind: 'text', range: { start: binding.resolve(offset, 'start'), end: binding.resolve(offset + length, 'end') }, flow: flowOf(node.parentElement!, runtime.content!), binding, offset });\n if (inherited) inherited.offset += length;\n return;\n }\n node.childNodes.forEach(child => visit(child, inherited));\n };\n visit(block);\n return result;\n}\n\nexport function textRange(leaf: Leaf, source: SourceRange, viewport?: Viewport): Range | null {\n const node = leaf.node as Text, length = node.length;\n const resolve = leaf.binding!.resolve!;\n // Binary searches preserve decoded entities, surrogate pairs and source gaps.\n let lo = 0, hi = length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (resolve(leaf.offset + mid + 1, 'end') <= source.start) lo = mid + 1; else hi = mid; }\n let start = lo;\n lo = start; hi = length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (resolve(leaf.offset + mid, 'start') < source.end) lo = mid + 1; else hi = mid; }\n if (start === lo) return null;\n let end = lo;\n const range = document.createRange();\n // A single unwrapped text node can contain a book or a large code fence.\n // Bound its native Range before requesting line rectangles.\n if (viewport && end - start > 1024) {\n range.setStart(node, start); range.setEnd(node, end);\n const box = range.getBoundingClientRect();\n if (box.height > viewport.bottom - viewport.top + 80) {\n lo = start; hi = end;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n range.setStart(node, mid); range.setEnd(node, mid + 1);\n if (range.getBoundingClientRect().bottom < viewport.top) lo = mid + 1; else hi = mid;\n }\n start = lo; hi = end;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n range.setStart(node, mid); range.setEnd(node, mid + 1);\n if (range.getBoundingClientRect().top <= viewport.bottom) lo = mid + 1; else hi = mid;\n }\n end = lo;\n }\n }\n if (start === end) return null;\n range.setStart(node, start); range.setEnd(node, end); return range;\n}\n\n/** First rendered character of a source range, independent of its trailing marker. */\nexport function sourceRangeStartRect(runtime: ReaderRuntime, source: SourceRange): DOMRect | null {\n for (const block of runtime.document.getSnapshot().blocks) {\n if (!intersects(block.range, source)) continue;\n const element = runtime.blocks.get(block.id);\n if (!element) continue;\n for (const leaf of leavesIn(element, runtime)) {\n if (leaf.kind === 'marker' || !intersects(leaf.range, source)) continue;\n if (leaf.kind === 'text') {\n const range = textRange(leaf, source);\n if (!range) continue;\n const node = leaf.node as Text, end = range.endOffset;\n // Measure a character rather than the full range: book-length anchors\n // must not create thousands of line rectangles just to locate a card.\n for (let start = range.startOffset; start < end;) {\n const next = Math.min(end, start + (node.data.codePointAt(start)! > 0xffff ? 2 : 1));\n range.setStart(node, start); range.setEnd(node, next);\n const rect = range.getBoundingClientRect();\n if (rect.width && rect.height) return rect;\n start = next;\n }\n } else {\n const node = leaf.node as HTMLElement;\n const rect = (node.querySelector(leaf.kind === 'image' ? 'img' : '[data-limr-selection-surface]') ?? node).getBoundingClientRect();\n if (rect.width && rect.height) return rect;\n }\n }\n }\n return null;\n}\n\n","import type { PaintHighlight } from './runtime';\nimport { useEffect, useRef } from 'react';\nimport type { SourceRange } from '../core';\nimport { intersects } from '../core/tree';\nimport { sameRange } from '../core/annotations';\nimport type { ReaderRuntime } from './runtime';\nimport { leavesIn, textRange, type Leaf, type Viewport } from './source-geometry';\n\ninterface PaintRect { left: number; top: number; width: number; height: number; flow: HTMLElement; marker?: string; atomic?: boolean; image?: boolean; radius?: string }\n\n/** Separate paint from content. Every inline fragment uses its line's typography\n * instead of the (different) code, KaTeX or superscript box height. */\nfunction rectangles(leaves: readonly Leaf[], source: SourceRange, viewport: Viewport, measure: (element: HTMLElement) => { ascent: number; descent: number; height: number }): PaintRect[] {\n const raw: (PaintRect & { baseline: number; flow: HTMLElement })[] = [];\n const geometry = (leaf: Leaf, rect: DOMRect, reference?: { rect: DOMRect; element: HTMLElement }) => {\n const flowMetrics = measure(leaf.flow);\n const own = measure(reference?.element ?? (leaf.kind === 'text' ? leaf.node.parentElement! : leaf.flow));\n const baseline = reference ? reference.rect.top + own.ascent : leaf.kind === 'text' ? rect.top + own.ascent : rect.bottom - flowMetrics.descent;\n return { left: rect.left, top: baseline - flowMetrics.ascent, width: rect.width, height: flowMetrics.height, baseline, flow: leaf.flow };\n };\n const neighbor = (index: number, direction: number): Leaf | undefined => {\n for (let at = index + direction; at >= 0 && at < leaves.length; at += direction) {\n const candidate = leaves[at];\n if (candidate.flow !== leaves[index].flow) return;\n if (candidate.kind === 'text') {\n const value = candidate.node.textContent ?? '';\n if (value.trim()) return candidate;\n // Tokenizers often split the space next to an identifier into its own\n // token. Ignore spaces, but never tint a trailing marker across a line.\n if (!value.includes('\\n')) continue;\n }\n if (candidate.kind !== 'marker') return;\n }\n };\n const edgeRect = (leaf: Leaf, edge: 'first' | 'last') => {\n const node = leaf.node as Text;\n const range = document.createRange();\n const offset = edge === 'first' ? 0 : Math.max(0, node.length - 1);\n range.setStart(node, offset); range.setEnd(node, Math.min(node.length, offset + 1));\n return range.getBoundingClientRect();\n };\n const referenceFor = (index: number, rect: DOMRect) => {\n const left = neighbor(index, -1), right = neighbor(index, 1);\n const candidates = [left && { rect: edgeRect(left, 'last'), element: left.node.parentElement! }, right && { rect: edgeRect(right, 'first'), element: right.node.parentElement! }].filter(value => !!value);\n // Wrapping can put the left neighbor on the previous line. Prefer the\n // baseline on this line, including when a formula starts a mobile line.\n candidates.sort((a, b) => Math.abs(a.rect.bottom - rect.bottom) - Math.abs(b.rect.bottom - rect.bottom));\n const nearest = candidates[0];\n return nearest && Math.abs(nearest.rect.bottom - rect.bottom) < Math.max(rect.height, nearest.rect.height) ? nearest : undefined;\n };\n let first = 0, last = leaves.length;\n // Tokenized code is in visual/source order. Skip offscreen token runs without\n // asking the browser for the geometry of every token on every pointer move.\n if (leaves.length > 80 && leaves[0].flow.tagName === 'PRE' && leaves.at(-1)?.flow === leaves[0].flow) {\n const boxAt = (index: number) => {\n const leaf = leaves[index];\n if (leaf.kind !== 'text') return (leaf.node as HTMLElement).getBoundingClientRect();\n const range = document.createRange(); range.selectNodeContents(leaf.node); return range.getBoundingClientRect();\n };\n let lo = 0, hi = leaves.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (boxAt(mid).bottom < viewport.top) lo = mid + 1; else hi = mid; }\n first = lo; hi = leaves.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (boxAt(mid).top <= viewport.bottom) lo = mid + 1; else hi = mid; }\n last = lo;\n }\n for (let index = first; index < last; index++) {\n const leaf = leaves[index];\n if (leaf.kind === 'marker') {\n const left = neighbor(index, -1), right = neighbor(index, 1);\n // A trailing marker, or a range stopping at the marker, is never tinted.\n if (!left || !right || source.start >= left.range.end || source.end <= right.range.start) continue;\n const rect = (leaf.node as HTMLElement).getBoundingClientRect();\n if (!rect.width || !rect.height || rect.bottom < viewport.top || rect.top > viewport.bottom) continue;\n const item = geometry(leaf, rect, referenceFor(index, rect));\n raw.push({ ...item, marker: (leaf.node as HTMLElement).dataset.limrMarker });\n } else if (intersects(leaf.range, source)) {\n if (leaf.kind === 'text') {\n const range = textRange(leaf, source, viewport);\n const shell = leaf.node.parentElement?.closest<HTMLElement>('[data-limr-inline-syntax]');\n const edges = shell ? Array.from(shell.getClientRects()) : [];\n const css = shell && getComputedStyle(shell);\n for (const rect of range?.getClientRects() ?? []) if (rect.width && rect.height && rect.bottom >= viewport.top && rect.top <= viewport.bottom) {\n const item = geometry(leaf, rect), first = edges[0], last = edges.at(-1);\n // Include code padding only at the source edges whose backticks were\n // absorbed. Partial code selections retain their exact character box.\n if (shell && css && first && source.start <= Number(shell.dataset.sourceStart) && Math.abs(first.top - rect.top) < rect.height && Math.abs(rect.left - first.left - parseFloat(css.paddingLeft)) < 1) {\n item.width += item.left - first.left; item.left = first.left;\n }\n if (shell && css && last && source.end >= Number(shell.dataset.sourceEnd) && Math.abs(last.top - rect.top) < rect.height && Math.abs(last.right - parseFloat(css.paddingRight) - rect.right) < 1) item.width = last.right - item.left;\n raw.push(item);\n }\n } else {\n const element = leaf.node as HTMLElement;\n const surface = leaf.kind === 'image' ? element.querySelector<HTMLImageElement>('img') ?? element : leaf.kind === 'block' ? element.querySelector<HTMLElement>('[data-limr-selection-surface]') ?? element : element;\n const rect = surface.getBoundingClientRect();\n if (!rect.width || !rect.height || rect.bottom < viewport.top || rect.top > viewport.bottom) continue;\n if (leaf.kind === 'block' || leaf.kind === 'image') raw.push({ left: rect.left, top: rect.top, width: rect.width, height: rect.height, atomic: true, image: leaf.kind === 'image', baseline: rect.bottom, flow: leaf.kind === 'image' ? element : surface, radius: getComputedStyle(surface).borderRadius });\n else {\n const item = geometry(leaf, rect, referenceFor(index, rect));\n raw.push({ ...item, atomic: true });\n }\n }\n }\n }\n // All pieces of the same text line share exactly the same top and height.\n const lines = new Map<HTMLElement, Map<number, { baseline: number; top: number; height: number }>>();\n const aligned = raw.map(rect => {\n if (rect.image || rect.atomic && rect.height > measure(rect.flow).height * 1.5) return rect;\n let flow = lines.get(rect.flow);\n if (!flow) { flow = new Map(); lines.set(rect.flow, flow); }\n const key = Math.floor(rect.baseline / 3);\n let line = [flow.get(key), flow.get(key - 1), flow.get(key + 1)].find(line => line && Math.abs(line.baseline - rect.baseline) < 3);\n if (!line) { line = rect; flow.set(key, line); }\n return { ...rect, top: line.top, height: line.height };\n });\n const bridges: PaintRect[] = [];\n for (let i = 1; i < aligned.length; i++) {\n const left = aligned[i - 1], right = aligned[i];\n const gap = right.left - left.left - left.width;\n if (left.flow === right.flow && Math.abs(left.top - right.top) < .5 && gap > .1 && gap < left.height * .6) bridges.push({ left: left.left + left.width, top: left.top, width: gap, height: left.height, flow: left.flow });\n }\n return [...aligned, ...bridges];\n}\n\nexport function SelectionPaint({ runtime, interactive = true }: { runtime: ReaderRuntime; interactive?: boolean }) {\n const layer = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const container = runtime.content, paint = layer.current;\n if (!container || !paint) return;\n let frame = 0;\n let leavesCache = new WeakMap<HTMLElement, Leaf[]>();\n type Metric = { ascent: number; descent: number; height: number };\n let metrics = new WeakMap<HTMLElement, Metric>();\n const fontMetrics = new Map<string, Metric>();\n let blocks: { element: HTMLElement; range: SourceRange; id: string }[] | undefined;\n let snapshot = runtime.document.getSnapshot();\n let lastSelection = runtime.interaction.get().selection;\n let lastDecorations = runtime.decorations.get().byBlock;\n let lastHovered = runtime.interaction.get().hoveredHighlight;\n let lastActive = runtime.interaction.get().activeHighlight;\n let lastAnnotation = runtime.interaction.get().active;\n let lastHoveredAnnotation = runtime.interaction.get().hovered;\n const highlightLayers = new Map<HTMLElement, HTMLSpanElement>();\n let hits: { id: string; rect: { left: number; top: number; width: number; height: number } }[] = [];\n const highlightRects = (id: string) => [...highlightLayers.values()].flatMap(layer => Array.from(layer.children).filter(item => (item as HTMLElement).dataset.paint === id).map(item => item.getBoundingClientRect()));\n const focusedRange = () => {\n const state = runtime.interaction.get(), decorations = runtime.decorations.get();\n return decorations.occurrences.find(item => item.id === state.hovered)?.range\n ?? (state.activeHighlight ? decorations.highlights.get(state.activeHighlight)?.range : undefined)\n ?? decorations.occurrences.find(item => item.id === state.active)?.range;\n };\n const feedback = () => {\n const state = runtime.interaction.get();\n const decorations = runtime.decorations.get();\n const focused = focusedRange();\n for (const layer of highlightLayers.values()) for (const item of layer.children as HTMLCollectionOf<HTMLElement>) {\n item.toggleAttribute('data-hovered', item.dataset.paint === state.hoveredHighlight);\n const highlight = decorations.highlights.get(item.dataset.paint ?? '');\n item.toggleAttribute('data-active', item.dataset.paint === state.activeHighlight || !!focused && !!highlight && sameRange(focused, highlight.range));\n item.toggleAttribute('data-muted', !!highlight?.hidden || !!focused && !!highlight && !sameRange(focused, highlight.range));\n }\n };\n const removeLayer = (host: HTMLElement, layer: HTMLElement) => {\n layer.remove(); delete host.dataset.limrHighlightHost; delete host.dataset.limrHighlightPosition;\n highlightLayers.delete(host);\n };\n const canvas = document.createElement('canvas'), context = canvas.getContext('2d');\n const measure = (element: HTMLElement): Metric => {\n const saved = metrics.get(element); if (saved) return saved;\n const style = getComputedStyle(element), size = parseFloat(style.fontSize), lineHeight = parseFloat(style.lineHeight) || size * 1.5;\n const font = `${style.fontStyle} ${style.fontWeight} ${size}px ${style.fontFamily}`, key = `${font}/${lineHeight}`;\n let metric = fontMetrics.get(key);\n if (!metric) {\n if (context) context.font = font;\n const text = context?.measureText('Mg');\n const ascent = text?.fontBoundingBoxAscent ?? size * .9, descent = text?.fontBoundingBoxDescent ?? size * .25;\n const height = Math.min(ascent + descent, lineHeight - .5);\n metric = { ascent: ascent - Math.max(0, ascent + descent - height) / 2, descent, height };\n fontMetrics.set(key, metric);\n }\n metrics.set(element, metric); return metric;\n };\n const clear = () => {\n if (paint.childNodes.length) paint.replaceChildren();\n for (const [host, layer] of highlightLayers) removeLayer(host, layer);\n hits = [];\n };\n const render = () => {\n cancelAnimationFrame(frame);\n frame = 0;\n const selections = runtime.interaction.get().selection?.raw.ranges ?? [];\n const decorations = runtime.decorations.get().byBlock;\n if (!selections.length && ![...decorations.values()].some(value => value.highlights.length)) { clear(); return; }\n const doc = runtime.document.getSnapshot();\n if (doc !== snapshot) { snapshot = doc; blocks = undefined; }\n if (!blocks) {\n const notes = new Map(doc.blocks.filter(block => block.node.type === 'footnoteDefinition').map(block => [String(block.node.identifier), block]));\n const ordered = [...doc.blocks.filter(block => block.node.type !== 'footnoteDefinition'), ...doc.footnoteOrder.flatMap(id => {\n const block = notes.get(id), node = doc.footnotes.get(id);\n return block ? [block] : node ? [{ id: `${doc.id}-fn-${id}`, range: { start: node.position!.start.offset, end: node.position!.end.offset } }] : [];\n })];\n blocks = ordered.flatMap(block => {\n const element = runtime.blocks.get(block.id);\n return element ? [{ element, range: block.range, id: block.id }] : [];\n });\n }\n const vv = window.visualViewport;\n const viewport: Viewport = { top: vv?.offsetTop ?? 0, bottom: (vv?.offsetTop ?? 0) + (vv?.height ?? window.innerHeight), left: vv?.offsetLeft ?? 0, right: (vv?.offsetLeft ?? 0) + (vv?.width ?? window.innerWidth) };\n const root = runtime.configuration.get().scrollRoot;\n if (root) {\n const box = root.getBoundingClientRect();\n viewport.top = Math.max(viewport.top, box.top + root.clientTop); viewport.bottom = Math.min(viewport.bottom, box.top + root.clientTop + root.clientHeight);\n viewport.left = Math.max(viewport.left, box.left + root.clientLeft); viewport.right = Math.min(viewport.right, box.left + root.clientLeft + root.clientWidth);\n }\n // Top-level reading blocks follow document order. Search the viewport in\n // logarithmic time instead of walking an entire selected document.\n let lo = 0, hi = blocks.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (blocks[mid].element.getBoundingClientRect().bottom < viewport.top - 32) lo = mid + 1; else hi = mid; }\n const origin = container.getBoundingClientRect();\n viewport.top = Math.max(viewport.top, origin.top);\n viewport.bottom = Math.min(viewport.bottom, origin.bottom);\n const scrollLeft = container.scrollLeft, scrollTop = container.scrollTop;\n const output: { rect: PaintRect; task: { id: string; color?: string; style?: PaintHighlight['style']; selection?: boolean } }[] = [];\n const clips = new Map<HTMLElement, { left: number; right: number; top: number; bottom: number }>();\n const clipFor = (flow: HTMLElement) => {\n const saved = clips.get(flow); if (saved) return saved;\n const clip = { ...viewport };\n for (let element: HTMLElement | null = flow; element && element !== container; element = element.parentElement) {\n const css = getComputedStyle(element), box = element.getBoundingClientRect();\n if (/hidden|clip|auto|scroll/.test(css.overflowX)) { clip.left = Math.max(clip.left, box.left + element.clientLeft); clip.right = Math.min(clip.right, box.left + element.clientLeft + element.clientWidth); }\n if (/hidden|clip|auto|scroll/.test(css.overflowY)) { clip.top = Math.max(clip.top, box.top + element.clientTop); clip.bottom = Math.min(clip.bottom, box.top + element.clientTop + element.clientHeight); }\n }\n clips.set(flow, clip); return clip;\n };\n for (let index = lo; index < blocks.length; index++) {\n const block = blocks[index];\n if (block.element.getBoundingClientRect().top > viewport.bottom + 32) break;\n const tasks: { id: string; range: SourceRange; color?: string; style?: PaintHighlight['style']; selection?: boolean }[] = [...decorations.get(block.id)?.highlights ?? []];\n for (const range of selections) if (intersects(range, block.range)) tasks.push({ id: 'selection', range, selection: true });\n if (!tasks.length) continue;\n let leaves = leavesCache.get(block.element);\n if (!leaves) { leaves = leavesIn(block.element, runtime); leavesCache.set(block.element, leaves); }\n for (const task of tasks) {\n const rects = rectangles(leaves, task.range, { ...viewport, top: viewport.top - 32, bottom: viewport.bottom + 32 }, measure);\n for (const rect of rects) {\n const clip = clipFor(rect.flow);\n const left = Math.max(rect.left, clip.left), top = Math.max(rect.top, clip.top);\n const width = Math.min(rect.left + rect.width, clip.right) - left, height = Math.min(rect.top + rect.height, clip.bottom) - top;\n if (width <= 0 || height <= 0) continue;\n output.push({ rect: { ...rect, left: left - origin.left + scrollLeft, top: top - viewport.top, width, height }, task });\n }\n }\n }\n // All reads precede writes. Reuse the small visible pool instead of\n // replacing thousands of spans and forcing layout between measurements.\n // The layer itself is viewport-sized too: a book-sized stacking layer can\n // otherwise cause expensive browser layout, hit testing and pre-paint.\n paint.style.top = `${viewport.top - origin.top + scrollTop}px`;\n paint.style.height = `${Math.max(0, viewport.bottom - viewport.top)}px`;\n // Each text flow is its own stacking context: its paper/background is\n // below the ink, and highlight paint sits between the two. Selection\n // retains its independent foreground layer, including atomic media.\n const hostGeometry = new Map<HTMLElement, { box: DOMRect; top: number; positioned: boolean }>();\n for (const { rect, task } of output) if (!task.selection && !hostGeometry.has(rect.flow)) {\n const host = rect.flow, box = host.getBoundingClientRect();\n hostGeometry.set(host, { box, top: Math.max(viewport.top, box.top) - box.top - host.clientTop + host.scrollTop, positioned: getComputedStyle(host).position !== 'static' });\n }\n const counts = new Map<HTMLElement, number>();\n const nextHits: typeof hits = [];\n output.forEach(({ rect, task }) => {\n let target: HTMLElement = paint, left = rect.left, top = rect.top;\n if (!task.selection) {\n const host = rect.flow, geometry = hostGeometry.get(host)!;\n let layer = highlightLayers.get(host);\n if (!layer) {\n layer = document.createElement('span'); layer.className = 'limr-highlight-layer'; layer.dataset.limrIgnore = 'true'; layer.setAttribute('aria-hidden', 'true');\n host.dataset.limrHighlightHost = 'true';\n if (!geometry.positioned) host.dataset.limrHighlightPosition = 'true';\n host.append(layer); highlightLayers.set(host, layer);\n }\n layer.style.top = `${geometry.top}px`;\n // A layer inside a scrollable formula must not enlarge its scroll area.\n layer.style.height = `${Math.max(0, Math.min(viewport.bottom, geometry.box.bottom) - Math.max(viewport.top, geometry.box.top))}px`;\n target = layer;\n left += origin.left - geometry.box.left - host.clientLeft + host.scrollLeft;\n top += viewport.top - geometry.box.top - host.clientTop + host.scrollTop - geometry.top;\n nextHits.push({ id: task.id, rect: { left: rect.left + origin.left - scrollLeft, top: rect.top + viewport.top, width: rect.width, height: rect.height } });\n }\n const index = counts.get(target) ?? 0; counts.set(target, index + 1);\n const item = target.children[index] as HTMLElement | undefined ?? document.createElement('span');\n const className = `limr-paint-rect limr-paint-${task.selection ? 'selection' : task.style ?? 'background'}`;\n if (item.className !== className) item.className = className;\n item.dataset.paint = task.id;\n if (rect.marker) item.dataset.marker = rect.marker; else delete item.dataset.marker;\n if (rect.atomic) item.dataset.atomic = 'true'; else delete item.dataset.atomic;\n if (rect.image) item.dataset.media = 'image'; else delete item.dataset.media;\n // Assign user colors as a single property, never interpolate CSS text.\n const css = `left:${left}px;top:${top}px;width:${rect.width}px;height:${rect.height}px;border-radius:${rect.radius ?? '0'};`;\n if (item.dataset.geometry !== css) { item.style.cssText = css; item.dataset.geometry = css; }\n if (!task.selection) item.style.setProperty('--limr-highlight', task.color ?? '#F2C744');\n if (!item.parentNode) target.append(item);\n });\n for (const layer of [paint, ...highlightLayers.values()]) while (layer.children.length > (counts.get(layer) ?? 0)) layer.lastChild!.remove();\n for (const [host, layer] of highlightLayers) if (!counts.has(layer)) removeLayer(host, layer);\n hits = nextHits;\n const active = runtime.interaction.get().activeHighlight;\n if (active && !hits.some(hit => hit.id === active)) runtime.clearSelection();\n feedback();\n };\n const schedule = () => { if (!frame) frame = requestAnimationFrame(render); };\n const invalidate = () => { blocks = undefined; metrics = new WeakMap(); schedule(); };\n const fontsChanged = () => { fontMetrics.clear(); invalidate(); };\n const unsubscribers = [runtime.interaction.subscribe(() => {\n const state = runtime.interaction.get(), selection = state.selection;\n if (state.hoveredHighlight !== lastHovered || state.activeHighlight !== lastActive || state.active !== lastAnnotation || state.hovered !== lastHoveredAnnotation) {\n lastHovered = state.hoveredHighlight; lastActive = state.activeHighlight; lastAnnotation = state.active; lastHoveredAnnotation = state.hovered; feedback();\n }\n if (selection === lastSelection) return;\n lastSelection = selection;\n // Selection tracking already runs in rAF: paint in that same frame.\n render();\n }), runtime.decorations.subscribe(() => {\n const decorations = runtime.decorations.get().byBlock;\n if (decorations === lastDecorations) return;\n lastDecorations = decorations; leavesCache = new WeakMap(); schedule();\n }), runtime.layout.subscribe(invalidate), runtime.configuration.subscribe(invalidate)];\n const observer = new MutationObserver(records => {\n let changed = false;\n for (const record of records) {\n const target = record.target instanceof Element ? record.target : record.target.parentElement;\n if (!target || target === paint || paint.contains(target) || target.closest('.limr-highlight-layer')) continue;\n if (record.type === 'childList' && [...record.addedNodes, ...record.removedNodes].every(node => node instanceof Element && node.classList.contains('limr-highlight-layer'))) continue;\n const block = target.closest<HTMLElement>('[data-limr-block]');\n if (block) leavesCache.delete(block); else blocks = undefined;\n changed = true;\n }\n if (changed) { metrics = new WeakMap(); schedule(); }\n });\n observer.observe(container, { subtree: true, childList: true, characterData: true, attributes: true, attributeFilter: ['class', 'style', 'inert', 'open', 'data-limr-theme', 'data-limr-justify'] });\n const scroll = () => { runtime.hoverHighlight(null); schedule(); };\n document.addEventListener('scroll', scroll, { capture: true, passive: true });\n window.visualViewport?.addEventListener('resize', schedule);\n window.visualViewport?.addEventListener('scroll', schedule);\n document.fonts?.addEventListener('loadingdone', fontsChanged);\n const hitAt = (event: MouseEvent) => {\n const element = event.target instanceof Element ? event.target : null;\n if (!element || element.closest('[data-limr-document]') !== container || element.closest('button,input,textarea,select,[contenteditable],[data-limr-ignore]')) return null;\n const focused = focusedRange(), decorations = runtime.decorations.get();\n for (let index = hits.length - 1; index >= 0; index--) {\n const { rect, id } = hits[index];\n const highlight = decorations.highlights.get(id);\n if (highlight?.hidden || focused && highlight && !sameRange(focused, highlight.range)) continue;\n if (event.clientX >= rect.left && event.clientX <= rect.left + rect.width && event.clientY >= rect.top && event.clientY <= rect.top + rect.height) return id;\n }\n return null;\n };\n const move = (event: PointerEvent) => { if (!event.buttons) runtime.hoverHighlight(hitAt(event)); };\n const leave = () => runtime.hoverHighlight(null);\n let down: { x: number; y: number } | null = null;\n const pointerDown = (event: PointerEvent) => { down = { x: event.clientX, y: event.clientY }; };\n const click = (event: MouseEvent) => {\n if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || !down || Math.hypot(event.clientX - down.x, event.clientY - down.y) > 4 || window.getSelection()?.isCollapsed === false) return;\n const id = hitAt(event); if (!id) return;\n event.preventDefault();\n const highlight = runtime.decorations.get().highlights.get(id)!;\n const text: string[] = [];\n let atomic = false;\n // Capture rendered text from the same bindings used by selection. AST\n // fallback alone misses decoded attributes and literal code boundaries.\n for (const block of runtime.document.getSnapshot().blocks) {\n if (!intersects(block.range, highlight.range)) continue;\n const element = runtime.blocks.get(block.id); if (!element) continue;\n const parts: string[] = [];\n for (const leaf of leavesIn(element, runtime)) {\n if (!intersects(leaf.range, highlight.range) || leaf.kind === 'marker') continue;\n if (leaf.kind !== 'text') { atomic = true; continue; }\n const range = textRange(leaf, highlight.range, { top: -Infinity, bottom: Infinity, left: -Infinity, right: Infinity });\n if (range) parts.push(range.toString());\n }\n if (parts.length) text.push(parts.join(''));\n }\n runtime.highlightReference = {\n text: !atomic && text.length ? text.join('\\n\\n') : undefined,\n getClientRects: () => highlightRects(id),\n getBoundingClientRect: () => {\n const rects = highlightRects(id); if (!rects.length) return new DOMRect();\n const left = Math.min(...rects.map(rect => rect.left)), top = Math.min(...rects.map(rect => rect.top));\n return new DOMRect(left, top, Math.max(...rects.map(rect => rect.right)) - left, Math.max(...rects.map(rect => rect.bottom)) - top);\n },\n };\n runtime.activateHighlight(id);\n };\n if (interactive) {\n container.addEventListener('pointermove', move); container.addEventListener('pointerleave', leave);\n container.addEventListener('pointerdown', pointerDown); container.addEventListener('click', click);\n }\n container.dataset.limrPainted = 'true'; schedule();\n return () => { cancelAnimationFrame(frame); observer.disconnect(); unsubscribers.forEach(unsubscribe => unsubscribe()); document.removeEventListener('scroll', scroll, true); window.visualViewport?.removeEventListener('resize', schedule); window.visualViewport?.removeEventListener('scroll', schedule); document.fonts?.removeEventListener('loadingdone', fontsChanged); container.removeEventListener('pointermove', move); container.removeEventListener('pointerleave', leave); container.removeEventListener('pointerdown', pointerDown); container.removeEventListener('click', click); delete container.dataset.limrPainted; clear(); };\n }, [runtime, interactive]);\n return <div ref={layer} className=\"limr-paint-layer\" data-limr-ignore=\"true\" aria-hidden=\"true\" />;\n}\n","import { useRef, type PointerEvent, type ReactNode } from 'react';\nimport { useIsomorphicLayoutEffect } from '../react/context';\n\n/** Keep native wheel/touch/keyboard scrolling, with a thumb outside text flow. */\nexport function OverlayScrollArea({ children, active, resetKey, label }: { children: ReactNode; active: boolean; resetKey?: string; label: string }) {\n const area = useRef<HTMLDivElement>(null);\n const content = useRef<HTMLDivElement>(null);\n const thumb = useRef<HTMLDivElement>(null);\n const track = useRef<HTMLDivElement>(null);\n const drag = useRef<{ pointerId: number; y: number; scroll: number; scale: number } | null>(null);\n const show = useRef<() => void>(() => {});\n\n useIsomorphicLayoutEffect(() => {\n const element = area.current!, wrapper = element.parentElement!;\n delete wrapper.dataset.scrolling;\n if (!active) return;\n element.scrollTop = 0;\n let frame = 0, timeout: ReturnType<typeof setTimeout> | undefined, previous = 0;\n const update = () => {\n frame = 0;\n const height = track.current!.clientHeight;\n const overflow = element.scrollHeight - element.clientHeight;\n const size = Math.min(height, Math.max(20, height * element.clientHeight / Math.max(1, element.scrollHeight)));\n wrapper.toggleAttribute('data-overflow', overflow > 1);\n thumb.current!.style.height = `${size}px`;\n thumb.current!.style.transform = `translateY(${overflow > 0 ? Math.max(0, Math.min(1, element.scrollTop / overflow)) * (height - size) : 0}px)`;\n };\n const schedule = () => { if (!frame) frame = requestAnimationFrame(update); };\n show.current = () => {\n clearTimeout(timeout);\n if (wrapper.closest('[data-motion]')) return;\n wrapper.dataset.scrolling = 'true';\n timeout = setTimeout(() => { if (!drag.current) delete wrapper.dataset.scrolling; }, 800);\n };\n const scroll = () => {\n schedule();\n if (element.scrollTop === previous) return;\n previous = element.scrollTop;\n show.current();\n };\n const observer = new ResizeObserver(schedule);\n observer.observe(element); observer.observe(content.current!);\n element.addEventListener('scroll', scroll, { passive: true });\n update();\n return () => {\n observer.disconnect(); element.removeEventListener('scroll', scroll);\n cancelAnimationFrame(frame); clearTimeout(timeout); drag.current = null;\n show.current = () => {}; delete wrapper.dataset.scrolling;\n };\n }, [active, resetKey]);\n\n const startDrag = (event: PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return;\n const element = area.current!, bar = thumb.current!;\n const travel = track.current!.clientHeight - bar.offsetHeight;\n if (travel <= 0) return;\n event.preventDefault(); event.currentTarget.setPointerCapture(event.pointerId);\n const scale = (element.scrollHeight - element.clientHeight) / travel;\n if (event.target !== bar) element.scrollTop = (event.clientY - track.current!.getBoundingClientRect().top - bar.offsetHeight / 2) * scale;\n drag.current = { pointerId: event.pointerId, y: event.clientY, scroll: element.scrollTop, scale };\n show.current();\n };\n const move = (event: PointerEvent<HTMLDivElement>) => {\n const current = drag.current;\n if (current?.pointerId === event.pointerId) area.current!.scrollTop = current.scroll + (event.clientY - current.y) * current.scale;\n };\n const end = (event: PointerEvent<HTMLDivElement>) => {\n if (drag.current?.pointerId !== event.pointerId) return;\n drag.current = null;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId);\n show.current();\n };\n return <div className=\"limr-overlay-scroll\">\n <div ref={area} className=\"limr-overlay-content\" data-limr-card-body=\"\" tabIndex={0} role=\"region\" aria-label={label}><div ref={content} className=\"limr-overlay-scroll-inner\">{children}</div></div>\n <div ref={track} className=\"limr-overlay-scrollbar\" aria-hidden=\"true\" onPointerDown={startDrag} onPointerMove={move} onPointerUp={end} onPointerCancel={end} onLostPointerCapture={end}>\n <div ref={thumb} className=\"limr-overlay-scroll-thumb\" />\n </div>\n </div>;\n}\n","import type { ReactNode } from 'react';\nimport { useLocale } from '../react/context';\nimport type { AnnotationOverlayCardProps } from '../react/types';\nimport { OverlayScrollArea } from './OverlayScrollArea';\n\nexport interface AnnotationCardProps extends AnnotationOverlayCardProps {\n title: ReactNode;\n /** Accessible name for the scrollable body when the title is rich content. */\n bodyLabel?: string;\n}\n\n/** Optional card layout for modules. The overlay itself renders no header or controls. */\nexport function AnnotationCard({ title, bodyLabel, occurrence, expanded, pinned, canExpand, expand, collapse, close, children }: AnnotationCardProps) {\n const locale = useLocale();\n return <>\n <div className=\"limr-overlay-header\"><span>{title}</span><div className=\"limr-overlay-controls\">\n {expanded ? <button type=\"button\" onClick={collapse}><span className=\"limr-underline\">{locale.collapse}</span></button> : canExpand && <button type=\"button\" onClick={expand}><span className=\"limr-underline\">{locale.expand}</span></button>}\n {pinned && <button type=\"button\" className=\"limr-overlay-close\" onClick={close} aria-label={locale.close}>×</button>}\n </div></div>\n <OverlayScrollArea active resetKey={occurrence.id} label={bodyLabel ?? (typeof title === 'string' ? title : locale.annotations)}>{children}</OverlayScrollArea>\n </>;\n}\n","import { useRef, useState } from 'react';\nimport type { MarkdownNode } from '../core';\nimport { InlineMarker } from '../components/InlineMarker';\nimport { Collapse } from '../components/Collapse';\nimport { useIsomorphicLayoutEffect, useRendererParameter } from '../react/context';\nimport type { NodeRendererProps, RendererExtension } from '../react/types';\n\nexport type TranslationMode = 'origin' | 'translation' | 'both';\nexport interface TranslationsOptions { defaultMode?: TranslationMode }\n\ndeclare module '@linloir/limr' {\n interface RendererParameters {\n /** Overrides every translations block. Undefined restores each block's local mode. */\n translationMode?: TranslationMode;\n /** With a global mode, markers request an update through this callback. */\n onTranslationModeChange?: (mode: TranslationMode) => void;\n }\n}\n\nconst modes: readonly TranslationMode[] = ['origin', 'translation', 'both'];\nconst names = { origin: '原文', translation: '译文', both: '对照' };\n/** Original page, translated page, and parallel pages. All share a rounded pen. */\nfunction TranslationIcon({ mode }: { mode: TranslationMode }) {\n return <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n {mode === 'both' ? <><rect x=\"2.5\" y=\"4\" width=\"8\" height=\"16\" rx=\"2.5\" /><rect x=\"13.5\" y=\"4\" width=\"8\" height=\"16\" rx=\"2.5\" /><path d=\"M5 9h3M5 12h3M16 9h3M16 12h3\" /></> : <><rect x=\"4.5\" y=\"3\" width=\"15\" height=\"18\" rx=\"3\" />{mode === 'origin' ? <path d=\"M8.5 8h7M8.5 12h7M8.5 16h4\" /> : <path d=\"M8 8.5h8M12 6.5v2M14.5 8.5c-.5 4-3 6.5-6.5 8M9.5 11c1.2 2.5 3.2 4.2 6.5 5.5\" />}</>}\n </svg>;\n}\nfunction modeOf(value: unknown, fallback: TranslationMode): TranslationMode {\n return modes.includes(value as TranslationMode) ? value as TranslationMode : fallback;\n}\nfunction section(node: MarkdownNode, name: string): MarkdownNode | undefined {\n // A JSX text element can be wrapped by a Markdown paragraph.\n for (const child of node.children ?? []) {\n if (child.name === name) return child;\n if (child.type === 'paragraph') { const found = section(child, name); if (found) return found; }\n }\n}\n\nexport function translations(options: TranslationsOptions = {}): RendererExtension {\n function Translations({ node, children, renderChildren }: NodeRendererProps) {\n const origin = section(node, 'origin'), translation = section(node, 'translation');\n const [localMode, setLocalMode] = useState<TranslationMode | undefined>();\n const globalMode = useRendererParameter('translationMode');\n const onGlobalChange = useRendererParameter('onTranslationModeChange');\n const requested = modeOf(globalMode ?? localMode ?? node.attributes?.default, options.defaultMode ?? 'origin');\n // Incomplete streaming pairs still show their available content.\n const mode = !origin ? 'translation' : !translation ? 'origin' : requested;\n const next = modes[(modes.indexOf(mode) + 1) % modes.length];\n const marker = useRef<HTMLButtonElement>(null);\n const restoreFocus = useRef(false);\n const locked = globalMode !== undefined && !onGlobalChange;\n useIsomorphicLayoutEffect(() => {\n if (restoreFocus.current) { marker.current?.focus({ preventScroll: true }); restoreFocus.current = false; }\n }, [mode]);\n if (!origin && !translation) return <>{children}</>;\n const toggle = origin && translation ? <InlineMarker ref={marker} data-translation-switch=\"\" data-mode={mode}\n color=\"var(--limr-translation-accent, #6b8fb5)\" disabled={locked}\n label={locked ? `当前${names[mode]},由全局展示模式控制` : `当前${names[mode]},切换到${names[next]}`}\n onClick={() => {\n restoreFocus.current = document.activeElement === marker.current;\n if (globalMode !== undefined) onGlobalChange?.(next);\n else setLocalMode(next);\n }}><TranslationIcon mode={mode} /></InlineMarker> : undefined;\n return <div className=\"limr-translations\" data-mode={mode}>\n {translation && <Collapse open={mode !== 'origin'} keepMounted className=\"limr-translation-panel\" ><div className=\"limr-translation-text\" data-language=\"translation\">\n {renderChildren(translation.children ?? [], { trailing: mode === 'translation' ? toggle : undefined })}\n </div></Collapse>}\n {origin && <Collapse open={mode !== 'translation'} keepMounted className=\"limr-translation-panel\"><div className=\"limr-translation-text\" data-language=\"origin\">\n {renderChildren(origin.children ?? [], { trailing: mode !== 'translation' ? toggle : undefined })}\n </div></Collapse>}\n </div>;\n }\n return {\n name: 'translations', tags: ['translations', 'origin', 'translation'], directives: ['translations', 'origin', 'translation'], display: 'block', scope: 'local',\n parameters: { translationMode: undefined, onTranslationModeChange: undefined },\n components: { translations: Translations, origin: ({ children }) => <>{children}</>, translation: ({ children }) => <>{children}</> },\n };\n}\n","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties } from 'react';\n\nexport interface InlineMarkerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'color'> {\n label: string;\n color?: string;\n}\n\n/** An action-only marker. It does not create an annotation, sidebar card or overlay. */\nexport const InlineMarker = forwardRef<HTMLButtonElement, InlineMarkerProps>(function InlineMarker({ label, color, children, className = '', style, ...props }, ref) {\n return <span className=\"limr-mark-wrap\" data-limr-ignore=\"true\"><button {...props} ref={ref} type=\"button\" aria-label={label} title={props.title ?? label}\n className={`limr-mark limr-action-mark ${className}`} style={{ '--limr-mark-color': color, ...style } as CSSProperties}><span className=\"limr-mark-icon\">{children}</span></button></span>;\n});\n","import { useRef, useState, type ReactNode } from 'react';\nimport { useIsomorphicLayoutEffect } from '../react/context';\n\n/** Keep content mounted through exit, then release loaders and hidden controls. */\nexport function Collapse({ open, children, className = '', keepMounted = false }: { open: boolean; children: ReactNode; className?: string; keepMounted?: boolean }) {\n const [mounted, setMounted] = useState(open);\n const [visible, setVisible] = useState(open);\n const panel = useRef<HTMLDivElement>(null);\n useIsomorphicLayoutEffect(() => {\n // Always-mounted panels can reverse their CSS transition in this render,\n // without a delayed frame or an unmount timer fighting the latest intent.\n if (keepMounted) return;\n if (open) {\n if (!mounted) { setMounted(true); return; }\n // Establish the newly mounted content's collapsed geometry before opening.\n // An interrupted exit can reverse immediately from its current frame.\n panel.current?.getBoundingClientRect();\n setVisible(true);\n return;\n }\n setVisible(false);\n const timer = setTimeout(() => setMounted(false), 420);\n return () => clearTimeout(timer);\n }, [open, keepMounted, mounted]);\n return <div ref={element => { panel.current = element; element?.toggleAttribute('inert', !open); }} className={`limr-collapse ${className}`} data-open={(keepMounted ? open : visible) || undefined} aria-hidden={!open}>\n <div className=\"limr-collapse-inner\">{mounted || keepMounted ? children : null}</div>\n </div>;\n}\n","import { useState } from 'react';\nimport { defineBlock } from './define';\nimport { rangeOf, safeUrl, textContent, walk } from '../core/tree';\nimport { useRuntime } from '../react/context';\nimport type { MarkdownNode } from '../core';\nimport type { NodeRenderer, NodeRendererProps, RendererExtension } from '../react/types';\nimport { Disclosure } from '../components/Disclosure';\nimport { Collapse } from '../components/Collapse';\nimport { DiamondCheck } from '../components/DiamondCheck';\n\nfunction parts(node: MarkdownNode, name: string): MarkdownNode[] {\n const result: MarkdownNode[] = [];\n walk(node, child => { if (child !== node && child.name === name) result.push(child); });\n return result;\n}\nconst PassThrough: NodeRenderer = ({ children }) => <>{children}</>;\nexport function definition(options: { component?: NodeRenderer } = {}): RendererExtension {\n function Definition({ node, children, renderChildren, renderAttribute }: NodeRendererProps) {\n const runtime = useRuntime();\n const title = parts(node, 'title')[0];\n const content = parts(node, 'content')[0];\n return <aside className=\"limr-definition\">\n <div className=\"limr-card-label\" data-limr-ignore=\"true\">{runtime.locale.definition}</div>\n {(title || node.attributes?.title) && <div className=\"limr-definition-title\">{title ? renderChildren(title.children ?? []) : renderAttribute('title')}</div>}\n <div className=\"limr-block-content\">{content ? renderChildren(content.children ?? []) : children}</div>\n </aside>;\n }\n return { ...defineBlock({ name: 'definition', component: options.component ?? Definition }), tags: ['definition', 'title', 'content'], components: { definition: options.component ?? Definition, title: PassThrough, content: PassThrough } };\n}\n\nexport function question(options: { component?: NodeRenderer } = {}): RendererExtension {\n function Question({ node, children, renderChildren, renderAttribute }: NodeRendererProps) {\n const runtime = useRuntime();\n const [showHint, setHint] = useState(false), [showAnswer, setAnswer] = useState(false);\n const [selected, setSelected] = useState<number[]>([]), [checked, setChecked] = useState(false);\n const content = parts(node, 'question-content')[0];\n const hint = parts(node, 'question-hint')[0];\n const answer = parts(node, 'question-answer')[0];\n const group = parts(node, 'question-sel-grp')[0];\n const selections = parts(node, 'question-sel');\n const multi = String(group?.attributes?.multi ?? node.attributes?.multi ?? 'false') === 'true';\n let correct: number[] = [];\n try { const value = JSON.parse(String(group?.attributes?.answer ?? node.attributes?.answer ?? '[]')); correct = (Array.isArray(value) ? value : [value]).map(Number); } catch { /* Missing answers still allow a practice question. */ }\n const success = correct.length === selected.length && correct.every(index => selected.includes(index));\n return <section className=\"limr-question\">\n <div className=\"limr-card-label\" data-limr-ignore=\"true\">{runtime.locale.question}</div>\n {node.attributes?.title && <div className=\"limr-question-title\">{renderAttribute('title')}</div>}\n <div className=\"limr-block-content\">{content ? renderChildren(content.children ?? []) : !selections.length && !hint && !answer ? children : null}</div>\n {selections.length > 0 && <fieldset className=\"limr-question-options\"><legend className=\"limr-sr-only\">{String(node.attributes?.title ?? runtime.locale.question)}</legend>{selections.map((selection, index) => <label key={index} data-selected={selected.includes(index) || undefined} data-result={checked ? correct.includes(index) ? 'correct' : selected.includes(index) ? 'incorrect' : undefined : undefined}>\n <input type={multi ? 'checkbox' : 'radio'} name={`${runtime.document.id}-question-${rangeOf(node).start}`} checked={selected.includes(index)} disabled={checked} onChange={() => { setSelected(multi ? selected.includes(index) ? selected.filter(item => item !== index) : [...selected, index] : [index]); }} />\n <DiamondCheck checked={selected.includes(index) || checked && correct.includes(index)} />\n <span className=\"limr-choice-text\">{renderChildren(selection.children ?? [])}</span>\n </label>)}</fieldset>}\n {selections.length > 0 && correct.length > 0 && <div className=\"limr-question-actions\" data-limr-ignore=\"true\">\n <button type=\"button\" data-checked={checked || undefined} disabled={!checked && !selected.length} onClick={() => {\n if (checked) { setChecked(false); setSelected([]); setAnswer(false); }\n else { setChecked(true); setAnswer(true); }\n }}><span key={checked ? 'retry' : 'submit'} className=\"limr-button-label\">{checked ? runtime.locale.retry : runtime.locale.submit}</span></button>\n <Collapse open={checked}><span role=\"status\" className={`limr-question-result ${success ? 'limr-success' : 'limr-error'}`}>{success ? runtime.locale.correct : runtime.locale.incorrect}</span></Collapse>\n </div>}\n {hint && <Disclosure title={runtime.locale.hint} open={showHint} onChange={setHint}>{renderChildren(hint.children ?? [])}</Disclosure>}\n {answer && <Disclosure title={runtime.locale.answer} open={showAnswer} onChange={setAnswer}>{renderChildren(answer.children ?? [])}</Disclosure>}\n </section>;\n }\n const names = ['question-content', 'question-hint', 'question-answer', 'question-sel-grp', 'question-sel'];\n return { ...defineBlock({ name: 'question', component: options.component ?? Question }), tags: ['question', ...names], components: { question: options.component ?? Question, ...Object.fromEntries(names.map(name => [name, PassThrough])) } };\n}\n\nexport function extras(options: { component?: NodeRenderer } = {}): RendererExtension {\n const Extra: NodeRenderer = ({ node, children, renderAttribute }) => <div className=\"limr-extra\">\n <a className=\"limr-extra-link\" href={safeUrl(node.attributes?.url)} target=\"_blank\" rel=\"noreferrer\"><span className=\"limr-underline\">{renderAttribute(node.attributes?.title ? 'title' : 'url')}</span>\n {node.attributes?.desc && <p><span className=\"limr-underline\">{renderAttribute('desc')}</span></p>}</a>{children}\n </div>;\n const Extras: NodeRenderer = ({ children }) => { const runtime = useRuntime(); return <aside className=\"limr-extras\"><div className=\"limr-card-label\" data-limr-ignore=\"true\">{runtime.locale.extra}</div>{children}</aside>; };\n return { ...defineBlock({ name: 'extras', component: options.component ?? Extras }), tags: ['extras', 'extra'], components: { extras: options.component ?? Extras, extra: Extra } };\n}\n\nexport { video, type VideoOptions } from './video';\n\nexport { figures, type FiguresOptions } from './figures';\n","import type { AnnotationType, NodeRenderer, RendererExtension } from '../react/types';\nimport type { SyntaxExtension } from '../core';\n\nexport interface BlockExtensionOptions {\n name: string;\n component: NodeRenderer;\n tags?: readonly string[];\n directives?: readonly string[];\n selection?: 'content' | 'atomic';\n}\n/** A tag/directive adapter with original source positions and streaming recovery. */\nexport function defineBlock({ name, component, tags = [name], directives = [name], selection = 'content' }: BlockExtensionOptions): RendererExtension {\n return { name, tags, directives, selection, display: 'block', scope: 'local', components: Object.fromEntries([...new Set([...tags, ...directives])].map(tag => [tag, component])) };\n}\nexport function defineAnnotation<T>(type: AnnotationType<T>): RendererExtension {\n return { name: `annotation:${type.type}`, annotationTypes: [type], scope: 'local' };\n}\nexport function defineExtension(extension: RendererExtension): RendererExtension { return extension; }\n","import { useEffect, useState, type ReactNode } from 'react';\nimport { Collapse } from './Collapse';\n\nexport function Disclosure({ title, open, onChange, children }: { title: string; open: boolean; onChange: (open: boolean) => void; children: ReactNode }) {\n const [present, setPresent] = useState(open);\n useEffect(() => {\n if (open) { setPresent(true); return; }\n const timer = setTimeout(() => setPresent(false), 420);\n return () => clearTimeout(timer);\n }, [open]);\n return <details className=\"limr-disclosure\" open={present || open} data-expanded={open || undefined}>\n <summary aria-expanded={open} onClick={event => { event.preventDefault(); onChange(!open); }} data-limr-ignore=\"true\">\n <span className=\"limr-underline\">{title}</span><svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\"><path d=\"m6 8 4 4 4-4\" /></svg>\n </summary>\n <Collapse open={open} keepMounted><div className=\"limr-question-detail\">{children}</div></Collapse>\n </details>;\n}\n","/** The original pointed diamond and center-fill transition, using skin colors. */\nexport function DiamondCheck({ checked }: { checked: boolean }) {\n return <svg className=\"limr-choice-diamond\" width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\" data-limr-ignore=\"true\" data-checked={checked || undefined}>\n <path className=\"limr-diamond-outline\" d=\"M9 1.5L16.5 9L9 16.5L1.5 9Z\" fill=\"none\" />\n <path className=\"limr-diamond-fill\" d=\"M9 5L13 9L9 13L5 9Z\" fill=\"currentColor\" />\n </svg>;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { safeUrl } from '../core/tree';\nimport { useRuntime, useStoreSelector } from '../react/context';\nimport type { NodeRenderer, NodeRendererProps, RendererExtension } from '../react/types';\nimport { CopyButton } from '../components/CopyButton';\nimport { defineBlock } from './define';\n\nexport interface VideoOptions {\n component?: NodeRenderer;\n resolveUrl?: (provider: string, url: string) => string | undefined;\n /** Load near the viewport by default; click and eager are explicit alternatives. */\n loading?: 'visible' | 'click' | 'eager';\n}\nexport function resolveVideo(source: string, provider = 'auto'): { url: string; native: boolean } | undefined {\n const safe = safeUrl(source);\n if (!safe) return;\n let parsed: URL;\n try { parsed = new URL(safe.startsWith('//') ? `https:${safe}` : safe); }\n catch { return provider === 'auto' || provider === 'native' ? { url: safe, native: true } : undefined; }\n if (!['https:', 'http:'].includes(parsed.protocol)) return;\n const youtube = /(?:^|\\.)(?:youtube\\.com|youtube-nocookie\\.com)$/.test(parsed.hostname) || parsed.hostname === 'youtu.be';\n const bilibili = /(?:^|\\.)bilibili\\.com$/.test(parsed.hostname);\n const kind = provider === 'auto' ? youtube ? 'youtube' : bilibili ? 'bilibili' : 'native' : provider;\n if (kind === 'native') return { url: safe, native: true };\n if (kind === 'youtube' && youtube) {\n const id = parsed.hostname === 'youtu.be' ? parsed.pathname.split('/')[1] : parsed.searchParams.get('v') ?? /^\\/(?:embed|shorts|live)\\/([\\w-]+)/.exec(parsed.pathname)?.[1];\n if (id && /^[\\w-]{11}$/.test(id)) {\n const embed = new URL(`https://www.youtube.com/embed/${id}`);\n const time = parsed.searchParams.get('start') ?? parsed.searchParams.get('t');\n if (time) {\n const match = /^(?:(\\d+)h)?(?:(\\d+)m)?(?:(\\d+)s?)?$/.exec(time);\n const seconds = match ? Number(match[1] ?? 0) * 3600 + Number(match[2] ?? 0) * 60 + Number(match[3] ?? 0) : 0;\n if (seconds > 0) embed.searchParams.set('start', String(seconds));\n }\n return { url: embed.href, native: false };\n }\n }\n if (kind === 'bilibili' && bilibili) {\n const id = /\\/video\\/(BV[\\w]+|av\\d+)(?:\\/|$)/.exec(parsed.pathname)?.[1];\n const bvid = id?.startsWith('BV') ? id : parsed.hostname === 'player.bilibili.com' ? parsed.searchParams.get('bvid') : null;\n const aid = id?.startsWith('av') ? id.slice(2) : parsed.hostname === 'player.bilibili.com' ? parsed.searchParams.get('aid') : null;\n if (bvid && /^BV[\\w]+$/.test(bvid) || aid && /^\\d+$/.test(aid)) {\n const embed = new URL('https://player.bilibili.com/player.html');\n embed.searchParams.set(bvid ? 'bvid' : 'aid', bvid || aid!);\n embed.searchParams.set('autoplay', '0'); embed.searchParams.set('high_quality', '1'); embed.searchParams.set('danmaku', '0');\n const part = parsed.searchParams.get('p') ?? parsed.searchParams.get('page');\n if (part && /^[1-9]\\d*$/.test(part)) embed.searchParams.set('page', part);\n return { url: embed.href, native: false };\n }\n }\n}\n\nexport function video(options: VideoOptions = {}): RendererExtension {\n function Video({ node, source: markdown, renderAttribute }: NodeRendererProps) {\n const runtime = useRuntime();\n const scrollRoot = useStoreSelector(runtime.configuration, config => config.scrollRoot);\n const element = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [playing, setPlaying] = useState(false);\n const [failed, setFailed] = useState(false);\n const provider = String(node.attributes?.provider ?? 'auto');\n const source = String(node.attributes?.url ?? node.attributes?.src ?? '');\n const requested = node.attributes?.loading ?? options.loading ?? 'visible';\n const loading = requested === 'click' || requested === 'eager' ? requested : 'visible';\n const resolved = options.resolveUrl?.(provider, source);\n const media = resolved && safeUrl(resolved) ? { url: safeUrl(resolved)!, native: provider === 'native' } : resolveVideo(source, provider);\n useEffect(() => { setFailed(false); setPlaying(false); }, [source, provider]);\n useEffect(() => {\n if (visible || loading !== 'visible' || !element.current) return;\n if (typeof IntersectionObserver === 'undefined') { setVisible(true); return; }\n const observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) { setVisible(true); observer.disconnect(); }\n }, { root: scrollRoot, rootMargin: '200px' });\n observer.observe(element.current);\n return () => observer.disconnect();\n }, [visible, loading, scrollRoot]);\n const enabled = loading === 'eager' || loading === 'visible' && visible || playing;\n const title = String(node.attributes?.title ?? `${provider === 'auto' ? 'Video' : provider} video`);\n const original = safeUrl(source);\n return <div ref={element} className=\"limr-video\" data-limr-selection-surface=\"\" data-loading={loading}>\n <div className=\"limr-video-frame\">\n {!media || failed ? <div className=\"limr-video-error\"><span>{runtime.locale.unavailable}</span>{original && <a href={original} target=\"_blank\" rel=\"noopener noreferrer\">{source}</a>}</div>\n : enabled ? media.native ? <video controls playsInline preload=\"metadata\" src={media.url} aria-label={title} onError={() => setFailed(true)} />\n : <iframe src={media.url} title={title} allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowFullScreen referrerPolicy=\"strict-origin-when-cross-origin\" onError={() => setFailed(true)} />\n : <button type=\"button\" className=\"limr-video-play\" onClick={() => setPlaying(true)} aria-label={runtime.locale.play}><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m8 5 11 7-11 7Z\" fill=\"currentColor\" /></svg></button>}\n </div>\n {node.attributes?.title && <div className=\"limr-video-title\">{renderAttribute('title')}</div>}\n <CopyButton className=\"limr-video-copy\" variant=\"glass\" value={markdown} />\n </div>;\n }\n return defineBlock({ name: 'video', tags: ['video', 'md-video'], component: options.component ?? Video, selection: 'atomic' });\n}\n","import { createContext, useContext, useEffect, useMemo, useRef, useState, type CSSProperties } from 'react';\nimport { safeUrl, type MarkdownNode } from '../core';\nimport { CopyButton } from '../components/CopyButton';\nimport type { NodeRendererProps, RendererExtension } from '../react/types';\nimport { defaultFigureLimits, dimension, figureColumns, figureLimits, figureWidths, type FigureLimits, type FigureMeasure } from './figure-layout';\nimport { useLocale } from '../react/context';\n\nexport interface FiguresOptions {\n minWidth?: number; maxWidth?: number | false;\n minHeight?: number; maxHeight?: number | false;\n columns?: number; rows?: number; responsive?: boolean; gap?: number;\n}\nconst FigureContext = createContext<FigureLimits>(defaultFigureLimits);\nconst captionNode = (node: MarkdownNode) => node.name === 'figcaption' || node.name === 'caption';\nconst flatten = (nodes: readonly MarkdownNode[]) => nodes.flatMap(node => node.type === 'paragraph' && node.children?.some(child => child.name === 'figure' || captionNode(child)) ? node.children : [node]);\nconst identifier = (node: MarkdownNode) => node.attributes?.id ? String(node.attributes.id) : undefined;\nconst ratioOf = (width: unknown, height: unknown) => { const ratio = Number(width) / Number(height); return Number.isFinite(ratio) && ratio > 0 ? ratio : 1; };\n\nexport function figures(options: FiguresOptions = {}): RendererExtension {\n const defaults = figureLimits({ 'min-width': options.minWidth, 'max-width': options.maxWidth, 'min-height': options.minHeight, 'max-height': options.maxHeight });\n function Figures({ node, renderChildren, renderAttribute, source }: NodeRendererProps) {\n const locale = useLocale();\n const nodes = flatten(node.children ?? []);\n const panels = nodes.filter(child => child.name === 'figure');\n const captions = nodes.filter(captionNode);\n const body = nodes.filter(child => !captionNode(child));\n const limits = useMemo(() => figureLimits(node.attributes, defaults), [node.attributes]);\n const grid = useRef<HTMLDivElement>(null);\n const [columns, setColumns] = useState(1);\n const gap = Math.min(100, dimension(node.attributes?.gap, options.gap ?? 16));\n const rows = dimension(node.attributes?.rows, options.rows ?? 0);\n const requested = dimension(node.attributes?.columns ?? node.attributes?.cols, options.columns ?? 0) || (rows > 0 ? Math.ceil(panels.length / rows) : undefined);\n const responsive = String(node.attributes?.responsive ?? options.responsive ?? true) !== 'false';\n useEffect(() => {\n const element = grid.current;\n if (!element) return;\n const measure = () => {\n const elements = [...element.querySelectorAll<HTMLElement>(':scope > .limr-figure')];\n const items: FigureMeasure[] = panels.map((panel, index) => {\n const image = elements[index]?.querySelector('img');\n const ratio = image?.naturalWidth && image.naturalHeight ? image.naturalWidth / image.naturalHeight : ratioOf(panel.attributes?.width, panel.attributes?.height);\n return { ratio, limits: figureLimits(panel.attributes, limits) };\n });\n setColumns(figureColumns(element.clientWidth, items, gap, requested, responsive));\n };\n const observer = new ResizeObserver(measure);\n observer.observe(element); element.addEventListener('load', measure, true); element.addEventListener('error', measure, true); measure();\n return () => { observer.disconnect(); element.removeEventListener('load', measure, true); element.removeEventListener('error', measure, true); };\n }, [node, limits, gap, requested, responsive]);\n return <figure id={identifier(node)} className=\"limr-figures\" data-limr-selection-order=\"visual\" data-columns={columns} data-responsive={responsive}>\n <CopyButton value={source} label={locale.copyFigures} variant=\"glass\" className=\"limr-figures-copy\" />\n <FigureContext.Provider value={limits}><div ref={grid} className=\"limr-figures-grid\" style={{ gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`, gridTemplateRows: rows ? `repeat(${Math.max(1, Math.min(24, Math.floor(rows)))}, auto auto)` : undefined, gap }}>\n {renderChildren(body)}\n </div></FigureContext.Provider>\n {captions.length ? renderChildren(captions) : node.attributes?.caption ? <figcaption>{renderAttribute('caption')}</figcaption> : null}\n </figure>;\n }\n function Figure({ node, renderChildren, renderAttribute }: NodeRendererProps) {\n const locale = useLocale();\n const inherited = useContext(FigureContext);\n const limits = figureLimits(node.attributes, inherited === defaultFigureLimits ? defaults : inherited);\n const media = useRef<HTMLDivElement>(null);\n const [ratio, setRatio] = useState(ratioOf(node.attributes?.width, node.attributes?.height));\n const nodes = flatten(node.children ?? []);\n const captions = nodes.filter(captionNode);\n const body = nodes.filter(child => !captionNode(child));\n useEffect(() => {\n const element = media.current;\n if (!element) return;\n const measure = () => { const image = element.querySelector('img'); if (image?.naturalWidth && image.naturalHeight) setRatio(image.naturalWidth / image.naturalHeight); };\n measure(); element.addEventListener('load', measure, true);\n return () => element.removeEventListener('load', measure, true);\n }, [node]);\n const maximum = figureWidths({ ratio, limits }).maximum;\n return <figure id={identifier(node)} className=\"limr-figure\" data-limr-selection-order=\"visual\" style={{\n '--limr-figure-width': Number.isFinite(maximum) ? `${maximum}px` : '100%',\n '--limr-figure-min-height': `${Math.min(limits.minHeight, limits.maxHeight)}px`,\n '--limr-figure-max-height': Number.isFinite(limits.maxHeight) ? `${limits.maxHeight}px` : 'none',\n } as CSSProperties}>\n <div ref={media} className=\"limr-figure-media\">\n {renderChildren(body)}\n </div>\n <CopyButton onCopy={async () => {\n const url = media.current?.querySelector('img')?.getAttribute('src');\n if (!url) throw new Error('Image URL unavailable');\n await navigator.clipboard.writeText(url);\n }} label={locale.copyImage} variant=\"glass\" className=\"limr-figure-copy\" />\n {captions.length ? renderChildren(captions) : node.attributes?.caption ? <figcaption>{renderAttribute('caption')}</figcaption> : null}\n </figure>;\n }\n const Caption = ({ children }: NodeRendererProps) => <figcaption>{children}</figcaption>;\n return {\n name: 'figures', tags: ['figures', 'figure', 'figcaption', 'caption', 'img'], directives: ['figures', 'figure', 'figcaption'], scope: 'local', display: 'block',\n components: { figures: Figures, figure: Figure, figcaption: Caption, caption: Caption,\n img: ({ node }) => <img src={safeUrl(node.attributes?.src, true)} alt={String(node.attributes?.alt ?? '')} loading=\"lazy\" decoding=\"async\" /> },\n transform(root) {\n // Attribute images retain a source binding just like Markdown images.\n const visit = (node: MarkdownNode) => {\n if (node.type === 'component' && node.name === 'img') { node.selection = 'atomic'; node.inline = true; }\n if (node.type === 'component' && node.name === 'figure' && (node.attributes?.src || node.attributes?.url)) {\n const image = node.attributeNodes?.[node.attributes.src ? 'src' : 'url'];\n node.children = [{ type: 'image', url: node.attributes.src ?? node.attributes.url, alt: node.attributes.alt ?? '', position: image?.position ?? node.position }, ...(node.children ?? [])];\n }\n node.children?.forEach(visit);\n };\n visit(root);\n },\n };\n}\n","export interface FigureLimits {\n minWidth: number;\n maxWidth: number;\n minHeight: number;\n maxHeight: number;\n}\nexport const defaultFigureLimits: Readonly<FigureLimits> = { minWidth: 220, maxWidth: 560, minHeight: 120, maxHeight: 480 };\nexport interface FigureMeasure { ratio: number; limits: FigureLimits }\n\n/** Preserve aspect ratio. Upper limits win if an author's minima conflict. */\nexport function figureWidths({ ratio, limits }: FigureMeasure) {\n const maximum = Math.min(limits.maxWidth, limits.maxHeight * ratio);\n return { maximum, minimum: Math.min(maximum, Math.max(limits.minWidth, limits.minHeight * ratio)) };\n}\n\n/** Add a column only after the existing columns reach their upper bounds and\n * another readable image fits. Manual grids can instead shrink to fit. */\nexport function figureColumns(width: number, items: readonly FigureMeasure[], gap: number, requested?: number, responsive = true): number {\n if (!items.length || width <= 0) return 1;\n const bounds = items.map(figureWidths);\n const fits = (count: number) => {\n const slot = (width - (count - 1) * gap) / count;\n return bounds.every(item => slot >= item.minimum);\n };\n if (requested) {\n let count = Math.max(1, Math.min(24, Math.floor(requested)));\n if (responsive) while (count > 1 && !fits(count)) count--;\n return count;\n }\n const maximum = Math.max(...bounds.map(item => item.maximum));\n const minimum = Math.max(...bounds.map(item => item.minimum));\n let count = 1;\n while (count < items.length && count < 24 && width >= count * maximum + count * gap + minimum && fits(count + 1)) count++;\n return count;\n}\n\nexport function dimension(value: unknown, fallback: number, optional = false): number {\n if (optional && (value === false || value === 'false' || value === 'none')) return Infinity;\n if (typeof value !== 'number' && (typeof value !== 'string' || !/^\\d+(?:\\.\\d+)?(?:px)?$/.test(value))) return fallback;\n const number = typeof value === 'number' ? value : parseFloat(value);\n return Number.isFinite(number) && number >= 0 ? number : fallback;\n}\nexport function figureLimits(attributes: Record<string, unknown> = {}, defaults = defaultFigureLimits): FigureLimits {\n return {\n minWidth: dimension(attributes['min-width'], defaults.minWidth), maxWidth: dimension(attributes['max-width'], defaults.maxWidth, true),\n minHeight: dimension(attributes['min-height'], defaults.minHeight), maxHeight: dimension(attributes['max-height'], defaults.maxHeight, true),\n };\n}\n","import { gfm } from './gfm';\nimport { math } from './math';\nimport { codeHighlight } from './code';\nimport { citation } from './annotations';\nimport { translations } from './translations';\nimport { definition, extras, figures, question, video } from './blocks';\nimport type { RendererExtension } from '../react/types';\n\n/** LiMR's default capabilities. Every item uses the public extension contract. */\nexport function standard(): RendererExtension[] { return [gfm(), math(), codeHighlight(), definition(), question(), extras(), video(), figures(), citation(), translations()]; }\n","import type { SVGProps } from 'react';\n\nexport type ToolIconName = 'eye' | 'eye-off' | 'question' | 'highlight' | 'edit' | 'close' | 'copy' | 'background' | 'underline' | 'dotted' | 'wavy' | 'chevron' | 'check' | 'trash' | 'note' | 'footnote' | 'comment' | 'sparkles';\n\n/** A shared optical grid for the built-in tools and example plugins. */\nexport function ToolIcon({ name, ...props }: SVGProps<SVGSVGElement> & { name: ToolIconName }) {\n return <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.7\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\" {...props}>\n <g transform={name === 'highlight' ? 'translate(0 -1.25)' : name === 'comment' ? 'translate(0 -.5)' : undefined}>\n {(name === 'eye' || name === 'eye-off') && <><path d=\"M3 12s3.3-6 9-6 9 6 9 6-3.3 6-9 6-9-6-9-6Z\" /><circle cx=\"12\" cy=\"12\" r=\"2.7\" />{name === 'eye-off' && <path d=\"m4 4 16 16\" />}</>}\n {name === 'question' && <><circle cx=\"12\" cy=\"12\" r=\"8.5\" /><path d=\"M9.4 9a2.7 2.7 0 0 1 5.2 1c0 1.8-2.6 2-2.6 3.7M12 17h.01\" /></>}\n {name === 'highlight' && <><path d=\"m8 15 7.6-9a2 2 0 0 1 2.8-.2l.8.7a2 2 0 0 1 .2 2.8L12 18l-4-3Z\" /><path d=\"m8 15-2 3 3 1 3-1M4 21h10M14 8l4 3.5\" /></>}\n {name === 'edit' && <><path d=\"m14.5 5.5 4 4M4.5 19.5l4.5-1 11-11a2.1 2.1 0 0 0 0-3 2.1 2.1 0 0 0-3 0l-11 11-1.5 4Z\" /></>}\n {name === 'close' && <path d=\"m6 6 12 12M18 6 6 18\" />}\n {name === 'copy' && <><rect x=\"8.5\" y=\"8\" width=\"10.5\" height=\"12\" rx=\"3\" /><path d=\"M15.5 8V6.8A2.8 2.8 0 0 0 12.7 4H7A3 3 0 0 0 4 7v6a3 3 0 0 0 3 3h1.5\" /></>}\n {['background', 'underline', 'dotted', 'wavy'].includes(name) && <>\n {name === 'background' && <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\" fill=\"currentColor\" fillOpacity=\".13\" stroke=\"none\" />}\n <path d=\"m8 15 3-8a1.05 1.05 0 0 1 2 0l3 8M9.2 12h5.6\" />\n {name === 'background' && <path d=\"M7 19h10\" strokeWidth=\"2.5\" />}\n {name === 'underline' && <path d=\"M5 20h14\" />}\n {name === 'dotted' && <path d=\"M5 20h14\" strokeDasharray=\".1 3.4\" strokeWidth=\"2.4\" />}\n {name === 'wavy' && <path d=\"M4 20c1.3-2 2.7-2 4 0s2.7 2 4 0 2.7-2 4 0 2.7 2 4 0\" />}\n </>}\n {name === 'chevron' && <path d=\"m8 10 4 4 4-4\" />}\n {name === 'check' && <path d=\"m5.5 12 4.2 4.2 8.8-9\" />}\n {name === 'trash' && <><path d=\"M4.5 7h15M9 7V5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2M7 7l.7 12a2 2 0 0 0 2 2h4.6a2 2 0 0 0 2-2L17 7M10 11v6M14 11v6\" /></>}\n {name === 'note' && <><path d=\"M14 3H7a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h10a3 3 0 0 0 3-3V9l-6-6Z\" /><path d=\"M14 3v4a2 2 0 0 0 2 2h4M8 13h8M8 17h5\" /></>}\n {name === 'comment' && <><path d=\"M8 19 4 21V7a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v9a3 3 0 0 1-3 3H8Z\" /><path d=\"M8 9h8M8 13h5\" /></>}\n {name === 'footnote' && <><path d=\"M5 7h9M5 11h12M5 15h8M5 20h14M18 4h2v5\" /><path d=\"M17.5 9h4\" /></>}\n {name === 'sparkles' && <><path d=\"m10.5 4 1.8 4.8 4.7 1.7-4.7 1.8-1.8 4.7-1.7-4.7L4 10.5l4.8-1.7L10.5 4Z\" /><path d=\"m19 15 .8 2.2L22 18l-2.2.8L19 21l-.8-2.2L16 18l2.2-.8L19 15ZM19 3v4M17 5h4\" /></>}\n </g>\n </svg>;\n}\n","import type { CSSProperties } from 'react';\nimport { defaultHighlight, type HighlightData } from '../core';\nimport type { SelectionAction, ToolbarActionContext } from '../react/types';\nimport { ToolIcon } from '../components/ToolIcon';\n\n/** The first five colors match infilearn's reading palette. */\nexport const highlightColors = [\n { color: '#E57373', label: 'Rose', labelZh: '玫瑰' },\n { color: '#F2C744', label: 'Gold', labelZh: '暖黄' },\n { color: '#81B29A', label: 'Sage', labelZh: '鼠尾草' },\n { color: '#6B9BD2', label: 'Blue', labelZh: '雾蓝' },\n { color: '#B39DDB', label: 'Lavender', labelZh: '薰衣草' },\n { color: '#E5A06E', label: 'Apricot', labelZh: '杏橙' },\n { color: '#61AAA5', label: 'Teal', labelZh: '青瓷' },\n] as const;\n\nexport function copyText(options: { label?: string; format?: 'text' | 'raw' | 'syntax' | 'blocks' } = {}): SelectionAction {\n return {\n id: `copy-${options.format ?? 'text'}`, label: options.label ?? (context => context.locale.copy), icon: <ToolIcon name=\"copy\" />,\n successLabel: context => context.locale.copied, successIcon: <ToolIcon name=\"check\" />,\n run: async ({ selection }) => { const format = options.format ?? 'text'; await navigator.clipboard.writeText(format === 'text' ? selection.text : selection[format].sourceText); },\n };\n}\n\nexport interface HighlightOptions {\n colors?: readonly { color: string; label: string; labelZh?: string }[];\n}\nfunction HighlightSettings({ context, options }: { context: ToolbarActionContext; options: HighlightOptions }) {\n const { locale, highlight, highlightAppearance } = context;\n const color = highlightAppearance.color ?? defaultHighlight.color!;\n const style = highlightAppearance.style ?? 'background';\n const styles = [\n ['background', locale.highlightBackground], ['underline', locale.highlightUnderline],\n ['dotted', locale.highlightDotted], ['wavy', locale.highlightWavy],\n ] as const;\n const change = (nextColor: string, nextStyle: HighlightData['style']) => {\n const appearance = { ...highlightAppearance, color: nextColor, style: nextStyle };\n context.setHighlightAppearance(appearance);\n if (highlight) void context.run(current => current.updateAnnotation(highlight.id, { data: appearance }));\n };\n return <div className=\"limr-highlight-settings\">\n <fieldset disabled={context.busy}><legend>{locale.highlightStyle}</legend>\n <div className=\"limr-highlight-styles\">{styles.map(([value, label]) => <button key={value} type=\"button\" aria-pressed={style === value} onClick={() => change(color, value)}><ToolIcon name={value} /><span className=\"limr-underline\">{label}</span></button>)}</div>\n </fieldset>\n <fieldset disabled={context.busy}><legend>{locale.highlightColor}</legend>\n <div className=\"limr-highlight-colors\">{(options.colors ?? highlightColors).map(item => <button key={item.color} type=\"button\" className=\"limr-color-swatch\" aria-label={locale.highlight === '高亮' ? item.labelZh ?? item.label : item.label} title={locale.highlight === '高亮' ? item.labelZh ?? item.label : item.label} aria-pressed={color.toLowerCase() === item.color.toLowerCase()} style={{ '--swatch': item.color } as CSSProperties} onClick={() => change(item.color, style)}><ToolIcon name=\"check\" /></button>)}</div>\n </fieldset>\n </div>;\n}\n\n/** A single swatch owns all style choices; the highlight action never expands. */\nexport function highlightPalette(options: HighlightOptions = {}): SelectionAction {\n return {\n id: 'highlight-palette', label: context => context.locale.editHighlight, icon: <ToolIcon name=\"background\" />, placement: 'start',\n render: context => <button type=\"button\" className=\"limr-toolbar-swatch\" aria-label={context.locale.editHighlight} aria-expanded={context.expanded} disabled={context.busy} onClick={() => context.expanded ? context.collapse() : context.expand()} style={{ '--swatch': context.highlightAppearance.color ?? defaultHighlight.color } as CSSProperties} />,\n renderExpanded: context => <HighlightSettings context={context} options={options} />,\n };\n}\n\nexport function highlightSelection(): SelectionAction {\n return {\n id: 'highlight',\n label: context => !context.highlight ? context.locale.addHighlight : context.highlight.data?.hidden ? context.locale.showHighlight : context.locale.hideHighlight,\n icon: context => <ToolIcon name={!context.highlight ? 'highlight' : context.highlight.data?.hidden ? 'eye' : 'eye-off'} />,\n visible: context => !context.highlight || context.annotations.some(annotation => annotation.type !== 'highlight'),\n run: context => {\n if (context.highlight) context.updateAnnotation(context.highlight.id, { data: { ...context.highlight.data, hidden: !context.highlight.data?.hidden } });\n else {\n context.addAnnotation({ id: `highlight-${crypto.randomUUID()}`, type: 'highlight', data: { ...context.highlightAppearance, hidden: false }, anchors: context.selection.syntax.ranges.map(range => ({ range, documentId: context.document.id, quote: context.document.source.slice(range.start, range.end) })) });\n context.clearSelection();\n }\n },\n };\n}\n\nexport function deleteAnnotations(): SelectionAction {\n return {\n id: 'delete-annotations', label: context => context.locale.deleteAnnotations, icon: <ToolIcon name=\"trash\" />, placement: 'end', tone: 'danger',\n visible: context => context.annotations.length > 0,\n run: context => { context.removeAnnotationsAt([...context.selection.raw.ranges, ...context.selection.syntax.ranges]); context.activateAnnotation(null); context.clearSelection(); },\n };\n}\n"],"mappings":"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","names":["highlights","syntax","useEffect","useRef","useState","createContext","useCallback","useContext","useEffect","useMemo","useRef","useState","result","tokens","useMemo","useRef","useEffect","useRef","useRef","node","element","parts","part","Fragment","jsx","jsxs","definition","mapping","end","start","identifier","index","range","atomic","element","BlockView","useRef","node","useEffect","atomic","ranges","key","useEffect","useEffect","useRef","jsx","first","last","line","useRef","useEffect","layer","atomic","parts","jsx","jsxs","document","useRef","useEffect","useRef","jsx","jsxs","useRef","Fragment","jsx","jsxs","jsx","jsxs","config","useMemo","useRef","useRef","useState","jsx","InlineMarker","useRef","useState","jsx","useState","useRef","Fragment","jsx","jsxs","useState","useRef","useState","useEffect","useState","jsx","jsxs","useState","useEffect","jsx","jsxs","useEffect","useRef","useState","jsx","jsxs","useRef","useState","loading","useEffect","useContext","useEffect","useMemo","useRef","useState","count","defaults","jsx","jsxs","defaults","useMemo","useRef","useState","useEffect","useContext","Fragment","jsx","jsxs","useState","names","jsx","createContext","useEffect","useMemo","useState","useRef","useContext","cache","useCallback","state","jsx","jsxs","useState","useRef","useEffect","jsx","jsxs","syntax","Fragment","jsx","jsxs","jsx","jsxs"]}