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,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { buttonVariants } from "../elements/button.js";
3
+ import { cn } from "../utils/style.js";
4
+ /** Styled link button rendered from ::button leaf directives */
5
+ export function LinkButton(props) {
6
+ return (_jsx("a", { href: props.href, className: cn(buttonVariants({
7
+ variant: props.variant,
8
+ size: props.size,
9
+ }), "no-underline"), children: props.label }));
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlua0J1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL0xpbmtCdXR0b24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXdCLENBQUE7QUFDdkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXRDLGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBVzFCO0lBQ0MsT0FBTyxDQUNMLFlBQ0UsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQ2hCLFNBQVMsRUFBRSxFQUFFLENBQ1gsY0FBYyxDQUFDO1lBQ2IsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDLEVBQ0YsY0FBYyxDQUNmLFlBRUEsS0FBSyxDQUFDLEtBQUssR0FDVixDQUNMLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnV0dG9uVmFyaWFudHMgfSBmcm9tIFwiLi4vZWxlbWVudHMvYnV0dG9uLnRzeFwiXG5pbXBvcnQgeyBjbiB9IGZyb20gXCIuLi91dGlscy9zdHlsZS50c1wiXG5cbi8qKiBTdHlsZWQgbGluayBidXR0b24gcmVuZGVyZWQgZnJvbSA6OmJ1dHRvbiBsZWFmIGRpcmVjdGl2ZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBMaW5rQnV0dG9uKHByb3BzOiB7XG4gIGhyZWY6IHN0cmluZ1xuICBsYWJlbDogc3RyaW5nXG4gIHZhcmlhbnQ/OlxuICAgIHwgXCJkZWZhdWx0XCJcbiAgICB8IFwib3V0bGluZVwiXG4gICAgfCBcInNlY29uZGFyeVwiXG4gICAgfCBcImdob3N0XCJcbiAgICB8IFwiZGVzdHJ1Y3RpdmVcIlxuICAgIHwgXCJsaW5rXCJcbiAgc2l6ZT86IFwiZGVmYXVsdFwiIHwgXCJzbVwiIHwgXCJsZ1wiXG59KSB7XG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIGhyZWY9e3Byb3BzLmhyZWZ9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBidXR0b25WYXJpYW50cyh7XG4gICAgICAgICAgdmFyaWFudDogcHJvcHMudmFyaWFudCxcbiAgICAgICAgICBzaXplOiBwcm9wcy5zaXplLFxuICAgICAgICB9KSxcbiAgICAgICAgXCJuby11bmRlcmxpbmVcIixcbiAgICAgICl9XG4gICAgPlxuICAgICAge3Byb3BzLmxhYmVsfVxuICAgIDwvYT5cbiAgKVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ /** Lazily loads and renders a Mermaid diagram */
2
+ export declare function Mermaid(props: {
3
+ children: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Suspense, lazy } from "react";
3
+ const MermaidRenderer = lazy(() => import("./MermaidRenderer.js"));
4
+ /** Lazily loads and renders a Mermaid diagram */
5
+ export function Mermaid(props) {
6
+ return (_jsx(Suspense, { fallback: _jsx("div", { className: "not-prose mermaid flex justify-center", children: "Loading diagram\u2026" }), children: _jsx(MermaidRenderer, { children: props.children }) }));
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVybWFpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL01lcm1haWQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUV0QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNCQUF1QixDQUFDLENBQUMsQ0FBQTtBQUVuRSxpREFBaUQ7QUFDakQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUEyQjtJQUNqRCxPQUFPLENBQ0wsS0FBQyxRQUFRLElBQ1AsUUFBUSxFQUNOLGNBQUssU0FBUyxFQUFDLHVDQUF1QyxzQ0FFaEQsWUFHUixLQUFDLGVBQWUsY0FBRSxLQUFLLENBQUMsUUFBUSxHQUFtQixHQUMxQyxDQUNaLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3VzcGVuc2UsIGxhenkgfSBmcm9tIFwicmVhY3RcIlxuXG5jb25zdCBNZXJtYWlkUmVuZGVyZXIgPSBsYXp5KCgpID0+IGltcG9ydChcIi4vTWVybWFpZFJlbmRlcmVyLnRzeFwiKSlcblxuLyoqIExhemlseSBsb2FkcyBhbmQgcmVuZGVycyBhIE1lcm1haWQgZGlhZ3JhbSAqL1xuZXhwb3J0IGZ1bmN0aW9uIE1lcm1haWQocHJvcHM6IHsgY2hpbGRyZW46IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1c3BlbnNlXG4gICAgICBmYWxsYmFjaz17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibm90LXByb3NlIG1lcm1haWQgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgIExvYWRpbmcgZGlhZ3JhbeKAplxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA+XG4gICAgICA8TWVybWFpZFJlbmRlcmVyPntwcm9wcy5jaGlsZHJlbn08L01lcm1haWRSZW5kZXJlcj5cbiAgICA8L1N1c3BlbnNlPlxuICApXG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ /** Renders a Mermaid diagram from a chart definition string */
2
+ export default function MermaidRenderer(props: {
3
+ children: string;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ import mermaid from "mermaid";
4
+ mermaid.initialize({ startOnLoad: false });
5
+ /** Renders a Mermaid diagram from a chart definition string */
6
+ export default function MermaidRenderer(props) {
7
+ const ref = useRef(null);
8
+ useEffect(() => {
9
+ const el = ref.current;
10
+ if (!el)
11
+ return;
12
+ const render = () => {
13
+ const isDark = document.documentElement.classList.contains("dark");
14
+ mermaid.initialize({
15
+ startOnLoad: false,
16
+ theme: isDark ? "dark" : "default",
17
+ });
18
+ el.textContent = props.children;
19
+ el.removeAttribute("data-processed");
20
+ mermaid.run({ nodes: [el] });
21
+ };
22
+ render();
23
+ const observer = new MutationObserver(render);
24
+ observer.observe(document.documentElement, {
25
+ attributes: true,
26
+ attributeFilter: ["class"],
27
+ });
28
+ return () => observer.disconnect();
29
+ }, [props.children]);
30
+ return _jsx("div", { ref: ref, className: "not-prose mermaid flex justify-center" });
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVybWFpZFJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvTWVybWFpZFJlbmRlcmVyLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDekMsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFBO0FBRTdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtBQUUxQywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE9BQU8sVUFBVSxlQUFlLENBQUMsS0FBMkI7SUFDakUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQTtJQUV4QyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQTtRQUN0QixJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU07UUFFZixNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUU7WUFDbEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2xFLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQ2pCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDbkMsQ0FBQyxDQUFBO1lBQ0YsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFBO1lBQy9CLEVBQUUsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtZQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlCLENBQUMsQ0FBQTtRQUVELE1BQU0sRUFBRSxDQUFBO1FBRVIsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM3QyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7WUFDekMsVUFBVSxFQUFFLElBQUk7WUFDaEIsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDO1NBQzNCLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQ3BDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBRXBCLE9BQU8sY0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyx1Q0FBdUMsR0FBRyxDQUFBO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgbWVybWFpZCBmcm9tIFwibWVybWFpZFwiXG5cbm1lcm1haWQuaW5pdGlhbGl6ZSh7IHN0YXJ0T25Mb2FkOiBmYWxzZSB9KVxuXG4vKiogUmVuZGVycyBhIE1lcm1haWQgZGlhZ3JhbSBmcm9tIGEgY2hhcnQgZGVmaW5pdGlvbiBzdHJpbmcgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lcm1haWRSZW5kZXJlcihwcm9wczogeyBjaGlsZHJlbjogc3RyaW5nIH0pIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZWwgPSByZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuXG4gICAgY29uc3QgcmVuZGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgaXNEYXJrID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImRhcmtcIilcbiAgICAgIG1lcm1haWQuaW5pdGlhbGl6ZSh7XG4gICAgICAgIHN0YXJ0T25Mb2FkOiBmYWxzZSxcbiAgICAgICAgdGhlbWU6IGlzRGFyayA/IFwiZGFya1wiIDogXCJkZWZhdWx0XCIsXG4gICAgICB9KVxuICAgICAgZWwudGV4dENvbnRlbnQgPSBwcm9wcy5jaGlsZHJlblxuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1wcm9jZXNzZWRcIilcbiAgICAgIG1lcm1haWQucnVuKHsgbm9kZXM6IFtlbF0gfSlcbiAgICB9XG5cbiAgICByZW5kZXIoKVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihyZW5kZXIpXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCJdLFxuICAgIH0pXG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFtwcm9wcy5jaGlsZHJlbl0pXG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT1cIm5vdC1wcm9zZSBtZXJtYWlkIGZsZXgganVzdGlmeS1jZW50ZXJcIiAvPlxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export declare function NotFound({ children }: {
2
+ children?: any;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ export function NotFound({ children }) {
4
+ return (_jsxs("div", { className: "min-h-[60vh] flex flex-col items-center justify-center text-center px-4", children: [
5
+ _jsx("h1", { className: "font-sans text-6xl font-semibold mb-4", children: "404" }), _jsx("div", { className: "text-muted-foreground mb-6", children: children || _jsx("p", { children: "The page you're looking for doesn't exist." }) }), _jsxs("div", { className: "flex items-center gap-4", children: [
6
+ _jsx("button", { type: "button", onClick: () => window.history.back(), className: "bg-primary text-primary-foreground px-4 py-2 text-sm font-medium hover:bg-primary/80 transition-colors", children: "Go Back" }), _jsx(Link, { to: "/", className: "border border-border px-4 py-2 text-sm font-medium hover:bg-card transition-colors", children: "Home" })
7
+ ] })
8
+ ] }));
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90Rm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9Ob3RGb3VuZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUU3QyxNQUFNLFVBQVUsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFzQjtJQUN2RCxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMseUVBQXlFO1lBQ3RGLGFBQUksU0FBUyxFQUFDLHVDQUF1QyxvQkFBUyxFQUM5RCxjQUFLLFNBQVMsRUFBQyw0QkFBNEIsWUFDeEMsUUFBUSxJQUFJLHFFQUFpRCxHQUMxRCxFQUNOLGVBQUssU0FBUyxFQUFDLHlCQUF5QjtvQkFDdEMsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFDcEMsU0FBUyxFQUFDLHdHQUF3Ryx3QkFHM0csRUFDVCxLQUFDLElBQUksSUFDSCxFQUFFLEVBQUMsR0FBRyxFQUNOLFNBQVMsRUFBQyxvRkFBb0YscUJBR3pGO29CQUNIO1lBQ0YsQ0FDUCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmsgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5cbmV4cG9ydCBmdW5jdGlvbiBOb3RGb3VuZCh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW4/OiBhbnkgfSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLWgtWzYwdmhdIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyIHB4LTRcIj5cbiAgICAgIDxoMSBjbGFzc05hbWU9XCJmb250LXNhbnMgdGV4dC02eGwgZm9udC1zZW1pYm9sZCBtYi00XCI+NDA0PC9oMT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG1iLTZcIj5cbiAgICAgICAge2NoaWxkcmVuIHx8IDxwPlRoZSBwYWdlIHlvdSdyZSBsb29raW5nIGZvciBkb2Vzbid0IGV4aXN0LjwvcD59XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHdpbmRvdy5oaXN0b3J5LmJhY2soKX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLXByaW1hcnkvODAgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAgR28gQmFja1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPExpbmtcbiAgICAgICAgICB0bz1cIi9cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlciBib3JkZXItYm9yZGVyIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIGhvdmVyOmJnLWNhcmQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICA+XG4gICAgICAgICAgSG9tZVxuICAgICAgICA8L0xpbms+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ interface PackageTabsProps {
2
+ npm: string;
3
+ pnpm: string;
4
+ yarn: string;
5
+ bun: string;
6
+ }
7
+ /** Tabbed code block showing a command for each package manager */
8
+ export declare function PackageTabs(props: PackageTabsProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Check, Clipboard } from "lucide-react";
3
+ import { useState } from "react";
4
+ const managers = ["npm", "pnpm", "yarn", "bun"];
5
+ /** Tabbed code block showing a command for each package manager */
6
+ export function PackageTabs(props) {
7
+ const [active, setActive] = useState("npm");
8
+ const [copied, setCopied] = useState(false);
9
+ const commands = {
10
+ npm: props.npm,
11
+ pnpm: props.pnpm,
12
+ yarn: props.yarn,
13
+ bun: props.bun,
14
+ };
15
+ const handleCopy = () => {
16
+ navigator.clipboard.writeText(commands[active]);
17
+ setCopied(true);
18
+ setTimeout(() => setCopied(false), 2000);
19
+ };
20
+ return (_jsxs("figure", { className: "not-prose my-4 relative rounded-xl border shadow-sm overflow-hidden text-sm bg-sidebar dark:bg-sidebar", children: [
21
+ _jsxs("div", { className: "flex items-center border-b", children: [
22
+ _jsx("div", { className: "flex flex-1 items-center", children: managers.map(pm => (_jsx("button", { type: "button", onClick: () => setActive(pm), className: `px-3 py-2 text-xs font-medium transition-colors ${pm === active
23
+ ? "text-foreground border-b-2 border-foreground"
24
+ : "text-muted-foreground hover:text-foreground"}`, children: pm }, pm))) }), _jsx("button", { type: "button", onClick: handleCopy, className: "me-2 p-1 rounded-md text-muted-foreground hover:text-foreground transition-colors", "aria-label": "Copy code", children: copied ? (_jsx(Check, { className: "size-3.5" })) : (_jsx(Clipboard, { className: "size-3.5" })) })
25
+ ] }), _jsx("div", { className: "text-[0.8125rem] py-3.5 overflow-auto max-h-[600px]", children: _jsx("pre", { className: "min-w-full w-max", children: _jsx("code", { className: "flex flex-col", children: _jsx("span", { className: "px-4", children: commands[active] }) }) }) })
26
+ ] }));
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVRhYnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9QYWNrYWdlVGFicy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFJaEMsTUFBTSxRQUFRLEdBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQVMxRCxtRUFBbUU7QUFDbkUsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUF1QjtJQUNqRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBVSxLQUFLLENBQUMsQ0FBQTtJQUNwRCxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUzQyxNQUFNLFFBQVEsR0FBNEI7UUFDeEMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1FBQ2QsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQ2hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7S0FDZixDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFO1FBQ3RCLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDMUMsQ0FBQyxDQUFBO0lBRUQsT0FBTyxDQUNMLGtCQUFRLFNBQVMsRUFBQyx3R0FBd0c7WUFDeEgsZUFBSyxTQUFTLEVBQUMsNEJBQTRCO29CQUN6QyxjQUFLLFNBQVMsRUFBQywwQkFBMEIsWUFDdEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ2xCLGlCQUVFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDNUIsU0FBUyxFQUFFLG1EQUNULEVBQUUsS0FBSyxNQUFNO2dDQUNYLENBQUMsQ0FBQyw4Q0FBOEM7Z0NBQ2hELENBQUMsQ0FBQyw2Q0FDTixFQUFFLFlBRUQsRUFBRSxJQVRFLEVBQUUsQ0FVQSxDQUNWLENBQUMsR0FDRSxFQUNOLGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLFVBQVUsRUFDbkIsU0FBUyxFQUFDLG1GQUFtRixnQkFDbEYsV0FBVyxZQUVyQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1IsS0FBQyxLQUFLLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxDQUMvQixDQUFDLENBQUMsQ0FBQyxDQUNGLEtBQUMsU0FBUyxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsQ0FDbkMsR0FDTTtvQkFDTCxFQUNOLGNBQUssU0FBUyxFQUFDLHFEQUFxRCxZQUNsRSxjQUFLLFNBQVMsRUFBQyxrQkFBa0IsWUFDL0IsZUFBTSxTQUFTLEVBQUMsZUFBZSxZQUM3QixlQUFNLFNBQVMsRUFBQyxNQUFNLFlBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFRLEdBQzNDLEdBQ0gsR0FDRjtZQUNDLENBQ1YsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGVjaywgQ2xpcGJvYXJkIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiXG5cbnR5cGUgTWFuYWdlciA9IFwibnBtXCIgfCBcInBucG1cIiB8IFwieWFyblwiIHwgXCJidW5cIlxuXG5jb25zdCBtYW5hZ2VyczogTWFuYWdlcltdID0gW1wibnBtXCIsIFwicG5wbVwiLCBcInlhcm5cIiwgXCJidW5cIl1cblxuaW50ZXJmYWNlIFBhY2thZ2VUYWJzUHJvcHMge1xuICBucG06IHN0cmluZ1xuICBwbnBtOiBzdHJpbmdcbiAgeWFybjogc3RyaW5nXG4gIGJ1bjogc3RyaW5nXG59XG5cbi8qKiBUYWJiZWQgY29kZSBibG9jayBzaG93aW5nIGEgY29tbWFuZCBmb3IgZWFjaCBwYWNrYWdlIG1hbmFnZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBQYWNrYWdlVGFicyhwcm9wczogUGFja2FnZVRhYnNQcm9wcykge1xuICBjb25zdCBbYWN0aXZlLCBzZXRBY3RpdmVdID0gdXNlU3RhdGU8TWFuYWdlcj4oXCJucG1cIilcbiAgY29uc3QgW2NvcGllZCwgc2V0Q29waWVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGNvbW1hbmRzOiBSZWNvcmQ8TWFuYWdlciwgc3RyaW5nPiA9IHtcbiAgICBucG06IHByb3BzLm5wbSxcbiAgICBwbnBtOiBwcm9wcy5wbnBtLFxuICAgIHlhcm46IHByb3BzLnlhcm4sXG4gICAgYnVuOiBwcm9wcy5idW4sXG4gIH1cblxuICBjb25zdCBoYW5kbGVDb3B5ID0gKCkgPT4ge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbW1hbmRzW2FjdGl2ZV0pXG4gICAgc2V0Q29waWVkKHRydWUpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRDb3BpZWQoZmFsc2UpLCAyMDAwKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZmlndXJlIGNsYXNzTmFtZT1cIm5vdC1wcm9zZSBteS00IHJlbGF0aXZlIHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1zbSBiZy1zaWRlYmFyIGRhcms6Ymctc2lkZWJhclwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXItYlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIHttYW5hZ2Vycy5tYXAocG0gPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e3BtfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0QWN0aXZlKHBtKX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgcHgtMyBweS0yIHRleHQteHMgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgJHtcbiAgICAgICAgICAgICAgICBwbSA9PT0gYWN0aXZlXG4gICAgICAgICAgICAgICAgICA/IFwidGV4dC1mb3JlZ3JvdW5kIGJvcmRlci1iLTIgYm9yZGVyLWZvcmVncm91bmRcIlxuICAgICAgICAgICAgICAgICAgOiBcInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmRcIlxuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3BtfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtZS0yIHAtMSByb3VuZGVkLW1kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3B5IGNvZGVcIlxuICAgICAgICA+XG4gICAgICAgICAge2NvcGllZCA/IChcbiAgICAgICAgICAgIDxDaGVjayBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxDbGlwYm9hcmQgY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtWzAuODEyNXJlbV0gcHktMy41IG92ZXJmbG93LWF1dG8gbWF4LWgtWzYwMHB4XVwiPlxuICAgICAgICA8cHJlIGNsYXNzTmFtZT1cIm1pbi13LWZ1bGwgdy1tYXhcIj5cbiAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJweC00XCI+e2NvbW1hbmRzW2FjdGl2ZV19PC9zcGFuPlxuICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgPC9wcmU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZ3VyZT5cbiAgKVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ /** Toolbar with action buttons displayed for the article content */
2
+ export declare function PageToolbar(props: {
3
+ file?: string;
4
+ sourceUrl?: string;
5
+ sourceAction?: "edit" | "view";
6
+ content: string;
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useCallback } from "react";
3
+ import { Eye, Pencil, Copy, Check, ExternalLink } from "lucide-react";
4
+ /** Toolbar with action buttons displayed for the article content */
5
+ export function PageToolbar(props) {
6
+ const [copied, setCopied] = useState(false);
7
+ const sourceHref = props.sourceUrl ??
8
+ (props.file
9
+ ? `https://github.com/datisthq/livemark/edit/main/${props.file}`
10
+ : undefined);
11
+ const isView = props.sourceAction === "view";
12
+ const sourceLabel = isView ? "View on GitHub" : "Edit on GitHub";
13
+ const SourceIcon = isView ? Eye : Pencil;
14
+ const handleCopy = useCallback(() => {
15
+ navigator.clipboard.writeText(props.content);
16
+ setCopied(true);
17
+ setTimeout(() => setCopied(false), 2000);
18
+ }, [props.content]);
19
+ const handleOpenIn = useCallback((url) => {
20
+ navigator.clipboard.writeText(props.content);
21
+ window.open(url, "_blank", "noopener,noreferrer");
22
+ }, [props.content]);
23
+ const buttonClass = "flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground transition-colors";
24
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: "mb-6 flex flex-col gap-2 text-sm", children: [
25
+ _jsx("p", { className: "text-sm font-medium mb-1", children: "Actions" }), sourceHref ? (_jsxs("a", { href: sourceHref, target: "_blank", rel: "noopener noreferrer", className: buttonClass, children: [
26
+ _jsx(SourceIcon, { className: "size-3.5" }), sourceLabel] })) : (_jsxs("span", { className: `${buttonClass} opacity-50 cursor-not-allowed hover:text-muted-foreground`, "aria-disabled": "true", children: [
27
+ _jsx(SourceIcon, { className: "size-3.5" }), sourceLabel] })), _jsxs("button", { type: "button", onClick: handleCopy, className: buttonClass, children: [copied ? (_jsx(Check, { className: "size-3.5" })) : (_jsx(Copy, { className: "size-3.5" })), "Copy Markdown"] }), _jsxs("button", { type: "button", onClick: () => handleOpenIn("https://chatgpt.com/"), className: buttonClass, children: [
28
+ _jsx(ExternalLink, { className: "size-3.5" }),
29
+ "Open in ChatGPT"] }), _jsxs("button", { type: "button", onClick: () => handleOpenIn("https://claude.ai/"), className: buttonClass, children: [
30
+ _jsx(ExternalLink, { className: "size-3.5" }),
31
+ "Open in Claude"] })
32
+ ] }) }));
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFnZVRvb2xiYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9QYWdlVG9vbGJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXJFLG9FQUFvRTtBQUNwRSxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBSzNCO0lBQ0MsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0MsTUFBTSxVQUFVLEdBQ2QsS0FBSyxDQUFDLFNBQVM7UUFDZixDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ1QsQ0FBQyxDQUFDLGtEQUFrRCxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2hFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUNoQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQTtJQUM1QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUNoRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBRXhDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDbEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzVDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDMUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFFbkIsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUM5QixDQUFDLEdBQVcsRUFBRSxFQUFFO1FBQ2QsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFBO0lBQ25ELENBQUMsRUFDRCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FDaEIsQ0FBQTtJQUVELE1BQU0sV0FBVyxHQUNmLGlHQUFpRyxDQUFBO0lBRW5HLE9BQU8sQ0FDTCw0QkFDRSxlQUFLLFNBQVMsRUFBQyxrQ0FBa0M7Z0JBQy9DLFlBQUcsU0FBUyxFQUFDLDBCQUEwQix3QkFBWSxFQUNsRCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ1osYUFDRSxJQUFJLEVBQUUsVUFBVSxFQUNoQixNQUFNLEVBQUMsUUFBUSxFQUNmLEdBQUcsRUFBQyxxQkFBcUIsRUFDekIsU0FBUyxFQUFFLFdBQVc7d0JBRXRCLEtBQUMsVUFBVSxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsRUFDbEMsV0FBVyxJQUNWLENBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FDRixnQkFDRSxTQUFTLEVBQUUsR0FBRyxXQUFXLDREQUE0RCxtQkFDdkUsTUFBTTt3QkFFcEIsS0FBQyxVQUFVLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxFQUNsQyxXQUFXLElBQ1AsQ0FDUixFQUNELGtCQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxhQUM5RCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQ1IsS0FBQyxLQUFLLElBQUMsU0FBUyxFQUFDLFVBQVUsR0FBRyxDQUMvQixDQUFDLENBQUMsQ0FBQyxDQUNGLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsQ0FDOUIscUJBRU0sRUFDVCxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsRUFDbkQsU0FBUyxFQUFFLFdBQVc7d0JBRXRCLEtBQUMsWUFBWSxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUc7NkNBRTlCLEVBQ1Qsa0JBQ0UsSUFBSSxFQUFDLFFBQVEsRUFDYixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLEVBQ2pELFNBQVMsRUFBRSxXQUFXO3dCQUV0QixLQUFDLFlBQVksSUFBQyxTQUFTLEVBQUMsVUFBVSxHQUFHOzRDQUU5QjtnQkFDTCxHQUNMLENBQ0osQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgRXllLCBQZW5jaWwsIENvcHksIENoZWNrLCBFeHRlcm5hbExpbmsgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcblxuLyoqIFRvb2xiYXIgd2l0aCBhY3Rpb24gYnV0dG9ucyBkaXNwbGF5ZWQgZm9yIHRoZSBhcnRpY2xlIGNvbnRlbnQgKi9cbmV4cG9ydCBmdW5jdGlvbiBQYWdlVG9vbGJhcihwcm9wczoge1xuICBmaWxlPzogc3RyaW5nXG4gIHNvdXJjZVVybD86IHN0cmluZ1xuICBzb3VyY2VBY3Rpb24/OiBcImVkaXRcIiB8IFwidmlld1wiXG4gIGNvbnRlbnQ6IHN0cmluZ1xufSkge1xuICBjb25zdCBbY29waWVkLCBzZXRDb3BpZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHNvdXJjZUhyZWYgPVxuICAgIHByb3BzLnNvdXJjZVVybCA/P1xuICAgIChwcm9wcy5maWxlXG4gICAgICA/IGBodHRwczovL2dpdGh1Yi5jb20vZGF0aXN0aHEvbGl2ZW1hcmsvZWRpdC9tYWluLyR7cHJvcHMuZmlsZX1gXG4gICAgICA6IHVuZGVmaW5lZClcbiAgY29uc3QgaXNWaWV3ID0gcHJvcHMuc291cmNlQWN0aW9uID09PSBcInZpZXdcIlxuICBjb25zdCBzb3VyY2VMYWJlbCA9IGlzVmlldyA/IFwiVmlldyBvbiBHaXRIdWJcIiA6IFwiRWRpdCBvbiBHaXRIdWJcIlxuICBjb25zdCBTb3VyY2VJY29uID0gaXNWaWV3ID8gRXllIDogUGVuY2lsXG5cbiAgY29uc3QgaGFuZGxlQ29weSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwcm9wcy5jb250ZW50KVxuICAgIHNldENvcGllZCh0cnVlKVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0Q29waWVkKGZhbHNlKSwgMjAwMClcbiAgfSwgW3Byb3BzLmNvbnRlbnRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5JbiA9IHVzZUNhbGxiYWNrKFxuICAgICh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQocHJvcHMuY29udGVudClcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIiwgXCJub29wZW5lcixub3JlZmVycmVyXCIpXG4gICAgfSxcbiAgICBbcHJvcHMuY29udGVudF0sXG4gIClcblxuICBjb25zdCBidXR0b25DbGFzcyA9XG4gICAgXCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLWNvbG9yc1wiXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi02IGZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1zbVwiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIG1iLTFcIj5BY3Rpb25zPC9wPlxuICAgICAgICB7c291cmNlSHJlZiA/IChcbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj17c291cmNlSHJlZn1cbiAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3N9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNvdXJjZUljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgICAgICAge3NvdXJjZUxhYmVsfVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtidXR0b25DbGFzc30gb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQgaG92ZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kYH1cbiAgICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U291cmNlSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICAgICAgICB7c291cmNlTGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApfVxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDb3B5fSBjbGFzc05hbWU9e2J1dHRvbkNsYXNzfT5cbiAgICAgICAgICB7Y29waWVkID8gKFxuICAgICAgICAgICAgPENoZWNrIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPENvcHkgY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgQ29weSBNYXJrZG93blxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wZW5JbihcImh0dHBzOi8vY2hhdGdwdC5jb20vXCIpfVxuICAgICAgICAgIGNsYXNzTmFtZT17YnV0dG9uQ2xhc3N9XG4gICAgICAgID5cbiAgICAgICAgICA8RXh0ZXJuYWxMaW5rIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICBPcGVuIGluIENoYXRHUFRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPcGVuSW4oXCJodHRwczovL2NsYXVkZS5haS9cIil9XG4gICAgICAgICAgY2xhc3NOYW1lPXtidXR0b25DbGFzc31cbiAgICAgICAgPlxuICAgICAgICAgIDxFeHRlcm5hbExpbmsgY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgICAgIE9wZW4gaW4gQ2xhdWRlXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ /** Previous/next article navigation shown at the bottom of each article page */
2
+ export declare function PrevNext(props: {
3
+ path: string;
4
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link } from "@tanstack/react-router";
3
+ import { ChevronLeft, ChevronRight } from "lucide-react";
4
+ import { sortedArticles, flatArticles, currentSection, sectionFlatArticles, } from "../content/article.js";
5
+ /** Previous/next article navigation shown at the bottom of each article page */
6
+ export function PrevNext(props) {
7
+ const section = currentSection(props.path);
8
+ const flat = section
9
+ ? (sectionFlatArticles.get(section.prefix) ?? flatArticles)
10
+ : flatArticles;
11
+ const index = flat.indexOf(props.path);
12
+ if (index < 0)
13
+ return null;
14
+ const prevPath = index > 0 ? flat[index - 1] : undefined;
15
+ const nextPath = index < flat.length - 1 ? flat[index + 1] : undefined;
16
+ const prev = prevPath
17
+ ? sortedArticles.find(a => a.path === prevPath)
18
+ : undefined;
19
+ const next = nextPath
20
+ ? sortedArticles.find(a => a.path === nextPath)
21
+ : undefined;
22
+ if (!prev && !next)
23
+ return null;
24
+ return (_jsxs("nav", { className: "not-prose mt-10 flex gap-4", children: [prev && (_jsxs(Link, { to: "/$", params: { _splat: prev.path.replace(/^\/|\/$/g, "") }, className: "flex-1 rounded-xl border shadow-sm p-4 hover:bg-muted/50 transition-colors", children: [
25
+ _jsxs("span", { className: "flex items-center gap-1 text-sm text-muted-foreground", children: [
26
+ _jsx(ChevronLeft, { className: "size-4" }),
27
+ "Previous"] }), _jsx("span", { className: "mt-1 block font-medium", children: prev.title })
28
+ ] })), next && (_jsxs(Link, { to: "/$", params: { _splat: next.path.replace(/^\/|\/$/g, "") }, className: "flex-1 rounded-xl border shadow-sm p-4 hover:bg-muted/50 transition-colors text-right", children: [
29
+ _jsxs("span", { className: "flex items-center justify-end gap-1 text-sm text-muted-foreground", children: ["Next",
30
+ _jsx(ChevronRight, { className: "size-4" })
31
+ ] }), _jsx("span", { className: "mt-1 block font-medium", children: next.title })
32
+ ] }))] }));
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJldk5leHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9QcmV2TmV4dC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN4RCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFlBQVksRUFDWixjQUFjLEVBQ2QsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUE7QUFFOUIsZ0ZBQWdGO0FBQ2hGLE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBdUI7SUFDOUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDO1FBQzNELENBQUMsQ0FBQyxZQUFZLENBQUE7SUFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdEMsSUFBSSxLQUFLLEdBQUcsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRTFCLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN4RCxNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUN0RSxNQUFNLElBQUksR0FBRyxRQUFRO1FBQ25CLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7UUFDL0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUNiLE1BQU0sSUFBSSxHQUFHLFFBQVE7UUFDbkIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztRQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRWIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUUvQixPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsNEJBQTRCLGFBQ3hDLElBQUksSUFBSSxDQUNQLE1BQUMsSUFBSSxJQUNILEVBQUUsRUFBQyxJQUFJLEVBQ1AsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUNyRCxTQUFTLEVBQUMsNEVBQTRFO29CQUV0RixnQkFBTSxTQUFTLEVBQUMsdURBQXVEOzRCQUNyRSxLQUFDLFdBQVcsSUFBQyxTQUFTLEVBQUMsUUFBUSxHQUFHOzBDQUU3QixFQUNQLGVBQU0sU0FBUyxFQUFDLHdCQUF3QixZQUFFLElBQUksQ0FBQyxLQUFLLEdBQVE7b0JBQ3ZELENBQ1IsRUFDQSxJQUFJLElBQUksQ0FDUCxNQUFDLElBQUksSUFDSCxFQUFFLEVBQUMsSUFBSSxFQUNQLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFDckQsU0FBUyxFQUFDLHVGQUF1RjtvQkFFakcsZ0JBQU0sU0FBUyxFQUFDLG1FQUFtRTs0QkFFakYsS0FBQyxZQUFZLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRzs0QkFDOUIsRUFDUCxlQUFNLFNBQVMsRUFBQyx3QkFBd0IsWUFBRSxJQUFJLENBQUMsS0FBSyxHQUFRO29CQUN2RCxDQUNSLElBQ0csQ0FDUCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmsgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQge1xuICBzb3J0ZWRBcnRpY2xlcyxcbiAgZmxhdEFydGljbGVzLFxuICBjdXJyZW50U2VjdGlvbixcbiAgc2VjdGlvbkZsYXRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5cbi8qKiBQcmV2aW91cy9uZXh0IGFydGljbGUgbmF2aWdhdGlvbiBzaG93biBhdCB0aGUgYm90dG9tIG9mIGVhY2ggYXJ0aWNsZSBwYWdlICovXG5leHBvcnQgZnVuY3Rpb24gUHJldk5leHQocHJvcHM6IHsgcGF0aDogc3RyaW5nIH0pIHtcbiAgY29uc3Qgc2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uKHByb3BzLnBhdGgpXG4gIGNvbnN0IGZsYXQgPSBzZWN0aW9uXG4gICAgPyAoc2VjdGlvbkZsYXRBcnRpY2xlcy5nZXQoc2VjdGlvbi5wcmVmaXgpID8/IGZsYXRBcnRpY2xlcylcbiAgICA6IGZsYXRBcnRpY2xlc1xuICBjb25zdCBpbmRleCA9IGZsYXQuaW5kZXhPZihwcm9wcy5wYXRoKVxuICBpZiAoaW5kZXggPCAwKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IHByZXZQYXRoID0gaW5kZXggPiAwID8gZmxhdFtpbmRleCAtIDFdIDogdW5kZWZpbmVkXG4gIGNvbnN0IG5leHRQYXRoID0gaW5kZXggPCBmbGF0Lmxlbmd0aCAtIDEgPyBmbGF0W2luZGV4ICsgMV0gOiB1bmRlZmluZWRcbiAgY29uc3QgcHJldiA9IHByZXZQYXRoXG4gICAgPyBzb3J0ZWRBcnRpY2xlcy5maW5kKGEgPT4gYS5wYXRoID09PSBwcmV2UGF0aClcbiAgICA6IHVuZGVmaW5lZFxuICBjb25zdCBuZXh0ID0gbmV4dFBhdGhcbiAgICA/IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IG5leHRQYXRoKVxuICAgIDogdW5kZWZpbmVkXG5cbiAgaWYgKCFwcmV2ICYmICFuZXh0KSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPG5hdiBjbGFzc05hbWU9XCJub3QtcHJvc2UgbXQtMTAgZmxleCBnYXAtNFwiPlxuICAgICAge3ByZXYgJiYgKFxuICAgICAgICA8TGlua1xuICAgICAgICAgIHRvPVwiLyRcIlxuICAgICAgICAgIHBhcmFtcz17eyBfc3BsYXQ6IHByZXYucGF0aC5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIikgfX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtIHAtNCBob3ZlcjpiZy1tdXRlZC81MCB0cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgPENoZXZyb25MZWZ0IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICBQcmV2aW91c1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtdC0xIGJsb2NrIGZvbnQtbWVkaXVtXCI+e3ByZXYudGl0bGV9PC9zcGFuPlxuICAgICAgICA8L0xpbms+XG4gICAgICApfVxuICAgICAge25leHQgJiYgKFxuICAgICAgICA8TGlua1xuICAgICAgICAgIHRvPVwiLyRcIlxuICAgICAgICAgIHBhcmFtcz17eyBfc3BsYXQ6IG5leHQucGF0aC5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIikgfX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtIHAtNCBob3ZlcjpiZy1tdXRlZC81MCB0cmFuc2l0aW9uLWNvbG9ycyB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICBOZXh0XG4gICAgICAgICAgICA8Q2hldnJvblJpZ2h0IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm10LTEgYmxvY2sgZm9udC1tZWRpdW1cIj57bmV4dC50aXRsZX08L3NwYW4+XG4gICAgICAgIDwvTGluaz5cbiAgICAgICl9XG4gICAgPC9uYXY+XG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ /** Search button with "/" keyboard shortcut and command palette dialog */
2
+ export declare function Search(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useHotkey } from "@tanstack/react-hotkeys";
4
+ import { Search as SearchIcon } from "lucide-react";
5
+ import { SearchDialog } from "./SearchDialog.js";
6
+ /** Search button with "/" keyboard shortcut and command palette dialog */
7
+ export function Search() {
8
+ const [open, setOpen] = useState(false);
9
+ useHotkey("/", () => setOpen(true));
10
+ return (_jsxs(_Fragment, { children: [
11
+ _jsxs("button", { type: "button", onClick: () => setOpen(true), className: "flex w-full items-center gap-2 rounded-xl border border-border bg-sidebar-accent/70 px-3 py-2 text-sm text-muted-foreground shadow-xs hover:bg-background transition-colors cursor-pointer", children: [
12
+ _jsx(SearchIcon, { className: "size-4" }), _jsx("span", { className: "flex-1 text-left", children: "Search..." }), _jsx("kbd", { className: "rounded border border-border bg-muted px-1.5 py-0.5 text-[10px] font-mono", children: "/" })
13
+ ] }), _jsx(SearchDialog, { open: open, onOpenChange: setOpen })
14
+ ] }));
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2VhcmNoLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFvQixDQUFBO0FBRWpELDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsTUFBTTtJQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV2QyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRW5DLE9BQU8sQ0FDTDtZQUNFLGtCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDNUIsU0FBUyxFQUFDLDRMQUE0TDtvQkFFdE0sS0FBQyxVQUFVLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUNqQyxlQUFNLFNBQVMsRUFBQyxrQkFBa0IsMEJBQWlCLEVBQ25ELGNBQUssU0FBUyxFQUFDLDJFQUEyRSxrQkFFcEY7b0JBQ0MsRUFDVCxLQUFDLFlBQVksSUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUk7WUFDbEQsQ0FDSixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IHVzZUhvdGtleSB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtaG90a2V5c1wiXG5pbXBvcnQgeyBTZWFyY2ggYXMgU2VhcmNoSWNvbiB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgU2VhcmNoRGlhbG9nIH0gZnJvbSBcIi4vU2VhcmNoRGlhbG9nLnRzeFwiXG5cbi8qKiBTZWFyY2ggYnV0dG9uIHdpdGggXCIvXCIga2V5Ym9hcmQgc2hvcnRjdXQgYW5kIGNvbW1hbmQgcGFsZXR0ZSBkaWFsb2cgKi9cbmV4cG9ydCBmdW5jdGlvbiBTZWFyY2goKSB7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIHVzZUhvdGtleShcIi9cIiwgKCkgPT4gc2V0T3Blbih0cnVlKSlcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRPcGVuKHRydWUpfVxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWJvcmRlciBiZy1zaWRlYmFyLWFjY2VudC83MCBweC0zIHB5LTIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWJhY2tncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8U2VhcmNoSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmbGV4LTEgdGV4dC1sZWZ0XCI+U2VhcmNoLi4uPC9zcGFuPlxuICAgICAgICA8a2JkIGNsYXNzTmFtZT1cInJvdW5kZWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgcHgtMS41IHB5LTAuNSB0ZXh0LVsxMHB4XSBmb250LW1vbm9cIj5cbiAgICAgICAgICAvXG4gICAgICAgIDwva2JkPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8U2VhcmNoRGlhbG9nIG9wZW49e29wZW59IG9uT3BlbkNoYW5nZT17c2V0T3Blbn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ /** Full-text search dialog powered by Orama */
2
+ export declare function SearchDialog(props: {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,139 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useRef, useCallback, useMemo } from "react";
3
+ import { useNavigate } from "@tanstack/react-router";
4
+ import { FileText } from "lucide-react";
5
+ import { create, insertMultiple, search } from "@orama/orama";
6
+ import { sortedArticles } from "../content/article.js";
7
+ import { articleIcons } from "../helpers/article-icon.js";
8
+ import { CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "../elements/command.js";
9
+ /** Full-text search dialog powered by Orama */
10
+ export function SearchDialog(props) {
11
+ const [results, setResults] = useState([]);
12
+ const [query, setQuery] = useState("");
13
+ const dbRef = useRef(null);
14
+ const navigate = useNavigate();
15
+ const ensureIndex = useCallback(async () => {
16
+ if (dbRef.current)
17
+ return dbRef.current;
18
+ const db = await create({
19
+ schema: {
20
+ title: "string",
21
+ description: "string",
22
+ searchText: "string",
23
+ },
24
+ });
25
+ await insertMultiple(db, sortedArticles.map(a => ({
26
+ title: a.title,
27
+ description: a.description ?? "",
28
+ searchText: a.searchText,
29
+ })));
30
+ dbRef.current = db;
31
+ return db;
32
+ }, []);
33
+ const toResult = useCallback((article, term) => ({
34
+ title: article.title,
35
+ path: article.path,
36
+ icon: article.icon,
37
+ snippet: term
38
+ ? extractSnippet(article.searchText, term)
39
+ : (article.description ?? ""),
40
+ group: groupFor(article.path),
41
+ }), []);
42
+ const handleSearch = useCallback(async (term) => {
43
+ setQuery(term);
44
+ if (!term.trim()) {
45
+ setResults([]);
46
+ return;
47
+ }
48
+ const db = await ensureIndex();
49
+ const hits = await search(db, {
50
+ term,
51
+ properties: ["title", "description", "searchText"],
52
+ tolerance: 1,
53
+ boost: { title: 3, description: 2 },
54
+ });
55
+ setResults(hits.hits.map(hit => {
56
+ const article = sortedArticles.find(a => a.title === hit.document.title);
57
+ if (!article)
58
+ return toResult({
59
+ ...sortedArticles[0],
60
+ title: hit.document.title,
61
+ path: "",
62
+ searchText: hit.document.description,
63
+ description: hit.document.description,
64
+ icon: "",
65
+ }, term);
66
+ return toResult(article, term);
67
+ }));
68
+ }, [ensureIndex, toResult]);
69
+ const handleSelect = useCallback((path) => {
70
+ props.onOpenChange(false);
71
+ setQuery("");
72
+ setResults([]);
73
+ navigate({
74
+ to: "/$",
75
+ params: { _splat: path.replace(/^\/|\/$/g, "") },
76
+ });
77
+ }, [navigate, props.onOpenChange]);
78
+ const grouped = useMemo(() => {
79
+ const groups = new Map();
80
+ for (const r of results) {
81
+ const list = groups.get(r.group) ?? [];
82
+ list.push(r);
83
+ groups.set(r.group, list);
84
+ }
85
+ return groups;
86
+ }, [results]);
87
+ return (_jsxs(CommandDialog, { title: "Search", description: "Search documentation", open: props.open, onOpenChange: props.onOpenChange, shouldFilter: false, loop: true, children: [
88
+ _jsx(CommandInput, { placeholder: "Search docs...", value: query, onValueChange: handleSearch, onClear: () => handleSearch("") }), _jsxs(CommandList, { className: "max-h-80", children: [
89
+ _jsx(CommandEmpty, { children: query.trim()
90
+ ? "No results found."
91
+ : "Type to search across all documentation." }), [...grouped.entries()].map(([group, items]) => (_jsx(CommandGroup, { heading: group, children: items.map(result => {
92
+ const Icon = articleIcons[result.icon] ?? FileText;
93
+ return (_jsxs(CommandItem, { value: result.path, onSelect: () => handleSelect(result.path), className: "py-2.5", children: [
94
+ _jsx(Icon, { className: "size-5 shrink-0 mt-0.5 self-start opacity-60" }), _jsxs("div", { className: "flex flex-col gap-0.5 min-w-0", children: [
95
+ _jsx("span", { className: "text-base font-medium", children: result.title }), result.snippet && (_jsx("span", { className: "text-sm text-muted-foreground line-clamp-1", children: _jsx(HighlightedText, { text: result.snippet, term: query }) }))] })
96
+ ] }, result.path));
97
+ }) }, group)))] }), _jsxs("div", { className: "flex items-center gap-4 border-t mt-2 px-4 py-2.5 text-sm text-muted-foreground", children: [
98
+ _jsxs("span", { className: "flex items-center gap-1.5", children: [
99
+ _jsx("kbd", { className: "rounded border border-border bg-muted px-1.5 py-0.5 text-xs font-mono", children: "\u2191\u2193" }),
100
+ "navigate"] }), _jsxs("span", { className: "flex items-center gap-1.5", children: [
101
+ _jsx("kbd", { className: "rounded border border-border bg-muted px-1.5 py-0.5 text-xs font-mono", children: "\u21B5" }),
102
+ "select"] }), _jsxs("span", { className: "flex items-center gap-1.5", children: [
103
+ _jsx("kbd", { className: "rounded border border-border bg-muted px-1.5 py-0.5 text-xs font-mono", children: "esc" }),
104
+ "close"] })
105
+ ] })
106
+ ] }));
107
+ }
108
+ function groupFor(pathname) {
109
+ const segments = pathname.replace(/^\/|\/$/g, "").split("/");
110
+ if (segments.length <= 2)
111
+ return "Pages";
112
+ return segments
113
+ .slice(1, -1)
114
+ .map(s => s
115
+ .split("-")
116
+ .map(w => w.charAt(0).toUpperCase() + w.slice(1))
117
+ .join(" "))
118
+ .join(" › ");
119
+ }
120
+ function extractSnippet(text, term) {
121
+ const lower = text.toLowerCase();
122
+ const idx = lower.indexOf(term.toLowerCase());
123
+ if (idx === -1)
124
+ return text.slice(0, 120);
125
+ const start = Math.max(0, idx - 40);
126
+ const end = Math.min(text.length, idx + term.length + 80);
127
+ const prefix = start > 0 ? "…" : "";
128
+ const suffix = end < text.length ? "…" : "";
129
+ return `${prefix}${text.slice(start, end)}${suffix}`;
130
+ }
131
+ function HighlightedText(props) {
132
+ if (!props.term.trim())
133
+ return _jsx(_Fragment, { children: props.text });
134
+ const escaped = props.term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
135
+ const regex = new RegExp(`(${escaped})`, "gi");
136
+ const parts = props.text.split(regex);
137
+ return (_jsx(_Fragment, { children: parts.map((part, i) => regex.test(part) ? (_jsx("span", { className: "text-foreground font-medium", children: part }, i)) : (part)) }));
138
+ }
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VhcmNoRGlhbG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2VhcmNoRGlhbG9nLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUN6RCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixZQUFZLEVBQ1osWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEdBQ1osTUFBTSx3QkFBeUIsQ0FBQTtBQVVoQywrQ0FBK0M7QUFDL0MsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUc1QjtJQUNDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFpQixFQUFFLENBQUMsQ0FBQTtJQUMxRCxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQTRDLElBQUksQ0FBQyxDQUFBO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFBO0lBRTlCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUN6QyxJQUFJLEtBQUssQ0FBQyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFBO1FBQ3ZDLE1BQU0s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LEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNyQyxPQUFPLENBQ0wsNEJBQ0csS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqQixlQUFjLFNBQVMsRUFBQyw2QkFBNkIsWUFDbEQsSUFBSSxJQURJLENBQUMsQ0FFTCxDQUNSLENBQUMsQ0FBQyxDQUFDLENBQ0YsSUFBSSxDQUNMLENBQ0YsR0FDQSxDQUNKLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgdXNlTmF2aWdhdGUgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBGaWxlVGV4dCB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHsgY3JlYXRlLCBpbnNlcnRNdWx0aXBsZSwgc2VhcmNoIH0gZnJvbSBcIkBvcmFtYS9vcmFtYVwiXG5pbXBvcnQgeyBzb3J0ZWRBcnRpY2xlcyB9IGZyb20gXCIuLi9jb250ZW50L2FydGljbGUudHNcIlxuaW1wb3J0IHsgYXJ0aWNsZUljb25zIH0gZnJvbSBcIi4uL2hlbHBlcnMvYXJ0aWNsZS1pY29uLnRzXCJcbmltcG9ydCB7XG4gIENvbW1hbmREaWFsb2csXG4gIENvbW1hbmRFbXB0eSxcbiAgQ29tbWFuZEdyb3VwLFxuICBDb21tYW5kSW5wdXQsXG4gIENvbW1hbmRJdGVtLFxuICBDb21tYW5kTGlzdCxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL2NvbW1hbmQudHN4XCJcblxuaW50ZXJmYWNlIFNlYXJjaFJlc3VsdCB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgcGF0aDogc3RyaW5nXG4gIGljb246IHN0cmluZ1xuICBzbmlwcGV0OiBzdHJpbmdcbiAgZ3JvdXA6IHN0cmluZ1xufVxuXG4vKiogRnVsbC10ZXh0IHNlYXJjaCBkaWFsb2cgcG93ZXJlZCBieSBPcmFtYSAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNlYXJjaERpYWxvZyhwcm9wczoge1xuICBvcGVuOiBib29sZWFuXG4gIG9uT3BlbkNoYW5nZTogKG9wZW46IGJvb2xlYW4pID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3Jlc3VsdHMsIHNldFJlc3VsdHNdID0gdXNlU3RhdGU8U2VhcmNoUmVzdWx0W10+KFtdKVxuICBjb25zdCBbcXVlcnksIHNldFF1ZXJ5XSA9IHVzZVN0YXRlKFwiXCIpXG4gIGNvbnN0IGRiUmVmID0gdXNlUmVmPEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlPj4gfCBudWxsPihudWxsKVxuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKClcblxuICBjb25zdCBlbnN1cmVJbmRleCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoZGJSZWYuY3VycmVudCkgcmV0dXJuIGRiUmVmLmN1cnJlbnRcbiAgICBjb25zdCBkYiA9IGF3YWl0IGNyZWF0ZSh7XG4gICAgICBzY2hlbWE6IHtcbiAgICAgICAgdGl0bGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInN0cmluZ1wiLFxuICAgICAgICBzZWFyY2hUZXh0OiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICB9KVxuICAgIGF3YWl0IGluc2VydE11bHRpcGxlKFxuICAgICAgZGIsXG4gICAgICBzb3J0ZWRBcnRpY2xlcy5tYXAoYSA9PiAoe1xuICAgICAgICB0aXRsZTogYS50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGEuZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgICAgc2VhcmNoVGV4dDogYS5zZWFyY2hUZXh0LFxuICAgICAgfSkpLFxuICAgIClcbiAgICBkYlJlZi5jdXJyZW50ID0gZGJcbiAgICByZXR1cm4gZGJcbiAgfSwgW10pXG5cbiAgY29uc3QgdG9SZXN1bHQgPSB1c2VDYWxsYmFjayhcbiAgICAoYXJ0aWNsZTogKHR5cGVvZiBzb3J0ZWRBcnRpY2xlcylbbnVtYmVyXSwgdGVybTogc3RyaW5nKTogU2VhcmNoUmVzdWx0ID0+ICh7XG4gICAgICB0aXRsZTogYXJ0aWNsZS50aXRsZSxcbiAgICAgIHBhdGg6IGFydGljbGUucGF0aCxcbiAgICAgIGljb246IGFydGljbGUuaWNvbixcbiAgICAgIHNuaXBwZXQ6IHRlcm1cbiAgICAgICAgPyBleHRyYWN0U25pcHBldChhcnRpY2xlLnNlYXJjaFRleHQsIHRlcm0pXG4gICAgICAgIDogKGFydGljbGUuZGVzY3JpcHRpb24gPz8gXCJcIiksXG4gICAgICBncm91cDogZ3JvdXBGb3IoYXJ0aWNsZS5wYXRoKSxcbiAgICB9KSxcbiAgICBbXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh0ZXJtOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldFF1ZXJ5KHRlcm0pXG4gICAgICBpZiAoIXRlcm0udHJpbSgpKSB7XG4gICAgICAgIHNldFJlc3VsdHMoW10pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgZGIgPSBhd2FpdCBlbnN1cmVJbmRleCgpXG4gICAgICBjb25zdCBoaXRzID0gYXdhaXQgc2VhcmNoKGRiLCB7XG4gICAgICAgIHRlcm0sXG4gICAgICAgIHByb3BlcnRpZXM6IFtcInRpdGxlXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJzZWFyY2hUZXh0XCJdLFxuICAgICAgICB0b2xlcmFuY2U6IDEsXG4gICAgICAgIGJvb3N0OiB7IHRpdGxlOiAzLCBkZXNjcmlwdGlvbjogMiB9LFxuICAgICAgfSlcbiAgICAgIHNldFJlc3VsdHMoXG4gICAgICAgIGhpdHMuaGl0cy5tYXAoaGl0ID0+IHtcbiAgICAgICAgICBjb25zdCBhcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChcbiAgICAgICAgICAgIGEgPT4gYS50aXRsZSA9PT0gaGl0LmRvY3VtZW50LnRpdGxlLFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAoIWFydGljbGUpXG4gICAgICAgICAgICByZXR1cm4gdG9SZXN1bHQoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5zb3J0ZWRBcnRpY2xlc1swXSxcbiAgICAgICAgICAgICAgICB0aXRsZTogaGl0LmRvY3VtZW50LnRpdGxlLFxuICAgICAgICAgICAgICAgIHBhdGg6IFwiXCIsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGV4dDogaGl0LmRvY3VtZW50LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBoaXQuZG9jdW1lbnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgaWNvbjogXCJcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdGVybSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm4gdG9SZXN1bHQoYXJ0aWNsZSwgdGVybSlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSxcbiAgICBbZW5zdXJlSW5kZXgsIHRvUmVzdWx0XSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIHByb3BzLm9uT3BlbkNoYW5nZShmYWxzZSlcbiAgICAgIHNldFF1ZXJ5KFwiXCIpXG4gICAgICBzZXRSZXN1bHRzKFtdKVxuICAgICAgbmF2aWdhdGUoe1xuICAgICAgICB0bzogXCIvJFwiLFxuICAgICAgICBwYXJhbXM6IHsgX3NwbGF0OiBwYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSB9LFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtuYXZpZ2F0ZSwgcHJvcHMub25PcGVuQ2hhbmdlXSxcbiAgKVxuXG4gIGNvbnN0IGdyb3VwZWQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPHN0cmluZywgU2VhcmNoUmVzdWx0W10+KClcbiAgICBmb3IgKGNvbnN0IHIgb2YgcmVzdWx0cykge1xuICAgICAgY29uc3QgbGlzdCA9IGdyb3Vwcy5nZXQoci5ncm91cCkgPz8gW11cbiAgICAgIGxpc3QucHVzaChyKVxuICAgICAgZ3JvdXBzLnNldChyLmdyb3VwLCBsaXN0KVxuICAgIH1cbiAgICByZXR1cm4gZ3JvdXBzXG4gIH0sIFtyZXN1bHRzXSlcblxuICByZXR1cm4gKFxuICAgIDxDb21tYW5kRGlhbG9nXG4gICAgICB0aXRsZT1cIlNlYXJjaFwiXG4gICAgICBkZXNjcmlwdGlvbj1cIlNlYXJjaCBkb2N1bWVudGF0aW9uXCJcbiAgICAgIG9wZW49e3Byb3BzLm9wZW59XG4gICAgICBvbk9wZW5DaGFuZ2U9e3Byb3BzLm9uT3BlbkNoYW5nZX1cbiAgICAgIHNob3VsZEZpbHRlcj17ZmFsc2V9XG4gICAgICBsb29wXG4gICAgPlxuICAgICAgPENvbW1hbmRJbnB1dFxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBkb2NzLi4uXCJcbiAgICAgICAgdmFsdWU9e3F1ZXJ5fVxuICAgICAgICBvblZhbHVlQ2hhbmdlPXtoYW5kbGVTZWFyY2h9XG4gICAgICAgIG9uQ2xlYXI9eygpID0+IGhhbmRsZVNlYXJjaChcIlwiKX1cbiAgICAgIC8+XG4gICAgICA8Q29tbWFuZExpc3QgY2xhc3NOYW1lPVwibWF4LWgtODBcIj5cbiAgICAgICAgPENvbW1hbmRFbXB0eT5cbiAgICAgICAgICB7cXVlcnkudHJpbSgpXG4gICAgICAgICAgICA/IFwiTm8gcmVzdWx0cyBmb3VuZC5cIlxuICAgICAgICAgICAgOiBcIlR5cGUgdG8gc2VhcmNoIGFjcm9zcyBhbGwgZG9jdW1lbnRhdGlvbi5cIn1cbiAgICAgICAgPC9Db21tYW5kRW1wdHk+XG4gICAgICAgIHtbLi4uZ3JvdXBlZC5lbnRyaWVzKCldLm1hcCgoW2dyb3VwLCBpdGVtc10pID0+IChcbiAgICAgICAgICA8Q29tbWFuZEdyb3VwIGtleT17Z3JvdXB9IGhlYWRpbmc9e2dyb3VwfT5cbiAgICAgICAgICAgIHtpdGVtcy5tYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgSWNvbiA9IGFydGljbGVJY29uc1tyZXN1bHQuaWNvbl0gPz8gRmlsZVRleHRcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Q29tbWFuZEl0ZW1cbiAgICAgICAgICAgICAgICAgIGtleT17cmVzdWx0LnBhdGh9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17cmVzdWx0LnBhdGh9XG4gICAgICAgICAgICAgICAgICBvblNlbGVjdD17KCkgPT4gaGFuZGxlU2VsZWN0KHJlc3VsdC5wYXRoKX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInB5LTIuNVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEljb24gY2xhc3NOYW1lPVwic2l6ZS01IHNocmluay0wIG10LTAuNSBzZWxmLXN0YXJ0IG9wYWNpdHktNjBcIiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0wLjUgbWluLXctMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWJhc2UgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICB7cmVzdWx0LnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIHtyZXN1bHQuc25pcHBldCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgbGluZS1jbGFtcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SGlnaGxpZ2h0ZWRUZXh0IHRleHQ9e3Jlc3VsdC5zbmlwcGV0fSB0ZXJtPXtxdWVyeX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L0NvbW1hbmRJdGVtPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L0NvbW1hbmRHcm91cD5cbiAgICAgICAgKSl9XG4gICAgICA8L0NvbW1hbmRMaXN0PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCBib3JkZXItdCBtdC0yIHB4LTQgcHktMi41IHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzTmFtZT1cInJvdW5kZWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgcHgtMS41IHB5LTAuNSB0ZXh0LXhzIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAg4oaR4oaTXG4gICAgICAgICAgPC9rYmQ+XG4gICAgICAgICAgbmF2aWdhdGVcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCI+XG4gICAgICAgICAgPGtiZCBjbGFzc05hbWU9XCJyb3VuZGVkIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLW11dGVkIHB4LTEuNSBweS0wLjUgdGV4dC14cyBmb250LW1vbm9cIj5cbiAgICAgICAgICAgIOKGtVxuICAgICAgICAgIDwva2JkPlxuICAgICAgICAgIHNlbGVjdFxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzTmFtZT1cInJvdW5kZWQgYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctbXV0ZWQgcHgtMS41IHB5LTAuNSB0ZXh0LXhzIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgZXNjXG4gICAgICAgICAgPC9rYmQ+XG4gICAgICAgICAgY2xvc2VcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9Db21tYW5kRGlhbG9nPlxuICApXG59XG5cbmZ1bmN0aW9uIGdyb3VwRm9yKHBhdGhuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIikuc3BsaXQoXCIvXCIpXG4gIGlmIChzZWdtZW50cy5sZW5ndGggPD0gMikgcmV0dXJuIFwiUGFnZXNcIlxuICByZXR1cm4gc2VnbWVudHNcbiAgICAuc2xpY2UoMSwgLTEpXG4gICAgLm1hcChzID0+XG4gICAgICBzXG4gICAgICAgIC5zcGxpdChcIi1cIilcbiAgICAgICAgLm1hcCh3ID0+IHcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3LnNsaWNlKDEpKVxuICAgICAgICAuam9pbihcIiBcIiksXG4gICAgKVxuICAgIC5qb2luKFwiIOKAuiBcIilcbn1cblxuZnVuY3Rpb24gZXh0cmFjdFNuaXBwZXQodGV4dDogc3RyaW5nLCB0ZXJtOiBzdHJpbmcpIHtcbiAgY29uc3QgbG93ZXIgPSB0ZXh0LnRvTG93ZXJDYXNlKClcbiAgY29uc3QgaWR4ID0gbG93ZXIuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gdGV4dC5zbGljZSgwLCAxMjApXG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgaWR4IC0gNDApXG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKHRleHQubGVuZ3RoLCBpZHggKyB0ZXJtLmxlbmd0aCArIDgwKVxuICBjb25zdCBwcmVmaXggPSBzdGFydCA+IDAgPyBcIuKAplwiIDogXCJcIlxuICBjb25zdCBzdWZmaXggPSBlbmQgPCB0ZXh0Lmxlbmd0aCA/IFwi4oCmXCIgOiBcIlwiXG4gIHJldHVybiBgJHtwcmVmaXh9JHt0ZXh0LnNsaWNlKHN0YXJ0LCBlbmQpfSR7c3VmZml4fWBcbn1cblxuZnVuY3Rpb24gSGlnaGxpZ2h0ZWRUZXh0KHByb3BzOiB7IHRleHQ6IHN0cmluZzsgdGVybTogc3RyaW5nIH0pIHtcbiAgaWYgKCFwcm9wcy50ZXJtLnRyaW0oKSkgcmV0dXJuIDw+e3Byb3BzLnRleHR9PC8+XG4gIGNvbnN0IGVzY2FwZWQgPSBwcm9wcy50ZXJtLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKVxuICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYCgke2VzY2FwZWR9KWAsIFwiZ2lcIilcbiAgY29uc3QgcGFydHMgPSBwcm9wcy50ZXh0LnNwbGl0KHJlZ2V4KVxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7cGFydHMubWFwKChwYXJ0LCBpKSA9PlxuICAgICAgICByZWdleC50ZXN0KHBhcnQpID8gKFxuICAgICAgICAgIDxzcGFuIGtleT17aX0gY2xhc3NOYW1lPVwidGV4dC1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICB7cGFydH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgcGFydFxuICAgICAgICApLFxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ export declare function Section(props: {
2
+ children: React.ReactNode;
3
+ className?: string;
4
+ id?: string;
5
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from "../utils/style.js";
3
+ import { useInView } from "../hooks/in-view.js";
4
+ export function Section(props) {
5
+ const { ref, isVisible } = useInView();
6
+ return (_jsx("section", { ref: ref, id: props.id, className: cn("py-16 md:py-24 transition-all duration-700", isVisible ? "opacity-100 translate-y-0" : "opacity-0 translate-y-8", props.className), children: props.children }));
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NlY3Rpb24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBRS9DLE1BQU0sVUFBVSxPQUFPLENBQUMsS0FJdkI7SUFDQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFBO0lBRXRDLE9BQU8sQ0FDTCxrQkFDRSxHQUFHLEVBQUUsR0FBRyxFQUNSLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUNaLFNBQVMsRUFBRSxFQUFFLENBQ1gsNENBQTRDLEVBQzVDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixFQUNuRSxLQUFLLENBQUMsU0FBUyxDQUNoQixZQUVBLEtBQUssQ0FBQyxRQUFRLEdBQ1AsQ0FDWCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNuIH0gZnJvbSBcIi4uL3V0aWxzL3N0eWxlLnRzXCJcbmltcG9ydCB7IHVzZUluVmlldyB9IGZyb20gXCIuLi9ob29rcy9pbi12aWV3LnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIFNlY3Rpb24ocHJvcHM6IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgaWQ/OiBzdHJpbmdcbn0pIHtcbiAgY29uc3QgeyByZWYsIGlzVmlzaWJsZSB9ID0gdXNlSW5WaWV3KClcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uXG4gICAgICByZWY9e3JlZn1cbiAgICAgIGlkPXtwcm9wcy5pZH1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwicHktMTYgbWQ6cHktMjQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tNzAwXCIsXG4gICAgICAgIGlzVmlzaWJsZSA/IFwib3BhY2l0eS0xMDAgdHJhbnNsYXRlLXktMFwiIDogXCJvcGFjaXR5LTAgdHJhbnNsYXRlLXktOFwiLFxuICAgICAgICBwcm9wcy5jbGFzc05hbWUsXG4gICAgICApfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L3NlY3Rpb24+XG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export declare function SectionHeader(props: {
2
+ label?: string;
3
+ title: string;
4
+ subtitle?: string;
5
+ className?: string;
6
+ align?: "left" | "center";
7
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cn } from "../utils/style.js";
3
+ export function SectionHeader(props) {
4
+ const align = props.align ?? "center";
5
+ return (_jsxs("div", { className: cn(align === "center" && "text-center", "mb-12", props.className), children: [props.label && (_jsx("p", { className: "text-primary text-xs uppercase tracking-[0.2em] font-medium mb-3", children: props.label })), _jsx("h2", { className: "font-serif text-3xl md:text-4xl lg:text-5xl font-semibold italic mb-4", children: props.title }), props.subtitle && (_jsx("p", { className: "text-muted-foreground text-lg max-w-2xl mx-auto", children: props.subtitle }))] }));
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdGlvbkhlYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NlY3Rpb25IZWFkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFdEMsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQU03QjtJQUNDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFBO0lBRXJDLE9BQU8sQ0FDTCxlQUNFLFNBQVMsRUFBRSxFQUFFLENBQ1gsS0FBSyxLQUFLLFFBQVEsSUFBSSxhQUFhLEVBQ25DLE9BQU8sRUFDUCxLQUFLLENBQUMsU0FBUyxDQUNoQixhQUVBLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FDZCxZQUFHLFNBQVMsRUFBQyxrRUFBa0UsWUFDNUUsS0FBSyxDQUFDLEtBQUssR0FDVixDQUNMLEVBQ0QsYUFBSSxTQUFTLEVBQUMsdUVBQXVFLFlBQ2xGLEtBQUssQ0FBQyxLQUFLLEdBQ1QsRUFDSixLQUFLLENBQUMsUUFBUSxJQUFJLENBQ2pCLFlBQUcsU0FBUyxFQUFDLGlEQUFpRCxZQUMzRCxLQUFLLENBQUMsUUFBUSxHQUNiLENBQ0wsSUFDRyxDQUNQLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY24gfSBmcm9tIFwiLi4vdXRpbHMvc3R5bGUudHNcIlxuXG5leHBvcnQgZnVuY3Rpb24gU2VjdGlvbkhlYWRlcihwcm9wczoge1xuICBsYWJlbD86IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIHN1YnRpdGxlPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIlxufSkge1xuICBjb25zdCBhbGlnbiA9IHByb3BzLmFsaWduID8/IFwiY2VudGVyXCJcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGFsaWduID09PSBcImNlbnRlclwiICYmIFwidGV4dC1jZW50ZXJcIixcbiAgICAgICAgXCJtYi0xMlwiLFxuICAgICAgICBwcm9wcy5jbGFzc05hbWUsXG4gICAgICApfVxuICAgID5cbiAgICAgIHtwcm9wcy5sYWJlbCAmJiAoXG4gICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtcHJpbWFyeSB0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIGZvbnQtbWVkaXVtIG1iLTNcIj5cbiAgICAgICAgICB7cHJvcHMubGFiZWx9XG4gICAgICAgIDwvcD5cbiAgICAgICl9XG4gICAgICA8aDIgY2xhc3NOYW1lPVwiZm9udC1zZXJpZiB0ZXh0LTN4bCBtZDp0ZXh0LTR4bCBsZzp0ZXh0LTV4bCBmb250LXNlbWlib2xkIGl0YWxpYyBtYi00XCI+XG4gICAgICAgIHtwcm9wcy50aXRsZX1cbiAgICAgIDwvaDI+XG4gICAgICB7cHJvcHMuc3VidGl0bGUgJiYgKFxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1sZyBtYXgtdy0yeGwgbXgtYXV0b1wiPlxuICAgICAgICAgIHtwcm9wcy5zdWJ0aXRsZX1cbiAgICAgICAgPC9wPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ /** Application sidebar shell: header, body slot picked by section.type, footer */
2
+ export declare function Sidebar(props: {
3
+ withSidebar?: boolean;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Link, useLocation, useMatch } from "@tanstack/react-router";
3
+ import { useHotkey } from "@tanstack/react-hotkeys";
4
+ import { currentSection } from "../content/article.js";
5
+ import { Sidebar as SidebarRoot, SidebarContent, SidebarFooter, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarRail, useSidebar, } from "../elements/sidebar.js";
6
+ import { Search } from "./Search.js";
7
+ import { SidebarArticles } from "./SidebarArticles.js";
8
+ import { SidebarLinks } from "./SidebarLinks.js";
9
+ import { SidebarPosts } from "./SidebarPosts.js";
10
+ import { SidebarReleases } from "./SidebarReleases.js";
11
+ import { SidebarSections } from "./SidebarSections.js";
12
+ import { SiteTitle } from "./SiteTitle.js";
13
+ import { Theme } from "./Theme.js";
14
+ /** Application sidebar shell: header, body slot picked by section.type, footer */
15
+ export function Sidebar(props) {
16
+ const pathname = useLocation({ select: l => l.pathname });
17
+ const articleRoute = useMatch({ from: "/$", shouldThrow: false });
18
+ const { toggleSidebar } = useSidebar();
19
+ useHotkey("S", toggleSidebar);
20
+ const section = articleRoute
21
+ ? currentSection(`/${pathname.replace(/^\/|\/$/g, "")}/`)
22
+ : undefined;
23
+ return (_jsxs(SidebarRoot, { children: [
24
+ _jsx(SidebarHeader, { children: _jsx(SidebarMenu, { children: _jsx(SidebarMenuItem, { children: _jsx(SidebarMenuButton, { size: "lg", render: _jsx(Link, { to: "/" }), children: _jsx(SiteTitle, {}) }) }) }) }), _jsxs(SidebarContent, { children: [
25
+ _jsx(SidebarSections, {}), props.withSidebar && section?.type === "blog" && _jsx(SidebarPosts, {}), props.withSidebar && section?.type === "changelog" && (_jsx(SidebarReleases, {})), props.withSidebar &&
26
+ section?.type !== "blog" &&
27
+ section?.type !== "changelog" && _jsx(SidebarArticles, {}), _jsx(SidebarLinks, {})
28
+ ] }), _jsxs(SidebarFooter, { className: "p-4 space-y-2", children: [
29
+ _jsx(Search, {}), _jsx(Theme, {})
30
+ ] }), _jsx(SidebarRail, {})
31
+ ] }));
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL1NpZGViYXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3RELE9BQU8sRUFDTCxPQUFPLElBQUksV0FBVyxFQUN0QixjQUFjLEVBQ2QsYUFBYSxFQUNiLGFBQWEsRUFDYixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixXQUFXLEVBQ1gsVUFBVSxHQUNYLE1BQU0sd0JBQXlCLENBQUE7QUFDaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWMsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXVCLENBQUE7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFvQixDQUFBO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBb0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXVCLENBQUE7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUF1QixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBaUIsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBYSxDQUFBO0FBRW5DLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWdDO0lBQ3RELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDakUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFBO0lBRXRDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFFN0IsTUFBTSxPQUFPLEdBQUcsWUFBWTtRQUMxQixDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN6RCxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRWIsT0FBTyxDQUNMLE1BQUMsV0FBVztZQUNWLEtBQUMsYUFBYSxjQUNaLEtBQUMsV0FBVyxjQUNWLEtBQUMsZUFBZSxjQUNkLEtBQUMsaUJBQWlCLElBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUUsS0FBQyxJQUFJLElBQUMsRUFBRSxFQUFDLEdBQUcsR0FBRyxZQUNsRCxLQUFDLFNBQVMsS0FBRyxHQUNLLEdBQ0osR0FDTixHQUNBLEVBQ2hCLE1BQUMsY0FBYztvQkFDYixLQUFDLGVBQWUsS0FBRyxFQUNsQixLQUFLLENBQUMsV0FBVyxJQUFJLE9BQU8sRUFBRSxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUMsWUFBWSxLQUFHLEVBQ2pFLEtBQUssQ0FBQyxXQUFXLElBQUksT0FBTyxFQUFFLElBQUksS0FBSyxXQUFXLElBQUksQ0FDckQsS0FBQyxlQUFlLEtBQUcsQ0FDcEIsRUFDQSxLQUFLLENBQUMsV0FBVzt3QkFDaEIsT0FBTyxFQUFFLElBQUksS0FBSyxNQUFNO3dCQUN4QixPQUFPLEVBQUUsSUFBSSxLQUFLLFdBQVcsSUFBSSxLQUFDLGVBQWUsS0FBRyxFQUN0RCxLQUFDLFlBQVksS0FBRztvQkFDRCxFQUNqQixNQUFDLGFBQWEsSUFBQyxTQUFTLEVBQUMsZUFBZTtvQkFDdEMsS0FBQyxNQUFNLEtBQUcsRUFDVixLQUFDLEtBQUssS0FBRztvQkFDSyxFQUNoQixLQUFDLFdBQVcsS0FBRztZQUNILENBQ2YsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaW5rLCB1c2VMb2NhdGlvbiwgdXNlTWF0Y2ggfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyB1c2VIb3RrZXkgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LWhvdGtleXNcIlxuaW1wb3J0IHsgY3VycmVudFNlY3Rpb24gfSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7XG4gIFNpZGViYXIgYXMgU2lkZWJhclJvb3QsXG4gIFNpZGViYXJDb250ZW50LFxuICBTaWRlYmFyRm9vdGVyLFxuICBTaWRlYmFySGVhZGVyLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbiAgU2lkZWJhclJhaWwsXG4gIHVzZVNpZGViYXIsXG59IGZyb20gXCIuLi9lbGVtZW50cy9zaWRlYmFyLnRzeFwiXG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2gudHN4XCJcbmltcG9ydCB7IFNpZGViYXJBcnRpY2xlcyB9IGZyb20gXCIuL1NpZGViYXJBcnRpY2xlcy50c3hcIlxuaW1wb3J0IHsgU2lkZWJhckxpbmtzIH0gZnJvbSBcIi4vU2lkZWJhckxpbmtzLnRzeFwiXG5pbXBvcnQgeyBTaWRlYmFyUG9zdHMgfSBmcm9tIFwiLi9TaWRlYmFyUG9zdHMudHN4XCJcbmltcG9ydCB7IFNpZGViYXJSZWxlYXNlcyB9IGZyb20gXCIuL1NpZGViYXJSZWxlYXNlcy50c3hcIlxuaW1wb3J0IHsgU2lkZWJhclNlY3Rpb25zIH0gZnJvbSBcIi4vU2lkZWJhclNlY3Rpb25zLnRzeFwiXG5pbXBvcnQgeyBTaXRlVGl0bGUgfSBmcm9tIFwiLi9TaXRlVGl0bGUudHN4XCJcbmltcG9ydCB7IFRoZW1lIH0gZnJvbSBcIi4vVGhlbWUudHN4XCJcblxuLyoqIEFwcGxpY2F0aW9uIHNpZGViYXIgc2hlbGw6IGhlYWRlciwgYm9keSBzbG90IHBpY2tlZCBieSBzZWN0aW9uLnR5cGUsIGZvb3RlciAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXIocHJvcHM6IHsgd2l0aFNpZGViYXI/OiBib29sZWFuIH0pIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbih7IHNlbGVjdDogbCA9PiBsLnBhdGhuYW1lIH0pXG4gIGNvbnN0IGFydGljbGVSb3V0ZSA9IHVzZU1hdGNoKHsgZnJvbTogXCIvJFwiLCBzaG91bGRUaHJvdzogZmFsc2UgfSlcbiAgY29uc3QgeyB0b2dnbGVTaWRlYmFyIH0gPSB1c2VTaWRlYmFyKClcblxuICB1c2VIb3RrZXkoXCJTXCIsIHRvZ2dsZVNpZGViYXIpXG5cbiAgY29uc3Qgc2VjdGlvbiA9IGFydGljbGVSb3V0ZVxuICAgID8gY3VycmVudFNlY3Rpb24oYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYClcbiAgICA6IHVuZGVmaW5lZFxuXG4gIHJldHVybiAoXG4gICAgPFNpZGViYXJSb290PlxuICAgICAgPFNpZGViYXJIZWFkZXI+XG4gICAgICAgIDxTaWRlYmFyTWVudT5cbiAgICAgICAgICA8U2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uIHNpemU9XCJsZ1wiIHJlbmRlcj17PExpbmsgdG89XCIvXCIgLz59PlxuICAgICAgICAgICAgICA8U2l0ZVRpdGxlIC8+XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgPC9TaWRlYmFySGVhZGVyPlxuICAgICAgPFNpZGViYXJDb250ZW50PlxuICAgICAgICA8U2lkZWJhclNlY3Rpb25zIC8+XG4gICAgICAgIHtwcm9wcy53aXRoU2lkZWJhciAmJiBzZWN0aW9uPy50eXBlID09PSBcImJsb2dcIiAmJiA8U2lkZWJhclBvc3RzIC8+fVxuICAgICAgICB7cHJvcHMud2l0aFNpZGViYXIgJiYgc2VjdGlvbj8udHlwZSA9PT0gXCJjaGFuZ2Vsb2dcIiAmJiAoXG4gICAgICAgICAgPFNpZGViYXJSZWxlYXNlcyAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMud2l0aFNpZGViYXIgJiZcbiAgICAgICAgICBzZWN0aW9uPy50eXBlICE9PSBcImJsb2dcIiAmJlxuICAgICAgICAgIHNlY3Rpb24/LnR5cGUgIT09IFwiY2hhbmdlbG9nXCIgJiYgPFNpZGViYXJBcnRpY2xlcyAvPn1cbiAgICAgICAgPFNpZGViYXJMaW5rcyAvPlxuICAgICAgPC9TaWRlYmFyQ29udGVudD5cbiAgICAgIDxTaWRlYmFyRm9vdGVyIGNsYXNzTmFtZT1cInAtNCBzcGFjZS15LTJcIj5cbiAgICAgICAgPFNlYXJjaCAvPlxuICAgICAgICA8VGhlbWUgLz5cbiAgICAgIDwvU2lkZWJhckZvb3Rlcj5cbiAgICAgIDxTaWRlYmFyUmFpbCAvPlxuICAgIDwvU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ /** Article-tree body slot for the Sidebar shell */
2
+ export declare function SidebarArticles(): import("react/jsx-runtime").JSX.Element;