@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,310 @@
1
+ import * as react from 'react';
2
+ import { ComponentType, ReactNode, CSSProperties } from 'react';
3
+ import { l as SyntaxExtension, M as MarkdownNode, A as Annotation, b as AnnotationOccurrence, g as HighlightData, k as SourceRange, h as SelectionSnapshot, f as DocumentSnapshot, c as DocumentEngine } from './engine-43u8B4yt.js';
4
+
5
+ interface NodeRendererProps {
6
+ node: MarkdownNode;
7
+ children: ReactNode;
8
+ pending: boolean;
9
+ source: string;
10
+ /** Render an existing subtree without parsing strings again. */
11
+ renderChildren: (nodes: readonly MarkdownNode[], options?: {
12
+ trailing?: ReactNode;
13
+ }) => ReactNode;
14
+ /** Render a literal node value with optional syntax tokens, preserving source
15
+ * selection, highlights and annotation insertion. Token offsets are UTF-16. */
16
+ renderValue: (tokens?: readonly TextToken[]) => ReactNode;
17
+ /** Render a text attribute with source selection, highlights and annotations. */
18
+ renderAttribute: (name: string) => ReactNode;
19
+ }
20
+ interface TextToken {
21
+ content: string;
22
+ offset: number;
23
+ style?: CSSProperties;
24
+ }
25
+ type NodeRenderer = ComponentType<NodeRendererProps>;
26
+ type AnnotationPresentation = 'preview' | 'expanded' | 'sidebar';
27
+ interface AnnotationExpansion {
28
+ /** Grow beside the marker, or center within the page's visual viewport. */
29
+ placement: 'anchor' | 'center';
30
+ /** CSS lengths or pixels. Unset height fits content; centered width defaults to 640px. */
31
+ width?: number | string;
32
+ height?: number | string;
33
+ maxHeight?: number | string;
34
+ }
35
+ interface AnnotationContentProps<T = unknown> {
36
+ annotation: Annotation<T>;
37
+ presentation: AnnotationPresentation;
38
+ expanded: boolean;
39
+ /** Shared editor state, preserved when switching between sidebar and overlay. */
40
+ editing: boolean;
41
+ data: T | undefined;
42
+ loading: boolean;
43
+ error: Error | null;
44
+ retry: () => void;
45
+ }
46
+ /** A compact sidebar summary from local annotation data; rendering it never
47
+ * invokes the annotation's loader. The first annotation owns a grouped preview. */
48
+ interface AnnotationSidebarPreviewProps<T = unknown> {
49
+ annotation: Annotation<T>;
50
+ data: T | undefined;
51
+ occurrence: AnnotationOccurrence;
52
+ annotations: readonly Annotation[];
53
+ referenceText: string;
54
+ }
55
+ /** The registering module owns the entire inside of the floating surface.
56
+ * `children` renders the occurrence's Content components, sharing their cache
57
+ * and preserving their state between preview and expanded presentations. */
58
+ interface AnnotationOverlayCardProps<T = unknown> {
59
+ annotation: Annotation<T>;
60
+ occurrence: AnnotationOccurrence;
61
+ presentation: 'preview' | 'expanded';
62
+ expanded: boolean;
63
+ pinned: boolean;
64
+ canExpand: boolean;
65
+ expand: () => void;
66
+ collapse: () => void;
67
+ close: () => void;
68
+ children: ReactNode;
69
+ }
70
+ interface AnnotationType<T = unknown> {
71
+ type: string;
72
+ label: string;
73
+ icon?: ReactNode | ComponentType;
74
+ color?: string;
75
+ Content?: ComponentType<AnnotationContentProps<T>>;
76
+ Marker?: ComponentType<{
77
+ annotation: Annotation<T>;
78
+ active: boolean;
79
+ }>;
80
+ overlay?: {
81
+ /** Render the full card, including its title, body and controls. */
82
+ Card?: ComponentType<AnnotationOverlayCardProps<T>>;
83
+ /** CSS length or pixels, constrained to the visual viewport. */
84
+ previewWidth?: number | string;
85
+ /** Expansion is opt-in. A resolver may vary the layout per annotation. */
86
+ expand?: false | AnnotationExpansion | ((annotation: Annotation<T>) => false | AnnotationExpansion);
87
+ };
88
+ sidebar?: {
89
+ /** Collapsed summary below the title. Return null or use false to hide it. */
90
+ Preview?: ComponentType<AnnotationSidebarPreviewProps<T>> | false;
91
+ /** Maximum summary lines. Default: 2. */
92
+ previewLines?: number;
93
+ previewColor?: string;
94
+ /** Card accent; defaults to the marker color. CSS colors/variables are accepted. */
95
+ color?: string;
96
+ /** Resting decorative border; defaults to the card accent. */
97
+ borderColor?: string;
98
+ /** Title defaults to the accent; body and excerpt keep the reader text colors. */
99
+ titleColor?: string;
100
+ textColor?: string;
101
+ excerptColor?: string;
102
+ /** Toggle an expanded card by clicking its noninteractive content. Default: false. */
103
+ collapseOnContentClick?: boolean;
104
+ };
105
+ /** Only called when content is displayed; requests share a per-reader cache. */
106
+ load?: (annotation: Annotation<T>, context: {
107
+ signal: AbortSignal;
108
+ }) => Promise<T>;
109
+ }
110
+ interface RendererExtension extends SyntaxExtension {
111
+ /** Register document parameter defaults. Plugins extend RendererParameters
112
+ * through TypeScript declaration merging and read them with useRendererParameter. */
113
+ parameters?: Readonly<RendererParameters>;
114
+ components?: Readonly<Record<string, NodeRenderer>>;
115
+ annotationTypes?: readonly AnnotationType<any>[];
116
+ actions?: readonly SelectionAction[];
117
+ }
118
+ /** Open to module augmentation; parameter names and semantics belong to plugins. */
119
+ interface RendererParameters {
120
+ }
121
+ interface DocumentCommands {
122
+ /** Content annotations get a shared highlight unless explicitly disabled. */
123
+ addAnnotation: (annotation: Annotation, options?: {
124
+ highlight?: HighlightData | false;
125
+ edit?: boolean;
126
+ }) => void;
127
+ updateAnnotation: (id: string, update: Partial<Annotation>) => void;
128
+ removeAnnotation: (id: string) => void;
129
+ /** Remove all annotations bound to these exact fragments, preserving other anchors. */
130
+ removeAnnotationsAt: (ranges: readonly SourceRange[]) => void;
131
+ editAnnotation: (id: string | null) => void;
132
+ /** Open the first occurrence of an annotation, or an explicit occurrence ID. */
133
+ activateAnnotation: (id: string | null) => void;
134
+ }
135
+ interface ActionContext extends DocumentCommands {
136
+ selection: SelectionSnapshot;
137
+ /** Annotations bound to the selected fragment, including its highlight. */
138
+ annotations: readonly Annotation[];
139
+ highlight: Annotation<HighlightData> | null;
140
+ document: DocumentSnapshot;
141
+ locale: LiMRLocale;
142
+ clearSelection: () => void;
143
+ /** Aborted when this reader is disposed, not when its menu closes. */
144
+ signal: AbortSignal;
145
+ }
146
+ interface ToolbarActionContext extends ActionContext {
147
+ busy: boolean;
148
+ expanded: boolean;
149
+ highlightAppearance: HighlightData;
150
+ setHighlightAppearance: (appearance: HighlightData) => void;
151
+ expand: () => void;
152
+ collapse: () => void;
153
+ /** Run a panel operation through the toolbar's busy/error handling. */
154
+ run: (operation: (context: ActionContext) => void | Promise<void>) => Promise<void>;
155
+ }
156
+ interface SelectionAction {
157
+ id: string;
158
+ label: string | ((context: ActionContext) => string);
159
+ /** Required, decorative, ideally a rounded SVG with a square viewBox. */
160
+ icon: NonNullable<ReactNode> | ((context: ActionContext) => ReactNode);
161
+ placement?: 'start' | 'end';
162
+ tone?: 'danger';
163
+ /** Optional transient success feedback after run() resolves. */
164
+ successLabel?: string | ((context: ActionContext) => string);
165
+ successIcon?: ReactNode;
166
+ visible?: (context: ActionContext) => boolean;
167
+ disabled?: (context: ActionContext) => boolean;
168
+ run?: (context: ToolbarActionContext) => void | Promise<void>;
169
+ onHover?: (context: ToolbarActionContext) => void;
170
+ /** Automatically opens on hover; also accessible by keyboard and touch. */
171
+ renderExpanded?: (context: ToolbarActionContext) => ReactNode;
172
+ render?: (context: ToolbarActionContext) => ReactNode;
173
+ }
174
+ interface LiMRLocale {
175
+ contents: string;
176
+ annotations: string;
177
+ expand: string;
178
+ collapse: string;
179
+ close: string;
180
+ copy: string;
181
+ copied: string;
182
+ copyFailed: string;
183
+ copyImage: string;
184
+ copyFigures: string;
185
+ loading: string;
186
+ retry: string;
187
+ unavailable: string;
188
+ footnotes: string;
189
+ definition: string;
190
+ question: string;
191
+ note: string;
192
+ extra: string;
193
+ hint: string;
194
+ answer: string;
195
+ submit: string;
196
+ correct: string;
197
+ incorrect: string;
198
+ play: string;
199
+ highlight: string;
200
+ addHighlight: string;
201
+ editHighlight: string;
202
+ highlightColor: string;
203
+ highlightStyle: string;
204
+ highlightBackground: string;
205
+ highlightUnderline: string;
206
+ highlightDotted: string;
207
+ highlightWavy: string;
208
+ hideHighlight: string;
209
+ showHighlight: string;
210
+ deleteAnnotations: string;
211
+ deleteAnnotationsHint: string;
212
+ }
213
+ interface ViewConfiguration {
214
+ /** Document-wide overrides of parameters registered by extensions. */
215
+ parameters?: Readonly<RendererParameters>;
216
+ extensions?: readonly RendererExtension[];
217
+ /** Add installed plugins to the default extensions (or your extensions list). */
218
+ plugins?: readonly RendererExtension[];
219
+ /** CSS skin name, applied to every view including portalled controls. */
220
+ appearance?: string;
221
+ components?: Readonly<Record<string, NodeRenderer>>;
222
+ annotationTypes?: readonly AnnotationType<any>[];
223
+ annotations?: readonly Annotation[];
224
+ theme?: 'light' | 'dark' | 'auto';
225
+ /** Justify prose paragraphs and list items, leaving the last line start-aligned. */
226
+ justify?: boolean;
227
+ locale?: Partial<LiMRLocale>;
228
+ scrollRoot?: HTMLElement | null;
229
+ scrollOffset?: number;
230
+ onSelectionChange?: (selection: SelectionSnapshot | null) => void;
231
+ onAnnotationClick?: (occurrence: AnnotationOccurrence) => void;
232
+ onAnnotationHover?: (occurrence: AnnotationOccurrence | null) => void;
233
+ onDocumentChange?: (document: DocumentSnapshot) => void;
234
+ onAnnotationsChange?: (annotations: readonly Annotation[]) => void;
235
+ onHighlightHover?: (highlight: Annotation<HighlightData> | null) => void;
236
+ onHighlightClick?: (highlight: Annotation<HighlightData>) => void;
237
+ }
238
+ interface StyledProps {
239
+ className?: string;
240
+ style?: CSSProperties;
241
+ }
242
+
243
+ interface DocumentProviderProps extends ViewConfiguration {
244
+ source?: string;
245
+ streaming?: boolean;
246
+ documentId?: string;
247
+ children: ReactNode;
248
+ }
249
+ declare function DocumentProvider({ children, source, streaming, documentId, ...options }: DocumentProviderProps): react.JSX.Element;
250
+ /** Only the requested value is subscribed; changing a parameter never reparses source. */
251
+ declare function useRendererParameter<K extends keyof RendererParameters>(name: K): RendererParameters[K];
252
+ declare function useDocument(): DocumentSnapshot;
253
+ declare function useDocumentSelector<R>(select: (snapshot: DocumentSnapshot) => R): R;
254
+ declare function useSelection(): SelectionSnapshot | null;
255
+ declare function useAnnotation(id: string): Annotation | undefined;
256
+ declare function useAnnotations(): {
257
+ annotations: ReadonlyMap<string, Annotation<unknown>>;
258
+ occurrences: readonly AnnotationOccurrence[];
259
+ };
260
+ declare function useAnnotationState(): {
261
+ active: string | null;
262
+ hovered: string | null;
263
+ activate: (id: string | null) => void;
264
+ hover: (id: string | null) => void;
265
+ };
266
+ declare function useAnchor(id: string): {
267
+ element: HTMLElement | null;
268
+ rect: DOMRect | null;
269
+ contentRect: DOMRect | null;
270
+ };
271
+ declare function useLiMR(): {
272
+ document: DocumentEngine;
273
+ signal: AbortSignal;
274
+ clearSelection: () => void;
275
+ scrollToHeading: (id: string) => void;
276
+ scrollToAnnotation: (id: string) => void;
277
+ invalidateAnnotation: (id: string) => void;
278
+ addAnnotation: (annotation: Annotation, options?: {
279
+ highlight?: HighlightData | false;
280
+ edit?: boolean;
281
+ }) => void;
282
+ updateAnnotation: (id: string, update: Partial<Annotation>) => void;
283
+ removeAnnotation: (id: string) => void;
284
+ removeAnnotationsAt: (ranges: readonly SourceRange[]) => void;
285
+ editAnnotation: (id: string | null) => void;
286
+ activateAnnotation: (id: string | null) => void;
287
+ };
288
+
289
+ interface MarkdownProps extends Omit<DocumentProviderProps, 'children'>, StyledProps {
290
+ interactive?: boolean;
291
+ /** Follow generated output while the reader remains near the bottom. */
292
+ followOutput?: boolean;
293
+ }
294
+ declare function Markdown({ className, style, interactive, followOutput, justify, ...props }: MarkdownProps): react.JSX.Element;
295
+
296
+ type TranslationMode = 'origin' | 'translation' | 'both';
297
+ interface TranslationsOptions {
298
+ defaultMode?: TranslationMode;
299
+ }
300
+ declare module '@linloir/limr' {
301
+ interface RendererParameters {
302
+ /** Overrides every translations block. Undefined restores each block's local mode. */
303
+ translationMode?: TranslationMode;
304
+ /** With a global mode, markers request an update through this callback. */
305
+ onTranslationModeChange?: (mode: TranslationMode) => void;
306
+ }
307
+ }
308
+ declare function translations(options?: TranslationsOptions): RendererExtension;
309
+
310
+ export { type ActionContext as A, type DocumentCommands as D, type LiMRLocale as L, Markdown as M, type NodeRenderer as N, type RendererExtension as R, type SelectionAction as S, type TextToken as T, type ViewConfiguration as V, type AnnotationContentProps as a, type AnnotationExpansion as b, type AnnotationOverlayCardProps as c, type AnnotationPresentation as d, type AnnotationSidebarPreviewProps as e, type AnnotationType as f, DocumentProvider as g, type DocumentProviderProps as h, type MarkdownProps as i, type NodeRendererProps as j, type RendererParameters as k, type StyledProps as l, type ToolbarActionContext as m, type TranslationMode as n, type TranslationsOptions as o, useAnnotation as p, useAnnotationState as q, useAnnotations as r, useDocument as s, translations as t, useAnchor as u, useDocumentSelector as v, useLiMR as w, useRendererParameter as x, useSelection as y };
package/docs/api.md ADDED
@@ -0,0 +1,161 @@
1
+ # API 与组合约定
2
+
3
+ ## 文档配置
4
+
5
+ `Markdown`、`Reader` 和 `DocumentProvider` 接受以下文档配置。独立 `Markdown source={...}` 创建自己的作用域;放在 Provider 中时用 `<Markdown />` 复用它的文档,每个 Provider 放一个主正文。
6
+
7
+ | 属性 | 默认值 / 含义 |
8
+ | --- | --- |
9
+ | `source` | `''`,未经预处理的 Markdown 字符串 |
10
+ | `streaming` | `false`,追加模式下允许复用稳定区块 |
11
+ | `documentId` | 自动生成且与 SSR hydration 一致;显式传入时应在页面内唯一 |
12
+ | `extensions` | `standard()`,完整扩展列表 |
13
+ | `plugins` | 追加到默认模块或显式 extensions 的第三方扩展 |
14
+ | `parameters` | 模块注册的文档级参数;例如 `{ translationMode: 'both' }`,覆盖各段译文模式 |
15
+ | `appearance` | `classic`;CSS 样式包作用域,包含 portal 浮层 |
16
+ | `components` | 覆盖 AST 节点类型或特殊标签名对应的组件 |
17
+ | `annotationTypes` | 追加或覆盖同 type 的角注显示定义 |
18
+ | `annotations` | 外部控制的 annotation 数组,包括角注与 `type: 'highlight'` 的高亮;不传时由命令维护内部状态 |
19
+ | `onAnnotationsChange` | 受控模式下接收下一份数组,应用负责回传 |
20
+ | `theme` | `light`;也可以是 `dark` / `auto` |
21
+ | `justify` | `false`;开启后段落和列表两端对齐,末行保持起始侧对齐 |
22
+ | `locale` | `english`;可以传 `chinese` 或部分文字覆盖 |
23
+ | `scrollRoot` | 窗口;传入内部滚动容器 DOM 节点可切换 |
24
+ | `scrollOffset` | `24`,标题、页内链接及脚注定位时留出的顶部距离 |
25
+ | `onSelectionChange` | 接收三种选区结果或 `null` |
26
+ | `onAnnotationClick` / `onAnnotationHover` | 接收 occurrence;hover 离开时为 `null` |
27
+ | `onDocumentChange` | 输入或扩展变更后接收新快照 |
28
+
29
+ 数组、扩展和数据对象按不可变数据使用。发生变更时传新对象,静态配置保持引用稳定。更换整篇独立文档时可以给 Provider/Reader 换一个 React `key`,从而清除上篇文章的局部交互和任务。
30
+
31
+ `useRendererParameter(name)` 读取模块通过 `RendererExtension.parameters` 注册的默认值及宿主覆盖,类型由可扩展的 `RendererParameters` 接口提供。参数更新不会重新解析 Markdown。模块可用 `InlineMarker` 注入仅执行操作的角标,再通过 `renderChildren(nodes, { trailing })` 将其放在内容末尾;它与 `Annotation` 的卡片生命周期相互独立。详见[扩展指南](extensions.md#分段译文与全局参数)。
32
+
33
+ `<Reader source={source} justify />`、独立 `<Markdown source={source} justify />` 或 `<DocumentProvider justify>` 均可开启两端对齐;Provider 中的 `<Markdown justify={false} />` 可显式覆盖。开关可动态更新,选区、高亮和侧栏位置随重新排版更新。标题、代码块和表格保留原有对齐方式。
34
+
35
+ `Reader` 额外接受 `toc`、`sidebar`、`fillHeight`(均默认 true)、`sidebarBreakpoint`(默认 1120,按容器宽度判断)、`actions`、`followOutput`、`className`、`style`。`fillHeight` 让短正文补足当前位置到滚动视口底部的可用高度,默认预留 24px;可通过 `--limr-reader-bottom-space` 为页脚留位,或用 `--limr-reader-min-height` 覆盖最小高度。内嵌小卡片可设 `fillHeight={false}`。计算使用滚动坐标中的固定起点,普通滚动不会改变最小高度。`Markdown` 额外接受 `interactive`(默认 true,控制选区监听)、`followOutput` 和样式属性。
36
+
37
+ ## 布局和定位
38
+
39
+ 正文内同页 `#fragment` 链接(包括标准脚注)与目录使用同一个非线性滚动实现,遵守 `scrollRoot`、`scrollOffset` 和减少动态效果设置。滚轮、触摸、指针按下或滚动按键会中断动画;带修饰键、下载及外部链接保持原有行为。目标在当前正文内查找,多个阅读器不会相互跳转。
40
+
41
+ 默认组合约定:目录、正文和侧栏在同一个滚动容器内。正文与阅读区域最小高度共同决定布局,同步侧栏拉伸至所在网格行的高度,卡片在内部绝对定位并裁切溢出,不参与父组件高度计算。保持侧栏和正文处于同一个未缩放的 CSS 坐标系,不额外添加独立滚动或 transform。自定义组合应像下面一样使用同一行的 grid,并给正文提供裁切容器;非 grid 布局需要由宿主给侧栏明确高度。ResizeObserver、图片加载、字体加载及容器变化会重新测量几何;普通滚动使用缓存的标题位置。
42
+
43
+ ```tsx
44
+ const [scrollRoot, setScrollRoot] = useState<HTMLDivElement | null>(null);
45
+
46
+ <div ref={setScrollRoot} style={{ height: '80vh', overflowY: 'auto' }}>
47
+ <DocumentProvider source={source} scrollRoot={scrollRoot}>
48
+ <div style={{ display: 'grid', gridTemplateColumns: '180px minmax(0,1fr) 260px', gap: 24, alignItems: 'start' }}>
49
+ <TableOfContents style={{ position: 'sticky', top: 0, maxHeight: '75vh' }} />
50
+ <main className="limr-reader-content" style={{ alignSelf: 'stretch', overflow: 'clip' }}><Markdown /></main>
51
+ <AnnotationSidebar />
52
+ </div>
53
+ <SelectionToolbar actions={actions} />
54
+ </DocumentProvider>
55
+ </div>
56
+ ```
57
+
58
+ 同步侧栏没有独立滚动条,也不接受滚轮、触摸或聚焦引起的列表滚动。悬浮正文角标时移动侧栏;悬浮侧栏卡片时锁住当前卡片的命中位置,在边界允许时让正文平滑位移至关联位置。其他条目根据实际高度重新排列,收起时无需移开鼠标就会归位。正文位移不改变布局高度,测量锚点时扣除动画中的实时位移,避免位置反馈循环。展开/收起保留交互来源与 hover;点击空白处清除卡片与角标的激活状态并恢复正文位置,Esc 收起并把焦点还给角标。长回答的正文仍可在卡片内滚动,隐藏原生滚动条,卡片高度受侧栏整体可用高度限制。
59
+
60
+ 在独立抽屉等场景使用 `<AnnotationSidebar sync="none" />`。它保留正常列表流,不读取正文的对齐位置,也展示没有锚点的角注,宿主自行约束高度与滚动。`positioner(items, {activeId, gap, height})` 可以替换同步侧栏的对齐算法;items 含 occurrence ID、相对侧栏的关联文本起始行顶部(`anchorTop`)和卡片高度,`height` 是可用侧栏高度(尚未测量时为 undefined),返回 ID 到顶部距离的 Map。绑定文本范围的脚注按片段第一个可见字符所在行对齐,末尾角标位置不变;内嵌引用等仅有角标的脚注按角标对齐。默认优先对齐 hover/激活条目;无激活条目时跟随正文当前阅读位置。空间足够时,末尾卡片向上借用留白,所有卡片保持顺序和间隔并完整显示;容纳不下时优先保留当前卡片,其他条目允许越过边界并渐隐。边界处优先保证卡片可见,不为精确对齐强行平移正文。
61
+
62
+ `renderCard({occurrence, active, activate})` 替换侧栏卡片外壳;单个角注的内容通常通过 `AnnotationType.Content` 替换。需要完全自主的布局时,用 `useAnchor(occurrenceId)` 获得实时角标元素、视口矩形和正文矩形,再自行放置组件。
63
+
64
+ `AnnotationOverlay` 接受 `disabled`、`portalRoot`、`previewWidth`(340)和 `maxHeight`(`80dvh`,模块未指定展开上限时使用)。浮层默认通过 portal 放入 body。模块通过 `overlay.Card` 渲染完整卡片,通过 `overlay.previewWidth` 和 `overlay.expand` 声明预览宽度、展开能力及布局;LiMR 管理挂载、位置、焦点和动画。预览贴近角标,展开可以原地增高或在整个页面的可视区域居中。默认 Citation 不展开,点击会固定预览。模块可配置尺寸或按 annotation 动态返回策略,详见[扩展指南](extensions.md)。所有模式均支持触摸、Esc、外部点击关闭和焦点恢复,居中模式另有遮罩与焦点约束。打开时焦点落到对话框容器,Tab 再进入模块提供的控件。高 z-index 宿主可覆盖 `--limr-overlay-z` / `--limr-toolbar-z`。
65
+
66
+ `AnnotationCard` 是模块可选用的默认卡片布局,接收 `AnnotationOverlayCardProps` 以及必填的 `title: ReactNode`、可选的 `bodyLabel`。它提供标题栏、展开/收起/关闭按钮和滚动区域;模块也可以完全自行渲染这些部分。旧模块只提供 `Content` 时仍可使用兼容布局,其标题来自类型的 `label`。
67
+
68
+ `TableOfContents` 接受 `title`、`maxDepth`、`followActive`、`topInset`(24)、`updateHash`(false)和样式属性。独立使用时给它或父容器设定可用高度。标题位于滚动区之外;列表上下仅在实际溢出时渐隐,默认跟随留白让当前章节位于渐隐区之外。手动滚动目录会短暂暂停自动跟随;页面底部将最后一个标题视为 active。
69
+
70
+ `Reader` 的宽屏目录自动适配窗口或 `scrollRoot` 的可用高度。正文滚到末尾及页脚出现时,目录外框保持吸顶,只有内部列表滚动;目录不会撑高正文或增加页面滚动范围。整个 Reader 离开可视区域后,目录隐藏且不可聚焦,避免覆盖后续页面内容。playground 使用同一默认布局。
71
+
72
+ `Reader` 的窄屏目录使用整行按钮,右侧箭头随展开状态旋转。目录内容持续挂载,展开/收起从当前高度连续过渡,快速点击可随时反转;隐藏内容不可获得焦点。
73
+
74
+ ## 角注数据与命令
75
+
76
+ ```tsx
77
+ const [annotations, setAnnotations] = useState<Annotation[]>([
78
+ {
79
+ id: 'paper',
80
+ type: 'citation',
81
+ data: { title: '论文', url: 'https://example.com', description: '**摘要**' },
82
+ anchors: [{ range: { start: 10, end: 18 }, quote: original.slice(10, 18) }],
83
+ },
84
+ ]);
85
+
86
+ <Reader source={original} annotations={annotations} onAnnotationsChange={setAnnotations} />
87
+ ```
88
+
89
+ 一个 annotation 可包含多个 anchors;一个嵌入式 `<ref ids="a,b" />` occurrence 可显示多个 annotation。单个锚点可以用 `range` 简写。范围采用 UTF-16 偏移、右端不包含。可加 `documentId` / `revision` 验证所属文档和版本。持久化时推荐保存 `quote`:原范围失配时只接受唯一的同文匹配,歧义或找不到时不猜测位置。LiMR 不负责协同编辑中的锚点变换;复杂编辑场景由应用更新范围。
90
+
91
+ `useLiMR()` 提供:
92
+
93
+ - `addAnnotation(annotation, { highlight?, edit? })`、`updateAnnotation(id, patch)`、`removeAnnotation(id)`。
94
+ - `removeAnnotationsAt(ranges)`:删除与这些原文范围完全匹配的绑定,保留 annotation 的其他 anchors。
95
+ - `editAnnotation(id | null)`:进入指定 annotation 的编辑态并激活;传 null 结束编辑。
96
+ - `activateAnnotation(annotationIdOrOccurrenceId | null)`、`scrollToAnnotation(occurrenceId)`、`clearSelection()`。
97
+ - `scrollToHeading(headingId)`、`invalidateAnnotation(id)`。
98
+ - `document`:底层 `DocumentEngine`,可读取/订阅快照;`signal` 随阅读器卸载而取消。
99
+
100
+ 脚注、旁注、笔记、提问与高亮都使用 `Annotation`,通过同一组命令绑定原文。添加有锚点的内容 annotation 时,默认同时创建或复用该片段的高亮;传 `highlight: false` 可跳过,传 `HighlightData` 可指定外观。`edit: true` 同时激活并进入编辑态,模块的 `Content` 通过 `editing` 决定显示表单。编辑草稿由模块管理,建议存入 annotation data,以便跨侧栏/浮层切换时保留。
101
+
102
+ 高亮格式为 `{ id, type: 'highlight', anchors, data: { color?, style?, hidden? } }`,也支持 `range` 简写。`HighlightData.style` 支持 `background`、`underline`、`dotted`、`wavy`,默认背景色。高亮不产生角标和侧栏条目;`hidden` 只隐藏装饰,保留绑定。激活一个 annotation 时,其他片段的高亮暂时隐藏,结束激活后恢复。
103
+
104
+ 语义范围保留在 React 节点中;装饰绘制层独立维护,不拆分或替换正文的文字 DOM。高亮绘制在文字后方,重叠时后添加的高亮优先命中。`updateAnnotation` 保留 ID 和叠放顺序,`addAnnotation` 替换同 ID 时会将它移到顶层。`onHighlightHover(annotation | null)` 和 `onHighlightClick(annotation)` 接收 `Annotation<HighlightData>`。点击高亮会打开工具栏,`context.highlight` 指向该 annotation,`context.annotations` 包含该片段的全部 annotation,`context.selection` 表示它的原文范围。
105
+
106
+ ## 选区和动作
107
+
108
+ `useSelection()` 与 `onSelectionChange` 返回同一结构:
109
+
110
+ | 字段 | 意义 |
111
+ | --- | --- |
112
+ | `text` | 浏览器选中的可见文本 |
113
+ | `raw` | 映射到原始输入的范围与原文 |
114
+ | `syntax` | 两端分别吸附紧邻的标准 Markdown 标记,忽略间隙空白;不增加未选中的普通文字 |
115
+ | `blocks` | 所在的完整段落、标题、列表项等区块,可含多个范围 |
116
+ | `quality` | `exact`、`atomic` 或 `unmapped` |
117
+ | `settled` | 拖动调整选区时为 false |
118
+ | `documentId` / `revision` | 选区对应的文档版本 |
119
+
120
+ `syntax` 不扩展普通文本。开头只吸附该侧紧邻的起始标记,结尾只吸附结束标记,嵌套标记逐层吸附。例如从 `***first word***` 选择 `first` 得到 `***first`,选择 `word` 得到 `word***`,选择中间的 `st wo` 则不变。列表、标题、强调、链接、代码和公式使用同一规则;自定义语法块的内部 Markdown 正常处理,外层标签或指令围栏不参与吸附。
121
+
122
+ 公式、图片属于原子节点,浏览器选区映射得到的 `raw` 已覆盖整个节点,并标为 `atomic`。行内代码及围栏代码支持部分选择,只有选到对应内容边界时 `syntax` 才吸附该侧定界符。默认高亮、笔记、提问和助手插件使用 `syntax.ranges` 创建 annotation;原始 Annotation API 仍精确保留调用者传入的范围。完整覆盖行内代码的高亮包含两端留白;吸附了结束标记的脚注位于格式节点外,代码中间的脚注仍跟随精确字符位置。
123
+
124
+ 自定义组件应渲染提供的 `children` / `renderChildren` / `renderValue` 来保留正文映射,或声明原子选择。生成的 UI 文字不应冒充原文;可加 `data-limr-ignore` 排除按钮和标签。
125
+
126
+ `Reader` 和 `SelectionToolbar` 默认提供 `highlightPalette()`、`highlightSelection()`、`copyText()`、`deleteAnnotations()`,并追加插件动作。显式 `actions` 替换默认列表,按 ID 覆盖插件同名动作;`actions={[]}` 只去掉内置动作,插件动作仍保留。`Markdown` 不挂载菜单,需要应用自行提供 `SelectionToolbar`。
127
+
128
+ `SelectionAction` 必须提供 `id`、`label`、`icon`。`label` 和 `icon` 可通过 `(context) => …` 动态生成。可选字段为 `visible`、`disabled`、`run`、`onHover`、`renderExpanded` 和 `render`。`placement: 'start' | 'end'` 控制两端顺序,`tone: 'danger'` 表示删除类操作。`successLabel` / `successIcon` 在动作成功后显示 2.4 秒,默认原位淡出淡入。建议使用圆润、居中、方形 viewBox 的 SVG;骨架通过固定图标槽统一大小,内置 `ToolIcon` 可用于插件。
129
+
130
+ `run(context)` 支持 async,错误在菜单中显示。`ToolbarActionContext` 包含选区、文档快照、`annotations`、`highlight`、`locale`、文档命令和 `signal`,以及 `busy`、`expanded`、`expand()`、`collapse()`、`run(operation)`。`highlightAppearance` / `setHighlightAppearance()` 管理下一次创建高亮的外观,工具栏中的 `addAnnotation` 会沿用它。这个 signal 的生命期是阅读器,关闭菜单不会中止已开始的请求,卸载会取消。展开面板里的异步操作应使用 `context.run(...)`,复用忙碌状态和错误处理。
131
+
132
+ `renderExpanded(context)` 返回插件自己的面板;悬浮动作自动展开,没有独立的展开指示器。未配置 `run` 时点击动作切换展开;有 `run` 时可自行调用 `expand()`,触屏也使用同一个按钮。聚焦动作后按上下方向键展开并进入面板。`onHover(context)` 可补充悬浮行为。面板可放输入框、颜色或样式选择器,输入时保留选区快照。Escape 先收起面板并归还焦点,再次按下关闭工具栏;左右方向键在工具之间移动。`render(context)` 保留完整自定义单项槽位,`SelectionToolbar render={...}` 可接管整个工具条,这两种完全自绘入口的控件、图标与可访问性由调用方负责。
133
+
134
+ 骨架优先在选区下方显示,并预留统一的展开预算;下方不足时选择空间较多的一侧。`SelectionToolbar.maxPanelHeight` 默认 260px,可由 `--limr-toolbar-panel-max-height` 覆盖。实际可用高度通过 `--limr-toolbar-panel-height` 传给面板,正文宽度通过 `--limr-toolbar-panel-width` 控制。骨架负责按内容溢出显示不占布局宽度的 3px 滚动条,插件按正常文档流响应式排版即可,无需再包一层滚动容器。面板不足最大高度时随内容收缩。
135
+
136
+ `highlightPalette({ colors? })` 的色块面板提供七种默认颜色和四种高亮样式,不显示预览文本。`highlightColors` 导出默认色板;`colors` 为 `{ color, label, labelZh? }[]`。`highlightSelection()` 直接添加高亮;只有高亮时隐藏该按钮,有其他注释时变为隐藏/显示高亮。颜色和样式对已有高亮即时应用。`deleteAnnotations()` 删除当前片段的全部绑定,超过一个非高亮 annotation 时,仅悬浮或键盘聚焦删除按钮才展开红色说明,计数不包含高亮。受控 `annotations` 要提供 `onAnnotationsChange` 才能接受修改。
137
+
138
+ ## 状态 hooks 和 core
139
+
140
+ `useDocument()` 获取源文档快照;`useAnnotation(id)` 和 `useAnnotations()` 获取合并了源文档、外部数据和插件新增内容的角注数据,后者返回 annotations Map 与 occurrences 数组;`useDocumentSelector(select)` 只订阅选择出的值;`useAnnotationState()` 获取 active/hovered occurrence 和修改方法;`useAnchor(id)` 获取定位信息。频繁变化的布局、滚动、选区和文档使用不同订阅通道。
141
+
142
+ ```ts
143
+ import { createDocument, selectionFromRange } from '@linloir/limr/core';
144
+
145
+ const engine = createDocument('', { streaming: true });
146
+ const unsubscribe = engine.subscribe(() => consume(engine.getSnapshot()));
147
+ engine.append('# Heading\n\n');
148
+ engine.append('Content');
149
+ engine.finish();
150
+ unsubscribe();
151
+ ```
152
+
153
+ core 默认仅 CommonMark,不依赖 React、DOM 或浏览器全局。需要 GFM 等能力时传入对应的语法扩展。`setExtensions()` 会重新解析全文。`metrics` 提供本次重新解析的字符数、复用区块数和原因;它不是总 CPU 开销的计量器。
154
+
155
+ ## 样式与服务端
156
+
157
+ 常用 CSS 变量:`--limr-font-text`、`--limr-font-code`、`--limr-font-size`、`--limr-line-height`、`--limr-text`、`--limr-heading`、`--limr-background`、`--limr-accent`、`--limr-content-width`、`--limr-reader-width`、`--limr-sticky-top`。
158
+
159
+ 样式放在 `@layer limr`,应用的普通 CSS 可以覆盖它。`appearance` 传播样式包的作用域到各组件和 portal。默认 `styles.css` 附带本地 Maple Mono NF CN 子集;`styles/base.css` 不导入字体。Playground 的 Noto Serif SC 是演示依赖。缓存、主题包和交互样式见[样式指南](styles.md)。
160
+
161
+ 服务端和客户端使用相同 source、extensions、documentId 和首次 streaming 值。不要把随后客户端已有的数据提前只传给其中一端。同步 SSR 的公式可用 `await preloadMath()` 预加载;代码始终有可读的源码回退。自动 documentId 使用 React useId,多根 hydration 可使用 React identifierPrefix 或显式唯一 ID。