livemark 0.7.2 → 0.8.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 (626) hide show
  1. package/package.json +14 -14
  2. package/source/actions/changelog/build.ts +245 -0
  3. package/source/actions/changelog/build.unit.ts +69 -0
  4. package/source/actions/config/define.ts +11 -0
  5. package/source/actions/config/define.unit.ts +33 -0
  6. package/source/actions/config/load.ts +22 -0
  7. package/source/actions/config/load.unit.ts +30 -0
  8. package/source/commands/build.ts +21 -0
  9. package/source/commands/escape.ts +77 -0
  10. package/source/commands/preview.ts +25 -0
  11. package/source/commands/start.ts +26 -0
  12. package/{build/website → source}/components/Article.tsx +12 -2
  13. package/{build/website → source}/components/Callout.tsx +1 -1
  14. package/{build/website → source}/components/Layout.tsx +3 -14
  15. package/{build/website → source}/components/LinkButton.tsx +1 -1
  16. package/{build/website → source}/components/PageToolbar.tsx +21 -8
  17. package/{build/website → source}/components/Section.tsx +1 -1
  18. package/{build/website → source}/components/SectionHeader.tsx +1 -1
  19. package/{build/website/components/MiniSidebar.tsx → source/components/Sidebar.tsx} +21 -5
  20. package/{build/website/components/Sidebar.tsx → source/components/SidebarArticles.tsx} +22 -55
  21. package/source/components/SidebarPosts.tsx +129 -0
  22. package/source/components/SidebarReleases.tsx +85 -0
  23. package/{build/website → source}/content-collections.ts +2 -2
  24. package/{build/website → source}/elements/accordion.tsx +1 -1
  25. package/{build/website → source}/elements/alert-dialog.tsx +1 -1
  26. package/{build/website → source}/elements/alert.tsx +1 -1
  27. package/{build/website → source}/elements/aspect-ratio.tsx +1 -1
  28. package/{build/website → source}/elements/avatar.tsx +1 -1
  29. package/{build/website → source}/elements/badge.tsx +1 -1
  30. package/{build/website → source}/elements/breadcrumb.tsx +1 -1
  31. package/{build/website → source}/elements/button-group.tsx +1 -1
  32. package/{build/website → source}/elements/button.tsx +1 -1
  33. package/{build/website → source}/elements/calendar.tsx +1 -1
  34. package/{build/website → source}/elements/card.tsx +1 -1
  35. package/{build/website → source}/elements/carousel.tsx +1 -1
  36. package/{build/website → source}/elements/chart.tsx +1 -1
  37. package/{build/website → source}/elements/checkbox.tsx +1 -1
  38. package/{build/website → source}/elements/command.tsx +1 -1
  39. package/{build/website → source}/elements/context-menu.tsx +1 -1
  40. package/{build/website → source}/elements/dialog.tsx +1 -1
  41. package/{build/website → source}/elements/drawer.tsx +1 -1
  42. package/{build/website → source}/elements/dropdown-menu.tsx +1 -1
  43. package/{build/website → source}/elements/empty.tsx +1 -1
  44. package/{build/website → source}/elements/field.tsx +1 -1
  45. package/{build/website → source}/elements/hover-card.tsx +1 -1
  46. package/{build/website → source}/elements/input-group.tsx +1 -1
  47. package/{build/website → source}/elements/input-otp.tsx +1 -1
  48. package/{build/website → source}/elements/input.tsx +1 -1
  49. package/{build/website → source}/elements/item.tsx +1 -1
  50. package/{build/website → source}/elements/kbd.tsx +1 -1
  51. package/{build/website → source}/elements/label.tsx +1 -1
  52. package/{build/website → source}/elements/menubar.tsx +1 -1
  53. package/{build/website → source}/elements/native-select.tsx +1 -1
  54. package/{build/website → source}/elements/navigation-menu.tsx +1 -1
  55. package/{build/website → source}/elements/pagination.tsx +1 -1
  56. package/{build/website → source}/elements/popover.tsx +1 -1
  57. package/{build/website → source}/elements/progress.tsx +1 -1
  58. package/{build/website → source}/elements/radio-group.tsx +1 -1
  59. package/{build/website → source}/elements/resizable.tsx +1 -1
  60. package/{build/website → source}/elements/scroll-area.tsx +1 -1
  61. package/{build/website → source}/elements/select.tsx +1 -1
  62. package/{build/website → source}/elements/separator.tsx +1 -1
  63. package/{build/website → source}/elements/sheet.tsx +1 -1
  64. package/{build/website → source}/elements/sidebar.tsx +7 -4
  65. package/{build/website → source}/elements/skeleton.tsx +1 -1
  66. package/{build/website → source}/elements/slider.tsx +1 -1
  67. package/{build/website → source}/elements/spinner.tsx +1 -1
  68. package/{build/website → source}/elements/switch.tsx +1 -1
  69. package/{build/website → source}/elements/table.tsx +1 -1
  70. package/{build/website → source}/elements/tabs.tsx +1 -1
  71. package/{build/website → source}/elements/textarea.tsx +1 -1
  72. package/{build/website → source}/elements/toggle-group.tsx +1 -1
  73. package/{build/website → source}/elements/toggle.tsx +1 -1
  74. package/{build/website → source}/elements/tooltip.tsx +1 -1
  75. package/source/entrypoints/main.ts +12 -0
  76. package/{build/website → source}/env.d.ts +1 -1
  77. package/source/helpers/program.ts +6 -0
  78. package/{build/website → source}/helpers/section.ts +1 -1
  79. package/source/hooks/media.ts +29 -0
  80. package/source/index.ts +1 -0
  81. package/{build/website → source}/models/article.ts +4 -0
  82. package/source/models/config.ts +51 -0
  83. package/source/models/link.ts +11 -0
  84. package/source/models/patch.ts +9 -0
  85. package/source/models/section.ts +45 -0
  86. package/source/models/theme.ts +74 -0
  87. package/source/program.ts +18 -0
  88. package/source/settings.ts +6 -0
  89. package/{build/website → source}/vite.config.ts +3 -3
  90. package/{build → target}/actions/changelog/build.d.ts +1 -0
  91. package/target/actions/changelog/build.js +187 -0
  92. package/target/actions/changelog/build.unit.js +66 -0
  93. package/target/actions/config/define.js +8 -0
  94. package/target/actions/config/define.unit.js +29 -0
  95. package/target/actions/config/load.js +25 -0
  96. package/target/actions/config/load.unit.js +23 -0
  97. package/target/client.d.ts +1 -0
  98. package/target/client.js +6 -0
  99. package/target/commands/build.js +14 -0
  100. package/target/commands/escape.js +56 -0
  101. package/target/commands/preview.js +18 -0
  102. package/target/commands/start.js +19 -0
  103. package/target/components/Abbr.d.ts +5 -0
  104. package/target/components/Abbr.js +9 -0
  105. package/target/components/AnsiCode.d.ts +4 -0
  106. package/target/components/AnsiCode.js +6 -0
  107. package/target/components/Article.d.ts +5 -0
  108. package/target/components/Article.js +105 -0
  109. package/target/components/BackToTop.d.ts +3 -0
  110. package/target/components/BackToTop.js +19 -0
  111. package/target/components/Banner.d.ts +2 -0
  112. package/target/components/Banner.js +12 -0
  113. package/target/components/BlogIndex.d.ts +4 -0
  114. package/target/components/BlogIndex.js +62 -0
  115. package/target/components/Breadcrumbs.d.ts +1 -0
  116. package/target/components/Breadcrumbs.js +13 -0
  117. package/target/components/Callout.d.ts +8 -0
  118. package/target/components/Callout.js +43 -0
  119. package/target/components/Card.d.ts +7 -0
  120. package/target/components/Card.js +17 -0
  121. package/target/components/Cards.d.ts +4 -0
  122. package/target/components/Cards.js +6 -0
  123. package/target/components/ChangelogIndex.d.ts +4 -0
  124. package/target/components/ChangelogIndex.js +57 -0
  125. package/target/components/CodeBlock.d.ts +1 -0
  126. package/target/components/CodeBlock.js +47 -0
  127. package/target/components/CodeTabs.d.ts +6 -0
  128. package/target/components/CodeTabs.js +49 -0
  129. package/target/components/Column.d.ts +4 -0
  130. package/target/components/Column.js +6 -0
  131. package/target/components/Columns.d.ts +5 -0
  132. package/target/components/Columns.js +10 -0
  133. package/target/components/Content.d.ts +3 -0
  134. package/target/components/Content.js +5 -0
  135. package/target/components/ContentTab.d.ts +5 -0
  136. package/target/components/ContentTab.js +6 -0
  137. package/target/components/ContentTabs.d.ts +5 -0
  138. package/target/components/ContentTabs.js +47 -0
  139. package/target/components/DefaultCatchBoundary.d.ts +2 -0
  140. package/target/components/DefaultCatchBoundary.js +20 -0
  141. package/target/components/DefinitionList.d.ts +7 -0
  142. package/target/components/DefinitionList.js +14 -0
  143. package/target/components/Details.d.ts +5 -0
  144. package/target/components/Details.js +13 -0
  145. package/target/components/FileTree.d.ts +4 -0
  146. package/target/components/FileTree.js +17 -0
  147. package/target/components/Footer.d.ts +2 -0
  148. package/target/components/Footer.js +9 -0
  149. package/target/components/FootnoteRef.d.ts +3 -0
  150. package/target/components/FootnoteRef.js +31 -0
  151. package/target/components/Heading.d.ts +8 -0
  152. package/target/components/Heading.js +18 -0
  153. package/target/components/InlineBadge.d.ts +5 -0
  154. package/target/components/InlineBadge.js +7 -0
  155. package/target/components/InlineIcon.d.ts +5 -0
  156. package/target/components/InlineIcon.js +10 -0
  157. package/target/components/InlineToc.d.ts +4 -0
  158. package/target/components/InlineToc.js +14 -0
  159. package/target/components/Layout.d.ts +4 -0
  160. package/target/components/Layout.js +65 -0
  161. package/target/components/LinkButton.d.ts +7 -0
  162. package/target/components/LinkButton.js +11 -0
  163. package/target/components/Mermaid.d.ts +4 -0
  164. package/target/components/Mermaid.js +8 -0
  165. package/target/components/MermaidRenderer.d.ts +4 -0
  166. package/target/components/MermaidRenderer.js +32 -0
  167. package/target/components/NotFound.d.ts +3 -0
  168. package/target/components/NotFound.js +10 -0
  169. package/target/components/PackageTabs.d.ts +9 -0
  170. package/target/components/PackageTabs.js +28 -0
  171. package/target/components/PageToolbar.d.ts +7 -0
  172. package/target/components/PageToolbar.js +34 -0
  173. package/target/components/PrevNext.d.ts +4 -0
  174. package/target/components/PrevNext.js +34 -0
  175. package/target/components/Search.d.ts +2 -0
  176. package/target/components/Search.js +16 -0
  177. package/target/components/SearchDialog.d.ts +5 -0
  178. package/target/components/SearchDialog.js +139 -0
  179. package/target/components/Section.d.ts +5 -0
  180. package/target/components/Section.js +8 -0
  181. package/target/components/SectionHeader.d.ts +7 -0
  182. package/target/components/SectionHeader.js +7 -0
  183. package/target/components/Sidebar.d.ts +4 -0
  184. package/target/components/Sidebar.js +33 -0
  185. package/target/components/SidebarArticles.d.ts +2 -0
  186. package/target/components/SidebarArticles.js +45 -0
  187. package/target/components/SidebarLinks.d.ts +4 -0
  188. package/target/components/SidebarLinks.js +26 -0
  189. package/target/components/SidebarPosts.d.ts +2 -0
  190. package/target/components/SidebarPosts.js +53 -0
  191. package/target/components/SidebarReleases.d.ts +2 -0
  192. package/target/components/SidebarReleases.js +35 -0
  193. package/target/components/SidebarSections.d.ts +4 -0
  194. package/target/components/SidebarSections.js +36 -0
  195. package/target/components/SiteTitle.d.ts +2 -0
  196. package/target/components/SiteTitle.js +12 -0
  197. package/target/components/SortableTable.d.ts +5 -0
  198. package/target/components/SortableTable.js +63 -0
  199. package/target/components/SoundCloud.d.ts +4 -0
  200. package/target/components/SoundCloud.js +7 -0
  201. package/target/components/TagIndex.d.ts +5 -0
  202. package/target/components/TagIndex.js +64 -0
  203. package/target/components/Theme.d.ts +1 -0
  204. package/target/components/Theme.js +21 -0
  205. package/target/components/Toc.d.ts +12 -0
  206. package/target/components/Toc.js +128 -0
  207. package/target/components/YouTube.d.ts +4 -0
  208. package/target/components/YouTube.js +6 -0
  209. package/target/components/ZoomImage.d.ts +4 -0
  210. package/target/components/ZoomImage.js +26 -0
  211. package/target/content/article.d.ts +43 -0
  212. package/target/content/article.js +54 -0
  213. package/target/content/tag.d.ts +2 -0
  214. package/target/content/tag.js +30 -0
  215. package/target/content-collections.d.ts +2 -0
  216. package/target/content-collections.js +192 -0
  217. package/target/elements/accordion.d.ts +6 -0
  218. package/target/elements/accordion.js +19 -0
  219. package/target/elements/alert-dialog.d.ts +18 -0
  220. package/target/elements/alert-dialog.js +44 -0
  221. package/target/elements/alert.d.ts +9 -0
  222. package/target/elements/alert.js +28 -0
  223. package/target/elements/aspect-ratio.d.ts +4 -0
  224. package/target/elements/aspect-ratio.js +9 -0
  225. package/target/elements/avatar.d.ts +11 -0
  226. package/target/elements/avatar.js +23 -0
  227. package/target/elements/badge.d.ts +7 -0
  228. package/target/elements/badge.js +34 -0
  229. package/target/elements/breadcrumb.d.ts +9 -0
  230. package/target/elements/breadcrumb.js +39 -0
  231. package/target/elements/button-group.d.ts +10 -0
  232. package/target/elements/button-group.js +37 -0
  233. package/target/elements/button.d.ts +8 -0
  234. package/target/elements/button.js +35 -0
  235. package/target/elements/calendar.d.ts +10 -0
  236. package/target/elements/calendar.js +76 -0
  237. package/target/elements/card.d.ts +11 -0
  238. package/target/elements/card.js +25 -0
  239. package/target/elements/carousel.d.ts +28 -0
  240. package/target/elements/carousel.js +95 -0
  241. package/target/elements/chart.d.ts +44 -0
  242. package/target/elements/chart.js +140 -0
  243. package/target/elements/checkbox.d.ts +3 -0
  244. package/target/elements/checkbox.js +9 -0
  245. package/target/elements/collapsible.d.ts +5 -0
  246. package/target/elements/collapsible.js +13 -0
  247. package/target/elements/command.d.ts +23 -0
  248. package/target/elements/command.js +42 -0
  249. package/target/elements/context-menu.d.ts +29 -0
  250. package/target/elements/context-menu.js +54 -0
  251. package/target/elements/dialog.d.ts +16 -0
  252. package/target/elements/dialog.js +41 -0
  253. package/target/elements/direction.d.ts +1 -0
  254. package/target/elements/direction.js +2 -0
  255. package/target/elements/drawer.d.ts +12 -0
  256. package/target/elements/drawer.js +38 -0
  257. package/target/elements/dropdown-menu.d.ts +24 -0
  258. package/target/elements/dropdown-menu.js +54 -0
  259. package/target/elements/empty.d.ts +11 -0
  260. package/target/elements/empty.js +34 -0
  261. package/target/elements/field.d.ts +24 -0
  262. package/target/elements/field.js +69 -0
  263. package/target/elements/hover-card.d.ts +5 -0
  264. package/target/elements/hover-card.js +14 -0
  265. package/target/elements/input-group.d.ts +18 -0
  266. package/target/elements/input-group.js +60 -0
  267. package/target/elements/input-otp.d.ts +11 -0
  268. package/target/elements/input-otp.js +21 -0
  269. package/target/elements/input.d.ts +2 -0
  270. package/target/elements/input.js +8 -0
  271. package/target/elements/item.d.ts +21 -0
  272. package/target/elements/item.js +79 -0
  273. package/target/elements/kbd.d.ts +3 -0
  274. package/target/elements/kbd.js +10 -0
  275. package/target/elements/label.d.ts +2 -0
  276. package/target/elements/label.js +8 -0
  277. package/target/elements/menubar.d.ts +29 -0
  278. package/target/elements/menubar.js +58 -0
  279. package/target/elements/native-select.d.ts +8 -0
  280. package/target/elements/native-select.js +16 -0
  281. package/target/elements/navigation-menu.d.ts +11 -0
  282. package/target/elements/navigation-menu.js +34 -0
  283. package/target/elements/pagination.d.ts +17 -0
  284. package/target/elements/pagination.js +33 -0
  285. package/target/elements/popover.d.ts +9 -0
  286. package/target/elements/popover.js +23 -0
  287. package/target/elements/progress.d.ts +7 -0
  288. package/target/elements/progress.js +21 -0
  289. package/target/elements/radio-group.d.ts +5 -0
  290. package/target/elements/radio-group.js +12 -0
  291. package/target/elements/resizable.d.ts +7 -0
  292. package/target/elements/resizable.js +14 -0
  293. package/target/elements/scroll-area.d.ts +4 -0
  294. package/target/elements/scroll-area.js +13 -0
  295. package/target/elements/select.d.ts +15 -0
  296. package/target/elements/select.js +39 -0
  297. package/target/elements/separator.d.ts +3 -0
  298. package/target/elements/separator.js +8 -0
  299. package/target/elements/sheet.d.ts +13 -0
  300. package/target/elements/sheet.js +41 -0
  301. package/target/elements/sidebar.d.ts +63 -0
  302. package/target/elements/sidebar.js +272 -0
  303. package/target/elements/skeleton.d.ts +2 -0
  304. package/target/elements/skeleton.js +7 -0
  305. package/target/elements/slider.d.ts +3 -0
  306. package/target/elements/slider.js +15 -0
  307. package/target/elements/sonner.d.ts +3 -0
  308. package/target/elements/sonner.js +23 -0
  309. package/target/elements/spinner.d.ts +2 -0
  310. package/target/elements/spinner.js +8 -0
  311. package/target/elements/switch.d.ts +5 -0
  312. package/target/elements/switch.js +8 -0
  313. package/target/elements/table.d.ts +9 -0
  314. package/target/elements/table.js +28 -0
  315. package/target/elements/tabs.d.ts +10 -0
  316. package/target/elements/tabs.js +29 -0
  317. package/target/elements/textarea.d.ts +2 -0
  318. package/target/elements/textarea.js +7 -0
  319. package/target/elements/toggle-group.d.ts +10 -0
  320. package/target/elements/toggle-group.js +24 -0
  321. package/target/elements/toggle.d.ts +8 -0
  322. package/target/elements/toggle.js +26 -0
  323. package/target/elements/tooltip.d.ts +6 -0
  324. package/target/elements/tooltip.js +18 -0
  325. package/target/entrypoints/main.js +12 -0
  326. package/target/helpers/article-icon.d.ts +3 -0
  327. package/target/helpers/article-icon.js +34 -0
  328. package/target/helpers/article.d.ts +24 -0
  329. package/target/helpers/article.js +73 -0
  330. package/target/helpers/changelog-source.d.ts +7 -0
  331. package/target/helpers/changelog-source.js +16 -0
  332. package/target/helpers/changelog-source.unit.d.ts +1 -0
  333. package/target/helpers/changelog-source.unit.js +33 -0
  334. package/target/helpers/dynamic-icon-resolver.d.ts +5 -0
  335. package/target/helpers/dynamic-icon-resolver.js +17 -0
  336. package/target/helpers/dynamic-icon.d.ts +5 -0
  337. package/target/helpers/dynamic-icon.js +8 -0
  338. package/target/helpers/favicon.d.ts +2 -0
  339. package/target/helpers/favicon.js +11 -0
  340. package/target/helpers/model.d.ts +3 -0
  341. package/target/helpers/model.js +4 -0
  342. package/target/helpers/program.js +5 -0
  343. package/target/helpers/resolve-asset-path.d.ts +2 -0
  344. package/target/helpers/resolve-asset-path.js +9 -0
  345. package/target/helpers/resolve-includes.d.ts +2 -0
  346. package/target/helpers/resolve-includes.js +113 -0
  347. package/target/helpers/resolve-includes.unit.d.ts +1 -0
  348. package/target/helpers/resolve-includes.unit.js +76 -0
  349. package/target/helpers/search-text.d.ts +2 -0
  350. package/target/helpers/search-text.js +16 -0
  351. package/target/helpers/section.d.ts +13 -0
  352. package/target/helpers/section.js +39 -0
  353. package/target/helpers/section.unit.d.ts +1 -0
  354. package/target/helpers/section.unit.js +62 -0
  355. package/target/helpers/theme.d.ts +5 -0
  356. package/target/helpers/theme.js +23 -0
  357. package/target/helpers/toc-context.d.ts +5 -0
  358. package/target/helpers/toc-context.js +8 -0
  359. package/target/helpers/toc.d.ts +3 -0
  360. package/target/helpers/toc.js +41 -0
  361. package/target/helpers/toc.unit.d.ts +1 -0
  362. package/target/helpers/toc.unit.js +65 -0
  363. package/target/hooks/in-view.d.ts +4 -0
  364. package/target/hooks/in-view.js +23 -0
  365. package/target/hooks/media.d.ts +6 -0
  366. package/target/hooks/media.js +25 -0
  367. package/target/index.js +2 -0
  368. package/target/models/article.d.ts +57 -0
  369. package/target/models/article.js +21 -0
  370. package/{build → target}/models/config.d.ts +10 -0
  371. package/target/models/config.js +34 -0
  372. package/target/models/link.js +9 -0
  373. package/{build → target}/models/patch.d.ts +5 -0
  374. package/target/models/patch.js +7 -0
  375. package/target/models/section.js +26 -0
  376. package/target/models/theme.js +73 -0
  377. package/target/models/toc.d.ts +5 -0
  378. package/target/models/toc.js +2 -0
  379. package/target/plugins/rehype-inline-code.d.ts +19 -0
  380. package/target/plugins/rehype-inline-code.js +55 -0
  381. package/target/plugins/rehype-task-list-a11y.d.ts +10 -0
  382. package/target/plugins/rehype-task-list-a11y.js +29 -0
  383. package/target/plugins/remark-abbr.d.ts +6 -0
  384. package/target/plugins/remark-abbr.js +39 -0
  385. package/target/plugins/remark-abbr.unit.d.ts +1 -0
  386. package/target/plugins/remark-abbr.unit.js +79 -0
  387. package/target/plugins/remark-ansi.d.ts +8 -0
  388. package/target/plugins/remark-ansi.js +239 -0
  389. package/target/plugins/remark-ansi.unit.d.ts +1 -0
  390. package/target/plugins/remark-ansi.unit.js +134 -0
  391. package/target/plugins/remark-badge.d.ts +6 -0
  392. package/target/plugins/remark-badge.js +43 -0
  393. package/target/plugins/remark-badge.unit.d.ts +1 -0
  394. package/target/plugins/remark-badge.unit.js +76 -0
  395. package/target/plugins/remark-button.d.ts +6 -0
  396. package/target/plugins/remark-button.js +52 -0
  397. package/target/plugins/remark-button.unit.d.ts +1 -0
  398. package/target/plugins/remark-button.unit.js +105 -0
  399. package/target/plugins/remark-callout.d.ts +4 -0
  400. package/target/plugins/remark-callout.js +39 -0
  401. package/target/plugins/remark-card.d.ts +4 -0
  402. package/target/plugins/remark-card.js +66 -0
  403. package/target/plugins/remark-code-tabs.d.ts +4 -0
  404. package/target/plugins/remark-code-tabs.js +72 -0
  405. package/target/plugins/remark-columns.d.ts +4 -0
  406. package/target/plugins/remark-columns.js +54 -0
  407. package/target/plugins/remark-custom-heading-id.d.ts +14 -0
  408. package/target/plugins/remark-custom-heading-id.js +54 -0
  409. package/target/plugins/remark-custom-heading-id.unit.d.ts +1 -0
  410. package/target/plugins/remark-custom-heading-id.unit.js +91 -0
  411. package/target/plugins/remark-deflist.d.ts +4 -0
  412. package/target/plugins/remark-deflist.js +31 -0
  413. package/target/plugins/remark-details.d.ts +4 -0
  414. package/target/plugins/remark-details.js +33 -0
  415. package/target/plugins/remark-filetree.d.ts +12 -0
  416. package/target/plugins/remark-filetree.js +61 -0
  417. package/target/plugins/remark-filetree.unit.d.ts +1 -0
  418. package/target/plugins/remark-filetree.unit.js +87 -0
  419. package/target/plugins/remark-github-callout.d.ts +4 -0
  420. package/target/plugins/remark-github-callout.js +62 -0
  421. package/target/plugins/remark-icon.d.ts +4 -0
  422. package/target/plugins/remark-icon.js +36 -0
  423. package/target/plugins/remark-image.d.ts +9 -0
  424. package/target/plugins/remark-image.js +26 -0
  425. package/target/plugins/remark-media.d.ts +6 -0
  426. package/target/plugins/remark-media.js +52 -0
  427. package/target/plugins/remark-media.unit.d.ts +1 -0
  428. package/target/plugins/remark-media.unit.js +54 -0
  429. package/target/plugins/remark-mermaid.d.ts +4 -0
  430. package/target/plugins/remark-mermaid.js +20 -0
  431. package/target/plugins/remark-npm.d.ts +4 -0
  432. package/target/plugins/remark-npm.js +32 -0
  433. package/target/plugins/remark-steps.d.ts +6 -0
  434. package/target/plugins/remark-steps.js +30 -0
  435. package/target/plugins/remark-steps.unit.d.ts +1 -0
  436. package/target/plugins/remark-steps.unit.js +65 -0
  437. package/target/plugins/remark-tab.d.ts +6 -0
  438. package/target/plugins/remark-tab.js +76 -0
  439. package/target/plugins/remark-tab.unit.d.ts +1 -0
  440. package/target/plugins/remark-tab.unit.js +156 -0
  441. package/target/plugins/remark-toc.d.ts +6 -0
  442. package/target/plugins/remark-toc.js +33 -0
  443. package/target/plugins/remark-toc.unit.d.ts +1 -0
  444. package/target/plugins/remark-toc.unit.js +57 -0
  445. package/target/plugins/shiki-icon.d.ts +16 -0
  446. package/target/plugins/shiki-icon.js +66 -0
  447. package/target/plugins/shiki-line-highlight.d.ts +27 -0
  448. package/target/plugins/shiki-line-highlight.js +140 -0
  449. package/target/plugins/vite-livemark.d.ts +13 -0
  450. package/target/plugins/vite-livemark.js +76 -0
  451. package/target/program.js +18 -0
  452. package/target/routeTree.gen.d.ts +57 -0
  453. package/target/routeTree.gen.js +27 -0
  454. package/target/router.d.ts +6 -0
  455. package/target/router.js +26 -0
  456. package/target/routes/$.d.ts +1 -0
  457. package/target/routes/$.js +85 -0
  458. package/target/routes/__root.d.ts +1 -0
  459. package/target/routes/__root.js +69 -0
  460. package/target/server.d.ts +2 -0
  461. package/target/server.js +7 -0
  462. package/target/settings.js +7 -0
  463. package/target/utils/style.d.ts +2 -0
  464. package/target/utils/style.js +6 -0
  465. package/target/vite.config.d.ts +2 -0
  466. package/target/vite.config.js +64 -0
  467. package/build/actions/changelog/build.js +0 -158
  468. package/build/actions/changelog/build.unit.js +0 -66
  469. package/build/actions/config/define.js +0 -8
  470. package/build/actions/config/define.unit.js +0 -29
  471. package/build/actions/config/load.js +0 -25
  472. package/build/actions/config/load.unit.js +0 -23
  473. package/build/commands/build.js +0 -14
  474. package/build/commands/escape.js +0 -56
  475. package/build/commands/preview.js +0 -18
  476. package/build/commands/start.js +0 -19
  477. package/build/docs/markdown/includes/example.d.ts +0 -58
  478. package/build/docs/markdown/includes/example.js +0 -5
  479. package/build/entrypoints/main.js +0 -12
  480. package/build/helpers/program.js +0 -5
  481. package/build/index.js +0 -2
  482. package/build/livemark.config.d.ts +0 -58
  483. package/build/livemark.config.js +0 -25
  484. package/build/models/config.js +0 -34
  485. package/build/models/link.js +0 -9
  486. package/build/models/patch.js +0 -7
  487. package/build/models/section.js +0 -26
  488. package/build/models/theme.js +0 -73
  489. package/build/package.json +0 -138
  490. package/build/program.js +0 -18
  491. package/build/settings.js +0 -7
  492. package/build/vite.config.d.ts +0 -2
  493. package/build/vite.config.js +0 -48
  494. package/build/website/components/BlogSidebar.tsx +0 -162
  495. package/build/website/components/ChangelogSidebar.tsx +0 -120
  496. package/build/website/hooks/media.ts +0 -19
  497. /package/{build/website → source}/assets/logo.svg +0 -0
  498. /package/{build/website → source}/client.tsx +0 -0
  499. /package/{build/website → source}/components/Abbr.tsx +0 -0
  500. /package/{build/website → source}/components/AnsiCode.tsx +0 -0
  501. /package/{build/website → source}/components/BackToTop.tsx +0 -0
  502. /package/{build/website → source}/components/Banner.tsx +0 -0
  503. /package/{build/website → source}/components/BlogIndex.tsx +0 -0
  504. /package/{build/website → source}/components/Breadcrumbs.tsx +0 -0
  505. /package/{build/website → source}/components/Card.tsx +0 -0
  506. /package/{build/website → source}/components/Cards.tsx +0 -0
  507. /package/{build/website → source}/components/ChangelogIndex.tsx +0 -0
  508. /package/{build/website → source}/components/CodeBlock.tsx +0 -0
  509. /package/{build/website → source}/components/CodeTabs.tsx +0 -0
  510. /package/{build/website → source}/components/Column.tsx +0 -0
  511. /package/{build/website → source}/components/Columns.tsx +0 -0
  512. /package/{build/website → source}/components/Content.tsx +0 -0
  513. /package/{build/website → source}/components/ContentTab.tsx +0 -0
  514. /package/{build/website → source}/components/ContentTabs.tsx +0 -0
  515. /package/{build/website → source}/components/DefaultCatchBoundary.tsx +0 -0
  516. /package/{build/website → source}/components/DefinitionList.tsx +0 -0
  517. /package/{build/website → source}/components/Details.tsx +0 -0
  518. /package/{build/website → source}/components/FileTree.tsx +0 -0
  519. /package/{build/website → source}/components/Footer.tsx +0 -0
  520. /package/{build/website → source}/components/FootnoteRef.tsx +0 -0
  521. /package/{build/website → source}/components/Heading.tsx +0 -0
  522. /package/{build/website → source}/components/InlineBadge.tsx +0 -0
  523. /package/{build/website → source}/components/InlineIcon.tsx +0 -0
  524. /package/{build/website → source}/components/InlineToc.tsx +0 -0
  525. /package/{build/website → source}/components/Mermaid.tsx +0 -0
  526. /package/{build/website → source}/components/MermaidRenderer.tsx +0 -0
  527. /package/{build/website → source}/components/NotFound.tsx +0 -0
  528. /package/{build/website → source}/components/PackageTabs.tsx +0 -0
  529. /package/{build/website → source}/components/PrevNext.tsx +0 -0
  530. /package/{build/website → source}/components/Search.tsx +0 -0
  531. /package/{build/website → source}/components/SearchDialog.tsx +0 -0
  532. /package/{build/website → source}/components/SidebarLinks.tsx +0 -0
  533. /package/{build/website → source}/components/SidebarSections.tsx +0 -0
  534. /package/{build/website → source}/components/SiteTitle.tsx +0 -0
  535. /package/{build/website → source}/components/SortableTable.tsx +0 -0
  536. /package/{build/website → source}/components/SoundCloud.tsx +0 -0
  537. /package/{build/website → source}/components/TagIndex.tsx +0 -0
  538. /package/{build/website → source}/components/Theme.tsx +0 -0
  539. /package/{build/website → source}/components/Toc.tsx +0 -0
  540. /package/{build/website → source}/components/YouTube.tsx +0 -0
  541. /package/{build/website → source}/components/ZoomImage.tsx +0 -0
  542. /package/{build/website → source}/content/article.ts +0 -0
  543. /package/{build/website → source}/content/tag.ts +0 -0
  544. /package/{build/website → source}/elements/collapsible.tsx +0 -0
  545. /package/{build/website → source}/elements/direction.tsx +0 -0
  546. /package/{build/website → source}/elements/sonner.tsx +0 -0
  547. /package/{build/website → source}/helpers/article-icon.ts +0 -0
  548. /package/{build/website → source}/helpers/article.ts +0 -0
  549. /package/{build/website → source}/helpers/changelog-source.ts +0 -0
  550. /package/{build/website → source}/helpers/changelog-source.unit.ts +0 -0
  551. /package/{build/website → source}/helpers/dynamic-icon-resolver.tsx +0 -0
  552. /package/{build/website → source}/helpers/dynamic-icon.tsx +0 -0
  553. /package/{build/website → source}/helpers/favicon.ts +0 -0
  554. /package/{build/website → source}/helpers/model.ts +0 -0
  555. /package/{build/website → source}/helpers/resolve-asset-path.ts +0 -0
  556. /package/{build/website → source}/helpers/resolve-includes.ts +0 -0
  557. /package/{build/website → source}/helpers/resolve-includes.unit.ts +0 -0
  558. /package/{build/website → source}/helpers/search-text.ts +0 -0
  559. /package/{build/website → source}/helpers/section.unit.ts +0 -0
  560. /package/{build/website → source}/helpers/theme.ts +0 -0
  561. /package/{build/website → source}/helpers/toc-context.ts +0 -0
  562. /package/{build/website → source}/helpers/toc.ts +0 -0
  563. /package/{build/website → source}/helpers/toc.unit.ts +0 -0
  564. /package/{build/website → source}/hooks/in-view.ts +0 -0
  565. /package/{build/website → source}/models/toc.ts +0 -0
  566. /package/{build/website → source}/plugins/rehype-inline-code.ts +0 -0
  567. /package/{build/website → source}/plugins/rehype-task-list-a11y.ts +0 -0
  568. /package/{build/website → source}/plugins/remark-abbr.ts +0 -0
  569. /package/{build/website → source}/plugins/remark-abbr.unit.ts +0 -0
  570. /package/{build/website → source}/plugins/remark-ansi.ts +0 -0
  571. /package/{build/website → source}/plugins/remark-ansi.unit.ts +0 -0
  572. /package/{build/website → source}/plugins/remark-badge.ts +0 -0
  573. /package/{build/website → source}/plugins/remark-badge.unit.ts +0 -0
  574. /package/{build/website → source}/plugins/remark-button.ts +0 -0
  575. /package/{build/website → source}/plugins/remark-button.unit.ts +0 -0
  576. /package/{build/website → source}/plugins/remark-callout.ts +0 -0
  577. /package/{build/website → source}/plugins/remark-card.ts +0 -0
  578. /package/{build/website → source}/plugins/remark-code-tabs.ts +0 -0
  579. /package/{build/website → source}/plugins/remark-columns.ts +0 -0
  580. /package/{build/website → source}/plugins/remark-custom-heading-id.ts +0 -0
  581. /package/{build/website → source}/plugins/remark-custom-heading-id.unit.ts +0 -0
  582. /package/{build/website → source}/plugins/remark-deflist.ts +0 -0
  583. /package/{build/website → source}/plugins/remark-details.ts +0 -0
  584. /package/{build/website → source}/plugins/remark-filetree.ts +0 -0
  585. /package/{build/website → source}/plugins/remark-filetree.unit.ts +0 -0
  586. /package/{build/website → source}/plugins/remark-github-callout.ts +0 -0
  587. /package/{build/website → source}/plugins/remark-icon.ts +0 -0
  588. /package/{build/website → source}/plugins/remark-image.ts +0 -0
  589. /package/{build/website → source}/plugins/remark-media.ts +0 -0
  590. /package/{build/website → source}/plugins/remark-media.unit.ts +0 -0
  591. /package/{build/website → source}/plugins/remark-mermaid.ts +0 -0
  592. /package/{build/website → source}/plugins/remark-npm.ts +0 -0
  593. /package/{build/website → source}/plugins/remark-steps.ts +0 -0
  594. /package/{build/website → source}/plugins/remark-steps.unit.ts +0 -0
  595. /package/{build/website → source}/plugins/remark-tab.ts +0 -0
  596. /package/{build/website → source}/plugins/remark-tab.unit.ts +0 -0
  597. /package/{build/website → source}/plugins/remark-toc.ts +0 -0
  598. /package/{build/website → source}/plugins/remark-toc.unit.ts +0 -0
  599. /package/{build/website → source}/plugins/shiki-icon.ts +0 -0
  600. /package/{build/website → source}/plugins/shiki-line-highlight.ts +0 -0
  601. /package/{build/website → source}/plugins/vite-livemark.ts +0 -0
  602. /package/{build/website → source}/routeTree.gen.ts +0 -0
  603. /package/{build/website → source}/router.tsx +0 -0
  604. /package/{build/website → source}/routes/$.tsx +0 -0
  605. /package/{build/website → source}/routes/__root.tsx +0 -0
  606. /package/{build/website → source}/server.ts +0 -0
  607. /package/{build/website → source}/styles/general.css +0 -0
  608. /package/{build/website → source}/styles/markdown.css +0 -0
  609. /package/{build/website/helpers → source/utils}/style.ts +0 -0
  610. /package/{build → target}/actions/changelog/build.unit.d.ts +0 -0
  611. /package/{build → target}/actions/config/define.d.ts +0 -0
  612. /package/{build → target}/actions/config/define.unit.d.ts +0 -0
  613. /package/{build → target}/actions/config/load.d.ts +0 -0
  614. /package/{build → target}/actions/config/load.unit.d.ts +0 -0
  615. /package/{build → target}/commands/build.d.ts +0 -0
  616. /package/{build → target}/commands/escape.d.ts +0 -0
  617. /package/{build → target}/commands/preview.d.ts +0 -0
  618. /package/{build → target}/commands/start.d.ts +0 -0
  619. /package/{build → target}/entrypoints/main.d.ts +0 -0
  620. /package/{build → target}/helpers/program.d.ts +0 -0
  621. /package/{build → target}/index.d.ts +0 -0
  622. /package/{build → target}/models/link.d.ts +0 -0
  623. /package/{build → target}/models/section.d.ts +0 -0
  624. /package/{build → target}/models/theme.d.ts +0 -0
  625. /package/{build → target}/program.d.ts +0 -0
  626. /package/{build → target}/settings.d.ts +0 -0
