@linloir/limr 0.0.0-stage → 1.0.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 (473) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +123 -0
  3. package/README.md +122 -2
  4. package/benchmarks/results/browser.json +237 -0
  5. package/benchmarks/results/node.json +75 -0
  6. package/benchmarks/results/selection.json +172 -0
  7. package/dist/THIRD_PARTY_LICENSES.txt +117 -0
  8. package/dist/base.css +454 -0
  9. package/dist/chunk-3ILUZKDB.js +3130 -0
  10. package/dist/chunk-3ILUZKDB.js.map +1 -0
  11. package/dist/chunk-6N6TFHEN.js +83 -0
  12. package/dist/chunk-6N6TFHEN.js.map +1 -0
  13. package/dist/chunk-N77VD2YR.js +1238 -0
  14. package/dist/chunk-N77VD2YR.js.map +1 -0
  15. package/dist/chunk-TTISGBST.js +478 -0
  16. package/dist/chunk-TTISGBST.js.map +1 -0
  17. package/dist/chunk-V2OG4Y3F.js +1 -0
  18. package/dist/chunk-V2OG4Y3F.js.map +1 -0
  19. package/dist/core/index.d.ts +57 -0
  20. package/dist/core/index.js +39 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/engine-43u8B4yt.d.ts +172 -0
  23. package/dist/extensions/index.d.ts +130 -0
  24. package/dist/extensions/index.js +50 -0
  25. package/dist/extensions/index.js.map +1 -0
  26. package/dist/fonts/KaTeX_AMS-Regular.ttf +0 -0
  27. package/dist/fonts/KaTeX_AMS-Regular.woff +0 -0
  28. package/dist/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  29. package/dist/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  30. package/dist/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  31. package/dist/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  32. package/dist/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  33. package/dist/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  34. package/dist/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  35. package/dist/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  36. package/dist/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  37. package/dist/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  38. package/dist/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  39. package/dist/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  40. package/dist/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  41. package/dist/fonts/KaTeX_Main-Bold.ttf +0 -0
  42. package/dist/fonts/KaTeX_Main-Bold.woff +0 -0
  43. package/dist/fonts/KaTeX_Main-Bold.woff2 +0 -0
  44. package/dist/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  45. package/dist/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  46. package/dist/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  47. package/dist/fonts/KaTeX_Main-Italic.ttf +0 -0
  48. package/dist/fonts/KaTeX_Main-Italic.woff +0 -0
  49. package/dist/fonts/KaTeX_Main-Italic.woff2 +0 -0
  50. package/dist/fonts/KaTeX_Main-Regular.ttf +0 -0
  51. package/dist/fonts/KaTeX_Main-Regular.woff +0 -0
  52. package/dist/fonts/KaTeX_Main-Regular.woff2 +0 -0
  53. package/dist/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  54. package/dist/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  55. package/dist/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  56. package/dist/fonts/KaTeX_Math-Italic.ttf +0 -0
  57. package/dist/fonts/KaTeX_Math-Italic.woff +0 -0
  58. package/dist/fonts/KaTeX_Math-Italic.woff2 +0 -0
  59. package/dist/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  60. package/dist/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  61. package/dist/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  62. package/dist/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  63. package/dist/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  64. package/dist/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  65. package/dist/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  66. package/dist/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  67. package/dist/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  68. package/dist/fonts/KaTeX_Script-Regular.ttf +0 -0
  69. package/dist/fonts/KaTeX_Script-Regular.woff +0 -0
  70. package/dist/fonts/KaTeX_Script-Regular.woff2 +0 -0
  71. package/dist/fonts/KaTeX_Size1-Regular.ttf +0 -0
  72. package/dist/fonts/KaTeX_Size1-Regular.woff +0 -0
  73. package/dist/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  74. package/dist/fonts/KaTeX_Size2-Regular.ttf +0 -0
  75. package/dist/fonts/KaTeX_Size2-Regular.woff +0 -0
  76. package/dist/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  77. package/dist/fonts/KaTeX_Size3-Regular.ttf +0 -0
  78. package/dist/fonts/KaTeX_Size3-Regular.woff +0 -0
  79. package/dist/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  80. package/dist/fonts/KaTeX_Size4-Regular.ttf +0 -0
  81. package/dist/fonts/KaTeX_Size4-Regular.woff +0 -0
  82. package/dist/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  83. package/dist/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  84. package/dist/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  85. package/dist/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  86. package/dist/fonts/LICENSE.txt +93 -0
  87. package/dist/fonts/manifest.json +2204 -0
  88. package/dist/fonts/maple-7.9-bold-005-5530d8c1d6.woff2 +0 -0
  89. package/dist/fonts/maple-7.9-bold-00f-1179d800a7.woff2 +0 -0
  90. package/dist/fonts/maple-7.9-bold-010-9974a942b1.woff2 +0 -0
  91. package/dist/fonts/maple-7.9-bold-011-9b9230baf2.woff2 +0 -0
  92. package/dist/fonts/maple-7.9-bold-012-c2545292b1.woff2 +0 -0
  93. package/dist/fonts/maple-7.9-bold-013-877b19fe05.woff2 +0 -0
  94. package/dist/fonts/maple-7.9-bold-014-6acf4a4e92.woff2 +0 -0
  95. package/dist/fonts/maple-7.9-bold-015-c889146da3.woff2 +0 -0
  96. package/dist/fonts/maple-7.9-bold-018-419ad5f31f.woff2 +0 -0
  97. package/dist/fonts/maple-7.9-bold-027-dd414483da.woff2 +0 -0
  98. package/dist/fonts/maple-7.9-bold-028-263744fbc7.woff2 +0 -0
  99. package/dist/fonts/maple-7.9-bold-029-ae3a163d8b.woff2 +0 -0
  100. package/dist/fonts/maple-7.9-bold-02a-515f0a82c2.woff2 +0 -0
  101. package/dist/fonts/maple-7.9-bold-02b-0823c5133d.woff2 +0 -0
  102. package/dist/fonts/maple-7.9-bold-02c-296fd5db38.woff2 +0 -0
  103. package/dist/fonts/maple-7.9-bold-02d-0bb4734363.woff2 +0 -0
  104. package/dist/fonts/maple-7.9-bold-02e-25415fed50.woff2 +0 -0
  105. package/dist/fonts/maple-7.9-bold-02f-19ed79a84e.woff2 +0 -0
  106. package/dist/fonts/maple-7.9-bold-030-21962a0327.woff2 +0 -0
  107. package/dist/fonts/maple-7.9-bold-031-d216fc0d68.woff2 +0 -0
  108. package/dist/fonts/maple-7.9-bold-032-d90ba34901.woff2 +0 -0
  109. package/dist/fonts/maple-7.9-bold-033-55ea37ea00.woff2 +0 -0
  110. package/dist/fonts/maple-7.9-bold-034-bc8649f808.woff2 +0 -0
  111. package/dist/fonts/maple-7.9-bold-035-03604fe40b.woff2 +0 -0
  112. package/dist/fonts/maple-7.9-bold-036-44fc7f77b2.woff2 +0 -0
  113. package/dist/fonts/maple-7.9-bold-037-8a1440f155.woff2 +0 -0
  114. package/dist/fonts/maple-7.9-bold-038-c65a618d5c.woff2 +0 -0
  115. package/dist/fonts/maple-7.9-bold-039-be05db966d.woff2 +0 -0
  116. package/dist/fonts/maple-7.9-bold-03a-ca3a10002d.woff2 +0 -0
  117. package/dist/fonts/maple-7.9-bold-03b-067b32e10b.woff2 +0 -0
  118. package/dist/fonts/maple-7.9-bold-03c-4da4f84530.woff2 +0 -0
  119. package/dist/fonts/maple-7.9-bold-03d-f0fe6a68c8.woff2 +0 -0
  120. package/dist/fonts/maple-7.9-bold-03e-0e97f89433.woff2 +0 -0
  121. package/dist/fonts/maple-7.9-bold-03f-3289a5e3bc.woff2 +0 -0
  122. package/dist/fonts/maple-7.9-bold-040-232dcd0d7b.woff2 +0 -0
  123. package/dist/fonts/maple-7.9-bold-041-e25e9a9c41.woff2 +0 -0
  124. package/dist/fonts/maple-7.9-bold-042-d64a2b1824.woff2 +0 -0
  125. package/dist/fonts/maple-7.9-bold-043-2d01cf5e52.woff2 +0 -0
  126. package/dist/fonts/maple-7.9-bold-044-0ab808b5f1.woff2 +0 -0
  127. package/dist/fonts/maple-7.9-bold-045-e41dc814b4.woff2 +0 -0
  128. package/dist/fonts/maple-7.9-bold-046-d5fe26344d.woff2 +0 -0
  129. package/dist/fonts/maple-7.9-bold-047-f322ded671.woff2 +0 -0
  130. package/dist/fonts/maple-7.9-bold-048-0cdcf7257f.woff2 +0 -0
  131. package/dist/fonts/maple-7.9-bold-049-aa280ca08a.woff2 +0 -0
  132. package/dist/fonts/maple-7.9-bold-04a-f51ad4d92c.woff2 +0 -0
  133. package/dist/fonts/maple-7.9-bold-04b-4e8c6fa3ee.woff2 +0 -0
  134. package/dist/fonts/maple-7.9-bold-04c-9bfdf4d743.woff2 +0 -0
  135. package/dist/fonts/maple-7.9-bold-04d-83ac1f5bb3.woff2 +0 -0
  136. package/dist/fonts/maple-7.9-bold-04e-bcec89804a.woff2 +0 -0
  137. package/dist/fonts/maple-7.9-bold-04f-d31e83b6ce.woff2 +0 -0
  138. package/dist/fonts/maple-7.9-bold-070-8a3b0fdf98.woff2 +0 -0
  139. package/dist/fonts/maple-7.9-bold-071-5bee0a62c4.woff2 +0 -0
  140. package/dist/fonts/maple-7.9-bold-072-97d891eee4.woff2 +0 -0
  141. package/dist/fonts/maple-7.9-bold-073-4d4c36aca0.woff2 +0 -0
  142. package/dist/fonts/maple-7.9-bold-074-6d3cc01e90.woff2 +0 -0
  143. package/dist/fonts/maple-7.9-bold-075-eab42ad657.woff2 +0 -0
  144. package/dist/fonts/maple-7.9-bold-076-2b1f5c4a42.woff2 +0 -0
  145. package/dist/fonts/maple-7.9-bold-077-1db0d50873.woff2 +0 -0
  146. package/dist/fonts/maple-7.9-bold-078-bc6994a28f.woff2 +0 -0
  147. package/dist/fonts/maple-7.9-bold-079-ad6c1757ce.woff2 +0 -0
  148. package/dist/fonts/maple-7.9-bold-07a-d08ed2b87d.woff2 +0 -0
  149. package/dist/fonts/maple-7.9-bold-07f-2f4af46cc6.woff2 +0 -0
  150. package/dist/fonts/maple-7.9-bold-0fc-42ed90884c.woff2 +0 -0
  151. package/dist/fonts/maple-7.9-bold-780-261fac1b24.woff2 +0 -0
  152. package/dist/fonts/maple-7.9-bold-781-377319a91b.woff2 +0 -0
  153. package/dist/fonts/maple-7.9-bold-782-3106f0be62.woff2 +0 -0
  154. package/dist/fonts/maple-7.9-bold-783-74fbfa8648.woff2 +0 -0
  155. package/dist/fonts/maple-7.9-bold-784-8570270664.woff2 +0 -0
  156. package/dist/fonts/maple-7.9-bold-785-cee8de1ded.woff2 +0 -0
  157. package/dist/fonts/maple-7.9-bold-786-5ab5ff7149.woff2 +0 -0
  158. package/dist/fonts/maple-7.9-bold-787-844b4c4373.woff2 +0 -0
  159. package/dist/fonts/maple-7.9-bold-788-01731198ab.woff2 +0 -0
  160. package/dist/fonts/maple-7.9-bold-789-f4c75fa806.woff2 +0 -0
  161. package/dist/fonts/maple-7.9-bold-78a-4370321ec6.woff2 +0 -0
  162. package/dist/fonts/maple-7.9-bold-78b-5cd412b56f.woff2 +0 -0
  163. package/dist/fonts/maple-7.9-bold-78c-f88e331085.woff2 +0 -0
  164. package/dist/fonts/maple-7.9-bold-78d-1b9b77f6e8.woff2 +0 -0
  165. package/dist/fonts/maple-7.9-bold-latin-3b4b2831f3.woff2 +0 -0
  166. package/dist/fonts/maple-7.9-bolditalic-005-d59fef8639.woff2 +0 -0
  167. package/dist/fonts/maple-7.9-bolditalic-00f-1bbda7af69.woff2 +0 -0
  168. package/dist/fonts/maple-7.9-bolditalic-010-5cdd4b46a7.woff2 +0 -0
  169. package/dist/fonts/maple-7.9-bolditalic-011-0d1f1ae687.woff2 +0 -0
  170. package/dist/fonts/maple-7.9-bolditalic-012-4ceb000b2e.woff2 +0 -0
  171. package/dist/fonts/maple-7.9-bolditalic-013-ad0a4f4313.woff2 +0 -0
  172. package/dist/fonts/maple-7.9-bolditalic-014-94d54b71b3.woff2 +0 -0
  173. package/dist/fonts/maple-7.9-bolditalic-015-7aede280da.woff2 +0 -0
  174. package/dist/fonts/maple-7.9-bolditalic-018-f21221b1c2.woff2 +0 -0
  175. package/dist/fonts/maple-7.9-bolditalic-027-d23d0e80a4.woff2 +0 -0
  176. package/dist/fonts/maple-7.9-bolditalic-028-23bd6f24df.woff2 +0 -0
  177. package/dist/fonts/maple-7.9-bolditalic-029-c481c0ad50.woff2 +0 -0
  178. package/dist/fonts/maple-7.9-bolditalic-02a-1c134be68e.woff2 +0 -0
  179. package/dist/fonts/maple-7.9-bolditalic-02b-3feb29ecfd.woff2 +0 -0
  180. package/dist/fonts/maple-7.9-bolditalic-02c-de8cc5a063.woff2 +0 -0
  181. package/dist/fonts/maple-7.9-bolditalic-02d-ea25c21fad.woff2 +0 -0
  182. package/dist/fonts/maple-7.9-bolditalic-02e-e68d6bd335.woff2 +0 -0
  183. package/dist/fonts/maple-7.9-bolditalic-02f-c88d1e92dc.woff2 +0 -0
  184. package/dist/fonts/maple-7.9-bolditalic-030-f26fefe87e.woff2 +0 -0
  185. package/dist/fonts/maple-7.9-bolditalic-031-f2aa1b8e22.woff2 +0 -0
  186. package/dist/fonts/maple-7.9-bolditalic-032-c4fafc4aa6.woff2 +0 -0
  187. package/dist/fonts/maple-7.9-bolditalic-033-288a1639ca.woff2 +0 -0
  188. package/dist/fonts/maple-7.9-bolditalic-034-7c982125bc.woff2 +0 -0
  189. package/dist/fonts/maple-7.9-bolditalic-035-fd1575dea2.woff2 +0 -0
  190. package/dist/fonts/maple-7.9-bolditalic-036-f6bf406353.woff2 +0 -0
  191. package/dist/fonts/maple-7.9-bolditalic-037-8ac1466916.woff2 +0 -0
  192. package/dist/fonts/maple-7.9-bolditalic-038-e9f7fed6a6.woff2 +0 -0
  193. package/dist/fonts/maple-7.9-bolditalic-039-6f90d42310.woff2 +0 -0
  194. package/dist/fonts/maple-7.9-bolditalic-03a-30c9409a7e.woff2 +0 -0
  195. package/dist/fonts/maple-7.9-bolditalic-03b-4f1741e9e9.woff2 +0 -0
  196. package/dist/fonts/maple-7.9-bolditalic-03c-6551c74e78.woff2 +0 -0
  197. package/dist/fonts/maple-7.9-bolditalic-03d-c8e2b07106.woff2 +0 -0
  198. package/dist/fonts/maple-7.9-bolditalic-03e-c3e98613d4.woff2 +0 -0
  199. package/dist/fonts/maple-7.9-bolditalic-03f-f1c580bad4.woff2 +0 -0
  200. package/dist/fonts/maple-7.9-bolditalic-040-32e8260076.woff2 +0 -0
  201. package/dist/fonts/maple-7.9-bolditalic-041-39805a0ed7.woff2 +0 -0
  202. package/dist/fonts/maple-7.9-bolditalic-042-13b4d84cd3.woff2 +0 -0
  203. package/dist/fonts/maple-7.9-bolditalic-043-d85780d0bd.woff2 +0 -0
  204. package/dist/fonts/maple-7.9-bolditalic-044-1b5eb624d7.woff2 +0 -0
  205. package/dist/fonts/maple-7.9-bolditalic-045-ad0b4f8762.woff2 +0 -0
  206. package/dist/fonts/maple-7.9-bolditalic-046-9966021b3a.woff2 +0 -0
  207. package/dist/fonts/maple-7.9-bolditalic-047-100d4f6f4e.woff2 +0 -0
  208. package/dist/fonts/maple-7.9-bolditalic-048-a0a1e8b29c.woff2 +0 -0
  209. package/dist/fonts/maple-7.9-bolditalic-049-0806f9b3cc.woff2 +0 -0
  210. package/dist/fonts/maple-7.9-bolditalic-04a-28fdef78b3.woff2 +0 -0
  211. package/dist/fonts/maple-7.9-bolditalic-04b-6e93ef0086.woff2 +0 -0
  212. package/dist/fonts/maple-7.9-bolditalic-04c-50b8da6282.woff2 +0 -0
  213. package/dist/fonts/maple-7.9-bolditalic-04d-f93277723d.woff2 +0 -0
  214. package/dist/fonts/maple-7.9-bolditalic-04e-72e2644690.woff2 +0 -0
  215. package/dist/fonts/maple-7.9-bolditalic-04f-4f234f1802.woff2 +0 -0
  216. package/dist/fonts/maple-7.9-bolditalic-070-a3658a8a23.woff2 +0 -0
  217. package/dist/fonts/maple-7.9-bolditalic-071-4987e49732.woff2 +0 -0
  218. package/dist/fonts/maple-7.9-bolditalic-072-e587fa72cd.woff2 +0 -0
  219. package/dist/fonts/maple-7.9-bolditalic-073-2aca01fdf6.woff2 +0 -0
  220. package/dist/fonts/maple-7.9-bolditalic-074-ae89f99a60.woff2 +0 -0
  221. package/dist/fonts/maple-7.9-bolditalic-075-5a77191665.woff2 +0 -0
  222. package/dist/fonts/maple-7.9-bolditalic-076-4c54a87277.woff2 +0 -0
  223. package/dist/fonts/maple-7.9-bolditalic-077-e47dce25ee.woff2 +0 -0
  224. package/dist/fonts/maple-7.9-bolditalic-078-b0b720dab6.woff2 +0 -0
  225. package/dist/fonts/maple-7.9-bolditalic-079-316ee96f6a.woff2 +0 -0
  226. package/dist/fonts/maple-7.9-bolditalic-07a-b10ccb8107.woff2 +0 -0
  227. package/dist/fonts/maple-7.9-bolditalic-07d-5667cb3be1.woff2 +0 -0
  228. package/dist/fonts/maple-7.9-bolditalic-07f-2ac6735ff8.woff2 +0 -0
  229. package/dist/fonts/maple-7.9-bolditalic-0fc-52171ca01e.woff2 +0 -0
  230. package/dist/fonts/maple-7.9-bolditalic-780-3c090c5f89.woff2 +0 -0
  231. package/dist/fonts/maple-7.9-bolditalic-781-ca4077b4fa.woff2 +0 -0
  232. package/dist/fonts/maple-7.9-bolditalic-782-42c3d52206.woff2 +0 -0
  233. package/dist/fonts/maple-7.9-bolditalic-783-d72840dd37.woff2 +0 -0
  234. package/dist/fonts/maple-7.9-bolditalic-784-b9ca097e50.woff2 +0 -0
  235. package/dist/fonts/maple-7.9-bolditalic-785-b81dec6af9.woff2 +0 -0
  236. package/dist/fonts/maple-7.9-bolditalic-786-76c266f6f5.woff2 +0 -0
  237. package/dist/fonts/maple-7.9-bolditalic-787-403bd73766.woff2 +0 -0
  238. package/dist/fonts/maple-7.9-bolditalic-788-71a4b8c2c5.woff2 +0 -0
  239. package/dist/fonts/maple-7.9-bolditalic-789-94527f3fa4.woff2 +0 -0
  240. package/dist/fonts/maple-7.9-bolditalic-78a-81918568b8.woff2 +0 -0
  241. package/dist/fonts/maple-7.9-bolditalic-78b-d0302b4bfe.woff2 +0 -0
  242. package/dist/fonts/maple-7.9-bolditalic-78c-e864792049.woff2 +0 -0
  243. package/dist/fonts/maple-7.9-bolditalic-78d-105ff69bf4.woff2 +0 -0
  244. package/dist/fonts/maple-7.9-bolditalic-latin-96412d165b.woff2 +0 -0
  245. package/dist/fonts/maple-7.9-italic-005-23b09473f8.woff2 +0 -0
  246. package/dist/fonts/maple-7.9-italic-00f-e9bf4dd93c.woff2 +0 -0
  247. package/dist/fonts/maple-7.9-italic-010-22933d6d77.woff2 +0 -0
  248. package/dist/fonts/maple-7.9-italic-011-71b0157ddc.woff2 +0 -0
  249. package/dist/fonts/maple-7.9-italic-012-b751ab3752.woff2 +0 -0
  250. package/dist/fonts/maple-7.9-italic-013-530b1d3f8b.woff2 +0 -0
  251. package/dist/fonts/maple-7.9-italic-014-0e842f6749.woff2 +0 -0
  252. package/dist/fonts/maple-7.9-italic-015-642211b03a.woff2 +0 -0
  253. package/dist/fonts/maple-7.9-italic-018-0c5b0001c6.woff2 +0 -0
  254. package/dist/fonts/maple-7.9-italic-027-9a09afbbb1.woff2 +0 -0
  255. package/dist/fonts/maple-7.9-italic-028-93fea67326.woff2 +0 -0
  256. package/dist/fonts/maple-7.9-italic-029-7d7627d4cc.woff2 +0 -0
  257. package/dist/fonts/maple-7.9-italic-02a-88e76d051b.woff2 +0 -0
  258. package/dist/fonts/maple-7.9-italic-02b-7d9219748b.woff2 +0 -0
  259. package/dist/fonts/maple-7.9-italic-02c-049df19d84.woff2 +0 -0
  260. package/dist/fonts/maple-7.9-italic-02d-663fc73c6e.woff2 +0 -0
  261. package/dist/fonts/maple-7.9-italic-02e-a98ed33998.woff2 +0 -0
  262. package/dist/fonts/maple-7.9-italic-02f-8ef9d93d09.woff2 +0 -0
  263. package/dist/fonts/maple-7.9-italic-030-74885d994d.woff2 +0 -0
  264. package/dist/fonts/maple-7.9-italic-031-4cf66c5d65.woff2 +0 -0
  265. package/dist/fonts/maple-7.9-italic-032-a608b7aed4.woff2 +0 -0
  266. package/dist/fonts/maple-7.9-italic-033-2978f66e55.woff2 +0 -0
  267. package/dist/fonts/maple-7.9-italic-034-38f7a0bf87.woff2 +0 -0
  268. package/dist/fonts/maple-7.9-italic-035-5cc45cd3b7.woff2 +0 -0
  269. package/dist/fonts/maple-7.9-italic-036-ca92d327e5.woff2 +0 -0
  270. package/dist/fonts/maple-7.9-italic-037-f887681c7d.woff2 +0 -0
  271. package/dist/fonts/maple-7.9-italic-038-06150b88f8.woff2 +0 -0
  272. package/dist/fonts/maple-7.9-italic-039-761da333b7.woff2 +0 -0
  273. package/dist/fonts/maple-7.9-italic-03a-1408ddaf2c.woff2 +0 -0
  274. package/dist/fonts/maple-7.9-italic-03b-1542b3b67c.woff2 +0 -0
  275. package/dist/fonts/maple-7.9-italic-03c-479f2f5011.woff2 +0 -0
  276. package/dist/fonts/maple-7.9-italic-03d-0f10590b11.woff2 +0 -0
  277. package/dist/fonts/maple-7.9-italic-03e-8b93e0ee0e.woff2 +0 -0
  278. package/dist/fonts/maple-7.9-italic-03f-2bd8815e3e.woff2 +0 -0
  279. package/dist/fonts/maple-7.9-italic-040-b85023679a.woff2 +0 -0
  280. package/dist/fonts/maple-7.9-italic-041-eb881b7b92.woff2 +0 -0
  281. package/dist/fonts/maple-7.9-italic-042-01490a139e.woff2 +0 -0
  282. package/dist/fonts/maple-7.9-italic-043-ffb21b6c4c.woff2 +0 -0
  283. package/dist/fonts/maple-7.9-italic-044-05cd1a1b14.woff2 +0 -0
  284. package/dist/fonts/maple-7.9-italic-045-1270935363.woff2 +0 -0
  285. package/dist/fonts/maple-7.9-italic-046-857077eab1.woff2 +0 -0
  286. package/dist/fonts/maple-7.9-italic-047-ca57774cc3.woff2 +0 -0
  287. package/dist/fonts/maple-7.9-italic-048-20969d6307.woff2 +0 -0
  288. package/dist/fonts/maple-7.9-italic-049-4066aa1a18.woff2 +0 -0
  289. package/dist/fonts/maple-7.9-italic-04a-1ed360d580.woff2 +0 -0
  290. package/dist/fonts/maple-7.9-italic-04b-2eba62d76b.woff2 +0 -0
  291. package/dist/fonts/maple-7.9-italic-04c-2f4effc460.woff2 +0 -0
  292. package/dist/fonts/maple-7.9-italic-04d-d858c0a9c1.woff2 +0 -0
  293. package/dist/fonts/maple-7.9-italic-04e-a19eb0289f.woff2 +0 -0
  294. package/dist/fonts/maple-7.9-italic-04f-8addde15f2.woff2 +0 -0
  295. package/dist/fonts/maple-7.9-italic-070-f0bd641f1c.woff2 +0 -0
  296. package/dist/fonts/maple-7.9-italic-071-e6ac564431.woff2 +0 -0
  297. package/dist/fonts/maple-7.9-italic-072-e6fea65bca.woff2 +0 -0
  298. package/dist/fonts/maple-7.9-italic-073-71621c00dc.woff2 +0 -0
  299. package/dist/fonts/maple-7.9-italic-074-4bd488962a.woff2 +0 -0
  300. package/dist/fonts/maple-7.9-italic-075-2838d95bd6.woff2 +0 -0
  301. package/dist/fonts/maple-7.9-italic-076-94e02ecc03.woff2 +0 -0
  302. package/dist/fonts/maple-7.9-italic-077-32c536ab6b.woff2 +0 -0
  303. package/dist/fonts/maple-7.9-italic-078-18256447bd.woff2 +0 -0
  304. package/dist/fonts/maple-7.9-italic-079-7a735e61cf.woff2 +0 -0
  305. package/dist/fonts/maple-7.9-italic-07a-2b57a6a905.woff2 +0 -0
  306. package/dist/fonts/maple-7.9-italic-07d-8ba1bbfb50.woff2 +0 -0
  307. package/dist/fonts/maple-7.9-italic-07f-0240d80c69.woff2 +0 -0
  308. package/dist/fonts/maple-7.9-italic-0fc-e5b20a692e.woff2 +0 -0
  309. package/dist/fonts/maple-7.9-italic-780-093cc90a9b.woff2 +0 -0
  310. package/dist/fonts/maple-7.9-italic-781-f6ec357f6d.woff2 +0 -0
  311. package/dist/fonts/maple-7.9-italic-782-5ca2ef4ddd.woff2 +0 -0
  312. package/dist/fonts/maple-7.9-italic-783-7450baabee.woff2 +0 -0
  313. package/dist/fonts/maple-7.9-italic-784-14a93cc4bd.woff2 +0 -0
  314. package/dist/fonts/maple-7.9-italic-785-d62fb8b4d7.woff2 +0 -0
  315. package/dist/fonts/maple-7.9-italic-786-1d2959dc83.woff2 +0 -0
  316. package/dist/fonts/maple-7.9-italic-787-70ae947136.woff2 +0 -0
  317. package/dist/fonts/maple-7.9-italic-788-cf1f156ebf.woff2 +0 -0
  318. package/dist/fonts/maple-7.9-italic-789-f0b79f9680.woff2 +0 -0
  319. package/dist/fonts/maple-7.9-italic-78a-5a53fd7870.woff2 +0 -0
  320. package/dist/fonts/maple-7.9-italic-78b-40be093bfd.woff2 +0 -0
  321. package/dist/fonts/maple-7.9-italic-78c-3b11646f8e.woff2 +0 -0
  322. package/dist/fonts/maple-7.9-italic-78d-b13ed8c48b.woff2 +0 -0
  323. package/dist/fonts/maple-7.9-italic-latin-befeb2b610.woff2 +0 -0
  324. package/dist/fonts/maple-7.9-regular-005-90bff107ac.woff2 +0 -0
  325. package/dist/fonts/maple-7.9-regular-00f-001e503e53.woff2 +0 -0
  326. package/dist/fonts/maple-7.9-regular-010-374da1ebb4.woff2 +0 -0
  327. package/dist/fonts/maple-7.9-regular-011-8f91fcc9e7.woff2 +0 -0
  328. package/dist/fonts/maple-7.9-regular-012-e4ec3016ef.woff2 +0 -0
  329. package/dist/fonts/maple-7.9-regular-013-e779e13a12.woff2 +0 -0
  330. package/dist/fonts/maple-7.9-regular-014-6b833ad501.woff2 +0 -0
  331. package/dist/fonts/maple-7.9-regular-015-4e058c4c42.woff2 +0 -0
  332. package/dist/fonts/maple-7.9-regular-018-6f776bc19b.woff2 +0 -0
  333. package/dist/fonts/maple-7.9-regular-027-92c0be3439.woff2 +0 -0
  334. package/dist/fonts/maple-7.9-regular-028-154c8c3039.woff2 +0 -0
  335. package/dist/fonts/maple-7.9-regular-029-9d88470aca.woff2 +0 -0
  336. package/dist/fonts/maple-7.9-regular-02a-7a94cb26f2.woff2 +0 -0
  337. package/dist/fonts/maple-7.9-regular-02b-1725b841c2.woff2 +0 -0
  338. package/dist/fonts/maple-7.9-regular-02c-e080c435d6.woff2 +0 -0
  339. package/dist/fonts/maple-7.9-regular-02d-a6461c4708.woff2 +0 -0
  340. package/dist/fonts/maple-7.9-regular-02e-2e55d9b957.woff2 +0 -0
  341. package/dist/fonts/maple-7.9-regular-02f-858a76fa1f.woff2 +0 -0
  342. package/dist/fonts/maple-7.9-regular-030-bbbe80f8ad.woff2 +0 -0
  343. package/dist/fonts/maple-7.9-regular-031-cafc1258ad.woff2 +0 -0
  344. package/dist/fonts/maple-7.9-regular-032-0ca83ecceb.woff2 +0 -0
  345. package/dist/fonts/maple-7.9-regular-033-6cb995f2e7.woff2 +0 -0
  346. package/dist/fonts/maple-7.9-regular-034-5877222be6.woff2 +0 -0
  347. package/dist/fonts/maple-7.9-regular-035-988d8f2d26.woff2 +0 -0
  348. package/dist/fonts/maple-7.9-regular-036-e91853e3ca.woff2 +0 -0
  349. package/dist/fonts/maple-7.9-regular-037-3eed60f359.woff2 +0 -0
  350. package/dist/fonts/maple-7.9-regular-038-5681f42a4a.woff2 +0 -0
  351. package/dist/fonts/maple-7.9-regular-039-07036fe444.woff2 +0 -0
  352. package/dist/fonts/maple-7.9-regular-03a-5495eead93.woff2 +0 -0
  353. package/dist/fonts/maple-7.9-regular-03b-d07b1d6c1e.woff2 +0 -0
  354. package/dist/fonts/maple-7.9-regular-03c-6291400ee0.woff2 +0 -0
  355. package/dist/fonts/maple-7.9-regular-03d-3787a51772.woff2 +0 -0
  356. package/dist/fonts/maple-7.9-regular-03e-ce4d945844.woff2 +0 -0
  357. package/dist/fonts/maple-7.9-regular-03f-95e98b329c.woff2 +0 -0
  358. package/dist/fonts/maple-7.9-regular-040-693b769fe8.woff2 +0 -0
  359. package/dist/fonts/maple-7.9-regular-041-7b436d2c09.woff2 +0 -0
  360. package/dist/fonts/maple-7.9-regular-042-9ad884cd73.woff2 +0 -0
  361. package/dist/fonts/maple-7.9-regular-043-372231e8e2.woff2 +0 -0
  362. package/dist/fonts/maple-7.9-regular-044-9922b540b1.woff2 +0 -0
  363. package/dist/fonts/maple-7.9-regular-045-8a88a91c22.woff2 +0 -0
  364. package/dist/fonts/maple-7.9-regular-046-82859ede10.woff2 +0 -0
  365. package/dist/fonts/maple-7.9-regular-047-6532babd62.woff2 +0 -0
  366. package/dist/fonts/maple-7.9-regular-048-abfdc5d7ce.woff2 +0 -0
  367. package/dist/fonts/maple-7.9-regular-049-adb7fa9ed3.woff2 +0 -0
  368. package/dist/fonts/maple-7.9-regular-04a-f3f794b1cb.woff2 +0 -0
  369. package/dist/fonts/maple-7.9-regular-04b-715211b8dd.woff2 +0 -0
  370. package/dist/fonts/maple-7.9-regular-04c-c6f978d10d.woff2 +0 -0
  371. package/dist/fonts/maple-7.9-regular-04d-61019a1c8f.woff2 +0 -0
  372. package/dist/fonts/maple-7.9-regular-04e-806d6efe85.woff2 +0 -0
  373. package/dist/fonts/maple-7.9-regular-04f-99d19aa8db.woff2 +0 -0
  374. package/dist/fonts/maple-7.9-regular-070-e94ba9445d.woff2 +0 -0
  375. package/dist/fonts/maple-7.9-regular-071-057314b533.woff2 +0 -0
  376. package/dist/fonts/maple-7.9-regular-072-a7699beb84.woff2 +0 -0
  377. package/dist/fonts/maple-7.9-regular-073-ebe1bd9ef4.woff2 +0 -0
  378. package/dist/fonts/maple-7.9-regular-074-722db38100.woff2 +0 -0
  379. package/dist/fonts/maple-7.9-regular-075-150ff7187b.woff2 +0 -0
  380. package/dist/fonts/maple-7.9-regular-076-c14595e715.woff2 +0 -0
  381. package/dist/fonts/maple-7.9-regular-077-6c88302a32.woff2 +0 -0
  382. package/dist/fonts/maple-7.9-regular-078-549b294c78.woff2 +0 -0
  383. package/dist/fonts/maple-7.9-regular-079-5131c42759.woff2 +0 -0
  384. package/dist/fonts/maple-7.9-regular-07a-c0dad221b5.woff2 +0 -0
  385. package/dist/fonts/maple-7.9-regular-07f-5cf5ebe065.woff2 +0 -0
  386. package/dist/fonts/maple-7.9-regular-0fc-b644c0c6d9.woff2 +0 -0
  387. package/dist/fonts/maple-7.9-regular-780-c6000d472a.woff2 +0 -0
  388. package/dist/fonts/maple-7.9-regular-781-86409ab7f7.woff2 +0 -0
  389. package/dist/fonts/maple-7.9-regular-782-9cd950637c.woff2 +0 -0
  390. package/dist/fonts/maple-7.9-regular-783-105c4d02df.woff2 +0 -0
  391. package/dist/fonts/maple-7.9-regular-784-00c042af97.woff2 +0 -0
  392. package/dist/fonts/maple-7.9-regular-785-022568d0b8.woff2 +0 -0
  393. package/dist/fonts/maple-7.9-regular-786-90b6f3aef5.woff2 +0 -0
  394. package/dist/fonts/maple-7.9-regular-787-e2888596c9.woff2 +0 -0
  395. package/dist/fonts/maple-7.9-regular-788-3416e1fda3.woff2 +0 -0
  396. package/dist/fonts/maple-7.9-regular-789-9ffc917b0b.woff2 +0 -0
  397. package/dist/fonts/maple-7.9-regular-78a-4a921d07f6.woff2 +0 -0
  398. package/dist/fonts/maple-7.9-regular-78b-9d71c5327b.woff2 +0 -0
  399. package/dist/fonts/maple-7.9-regular-78c-9ec048314b.woff2 +0 -0
  400. package/dist/fonts/maple-7.9-regular-78d-46a2ebd113.woff2 +0 -0
  401. package/dist/fonts/maple-7.9-regular-latin-59c752ba1d.woff2 +0 -0
  402. package/dist/fonts/maple.css +315 -0
  403. package/dist/index.d.ts +9 -0
  404. package/dist/index.js +136 -0
  405. package/dist/index.js.map +1 -0
  406. package/dist/math-renderer-L6DOH4RX.js +21 -0
  407. package/dist/math-renderer-L6DOH4RX.js.map +1 -0
  408. package/dist/math.css +1 -0
  409. package/dist/react/index.d.ts +113 -0
  410. package/dist/react/index.js +59 -0
  411. package/dist/react/index.js.map +1 -0
  412. package/dist/styles.css +454 -0
  413. package/dist/translations-DHnYMg4h.d.ts +318 -0
  414. package/docs/README.md +13 -0
  415. package/docs/api.md +8 -0
  416. package/docs/assets/rendered.svg +9 -0
  417. package/docs/assets/source.svg +9 -0
  418. package/docs/en/README.md +26 -0
  419. package/docs/en/ai-skills.md +57 -0
  420. package/docs/en/annotations.md +84 -0
  421. package/docs/en/api.md +107 -0
  422. package/docs/en/architecture.md +33 -0
  423. package/docs/en/extensions.md +159 -0
  424. package/docs/en/getting-started.md +67 -0
  425. package/docs/en/integration.md +130 -0
  426. package/docs/en/modules.md +80 -0
  427. package/docs/en/performance.md +53 -0
  428. package/docs/en/plugin-packages.md +68 -0
  429. package/docs/en/styles.md +80 -0
  430. package/docs/en/syntax.md +352 -0
  431. package/docs/extensions.md +8 -0
  432. package/docs/implementation.md +8 -0
  433. package/docs/performance.md +8 -0
  434. package/docs/screenshots/blocks.png +0 -0
  435. package/docs/screenshots/dark.png +0 -0
  436. package/docs/screenshots/desktop.png +0 -0
  437. package/docs/screenshots/plugin-mobile.png +0 -0
  438. package/docs/styles.md +8 -0
  439. package/docs/visual-upgrade.md +8 -0
  440. package/docs/zh-CN/README.md +26 -0
  441. package/docs/zh-CN/ai-skills.md +57 -0
  442. package/docs/zh-CN/annotations.md +84 -0
  443. package/docs/zh-CN/api.md +107 -0
  444. package/docs/zh-CN/architecture.md +33 -0
  445. package/docs/zh-CN/extensions.md +159 -0
  446. package/docs/zh-CN/getting-started.md +67 -0
  447. package/docs/zh-CN/integration.md +130 -0
  448. package/docs/zh-CN/modules.md +80 -0
  449. package/docs/zh-CN/performance.md +53 -0
  450. package/docs/zh-CN/plugin-packages.md +68 -0
  451. package/docs/zh-CN/styles.md +80 -0
  452. package/docs/zh-CN/syntax.md +352 -0
  453. package/examples/assistant.tsx +52 -0
  454. package/examples/notes.tsx +80 -0
  455. package/examples/packages/paper-theme/index.css +25 -0
  456. package/examples/packages/paper-theme/package.json +7 -0
  457. package/examples/packages/reading-tools/index.d.ts +2 -0
  458. package/examples/packages/reading-tools/index.js +25 -0
  459. package/examples/packages/reading-tools/package.json +16 -0
  460. package/package.json +114 -3
  461. package/skills/limr-plugin-development/SKILL.md +22 -0
  462. package/skills/limr-plugin-development/agents/openai.yaml +4 -0
  463. package/skills/limr-plugin-development/assets/plugin-template/README.md +30 -0
  464. package/skills/limr-plugin-development/assets/plugin-template/package.json +36 -0
  465. package/skills/limr-plugin-development/assets/plugin-template/src/index.tsx +50 -0
  466. package/skills/limr-plugin-development/assets/plugin-template/src/styles.css +9 -0
  467. package/skills/limr-plugin-development/assets/plugin-template/tsconfig.json +20 -0
  468. package/skills/limr-plugin-development/assets/plugin-template/tsup.config.ts +8 -0
  469. package/skills/limr-plugin-development/references/contract.md +45 -0
  470. package/skills/limr-use/SKILL.md +23 -0
  471. package/skills/limr-use/agents/openai.yaml +4 -0
  472. package/skills/limr-use/references/integration.md +41 -0
  473. package/skills/limr-use/references/syntax.md +17 -0
