fromsrc 0.0.2 → 0.0.22

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 (408) hide show
  1. package/dist/access.d.ts +7 -7
  2. package/dist/access.js +12 -5
  3. package/dist/adapter.js +8 -16
  4. package/dist/adapterbrowser.js +6 -10
  5. package/dist/adapternext.js +7 -18
  6. package/dist/adapterreactrouter.js +5 -9
  7. package/dist/adapterremix.js +8 -17
  8. package/dist/adaptertanstack.js +6 -10
  9. package/dist/algolia.js +43 -21
  10. package/dist/analytics.d.ts +1 -1
  11. package/dist/analytics.js +16 -10
  12. package/dist/ansi.js +76 -37
  13. package/dist/api.d.ts +10 -10
  14. package/dist/api.js +14 -11
  15. package/dist/audit.d.ts +6 -6
  16. package/dist/audit.js +29 -10
  17. package/dist/autotype.js +20 -10
  18. package/dist/batch.d.ts +6 -6
  19. package/dist/batch.js +16 -9
  20. package/dist/changelog.js +28 -14
  21. package/dist/changelogutil.d.ts +4 -4
  22. package/dist/changelogutil.js +33 -13
  23. package/dist/cli.d.ts +6 -6
  24. package/dist/cli.js +7 -3
  25. package/dist/client.d.ts +1 -1
  26. package/dist/codesample.d.ts +4 -4
  27. package/dist/codesample.js +63 -24
  28. package/dist/collapse.js +31 -13
  29. package/dist/collections.js +36 -16
  30. package/dist/components/accordion.d.ts +1 -1
  31. package/dist/components/accordion.js +5 -1
  32. package/dist/components/alert.d.ts +1 -1
  33. package/dist/components/alert.js +24 -13
  34. package/dist/components/announce.js +40 -17
  35. package/dist/components/autofill.js +18 -8
  36. package/dist/components/avatar.js +4 -4
  37. package/dist/components/avatarstack.js +2 -2
  38. package/dist/components/backtotop.d.ts +1 -1
  39. package/dist/components/backtotop.js +18 -5
  40. package/dist/components/badge.js +9 -4
  41. package/dist/components/banner.js +22 -5
  42. package/dist/components/breadcrumb.js +11 -4
  43. package/dist/components/breadcrumbnav.js +37 -21
  44. package/dist/components/button.js +23 -8
  45. package/dist/components/callout.d.ts +1 -1
  46. package/dist/components/callout.js +35 -31
  47. package/dist/components/changelog.js +21 -8
  48. package/dist/components/checkbox.js +32 -19
  49. package/dist/components/code.d.ts +1 -1
  50. package/dist/components/code.js +6 -3
  51. package/dist/components/codeblock.js +157 -39
  52. package/dist/components/codecopy.d.ts +1 -1
  53. package/dist/components/codecopy.js +36 -13
  54. package/dist/components/codegroup.js +87 -25
  55. package/dist/components/collapsible.d.ts +1 -1
  56. package/dist/components/collapsible.js +5 -1
  57. package/dist/components/command.d.ts +1 -1
  58. package/dist/components/command.js +42 -15
  59. package/dist/components/compare.js +20 -8
  60. package/dist/components/content.js +121 -79
  61. package/dist/components/copybutton.d.ts +1 -1
  62. package/dist/components/copybutton.js +14 -7
  63. package/dist/components/countdown.js +9 -3
  64. package/dist/components/create.js +34 -24
  65. package/dist/components/definition.js +11 -4
  66. package/dist/components/diffview.js +63 -29
  67. package/dist/components/divider.js +5 -1
  68. package/dist/components/docheader.js +8 -1
  69. package/dist/components/doclinkcard.js +27 -3
  70. package/dist/components/dropdown.d.ts +1 -1
  71. package/dist/components/dropdown.js +32 -11
  72. package/dist/components/dynamiccode.js +5 -3
  73. package/dist/components/editlink.js +35 -23
  74. package/dist/components/embed.js +15 -7
  75. package/dist/components/endpoint.d.ts +3 -3
  76. package/dist/components/endpoint.js +24 -9
  77. package/dist/components/errormessage.d.ts +1 -1
  78. package/dist/components/errormessage.js +4 -1
  79. package/dist/components/expandcode.d.ts +1 -1
  80. package/dist/components/expandcode.js +6 -2
  81. package/dist/components/feature.js +8 -1
  82. package/dist/components/featuregrid.d.ts +4 -4
  83. package/dist/components/featuregrid.js +7 -1
  84. package/dist/components/feedback.js +11 -7
  85. package/dist/components/feedbackwidget.js +18 -12
  86. package/dist/components/files.d.ts +1 -1
  87. package/dist/components/files.js +52 -18
  88. package/dist/components/folder.d.ts +1 -1
  89. package/dist/components/folder.js +21 -4
  90. package/dist/components/footer.js +5 -1
  91. package/dist/components/formlabel.d.ts +1 -1
  92. package/dist/components/formlabel.js +31 -18
  93. package/dist/components/github.js +43 -14
  94. package/dist/components/graph.js +38 -14
  95. package/dist/components/heading.js +36 -29
  96. package/dist/components/headingcopy.js +13 -5
  97. package/dist/components/hero.js +20 -14
  98. package/dist/components/highlight.d.ts +2 -2
  99. package/dist/components/highlight.js +14 -8
  100. package/dist/components/hover.d.ts +2 -2
  101. package/dist/components/hover.js +11 -4
  102. package/dist/components/icons.js +4 -1
  103. package/dist/components/inlinetoc.js +3 -1
  104. package/dist/components/input.js +13 -3
  105. package/dist/components/install.js +34 -24
  106. package/dist/components/kbd.js +19 -11
  107. package/dist/components/langicon.d.ts +1 -1
  108. package/dist/components/langicon.js +32 -24
  109. package/dist/components/language.d.ts +1 -1
  110. package/dist/components/language.js +12 -4
  111. package/dist/components/lastupdated.d.ts +2 -2
  112. package/dist/components/lastupdated.js +36 -12
  113. package/dist/components/link.d.ts +1 -1
  114. package/dist/components/linkcard.js +3 -1
  115. package/dist/components/list.d.ts +1 -1
  116. package/dist/components/list.js +4 -1
  117. package/dist/components/math.js +33 -8
  118. package/dist/components/mermaid.js +3 -3
  119. package/dist/components/mobilenav.d.ts +2 -1
  120. package/dist/components/mobilenav.js +116 -47
  121. package/dist/components/modal.d.ts +1 -1
  122. package/dist/components/modal.js +9 -2
  123. package/dist/components/navlink.js +17 -3
  124. package/dist/components/openapi.d.ts +1 -1
  125. package/dist/components/openapi.js +102 -32
  126. package/dist/components/openapischema.d.ts +1 -1
  127. package/dist/components/openapischema.js +29 -9
  128. package/dist/components/openapitags.js +6 -2
  129. package/dist/components/pagetransition.js +5 -3
  130. package/dist/components/pagination.js +5 -4
  131. package/dist/components/panel.js +92 -16
  132. package/dist/components/playground.d.ts +1 -1
  133. package/dist/components/playground.js +153 -50
  134. package/dist/components/popover.js +9 -7
  135. package/dist/components/prelink.js +40 -9
  136. package/dist/components/prevnext.d.ts +1 -1
  137. package/dist/components/prevnext.js +36 -16
  138. package/dist/components/progress.js +2 -2
  139. package/dist/components/property.js +4 -2
  140. package/dist/components/quote.d.ts +2 -2
  141. package/dist/components/quote.js +32 -4
  142. package/dist/components/radio.js +36 -18
  143. package/dist/components/rating.js +14 -3
  144. package/dist/components/recent.d.ts +1 -1
  145. package/dist/components/recent.js +26 -10
  146. package/dist/components/responsive.js +21 -13
  147. package/dist/components/results.js +8 -4
  148. package/dist/components/screenshot.js +61 -21
  149. package/dist/components/scrollprogress.js +9 -5
  150. package/dist/components/scrollspy.d.ts +2 -2
  151. package/dist/components/scrollspy.js +9 -3
  152. package/dist/components/search.js +47 -18
  153. package/dist/components/searchbutton.js +3 -1
  154. package/dist/components/searchdialog.js +36 -23
  155. package/dist/components/searcher.d.ts +1 -1
  156. package/dist/components/searcher.js +51 -26
  157. package/dist/components/select.js +27 -13
  158. package/dist/components/shortcuts.d.ts +1 -1
  159. package/dist/components/shortcuts.js +57 -38
  160. package/dist/components/sidebar.d.ts +2 -1
  161. package/dist/components/sidebar.js +209 -64
  162. package/dist/components/sidebarfilter.d.ts +1 -1
  163. package/dist/components/sidebarfilter.js +33 -9
  164. package/dist/components/sidebarscript.d.ts +5 -0
  165. package/dist/components/sidebarscript.js +5 -0
  166. package/dist/components/skeleton.js +15 -3
  167. package/dist/components/spinner.js +13 -3
  168. package/dist/components/status.js +20 -8
  169. package/dist/components/steps.js +3 -1
  170. package/dist/components/switch.js +4 -4
  171. package/dist/components/table.js +37 -12
  172. package/dist/components/tabnav.d.ts +1 -1
  173. package/dist/components/tabnav.js +48 -36
  174. package/dist/components/tabs.d.ts +1 -1
  175. package/dist/components/tabs.js +56 -40
  176. package/dist/components/tag.js +8 -3
  177. package/dist/components/terminal.js +14 -4
  178. package/dist/components/textarea.js +96 -82
  179. package/dist/components/theme.d.ts +1 -1
  180. package/dist/components/theme.js +26 -4
  181. package/dist/components/themeprovider.d.ts +4 -4
  182. package/dist/components/themeprovider.js +16 -5
  183. package/dist/components/toast.d.ts +1 -1
  184. package/dist/components/toast.js +23 -14
  185. package/dist/components/toc/default.d.ts +1 -1
  186. package/dist/components/toc/default.js +28 -13
  187. package/dist/components/toc/hook.js +28 -14
  188. package/dist/components/toc/index.js +8 -4
  189. package/dist/components/toc/inline.js +12 -2
  190. package/dist/components/toc/minimal.js +11 -5
  191. package/dist/components/toc/zigzag.d.ts +1 -1
  192. package/dist/components/toc/zigzag.js +37 -17
  193. package/dist/components/tocprogress.d.ts +1 -1
  194. package/dist/components/tocprogress.js +66 -34
  195. package/dist/components/tooltip.d.ts +1 -1
  196. package/dist/components/tooltip.js +20 -8
  197. package/dist/components/trigger.js +13 -5
  198. package/dist/components/twoslash.js +49 -26
  199. package/dist/components/typetable.js +23 -4
  200. package/dist/components/typewriter.js +6 -2
  201. package/dist/components/version.js +40 -14
  202. package/dist/components/video.js +25 -15
  203. package/dist/components/zoom.js +6 -2
  204. package/dist/config.d.ts +2 -2
  205. package/dist/config.js +56 -30
  206. package/dist/content.d.ts +5 -5
  207. package/dist/content.js +121 -57
  208. package/dist/contentcache.d.ts +10 -10
  209. package/dist/contentcache.js +9 -5
  210. package/dist/contentdiff.d.ts +4 -4
  211. package/dist/contentdiff.js +16 -8
  212. package/dist/contributors.d.ts +4 -4
  213. package/dist/contributors.js +49 -19
  214. package/dist/diff.d.ts +6 -6
  215. package/dist/diff.js +37 -16
  216. package/dist/draft.d.ts +11 -11
  217. package/dist/draft.js +9 -5
  218. package/dist/env.js +21 -7
  219. package/dist/export.js +4 -4
  220. package/dist/frontmatter.js +11 -9
  221. package/dist/github.js +60 -30
  222. package/dist/gitsource.d.ts +1 -1
  223. package/dist/gitsource.js +16 -9
  224. package/dist/hash.d.ts +6 -6
  225. package/dist/hash.js +19 -7
  226. package/dist/highlight.d.ts +4 -4
  227. package/dist/highlight.js +34 -14
  228. package/dist/hooks/anchor.js +26 -14
  229. package/dist/hooks/arrownav.js +25 -7
  230. package/dist/hooks/async.js +3 -3
  231. package/dist/hooks/battery.js +11 -3
  232. package/dist/hooks/breakpoint.js +10 -2
  233. package/dist/hooks/clickoutside.js +10 -3
  234. package/dist/hooks/clipboard-paste.js +7 -3
  235. package/dist/hooks/clipboard.d.ts +2 -2
  236. package/dist/hooks/clipboard.js +21 -15
  237. package/dist/hooks/copy.js +11 -6
  238. package/dist/hooks/countdown.js +1 -1
  239. package/dist/hooks/counter.js +1 -1
  240. package/dist/hooks/escapekey.js +6 -1
  241. package/dist/hooks/eventlistener.js +3 -1
  242. package/dist/hooks/eventsource.js +4 -2
  243. package/dist/hooks/eyedropper.js +7 -3
  244. package/dist/hooks/favicon.js +1 -1
  245. package/dist/hooks/fetch.js +12 -4
  246. package/dist/hooks/focustrap.js +20 -8
  247. package/dist/hooks/focuswithin.js +6 -2
  248. package/dist/hooks/form.d.ts +2 -2
  249. package/dist/hooks/form.js +15 -2
  250. package/dist/hooks/fullscreen.js +1 -1
  251. package/dist/hooks/geolocation.js +8 -8
  252. package/dist/hooks/hotkeys.js +19 -7
  253. package/dist/hooks/hover.d.ts +4 -1
  254. package/dist/hooks/hover.js +3 -1
  255. package/dist/hooks/idle.js +13 -3
  256. package/dist/hooks/infinitescroll.js +4 -2
  257. package/dist/hooks/interval.js +3 -1
  258. package/dist/hooks/inview.js +7 -3
  259. package/dist/hooks/keyboard.js +36 -12
  260. package/dist/hooks/keypress.js +6 -2
  261. package/dist/hooks/list.js +11 -1
  262. package/dist/hooks/longpress.js +3 -3
  263. package/dist/hooks/map.js +1 -1
  264. package/dist/hooks/measure.js +16 -7
  265. package/dist/hooks/mediarecorder.js +7 -3
  266. package/dist/hooks/networkstate.js +4 -2
  267. package/dist/hooks/os.js +12 -4
  268. package/dist/hooks/pagination.js +6 -4
  269. package/dist/hooks/permission.js +6 -2
  270. package/dist/hooks/queue.js +4 -2
  271. package/dist/hooks/readprogress.js +6 -2
  272. package/dist/hooks/resizeobserver.js +6 -4
  273. package/dist/hooks/script.js +1 -1
  274. package/dist/hooks/scrolllock.js +6 -2
  275. package/dist/hooks/scrollspy.js +4 -2
  276. package/dist/hooks/selection.js +6 -3
  277. package/dist/hooks/share.js +18 -9
  278. package/dist/hooks/speechrecognition.js +7 -3
  279. package/dist/hooks/stepper.js +4 -4
  280. package/dist/hooks/storage.js +9 -3
  281. package/dist/hooks/stylesheet.js +4 -2
  282. package/dist/hooks/textselection.js +6 -3
  283. package/dist/hooks/throttle.js +6 -2
  284. package/dist/hooks/undoredo.js +19 -11
  285. package/dist/hooks/vibrate.js +3 -1
  286. package/dist/hooks/viewtransition.js +8 -4
  287. package/dist/hooks/wakelock.js +12 -7
  288. package/dist/hooks/websocket.js +4 -2
  289. package/dist/hooks/windowsize.js +2 -2
  290. package/dist/i18n.d.ts +2 -2
  291. package/dist/i18n.js +27 -14
  292. package/dist/index.d.ts +1 -0
  293. package/dist/index.js +1 -0
  294. package/dist/lastmodified.js +11 -5
  295. package/dist/linkcheck.d.ts +6 -6
  296. package/dist/linkcheck.js +55 -14
  297. package/dist/llms.js +20 -4
  298. package/dist/manifest.js +7 -7
  299. package/dist/mcp.js +28 -22
  300. package/dist/mdtoc.d.ts +4 -4
  301. package/dist/mdtoc.js +11 -5
  302. package/dist/mdxscope.d.ts +2 -2
  303. package/dist/mdxscope.js +3 -1
  304. package/dist/meta.js +19 -7
  305. package/dist/migrate.js +35 -25
  306. package/dist/navgen.d.ts +8 -8
  307. package/dist/navgen.js +73 -30
  308. package/dist/navtree.d.ts +1 -1
  309. package/dist/navtree.js +39 -19
  310. package/dist/oembed.d.ts +4 -4
  311. package/dist/oembed.js +24 -18
  312. package/dist/ogimage.d.ts +11 -11
  313. package/dist/ogimage.js +24 -24
  314. package/dist/openapi.js +60 -33
  315. package/dist/openapiguard.js +21 -11
  316. package/dist/openapiutil.js +66 -20
  317. package/dist/orama.js +52 -34
  318. package/dist/pipeline.d.ts +4 -4
  319. package/dist/pipeline.js +4 -4
  320. package/dist/preload.d.ts +2 -2
  321. package/dist/preload.js +4 -4
  322. package/dist/ranking.d.ts +6 -6
  323. package/dist/ranking.js +39 -13
  324. package/dist/readtime.js +3 -1
  325. package/dist/redirects.d.ts +2 -2
  326. package/dist/redirects.js +20 -12
  327. package/dist/rehype.js +16 -9
  328. package/dist/rehypeautolink.d.ts +2 -2
  329. package/dist/rehypeautolink.js +25 -23
  330. package/dist/rehypecode.js +38 -28
  331. package/dist/rehypecopy.js +17 -13
  332. package/dist/rehypeinline.js +33 -27
  333. package/dist/rehypelinks.js +28 -20
  334. package/dist/rehyperaw.js +9 -3
  335. package/dist/rehypeslug.d.ts +1 -1
  336. package/dist/rehypeslug.js +23 -19
  337. package/dist/rehypetablewrap.d.ts +2 -2
  338. package/dist/rehypetablewrap.js +9 -5
  339. package/dist/rehypetoc.d.ts +1 -1
  340. package/dist/rehypetoc.js +15 -7
  341. package/dist/remark.js +28 -13
  342. package/dist/remarkadmonition.js +40 -14
  343. package/dist/remarkannotation.d.ts +2 -2
  344. package/dist/remarkannotation.js +26 -10
  345. package/dist/remarkbadge.js +43 -31
  346. package/dist/remarkblockmath.js +29 -15
  347. package/dist/remarkcallout.js +32 -14
  348. package/dist/remarkcaption.js +28 -16
  349. package/dist/remarkcodetitle.js +29 -13
  350. package/dist/remarkcolumns.js +22 -10
  351. package/dist/remarkdetails.js +34 -14
  352. package/dist/remarkdirective.js +47 -20
  353. package/dist/remarkembed.js +38 -22
  354. package/dist/remarkfiletree.js +29 -19
  355. package/dist/remarkfootnote.js +46 -18
  356. package/dist/remarkgfm.js +13 -8
  357. package/dist/remarkheadingid.js +16 -6
  358. package/dist/remarkimage.js +54 -34
  359. package/dist/remarkinclude.js +20 -8
  360. package/dist/remarkinstall.js +20 -12
  361. package/dist/remarklinkcard.js +33 -14
  362. package/dist/remarkmath.js +34 -15
  363. package/dist/remarkmermaid.js +10 -6
  364. package/dist/remarkmeta.d.ts +2 -2
  365. package/dist/remarkmeta.js +15 -5
  366. package/dist/remarkreadingtime.d.ts +2 -2
  367. package/dist/remarkreadingtime.js +3 -1
  368. package/dist/remarksteps.js +26 -14
  369. package/dist/remarkstructure.js +16 -10
  370. package/dist/remarktabs.js +31 -14
  371. package/dist/remarktoc.js +40 -24
  372. package/dist/remarkts2js.js +51 -40
  373. package/dist/remarktwoslash.d.ts +4 -4
  374. package/dist/remarktwoslash.js +24 -14
  375. package/dist/remarkvideo.d.ts +4 -4
  376. package/dist/remarkvideo.js +42 -16
  377. package/dist/schema.d.ts +14 -14
  378. package/dist/schema.js +2 -2
  379. package/dist/search.js +106 -48
  380. package/dist/searchindex.js +86 -34
  381. package/dist/searchpolicy.js +1 -1
  382. package/dist/searchscore.js +5 -5
  383. package/dist/searchtypo.js +30 -10
  384. package/dist/seo.d.ts +2 -2
  385. package/dist/seo.js +14 -14
  386. package/dist/shortcodes.d.ts +4 -4
  387. package/dist/shortcodes.js +25 -20
  388. package/dist/sitemap.js +18 -8
  389. package/dist/snippets.js +26 -18
  390. package/dist/source.js +75 -41
  391. package/dist/stats.d.ts +4 -4
  392. package/dist/stats.js +18 -12
  393. package/dist/testing.d.ts +7 -7
  394. package/dist/testing.js +74 -29
  395. package/dist/themeutil.d.ts +6 -6
  396. package/dist/themeutil.js +145 -27
  397. package/dist/typegen.js +31 -12
  398. package/dist/validate.js +19 -7
  399. package/dist/validator.d.ts +11 -11
  400. package/dist/validator.js +68 -19
  401. package/dist/versioning.d.ts +7 -7
  402. package/dist/versioning.js +27 -11
  403. package/dist/watcher.js +39 -15
  404. package/dist/webhook.d.ts +6 -6
  405. package/dist/webhook.js +34 -12
  406. package/dist/workspace.js +26 -12
  407. package/package.json +137 -137
  408. package/styles/reset.css +1 -1