@@ -0,0 +1,156 @@
1
+ import { describe, expect, it } from "vite-plus/test";
2
+ import { transformTabDirectives } from "./remark-tab.js";
3
+ function makeContainerDirective(name, attributes) {
4
+ return {
5
+ type: "containerDirective",
6
+ name,
7
+ attributes: attributes ?? {},
8
+ children: [
9
+ { type: "paragraph", children: [{ type: "text", value: "content" }] },
10
+ ],
11
+ };
12
+ }
13
+ function makeTree(...children) {
14
+ return { type: "root", children };
15
+ }
16
+ describe("transformTabDirectives", () => {
17
+ function process(tree) {
18
+ transformTabDirectives(tree);
19
+ return tree;
20
+ }
21
+ it("should convert :::tab directive to ContentTab JSX element", () => {
22
+ const directive = makeContainerDirective("tab", { title: "React" });
23
+ const tree = process(makeTree(directive));
24
+ const node = tree.children[0];
25
+ expect(node).toMatchObject({
26
+ type: "mdxJsxFlowElement",
27
+ name: "ContentTabs",
28
+ children: [
29
+ {
30
+ type: "mdxJsxFlowElement",
31
+ name: "ContentTab",
32
+ attributes: [
33
+ { type: "mdxJsxAttribute", name: "title", value: "React" },
34
+ ],
35
+ },
36
+ ],
37
+ });
38
+ });
39
+ it("should default title to empty string when not provided", () => {
40
+ const directive = makeContainerDirective("tab");
41
+ const tree = process(makeTree(directive));
42
+ const wrapper = tree.children[0];
43
+ expect(wrapper).toMatchObject({
44
+ type: "mdxJsxFlowElement",
45
+ name: "ContentTabs",
46
+ children: [
47
+ {
48
+ type: "mdxJsxFlowElement",
49
+ name: "ContentTab",
50
+ attributes: [{ type: "mdxJsxAttribute", name: "title", value: "" }],
51
+ },
52
+ ],
53
+ });
54
+ });
55
+ it("should ignore non-tab container directives", () => {
56
+ const directive = makeContainerDirective("note");
57
+ const tree = process(makeTree(directive));
58
+ expect(tree.children[0]).toMatchObject({
59
+ type: "containerDirective",
60
+ name: "note",
61
+ });
62
+ });
63
+ it("should wrap a single ContentTab in ContentTabs", () => {
64
+ const directive = makeContainerDirective("tab", { title: "Only" });
65
+ const tree = process(makeTree(directive));
66
+ expect(tree.children).toHaveLength(1);
67
+ expect(tree.children[0]).toMatchObject({
68
+ type: "mdxJsxFlowElement",
69
+ name: "ContentTabs",
70
+ children: [
71
+ {
72
+ type: "mdxJsxFlowElement",
73
+ name: "ContentTab",
74
+ },
75
+ ],
76
+ });
77
+ });
78
+ it("should group consecutive tabs into a single ContentTabs wrapper", () => {
79
+ const tab1 = makeContainerDirective("tab", { title: "React" });
80
+ const tab2 = makeContainerDirective("tab", { title: "Vue" });
81
+ const tab3 = makeContainerDirective("tab", { title: "Svelte" });
82
+ const tree = process(makeTree(tab1, tab2, tab3));
83
+ expect(tree.children).toHaveLength(1);
84
+ const wrapper = tree.children[0];
85
+ expect(wrapper).toMatchObject({
86
+ type: "mdxJsxFlowElement",
87
+ name: "ContentTabs",
88
+ });
89
+ // @ts-expect-error mdxJsxFlowElement is not in mdast types
90
+ expect(wrapper.children).toHaveLength(3);
91
+ });
92
+ it("should not group tabs separated by other elements", () => {
93
+ const tab1 = makeContainerDirective("tab", { title: "A" });
94
+ const separator = {
95
+ type: "paragraph",
96
+ children: [{ type: "text", value: "break" }],
97
+ };
98
+ const tab2 = makeContainerDirective("tab", { title: "B" });
99
+ const tree = process(makeTree(tab1, separator, tab2));
100
+ expect(tree.children).toHaveLength(3);
101
+ expect(tree.children[0]).toMatchObject({
102
+ type: "mdxJsxFlowElement",
103
+ name: "ContentTabs",
104
+ });
105
+ expect(tree.children[1]).toMatchObject({ type: "paragraph" });
106
+ expect(tree.children[2]).toMatchObject({
107
+ type: "mdxJsxFlowElement",
108
+ name: "ContentTabs",
109
+ });
110
+ });
111
+ it("should pass sync attribute to ContentTab when present", () => {
112
+ const directive = makeContainerDirective("tab", {
113
+ title: "npm",
114
+ sync: "pm",
115
+ });
116
+ const tree = process(makeTree(directive));
117
+ const wrapper = tree.children[0];
118
+ // @ts-expect-error mdxJsxFlowElement is not in mdast types
119
+ const tab = wrapper.children[0];
120
+ expect(tab).toMatchObject({
121
+ type: "mdxJsxFlowElement",
122
+ name: "ContentTab",
123
+ attributes: [
124
+ { type: "mdxJsxAttribute", name: "title", value: "npm" },
125
+ { type: "mdxJsxAttribute", name: "sync", value: "pm" },
126
+ ],
127
+ });
128
+ });
129
+ it("should propagate sync attribute to ContentTabs wrapper", () => {
130
+ const tab1 = makeContainerDirective("tab", {
131
+ title: "npm",
132
+ sync: "pm",
133
+ });
134
+ const tab2 = makeContainerDirective("tab", {
135
+ title: "pnpm",
136
+ sync: "pm",
137
+ });
138
+ const tree = process(makeTree(tab1, tab2));
139
+ expect(tree.children[0]).toMatchObject({
140
+ type: "mdxJsxFlowElement",
141
+ name: "ContentTabs",
142
+ attributes: [{ type: "mdxJsxAttribute", name: "sync", value: "pm" }],
143
+ });
144
+ });
145
+ it("should not add sync attribute when not present", () => {
146
+ const tab1 = makeContainerDirective("tab", { title: "A" });
147
+ const tab2 = makeContainerDirective("tab", { title: "B" });
148
+ const tree = process(makeTree(tab1, tab2));
149
+ expect(tree.children[0]).toMatchObject({
150
+ type: "mdxJsxFlowElement",
151
+ name: "ContentTabs",
152
+ attributes: [],
153
+ });
154
+ });
155
+ });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLXRhYi51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLXRhYi51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhELFNBQVMsc0JBQXNCLENBQzdCLElBQVksRUFDWixVQUFtQztJQUVuQyxPQUFPO1FBQ0wsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixJQUFJO1FBQ0osVUFBVSxFQUFFLFVBQVUsSUFBSSxFQUFFO1FBQzVCLFFBQVEsRUFBRTtZQUNSLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUU7U0FDdEU7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEdBQUcsUUFBMEI7SUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUE7QUFDbkMsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsU0FBUyxPQUFPLENBQUMsSUFBVTtRQUN6QixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1FBQ25FLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUV6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDekIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsYUFBYTtZQUNuQixRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsSUFBSSxFQUFFLG1CQUFtQjtvQkFDekIsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFVBQVUsRUFBRTt3QkFDVixFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7cUJBQzNEO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0MsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBRXpDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUM1QixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxhQUFhO1lBQ25CLFFBQVEsRUFBRTtnQkFDUjtvQkFDRSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixJQUFJLEVBQUUsWUFBWTtvQkFDbEIsVUFBVSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQ3BFO2FBQ0Y7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7UUFDcEQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDaEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBRXpDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3JDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDbEUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBRXpDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3JDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsUUFBUSxFQUFFO2dCQUNSO29CQUNFLElBQUksRUFBRSxtQkFBbUI7b0JBQ3pCLElBQUksRUFBRSxZQUFZO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxFQUFFO1FBQ3pFLE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzlELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQzVELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9ELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRWhELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUM1QixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQTtRQUNGLDJEQUEyRDtRQUMzRCxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMxQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7UUFDM0QsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDMUQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsSUFBSSxFQUFFLFdBQW9CO1lBQzFCLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDdEQsQ0FBQTtRQUNELE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQzFELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBRXJELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3JDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNyQyxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxhQUFhO1NBQ3BCLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7WUFDOUMsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQTtRQUNGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUV6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hDLDJEQUEyRDtRQUMzRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDeEIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsWUFBWTtZQUNsQixVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUN4RCxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7YUFDdkQ7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7UUFDaEUsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFO1lBQ3pDLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUE7UUFDRixNQUFNLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7WUFDekMsS0FBSyxFQUFFLE1BQU07WUFDYixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUMsQ0FBQTtRQUNGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDckMsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsYUFBYTtZQUNuQixVQUFVLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNyRSxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7UUFDeEQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDMUQsTUFBTSxJQUFJLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDMUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUUxQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNyQyxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxhQUFhO1lBQ25CLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm9vdCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgdHlwZSB7IENvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gXCJtZGFzdC11dGlsLWRpcmVjdGl2ZVwiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQgeyB0cmFuc2Zvcm1UYWJEaXJlY3RpdmVzIH0gZnJvbSBcIi4vcmVtYXJrLXRhYi50c1wiXG5cbmZ1bmN0aW9uIG1ha2VDb250YWluZXJEaXJlY3RpdmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4pOiBDb250YWluZXJEaXJlY3RpdmUge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFwiY29udGFpbmVyRGlyZWN0aXZlXCIsXG4gICAgbmFtZSxcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzID8/IHt9LFxuICAgIGNoaWxkcmVuOiBbXG4gICAgICB7IHR5cGU6IFwicGFyYWdyYXBoXCIsIGNoaWxkcmVuOiBbeyB0eXBlOiBcInRleHRcIiwgdmFsdWU6IFwiY29udGVudFwiIH1dIH0sXG4gICAgXSxcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlVHJlZSguLi5jaGlsZHJlbjogUm9vdFtcImNoaWxkcmVuXCJdKTogUm9vdCB7XG4gIHJldHVybiB7IHR5cGU6IFwicm9vdFwiLCBjaGlsZHJlbiB9XG59XG5cbmRlc2NyaWJlKFwidHJhbnNmb3JtVGFiRGlyZWN0aXZlc1wiLCAoKSA9PiB7XG4gIGZ1bmN0aW9uIHByb2Nlc3ModHJlZTogUm9vdCkge1xuICAgIHRyYW5zZm9ybVRhYkRpcmVjdGl2ZXModHJlZSlcbiAgICByZXR1cm4gdHJlZVxuICB9XG5cbiAgaXQoXCJzaG91bGQgY29udmVydCA6Ojp0YWIgZGlyZWN0aXZlIHRvIENvbnRlbnRUYWIgSlNYIGVsZW1lbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIiwgeyB0aXRsZTogXCJSZWFjdFwiIH0pXG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MobWFrZVRyZWUoZGlyZWN0aXZlKSlcblxuICAgIGNvbnN0IG5vZGUgPSB0cmVlLmNoaWxkcmVuWzBdXG4gICAgZXhwZWN0KG5vZGUpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJDb250ZW50VGFic1wiLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgICAgICBuYW1lOiBcIkNvbnRlbnRUYWJcIixcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgICAgICB7IHR5cGU6IFwibWR4SnN4QXR0cmlidXRlXCIsIG5hbWU6IFwidGl0bGVcIiwgdmFsdWU6IFwiUmVhY3RcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgZGVmYXVsdCB0aXRsZSB0byBlbXB0eSBzdHJpbmcgd2hlbiBub3QgcHJvdmlkZWRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIilcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhtYWtlVHJlZShkaXJlY3RpdmUpKVxuXG4gICAgY29uc3Qgd3JhcHBlciA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIsXG4gICAgICBuYW1lOiBcIkNvbnRlbnRUYWJzXCIsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgICAgIG5hbWU6IFwiQ29udGVudFRhYlwiLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IFt7IHR5cGU6IFwibWR4SnN4QXR0cmlidXRlXCIsIG5hbWU6IFwidGl0bGVcIiwgdmFsdWU6IFwiXCIgfV0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaWdub3JlIG5vbi10YWIgY29udGFpbmVyIGRpcmVjdGl2ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJub3RlXCIpXG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MobWFrZVRyZWUoZGlyZWN0aXZlKSlcblxuICAgIGV4cGVjdCh0cmVlLmNoaWxkcmVuWzBdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6IFwiY29udGFpbmVyRGlyZWN0aXZlXCIsXG4gICAgICBuYW1lOiBcIm5vdGVcIixcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHdyYXAgYSBzaW5nbGUgQ29udGVudFRhYiBpbiBDb250ZW50VGFic1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZGlyZWN0aXZlID0gbWFrZUNvbnRhaW5lckRpcmVjdGl2ZShcInRhYlwiLCB7IHRpdGxlOiBcIk9ubHlcIiB9KVxuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKG1ha2VUcmVlKGRpcmVjdGl2ZSkpXG5cbiAgICBleHBlY3QodHJlZS5jaGlsZHJlbikudG9IYXZlTGVuZ3RoKDEpXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW5bMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJDb250ZW50VGFic1wiLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgICAgICBuYW1lOiBcIkNvbnRlbnRUYWJcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBncm91cCBjb25zZWN1dGl2ZSB0YWJzIGludG8gYSBzaW5nbGUgQ29udGVudFRhYnMgd3JhcHBlclwiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFiMSA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIiwgeyB0aXRsZTogXCJSZWFjdFwiIH0pXG4gICAgY29uc3QgdGFiMiA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIiwgeyB0aXRsZTogXCJWdWVcIiB9KVxuICAgIGNvbnN0IHRhYjMgPSBtYWtlQ29udGFpbmVyRGlyZWN0aXZlKFwidGFiXCIsIHsgdGl0bGU6IFwiU3ZlbHRlXCIgfSlcbiAgICBjb25zdCB0cmVlID0gcHJvY2VzcyhtYWtlVHJlZSh0YWIxLCB0YWIyLCB0YWIzKSlcblxuICAgIGV4cGVjdCh0cmVlLmNoaWxkcmVuKS50b0hhdmVMZW5ndGgoMSlcbiAgICBjb25zdCB3cmFwcGVyID0gdHJlZS5jaGlsZHJlblswXVxuICAgIGV4cGVjdCh3cmFwcGVyKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgIG5hbWU6IFwiQ29udGVudFRhYnNcIixcbiAgICB9KVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgZXhwZWN0KHdyYXBwZXIuY2hpbGRyZW4pLnRvSGF2ZUxlbmd0aCgzKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIG5vdCBncm91cCB0YWJzIHNlcGFyYXRlZCBieSBvdGhlciBlbGVtZW50c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFiMSA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIiwgeyB0aXRsZTogXCJBXCIgfSlcbiAgICBjb25zdCBzZXBhcmF0b3IgPSB7XG4gICAgICB0eXBlOiBcInBhcmFncmFwaFwiIGFzIGNvbnN0LFxuICAgICAgY2hpbGRyZW46IFt7IHR5cGU6IFwidGV4dFwiIGFzIGNvbnN0LCB2YWx1ZTogXCJicmVha1wiIH1dLFxuICAgIH1cbiAgICBjb25zdCB0YWIyID0gbWFrZUNvbnRhaW5lckRpcmVjdGl2ZShcInRhYlwiLCB7IHRpdGxlOiBcIkJcIiB9KVxuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKG1ha2VUcmVlKHRhYjEsIHNlcGFyYXRvciwgdGFiMikpXG5cbiAgICBleHBlY3QodHJlZS5jaGlsZHJlbikudG9IYXZlTGVuZ3RoKDMpXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW5bMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJDb250ZW50VGFic1wiLFxuICAgIH0pXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW5bMV0pLnRvTWF0Y2hPYmplY3QoeyB0eXBlOiBcInBhcmFncmFwaFwiIH0pXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW5bMl0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJDb250ZW50VGFic1wiLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcGFzcyBzeW5jIGF0dHJpYnV0ZSB0byBDb250ZW50VGFiIHdoZW4gcHJlc2VudFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZGlyZWN0aXZlID0gbWFrZUNvbnRhaW5lckRpcmVjdGl2ZShcInRhYlwiLCB7XG4gICAgICB0aXRsZTogXCJucG1cIixcbiAgICAgIHN5bmM6IFwicG1cIixcbiAgICB9KVxuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKG1ha2VUcmVlKGRpcmVjdGl2ZSkpXG5cbiAgICBjb25zdCB3cmFwcGVyID0gdHJlZS5jaGlsZHJlblswXVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbWR4SnN4Rmxvd0VsZW1lbnQgaXMgbm90IGluIG1kYXN0IHR5cGVzXG4gICAgY29uc3QgdGFiID0gd3JhcHBlci5jaGlsZHJlblswXVxuICAgIGV4cGVjdCh0YWIpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJDb250ZW50VGFiXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbXG4gICAgICAgIHsgdHlwZTogXCJtZHhKc3hBdHRyaWJ1dGVcIiwgbmFtZTogXCJ0aXRsZVwiLCB2YWx1ZTogXCJucG1cIiB9LFxuICAgICAgICB7IHR5cGU6IFwibWR4SnN4QXR0cmlidXRlXCIsIG5hbWU6IFwic3luY1wiLCB2YWx1ZTogXCJwbVwiIH0sXG4gICAgICBdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcHJvcGFnYXRlIHN5bmMgYXR0cmlidXRlIHRvIENvbnRlbnRUYWJzIHdyYXBwZXJcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRhYjEgPSBtYWtlQ29udGFpbmVyRGlyZWN0aXZlKFwidGFiXCIsIHtcbiAgICAgIHRpdGxlOiBcIm5wbVwiLFxuICAgICAgc3luYzogXCJwbVwiLFxuICAgIH0pXG4gICAgY29uc3QgdGFiMiA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIiwge1xuICAgICAgdGl0bGU6IFwicG5wbVwiLFxuICAgICAgc3luYzogXCJwbVwiLFxuICAgIH0pXG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MobWFrZVRyZWUodGFiMSwgdGFiMikpXG5cbiAgICBleHBlY3QodHJlZS5jaGlsZHJlblswXSkudG9NYXRjaE9iamVjdCh7XG4gICAgICB0eXBlOiBcIm1keEpzeEZsb3dFbGVtZW50XCIsXG4gICAgICBuYW1lOiBcIkNvbnRlbnRUYWJzXCIsXG4gICAgICBhdHRyaWJ1dGVzOiBbeyB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiLCBuYW1lOiBcInN5bmNcIiwgdmFsdWU6IFwicG1cIiB9XSxcbiAgICB9KVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIG5vdCBhZGQgc3luYyBhdHRyaWJ1dGUgd2hlbiBub3QgcHJlc2VudFwiLCAoKSA9PiB7XG4gICAgY29uc3QgdGFiMSA9IG1ha2VDb250YWluZXJEaXJlY3RpdmUoXCJ0YWJcIiwgeyB0aXRsZTogXCJBXCIgfSlcbiAgICBjb25zdCB0YWIyID0gbWFrZUNvbnRhaW5lckRpcmVjdGl2ZShcInRhYlwiLCB7IHRpdGxlOiBcIkJcIiB9KVxuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKG1ha2VUcmVlKHRhYjEsIHRhYjIpKVxuXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW5bMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJDb250ZW50VGFic1wiLFxuICAgICAgYXR0cmlidXRlczogW10sXG4gICAgfSlcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,6 @@
1
+ import type { Root } from "mdast";
2
+ import type { Plugin } from "unified";
3
+ /** Walk a mdast tree and convert toc leaf directives into InlineToc JSX elements */
4
+ export declare function transformTocDirectives(tree: Root): void;
5
+ /** Remark plugin that converts ::toc leaf directives into InlineToc JSX elements */
6
+ export declare const remarkToc: Plugin<[], Root>;
@@ -0,0 +1,33 @@
1
+ import { visit } from "unist-util-visit";
2
+ /** Walk a mdast tree and convert toc leaf directives into InlineToc JSX elements */
3
+ export function transformTocDirectives(tree) {
4
+ visit(tree, "leafDirective", (node, index, parent) => {
5
+ if (node.name !== "toc" || index === undefined || !parent)
6
+ return;
7
+ const maxLevel = node.attributes?.maxLevel;
8
+ const jsxNode = {
9
+ type: "mdxJsxFlowElement",
10
+ name: "InlineToc",
11
+ attributes: maxLevel
12
+ ? [
13
+ {
14
+ type: "mdxJsxAttribute",
15
+ name: "maxLevel",
16
+ value: maxLevel,
17
+ },
18
+ ]
19
+ : [],
20
+ children: [],
21
+ data: { _mdxExplicitJsx: true },
22
+ };
23
+ // @ts-expect-error mdxJsxFlowElement is not in mdast types
24
+ parent.children.splice(index, 1, jsxNode);
25
+ });
26
+ }
27
+ /** Remark plugin that converts ::toc leaf directives into InlineToc JSX elements */
28
+ export const remarkToc = () => {
29
+ return tree => {
30
+ transformTocDirectives(tree);
31
+ };
32
+ };
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLXRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3JlbWFyay10b2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRXhDLG9GQUFvRjtBQUNwRixNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBVTtJQUMvQyxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLElBQW1CLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFNO1FBRWpFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFBO1FBRTFDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLG1CQUE0QjtZQUNsQyxJQUFJLEVBQUUsV0FBVztZQUNqQixVQUFVLEVBQUUsUUFBUTtnQkFDbEIsQ0FBQyxDQUFDO29CQUNFO3dCQUNFLElBQUksRUFBRSxpQkFBMEI7d0JBQ2hDLElBQUksRUFBRSxVQUFVO3dCQUNoQixLQUFLLEVBQUUsUUFBUTtxQkFDaEI7aUJBQ0Y7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUU7WUFDTixRQUFRLEVBQUUsRUFBRTtZQUNaLElBQUksRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUU7U0FDaEMsQ0FBQTtRQUVELDJEQUEyRDtRQUMzRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNDLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQXFCLEdBQUcsRUFBRTtJQUM5QyxPQUFPLElBQUksQ0FBQyxFQUFFO1FBQ1osc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSb290IH0gZnJvbSBcIm1kYXN0XCJcbmltcG9ydCB0eXBlIHsgTGVhZkRpcmVjdGl2ZSB9IGZyb20gXCJtZGFzdC11dGlsLWRpcmVjdGl2ZVwiXG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJ1bmlmaWVkXCJcbmltcG9ydCB7IHZpc2l0IH0gZnJvbSBcInVuaXN0LXV0aWwtdmlzaXRcIlxuXG4vKiogV2FsayBhIG1kYXN0IHRyZWUgYW5kIGNvbnZlcnQgdG9jIGxlYWYgZGlyZWN0aXZlcyBpbnRvIElubGluZVRvYyBKU1ggZWxlbWVudHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1Ub2NEaXJlY3RpdmVzKHRyZWU6IFJvb3QpIHtcbiAgdmlzaXQodHJlZSwgXCJsZWFmRGlyZWN0aXZlXCIsIChub2RlOiBMZWFmRGlyZWN0aXZlLCBpbmRleCwgcGFyZW50KSA9PiB7XG4gICAgaWYgKG5vZGUubmFtZSAhPT0gXCJ0b2NcIiB8fCBpbmRleCA9PT0gdW5kZWZpbmVkIHx8ICFwYXJlbnQpIHJldHVyblxuXG4gICAgY29uc3QgbWF4TGV2ZWwgPSBub2RlLmF0dHJpYnV0ZXM/Lm1heExldmVsXG5cbiAgICBjb25zdCBqc3hOb2RlID0ge1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiIGFzIGNvbnN0LFxuICAgICAgbmFtZTogXCJJbmxpbmVUb2NcIixcbiAgICAgIGF0dHJpYnV0ZXM6IG1heExldmVsXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcIm1keEpzeEF0dHJpYnV0ZVwiIGFzIGNvbnN0LFxuICAgICAgICAgICAgICBuYW1lOiBcIm1heExldmVsXCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBtYXhMZXZlbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgZGF0YTogeyBfbWR4RXhwbGljaXRKc3g6IHRydWUgfSxcbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG1keEpzeEZsb3dFbGVtZW50IGlzIG5vdCBpbiBtZGFzdCB0eXBlc1xuICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEsIGpzeE5vZGUpXG4gIH0pXG59XG5cbi8qKiBSZW1hcmsgcGx1Z2luIHRoYXQgY29udmVydHMgOjp0b2MgbGVhZiBkaXJlY3RpdmVzIGludG8gSW5saW5lVG9jIEpTWCBlbGVtZW50cyAqL1xuZXhwb3J0IGNvbnN0IHJlbWFya1RvYzogUGx1Z2luPFtdLCBSb290PiA9ICgpID0+IHtcbiAgcmV0dXJuIHRyZWUgPT4ge1xuICAgIHRyYW5zZm9ybVRvY0RpcmVjdGl2ZXModHJlZSlcbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,57 @@
1
+ import { describe, expect, it } from "vite-plus/test";
2
+ import { transformTocDirectives } from "./remark-toc.js";
3
+ function makeLeafDirective(name, attributes = {}) {
4
+ return {
5
+ type: "leafDirective",
6
+ name,
7
+ attributes,
8
+ children: [],
9
+ };
10
+ }
11
+ function makeTree(...children) {
12
+ return { type: "root", children };
13
+ }
14
+ function process(tree) {
15
+ transformTocDirectives(tree);
16
+ return tree;
17
+ }
18
+ describe("transformTocDirectives", () => {
19
+ it("should convert toc directive to InlineToc JSX element", () => {
20
+ const tree = process(makeTree(makeLeafDirective("toc")));
21
+ const node = tree.children[0];
22
+ expect(node).toMatchObject({
23
+ type: "mdxJsxFlowElement",
24
+ name: "InlineToc",
25
+ attributes: [],
26
+ children: [],
27
+ });
28
+ });
29
+ it("should ignore unrelated leaf directives", () => {
30
+ const tree = process(makeTree(makeLeafDirective("video", { type: "youtube" })));
31
+ const node = tree.children[0];
32
+ expect(node).toMatchObject({ type: "leafDirective", name: "video" });
33
+ });
34
+ it("should handle multiple toc directives in the same tree", () => {
35
+ const tree = process(makeTree(makeLeafDirective("toc"), { type: "paragraph", children: [{ type: "text", value: "hello" }] }, makeLeafDirective("toc")));
36
+ expect(tree.children[0]).toMatchObject({
37
+ type: "mdxJsxFlowElement",
38
+ name: "InlineToc",
39
+ });
40
+ expect(tree.children[1]).toMatchObject({ type: "paragraph" });
41
+ expect(tree.children[2]).toMatchObject({
42
+ type: "mdxJsxFlowElement",
43
+ name: "InlineToc",
44
+ });
45
+ });
46
+ it("should preserve other children when converting toc directive", () => {
47
+ const tree = process(makeTree({ type: "paragraph", children: [{ type: "text", value: "before" }] }, makeLeafDirective("toc"), { type: "paragraph", children: [{ type: "text", value: "after" }] }));
48
+ expect(tree.children).toHaveLength(3);
49
+ expect(tree.children[0]).toMatchObject({ type: "paragraph" });
50
+ expect(tree.children[1]).toMatchObject({
51
+ type: "mdxJsxFlowElement",
52
+ name: "InlineToc",
53
+ });
54
+ expect(tree.children[2]).toMatchObject({ type: "paragraph" });
55
+ });
56
+ });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtYXJrLXRvYy51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3BsdWdpbnMvcmVtYXJrLXRvYy51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRXhELFNBQVMsaUJBQWlCLENBQ3hCLElBQVksRUFDWixVQUFVLEdBQTJCLEVBQUU7SUFFdkMsT0FBTztRQUNMLElBQUksRUFBRSxlQUF3QztRQUM5QyxJQUFJO1FBQ0osVUFBVTtRQUNWLFFBQVEsRUFBRSxFQUFFO0tBQ2IsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxHQUFHLFFBQTBCO0lBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxJQUFVO0lBQ3pCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDekIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsV0FBVztZQUNqQixVQUFVLEVBQUUsRUFBRTtZQUNkLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1FBQ2pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQzFELENBQUE7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtRQUNoRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQ2xCLFFBQVEsQ0FDTixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFDeEIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUNuRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FDekIsQ0FDRixDQUFBO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDckMsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixJQUFJLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ3JDLElBQUksRUFBRSxtQkFBbUI7WUFDekIsSUFBSSxFQUFFLFdBQVc7U0FDbEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FDbEIsUUFBUSxDQUNOLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFDcEUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQ3hCLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FDcEUsQ0FDRixDQUFBO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQTtRQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNyQyxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxXQUFXO1NBQ2xCLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUE7SUFDL0QsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUm9vdCB9IGZyb20gXCJtZGFzdFwiXG5pbXBvcnQgdHlwZSB7IExlYWZEaXJlY3RpdmUgfSBmcm9tIFwibWRhc3QtdXRpbC1kaXJlY3RpdmVcIlxuaW1wb3J0IHsgZGVzY3JpYmUsIGV4cGVjdCwgaXQgfSBmcm9tIFwidml0ZS1wbHVzL3Rlc3RcIlxuaW1wb3J0IHsgdHJhbnNmb3JtVG9jRGlyZWN0aXZlcyB9IGZyb20gXCIuL3JlbWFyay10b2MudHNcIlxuXG5mdW5jdGlvbiBtYWtlTGVhZkRpcmVjdGl2ZShcbiAgbmFtZTogc3RyaW5nLFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30sXG4pOiBMZWFmRGlyZWN0aXZlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcImxlYWZEaXJlY3RpdmVcIiBhcyBMZWFmRGlyZWN0aXZlW1widHlwZVwiXSxcbiAgICBuYW1lLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IFtdLFxuICB9XG59XG5cbmZ1bmN0aW9uIG1ha2VUcmVlKC4uLmNoaWxkcmVuOiBSb290W1wiY2hpbGRyZW5cIl0pOiBSb290IHtcbiAgcmV0dXJuIHsgdHlwZTogXCJyb290XCIsIGNoaWxkcmVuIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzcyh0cmVlOiBSb290KSB7XG4gIHRyYW5zZm9ybVRvY0RpcmVjdGl2ZXModHJlZSlcbiAgcmV0dXJuIHRyZWVcbn1cblxuZGVzY3JpYmUoXCJ0cmFuc2Zvcm1Ub2NEaXJlY3RpdmVzXCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgY29udmVydCB0b2MgZGlyZWN0aXZlIHRvIElubGluZVRvYyBKU1ggZWxlbWVudFwiLCAoKSA9PiB7XG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MobWFrZVRyZWUobWFrZUxlYWZEaXJlY3RpdmUoXCJ0b2NcIikpKVxuICAgIGNvbnN0IG5vZGUgPSB0cmVlLmNoaWxkcmVuWzBdXG4gICAgZXhwZWN0KG5vZGUpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJJbmxpbmVUb2NcIixcbiAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaWdub3JlIHVucmVsYXRlZCBsZWFmIGRpcmVjdGl2ZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHRyZWUgPSBwcm9jZXNzKFxuICAgICAgbWFrZVRyZWUobWFrZUxlYWZEaXJlY3RpdmUoXCJ2aWRlb1wiLCB7IHR5cGU6IFwieW91dHViZVwiIH0pKSxcbiAgICApXG4gICAgY29uc3Qgbm9kZSA9IHRyZWUuY2hpbGRyZW5bMF1cbiAgICBleHBlY3Qobm9kZSkudG9NYXRjaE9iamVjdCh7IHR5cGU6IFwibGVhZkRpcmVjdGl2ZVwiLCBuYW1lOiBcInZpZGVvXCIgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBoYW5kbGUgbXVsdGlwbGUgdG9jIGRpcmVjdGl2ZXMgaW4gdGhlIHNhbWUgdHJlZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZShcbiAgICAgICAgbWFrZUxlYWZEaXJlY3RpdmUoXCJ0b2NcIiksXG4gICAgICAgIHsgdHlwZTogXCJwYXJhZ3JhcGhcIiwgY2hpbGRyZW46IFt7IHR5cGU6IFwidGV4dFwiLCB2YWx1ZTogXCJoZWxsb1wiIH1dIH0sXG4gICAgICAgIG1ha2VMZWFmRGlyZWN0aXZlKFwidG9jXCIpLFxuICAgICAgKSxcbiAgICApXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW5bMF0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgdHlwZTogXCJtZHhKc3hGbG93RWxlbWVudFwiLFxuICAgICAgbmFtZTogXCJJbmxpbmVUb2NcIixcbiAgICB9KVxuICAgIGV4cGVjdCh0cmVlLmNoaWxkcmVuWzFdKS50b01hdGNoT2JqZWN0KHsgdHlwZTogXCJwYXJhZ3JhcGhcIiB9KVxuICAgIGV4cGVjdCh0cmVlLmNoaWxkcmVuWzJdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgIG5hbWU6IFwiSW5saW5lVG9jXCIsXG4gICAgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCBwcmVzZXJ2ZSBvdGhlciBjaGlsZHJlbiB3aGVuIGNvbnZlcnRpbmcgdG9jIGRpcmVjdGl2ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgdHJlZSA9IHByb2Nlc3MoXG4gICAgICBtYWtlVHJlZShcbiAgICAgICAgeyB0eXBlOiBcInBhcmFncmFwaFwiLCBjaGlsZHJlbjogW3sgdHlwZTogXCJ0ZXh0XCIsIHZhbHVlOiBcImJlZm9yZVwiIH1dIH0sXG4gICAgICAgIG1ha2VMZWFmRGlyZWN0aXZlKFwidG9jXCIpLFxuICAgICAgICB7IHR5cGU6IFwicGFyYWdyYXBoXCIsIGNoaWxkcmVuOiBbeyB0eXBlOiBcInRleHRcIiwgdmFsdWU6IFwiYWZ0ZXJcIiB9XSB9LFxuICAgICAgKSxcbiAgICApXG4gICAgZXhwZWN0KHRyZWUuY2hpbGRyZW4pLnRvSGF2ZUxlbmd0aCgzKVxuICAgIGV4cGVjdCh0cmVlLmNoaWxkcmVuWzBdKS50b01hdGNoT2JqZWN0KHsgdHlwZTogXCJwYXJhZ3JhcGhcIiB9KVxuICAgIGV4cGVjdCh0cmVlLmNoaWxkcmVuWzFdKS50b01hdGNoT2JqZWN0KHtcbiAgICAgIHR5cGU6IFwibWR4SnN4Rmxvd0VsZW1lbnRcIixcbiAgICAgIG5hbWU6IFwiSW5saW5lVG9jXCIsXG4gICAgfSlcbiAgICBleHBlY3QodHJlZS5jaGlsZHJlblsyXSkudG9NYXRjaE9iamVjdCh7IHR5cGU6IFwicGFyYWdyYXBoXCIgfSlcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,16 @@
1
+ interface HastElement {
2
+ properties: Record<string, unknown>;
3
+ }
4
+ interface ShikiTransformer {
5
+ name: string;
6
+ pre: (this: {
7
+ options: {
8
+ lang?: string;
9
+ };
10
+ }, pre: HastElement) => HastElement | void;
11
+ }
12
+ /**
13
+ * Shiki transformer that injects a language icon SVG into the pre element.
14
+ */
15
+ export declare function transformerIcon(): ShikiTransformer;
16
+ export {};
@@ -0,0 +1,66 @@
1
+ const shortcuts = {
2
+ js: "javascript",
3
+ jsx: "react",
4
+ ts: "typescript",
5
+ tsx: "react",
6
+ py: "python",
7
+ bash: "shellscript",
8
+ sh: "shellscript",
9
+ shell: "shellscript",
10
+ zsh: "shellscript",
11
+ };
12
+ const icons = {
13
+ typescript: {
14
+ viewBox: "0 0 24 24",
15
+ fill: "currentColor",
16
+ d: "M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z",
17
+ },
18
+ javascript: {
19
+ viewBox: "0 0 24 24",
20
+ fill: "currentColor",
21
+ d: "M0 0h24v24H0V0zm22.034 18.276c-.175-1.095-.888-2.015-3.003-2.873-.736-.345-1.554-.585-1.797-1.14-.091-.33-.105-.51-.046-.705.15-.646.915-.84 1.515-.66.39.12.75.42.976.9 1.034-.676 1.034-.676 1.755-1.125-.27-.42-.405-.6-.586-.78-.63-.705-1.469-1.065-2.834-1.034l-.705.089c-.676.165-1.32.525-1.71 1.005-1.14 1.291-.811 3.541.569 4.471 1.365 1.02 3.361 1.244 3.616 2.205.24 1.17-.87 1.545-1.966 1.41-.811-.18-1.26-.586-1.755-1.336l-1.83 1.051c.21.48.45.689.81 1.109 1.74 1.756 6.09 1.666 6.871-1.004.029-.09.24-.705.074-1.65l.046.067zm-8.983-7.245h-2.248c0 1.938-.009 3.864-.009 5.805 0 1.232.063 2.363-.138 2.711-.33.689-1.18.601-1.566.48-.396-.196-.597-.466-.83-.855-.063-.105-.11-.196-.127-.196l-1.825 1.125c.305.63.75 1.172 1.324 1.517.855.51 2.004.675 3.207.405.783-.226 1.458-.691 1.811-1.411.51-.93.402-2.07.397-3.346.012-2.054 0-4.109 0-6.179l.004-.056z",
22
+ },
23
+ react: {
24
+ viewBox: "0 0 24 24",
25
+ fill: "currentColor",
26
+ d: "M14.23 12.004a2.236 2.236 0 0 1-2.235 2.236 2.236 2.236 0 0 1-2.236-2.236 2.236 2.236 0 0 1 2.235-2.236 2.236 2.236 0 0 1 2.236 2.236zm2.648-10.69c-1.346 0-3.107.96-4.888 2.622-1.78-1.653-3.542-2.602-4.887-2.602-.41 0-.783.093-1.106.278-1.375.793-1.683 3.264-.973 6.365C1.98 8.917 0 10.42 0 12.004c0 1.59 1.99 3.097 5.043 4.03-.704 3.113-.39 5.588.988 6.38.32.187.69.275 1.102.275 1.345 0 3.107-.96 4.888-2.624 1.78 1.654 3.542 2.603 4.887 2.603.41 0 .783-.09 1.106-.275 1.374-.792 1.683-3.263.973-6.365C22.02 15.096 24 13.59 24 12.004c0-1.59-1.99-3.097-5.043-4.032.704-3.11.39-5.587-.988-6.38-.318-.184-.688-.277-1.092-.278zm-.005 1.09v.006c.225 0 .406.044.558.127.666.382.955 1.835.73 3.704-.054.46-.142.945-.25 1.44-.96-.236-2.006-.417-3.107-.534-.66-.905-1.345-1.727-2.035-2.447 1.592-1.48 3.087-2.292 4.105-2.295zm-9.77.02c1.012 0 2.514.808 4.11 2.28-.686.72-1.37 1.537-2.02 2.442-1.107.117-2.154.298-3.113.538-.112-.49-.195-.964-.254-1.42-.23-1.868.054-3.32.714-3.707.19-.09.4-.127.563-.132zm4.882 3.05c.455.468.91.992 1.36 1.564-.44-.02-.89-.034-1.345-.034-.46 0-.915.01-1.36.034.44-.572.895-1.096 1.345-1.565zM12 8.1c.74 0 1.477.034 2.202.093.406.582.802 1.203 1.183 1.86.372.64.71 1.29 1.018 1.946-.308.655-.646 1.31-1.013 1.95-.38.66-.773 1.288-1.18 1.87-.728.063-1.466.098-2.21.098-.74 0-1.477-.035-2.202-.093-.406-.582-.802-1.204-1.183-1.86-.372-.64-.71-1.29-1.018-1.946.303-.657.646-1.313 1.013-1.954.38-.66.773-1.286 1.18-1.868.728-.064 1.466-.098 2.21-.098zm-3.635.254c-.24.377-.48.763-.704 1.16-.225.39-.435.782-.635 1.174-.265-.656-.49-1.31-.676-1.947.64-.15 1.315-.283 2.015-.386zm7.26 0c.695.103 1.365.23 2.006.387-.18.632-.405 1.282-.66 1.933-.2-.39-.41-.783-.64-1.174-.225-.392-.465-.774-.705-1.146zm3.063.675c.484.15.944.317 1.375.498 1.732.74 2.852 1.708 2.852 2.476-.005.768-1.125 1.74-2.857 2.475-.42.18-.88.342-1.355.493-.28-.958-.646-1.956-1.1-2.98.45-1.017.81-2.01 1.085-2.964zm-13.395.004c.278.96.645 1.957 1.1 2.98-.45 1.017-.812 2.01-1.086 2.964-.484-.15-.944-.318-1.37-.5-1.732-.737-2.852-1.706-2.852-2.474 0-.768 1.12-1.742 2.852-2.476.42-.18.88-.342 1.356-.494zm11.678 4.28c.265.657.49 1.312.676 1.948-.64.157-1.316.29-2.016.39.24-.375.48-.762.705-1.158.225-.39.435-.788.636-1.18zm-9.945.02c.2.392.41.783.64 1.175.23.39.465.772.705 1.143-.695-.102-1.365-.23-2.006-.386.18-.63.406-1.282.66-1.933zM17.92 16.32c.112.493.2.968.254 1.423.23 1.868-.054 3.32-.714 3.708-.147.09-.338.128-.563.128-1.012 0-2.514-.807-4.11-2.28.686-.72 1.37-1.536 2.02-2.44 1.107-.118 2.154-.3 3.113-.54zm-11.83.01c.96.234 2.006.415 3.107.532.66.905 1.345 1.727 2.035 2.446-1.595 1.483-3.092 2.295-4.11 2.295-.22-.005-.406-.05-.553-.132-.666-.38-.955-1.834-.73-3.703.054-.46.142-.944.25-1.438zm4.56.64c.44.02.89.034 1.345.034.46 0 .915-.01 1.36-.034-.44.572-.895 1.095-1.345 1.565-.455-.47-.91-.993-1.36-1.565z",
27
+ },
28
+ python: {
29
+ viewBox: "0 0 24 24",
30
+ fill: "currentColor",
31
+ d: "M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01H8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z",
32
+ },
33
+ rust: {
34
+ viewBox: "0 0 24 24",
35
+ fill: "currentColor",
36
+ d: "M23.8346 11.7033l-1.0073-.6236a13.7268 13.7268 0 00-.0283-.2936l.8656-.8069a.3483.3483 0 00-.1154-.578l-1.1066-.414a8.4958 8.4958 0 00-.087-.2856l.6904-.9587a.3462.3462 0 00-.2257-.5446l-1.1663-.1894a9.3574 9.3574 0 00-.1407-.2622l.4895-1.0761a.3438.3438 0 00-.3300-.4908l-1.1845.0416a6.7444 6.7444 0 00-.1873-.2268l.2723-1.153a.3472.3472 0 00-.4233-.4164l-1.1592.2683a14.1794 14.1794 0 00-.2231-.1817l.0467-1.1872a.3462.3462 0 00-.5765-.322l-1.0907.4878c-.0799-.0499-.1613-.0983-.2449-.1456l-.1787-1.1758a.3456.3456 0 00-.5766-.2329l-.9813.6919a13.596 13.596 0 00-.2571-.1049l-.3982-1.1175a.348.348 0 00-.5815-.1272l-.8352.8738a10.2102 10.2102 0 00-.2606-.0584l-.6082-1.0131a.3459.3459 0 00-.5659-.0197l-.6602 1.0257a6.3249 6.3249 0 00-.2574.0068L8.3862.8721a.3437.3437 0 00-.5368.0921l-.4676 1.1376a10.3014 10.3014 0 00-.2444.0856L6.2788 1.394a.3447.3447 0 00-.4916.2004l-.2615 1.2048a11.5632 11.5632 0 00-.2242.149l-.9215-.5549a.3445.3445 0 00-.4345.2945l-.0488 1.2261a11.0239 11.0239 0 00-.1989.2028l-1.0498-.2744a.3441.3441 0 00-.3684.3752l.1643 1.2026c-.0553.075-.1084.1515-.1598.2293l-1.1374.0132a.3427.3427 0 00-.2938.4422l.3698 1.1347a10.4633 10.4633 0 00-.1162.2474l-1.1817.2923a.3433.3433 0 00-.2134.4944l.5627 1.0262c-.0265.085-.0502.1713-.0713.258l-1.1812.5586a.343.343 0 00-.1299.5316l.7396.8793a13.0102 13.0102 0 00-.0236.264l-1.1355.8086a.3445.3445 0 00-.0429.5513l.8937.6986a9.0776 9.0776 0 00.0235.2643L.3108 14.515a.3455.3455 0 00.0432.5508l1.0185.4941a14.4526 14.4526 0 00.0694.2602l-.6564.9682a.3443.3443 0 00.1273.5483l1.1066.2713c.0437.0833.0891.1653.136.2462l-.4348 1.0848a.3445.3445 0 00.2069.5304l1.1564.0436c.0583.0749.1182.1485.1797.2205l-.2004 1.1603a.348.348 0 00.2824.4902l1.1669-.1838c.0694.064.1404.1265.2127.1874l.0387 1.1912a.3476.3476 0 00.3498.4306l1.1388-.4038a7.4207 7.4207 0 00.2381.1482l.2723 1.1772a.3459.3459 0 00.4074.3543l1.0738-.6104c.084.0393.169.077.2553.113l.4964 1.1178a.3476.3476 0 00.4529.2643l.9744-.7985c.0873.0285.1757.0553.2649.0803l.707 1.015a.3475.3475 0 00.4827.165l.8435-.9633a8.7717 8.7717 0 00.267.0418l.8978.8715a.347.347 0 00.4959.0582l.6863-1.1004c.0877-.0039.1754-.0094.2631-.0166l1.0645.6907a.3478.3478 0 00.4921-.0466l.5043-1.2024c.0829-.0168.1657-.0349.2476-.0546l1.2024.478a.3444.3444 0 00.4721-.1462l.305-1.2685a9.4986 9.4986 0 00.2264-.0963l1.3088.241a.3462.3462 0 00.4373-.2383l.0931-1.2948a12.775 12.775 0 00.1996-.1384l1.3811-.0133a.3442.3442 0 00.3879-.3209l-.1204-1.2792a12.0697 12.0697 0 00.1677-.1767l1.4174-.2612a.3462.3462 0 00.3266-.3935l-.3286-1.222a13.5765 13.5765 0 00.1307-.2093l1.4154-.4985a.3454.3454 0 00.2558-.4536l-.5275-1.1259a8.7256 8.7256 0 00.0899-.2341l1.3741-.7219a.3439.3439 0 00.1787-.4993l-.7113-.9937a9.1373 9.1373 0 00.0449-.2543l1.2944-.9275a.3446.3446 0 00.0963-.5323zM12.0522 4.5705a.703.703 0 01.5765-.098c.3473.0982.6615.2679.9263.4973a.3873.3873 0 01-.5765.098c-.3473-.0982-.6615-.2679-.9263-.4973zm-3.2 7.5508c.2.0 .4-.0 .6-.0l.2 .6h-1l.2-.6zm4.5 2.7l-.4-.3.3-.4c-.3-.2-.7-.3-1.1-.3l-.1.5-.1-.5c-.4.0-.8.1-1.1.3l.3.4-.4.3c-.3-.3-.5-.6-.6-1l.5-.1-.5-.2c0-.4.1-.8.3-1.2l.4.3-.3-.4c.3-.3.6-.5 1-.6l.1.5.1-.5c.4.0.8.2 1.1.4l-.3.4.4-.3c.2.3.3.7.4 1.1l-.5.1.5.2c-.0.4-.2.8-.4 1.1zm3.3-2.1l-.6.0-.2-.6h1l-.2.6z",
37
+ },
38
+ shellscript: {
39
+ viewBox: "0 0 24 24",
40
+ fill: "currentColor",
41
+ d: "M4.814 0h14.371a2.813 2.813 0 0 1 2.814 2.814v18.371A2.813 2.813 0 0 1 19.186 24H4.814A2.813 2.813 0 0 1 2 21.186V2.814A2.813 2.813 0 0 1 4.814 0zM5.8 21.2h12.39v-1.6H5.8zm6.636-4.762L7.394 12.17l1.07-1.258 5.043 4.268zm-1.111-5.889 1.07-1.258 5.043 4.268-5.043 4.268-1.07-1.258 3.972-3.01z",
42
+ },
43
+ default: {
44
+ viewBox: "0 0 24 24",
45
+ fill: "currentColor",
46
+ d: "M 6,1 C 4.354992,1 3,2.354992 3,4 v 16 c 0,1.645008 1.354992,3 3,3 h 12 c 1.645008,0 3,-1.354992 3,-3 V 8 7 A 1.0001,1.0001 0 0 0 20.707031,6.2929687 l -5,-5 A 1.0001,1.0001 0 0 0 15,1 h -1 z m 0,2 h 7 v 3 c 0,1.645008 1.354992,3 3,3 h 3 v 11 c 0,0.564129 -0.435871,1 -1,1 H 6 C 5.4358712,21 5,20.564129 5,20 V 4 C 5,3.4358712 5.4358712,3 6,3 Z M 15,3.4140625 18.585937,7 H 16 C 15.435871,7 15,6.5641288 15,6 Z",
47
+ },
48
+ };
49
+ /**
50
+ * Shiki transformer that injects a language icon SVG into the pre element.
51
+ */
52
+ export function transformerIcon() {
53
+ return {
54
+ name: "livemark:icon",
55
+ pre(pre) {
56
+ const lang = this.options.lang;
57
+ if (!lang)
58
+ return;
59
+ const iconName = lang in shortcuts ? shortcuts[lang] : lang;
60
+ const icon = iconName in icons ? icons[iconName] : icons.default;
61
+ pre.properties.icon = `<svg viewBox="${icon.viewBox}"><path d="${icon.d}" fill="${icon.fill}" /></svg>`;
62
+ return pre;
63
+ },
64
+ };
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpa2ktaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3NoaWtpLWljb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxTQUFTLEdBQTJCO0lBQ3hDLEVBQUUsRUFBRSxZQUFZO0lBQ2hCLEdBQUcsRUFBRSxPQUFPO0lBQ1osRUFBRSxFQUFFLFlBQVk7SUFDaEIsR0FBRyxFQUFFLE9BQU87SUFDWixFQUFFLEVBQUUsUUFBUTtJQUNaLElBQUksRUFBRSxhQUFhO0lBQ25CLEVBQUUsRUFBRSxhQUFhO0lBQ2pCLEtBQUssRUFBRSxhQUFhO0lBQ3BCLEdBQUcsRUFBRSxhQUFhO0NBQ25CLENBQUE7QUFFRCxNQUFNLEtBQUssR0FBeUI7SUFDbEMsVUFBVSxFQUFFO1FBQ1YsT0FBTyxFQUFFLFdBQVc7UUFDcEIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsQ0FBQyxFQUFFLDhwQ0FBOHBDO0tBQ2xxQztJQUNELFVBQVUsRUFBRTtRQUNWLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLElBQUksRUFBRSxjQUFjO1FBQ3BCLENBQUMsRUFBRSw0MUJBQTQxQjtLQUNoMkI7SUFDRCxLQUFLLEVBQUU7UUFDTCxPQUFPLEVBQUUsV0FBVztRQUNwQixJQUFJLEVBQUUsY0FBYztRQUNwQixDQUFDLEVBQUUsbXdGQUFtd0Y7S0FDdndGO0lBQ0QsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUFFLFdBQVc7UUFDcEIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsQ0FBQyxFQUFFLGs0Q0FBazRDO0tBQ3Q0QztJQUNELElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLElBQUksRUFBRSxjQUFjO1FBQ3BCLENBQUMsRUFBRSw4b0dBQThvRztLQUNscEc7SUFDRCxXQUFXLEVBQUU7UUFDWCxPQUFPLEVBQUUsV0FBVztRQUNwQixJQUFJLEVBQUUsY0FBYztRQUNwQixDQUFDLEVBQUUsb1NBQW9TO0tBQ3hTO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsT0FBTyxFQUFFLFdBQVc7UUFDcEIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsQ0FBQyxFQUFFLDRaQUE0WjtLQUNoYTtDQUNGLENBQUE7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU87UUFDTCxJQUFJLEVBQUUsZUFBZTtRQUNyQixHQUFHLENBQUMsR0FBRztZQUNMLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFBO1lBQzlCLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU07WUFFakIsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7WUFDNUQsTUFBTSxJQUFJLEdBQUcsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBUSxDQUFBO1lBRWxFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLGlCQUFpQixJQUFJLENBQUMsT0FBTyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFBO1lBQ3ZHLE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIEhhc3RFbGVtZW50IHtcbiAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn1cblxuaW50ZXJmYWNlIFNoaWtpVHJhbnNmb3JtZXIge1xuICBuYW1lOiBzdHJpbmdcbiAgcHJlOiAoXG4gICAgdGhpczogeyBvcHRpb25zOiB7IGxhbmc/OiBzdHJpbmcgfSB9LFxuICAgIHByZTogSGFzdEVsZW1lbnQsXG4gICkgPT4gSGFzdEVsZW1lbnQgfCB2b2lkXG59XG5cbnR5cGUgSWNvbiA9IHsgdmlld0JveDogc3RyaW5nOyBmaWxsOiBzdHJpbmc7IGQ6IHN0cmluZyB9XG5cbmNvbnN0IHNob3J0Y3V0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAganM6IFwiamF2YXNjcmlwdFwiLFxuICBqc3g6IFwicmVhY3RcIixcbiAgdHM6IFwidHlwZXNjcmlwdFwiLFxuICB0c3g6IFwicmVhY3RcIixcbiAgcHk6IFwicHl0aG9uXCIsXG4gIGJhc2g6IFwic2hlbGxzY3JpcHRcIixcbiAgc2g6IFwic2hlbGxzY3JpcHRcIixcbiAgc2hlbGw6IFwic2hlbGxzY3JpcHRcIixcbiAgenNoOiBcInNoZWxsc2NyaXB0XCIsXG59XG5cbmNvbnN0IGljb25zOiBSZWNvcmQ8c3RyaW5nLCBJY29uPiA9IHtcbiAgdHlwZXNjcmlwdDoge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk0xLjEyNSAwQy41MDIgMCAwIC41MDIgMCAxLjEyNXYyMS43NUMwIDIzLjQ5OC41MDIgMjQgMS4xMjUgMjRoMjEuNzVjLjYyMyAwIDEuMTI1LS41MDIgMS4xMjUtMS4xMjVWMS4xMjVDMjQgLjUwMiAyMy40OTggMCAyMi44NzUgMHptMTcuMzYzIDkuNzVjLjYxMiAwIDEuMTU0LjAzNyAxLjYyNy4xMTFhNi4zOCA2LjM4IDAgMCAxIDEuMzA2LjM0djIuNDU4YTMuOTUgMy45NSAwIDAgMC0uNjQzLS4zNjEgNS4wOTMgNS4wOTMgMCAwIDAtLjcxNy0uMjYgNS40NTMgNS40NTMgMCAwIDAtMS40MjYtLjJjLS4zIDAtLjU3My4wMjgtLjgxOS4wODZhMi4xIDIuMSAwIDAgMC0uNjIzLjI0MmMtLjE3LjEwNC0uMy4yMjktLjM5My4zNzRhLjg4OC44ODggMCAwIDAtLjE0LjQ5YzAgLjE5Ni4wNTMuMzczLjE1Ni41MjkuMTA0LjE1Ni4yNTIuMzA0LjQ0My40NDRzLjQyMy4yNzYuNjk2LjQxYy4yNzMuMTM1LjU4Mi4yNzQuOTI2LjQxNi40Ny4xOTcuODkyLjQwNyAxLjI2Ni42MjguMzc0LjIyMi42OTUuNDczLjk2My43NTMuMjY4LjI3OS40NzIuNTk4LjYxNC45NTcuMTQyLjM1OS4yMTQuNzc2LjIxNCAxLjI1MyAwIC42NTctLjEyNSAxLjIxLS4zNzMgMS42NTZhMy4wMzMgMy4wMzMgMCAwIDEtMS4wMTIgMS4wODUgNC4zOCA0LjM4IDAgMCAxLTEuNDg3LjU5NmMtLjU2Ni4xMi0xLjE2My4xOC0xLjc5LjE4YTkuOTE2IDkuOTE2IDAgMCAxLTEuODQtLjE2NCA1LjU0NCA1LjU0NCAwIDAgMS0xLjUxMi0uNDkzdi0yLjYzYTUuMDMzIDUuMDMzIDAgMCAwIDMuMjM3IDEuMmMuMzMzIDAgLjYyNC0uMDMuODcyLS4wOS4yNDktLjA2LjQ1Ni0uMTQ0LjYyMy0uMjUuMTY2LS4xMDguMjktLjIzNC4zNzMtLjM4YTEuMDIzIDEuMDIzIDAgMCAwLS4wNzQtMS4wODkgMi4xMiAyLjEyIDAgMCAwLS41MzctLjUgNS41OTcgNS41OTcgMCAwIDAtLjgwNy0uNDQ0IDI3LjcyIDI3LjcyIDAgMCAwLTEuMDA3LS40MzZjLS45MTgtLjM4My0xLjYwMi0uODUyLTIuMDUzLTEuNDA1LS40NS0uNTUzLS42NzYtMS4yMjItLjY3Ni0yLjAwNSAwLS42MTQuMTIzLTEuMTQxLjM2OS0xLjU4Mi4yNDYtLjQ0MS41OC0uODA0IDEuMDA0LTEuMDg5YTQuNDk0IDQuNDk0IDAgMCAxIDEuNDctLjYyOSA3LjUzNiA3LjUzNiAwIDAgMSAxLjc3LS4yMDF6bS0xNS4xMTMuMTg4aDkuNTYzdjIuMTY2SDkuNTA2djkuNjQ2SDYuNzg5di05LjY0NkgzLjM3NXpcIixcbiAgfSxcbiAgamF2YXNjcmlwdDoge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk0wIDBoMjR2MjRIMFYwem0yMi4wMzQgMTguMjc2Yy0uMTc1LTEuMDk1LS44ODgtMi4wMTUtMy4wMDMtMi44NzMtLjczNi0uMzQ1LTEuNTU0LS41ODUtMS43OTctMS4xNC0uMDkxLS4zMy0uMTA1LS41MS0uMDQ2LS43MDUuMTUtLjY0Ni45MTUtLjg0IDEuNTE1LS42Ni4zOS4xMi43NS40Mi45NzYuOSAxLjAzNC0uNjc2IDEuMDM0LS42NzYgMS43NTUtMS4xMjUtLjI3LS40Mi0uNDA1LS42LS41ODYtLjc4LS42My0uNzA1LTEuNDY5LTEuMDY1LTIuODM0LTEuMDM0bC0uNzA1LjA4OWMtLjY3Ni4xNjUtMS4zMi41MjUtMS43MSAxLjAwNS0xLjE0IDEuMjkxLS44MTEgMy41NDEuNTY5IDQuNDcxIDEuMzY1IDEuMDIgMy4zNjEgMS4yNDQgMy42MTYgMi4yMDUuMjQgMS4xNy0uODcgMS41NDUtMS45NjYgMS40MS0uODExLS4xOC0xLjI2LS41ODYtMS43NTUtMS4zMzZsLTEuODMgMS4wNTFjLjIxLjQ4LjQ1LjY4OS44MSAxLjEwOSAxLjc0IDEuNzU2IDYuMDkgMS42NjYgNi44NzEtMS4wMDQuMDI5LS4wOS4yNC0uNzA1LjA3NC0xLjY1bC4wNDYuMDY3em0tOC45ODMtNy4yNDVoLTIuMjQ4YzAgMS45MzgtLjAwOSAzLjg2NC0uMDA5IDUuODA1IDAgMS4yMzIuMDYzIDIuMzYzLS4xMzggMi43MTEtLjMzLjY4OS0xLjE4LjYwMS0xLjU2Ni40OC0uMzk2LS4xOTYtLjU5Ny0uNDY2LS44My0uODU1LS4wNjMtLjEwNS0uMTEtLjE5Ni0uMTI3LS4xOTZsLTEuODI1IDEuMTI1Yy4zMDUuNjMuNzUgMS4xNzIgMS4zMjQgMS41MTcuODU1LjUxIDIuMDA0LjY3NSAzLjIwNy40MDUuNzgzLS4yMjYgMS40NTgtLjY5MSAxLjgxMS0xLjQxMS41MS0uOTMuNDAyLTIuMDcuMzk3LTMuMzQ2LjAxMi0yLjA1NCAwLTQuMTA5IDAtNi4xNzlsLjAwNC0uMDU2elwiLFxuICB9LFxuICByZWFjdDoge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk0xNC4yMyAxMi4wMDRhMi4yMzYgMi4yMzYgMCAwIDEtMi4yMzUgMi4yMzYgMi4yMzYgMi4yMzYgMCAwIDEtMi4yMzYtMi4yMzYgMi4yMzYgMi4yMzYgMCAwIDEgMi4yMzUtMi4yMzYgMi4yMzYgMi4yMzYgMCAwIDEgMi4yMzYgMi4yMzZ6bTIuNjQ4LTEwLjY5Yy0xLjM0NiAwLTMuMTA3Ljk2LTQuODg4IDIuNjIyLTEuNzgtMS42NTMtMy41NDItMi42MDItNC44ODctMi42MDItLjQxIDAtLjc4My4wOTMtMS4xMDYuMjc4LTEuMzc1Ljc5My0xLjY4MyAzLjI2NC0uOTczIDYuMzY1QzEuOTggOC45MTcgMCAxMC40MiAwIDEyLjAwNGMwIDEuNTkgMS45OSAzLjA5NyA1LjA0MyA0LjAzLS43MDQgMy4xMTMtLjM5IDUuNTg4Ljk4OCA2LjM4LjMyLjE4Ny42OS4yNzUgMS4xMDIuMjc1IDEuMzQ1IDAgMy4xMDctLjk2IDQuODg4LTIuNjI0IDEuNzggMS42NTQgMy41NDIgMi42MDMgNC44ODcgMi42MDMuNDEgMCAuNzgzLS4wOSAxLjEwNi0uMjc1IDEuMzc0LS43OTIgMS42ODMtMy4yNjMuOTczLTYuMzY1QzIyLjAyIDE1LjA5NiAyNCAxMy41OSAyNCAxMi4wMDRjMC0xLjU5LTEuOTktMy4wOTctNS4wNDMtNC4wMzIuNzA0LTMuMTEuMzktNS41ODctLjk4OC02LjM4LS4zMTgtLjE4NC0uNjg4LS4yNzctMS4wOTItLjI3OHptLS4wMDUgMS4wOXYuMDA2Yy4yMjUgMCAuNDA2LjA0NC41NTguMTI3LjY2Ni4zODIuOTU1IDEuODM1LjczIDMuNzA0LS4wNTQuNDYtLjE0Mi45NDUtLjI1IDEuNDQtLjk2LS4yMzYtMi4wMDYtLjQxNy0zLjEwNy0uNTM0LS42Ni0uOTA1LTEuMzQ1LTEuNzI3LTIuMDM1LTIuNDQ3IDEuNTkyLTEuNDggMy4wODctMi4yOTIgNC4xMDUtMi4yOTV6bS05Ljc3LjAyYzEuMDEyIDAgMi41MTQuODA4IDQuMTEgMi4yOC0uNjg2LjcyLTEuMzcgMS41MzctMi4wMiAyLjQ0Mi0xLjEwNy4xMTctMi4xNTQuMjk4LTMuMTEzLjUzOC0uMTEyLS40OS0uMTk1LS45NjQtLjI1NC0xLjQyLS4yMy0xLjg2OC4wNTQtMy4zMi43MTQtMy43MDcuMTktLjA5LjQtLjEyNy41NjMtLjEzMnptNC44ODIgMy4wNWMuNDU1LjQ2OC45MS45OTIgMS4zNiAxLjU2NC0uNDQtLjAyLS44OS0uMDM0LTEuMzQ1LS4wMzQtLjQ2IDAtLjkxNS4wMS0xLjM2LjAzNC40NC0uNTcyLjg5NS0xLjA5NiAxLjM0NS0xLjU2NXpNMTIgOC4xYy43NCAwIDEuNDc3LjAzNCAyLjIwMi4wOTMuNDA2LjU4Mi44MDIgMS4yMDMgMS4xODMgMS44Ni4zNzIuNjQuNzEgMS4yOSAxLjAxOCAxLjk0Ni0uMzA4LjY1NS0uNjQ2IDEuMzEtMS4wMTMgMS45NS0uMzguNjYtLjc3MyAxLjI4OC0xLjE4IDEuODctLjcyOC4wNjMtMS40NjYuMDk4LTIuMjEuMDk4LS43NCAwLTEuNDc3LS4wMzUtMi4yMDItLjA5My0uNDA2LS41ODItLjgwMi0xLjIwNC0xLjE4My0xLjg2LS4zNzItLjY0LS43MS0xLjI5LTEuMDE4LTEuOTQ2LjMwMy0uNjU3LjY0Ni0xLjMxMyAxLjAxMy0xLjk1NC4zOC0uNjYuNzczLTEuMjg2IDEuMTgtMS44NjguNzI4LS4wNjQgMS40NjYtLjA5OCAyLjIxLS4wOTh6bS0zLjYzNS4yNTRjLS4yNC4zNzctLjQ4Ljc2My0uNzA0IDEuMTYtLjIyNS4zOS0uNDM1Ljc4Mi0uNjM1IDEuMTc0LS4yNjUtLjY1Ni0uNDktMS4zMS0uNjc2LTEuOTQ3LjY0LS4xNSAxLjMxNS0uMjgzIDIuMDE1LS4zODZ6bTcuMjYgMGMuNjk1LjEwMyAxLjM2NS4yMyAyLjAwNi4zODctLjE4LjYzMi0uNDA1IDEuMjgyLS42NiAxLjkzMy0uMi0uMzktLjQxLS43ODMtLjY0LTEuMTc0LS4yMjUtLjM5Mi0uNDY1LS43NzQtLjcwNS0xLjE0NnptMy4wNjMuNjc1Yy40ODQuMTUuOTQ0LjMxNyAxLjM3NS40OTggMS43MzIuNzQgMi44NTIgMS43MDggMi44NTIgMi40NzYtLjAwNS43NjgtMS4xMjUgMS43NC0yLjg1NyAyLjQ3NS0uNDIuMTgtLjg4LjM0Mi0xLjM1NS40OTMtLjI4LS45NTgtLjY0Ni0xLjk1Ni0xLjEtMi45OC40NS0xLjAxNy44MS0yLjAxIDEuMDg1LTIuOTY0em0tMTMuMzk1LjAwNGMuMjc4Ljk2LjY0NSAxLjk1NyAxLjEgMi45OC0uNDUgMS4wMTctLjgxMiAyLjAxLTEuMDg2IDIuOTY0LS40ODQtLjE1LS45NDQtLjMxOC0xLjM3LS41LTEuNzMyLS43MzctMi44NTItMS43MDYtMi44NTItMi40NzQgMC0uNzY4IDEuMTItMS43NDIgMi44NTItMi40NzYuNDItLjE4Ljg4LS4zNDIgMS4zNTYtLjQ5NHptMTEuNjc4IDQuMjhjLjI2NS42NTcuNDkgMS4zMTIuNjc2IDEuOTQ4LS42NC4xNTctMS4zMTYuMjktMi4wMTYuMzkuMjQtLjM3NS40OC0uNzYyLjcwNS0xLjE1OC4yMjUtLjM5LjQzNS0uNzg4LjYzNi0xLjE4em0tOS45NDUuMDJjLjIuMzkyLjQxLjc4My42NCAxLjE3NS4yMy4zOS40NjUuNzcyLjcwNSAxLjE0My0uNjk1LS4xMDItMS4zNjUtLjIzLTIuMDA2LS4zODYuMTgtLjYzLjQwNi0xLjI4Mi42Ni0xLjkzM3pNMTcuOTIgMTYuMzJjLjExMi40OTMuMi45NjguMjU0IDEuNDIzLjIzIDEuODY4LS4wNTQgMy4zMi0uNzE0IDMuNzA4LS4xNDcuMDktLjMzOC4xMjgtLjU2My4xMjgtMS4wMTIgMC0yLjUxNC0uODA3LTQuMTEtMi4yOC42ODYtLjcyIDEuMzctMS41MzYgMi4wMi0yLjQ0IDEuMTA3LS4xMTggMi4xNTQtLjMgMy4xMTMtLjU0em0tMTEuODMuMDFjLjk2LjIzNCAyLjAwNi40MTUgMy4xMDcuNTMyLjY2LjkwNSAxLjM0NSAxLjcyNyAyLjAzNSAyLjQ0Ni0xLjU5NSAxLjQ4My0zLjA5MiAyLjI5NS00LjExIDIuMjk1LS4yMi0uMDA1LS40MDYtLjA1LS41NTMtLjEzMi0uNjY2LS4zOC0uOTU1LTEuODM0LS43My0zLjcwMy4wNTQtLjQ2LjE0Mi0uOTQ0LjI1LTEuNDM4em00LjU2LjY0Yy40NC4wMi44OS4wMzQgMS4zNDUuMDM0LjQ2IDAgLjkxNS0uMDEgMS4zNi0uMDM0LS40NC41NzItLjg5NSAxLjA5NS0xLjM0NSAxLjU2NS0uNDU1LS40Ny0uOTEtLjk5My0xLjM2LTEuNTY1elwiLFxuICB9LFxuICBweXRob246IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNMTQuMjUuMThsLjkuMi43My4yNi41OS4zLjQ1LjMyLjM0LjM0LjI1LjM0LjE2LjMzLjEuMy4wNC4yNi4wMi4yLS4wMS4xM1Y4LjVsLS4wNS42My0uMTMuNTUtLjIxLjQ2LS4yNi4zOC0uMy4zMS0uMzMuMjUtLjM1LjE5LS4zNS4xNC0uMzMuMS0uMy4wNy0uMjYuMDQtLjIxLjAySDguNzdsLS42OS4wNS0uNTkuMTQtLjUuMjItLjQxLjI3LS4zMy4zMi0uMjcuMzUtLjIuMzYtLjE1LjM3LS4xLjM1LS4wNy4zMi0uMDQuMjctLjAyLjIxdjMuMDZIMy4xN2wtLjIxLS4wMy0uMjgtLjA3LS4zMi0uMTItLjM1LS4xOC0uMzYtLjI2LS4zNi0uMzYtLjM1LS40Ni0uMzItLjU5LS4yOC0uNzMtLjIxLS44OC0uMTQtMS4wNS0uMDUtMS4yMy4wNi0xLjIyLjE2LTEuMDQuMjQtLjg3LjMyLS43MS4zNi0uNTcuNC0uNDQuNDItLjMzLjQyLS4yNC40LS4xNi4zNi0uMS4zMi0uMDUuMjQtLjAxaC4xNmwuMDYuMDFIOC4xNnYtLjgzSDYuMThsLS4wMS0yLjc1LS4wMi0uMzcuMDUtLjM0LjExLS4zMS4xNy0uMjguMjUtLjI2LjMxLS4yMy4zOC0uMi40NC0uMTguNTEtLjE1LjU4LS4xMi42NC0uMS43MS0uMDYuNzctLjA0Ljg0LS4wMiAxLjI3LjA1em0tNi4zIDEuOThsLS4yMy4zMy0uMDguNDEuMDguNDEuMjMuMzQuMzMuMjIuNDEuMDkuNDEtLjA5LjMzLS4yMi4yMy0uMzQuMDgtLjQxLS4wOC0uNDEtLjIzLS4zMy0uMzMtLjIyLS40MS0uMDktLjQxLjA5em0xMy4wOSAzLjk1bC4yOC4wNi4zMi4xMi4zNS4xOC4zNi4yNy4zNi4zNS4zNS40Ny4zMi41OS4yOC43My4yMS44OC4xNCAxLjA0LjA1IDEuMjMtLjA2IDEuMjMtLjE2IDEuMDQtLjI0Ljg2LS4zMi43MS0uMzYuNTctLjQuNDUtLjQyLjMzLS40Mi4yNC0uNC4xNi0uMzYuMDktLjMyLjA1LS4yNC4wMi0uMTYtLjAxaC04LjIydi44Mmg1Ljg0bC4wMSAyLjc2LjAyLjM2LS4wNS4zNC0uMTEuMzEtLjE3LjI5LS4yNS4yNS0uMzEuMjQtLjM4LjItLjQ0LjE3LS41MS4xNS0uNTguMTMtLjY0LjA5LS43MS4wNy0uNzcuMDQtLjg0LjAxLTEuMjctLjA0LTEuMDctLjE0LS45LS4yLS43My0uMjUtLjU5LS4zLS40NS0uMzMtLjM0LS4zNC0uMjUtLjM0LS4xNi0uMzMtLjEtLjMtLjA0LS4yNS0uMDItLjIuMDEtLjEzdi01LjM0bC4wNS0uNjQuMTMtLjU0LjIxLS40Ni4yNi0uMzguMy0uMzIuMzMtLjI0LjM1LS4yLjM1LS4xNC4zMy0uMS4zLS4wNi4yNi0uMDQuMjEtLjAyLjEzLS4wMWg1Ljg0bC42OS0uMDUuNTktLjE0LjUtLjIxLjQxLS4yOC4zMy0uMzIuMjctLjM1LjItLjM2LjE1LS4zNi4xLS4zNS4wNy0uMzIuMDQtLjI4LjAyLS4yMVY2LjA3aDIuMDlsLjE0LjAxem0tNi40NyAxNC4yNWwtLjIzLjMzLS4wOC40MS4wOC40MS4yMy4zMy4zMy4yMy40MS4wOC40MS0uMDguMzMtLjIzLjIzLS4zMy4wOC0uNDEtLjA4LS40MS0uMjMtLjMzLS4zMy0uMjMtLjQxLS4wOC0uNDEuMDh6XCIsXG4gIH0sXG4gIHJ1c3Q6IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNMjMuODM0NiAxMS43MDMzbC0xLjAwNzMtLjYyMzZhMTMuNzI2OCAxMy43MjY4IDAgMDAtLjAyODMtLjI5MzZsLjg2NTYtLjgwNjlhLjM0ODMuMzQ4MyAwIDAwLS4xMTU0LS41NzhsLTEuMTA2Ni0uNDE0YTguNDk1OCA4LjQ5NTggMCAwMC0uMDg3LS4yODU2bC42OTA0LS45NTg3YS4zNDYyLjM0NjIgMCAwMC0uMjI1Ny0uNTQ0NmwtMS4xNjYzLS4xODk0YTkuMzU3NCA5LjM1NzQgMCAwMC0uMTQwNy0uMjYyMmwuNDg5NS0xLjA3NjFhLjM0MzguMzQzOCAwIDAwLS4zMzAwLS40OTA4bC0xLjE4NDUuMDQxNmE2Ljc0NDQgNi43NDQ0IDAgMDAtLjE4NzMtLjIyNjhsLjI3MjMtMS4xNTNhLjM0NzIuMzQ3MiAwIDAwLS40MjMzLS40MTY0bC0xLjE1OTIuMjY4M2ExNC4xNzk0IDE0LjE3OTQgMCAwMC0uMjIzMS0uMTgxN2wuMDQ2Ny0xLjE4NzJhLjM0NjIuMzQ2MiAwIDAwLS41NzY1LS4zMjJsLTEuMDkwNy40ODc4Yy0uMDc5OS0uMDQ5OS0uMTYxMy0uMDk4My0uMjQ0OS0uMTQ1NmwtLjE3ODctMS4xNzU4YS4zNDU2LjM0NTYgMCAwMC0uNTc2Ni0uMjMyOWwtLjk4MTMuNjkxOWExMy41OTYgMTMuNTk2IDAgMDAtLjI1NzEtLjEwNDlsLS4zOTgyLTEuMTE3NWEuMzQ4LjM0OCAwIDAwLS41ODE1LS4xMjcybC0uODM1Mi44NzM4YTEwLjIxMDIgMTAuMjEwMiAwIDAwLS4yNjA2LS4wNTg0bC0uNjA4Mi0xLjAxMzFhLjM0NTkuMzQ1OSAwIDAwLS41NjU5LS4wMTk3bC0uNjYwMiAxLjAyNTdhNi4zMjQ5IDYuMzI0OSAwIDAwLS4yNTc0LjAwNjhMOC4zODYyLjg3MjFhLjM0MzcuMzQzNyAwIDAwLS41MzY4LjA5MjFsLS40Njc2IDEuMTM3NmExMC4zMDE0IDEwLjMwMTQgMCAwMC0uMjQ0NC4wODU2TDYuMjc4OCAxLjM5NGEuMzQ0Ny4zNDQ3IDAgMDAtLjQ5MTYuMjAwNGwtLjI2MTUgMS4yMDQ4YTExLjU2MzIgMTEuNTYzMiAwIDAwLS4yMjQyLjE0OWwtLjkyMTUtLjU1NDlhLjM0NDUuMzQ0NSAwIDAwLS40MzQ1LjI5NDVsLS4wNDg4IDEuMjI2MWExMS4wMjM5IDExLjAyMzkgMCAwMC0uMTk4OS4yMDI4bC0xLjA0OTgtLjI3NDRhLjM0NDEuMzQ0MSAwIDAwLS4zNjg0LjM3NTJsLjE2NDMgMS4yMDI2Yy0uMDU1My4wNzUtLjEwODQuMTUxNS0uMTU5OC4yMjkzbC0xLjEzNzQuMDEzMmEuMzQyNy4zNDI3IDAgMDAtLjI5MzguNDQyMmwuMzY5OCAxLjEzNDdhMTAuNDYzMyAxMC40NjMzIDAgMDAtLjExNjIuMjQ3NGwtMS4xODE3LjI5MjNhLjM0MzMuMzQzMyAwIDAwLS4yMTM0LjQ5NDRsLjU2MjcgMS4wMjYyYy0uMDI2NS4wODUtLjA1MDIuMTcxMy0uMDcxMy4yNThsLTEuMTgxMi41NTg2YS4zNDMuMzQzIDAgMDAtLjEyOTkuNTMxNmwuNzM5Ni44NzkzYTEzLjAxMDIgMTMuMDEwMiAwIDAwLS4wMjM2LjI2NGwtMS4xMzU1LjgwODZhLjM0NDUuMzQ0NSAwIDAwLS4wNDI5LjU1MTNsLjg5MzcuNjk4NmE5LjA3NzYgOS4wNzc2IDAgMDAuMDIzNS4yNjQzTC4zMTA4IDE0LjUxNWEuMzQ1NS4zNDU1IDAgMDAuMDQzMi41NTA4bDEuMDE4NS40OTQxYTE0LjQ1MjYgMTQuNDUyNiAwIDAwLjA2OTQuMjYwMmwtLjY1NjQuOTY4MmEuMzQ0My4zNDQzIDAgMDAuMTI3My41NDgzbDEuMTA2Ni4yNzEzYy4wNDM3LjA4MzMuMDg5MS4xNjUzLjEzNi4yNDYybC0uNDM0OCAxLjA4NDhhLjM0NDUuMzQ0NSAwIDAwLjIwNjkuNTMwNGwxLjE1NjQuMDQzNmMuMDU4My4wNzQ5LjExODIuMTQ4NS4xNzk3LjIyMDVsLS4yMDA0IDEuMTYwM2EuMzQ4LjM0OCAwIDAwLjI4MjQuNDkwMmwxLjE2NjktLjE4MzhjLjA2OTQuMDY0LjE0MDQuMTI2NS4yMTI3LjE4NzRsLjAzODcgMS4xOTEyYS4zNDc2LjM0NzYgMCAwMC4zNDk4LjQzMDZsMS4xMzg4LS40MDM4YTcuNDIwNyA3LjQyMDcgMCAwMC4yMzgxLjE0ODJsLjI3MjMgMS4xNzcyYS4zNDU5LjM0NTkgMCAwMC40MDc0LjM1NDNsMS4wNzM4LS42MTA0Yy4wODQuMDM5My4xNjkuMDc3LjI1NTMuMTEzbC40OTY0IDEuMTE3OGEuMzQ3Ni4zNDc2IDAgMDAuNDUyOS4yNjQzbC45NzQ0LS43OTg1Yy4wODczLjAyODUuMTc1Ny4wNTUzLjI2NDkuMDgwM2wuNzA3IDEuMDE1YS4zNDc1LjM0NzUgMCAwMC40ODI3LjE2NWwuODQzNS0uOTYzM2E4Ljc3MTcgOC43NzE3IDAgMDAuMjY3LjA0MThsLjg5NzguODcxNWEuMzQ3LjM0NyAwIDAwLjQ5NTkuMDU4MmwuNjg2My0xLjEwMDRjLjA4NzctLjAwMzkuMTc1NC0uMDA5NC4yNjMxLS4wMTY2bDEuMDY0NS42OTA3YS4zNDc4LjM0NzggMCAwMC40OTIxLS4wNDY2bC41MDQzLTEuMjAyNGMuMDgyOS0uMDE2OC4xNjU3LS4wMzQ5LjI0NzYtLjA1NDZsMS4yMDI0LjQ3OGEuMzQ0NC4zNDQ0IDAgMDAuNDcyMS0uMTQ2MmwuMzA1LTEuMjY4NWE5LjQ5ODYgOS40OTg2IDAgMDAuMjI2NC0uMDk2M2wxLjMwODguMjQxYS4zNDYyLjM0NjIgMCAwMC40MzczLS4yMzgzbC4wOTMxLTEuMjk0OGExMi43NzUgMTIuNzc1IDAgMDAuMTk5Ni0uMTM4NGwxLjM4MTEtLjAxMzNhLjM0NDIuMzQ0MiAwIDAwLjM4NzktLjMyMDlsLS4xMjA0LTEuMjc5MmExMi4wNjk3IDEyLjA2OTcgMCAwMC4xNjc3LS4xNzY3bDEuNDE3NC0uMjYxMmEuMzQ2Mi4zNDYyIDAgMDAuMzI2Ni0uMzkzNWwtLjMyODYtMS4yMjJhMTMuNTc2NSAxMy41NzY1IDAgMDAuMTMwNy0uMjA5M2wxLjQxNTQtLjQ5ODVhLjM0NTQuMzQ1NCAwIDAwLjI1NTgtLjQ1MzZsLS41Mjc1LTEuMTI1OWE4LjcyNTYgOC43MjU2IDAgMDAuMDg5OS0uMjM0MWwxLjM3NDEtLjcyMTlhLjM0MzkuMzQzOSAwIDAwLjE3ODctLjQ5OTNsLS43MTEzLS45OTM3YTkuMTM3MyA5LjEzNzMgMCAwMC4wNDQ5LS4yNTQzbDEuMjk0NC0uOTI3NWEuMzQ0Ni4zNDQ2IDAgMDAuMDk2My0uNTMyM3pNMTIuMDUyMiA0LjU3MDVhLjcwMy43MDMgMCAwMS41NzY1LS4wOThjLjM0NzMuMDk4Mi42NjE1LjI2NzkuOTI2My40OTczYS4zODczLjM4NzMgMCAwMS0uNTc2NS4wOThjLS4zNDczLS4wOTgyLS42NjE1LS4yNjc5LS45MjYzLS40OTczem0tMy4yIDcuNTUwOGMuMi4wIC40LS4wIC42LS4wbC4yIC42aC0xbC4yLS42em00LjUgMi43bC0uNC0uMy4zLS40Yy0uMy0uMi0uNy0uMy0xLjEtLjNsLS4xLjUtLjEtLjVjLS40LjAtLjguMS0xLjEuM2wuMy40LS40LjNjLS4zLS4zLS41LS42LS42LTFsLjUtLjEtLjUtLjJjMC0uNC4xLS44LjMtMS4ybC40LjMtLjMtLjRjLjMtLjMuNi0uNSAxLS42bC4xLjUuMS0uNWMuNC4wLjguMiAxLjEuNGwtLjMuNC40LS4zYy4yLjMuMy43LjQgMS4xbC0uNS4xLjUuMmMtLjAuNC0uMi44LS40IDEuMXptMy4zLTIuMWwtLjYuMC0uMi0uNmgxbC0uMi42elwiLFxuICB9LFxuICBzaGVsbHNjcmlwdDoge1xuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBkOiBcIk00LjgxNCAwaDE0LjM3MWEyLjgxMyAyLjgxMyAwIDAgMSAyLjgxNCAyLjgxNHYxOC4zNzFBMi44MTMgMi44MTMgMCAwIDEgMTkuMTg2IDI0SDQuODE0QTIuODEzIDIuODEzIDAgMCAxIDIgMjEuMTg2VjIuODE0QTIuODEzIDIuODEzIDAgMCAxIDQuODE0IDB6TTUuOCAyMS4yaDEyLjM5di0xLjZINS44em02LjYzNi00Ljc2Mkw3LjM5NCAxMi4xN2wxLjA3LTEuMjU4IDUuMDQzIDQuMjY4em0tMS4xMTEtNS44ODkgMS4wNy0xLjI1OCA1LjA0MyA0LjI2OC01LjA0MyA0LjI2OC0xLjA3LTEuMjU4IDMuOTcyLTMuMDF6XCIsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgZDogXCJNIDYsMSBDIDQuMzU0OTkyLDEgMywyLjM1NDk5MiAzLDQgdiAxNiBjIDAsMS42NDUwMDggMS4zNTQ5OTIsMyAzLDMgaCAxMiBjIDEuNjQ1MDA4LDAgMywtMS4zNTQ5OTIgMywtMyBWIDggNyBBIDEuMDAwMSwxLjAwMDEgMCAwIDAgMjAuNzA3MDMxLDYuMjkyOTY4NyBsIC01LC01IEEgMS4wMDAxLDEuMDAwMSAwIDAgMCAxNSwxIGggLTEgeiBtIDAsMiBoIDcgdiAzIGMgMCwxLjY0NTAwOCAxLjM1NDk5MiwzIDMsMyBoIDMgdiAxMSBjIDAsMC41NjQxMjkgLTAuNDM1ODcxLDEgLTEsMSBIIDYgQyA1LjQzNTg3MTIsMjEgNSwyMC41NjQxMjkgNSwyMCBWIDQgQyA1LDMuNDM1ODcxMiA1LjQzNTg3MTIsMyA2LDMgWiBNIDE1LDMuNDE0MDYyNSAxOC41ODU5MzcsNyBIIDE2IEMgMTUuNDM1ODcxLDcgMTUsNi41NjQxMjg4IDE1LDYgWlwiLFxuICB9LFxufVxuXG4vKipcbiAqIFNoaWtpIHRyYW5zZm9ybWVyIHRoYXQgaW5qZWN0cyBhIGxhbmd1YWdlIGljb24gU1ZHIGludG8gdGhlIHByZSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXJJY29uKCk6IFNoaWtpVHJhbnNmb3JtZXIge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcms6aWNvblwiLFxuICAgIHByZShwcmUpIHtcbiAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLm9wdGlvbnMubGFuZ1xuICAgICAgaWYgKCFsYW5nKSByZXR1cm5cblxuICAgICAgY29uc3QgaWNvbk5hbWUgPSBsYW5nIGluIHNob3J0Y3V0cyA/IHNob3J0Y3V0c1tsYW5nXSEgOiBsYW5nXG4gICAgICBjb25zdCBpY29uID0gaWNvbk5hbWUgaW4gaWNvbnMgPyBpY29uc1tpY29uTmFtZV0hIDogaWNvbnMuZGVmYXVsdCFcblxuICAgICAgcHJlLnByb3BlcnRpZXMuaWNvbiA9IGA8c3ZnIHZpZXdCb3g9XCIke2ljb24udmlld0JveH1cIj48cGF0aCBkPVwiJHtpY29uLmR9XCIgZmlsbD1cIiR7aWNvbi5maWxsfVwiIC8+PC9zdmc+YFxuICAgICAgcmV0dXJuIHByZVxuICAgIH0sXG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,27 @@
1
+ interface HastText {
2
+ type: "text";
3
+ value: string;
4
+ }
5
+ interface HastElement {
6
+ type: "element";
7
+ properties: Record<string, unknown>;
8
+ children: (HastElement | HastText)[];
9
+ }
10
+ interface ShikiTransformer {
11
+ name: string;
12
+ preprocess?: (this: {
13
+ options: {
14
+ meta?: {
15
+ __raw?: string;
16
+ };
17
+ };
18
+ }, code: string) => void;
19
+ pre?: (pre: HastElement) => HastElement | void;
20
+ line?: (line: HastElement, lineNumber: number) => HastElement | void;
21
+ span?: (span: HastElement) => HastElement | void;
22
+ }
23
+ /** Shiki transformer that handles comment-based code annotations for highlighting, diffs, and focus effects. */
24
+ export declare function transformerNotations(): ShikiTransformer;
25
+ /** Shiki transformer that highlights specific lines and words based on the code block meta string. */
26
+ export declare function transformerLineHighlight(): ShikiTransformer;
27
+ export {};
@@ -0,0 +1,140 @@
1
+ function parseLineRanges(meta) {
2
+ const lines = new Set();
3
+ const match = meta.match(/\{([\d,\s-]+)\}/);
4
+ if (!match)
5
+ return lines;
6
+ const parts = match[1].split(",");
7
+ for (const part of parts) {
8
+ const trimmed = part.trim();
9
+ const rangeMatch = trimmed.match(/^(\d+)-(\d+)$/);
10
+ if (rangeMatch) {
11
+ const start = Number(rangeMatch[1]);
12
+ const end = Number(rangeMatch[2]);
13
+ for (let i = start; i <= end; i++) {
14
+ lines.add(i);
15
+ }
16
+ }
17
+ else {
18
+ const num = Number(trimmed);
19
+ if (!Number.isNaN(num)) {
20
+ lines.add(num);
21
+ }
22
+ }
23
+ }
24
+ return lines;
25
+ }
26
+ function parseLineNumbers(meta) {
27
+ const match = meta.match(/\blineNumbers(?:=(\d+))?\b/);
28
+ if (!match)
29
+ return { enabled: false, start: 1 };
30
+ const start = match[1] ? Number(match[1]) : 1;
31
+ return { enabled: true, start };
32
+ }
33
+ function parseWordHighlight(meta) {
34
+ const match = meta.match(/\{word:([^}]+)\}/);
35
+ return match ? match[1] : undefined;
36
+ }
37
+ function spanContainsWord(span, word) {
38
+ for (const child of span.children) {
39
+ if (child.type === "text" && child.value.includes(word)) {
40
+ return true;
41
+ }
42
+ }
43
+ return false;
44
+ }
45
+ const NOTATION_RE = /\/\/\s*\[!code\s+(highlight|focus|\+\+|--|error|warning)\]\s*$/;
46
+ const NOTATION_BLOCK_RE = /\/\*\s*\[!code\s+(highlight|focus|\+\+|--|error|warning)\]\s*\*\/\s*$/;
47
+ function stripNotationFromLine(line) {
48
+ for (const child of line.children) {
49
+ if (child.type === "element") {
50
+ const result = stripNotationFromLine(child);
51
+ if (result !== undefined)
52
+ return result;
53
+ }
54
+ if (child.type === "text") {
55
+ const match = child.value.match(NOTATION_RE) ?? child.value.match(NOTATION_BLOCK_RE);
56
+ if (match) {
57
+ child.value = child.value.slice(0, match.index).trimEnd();
58
+ return match[1];
59
+ }
60
+ }
61
+ }
62
+ return undefined;
63
+ }
64
+ /** Shiki transformer that handles comment-based code annotations for highlighting, diffs, and focus effects. */
65
+ export function transformerNotations() {
66
+ let hasFocus = false;
67
+ let preElement;
68
+ return {
69
+ name: "livemark:notations",
70
+ preprocess() {
71
+ hasFocus = false;
72
+ preElement = undefined;
73
+ },
74
+ line(line) {
75
+ const notation = stripNotationFromLine(line);
76
+ if (!notation)
77
+ return line;
78
+ switch (notation) {
79
+ case "highlight":
80
+ line.properties["data-highlighted"] = "";
81
+ break;
82
+ case "++":
83
+ line.properties["data-diff"] = "add";
84
+ break;
85
+ case "--":
86
+ line.properties["data-diff"] = "remove";
87
+ break;
88
+ case "focus":
89
+ line.properties["data-focus"] = "";
90
+ hasFocus = true;
91
+ break;
92
+ case "error":
93
+ line.properties["data-line-status"] = "error";
94
+ break;
95
+ case "warning":
96
+ line.properties["data-line-status"] = "warning";
97
+ break;
98
+ }
99
+ return line;
100
+ },
101
+ pre(pre) {
102
+ preElement = pre;
103
+ if (hasFocus && preElement) {
104
+ preElement.properties["data-has-focus"] = "";
105
+ }
106
+ return pre;
107
+ },
108
+ };
109
+ }
110
+ /** Shiki transformer that highlights specific lines and words based on the code block meta string. */
111
+ export function transformerLineHighlight() {
112
+ let highlightedLines = new Set();
113
+ let lineNumbers = { enabled: false, start: 1 };
114
+ let highlightedWord;
115
+ return {
116
+ name: "livemark:line-highlight",
117
+ preprocess() {
118
+ const raw = this.options.meta?.__raw ?? "";
119
+ highlightedLines = parseLineRanges(raw);
120
+ lineNumbers = parseLineNumbers(raw);
121
+ highlightedWord = parseWordHighlight(raw);
122
+ },
123
+ line(line, lineNumber) {
124
+ if (highlightedLines.has(lineNumber)) {
125
+ line.properties["data-highlighted"] = "";
126
+ }
127
+ if (lineNumbers.enabled) {
128
+ line.properties["data-line-number"] = String(lineNumber - 1 + lineNumbers.start);
129
+ }
130
+ return line;
131
+ },
132
+ span(span) {
133
+ if (highlightedWord && spanContainsWord(span, highlightedWord)) {
134
+ span.properties["data-word-highlighted"] = "";
135
+ }
136
+ return span;
137
+ },
138
+ };
139
+ }
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpa2ktbGluZS1oaWdobGlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy9zaGlraS1saW5lLWhpZ2hsaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzQkEsU0FBUyxlQUFlLENBQUMsSUFBWTtJQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFBO0lBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtJQUMzQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRXhCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDM0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUNqRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ25DLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDZCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMs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b3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgSGFzdFRleHQge1xuICB0eXBlOiBcInRleHRcIlxuICB2YWx1ZTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBIYXN0RWxlbWVudCB7XG4gIHR5cGU6IFwiZWxlbWVudFwiXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNoaWxkcmVuOiAoSGFzdEVsZW1lbnQgfCBIYXN0VGV4dClbXVxufVxuXG5pbnRlcmZhY2UgU2hpa2lUcmFuc2Zvcm1lciB7XG4gIG5hbWU6IHN0cmluZ1xuICBwcmVwcm9jZXNzPzogKFxuICAgIHRoaXM6IHsgb3B0aW9uczogeyBtZXRhPzogeyBfX3Jhdz86IHN0cmluZyB9IH0gfSxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICkgPT4gdm9pZFxuICBwcmU/OiAocHJlOiBIYXN0RWxlbWVudCkgPT4gSGFzdEVsZW1lbnQgfCB2b2lkXG4gIGxpbmU/OiAobGluZTogSGFzdEVsZW1lbnQsIGxpbmVOdW1iZXI6IG51bWJlcikgPT4gSGFzdEVsZW1lbnQgfCB2b2lkXG4gIHNwYW4/OiAoc3BhbjogSGFzdEVsZW1lbnQpID0+IEhhc3RFbGVtZW50IHwgdm9pZFxufVxuXG5mdW5jdGlvbiBwYXJzZUxpbmVSYW5nZXMobWV0YTogc3RyaW5nKTogU2V0PG51bWJlcj4ge1xuICBjb25zdCBsaW5lcyA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gIGNvbnN0IG1hdGNoID0gbWV0YS5tYXRjaCgvXFx7KFtcXGQsXFxzLV0rKVxcfS8pXG4gIGlmICghbWF0Y2gpIHJldHVybiBsaW5lc1xuXG4gIGNvbnN0IHBhcnRzID0gbWF0Y2hbMV0hLnNwbGl0KFwiLFwiKVxuICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICBjb25zdCB0cmltbWVkID0gcGFydC50cmltKClcbiAgICBjb25zdCByYW5nZU1hdGNoID0gdHJpbW1lZC5tYXRjaCgvXihcXGQrKS0oXFxkKykkLylcbiAgICBpZiAocmFuZ2VNYXRjaCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBOdW1iZXIocmFuZ2VNYXRjaFsxXSlcbiAgICAgIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZU1hdGNoWzJdKVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIGxpbmVzLmFkZChpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodHJpbW1lZClcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICAgICAgbGluZXMuYWRkKG51bSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGluZXNcbn1cblxuZnVuY3Rpb24gcGFyc2VMaW5lTnVtYmVycyhtZXRhOiBzdHJpbmcpOiB7IGVuYWJsZWQ6IGJvb2xlYW47IHN0YXJ0OiBudW1iZXIgfSB7XG4gIGNvbnN0IG1hdGNoID0gbWV0YS5tYXRjaCgvXFxibGluZU51bWJlcnMoPzo9KFxcZCspKT9cXGIvKVxuICBpZiAoIW1hdGNoKSByZXR1cm4geyBlbmFibGVkOiBmYWxzZSwgc3RhcnQ6IDEgfVxuICBjb25zdCBzdGFydCA9IG1hdGNoWzFdID8gTnVtYmVyKG1hdGNoWzFdKSA6IDFcbiAgcmV0dXJuIHsgZW5hYmxlZDogdHJ1ZSwgc3RhcnQgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVdvcmRIaWdobGlnaHQobWV0YTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSBtZXRhLm1hdGNoKC9cXHt3b3JkOihbXn1dKylcXH0vKVxuICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBzcGFuQ29udGFpbnNXb3JkKHNwYW46IEhhc3RFbGVtZW50LCB3b3JkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBzcGFuLmNoaWxkcmVuKSB7XG4gICAgaWYgKGNoaWxkLnR5cGUgPT09IFwidGV4dFwiICYmIGNoaWxkLnZhbHVlLmluY2x1ZGVzKHdvcmQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuY29uc3QgTk9UQVRJT05fUkUgPVxuICAvXFwvXFwvXFxzKlxcWyFjb2RlXFxzKyhoaWdobGlnaHR8Zm9jdXN8XFwrXFwrfC0tfGVycm9yfHdhcm5pbmcpXFxdXFxzKiQvXG5jb25zdCBOT1RBVElPTl9CTE9DS19SRSA9XG4gIC9cXC9cXCpcXHMqXFxbIWNvZGVcXHMrKGhpZ2hsaWdodHxmb2N1c3xcXCtcXCt8LS18ZXJyb3J8d2FybmluZylcXF1cXHMqXFwqXFwvXFxzKiQvXG5cbmZ1bmN0aW9uIHN0cmlwTm90YXRpb25Gcm9tTGluZShsaW5lOiBIYXN0RWxlbWVudCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgbGluZS5jaGlsZHJlbikge1xuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1lbnRcIikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBOb3RhdGlvbkZyb21MaW5lKGNoaWxkKVxuICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzdWx0XG4gICAgfVxuICAgIGlmIChjaGlsZC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgY29uc3QgbWF0Y2ggPVxuICAgICAgICBjaGlsZC52YWx1ZS5tYXRjaChOT1RBVElPTl9SRSkgPz8gY2hpbGQudmFsdWUubWF0Y2goTk9UQVRJT05fQkxPQ0tfUkUpXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY2hpbGQudmFsdWUgPSBjaGlsZC52YWx1ZS5zbGljZSgwLCBtYXRjaC5pbmRleCkudHJpbUVuZCgpXG4gICAgICAgIHJldHVybiBtYXRjaFsxXSFcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKiogU2hpa2kgdHJhbnNmb3JtZXIgdGhhdCBoYW5kbGVzIGNvbW1lbnQtYmFzZWQgY29kZSBhbm5vdGF0aW9ucyBmb3IgaGlnaGxpZ2h0aW5nLCBkaWZmcywgYW5kIGZvY3VzIGVmZmVjdHMuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXJOb3RhdGlvbnMoKTogU2hpa2lUcmFuc2Zvcm1lciB7XG4gIGxldCBoYXNGb2N1cyA9IGZhbHNlXG4gIGxldCBwcmVFbGVtZW50OiBIYXN0RWxlbWVudCB8IHVuZGVmaW5lZFxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogXCJsaXZlbWFyazpub3RhdGlvbnNcIixcbiAgICBwcmVwcm9jZXNzKCkge1xuICAgICAgaGFzRm9jdXMgPSBmYWxzZVxuICAgICAgcHJlRWxlbWVudCA9IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgbGluZShsaW5lKSB7XG4gICAgICBjb25zdCBub3RhdGlvbiA9IHN0cmlwTm90YXRpb25Gcm9tTGluZShsaW5lKVxuICAgICAgaWYgKCFub3RhdGlvbikgcmV0dXJuIGxpbmVcblxuICAgICAgc3dpdGNoIChub3RhdGlvbikge1xuICAgICAgICBjYXNlIFwiaGlnaGxpZ2h0XCI6XG4gICAgICAgICAgbGluZS5wcm9wZXJ0aWVzW1wiZGF0YS1oaWdobGlnaHRlZFwiXSA9IFwiXCJcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIFwiKytcIjpcbiAgICAgICAgICBsaW5lLnByb3BlcnRpZXNbXCJkYXRhLWRpZmZcIl0gPSBcImFkZFwiXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcIi0tXCI6XG4gICAgICAgICAgbGluZS5wcm9wZXJ0aWVzW1wiZGF0YS1kaWZmXCJdID0gXCJyZW1vdmVcIlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJmb2N1c1wiOlxuICAgICAgICAgIGxpbmUucHJvcGVydGllc1tcImRhdGEtZm9jdXNcIl0gPSBcIlwiXG4gICAgICAgICAgaGFzRm9jdXMgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBcImVycm9yXCI6XG4gICAgICAgICAgbGluZS5wcm9wZXJ0aWVzW1wiZGF0YS1saW5lLXN0YXR1c1wiXSA9IFwiZXJyb3JcIlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgXCJ3YXJuaW5nXCI6XG4gICAgICAgICAgbGluZS5wcm9wZXJ0aWVzW1wiZGF0YS1saW5lLXN0YXR1c1wiXSA9IFwid2FybmluZ1wiXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9LFxuICAgIHByZShwcmUpIHtcbiAgICAgIHByZUVsZW1lbnQgPSBwcmVcbiAgICAgIGlmIChoYXNGb2N1cyAmJiBwcmVFbGVtZW50KSB7XG4gICAgICAgIHByZUVsZW1lbnQucHJvcGVydGllc1tcImRhdGEtaGFzLWZvY3VzXCJdID0gXCJcIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHByZVxuICAgIH0sXG4gIH1cbn1cblxuLyoqIFNoaWtpIHRyYW5zZm9ybWVyIHRoYXQgaGlnaGxpZ2h0cyBzcGVjaWZpYyBsaW5lcyBhbmQgd29yZHMgYmFzZWQgb24gdGhlIGNvZGUgYmxvY2sgbWV0YSBzdHJpbmcuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXJMaW5lSGlnaGxpZ2h0KCk6IFNoaWtpVHJhbnNmb3JtZXIge1xuICBsZXQgaGlnaGxpZ2h0ZWRMaW5lcyA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gIGxldCBsaW5lTnVtYmVycyA9IHsgZW5hYmxlZDogZmFsc2UsIHN0YXJ0OiAxIH1cbiAgbGV0IGhpZ2hsaWdodGVkV29yZDogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcImxpdmVtYXJrOmxpbmUtaGlnaGxpZ2h0XCIsXG4gICAgcHJlcHJvY2VzcygpIHtcbiAgICAgIGNvbnN0IHJhdyA9IHRoaXMub3B0aW9ucy5tZXRhPy5fX3JhdyA/PyBcIlwiXG4gICAgICBoaWdobGlnaHRlZExpbmVzID0gcGFyc2VMaW5lUmFuZ2VzKHJhdylcbiAgICAgIGxpbmVOdW1iZXJzID0gcGFyc2VMaW5lTnVtYmVycyhyYXcpXG4gICAgICBoaWdobGlnaHRlZFdvcmQgPSBwYXJzZVdvcmRIaWdobGlnaHQocmF3KVxuICAgIH0sXG4gICAgbGluZShsaW5lLCBsaW5lTnVtYmVyKSB7XG4gICAgICBpZiAoaGlnaGxpZ2h0ZWRMaW5lcy5oYXMobGluZU51bWJlcikpIHtcbiAgICAgICAgbGluZS5wcm9wZXJ0aWVzW1wiZGF0YS1oaWdobGlnaHRlZFwiXSA9IFwiXCJcbiAgICAgIH1cbiAgICAgIGlmIChsaW5lTnVtYmVycy5lbmFibGVkKSB7XG4gICAgICAgIGxpbmUucHJvcGVydGllc1tcImRhdGEtbGluZS1udW1iZXJcIl0gPSBTdHJpbmcoXG4gICAgICAgICAgbGluZU51bWJlciAtIDEgKyBsaW5lTnVtYmVycy5zdGFydCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpbmVcbiAgICB9LFxuICAgIHNwYW4oc3Bhbikge1xuICAgICAgaWYgKGhpZ2hsaWdodGVkV29yZCAmJiBzcGFuQ29udGFpbnNXb3JkKHNwYW4sIGhpZ2hsaWdodGVkV29yZCkpIHtcbiAgICAgICAgc3Bhbi5wcm9wZXJ0aWVzW1wiZGF0YS13b3JkLWhpZ2hsaWdodGVkXCJdID0gXCJcIlxuICAgICAgfVxuICAgICAgcmV0dXJuIHNwYW5cbiAgICB9LFxuICB9XG59XG4iXX0=