@@ -0,0 +1,478 @@
1
+ // src/core/parser.ts
2
+ import { fromMarkdown } from "mdast-util-from-markdown";
3
+ import { mdxJsx } from "micromark-extension-mdx-jsx";
4
+ import { mdxJsxFromMarkdown } from "mdast-util-mdx-jsx";
5
+ import { directive } from "micromark-extension-directive";
6
+ import { directiveFromMarkdown } from "mdast-util-directive";
7
+
8
+ // src/core/tree.ts
9
+ function walk(node, visit, parent) {
10
+ visit(node, parent);
11
+ for (const child of node.children ?? []) walk(child, visit, node);
12
+ }
13
+ function textContent(node) {
14
+ if (node.type === "image") return String(node.alt ?? "");
15
+ return node.value ?? node.children?.map(textContent).join("") ?? "";
16
+ }
17
+ function rangeOf(node) {
18
+ return { start: node.position?.start.offset ?? 0, end: node.position?.end.offset ?? 0 };
19
+ }
20
+ function intersects(a, b) {
21
+ return a.start < b.end && b.start < a.end;
22
+ }
23
+ function lineStarts(source) {
24
+ const result = [0];
25
+ for (let i = 0; i < source.length; i++) {
26
+ if (source[i] === "\r") {
27
+ if (source[i + 1] === "\n") i++;
28
+ result.push(i + 1);
29
+ } else if (source[i] === "\n") result.push(i + 1);
30
+ }
31
+ return result;
32
+ }
33
+ function sourcePoint(offset, lines) {
34
+ let lo = 0, hi = lines.length;
35
+ while (lo + 1 < hi) {
36
+ const mid = lo + hi >>> 1;
37
+ if (lines[mid] <= offset) lo = mid;
38
+ else hi = mid;
39
+ }
40
+ return { offset, line: lo + 1, column: offset - lines[lo] + 1 };
41
+ }
42
+ function slugify(text) {
43
+ return text.toLowerCase().trim().replace(/[^\p{L}\p{N}\s_-]/gu, "").replace(/[\s_]+/g, "-").replace(/^-+|-+$/g, "") || "section";
44
+ }
45
+ function safeUrl(value, image = false) {
46
+ if (typeof value !== "string") return void 0;
47
+ const normalized = value.trim().replace(/[\u0000-\u0020\u007f]/g, "");
48
+ if (/^(?:https?:|mailto:|tel:)/i.test(normalized) || !/^[a-z][a-z\d+.-]*:/i.test(normalized)) return value;
49
+ if (image && /^data:image\/(?:png|gif|jpe?g|webp|avif);base64,/i.test(normalized)) return value;
50
+ return void 0;
51
+ }
52
+
53
+ // src/core/parser.ts
54
+ function validateExtensions(extensions) {
55
+ const names = /* @__PURE__ */ new Set();
56
+ const tags = /* @__PURE__ */ new Set();
57
+ const directives = /* @__PURE__ */ new Set();
58
+ for (const extension of extensions) {
59
+ if (names.has(extension.name)) throw new Error(`Duplicate LiMR extension: ${extension.name}. Use replaceExtension() to replace it explicitly.`);
60
+ names.add(extension.name);
61
+ for (const [items, known, kind] of [[extension.tags, tags, "tag"], [extension.directives, directives, "directive"]]) {
62
+ for (const name of items ?? []) {
63
+ if (known.has(name)) throw new Error(`Duplicate LiMR ${kind}: ${name}`);
64
+ known.add(name);
65
+ }
66
+ }
67
+ }
68
+ }
69
+ function createParser(extensions) {
70
+ validateExtensions(extensions);
71
+ const tagDefinitions = new Map(extensions.flatMap((ext) => (ext.tags ?? []).map((name) => [name, ext])));
72
+ const directiveDefinitions = new Map(extensions.flatMap((ext) => (ext.directives ?? []).map((name) => [name, ext])));
73
+ const syntax = extensions.flatMap((ext) => [...ext.micromark ?? []]);
74
+ const mdast = extensions.flatMap((ext) => [...ext.mdast ?? []]);
75
+ if (directiveDefinitions.size) {
76
+ syntax.push(directive());
77
+ mdast.push(directiveFromMarkdown());
78
+ }
79
+ const jsxSyntax = tagDefinitions.size ? [...syntax, { disable: { null: ["htmlFlow", "htmlText"] } }, mdxJsx()] : syntax;
80
+ const jsxMdast = tagDefinitions.size ? [...mdast, mdxJsxFromMarkdown()] : mdast;
81
+ return (fragment, offset, context, lines, environment = "") => {
82
+ const prefix = environment ? `${environment}
83
+
84
+ limr-definition-boundary
85
+
86
+ ` : "";
87
+ const input = prefix + fragment;
88
+ const diagnostics = [];
89
+ let attributeLines;
90
+ const attributePoint = (at) => sourcePoint(at, lines.length ? lines : attributeLines ??= lineStarts(context.source));
91
+ let recoveryOffset;
92
+ let root;
93
+ try {
94
+ root = fromMarkdown(input, { extensions: jsxSyntax, mdastExtensions: jsxMdast });
95
+ } catch (error) {
96
+ root = fromMarkdown(input, { extensions: syntax, mdastExtensions: mdast });
97
+ recoveryOffset = offset;
98
+ diagnostics.push({ message: error instanceof Error ? error.message : String(error), offset });
99
+ }
100
+ root.children = root.children?.filter((node) => (node.position?.start.offset ?? 0) >= prefix.length);
101
+ if (offset || prefix.length || tagDefinitions.size || directiveDefinitions.size) walk(root, (node) => {
102
+ if (node.position && (offset || prefix.length)) {
103
+ const start = Math.max(0, node.position.start.offset - prefix.length + offset);
104
+ const end = Math.max(start, node.position.end.offset - prefix.length + offset);
105
+ node.position = { start: sourcePoint(start, lines), end: sourcePoint(end, lines) };
106
+ }
107
+ if (node.type === "mdxJsxFlowElement" || node.type === "mdxJsxTextElement") {
108
+ const definition = tagDefinitions.get(node.name ?? "");
109
+ const rawAttributes = node.attributes;
110
+ const attributes = {};
111
+ const attributeNodes = {};
112
+ for (const attr of rawAttributes ?? []) {
113
+ if (attr.type === "mdxJsxAttribute" && (typeof attr.value === "string" || attr.value === null)) {
114
+ attributes[attr.name] = attr.value ?? true;
115
+ if (definition && typeof attr.value === "string" && attr.position) {
116
+ const start = attr.position.start.offset - prefix.length + offset;
117
+ const end = attr.position.end.offset - prefix.length + offset;
118
+ const raw = context.source.slice(start, end), opening = raw.search(/["']/);
119
+ if (opening >= 0) attributeNodes[attr.name] = { type: "text", value: attr.value, verbatimEscapes: true, position: { start: attributePoint(start + opening + 1), end: attributePoint(end - 1) } };
120
+ }
121
+ } else diagnostics.push({ message: "JSX expressions are not executed. Use string attributes or pass data from React.", offset: node.position?.start.offset });
122
+ }
123
+ node.inline = definition?.display === "block" ? false : definition?.display === "inline" ? true : node.type === "mdxJsxTextElement";
124
+ node.type = definition ? "component" : "html";
125
+ node.attributes = attributes;
126
+ if (Object.keys(attributeNodes).length) node.attributeNodes = attributeNodes;
127
+ node.selection = definition?.selection ?? "content";
128
+ if (!definition && node.position) {
129
+ node.value = context.source.slice(node.position.start.offset, node.position.end.offset);
130
+ node.children = void 0;
131
+ }
132
+ } else if (node.type === "containerDirective" || node.type === "leafDirective" || node.type === "textDirective") {
133
+ const definition = directiveDefinitions.get(node.name ?? "");
134
+ if (definition) {
135
+ const start = node.position?.start.offset ?? 0;
136
+ const end = context.source.indexOf("\n", start);
137
+ const header = context.source.slice(start, end < 0 ? context.source.length : end);
138
+ const brace = header.indexOf("{");
139
+ if (brace >= 0) {
140
+ const attributeNodes = {};
141
+ const expression = /([^\s{}=]+)\s*=\s*(?:"((?:\\.|[^"\\])*)"|'((?:\\.|[^'\\])*)'|([^\s}]+))/g;
142
+ const raw = header.slice(brace + 1);
143
+ for (const match of raw.matchAll(expression)) {
144
+ const name = match[1], value = node.attributes?.[name];
145
+ if (typeof value !== "string") continue;
146
+ const quoted = match[2] !== void 0 || match[3] !== void 0;
147
+ const valueLength = (match[2] ?? match[3] ?? match[4]).length;
148
+ const valueEnd = start + brace + 1 + match.index + match[0].length - (quoted ? 1 : 0);
149
+ attributeNodes[name] = { type: "text", value, position: { start: attributePoint(valueEnd - valueLength), end: attributePoint(valueEnd) } };
150
+ }
151
+ if (Object.keys(attributeNodes).length) node.attributeNodes = attributeNodes;
152
+ }
153
+ node.inline = node.type === "textDirective";
154
+ node.type = "component";
155
+ node.selection = definition.selection ?? "content";
156
+ }
157
+ }
158
+ });
159
+ if (offset || prefix.length) root.position = { start: sourcePoint(offset, lines), end: sourcePoint(offset + fragment.length, lines) };
160
+ for (const extension of extensions) {
161
+ try {
162
+ extension.transform?.(root, context);
163
+ } catch (error) {
164
+ diagnostics.push({ message: error instanceof Error ? error.message : String(error), extension: extension.name });
165
+ }
166
+ }
167
+ return { nodes: root.children ?? [], diagnostics, recoveryOffset };
168
+ };
169
+ }
170
+
171
+ // src/core/engine.ts
172
+ var sequence = 0;
173
+ var DocumentEngine = class {
174
+ id;
175
+ extensions;
176
+ parse;
177
+ snapshot;
178
+ nextBlock = 0;
179
+ listeners = /* @__PURE__ */ new Set();
180
+ definitionSignature = "";
181
+ recoveryOffset;
182
+ constructor(source = "", options = {}) {
183
+ this.id = options.id ?? `limr-${++sequence}`;
184
+ this.extensions = options.extensions ?? [];
185
+ this.parse = createParser(this.extensions);
186
+ this.update(source, { streaming: options.streaming });
187
+ }
188
+ getSnapshot = () => this.snapshot;
189
+ subscribe = (listener) => {
190
+ this.listeners.add(listener);
191
+ return () => this.listeners.delete(listener);
192
+ };
193
+ setExtensions(extensions) {
194
+ if (extensions === this.extensions) return;
195
+ this.parse = createParser(extensions);
196
+ this.extensions = extensions;
197
+ const previous = this.snapshot;
198
+ this.update(previous.source, { streaming: previous.streaming }, true);
199
+ }
200
+ append(chunk) {
201
+ return this.update(this.snapshot.source + chunk, { streaming: true });
202
+ }
203
+ finish() {
204
+ return this.update(this.snapshot.source, { streaming: false });
205
+ }
206
+ update(source, options = {}, force = false) {
207
+ const previous = this.snapshot;
208
+ const streaming = options.streaming ?? false;
209
+ if (!force && previous?.source === source && previous.streaming === streaming) return previous;
210
+ const globalTransform = this.extensions.some((ext) => ext.transform && ext.scope !== "local");
211
+ const append = !force && previous?.streaming && source.startsWith(previous.source) && !globalTransform;
212
+ const finalizing = !!previous?.streaming && !streaming;
213
+ let start = append && streaming && previous.blocks.length ? previous.blocks[previous.blocks.length - 1].range.start : 0;
214
+ const recovering = this.recoveryOffset !== void 0;
215
+ if (append && recovering) start = Math.min(start, this.recoveryOffset);
216
+ let reason = force || globalTransform ? "extension" : !previous ? "initial" : finalizing ? "finalize" : append ? "append" : "replace";
217
+ const lines = start ? lineStarts(source) : [];
218
+ const context = { source, streaming, documentId: this.id };
219
+ let retained = start ? previous.blocks.filter((block) => block.range.end <= start) : [];
220
+ const environment = [];
221
+ for (const block of retained) walk(block.node, (node) => {
222
+ if (node.type === "definition" || node.type === "footnoteDefinition") {
223
+ const range = rangeOf(node);
224
+ environment.push(source.slice(range.start, range.end));
225
+ }
226
+ });
227
+ let parsed = this.parse(source.slice(start), start, context, lines, environment.join("\n\n"));
228
+ const getSignature = (nodes) => {
229
+ const entries = [];
230
+ for (const node of nodes) walk(node, (child) => {
231
+ if (child.type === "definition" || child.type === "footnoteDefinition") {
232
+ const range = rangeOf(child);
233
+ entries.push(source.slice(range.start, range.end));
234
+ }
235
+ });
236
+ return entries.join("\0");
237
+ };
238
+ let signature = getSignature([...retained.map((block) => block.node), ...parsed.nodes]);
239
+ let parsedCharacters = source.length - start + environment.join("\n\n").length;
240
+ const definitionsChanged = !!previous && signature !== this.definitionSignature;
241
+ if (start && definitionsChanged) {
242
+ reason = "definitions";
243
+ start = 0;
244
+ retained = [];
245
+ parsed = this.parse(source, 0, context, lines);
246
+ signature = getSignature(parsed.nodes);
247
+ parsedCharacters += source.length;
248
+ }
249
+ this.definitionSignature = signature;
250
+ this.recoveryOffset = parsed.recoveryOffset;
251
+ const oldAt = new Map(previous?.blocks.map((block) => [block.range.start, block]));
252
+ let reused = retained.length;
253
+ const blocks = [...retained];
254
+ for (let index = 0; index < parsed.nodes.length; index++) {
255
+ const node = parsed.nodes[index];
256
+ const range = rangeOf(node);
257
+ const old = oldAt.get(range.start);
258
+ const pending = streaming && index === parsed.nodes.length - 1;
259
+ const reusable = !definitionsChanged && !recovering && reason === "append" && old && old.node.type === node.type && old.pending === pending && previous.source.slice(old.range.start, old.range.end) === source.slice(range.start, range.end);
260
+ if (reusable) {
261
+ blocks.push(old);
262
+ reused++;
263
+ } else blocks.push({ id: old?.id ?? `${this.id}-b${++this.nextBlock}`, node, range, pending });
264
+ }
265
+ const headings = [];
266
+ const definitions = /* @__PURE__ */ new Map();
267
+ const footnotes = /* @__PURE__ */ new Map();
268
+ const footnoteOrder = [];
269
+ const annotations = /* @__PURE__ */ new Map();
270
+ const occurrences = [];
271
+ const slugCounts = /* @__PURE__ */ new Map();
272
+ for (const block of blocks) walk(block.node, (node) => {
273
+ if (node.type === "heading") {
274
+ const text = textContent(node);
275
+ const base = slugify(text);
276
+ const count = slugCounts.get(base) ?? 0;
277
+ slugCounts.set(base, count + 1);
278
+ headings.push({ id: `${this.id}-${base}${count ? `-${count}` : ""}`, text, level: Number(node.depth), range: rangeOf(node), blockId: block.id });
279
+ }
280
+ if (node.type === "definition" && !definitions.has(String(node.identifier))) definitions.set(String(node.identifier), node);
281
+ if (node.type === "footnoteDefinition" && !footnotes.has(String(node.identifier))) footnotes.set(String(node.identifier), node);
282
+ if (node.type === "footnoteReference" && !footnoteOrder.includes(String(node.identifier))) footnoteOrder.push(String(node.identifier));
283
+ if (node.type === "annotationDefinition") {
284
+ const annotation = node.annotation;
285
+ annotations.set(annotation.id, annotation);
286
+ }
287
+ if (node.type === "annotationReference") {
288
+ const range = rangeOf(node);
289
+ occurrences.push({ id: `${this.id}-ref-${range.start}`, range, annotationIds: node.annotationIds, embedded: true });
290
+ }
291
+ });
292
+ this.snapshot = {
293
+ id: this.id,
294
+ revision: (previous?.revision ?? -1) + 1,
295
+ source,
296
+ streaming,
297
+ blocks,
298
+ headings: previous && headings.length === previous.headings.length && headings.every((heading, index) => {
299
+ const old = previous.headings[index];
300
+ return heading.id === old.id && heading.text === old.text && heading.level === old.level && heading.blockId === old.blockId && heading.range.start === old.range.start && heading.range.end === old.range.end;
301
+ }) ? previous.headings : headings,
302
+ definitions,
303
+ footnotes,
304
+ footnoteOrder,
305
+ annotations: [...annotations.values()],
306
+ occurrences,
307
+ diagnostics: parsed.diagnostics,
308
+ metrics: { parsedCharacters, reusedBlocks: reused, parsedBlocks: parsed.nodes.length, fullParse: start === 0, reason }
309
+ };
310
+ for (const listener of this.listeners) listener();
311
+ return this.snapshot;
312
+ }
313
+ };
314
+ function createDocument(source = "", options = {}) {
315
+ return new DocumentEngine(source, options);
316
+ }
317
+ function replaceExtension(extensions, replacement) {
318
+ const exists = extensions.some((extension) => extension.name === replacement.name);
319
+ return exists ? extensions.map((extension) => extension.name === replacement.name ? replacement : extension) : [...extensions, replacement];
320
+ }
321
+
322
+ // src/core/selection.ts
323
+ import { decodeString } from "micromark-util-decode-string";
324
+ function mapText(source, value, range, options = {}) {
325
+ const raw = source.slice(range.start, range.end);
326
+ const starts = [], ends = [];
327
+ let rendered = 0, exact = true;
328
+ for (let at = 0; at < raw.length && rendered < value.length; ) {
329
+ let length = 1, decoded = raw[at];
330
+ if (options.escapes !== false && raw[at] === "\\" && /[!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~]/.test(raw[at + 1] ?? "")) {
331
+ length = 2;
332
+ decoded = raw[at + 1];
333
+ } else if (raw[at] === "&") {
334
+ const entity = /^&(?:#x[\da-f]+|#\d+|[a-z][\da-z]+);/i.exec(raw.slice(at));
335
+ if (entity) {
336
+ const result = decodeString(entity[0]);
337
+ if (result !== entity[0]) {
338
+ length = entity[0].length;
339
+ decoded = result;
340
+ }
341
+ }
342
+ } else if (raw[at] === "\r") {
343
+ length = raw[at + 1] === "\n" ? 2 : 1;
344
+ decoded = "\n";
345
+ }
346
+ if (value.startsWith(decoded, rendered)) {
347
+ for (let unit = 0; unit < decoded.length; unit++) {
348
+ starts.push(range.start + at);
349
+ ends.push(range.start + at + length);
350
+ }
351
+ rendered += decoded.length;
352
+ } else if (!/[\s>]/.test(decoded)) exact = false;
353
+ at += length;
354
+ }
355
+ if (rendered !== value.length) exact = false;
356
+ while (starts.length < value.length) {
357
+ starts.push(range.start);
358
+ ends.push(range.end);
359
+ }
360
+ return { starts, ends, exact };
361
+ }
362
+ function selectionFromRange(document, raw, options = {}) {
363
+ const initial = { start: Math.max(0, raw.start), end: Math.min(document.source.length, raw.end) };
364
+ const syntax = { ...initial };
365
+ const containers = /* @__PURE__ */ new Set(["strong", "emphasis", "delete", "link", "linkReference", "heading", "listItem", "blockquote"]);
366
+ const source = document.source;
367
+ const whitespace = (start, end) => !source.slice(start, end).trim();
368
+ function expand(node) {
369
+ const range = rangeOf(node);
370
+ if (!intersects(range, syntax) || range.start >= syntax.start && range.end <= syntax.end) return;
371
+ node.children?.forEach(expand);
372
+ let content;
373
+ if (containers.has(node.type) && node.children?.length) {
374
+ content = { start: rangeOf(node.children[0]).start, end: rangeOf(node.children.at(-1)).end };
375
+ } else if (node.type === "inlineCode" || node.type === "inlineMath") {
376
+ const length = (node.type === "inlineCode" ? /^`+/ : /^\$+/).exec(source.slice(range.start, range.end))?.[0].length ?? 0;
377
+ content = { start: range.start + length, end: range.end - length };
378
+ } else if (node.type === "code" || node.type === "math") {
379
+ const raw2 = source.slice(range.start, range.end);
380
+ const opening = /^[ \t]*(`{3,}|~{3,}|\${2,})[^\r\n]*(?:\r\n|\r|\n)/.exec(raw2);
381
+ if (opening) {
382
+ const fence = opening[1];
383
+ const closing = /(?:\r\n|\r|\n)[ \t]*(`+|~+|\$+)[ \t]*$/.exec(raw2);
384
+ const closed = closing && closing[1][0] === fence[0] && closing[1].length >= fence.length;
385
+ content = { start: range.start + opening[0].length, end: closed ? range.start + closing.index : range.end };
386
+ }
387
+ }
388
+ if (content) {
389
+ if (syntax.start > range.start && syntax.start < range.end && (syntax.start <= content.start || whitespace(content.start, syntax.start))) syntax.start = range.start;
390
+ if (syntax.end < range.end && syntax.end > range.start && (syntax.end >= content.end || whitespace(syntax.end, content.end))) syntax.end = range.end;
391
+ }
392
+ if (node.type === "blockquote") {
393
+ const line = Math.max(range.start, source.lastIndexOf("\n", syntax.start - 1) + 1);
394
+ if (/^[ \t]*(?:>[ \t]*)+$/.test(source.slice(line, syntax.start))) syntax.start = line;
395
+ }
396
+ }
397
+ let lo = 0, hi = document.blocks.length;
398
+ while (lo < hi) {
399
+ const mid = lo + hi >>> 1;
400
+ if (document.blocks[mid].range.end <= initial.start) lo = mid + 1;
401
+ else hi = mid;
402
+ }
403
+ const selectedBlocks = [];
404
+ for (let index = lo; index < document.blocks.length && document.blocks[index].range.start < initial.end; index++) {
405
+ const block = document.blocks[index];
406
+ selectedBlocks.push(block);
407
+ expand(block.node);
408
+ }
409
+ const blockRanges = [];
410
+ const blockTypes = /* @__PURE__ */ new Set(["paragraph", "heading", "code", "math", "table", "listItem", "thematicBreak", "html"]);
411
+ function collect(node) {
412
+ const range = rangeOf(node);
413
+ if (!intersects(range, initial)) return;
414
+ if (blockTypes.has(node.type) || node.type === "component" && !node.inline) {
415
+ blockRanges.push(range);
416
+ return;
417
+ }
418
+ node.children?.forEach(collect);
419
+ }
420
+ selectedBlocks.forEach((block) => collect(block.node));
421
+ const result = (ranges) => ({ ranges, sourceText: ranges.map((range) => document.source.slice(range.start, range.end)).join("\n\n") });
422
+ return {
423
+ documentId: document.id,
424
+ revision: document.revision,
425
+ text: options.text ?? document.source.slice(initial.start, initial.end),
426
+ quality: options.quality ?? "exact",
427
+ settled: options.settled ?? true,
428
+ raw: result([initial]),
429
+ syntax: result([syntax]),
430
+ blocks: result(blockRanges.length ? blockRanges : [initial])
431
+ };
432
+ }
433
+
434
+ // src/core/annotations.ts
435
+ var defaultHighlight = { color: "#F2C744", style: "background" };
436
+ var sameRange = (a, b) => a.start === b.start && a.end === b.end;
437
+ function annotationReferenceRange(document, occurrence) {
438
+ if (!occurrence.embedded) return occurrence.range;
439
+ let reference = occurrence.range;
440
+ const visit = (node) => {
441
+ const range = rangeOf(node);
442
+ if (!intersects(range, occurrence.range)) return;
443
+ if (["paragraph", "heading", "listItem", "tableCell"].includes(node.type)) reference = range;
444
+ node.children?.forEach(visit);
445
+ };
446
+ for (const block of document.blocks) if (intersects(block.range, occurrence.range)) visit(block.node);
447
+ return reference;
448
+ }
449
+ function resolveAnnotationAnchors(annotation, document) {
450
+ return (annotation.anchors ?? (annotation.range ? [{ range: annotation.range }] : [])).flatMap((anchor) => {
451
+ if (anchor.documentId && anchor.documentId !== document.id) return [];
452
+ let range = anchor.range;
453
+ if (anchor.quote && document.source.slice(range.start, range.end) !== anchor.quote) {
454
+ const start = document.source.indexOf(anchor.quote);
455
+ if (start < 0 || document.source.indexOf(anchor.quote, start + 1) >= 0) return [];
456
+ range = { start, end: start + anchor.quote.length };
457
+ } else if (anchor.revision !== void 0 && anchor.revision !== document.revision && !anchor.quote) return [];
458
+ return range.start >= 0 && range.end <= document.source.length && range.start <= range.end ? [{ ...anchor, range }] : [];
459
+ });
460
+ }
461
+
462
+ export {
463
+ walk,
464
+ textContent,
465
+ rangeOf,
466
+ intersects,
467
+ safeUrl,
468
+ DocumentEngine,
469
+ createDocument,
470
+ replaceExtension,
471
+ mapText,
472
+ selectionFromRange,
473
+ defaultHighlight,
474
+ sameRange,
475
+ annotationReferenceRange,
476
+ resolveAnnotationAnchors
477
+ };
478
+ //# sourceMappingURL=chunk-TTISGBST.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/parser.ts","../src/core/tree.ts","../src/core/engine.ts","../src/core/selection.ts","../src/core/annotations.ts"],"sourcesContent":["import { fromMarkdown } from 'mdast-util-from-markdown';\nimport { mdxJsx } from 'micromark-extension-mdx-jsx';\nimport { mdxJsxFromMarkdown } from 'mdast-util-mdx-jsx';\nimport { directive } from 'micromark-extension-directive';\nimport { directiveFromMarkdown } from 'mdast-util-directive';\nimport { lineStarts, sourcePoint, walk } from './tree';\nimport type { Diagnostic, MarkdownNode, ParseContext, SourcePosition, SyntaxExtension } from './types';\n\nexport function validateExtensions(extensions: readonly SyntaxExtension[]): void {\n const names = new Set<string>();\n const tags = new Set<string>();\n const directives = new Set<string>();\n for (const extension of extensions) {\n if (names.has(extension.name)) throw new Error(`Duplicate LiMR extension: ${extension.name}. Use replaceExtension() to replace it explicitly.`);\n names.add(extension.name);\n for (const [items, known, kind] of [[extension.tags, tags, 'tag'], [extension.directives, directives, 'directive']] as const) {\n for (const name of items ?? []) {\n if (known.has(name)) throw new Error(`Duplicate LiMR ${kind}: ${name}`);\n known.add(name);\n }\n }\n }\n}\n\nexport function createParser(extensions: readonly SyntaxExtension[]) {\n validateExtensions(extensions);\n const tagDefinitions = new Map(extensions.flatMap(ext => (ext.tags ?? []).map(name => [name, ext] as const)));\n const directiveDefinitions = new Map(extensions.flatMap(ext => (ext.directives ?? []).map(name => [name, ext] as const)));\n const syntax = extensions.flatMap(ext => [...ext.micromark ?? []]);\n const mdast = extensions.flatMap(ext => [...ext.mdast ?? []]);\n if (directiveDefinitions.size) { syntax.push(directive()); mdast.push(directiveFromMarkdown()); }\n // CommonMark's HTML blocks otherwise swallow same-line native tag names such\n // as <figcaption>**caption**</figcaption> before the JSX adapter can see them.\n // Unknown JSX remains inert through the whitelist below; recovery keeps HTML.\n const jsxSyntax = tagDefinitions.size ? [...syntax, { disable: { null: ['htmlFlow', 'htmlText'] } }, mdxJsx()] : syntax;\n const jsxMdast = tagDefinitions.size ? [...mdast, mdxJsxFromMarkdown()] : mdast;\n\n return (fragment: string, offset: number, context: ParseContext, lines: readonly number[], environment = '') => {\n // Definitions are a parsing environment, never part of the stored source.\n // A known prefix offset is removed from EVERY node position below.\n // A neutral paragraph closes footnote containers. Without it, an indented\n // suffix can be consumed as part of a synthetic footnote definition.\n const prefix = environment ? `${environment}\\n\\nlimr-definition-boundary\\n\\n` : '';\n const input = prefix + fragment;\n const diagnostics: Diagnostic[] = [];\n let attributeLines: readonly number[] | undefined;\n const attributePoint = (at: number) => sourcePoint(at, lines.length ? lines : attributeLines ??= lineStarts(context.source));\n let recoveryOffset: number | undefined;\n let root: MarkdownNode;\n try {\n root = fromMarkdown(input, { extensions: jsxSyntax, mdastExtensions: jsxMdast }) as unknown as MarkdownNode;\n } catch (error) {\n // Incomplete JSX is common during streaming. Preserve readable Markdown,\n // treat HTML as inert source and retry the final block on the next append.\n root = fromMarkdown(input, { extensions: syntax, mdastExtensions: mdast }) as unknown as MarkdownNode;\n recoveryOffset = offset;\n diagnostics.push({ message: error instanceof Error ? error.message : String(error), offset });\n }\n root.children = root.children?.filter(node => (node.position?.start.offset ?? 0) >= prefix.length);\n if (offset || prefix.length || tagDefinitions.size || directiveDefinitions.size) walk(root, node => {\n if (node.position && (offset || prefix.length)) {\n const start = Math.max(0, node.position.start.offset - prefix.length + offset);\n const end = Math.max(start, node.position.end.offset - prefix.length + offset);\n node.position = { start: sourcePoint(start, lines), end: sourcePoint(end, lines) };\n }\n if (node.type === 'mdxJsxFlowElement' || node.type === 'mdxJsxTextElement') {\n const definition = tagDefinitions.get(node.name ?? '');\n const rawAttributes = node.attributes as unknown as { type: string; name: string; value: unknown; position?: SourcePosition }[];\n const attributes: Record<string, string | boolean | number> = {};\n const attributeNodes: Record<string, MarkdownNode> = {};\n for (const attr of rawAttributes ?? []) {\n if (attr.type === 'mdxJsxAttribute' && (typeof attr.value === 'string' || attr.value === null)) {\n attributes[attr.name] = attr.value ?? true;\n if (definition && typeof attr.value === 'string' && attr.position) {\n const start = attr.position.start.offset - prefix.length + offset;\n const end = attr.position.end.offset - prefix.length + offset;\n const raw = context.source.slice(start, end), opening = raw.search(/[\"']/);\n if (opening >= 0) attributeNodes[attr.name] = { type: 'text', value: attr.value, verbatimEscapes: true, position: { start: attributePoint(start + opening + 1), end: attributePoint(end - 1) } };\n }\n }\n else diagnostics.push({ message: 'JSX expressions are not executed. Use string attributes or pass data from React.', offset: node.position?.start.offset });\n }\n node.inline = definition?.display === 'block' ? false : definition?.display === 'inline' ? true : node.type === 'mdxJsxTextElement';\n node.type = definition ? 'component' : 'html';\n node.attributes = attributes;\n if (Object.keys(attributeNodes).length) node.attributeNodes = attributeNodes;\n node.selection = definition?.selection ?? 'content';\n if (!definition && node.position) {\n node.value = context.source.slice(node.position.start.offset, node.position.end.offset);\n node.children = undefined;\n }\n } else if (node.type === 'containerDirective' || node.type === 'leafDirective' || node.type === 'textDirective') {\n const definition = directiveDefinitions.get(node.name ?? '');\n if (definition) {\n // Directive attributes have no mdast positions. Scan only their header,\n // respecting quoted values instead of searching the rendered title.\n const start = node.position?.start.offset ?? 0;\n const end = context.source.indexOf('\\n', start);\n const header = context.source.slice(start, end < 0 ? context.source.length : end);\n const brace = header.indexOf('{');\n if (brace >= 0) {\n const attributeNodes: Record<string, MarkdownNode> = {};\n const expression = /([^\\s{}=]+)\\s*=\\s*(?:\"((?:\\\\.|[^\"\\\\])*)\"|'((?:\\\\.|[^'\\\\])*)'|([^\\s}]+))/g;\n const raw = header.slice(brace + 1);\n for (const match of raw.matchAll(expression)) {\n const name = match[1], value = node.attributes?.[name];\n if (typeof value !== 'string') continue;\n const quoted = match[2] !== undefined || match[3] !== undefined;\n const valueLength = (match[2] ?? match[3] ?? match[4]).length;\n const valueEnd = start + brace + 1 + match.index! + match[0].length - (quoted ? 1 : 0);\n attributeNodes[name] = { type: 'text', value, position: { start: attributePoint(valueEnd - valueLength), end: attributePoint(valueEnd) } };\n }\n if (Object.keys(attributeNodes).length) node.attributeNodes = attributeNodes;\n }\n node.inline = node.type === 'textDirective';\n node.type = 'component';\n node.selection = definition.selection ?? 'content';\n }\n }\n });\n if (offset || prefix.length) root.position = { start: sourcePoint(offset, lines), end: sourcePoint(offset + fragment.length, lines) };\n for (const extension of extensions) {\n try { extension.transform?.(root, context); }\n catch (error) { diagnostics.push({ message: error instanceof Error ? error.message : String(error), extension: extension.name }); }\n }\n return { nodes: root.children ?? [], diagnostics, recoveryOffset };\n };\n}\n","import type { MarkdownNode, SourcePoint, SourceRange } from './types';\n\nexport function walk(node: MarkdownNode, visit: (node: MarkdownNode, parent?: MarkdownNode) => void, parent?: MarkdownNode): void {\n visit(node, parent);\n for (const child of node.children ?? []) walk(child, visit, node);\n}\nexport function textContent(node: MarkdownNode): string {\n if (node.type === 'image') return String(node.alt ?? '');\n return node.value ?? node.children?.map(textContent).join('') ?? '';\n}\nexport function rangeOf(node: MarkdownNode): SourceRange {\n return { start: node.position?.start.offset ?? 0, end: node.position?.end.offset ?? 0 };\n}\nexport function intersects(a: SourceRange, b: SourceRange): boolean { return a.start < b.end && b.start < a.end; }\nexport function lineStarts(source: string): number[] {\n const result = [0];\n for (let i = 0; i < source.length; i++) {\n if (source[i] === '\\r') { if (source[i + 1] === '\\n') i++; result.push(i + 1); }\n else if (source[i] === '\\n') result.push(i + 1);\n }\n return result;\n}\nexport function sourcePoint(offset: number, lines: readonly number[]): SourcePoint {\n let lo = 0, hi = lines.length;\n while (lo + 1 < hi) { const mid = (lo + hi) >>> 1; if (lines[mid] <= offset) lo = mid; else hi = mid; }\n return { offset, line: lo + 1, column: offset - lines[lo] + 1 };\n}\nexport function slugify(text: string): string {\n return text.toLowerCase().trim().replace(/[^\\p{L}\\p{N}\\s_-]/gu, '').replace(/[\\s_]+/g, '-').replace(/^-+|-+$/g, '') || 'section';\n}\nexport function safeUrl(value: unknown, image = false): string | undefined {\n if (typeof value !== 'string') return undefined;\n const normalized = value.trim().replace(/[\\u0000-\\u0020\\u007f]/g, '');\n if (/^(?:https?:|mailto:|tel:)/i.test(normalized) || !/^[a-z][a-z\\d+.-]*:/i.test(normalized)) return value;\n if (image && /^data:image\\/(?:png|gif|jpe?g|webp|avif);base64,/i.test(normalized)) return value;\n return undefined;\n}\n","import { createParser } from './parser';\nimport { lineStarts, rangeOf, slugify, textContent, walk } from './tree';\nimport type { Annotation, AnnotationOccurrence, Block, DocumentMetrics, DocumentOptions, DocumentSnapshot, Heading, MarkdownNode, SyntaxExtension } from './types';\n\nlet sequence = 0;\n\n/** A synchronous, DOM-free document session. React/scroll state never enters it. */\nexport class DocumentEngine {\n readonly id: string;\n private extensions: readonly SyntaxExtension[];\n private parse: ReturnType<typeof createParser>;\n private snapshot?: DocumentSnapshot;\n private nextBlock = 0;\n private listeners = new Set<() => void>();\n private definitionSignature = '';\n private recoveryOffset: number | undefined;\n\n constructor(source = '', options: DocumentOptions = {}) {\n this.id = options.id ?? `limr-${++sequence}`;\n this.extensions = options.extensions ?? [];\n this.parse = createParser(this.extensions);\n this.update(source, { streaming: options.streaming });\n }\n\n getSnapshot = (): DocumentSnapshot => this.snapshot!;\n subscribe = (listener: () => void): (() => void) => { this.listeners.add(listener); return () => this.listeners.delete(listener); };\n\n setExtensions(extensions: readonly SyntaxExtension[]): void {\n if (extensions === this.extensions) return;\n this.parse = createParser(extensions);\n this.extensions = extensions;\n const previous = this.snapshot!;\n this.update(previous.source, { streaming: previous.streaming }, true);\n }\n\n append(chunk: string): DocumentSnapshot { return this.update(this.snapshot!.source + chunk, { streaming: true }); }\n finish(): DocumentSnapshot { return this.update(this.snapshot!.source, { streaming: false }); }\n\n update(source: string, options: { streaming?: boolean } = {}, force = false): DocumentSnapshot {\n const previous = this.snapshot;\n const streaming = options.streaming ?? false;\n if (!force && previous?.source === source && previous.streaming === streaming) return previous;\n const globalTransform = this.extensions.some(ext => ext.transform && ext.scope !== 'local');\n const append = !force && previous?.streaming && source.startsWith(previous.source) && !globalTransform;\n const finalizing = !!previous?.streaming && !streaming;\n let start = append && streaming && previous.blocks.length ? previous.blocks[previous.blocks.length - 1].range.start : 0;\n const recovering = this.recoveryOffset !== undefined;\n if (append && recovering) start = Math.min(start, this.recoveryOffset!);\n let reason: DocumentMetrics['reason'] = force || globalTransform ? 'extension' : !previous ? 'initial' : finalizing ? 'finalize' : append ? 'append' : 'replace';\n const lines = start ? lineStarts(source) : [];\n const context = { source, streaming, documentId: this.id };\n let retained = start ? previous!.blocks.filter(block => block.range.end <= start) : [];\n const environment: string[] = [];\n for (const block of retained) walk(block.node, node => {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') { const range = rangeOf(node); environment.push(source.slice(range.start, range.end)); }\n });\n let parsed = this.parse(source.slice(start), start, context, lines, environment.join('\\n\\n'));\n const getSignature = (nodes: readonly MarkdownNode[]) => {\n const entries: string[] = [];\n for (const node of nodes) walk(node, child => {\n if (child.type === 'definition' || child.type === 'footnoteDefinition') { const range = rangeOf(child); entries.push(source.slice(range.start, range.end)); }\n });\n return entries.join('\\u0000');\n };\n let signature = getSignature([...retained.map(block => block.node), ...parsed.nodes]);\n let parsedCharacters = source.length - start + environment.join('\\n\\n').length;\n const definitionsChanged = !!previous && signature !== this.definitionSignature;\n if (start && definitionsChanged) {\n reason = 'definitions';\n start = 0;\n retained = [];\n parsed = this.parse(source, 0, context, lines);\n signature = getSignature(parsed.nodes);\n parsedCharacters += source.length;\n }\n this.definitionSignature = signature;\n this.recoveryOffset = parsed.recoveryOffset;\n const oldAt = new Map(previous?.blocks.map(block => [block.range.start, block]));\n let reused = retained.length;\n const blocks: Block[] = [...retained];\n for (let index = 0; index < parsed.nodes.length; index++) {\n const node = parsed.nodes[index];\n const range = rangeOf(node);\n const old = oldAt.get(range.start);\n const pending = streaming && index === parsed.nodes.length - 1;\n // Definition changes can change semantic nodes without changing their raw text.\n const reusable = !definitionsChanged && !recovering && reason === 'append' && old && old.node.type === node.type && old.pending === pending && previous!.source.slice(old.range.start, old.range.end) === source.slice(range.start, range.end);\n if (reusable) { blocks.push(old); reused++; }\n else blocks.push({ id: old?.id ?? `${this.id}-b${++this.nextBlock}`, node, range, pending });\n }\n const headings: Heading[] = [];\n const definitions = new Map<string, MarkdownNode>();\n const footnotes = new Map<string, MarkdownNode>();\n const footnoteOrder: string[] = [];\n const annotations = new Map<string, Annotation>();\n const occurrences: AnnotationOccurrence[] = [];\n const slugCounts = new Map<string, number>();\n for (const block of blocks) walk(block.node, node => {\n if (node.type === 'heading') {\n const text = textContent(node);\n const base = slugify(text);\n const count = slugCounts.get(base) ?? 0;\n slugCounts.set(base, count + 1);\n headings.push({ id: `${this.id}-${base}${count ? `-${count}` : ''}`, text, level: Number(node.depth), range: rangeOf(node), blockId: block.id });\n }\n if (node.type === 'definition' && !definitions.has(String(node.identifier))) definitions.set(String(node.identifier), node);\n if (node.type === 'footnoteDefinition' && !footnotes.has(String(node.identifier))) footnotes.set(String(node.identifier), node);\n if (node.type === 'footnoteReference' && !footnoteOrder.includes(String(node.identifier))) footnoteOrder.push(String(node.identifier));\n if (node.type === 'annotationDefinition') {\n const annotation = node.annotation as Annotation;\n annotations.set(annotation.id, annotation);\n }\n if (node.type === 'annotationReference') {\n const range = rangeOf(node);\n occurrences.push({ id: `${this.id}-ref-${range.start}`, range, annotationIds: node.annotationIds as string[], embedded: true });\n }\n });\n this.snapshot = {\n id: this.id, revision: (previous?.revision ?? -1) + 1, source, streaming,\n blocks,\n headings: previous && headings.length === previous.headings.length && headings.every((heading, index) => {\n const old = previous.headings[index];\n return heading.id === old.id && heading.text === old.text && heading.level === old.level && heading.blockId === old.blockId && heading.range.start === old.range.start && heading.range.end === old.range.end;\n }) ? previous.headings : headings,\n definitions, footnotes, footnoteOrder, annotations: [...annotations.values()], occurrences,\n diagnostics: parsed.diagnostics,\n metrics: { parsedCharacters, reusedBlocks: reused, parsedBlocks: parsed.nodes.length, fullParse: start === 0, reason },\n };\n for (const listener of this.listeners) listener();\n return this.snapshot;\n }\n}\n\nexport function createDocument(source = '', options: DocumentOptions = {}): DocumentEngine { return new DocumentEngine(source, options); }\n\nexport function replaceExtension<T extends SyntaxExtension>(extensions: readonly T[], replacement: T): T[] {\n const exists = extensions.some(extension => extension.name === replacement.name);\n return exists ? extensions.map(extension => extension.name === replacement.name ? replacement : extension) : [...extensions, replacement];\n}\n","import { decodeString } from 'micromark-util-decode-string';\nimport { intersects, rangeOf } from './tree';\nimport type { DocumentSnapshot, MarkdownNode, SelectionResult, SelectionSnapshot, SourceRange } from './types';\n\nexport interface TextMapping { starts: readonly number[]; ends: readonly number[]; exact: boolean }\n\n/** Align decoded text to original source, retaining escape/entity/CRLF boundaries. */\nexport function mapText(source: string, value: string, range: SourceRange, options: { escapes?: boolean } = {}): TextMapping {\n const raw = source.slice(range.start, range.end);\n const starts: number[] = [], ends: number[] = [];\n let rendered = 0, exact = true;\n for (let at = 0; at < raw.length && rendered < value.length;) {\n let length = 1, decoded = raw[at];\n if (options.escapes !== false && raw[at] === '\\\\' && /[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~]/.test(raw[at + 1] ?? '')) { length = 2; decoded = raw[at + 1]; }\n else if (raw[at] === '&') {\n const entity = /^&(?:#x[\\da-f]+|#\\d+|[a-z][\\da-z]+);/i.exec(raw.slice(at));\n if (entity) { const result = decodeString(entity[0]); if (result !== entity[0]) { length = entity[0].length; decoded = result; } }\n } else if (raw[at] === '\\r') { length = raw[at + 1] === '\\n' ? 2 : 1; decoded = '\\n'; }\n if (value.startsWith(decoded, rendered)) {\n for (let unit = 0; unit < decoded.length; unit++) { starts.push(range.start + at); ends.push(range.start + at + length); }\n rendered += decoded.length;\n } else if (!/[\\s>]/.test(decoded)) exact = false;\n at += length;\n }\n if (rendered !== value.length) exact = false;\n while (starts.length < value.length) { starts.push(range.start); ends.push(range.end); }\n return { starts, ends, exact };\n}\n\nexport function selectionFromRange(document: DocumentSnapshot, raw: SourceRange, options: { text?: string; quality?: SelectionSnapshot['quality']; settled?: boolean } = {}): SelectionSnapshot {\n const initial = { start: Math.max(0, raw.start), end: Math.min(document.source.length, raw.end) };\n const syntax = { ...initial };\n const containers = new Set(['strong', 'emphasis', 'delete', 'link', 'linkReference', 'heading', 'listItem', 'blockquote']);\n const source = document.source;\n const whitespace = (start: number, end: number) => !source.slice(start, end).trim();\n // Walk boundary ancestors inside-out. Each edge absorbs only its adjacent\n // delimiter, never the unselected words inside an ancestor. Custom component\n // tags remain boundaries; their Markdown children still participate normally.\n function expand(node: MarkdownNode) {\n const range = rangeOf(node);\n if (!intersects(range, syntax) || range.start >= syntax.start && range.end <= syntax.end) return;\n node.children?.forEach(expand);\n let content: SourceRange | undefined;\n if (containers.has(node.type) && node.children?.length) {\n content = { start: rangeOf(node.children[0]).start, end: rangeOf(node.children.at(-1)!).end };\n } else if (node.type === 'inlineCode' || node.type === 'inlineMath') {\n const length = (node.type === 'inlineCode' ? /^`+/ : /^\\$+/).exec(source.slice(range.start, range.end))?.[0].length ?? 0;\n content = { start: range.start + length, end: range.end - length };\n } else if (node.type === 'code' || node.type === 'math') {\n const raw = source.slice(range.start, range.end);\n const opening = /^[ \\t]*(`{3,}|~{3,}|\\${2,})[^\\r\\n]*(?:\\r\\n|\\r|\\n)/.exec(raw);\n if (opening) {\n const fence = opening[1];\n const closing = /(?:\\r\\n|\\r|\\n)[ \\t]*(`+|~+|\\$+)[ \\t]*$/.exec(raw);\n const closed = closing && closing[1][0] === fence[0] && closing[1].length >= fence.length;\n content = { start: range.start + opening[0].length, end: closed ? range.start + closing.index : range.end };\n }\n }\n if (content) {\n if (syntax.start > range.start && syntax.start < range.end && (syntax.start <= content.start || whitespace(content.start, syntax.start))) syntax.start = range.start;\n if (syntax.end < range.end && syntax.end > range.start && (syntax.end >= content.end || whitespace(syntax.end, content.end))) syntax.end = range.end;\n }\n if (node.type === 'blockquote') {\n // Continuation lines have their own quote prefixes, independent of the\n // paragraph's first line. Do not consume earlier, unselected quote text.\n const line = Math.max(range.start, source.lastIndexOf('\\n', syntax.start - 1) + 1);\n if (/^[ \\t]*(?:>[ \\t]*)+$/.test(source.slice(line, syntax.start))) syntax.start = line;\n }\n }\n let lo = 0, hi = document.blocks.length;\n while (lo < hi) { const mid = (lo + hi) >>> 1; if (document.blocks[mid].range.end <= initial.start) lo = mid + 1; else hi = mid; }\n const selectedBlocks = [];\n for (let index = lo; index < document.blocks.length && document.blocks[index].range.start < initial.end; index++) {\n const block = document.blocks[index]; selectedBlocks.push(block); expand(block.node);\n }\n const blockRanges: SourceRange[] = [];\n const blockTypes = new Set(['paragraph', 'heading', 'code', 'math', 'table', 'listItem', 'thematicBreak', 'html']);\n function collect(node: MarkdownNode) {\n const range = rangeOf(node);\n if (!intersects(range, initial)) return;\n if (blockTypes.has(node.type) || node.type === 'component' && !node.inline) { blockRanges.push(range); return; }\n node.children?.forEach(collect);\n }\n selectedBlocks.forEach(block => collect(block.node));\n const result = (ranges: SourceRange[]): SelectionResult => ({ ranges, sourceText: ranges.map(range => document.source.slice(range.start, range.end)).join('\\n\\n') });\n return {\n documentId: document.id, revision: document.revision, text: options.text ?? document.source.slice(initial.start, initial.end),\n quality: options.quality ?? 'exact', settled: options.settled ?? true,\n raw: result([initial]), syntax: result([syntax]), blocks: result(blockRanges.length ? blockRanges : [initial]),\n };\n}\n","import type { Annotation, AnnotationAnchor, AnnotationOccurrence, DocumentSnapshot, HighlightData, MarkdownNode, SourceRange } from './types';\nimport { intersects, rangeOf } from './tree';\n\nexport const defaultHighlight: Readonly<HighlightData> = { color: '#F2C744', style: 'background' };\nexport const sameRange = (a: SourceRange, b: SourceRange) => a.start === b.start && a.end === b.end;\n\n/** Embedded references quote their nearest text block; keep the marker's own\n * range intact for source mapping, insertion and selection. */\nexport function annotationReferenceRange(document: DocumentSnapshot, occurrence: AnnotationOccurrence): SourceRange {\n if (!occurrence.embedded) return occurrence.range;\n let reference = occurrence.range;\n const visit = (node: MarkdownNode) => {\n const range = rangeOf(node);\n if (!intersects(range, occurrence.range)) return;\n if (['paragraph', 'heading', 'listItem', 'tableCell'].includes(node.type)) reference = range;\n node.children?.forEach(visit);\n };\n for (const block of document.blocks) if (intersects(block.range, occurrence.range)) visit(block.node);\n return reference;\n}\n\n/** Resolve persisted anchors once against the current source. */\nexport function resolveAnnotationAnchors(annotation: Annotation, document: DocumentSnapshot): AnnotationAnchor[] {\n return (annotation.anchors ?? (annotation.range ? [{ range: annotation.range }] : [])).flatMap(anchor => {\n if (anchor.documentId && anchor.documentId !== document.id) return [];\n let range = anchor.range;\n if (anchor.quote && document.source.slice(range.start, range.end) !== anchor.quote) {\n const start = document.source.indexOf(anchor.quote);\n if (start < 0 || document.source.indexOf(anchor.quote, start + 1) >= 0) return [];\n range = { start, end: start + anchor.quote.length };\n } else if (anchor.revision !== undefined && anchor.revision !== document.revision && !anchor.quote) return [];\n return range.start >= 0 && range.end <= document.source.length && range.start <= range.end ? [{ ...anchor, range }] : [];\n });\n}\n"],"mappings":"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","names":["raw"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-V2OG4Y3F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,57 @@
1
+ import { k as SourceRange, f as DocumentSnapshot, h as SelectionSnapshot, b as AnnotationOccurrence, g as HighlightData, A as Annotation, a as AnnotationAnchor, M as MarkdownNode } from '../engine-43u8B4yt.js';
2
+ export { B as Block, D as Diagnostic, c as DocumentEngine, d as DocumentMetrics, e as DocumentOptions, H as Heading, P as ParseContext, R as Rect, S as SelectionResult, i as SourcePoint, j as SourcePosition, l as SyntaxExtension, m as createDocument, r as replaceExtension } from '../engine-43u8B4yt.js';
3
+ import 'micromark-util-types';
4
+ import 'mdast-util-from-markdown';
5
+
6
+ interface TextMapping {
7
+ starts: readonly number[];
8
+ ends: readonly number[];
9
+ exact: boolean;
10
+ }
11
+ /** Align decoded text to original source, retaining escape/entity/CRLF boundaries. */
12
+ declare function mapText(source: string, value: string, range: SourceRange, options?: {
13
+ escapes?: boolean;
14
+ }): TextMapping;
15
+ declare function selectionFromRange(document: DocumentSnapshot, raw: SourceRange, options?: {
16
+ text?: string;
17
+ quality?: SelectionSnapshot['quality'];
18
+ settled?: boolean;
19
+ }): SelectionSnapshot;
20
+
21
+ /** Bounded LRU for expensive pure computations. Instances define cache isolation. */
22
+ declare class LruCache<K, V> {
23
+ readonly capacity: number;
24
+ private entries;
25
+ constructor(capacity?: number);
26
+ get size(): number;
27
+ get(key: K): V | undefined;
28
+ set(key: K, value: V): void;
29
+ delete(key: K): void;
30
+ clear(): void;
31
+ }
32
+ declare class ResourceCache<T = unknown> {
33
+ private values;
34
+ private pending;
35
+ constructor(capacity?: number);
36
+ acquire(key: string, loader: (signal: AbortSignal) => Promise<T>): {
37
+ promise: Promise<T>;
38
+ release: () => void;
39
+ };
40
+ invalidate(key?: string): void;
41
+ }
42
+
43
+ declare const defaultHighlight: Readonly<HighlightData>;
44
+ declare const sameRange: (a: SourceRange, b: SourceRange) => boolean;
45
+ /** Embedded references quote their nearest text block; keep the marker's own
46
+ * range intact for source mapping, insertion and selection. */
47
+ declare function annotationReferenceRange(document: DocumentSnapshot, occurrence: AnnotationOccurrence): SourceRange;
48
+ /** Resolve persisted anchors once against the current source. */
49
+ declare function resolveAnnotationAnchors(annotation: Annotation, document: DocumentSnapshot): AnnotationAnchor[];
50
+
51
+ declare function walk(node: MarkdownNode, visit: (node: MarkdownNode, parent?: MarkdownNode) => void, parent?: MarkdownNode): void;
52
+ declare function textContent(node: MarkdownNode): string;
53
+ declare function rangeOf(node: MarkdownNode): SourceRange;
54
+ declare function intersects(a: SourceRange, b: SourceRange): boolean;
55
+ declare function safeUrl(value: unknown, image?: boolean): string | undefined;
56
+
57
+ export { Annotation, AnnotationAnchor, AnnotationOccurrence, DocumentSnapshot, HighlightData, LruCache, MarkdownNode, ResourceCache, SelectionSnapshot, SourceRange, type TextMapping, annotationReferenceRange, defaultHighlight, intersects, mapText, rangeOf, resolveAnnotationAnchors, safeUrl, sameRange, selectionFromRange, textContent, walk };