@@ -3,22 +3,26 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { useRouter } from 'next/navigation';
4
4
  import { useState, useRef, useCallback, useMemo, useEffect } from 'react';
5
5
  import { useDebounce } from '../hooks/debounce';
6
- import { useLocalStorage } from '../hooks/storage';
7
6
  import { useScrollLock } from '../hooks/scrolllock';
7
+ import { useLocalStorage } from '../hooks/storage';
8
8
  import { localSearch } from '../search';
9
9
  import { trimquery } from '../searchpolicy';
10
- import { getOptionId } from './results';
11
10
  import { Panel } from './panel';
12
- import { Trigger } from './trigger';
13
- import { useSearcher } from './searcher';
14
11
  import { getRecentOptionId } from './recent';
12
+ import { getOptionId } from './results';
13
+ import { useSearcher } from './searcher';
14
+ import { Trigger } from './trigger';
15
15
 
16
16
  function tosearchdoc(doc) {
17
- if ("content" in doc) return doc;
17
+ if ("content" in doc) {
18
+ return doc;
19
+ }
18
20
  return { ...doc, content: "" };
19
21
  }
20
22
  function iseditable(target) {
21
- if (!(target instanceof HTMLElement)) return false;
23
+ if (!(target instanceof HTMLElement)) {
24
+ return false;
25
+ }
22
26
  const tag = target.tagName;
23
27
  return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || target.isContentEditable;
24
28
  }
