@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Linloir
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,198 @@
1
- # Temporary Holding Version
1
+ # LiMR
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **Linloir’s limr Is a Markdown Renderer.**
4
+
5
+ 一个可以独立使用,也可以组合成完整阅读界面的 React Markdown 渲染包。正文、目录、角注和选区使用同一份文档状态,面向长文阅读和 AI 流式输出。
6
+
7
+ ## 使用
8
+
9
+ ```sh
10
+ pnpm add @linloir/limr
11
+ ```
12
+
13
+ ```tsx
14
+ import { Reader } from '@linloir/limr';
15
+ import '@linloir/limr/styles.css';
16
+ import '@linloir/limr/math.css'; // 使用公式时导入;字体随包提供
17
+
18
+ <Reader source={markdown} />
19
+ ```
20
+
21
+ 需要 React 18.3 / 19、现代浏览器和支持 ESM 的构建工具。npm 包名为 `@linloir/limr`;源码可用 `pnpm pack` 构建并生成本地安装包。
22
+
23
+ 只显示正文:
24
+
25
+ ```tsx
26
+ import { Markdown } from '@linloir/limr';
27
+
28
+ <Markdown source={markdown} />
29
+ // source 是持续增长的完整字符串;生成结束时设为 false。
30
+ <Markdown source={answer} streaming={generating} followOutput />
31
+ ```
32
+
33
+ `followOutput` 默认关闭。开启后只在用户保持在底部附近时跟随输出。用户向上阅读时暂停跟随。
34
+
35
+ ## 组件
36
+
37
+ | 组件 | 职责 |
38
+ | --- | --- |
39
+ | `Markdown` | 正文、原文坐标、标题和选区信息;不包含工具菜单 |
40
+ | `DocumentProvider` | 给组合组件提供同一份文档和交互状态 |
41
+ | `Reader` | 开箱即用的响应式组合,窄屏自动使用角注浮层 |
42
+ | `TableOfContents` | 固定标题、自动换行、隐藏滚动条、跟随 active 项 |
43
+ | `AnnotationSidebar` | 与正文角标对齐的卡片、避让、独立列表或自定义定位 |
44
+ | `AnnotationOverlay` | 鼠标预览、点击/触摸展开、键盘退出和焦点恢复 |
45
+ | `SelectionToolbar` | 独立的选区操作和自定义 UI 槽位 |
46
+ | `AnnotationMarkdown` | 在卡片内复用渲染能力,隔离文档和选区作用域 |
47
+
48
+ 例如,在自己的三栏布局里组合:
49
+
50
+ ```tsx
51
+ <DocumentProvider source={markdown}>
52
+ <div className="reading-columns">
53
+ <TableOfContents />
54
+ <Markdown />
55
+ <AnnotationSidebar />
56
+ </div>
57
+ <AnnotationOverlay />
58
+ <SelectionToolbar actions={actions} />
59
+ </DocumentProvider>
60
+ ```
61
+
62
+ `reading-columns` 的样式由应用提供。对齐侧栏和正文应位于**同一个滚动容器**,侧栏保持正常文档流中的相对定位。窗口滚动无需配置;内部滚动容器用 `scrollRoot={element}` 指定。常规布局直接用 `Reader` 即可。详见 [组合和布局约定](docs/api.md#布局和定位)。
63
+
64
+ ## 默认能力与扩展
65
+
66
+ 默认包含 GFM、公式、代码高亮、响应式图片/图组与图注、视频、释义、问题正文区块、拓展阅读、ref 引用和分段译文。每一种特殊语法都是使用公开接口实现的独立模块。`translations` 支持原文、译文与对照,可通过 `parameters.translationMode` 统一控制;[图组与译文语法](docs/extensions.md#图片与论文图组)包含完整示例。
67
+
68
+ **默认角注只有 citation/ref;高亮单独提供。** 提问、注记、聊天等应用角注由插件注册。`question()` 是问题正文区块,与问答角注无关。
69
+
70
+ ```tsx
71
+ import { standard, defineBlock, replaceExtension, codeHighlight } from '@linloir/limr';
72
+
73
+ const extensions = [
74
+ ...replaceExtension(standard(), codeHighlight({ languages: ['typescript', 'python'] })),
75
+ defineBlock({
76
+ name: 'notice',
77
+ component: ({ children }) => <aside className="notice">{children}</aside>,
78
+ }),
79
+ ];
80
+
81
+ <Reader source={'<notice>\n\n**自定义内容**\n\n</notice>'} extensions={extensions} />
82
+ ```
83
+
84
+ 同一模块也支持 `:::notice` 指令语法。`extensions` 是完整的扩展列表;传入 `[]` 得到基础 CommonMark。可以用 `.filter()` 移除默认模块,或 `replaceExtension()` 替换同名模块。保持配置引用稳定,例如在模块外定义或使用 `useMemo`。
85
+
86
+ 安装第三方扩展时,用 `plugins` **追加**到默认模块;样式包通过 CSS 导入和 `appearance` 选择:
87
+
88
+ ```tsx
89
+ import { readingTools } from '@limr-example/reading-tools';
90
+ import '@linloir/limr/styles.css';
91
+ import '@limr-example/paper-theme';
92
+
93
+ const plugins = [readingTools()];
94
+ <Reader source={markdown} plugins={plugins} appearance="paper" />
95
+ ```
96
+
97
+ 这里的两个 `@limr-example` 包是仓库内的可打包示例,尚未发布。实际社区包可以使用同样的结构。见 [扩展打包](docs/extensions.md#作为独立包分发) 和 [样式指南](docs/styles.md)。
98
+
99
+ 常用标签:
100
+
101
+ ```markdown
102
+ <definition title="定义">
103
+
104
+ 支持 **Markdown** 的内容。
105
+
106
+ </definition>
107
+
108
+ 引用一段文字<ref id="paper" />。
109
+
110
+ <citation id="paper" title="论文" url="https://example.com" description="支持 **富文本** 描述。" />
111
+ ```
112
+
113
+ 也支持 `cite-id`、`cite-from-ids`、`desc` 等原有属性。未知 HTML 按原文显示,标签中的 JavaScript 表达式不执行。更多模块和 parser 接口见 [扩展指南](docs/extensions.md)。
114
+
115
+ ## 高亮、选区和应用插件
116
+
117
+ ```tsx
118
+ import { Reader, copyText, highlightPalette, highlightSelection, deleteAnnotations, chinese } from '@linloir/limr';
119
+
120
+ const actions = [
121
+ highlightPalette(),
122
+ highlightSelection(),
123
+ copyText({ label: '复制文字' }),
124
+ copyText({ label: '复制 Markdown', format: 'syntax' }),
125
+ deleteAnnotations(),
126
+ ];
127
+
128
+ <Reader source={markdown} locale={chinese} actions={actions} />
129
+ ```
130
+
131
+ 工具菜单默认提供色块、高亮、复制和删除。悬浮左侧色块可调整颜色与样式,添加高亮直接生效;同一文本片段可以同时拥有高亮、旁注、提问等多个 annotation。高亮统一存为 `type: 'highlight'` 的 annotation,通过 `annotations` / `onAnnotationsChange` 管理。右侧删除操作移除该片段关联的所有 annotation,隐藏高亮则保留注释。上面的 `actions` 可替换默认列表。
132
+
133
+ 选区同时提供 `raw`、`syntax`、`blocks` 三种结果,所有范围都指向**未经改写的原始输入**,使用 UTF-16 偏移、右端不包含。`quality` 区分精确映射、公式等原子节点和无法精确映射的内容。默认高亮和脚注使用 `syntax`,仅吸附选区两端紧邻的标准 Markdown 标记,不扩大未选中的文字,也不吸附特殊块的外层标签。行内及围栏代码支持部分选择、高亮与角标;公式保持整体选择。
134
+
135
+ 插件可以在一个 `defineExtension()` 中提供 `actions`、`annotationTypes` 和语法模块。动作拿到选区、文档、`addAnnotation` / `updateAnnotation` / `activateAnnotation` 等命令和取消信号。卡片可以使用任意 React 组件,也可以用 `AnnotationMarkdown` 持续渲染 Markdown 回答。
136
+
137
+ [助手插件](examples/assistant.tsx) 和 [旁注编辑插件](examples/notes.tsx) 演示了这条路径。运行 `pnpm dev` 后即可在同一 playground 页面选中文字,使用问答、旁注、笔记、提问和脚注;新注释会直接进入桌面侧栏或手机卡片的编辑态。顶部“编辑/保存”切换写作与阅读,返回阅读时保存文本与注释到浏览器。“加载”包含全部预设、已保存文本与文件导入导出,“插件”下拉菜单支持多选。预设包含 Express / Axios README、文学作品及 scikit-learn 原论文的 Markdown 转写,来源与许可随文本保留。流式演示始终使用当前文本,主题切换独立保留。问答示例使用本地模拟传输;实际 Codex 连接、认证、会话管理由应用适配器实现,LiMR 不预设服务端协议。
138
+
139
+ ## 渲染与资源
140
+
141
+ - 流式追加会重新解析尚未稳定的末尾区块,复用前面的区块;后到的引用定义会触发完整语义校正。结束时进行最终完整解析。
142
+ - 自定义 transform 默认按全文处理。只有声明 `scope: 'local'` 且满足局部性约定的模块才参与尾部增量解析。
143
+ - 代码高亮接近视口时加载 Shiki、所需语言和主题;流式代码暂停更新后才重新高亮。公式按需加载 KaTeX。视频点击播放前不请求播放器。
144
+ - 角注数据在卡片显示时才加载,同一阅读器内请求复用、取消和有限缓存;不同阅读器资源隔离。
145
+ - 不注入第三方 CDN。默认样式附带本地 Maple Mono NF CN 代码字体,按字形范围加载 WOFF2 子集,加载前使用系统等宽字体。正文衬线字体使用应用/系统回退,Playground 自行提供 Noto Serif SC。可使用不带字体的 `@linloir/limr/styles/base.css`。缓存和覆盖方式见 [样式指南](docs/styles.md)。
146
+ - 默认保留完整 DOM,支持原生查找、选择和打印;不使用会破坏这些行为的默认虚拟列表。
147
+
148
+ SSR 支持 Node 环境。`renderToString` 中未加载的公式先输出源码回退;如需首次 HTML 包含完整公式,先 `await preloadMath()`,或者使用 React 流式 SSR。Shiki 高亮在客户端补充,代码文本会直接出现在 SSR HTML 中。使用 Next.js 等区分服务端/客户端组件的框架时,在应用的客户端边界内导入这些交互组件。
149
+
150
+ [性能测量](docs/performance.md) 包含数据、等价功能配置和限制。数据针对固定硬件和夹具,不代表所有 Markdown、插件或设备。
151
+
152
+ ## 开发
153
+
154
+ [在线 Playground](https://linloir.github.io/LiMR/)
155
+
156
+ ```sh
157
+ pnpm install
158
+ pnpm dev
159
+ pnpm check
160
+ pnpm exec playwright install chromium
161
+ pnpm test:browser
162
+ NODE_ENV=production pnpm bench
163
+ ```
164
+
165
+ ### npm 发布
166
+
167
+ `pnpm test:package` 会构建并打包当前版本,在独立的 React 18/19 项目中验证类型、SSR、浏览器交互及样式资源,然后将通过验证的安装包保存到 `artifacts/`。
168
+
169
+ ```sh
170
+ pnpm check
171
+ pnpm test:package
172
+ npm login --auth-type=web --registry=https://registry.npmjs.org
173
+ npm publish ./artifacts/linloir-limr-0.1.0.tgz --access public --registry=https://registry.npmjs.org
174
+ ```
175
+
176
+ 发布账号需要拥有 `@linloir` scope 的权限并完成 npm 要求的双重认证。后续发布先更新 `package.json` 的版本,再重新打包,并将命令中的文件名替换为新版本。
177
+
178
+ ### GitHub Pages 预览
179
+
180
+ `main` 保存源码,独立的 `pages` 分支保存 Playground 构建后的静态产物,通过 SSH 推送到 GitHub。`pages` 分支由构建生成,无需手工合并源码。预览地址为 <https://linloir.github.io/LiMR/>。
181
+
182
+ 首次部署在仓库 **Settings → Pages → Build and deployment** 中设置 **Source: Deploy from a branch**、**Branch: pages**、目录 **/(root)**,然后保存。后续推送 `pages` 分支会更新站点。
183
+
184
+ 本地检查与线上相同的 `/LiMR/` 路径:
185
+
186
+ ```sh
187
+ pnpm build:playground
188
+ pnpm preview:playground
189
+ # 打开 http://127.0.0.1:4173/LiMR/
190
+ ```
191
+
192
+ 构建输出为 `demo-dist/`,包含跳过 Jekyll 处理的 `.nojekyll` 文件。更新预览时,重新构建并将该目录的内容提交、推送到 `pages` 分支。`pnpm dev` 仍使用本地根路径。部署到其他仓库名时,需要同步修改两个 Playground 脚本中的 `--base`。
193
+
194
+ 其他入口:`@linloir/limr/core`(无 React/DOM 运行时依赖)、`@linloir/limr/react`、`@linloir/limr/extensions`。详细 props、hooks、受控状态和主题配置见 [API 指南](docs/api.md)。
195
+
196
+ MIT License.
197
+
198
+ Developed with Codex.
@@ -0,0 +1,237 @@
1
+ {
2
+ "date": "2026-10-12T09:32:24.107Z",
3
+ "browser": "156.0.8078.4",
4
+ "measurement": "Synchronous React update plus forced layout, production Vite build. Each trial has an isolated page, font-ready warmup and alternating renderer order. Streaming updates spaced by one animation frame; idle frame time excluded.",
5
+ "results": [
6
+ {
7
+ "sections": 200,
8
+ "renderer": "limr",
9
+ "median": {
10
+ "characters": 87381,
11
+ "updates": 1,
12
+ "totalMs": 126.10000002384186,
13
+ "p95Ms": 126.10000002384186,
14
+ "maxMs": 126.10000002384186,
15
+ "elements": 4002
16
+ },
17
+ "samples": [
18
+ {
19
+ "characters": 87381,
20
+ "updates": 1,
21
+ "totalMs": 124.69999998807907,
22
+ "p95Ms": 124.69999998807907,
23
+ "maxMs": 124.69999998807907,
24
+ "elements": 4002
25
+ },
26
+ {
27
+ "characters": 87381,
28
+ "updates": 1,
29
+ "totalMs": 126.10000002384186,
30
+ "p95Ms": 126.10000002384186,
31
+ "maxMs": 126.10000002384186,
32
+ "elements": 4002
33
+ },
34
+ {
35
+ "characters": 87381,
36
+ "updates": 1,
37
+ "totalMs": 147.5,
38
+ "p95Ms": 147.5,
39
+ "maxMs": 147.5,
40
+ "elements": 4002
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "sections": 200,
46
+ "renderer": "react-markdown",
47
+ "median": {
48
+ "characters": 87381,
49
+ "updates": 1,
50
+ "totalMs": 134,
51
+ "p95Ms": 134,
52
+ "maxMs": 134,
53
+ "elements": 3601
54
+ },
55
+ "samples": [
56
+ {
57
+ "characters": 87381,
58
+ "updates": 1,
59
+ "totalMs": 122.40000003576279,
60
+ "p95Ms": 122.40000003576279,
61
+ "maxMs": 122.40000003576279,
62
+ "elements": 3601
63
+ },
64
+ {
65
+ "characters": 87381,
66
+ "updates": 1,
67
+ "totalMs": 134,
68
+ "p95Ms": 134,
69
+ "maxMs": 134,
70
+ "elements": 3601
71
+ },
72
+ {
73
+ "characters": 87381,
74
+ "updates": 1,
75
+ "totalMs": 142.39999997615814,
76
+ "p95Ms": 142.39999997615814,
77
+ "maxMs": 142.39999997615814,
78
+ "elements": 3601
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "sections": 2000,
84
+ "renderer": "limr",
85
+ "median": {
86
+ "characters": 877782,
87
+ "updates": 1,
88
+ "totalMs": 1345.4000000357628,
89
+ "p95Ms": 1345.4000000357628,
90
+ "maxMs": 1345.4000000357628,
91
+ "elements": 40002
92
+ },
93
+ "samples": [
94
+ {
95
+ "characters": 877782,
96
+ "updates": 1,
97
+ "totalMs": 1337.699999988079,
98
+ "p95Ms": 1337.699999988079,
99
+ "maxMs": 1337.699999988079,
100
+ "elements": 40002
101
+ },
102
+ {
103
+ "characters": 877782,
104
+ "updates": 1,
105
+ "totalMs": 1345.4000000357628,
106
+ "p95Ms": 1345.4000000357628,
107
+ "maxMs": 1345.4000000357628,
108
+ "elements": 40002
109
+ },
110
+ {
111
+ "characters": 877782,
112
+ "updates": 1,
113
+ "totalMs": 1394.199999988079,
114
+ "p95Ms": 1394.199999988079,
115
+ "maxMs": 1394.199999988079,
116
+ "elements": 40002
117
+ }
118
+ ]
119
+ },
120
+ {
121
+ "sections": 2000,
122
+ "renderer": "react-markdown",
123
+ "median": {
124
+ "characters": 877782,
125
+ "updates": 1,
126
+ "totalMs": 1437.5999999642372,
127
+ "p95Ms": 1437.5999999642372,
128
+ "maxMs": 1437.5999999642372,
129
+ "elements": 36001
130
+ },
131
+ "samples": [
132
+ {
133
+ "characters": 877782,
134
+ "updates": 1,
135
+ "totalMs": 1308.1000000238419,
136
+ "p95Ms": 1308.1000000238419,
137
+ "maxMs": 1308.1000000238419,
138
+ "elements": 36001
139
+ },
140
+ {
141
+ "characters": 877782,
142
+ "updates": 1,
143
+ "totalMs": 1437.5999999642372,
144
+ "p95Ms": 1437.5999999642372,
145
+ "maxMs": 1437.5999999642372,
146
+ "elements": 36001
147
+ },
148
+ {
149
+ "characters": 877782,
150
+ "updates": 1,
151
+ "totalMs": 1481.3999999761581,
152
+ "p95Ms": 1481.3999999761581,
153
+ "maxMs": 1481.3999999761581,
154
+ "elements": 36001
155
+ }
156
+ ]
157
+ },
158
+ {
159
+ "sections": 80,
160
+ "stream": true,
161
+ "renderer": "limr",
162
+ "median": {
163
+ "characters": 34860,
164
+ "updates": 138,
165
+ "totalMs": 306.09999972581863,
166
+ "p95Ms": 2.900000035762787,
167
+ "maxMs": 31.099999964237213,
168
+ "elements": 1602
169
+ },
170
+ "samples": [
171
+ {
172
+ "characters": 34860,
173
+ "updates": 138,
174
+ "totalMs": 298.60000014305115,
175
+ "p95Ms": 2.800000011920929,
176
+ "maxMs": 31.80000001192093,
177
+ "elements": 1602
178
+ },
179
+ {
180
+ "characters": 34860,
181
+ "updates": 138,
182
+ "totalMs": 306.09999972581863,
183
+ "p95Ms": 2.900000035762787,
184
+ "maxMs": 31.099999964237213,
185
+ "elements": 1602
186
+ },
187
+ {
188
+ "characters": 34860,
189
+ "updates": 138,
190
+ "totalMs": 317.099999666214,
191
+ "p95Ms": 3,
192
+ "maxMs": 31.600000023841858,
193
+ "elements": 1602
194
+ }
195
+ ]
196
+ },
197
+ {
198
+ "sections": 80,
199
+ "stream": true,
200
+ "renderer": "react-markdown",
201
+ "median": {
202
+ "characters": 34860,
203
+ "updates": 138,
204
+ "totalMs": 1864.100000321865,
205
+ "p95Ms": 23.69999998807907,
206
+ "maxMs": 32.80000001192093,
207
+ "elements": 1441
208
+ },
209
+ "samples": [
210
+ {
211
+ "characters": 34860,
212
+ "updates": 138,
213
+ "totalMs": 1842.2000004649162,
214
+ "p95Ms": 26,
215
+ "maxMs": 27.80000001192093,
216
+ "elements": 1441
217
+ },
218
+ {
219
+ "characters": 34860,
220
+ "updates": 138,
221
+ "totalMs": 1864.100000321865,
222
+ "p95Ms": 23.69999998807907,
223
+ "maxMs": 32.80000001192093,
224
+ "elements": 1441
225
+ },
226
+ {
227
+ "characters": 34860,
228
+ "updates": 138,
229
+ "totalMs": 1893.8000000715256,
230
+ "p95Ms": 22.900000035762787,
231
+ "maxMs": 37.799999952316284,
232
+ "elements": 1441
233
+ }
234
+ ]
235
+ }
236
+ ]
237
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "date": "2026-10-12T09:34:31.373Z",
3
+ "node": "v20.19.5",
4
+ "mode": "production",
5
+ "platform": "linux 6.18.40.1-microsoft-standard-WSL2",
6
+ "cpu": "13th Gen Intel(R) Core(TM) i7-13700",
7
+ "results": [
8
+ {
9
+ "scenario": "static-gfm",
10
+ "characters": 87381,
11
+ "sections": 200,
12
+ "core": {
13
+ "medianMs": 109.32,
14
+ "minMs": 102.73,
15
+ "maxMs": 125.04
16
+ },
17
+ "mdast": {
18
+ "medianMs": 101.78,
19
+ "minMs": 95.3,
20
+ "maxMs": 114.94
21
+ },
22
+ "limrSSR": {
23
+ "medianMs": 123.85,
24
+ "minMs": 123.37,
25
+ "maxMs": 132.6
26
+ },
27
+ "reactMarkdownSSR": {
28
+ "medianMs": 135.8,
29
+ "minMs": 133.71,
30
+ "maxMs": 162.13
31
+ }
32
+ },
33
+ {
34
+ "scenario": "static-gfm",
35
+ "characters": 877782,
36
+ "sections": 2000,
37
+ "core": {
38
+ "medianMs": 2702.76,
39
+ "minMs": 2546.75,
40
+ "maxMs": 6815.28
41
+ },
42
+ "mdast": {
43
+ "medianMs": 2864.73,
44
+ "minMs": 2501.24,
45
+ "maxMs": 4779.01
46
+ },
47
+ "limrSSR": {
48
+ "medianMs": 5508.29,
49
+ "minMs": 2642.18,
50
+ "maxMs": 9102.85
51
+ },
52
+ "reactMarkdownSSR": {
53
+ "medianMs": 2720.7,
54
+ "minMs": 2698.5,
55
+ "maxMs": 5033.33
56
+ }
57
+ },
58
+ {
59
+ "scenario": "streaming-gfm",
60
+ "characters": 34860,
61
+ "chunkSize": 256,
62
+ "updates": 137,
63
+ "incremental": {
64
+ "medianMs": 164.04,
65
+ "minMs": 152.69,
66
+ "maxMs": 175.39
67
+ },
68
+ "fullParse": {
69
+ "medianMs": 2673.74,
70
+ "minMs": 2626.34,
71
+ "maxMs": 2769.29
72
+ }
73
+ }
74
+ ]
75
+ }