@@ -34,7 +38,10 @@ function Search({
34
38
  const [open, setOpen] = useState(false);
35
39
  const [query, setQuery] = useState("");
36
40
  const [selected, setSelected] = useState(0);
37
- const [recent, setRecent] = useLocalStorage("fromsrc-recent-searches", []);
41
+ const [recent, setRecent] = useLocalStorage(
42
+ "fromsrc-recent-searches",
43
+ []
44
+ );
38
45
  const [local, setLocal] = useState([]);
39
46
  const [adapterloading, setAdapterLoading] = useState(false);
40
47
  const input = useRef(null);
@@ -52,8 +59,12 @@ function Search({
52
59
  const value = useDebounce(query, debounce);
53
60
  const remote = useSearcher(endpoint, value, limit);
54
61
  const remoteResults = useMemo(() => {
55
- if (!endpoint) return [];
56
- if (value.trim() !== queryref.current.trim()) return [];
62
+ if (!endpoint) {
63
+ return [];
64
+ }
65
+ if (value.trim() !== queryref.current.trim()) {
66
+ return [];
67
+ }
57
68
  return remote.results;
58
69
  }, [endpoint, remote.results, value]);
59
70
  const results = endpoint ? remoteResults : local;
@@ -78,7 +89,9 @@ function Search({
78
89
  event.preventDefault();
79
90
  openmodal();
80
91
  }
81
- if (event.key === "Escape") setOpen(false);
92
+ if (event.key === "Escape") {
93
+ setOpen(false);
94
+ }
82
95
  };
83
96
  window.addEventListener("keydown", handler);
84
97
  return () => window.removeEventListener("keydown", handler);
@@ -94,18 +107,24 @@ function Search({
94
107
  }, [open, updatequery]);
95
108
  useEffect(() => setSelected(0), [value]);
96
109
  useEffect(() => {
97
- if (endpoint) return;
110
+ if (endpoint) {
111
+ return;
112
+ }
98
113
  const id = requestref.current + 1;
99
114
  requestref.current = id;
100
115
  const result = adapter.search(value, searchdocs, limit);
101
116
  if (result instanceof Promise) {
102
117
  setAdapterLoading(true);
103
118
  void result.then((next) => {
104
- if (requestref.current !== id) return;
119
+ if (requestref.current !== id) {
120
+ return;
121
+ }
105
122
  setLocal(next);
106
123
  setAdapterLoading(false);
107
124
  }).catch(() => {
108
- if (requestref.current !== id) return;
125
+ if (requestref.current !== id) {
126
+ return;
127
+ }
109
128
  setLocal([]);
110
129
  setAdapterLoading(false);
111
130
  });
@@ -116,7 +135,9 @@ function Search({
116
135
  }, [adapter, endpoint, limit, searchdocs, value]);
117
136
  useEffect(() => {
118
137
  const target = hasrecent ? saferecent : safe;
119
- if (target < 0 || !list.current) return;
138
+ if (target < 0 || !list.current) {
139
+ return;
140
+ }
120
141
  const id = hasrecent ? getRecentOptionId(target) : getOptionId(target);
121
142
  const option = list.current.querySelector(`#${id}`);
122
143
  option?.scrollIntoView({ block: "nearest" });
@@ -124,8 +145,12 @@ function Search({
124
145
  const save = useCallback(
125
146
  (item) => {
126
147
  const text = item.trim();
127
- if (!text) return;
128
- setRecent((items) => [text, ...items.filter((entry) => entry !== text)].slice(0, 5));
148
+ if (!text) {
149
+ return;
150
+ }
151
+ setRecent(
152
+ (items) => [text, ...items.filter((entry) => entry !== text)].slice(0, 5)
153
+ );
129
154
  },
130
155
  [setRecent]
131
156
  );
@@ -168,7 +193,9 @@ function Search({
168
193
  return;
169
194
  }
170
195
  }
171
- if (results.length === 0) return;
196
+ if (results.length === 0) {
197
+ return;
198
+ }
172
199
  if (event.key === "ArrowDown") {
173
200
  event.preventDefault();
174
201
  setSelected((item) => Math.min(item + 1, results.length - 1));
@@ -202,7 +229,9 @@ function Search({
202
229
  [hasrecent, navigate, recent, results, safe, saferecent, updatequery]
203
230
  );
204
231
  if (!open) {
205
- if (hidden) return null;
232
+ if (hidden) {
233
+ return null;
234
+ }
206
235
  return /* @__PURE__ */ jsx(Trigger, { onOpen: openmodal });
207
236
  }
208
237
  return /* @__PURE__ */ jsx(
@@ -11,7 +11,9 @@ const SearchButton = memo(function SearchButton2({
11
11
  useEffect(() => {
12
12
  const ua = navigator.userAgentData;
13
13
  const platform = ua?.platform ?? navigator.platform ?? "";
14
- if (/mac/i.test(platform)) setModifier("\u2318");
14
+ if (/mac/i.test(platform)) {
15
+ setModifier("\u2318");
16
+ }
15
17
  }, []);
16
18
  return /* @__PURE__ */ jsxs(
17
19
  "button",
@@ -23,7 +23,9 @@ const SearchDialog = memo(function SearchDialog2({
23
23
  return;
24
24
  }
25
25
  const handler = (e) => {
26
- if (e.key === "Escape") onClose();
26
+ if (e.key === "Escape") {
27
+ onClose();
28
+ }
27
29
  };
28
30
  window.addEventListener("keydown", handler);
29
31
  requestAnimationFrame(() => inputRef.current?.focus());
@@ -39,32 +41,43 @@ const SearchDialog = memo(function SearchDialog2({
39
41
  },
40
42
  [onSearch]
41
43
  );
42
- const handleInputKey = useCallback((e) => {
43
- if (!results || results.length === 0) return;
44
- if (e.key === "ArrowDown") {
45
- e.preventDefault();
46
- setActive((prev) => Math.min(results.length - 1, prev + 1));
47
- return;
48
- }
49
- if (e.key === "ArrowUp") {
50
- e.preventDefault();
51
- setActive((prev) => Math.max(-1, prev - 1));
52
- return;
53
- }
54
- if (e.key === "Enter" && active >= 0) {
55
- e.preventDefault();
56
- const item = results[active];
57
- if (!item) return;
58
- window.location.href = item.href;
59
- }
60
- }, [active, results]);
44
+ const handleInputKey = useCallback(
45
+ (e) => {
46
+ if (!results || results.length === 0) {
47
+ return;
48
+ }
49
+ if (e.key === "ArrowDown") {
50
+ e.preventDefault();
51
+ setActive((prev) => Math.min(results.length - 1, prev + 1));
52
+ return;
53
+ }
54
+ if (e.key === "ArrowUp") {
55
+ e.preventDefault();
56
+ setActive((prev) => Math.max(-1, prev - 1));
57
+ return;
58
+ }
59
+ if (e.key === "Enter" && active >= 0) {
60
+ e.preventDefault();
61
+ const item = results[active];
62
+ if (!item) {
63
+ return;
64
+ }
65
+ window.location.href = item.href;
66
+ }
67
+ },
68
+ [active, results]
69
+ );
61
70
  const handleBackdrop = useCallback(
62
71
  (e) => {
63
- if (e.target === e.currentTarget) onClose();
72
+ if (e.target === e.currentTarget) {
73
+ onClose();
74
+ }
64
75
  },
65
76
  [onClose]
66
77
  );
67
- if (!open) return null;
78
+ if (!open) {
79
+ return null;
80
+ }
68
81
  return /* @__PURE__ */ jsx(
69
82
  "div",
70
83
  {
@@ -84,7 +97,7 @@ const SearchDialog = memo(function SearchDialog2({
84
97
  className: "w-full px-4 py-3 bg-transparent text-fg text-sm placeholder:text-muted border-b border-line focus:outline-none"
85
98
  }
86
99
  ),
87
- /* @__PURE__ */ jsx("div", { className: "max-h-72 overflow-y-auto", children: loading ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted text-sm", children: "loading..." }) : results && results.length === 0 && query.trim() ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted text-sm", children: "no results" }) : results?.map((r, i) => /* @__PURE__ */ jsxs(
100
+ /* @__PURE__ */ jsx("div", { className: "max-h-72 overflow-y-auto", children: loading ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted text-sm", children: "Loading..." }) : results && results.length === 0 && query.trim() ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted text-sm", children: "No results" }) : results?.map((r, i) => /* @__PURE__ */ jsxs(
88
101
  "a",
89
102
  {
90
103
  href: r.href,
@@ -5,8 +5,8 @@ import '../schema.js';
5
5
  import '../searchscore.js';
6
6
 
7
7
  declare function useSearcher(endpoint: string | undefined, query: string, limit: number): {
8
- results: SearchResult[];
9
8
  loading: boolean;
9
+ results: SearchResult[];
10
10
  };
11
11
 
12
12
  export { useSearcher };
@@ -5,13 +5,13 @@ import { normalizequery, trimquery } from '../searchpolicy';
5
5
 
6
6
  const schema = z.array(
7
7
  z.object({
8
- slug: z.string(),
9
- title: z.string(),
10
- description: z.string().optional(),
11
- snippet: z.string().optional(),
12
8
  anchor: z.string().optional(),
9
+ description: z.string().optional(),
13
10
  heading: z.string().optional(),
14
- score: z.number()
11
+ score: z.number(),
12
+ slug: z.string(),
13
+ snippet: z.string().optional(),
14
+ title: z.string()
15
15
  })
16
16
  );
17
17
  const ttl = 1e3 * 60 * 5;
@@ -23,7 +23,9 @@ function key(endpoint, query, limit) {
23
23
  }
24
24
  function getCache(key2) {
25
25
  const value = store.get(key2);
26
- if (!value) return null;
26
+ if (!value) {
27
+ return null;
28
+ }
27
29
  if (Date.now() - value.at >= ttl) {
28
30
  store.delete(key2);
29
31
  return null;
@@ -34,16 +36,16 @@ function getCache(key2) {
34
36
  }
35
37
  function convert(rows) {
36
38
  return rows.map((row) => ({
39
+ anchor: row.anchor,
37
40
  doc: {
38
- slug: row.slug,
39
- title: row.title,
41
+ content: "",
40
42
  description: row.description,
41
- content: ""
43
+ slug: row.slug,
44
+ title: row.title
42
45
  },
43
- snippet: row.snippet,
44
- anchor: row.anchor,
45
46
  heading: row.heading,
46
- score: row.score
47
+ score: row.score,
48
+ snippet: row.snippet
47
49
  }));
48
50
  }
49
51
  function saveWithEtag(key2, value, etag) {
@@ -52,24 +54,37 @@ function saveWithEtag(key2, value, etag) {
52
54
  }
53
55
  if (store.size >= max) {
54
56
  const oldest = store.keys().next().value;
55
- if (oldest) store.delete(oldest);
57
+ if (oldest) {
58
+ store.delete(oldest);
59
+ }
56
60
  }
57
- store.set(key2, { at: Date.now(), results: value, etag });
61
+ store.set(key2, { at: Date.now(), etag, results: value });
58
62
  }
59
63
  async function load(endpoint, query, limit, stale, signal) {
60
- const params = new URLSearchParams({ q: trimquery(query), limit: String(limit) });
64
+ const params = new URLSearchParams({
65
+ limit: String(limit),
66
+ q: trimquery(query)
67
+ });
61
68
  const response = await fetch(`${endpoint}?${params}`, {
62
- signal,
63
- headers: stale?.etag ? { "If-None-Match": stale.etag } : void 0
69
+ headers: stale?.etag ? { "If-None-Match": stale.etag } : void 0,
70
+ signal
64
71
  });
65
- if (response.status === 304) return stale?.results ?? [];
72
+ if (response.status === 304) {
73
+ return stale?.results ?? [];
74
+ }
66
75
  if (!response.ok) {
67
- if (response.status === 400) return [];
76
+ if (response.status === 400) {
77
+ return [];
78
+ }
68
79
  throw new Error("search request failed");
69
80
  }
70
81
  const json = await response.json();
71
82
  const value = convert(schema.parse(json));
72
- saveWithEtag(key(endpoint, query, limit), value, response.headers.get("etag") ?? void 0);
83
+ saveWithEtag(
84
+ key(endpoint, query, limit),
85
+ value,
86
+ response.headers.get("etag") ?? void 0
87
+ );
73
88
  return value;
74
89
  }
75
90
  function useSearcher(endpoint, query, limit) {
@@ -97,25 +112,35 @@ function useSearcher(endpoint, query, limit) {
97
112
  const controller = new AbortController();
98
113
  setLoading(true);
99
114
  const request = inflight.get(cachekey) ?? load(endpoint, text, limit, stale, controller.signal);
100
- if (!inflight.has(cachekey)) inflight.set(cachekey, request);
115
+ if (!inflight.has(cachekey)) {
116
+ inflight.set(cachekey, request);
117
+ }
101
118
  request.then((value) => {
102
- if (!active) return;
119
+ if (!active) {
120
+ return;
121
+ }
103
122
  setResults(value);
104
123
  setLoading(false);
105
124
  }).catch((error) => {
106
- if (!active) return;
107
- if (error instanceof DOMException && error.name === "AbortError") return;
125
+ if (!active) {
126
+ return;
127
+ }
128
+ if (error instanceof DOMException && error.name === "AbortError") {
129
+ return;
130
+ }
108
131
  setResults([]);
109
132
  setLoading(false);
110
133
  }).finally(() => {
111
- if (inflight.get(cachekey) === request) inflight.delete(cachekey);
134
+ if (inflight.get(cachekey) === request) {
135
+ inflight.delete(cachekey);
136
+ }
112
137
  });
113
138
  return () => {
114
139
  active = false;
115
140
  controller.abort();
116
141
  };
117
142
  }, [endpoint, query, limit]);
118
- return { results, loading };
143
+ return { loading, results };
119
144
  }
120
145
 
121
146
  export { useSearcher };
@@ -36,9 +36,14 @@ function Select({
36
36
  setIndex(-1);
37
37
  }, []);
38
38
  useClickOutside(containerRef, close, open);
39
- const isDisabled = useCallback((i) => options[i]?.disabled ?? false, [options]);
39
+ const isDisabled = useCallback(
40
+ (i) => options[i]?.disabled ?? false,
41
+ [options]
42
+ );
40
43
  function handleSelect(option) {
41
- if (option.disabled) return;
44
+ if (option.disabled) {
45
+ return;
46
+ }
42
47
  if (controlledValue === void 0) {
43
48
  setInternalValue(option.value);
44
49
  }
@@ -48,31 +53,37 @@ function Select({
48
53
  triggerRef.current?.focus();
49
54
  }
50
55
  function handleKeyDown(e) {
51
- if (disabled) return;
56
+ if (disabled) {
57
+ return;
58
+ }
52
59
  if (!open) {
53
60
  if (e.key === "Enter" || e.key === " " || e.key === "ArrowDown" || e.key === "ArrowUp") {
54
61
  setOpen(true);
55
- const currentIndex = options.findIndex((o) => o.value === value && !o.disabled);
62
+ const currentIndex = options.findIndex(
63
+ (o) => o.value === value && !o.disabled
64
+ );
56
65
  const firstEnabled = getNextIndex("Home", {
57
66
  count: options.length,
58
67
  current: -1,
59
- wrap: false,
60
- isDisabled
68
+ isDisabled,
69
+ wrap: false
61
70
  });
62
- setIndex(currentIndex >= 0 ? currentIndex : firstEnabled);
71
+ setIndex(currentIndex !== -1 ? currentIndex : firstEnabled);
63
72
  e.preventDefault();
64
73
  }
65
74
  return;
66
75
  }
67
76
  switch (e.key) {
68
- case "Escape":
77
+ case "Escape": {
69
78
  close();
70
79
  triggerRef.current?.focus();
71
80
  e.preventDefault();
72
81
  break;
73
- case "Tab":
82
+ }
83
+ case "Tab": {
74
84
  close();
75
85
  break;
86
+ }
76
87
  case "ArrowDown":
77
88
  case "ArrowUp":
78
89
  case "Home":
@@ -80,20 +91,23 @@ function Select({
80
91
  const next = getNextIndex(e.key, {
81
92
  count: options.length,
82
93
  current: index,
83
- wrap: false,
84
- isDisabled
94
+ isDisabled,
95
+ wrap: false
85
96
  });
86
- if (next !== index) setIndex(next);
97
+ if (next !== index) {
98
+ setIndex(next);
99
+ }
87
100
  e.preventDefault();
88
101
  break;
89
102
  }
90
103
  case "Enter":
91
- case " ":
104
+ case " ": {
92
105
  if (index >= 0 && options[index] && !options[index].disabled) {
93
106
  handleSelect(options[index]);
94
107
  }
95
108
  e.preventDefault();
96
109
  break;
110
+ }
97
111
  }
98
112
  }
99
113
  const activeOptionId = open && index >= 0 && options[index] ? getOptionId(options[index].value) : void 0;
@@ -11,7 +11,7 @@ interface ShortcutsProps {
11
11
  trigger?: string;
12
12
  className?: string;
13
13
  }
14
- declare function ShortcutsBase({ shortcuts, trigger, className }: ShortcutsProps): JSX.Element | null;
14
+ declare function ShortcutsBase({ shortcuts, trigger, className, }: ShortcutsProps): JSX.Element | null;
15
15
  declare const Shortcuts: react.MemoExoticComponent<typeof ShortcutsBase>;
16
16
 
17
17
  export { type ShortcutItem, Shortcuts, type ShortcutsProps };
@@ -3,13 +3,17 @@ import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { memo, useState, useCallback, useMemo } from 'react';
4
4
  import { useHotkeys } from '../hooks/hotkeys';
5
5
 
6
- function ShortcutsBase({ shortcuts, trigger = "?", className = "" }) {
6
+ function ShortcutsBase({
7
+ shortcuts,
8
+ trigger = "?",
9
+ className = ""
10
+ }) {
7
11
  const [open, setOpen] = useState(false);
8
12
  const toggle = useCallback(() => setOpen((v) => !v), []);
9
13
  const close = useCallback(() => setOpen(false), []);
10
14
  useHotkeys([
11
- { key: trigger, handler: toggle },
12
- { key: "Escape", handler: close }
15
+ { handler: toggle, key: trigger },
16
+ { handler: close, key: "Escape" }
13
17
  ]);
14
18
  const groups = useMemo(() => {
15
19
  const map = /* @__PURE__ */ new Map();
@@ -21,41 +25,56 @@ function ShortcutsBase({ shortcuts, trigger = "?", className = "" }) {
21
25
  }
22
26
  return map;
23
27
  }, [shortcuts]);
24
- if (!open) return null;
25
- return /* @__PURE__ */ jsxs("div", { className: `fixed inset-0 z-50 flex items-center justify-center bg-black/50 ${className}`, children: [
26
- /* @__PURE__ */ jsx(
27
- "button",
28
- {
29
- type: "button",
30
- className: "absolute inset-0",
31
- onClick: close,
32
- "aria-label": "close shortcuts"
33
- }
34
- ),
35
- /* @__PURE__ */ jsx(
36
- "div",
37
- {
38
- className: "relative w-full max-w-lg rounded-xl border border-line bg-surface p-6 shadow-2xl",
39
- role: "dialog",
40
- "aria-modal": "true",
41
- "aria-label": "keyboard shortcuts",
42
- children: Array.from(groups).map(([group, items]) => /* @__PURE__ */ jsxs("div", { className: "mb-4 last:mb-0", children: [
43
- /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold uppercase text-dim mb-2", children: group }),
44
- items.map((s) => /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between py-1.5", children: [
45
- /* @__PURE__ */ jsx("span", { className: "flex items-center gap-1", children: s.keys.map((k) => /* @__PURE__ */ jsx(
46
- "kbd",
47
- {
48
- className: "inline-flex items-center gap-0.5 rounded border border-line bg-surface px-1.5 py-0.5 text-xs font-mono text-muted",
49
- children: k
50
- },
51
- k
52
- )) }),
53
- /* @__PURE__ */ jsx("span", { className: "text-sm text-fg", children: s.description })
54
- ] }, s.keys.join("")))
55
- ] }, group))
56
- }
57
- )
58
- ] });
28
+ if (!open) {
29
+ return null;
30
+ }
31
+ return /* @__PURE__ */ jsxs(
32
+ "div",
33
+ {
34
+ className: `fixed inset-0 z-50 flex items-center justify-center bg-black/50 ${className}`,
35
+ children: [
36
+ /* @__PURE__ */ jsx(
37
+ "button",
38
+ {
39
+ type: "button",
40
+ className: "absolute inset-0",
41
+ onClick: close,
42
+ "aria-label": "Close shortcuts"
43
+ }
44
+ ),
45
+ /* @__PURE__ */ jsx(
46
+ "div",
47
+ {
48
+ className: "relative w-full max-w-lg rounded-xl border border-line bg-surface p-6 shadow-2xl",
49
+ role: "dialog",
50
+ "aria-modal": "true",
51
+ "aria-label": "Keyboard shortcuts",
52
+ children: [...groups].map(([group, items]) => /* @__PURE__ */ jsxs("div", { className: "mb-4 last:mb-0", children: [
53
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-semibold uppercase text-dim mb-2", children: group }),
54
+ items.map((s) => /* @__PURE__ */ jsxs(
55
+ "div",
56
+ {
57
+ className: "flex items-center justify-between py-1.5",
58
+ children: [
59
+ /* @__PURE__ */ jsx("span", { className: "flex items-center gap-1", children: s.keys.map((k) => /* @__PURE__ */ jsx(
60
+ "kbd",
61
+ {
62
+ className: "inline-flex items-center gap-0.5 rounded border border-line bg-surface px-1.5 py-0.5 text-xs font-mono text-muted",
63
+ children: k
64
+ },
65
+ k
66
+ )) }),
67
+ /* @__PURE__ */ jsx("span", { className: "text-sm text-fg", children: s.description })
68
+ ]
69
+ },
70
+ s.keys.join("")
71
+ ))
72
+ ] }, group))
73
+ }
74
+ )
75
+ ]
76
+ }
77
+ );
59
78
  }
60
79
  const Shortcuts = memo(ShortcutsBase);
61
80
 
@@ -29,7 +29,8 @@ interface Props {
29
29
  github?: string;
30
30
  collapsible?: boolean;
31
31
  defaultOpenLevel?: number;
32
+ width?: number;
32
33
  }
33
- declare function Sidebar({ title, logo, navigation, basePath, github, collapsible, defaultOpenLevel, }: Props): ReactNode;
34
+ declare function Sidebar({ title, logo, navigation, basePath, github, collapsible, defaultOpenLevel, width, }: Props): ReactNode;
34
35
 
35
36
  export { Sidebar, type SidebarFolder, type SidebarItem, type SidebarSection };