fromsrc 0.0.0 → 0.0.2
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.
- package/README.md +49 -0
- package/dist/access.d.ts +23 -0
- package/dist/access.js +54 -0
- package/dist/adapter.d.ts +31 -0
- package/dist/adapter.js +59 -0
- package/dist/adapterastro.d.ts +6 -0
- package/dist/adapterastro.js +6 -0
- package/dist/adapterbrowser.d.ts +6 -0
- package/dist/adapterbrowser.js +38 -0
- package/dist/adapternext.d.ts +6 -0
- package/dist/adapternext.js +49 -0
- package/dist/adapterreactrouter.d.ts +6 -0
- package/dist/adapterreactrouter.js +37 -0
- package/dist/adapterremix.d.ts +6 -0
- package/dist/adapterremix.js +41 -0
- package/dist/adaptertanstack.d.ts +6 -0
- package/dist/adaptertanstack.js +38 -0
- package/dist/adaptervite.d.ts +6 -0
- package/dist/adaptervite.js +6 -0
- package/dist/algolia.d.ts +16 -0
- package/dist/algolia.js +83 -0
- package/dist/analytics.d.ts +31 -0
- package/dist/analytics.js +61 -0
- package/dist/ansi.d.ts +5 -0
- package/dist/ansi.js +192 -0
- package/dist/api.d.ts +30 -0
- package/dist/api.js +75 -0
- package/dist/astro.d.ts +3 -0
- package/dist/astro.js +3 -0
- package/dist/audit.d.ts +19 -0
- package/dist/audit.js +78 -0
- package/dist/autotype.d.ts +17 -0
- package/dist/autotype.js +73 -0
- package/dist/batch.d.ts +22 -0
- package/dist/batch.js +68 -0
- package/dist/browser.d.ts +5 -0
- package/dist/browser.js +53 -0
- package/dist/changelog.d.ts +27 -0
- package/dist/changelog.js +87 -0
- package/dist/changelogutil.d.ts +20 -0
- package/dist/changelogutil.js +84 -0
- package/dist/cli.d.ts +24 -0
- package/dist/cli.js +76 -0
- package/dist/client.d.ts +212 -0
- package/dist/client.js +202 -0
- package/dist/codesample.d.ts +20 -0
- package/dist/codesample.js +115 -0
- package/dist/collapse.d.ts +5 -0
- package/dist/collapse.js +101 -0
- package/dist/collections.d.ts +32 -0
- package/dist/collections.js +82 -0
- package/dist/components/accordion.d.ts +22 -0
- package/dist/components/accordion.js +54 -0
- package/dist/components/alert.d.ts +18 -0
- package/dist/components/alert.js +30 -0
- package/dist/components/announce.d.ts +11 -0
- package/dist/components/announce.js +38 -0
- package/dist/components/autofill.d.ts +27 -0
- package/dist/components/autofill.js +152 -0
- package/dist/components/avatar.d.ts +42 -0
- package/dist/components/avatar.js +67 -0
- package/dist/components/avatarstack.d.ts +23 -0
- package/dist/components/avatarstack.js +54 -0
- package/dist/components/backtotop.d.ts +20 -0
- package/dist/components/backtotop.js +42 -0
- package/dist/components/badge.d.ts +17 -0
- package/dist/components/badge.js +25 -0
- package/dist/components/banner.d.ts +21 -0
- package/dist/components/banner.js +63 -0
- package/dist/components/breadcrumb.d.ts +25 -0
- package/dist/components/breadcrumb.js +35 -0
- package/dist/components/breadcrumbnav.d.ts +15 -0
- package/dist/components/breadcrumbnav.js +60 -0
- package/dist/components/button.d.ts +22 -0
- package/dist/components/button.js +47 -0
- package/dist/components/callout.d.ts +26 -0
- package/dist/components/callout.js +91 -0
- package/dist/components/cards.d.ts +34 -0
- package/dist/components/cards.js +24 -0
- package/dist/components/changelog.d.ts +34 -0
- package/dist/components/changelog.js +50 -0
- package/dist/components/checkbox.d.ts +26 -0
- package/dist/components/checkbox.js +80 -0
- package/dist/components/code.d.ts +27 -0
- package/dist/components/code.js +36 -0
- package/dist/components/codeblock.d.ts +12 -0
- package/dist/components/codeblock.js +102 -0
- package/dist/components/codecopy.d.ts +12 -0
- package/dist/components/codecopy.js +56 -0
- package/dist/components/codegroup.d.ts +22 -0
- package/dist/components/codegroup.js +134 -0
- package/dist/components/collapsible.d.ts +29 -0
- package/dist/components/collapsible.js +64 -0
- package/dist/components/command.d.ts +22 -0
- package/dist/components/command.js +138 -0
- package/dist/components/compare.d.ts +54 -0
- package/dist/components/compare.js +88 -0
- package/dist/components/content.d.ts +12 -0
- package/dist/components/content.js +232 -0
- package/dist/components/copyable.d.ts +25 -0
- package/dist/components/copyable.js +51 -0
- package/dist/components/copybutton.d.ts +11 -0
- package/dist/components/copybutton.js +50 -0
- package/dist/components/countdown.d.ts +18 -0
- package/dist/components/countdown.js +112 -0
- package/dist/components/create.d.ts +10 -0
- package/dist/components/create.js +149 -0
- package/dist/components/definition.d.ts +43 -0
- package/dist/components/definition.js +46 -0
- package/dist/components/diffview.d.ts +12 -0
- package/dist/components/diffview.js +129 -0
- package/dist/components/divider.d.ts +19 -0
- package/dist/components/divider.js +24 -0
- package/dist/components/docheader.d.ts +17 -0
- package/dist/components/docheader.js +24 -0
- package/dist/components/doclinkcard.d.ts +19 -0
- package/dist/components/doclinkcard.js +37 -0
- package/dist/components/docslayout.d.ts +14 -0
- package/dist/components/docslayout.js +24 -0
- package/dist/components/dropdown.d.ts +23 -0
- package/dist/components/dropdown.js +134 -0
- package/dist/components/dynamiccode.d.ts +12 -0
- package/dist/components/dynamiccode.js +40 -0
- package/dist/components/editlink.d.ts +15 -0
- package/dist/components/editlink.js +45 -0
- package/dist/components/embed.d.ts +45 -0
- package/dist/components/embed.js +85 -0
- package/dist/components/endpoint.d.ts +58 -0
- package/dist/components/endpoint.js +100 -0
- package/dist/components/errormessage.d.ts +11 -0
- package/dist/components/errormessage.js +10 -0
- package/dist/components/expandcode.d.ts +13 -0
- package/dist/components/expandcode.js +58 -0
- package/dist/components/feature.d.ts +31 -0
- package/dist/components/feature.js +58 -0
- package/dist/components/featuregrid.d.ts +17 -0
- package/dist/components/featuregrid.js +36 -0
- package/dist/components/feedback.d.ts +14 -0
- package/dist/components/feedback.js +62 -0
- package/dist/components/feedbackwidget.d.ts +14 -0
- package/dist/components/feedbackwidget.js +106 -0
- package/dist/components/files.d.ts +21 -0
- package/dist/components/files.js +133 -0
- package/dist/components/folder.d.ts +15 -0
- package/dist/components/folder.js +102 -0
- package/dist/components/footer.d.ts +16 -0
- package/dist/components/footer.js +28 -0
- package/dist/components/formlabel.d.ts +24 -0
- package/dist/components/formlabel.js +27 -0
- package/dist/components/github.d.ts +14 -0
- package/dist/components/github.js +99 -0
- package/dist/components/graph.d.ts +36 -0
- package/dist/components/graph.js +210 -0
- package/dist/components/heading.d.ts +25 -0
- package/dist/components/heading.js +82 -0
- package/dist/components/headingcopy.d.ts +3 -0
- package/dist/components/headingcopy.js +31 -0
- package/dist/components/hero.d.ts +16 -0
- package/dist/components/hero.js +28 -0
- package/dist/components/highlight.d.ts +41 -0
- package/dist/components/highlight.js +42 -0
- package/dist/components/hover.d.ts +23 -0
- package/dist/components/hover.js +79 -0
- package/dist/components/icons.d.ts +30 -0
- package/dist/components/icons.js +419 -0
- package/dist/components/inlinetoc.d.ts +19 -0
- package/dist/components/inlinetoc.js +28 -0
- package/dist/components/input.d.ts +25 -0
- package/dist/components/input.js +42 -0
- package/dist/components/install.d.ts +10 -0
- package/dist/components/install.js +149 -0
- package/dist/components/kbd.d.ts +22 -0
- package/dist/components/kbd.js +30 -0
- package/dist/components/langicon.d.ts +8 -0
- package/dist/components/langicon.js +48 -0
- package/dist/components/language.d.ts +17 -0
- package/dist/components/language.js +123 -0
- package/dist/components/lastupdated.d.ts +12 -0
- package/dist/components/lastupdated.js +44 -0
- package/dist/components/link.d.ts +14 -0
- package/dist/components/link.js +53 -0
- package/dist/components/linkcard.d.ts +33 -0
- package/dist/components/linkcard.js +50 -0
- package/dist/components/list.d.ts +50 -0
- package/dist/components/list.js +55 -0
- package/dist/components/math.d.ts +34 -0
- package/dist/components/math.js +63 -0
- package/dist/components/mermaid.d.ts +19 -0
- package/dist/components/mermaid.js +79 -0
- package/dist/components/mobilenav.d.ts +17 -0
- package/dist/components/mobilenav.js +263 -0
- package/dist/components/modal.d.ts +18 -0
- package/dist/components/modal.js +69 -0
- package/dist/components/navbar.d.ts +19 -0
- package/dist/components/navbar.js +45 -0
- package/dist/components/navlink.d.ts +14 -0
- package/dist/components/navlink.js +77 -0
- package/dist/components/note.d.ts +28 -0
- package/dist/components/note.js +60 -0
- package/dist/components/openapi.d.ts +14 -0
- package/dist/components/openapi.js +145 -0
- package/dist/components/openapischema.d.ts +13 -0
- package/dist/components/openapischema.js +51 -0
- package/dist/components/openapitags.d.ts +13 -0
- package/dist/components/openapitags.js +20 -0
- package/dist/components/pagetransition.d.ts +13 -0
- package/dist/components/pagetransition.js +37 -0
- package/dist/components/pagination.d.ts +26 -0
- package/dist/components/pagination.js +68 -0
- package/dist/components/panel.d.ts +25 -0
- package/dist/components/panel.js +75 -0
- package/dist/components/playground.d.ts +14 -0
- package/dist/components/playground.js +89 -0
- package/dist/components/popover.d.ts +18 -0
- package/dist/components/popover.js +109 -0
- package/dist/components/prelink.d.ts +10 -0
- package/dist/components/prelink.js +46 -0
- package/dist/components/prevnext.d.ts +17 -0
- package/dist/components/prevnext.js +43 -0
- package/dist/components/progress.d.ts +30 -0
- package/dist/components/progress.js +74 -0
- package/dist/components/property.d.ts +24 -0
- package/dist/components/property.js +44 -0
- package/dist/components/quote.d.ts +44 -0
- package/dist/components/quote.js +41 -0
- package/dist/components/radio.d.ts +48 -0
- package/dist/components/radio.js +140 -0
- package/dist/components/rating.d.ts +22 -0
- package/dist/components/rating.js +100 -0
- package/dist/components/readtime.d.ts +17 -0
- package/dist/components/readtime.js +26 -0
- package/dist/components/recent.d.ts +12 -0
- package/dist/components/recent.js +23 -0
- package/dist/components/responsive.d.ts +35 -0
- package/dist/components/responsive.js +73 -0
- package/dist/components/results.d.ts +20 -0
- package/dist/components/results.js +72 -0
- package/dist/components/screenshot.d.ts +33 -0
- package/dist/components/screenshot.js +52 -0
- package/dist/components/scrollprogress.d.ts +12 -0
- package/dist/components/scrollprogress.js +56 -0
- package/dist/components/scrollspy.d.ts +18 -0
- package/dist/components/scrollspy.js +51 -0
- package/dist/components/search.d.ts +19 -0
- package/dist/components/search.js +228 -0
- package/dist/components/searchbutton.d.ts +10 -0
- package/dist/components/searchbutton.js +51 -0
- package/dist/components/searchdialog.d.ts +19 -0
- package/dist/components/searchdialog.js +108 -0
- package/dist/components/searcher.d.ts +12 -0
- package/dist/components/searcher.js +121 -0
- package/dist/components/select.d.ts +39 -0
- package/dist/components/select.js +162 -0
- package/dist/components/shortcuts.d.ts +17 -0
- package/dist/components/shortcuts.js +62 -0
- package/dist/components/sidebar.d.ts +35 -0
- package/dist/components/sidebar.js +215 -0
- package/dist/components/sidebarfilter.d.ts +13 -0
- package/dist/components/sidebarfilter.js +50 -0
- package/dist/components/skeleton.d.ts +40 -0
- package/dist/components/skeleton.js +59 -0
- package/dist/components/skiplink.d.ts +12 -0
- package/dist/components/skiplink.js +21 -0
- package/dist/components/spinner.d.ts +34 -0
- package/dist/components/spinner.js +56 -0
- package/dist/components/status.d.ts +27 -0
- package/dist/components/status.js +63 -0
- package/dist/components/steps.d.ts +30 -0
- package/dist/components/steps.js +15 -0
- package/dist/components/switch.d.ts +26 -0
- package/dist/components/switch.js +79 -0
- package/dist/components/table.d.ts +36 -0
- package/dist/components/table.js +138 -0
- package/dist/components/tabnav.d.ts +30 -0
- package/dist/components/tabnav.js +199 -0
- package/dist/components/tabs.d.ts +15 -0
- package/dist/components/tabs.js +96 -0
- package/dist/components/tag.d.ts +32 -0
- package/dist/components/tag.js +38 -0
- package/dist/components/terminal.d.ts +48 -0
- package/dist/components/terminal.js +62 -0
- package/dist/components/textarea.d.ts +30 -0
- package/dist/components/textarea.js +100 -0
- package/dist/components/theme.d.ts +11 -0
- package/dist/components/theme.js +66 -0
- package/dist/components/themeprovider.d.ts +19 -0
- package/dist/components/themeprovider.js +58 -0
- package/dist/components/toast.d.ts +31 -0
- package/dist/components/toast.js +107 -0
- package/dist/components/toc/default.d.ts +21 -0
- package/dist/components/toc/default.js +100 -0
- package/dist/components/toc/hook.d.ts +13 -0
- package/dist/components/toc/hook.js +125 -0
- package/dist/components/toc/index.d.ts +15 -0
- package/dist/components/toc/index.js +44 -0
- package/dist/components/toc/inline.d.ts +20 -0
- package/dist/components/toc/inline.js +75 -0
- package/dist/components/toc/minimal.d.ts +22 -0
- package/dist/components/toc/minimal.js +136 -0
- package/dist/components/toc/zigzag.d.ts +18 -0
- package/dist/components/toc/zigzag.js +57 -0
- package/dist/components/tocprogress.d.ts +17 -0
- package/dist/components/tocprogress.js +67 -0
- package/dist/components/tooltip.d.ts +19 -0
- package/dist/components/tooltip.js +76 -0
- package/dist/components/trigger.d.ts +8 -0
- package/dist/components/trigger.js +13 -0
- package/dist/components/twoslash.d.ts +9 -0
- package/dist/components/twoslash.js +52 -0
- package/dist/components/typetable.d.ts +21 -0
- package/dist/components/typetable.js +68 -0
- package/dist/components/typewriter.d.ts +20 -0
- package/dist/components/typewriter.js +50 -0
- package/dist/components/version.d.ts +29 -0
- package/dist/components/version.js +181 -0
- package/dist/components/video.d.ts +33 -0
- package/dist/components/video.js +147 -0
- package/dist/components/zoom.d.ts +9 -0
- package/dist/components/zoom.js +110 -0
- package/dist/config.d.ts +54 -0
- package/dist/config.js +102 -0
- package/dist/content.d.ts +83 -0
- package/dist/content.js +464 -0
- package/dist/contentcache.d.ts +28 -0
- package/dist/contentcache.js +76 -0
- package/dist/contentdiff.d.ts +19 -0
- package/dist/contentdiff.js +48 -0
- package/dist/contributors.d.ts +22 -0
- package/dist/contributors.js +64 -0
- package/dist/diff.d.ts +25 -0
- package/dist/diff.js +117 -0
- package/dist/draft.d.ts +33 -0
- package/dist/draft.js +62 -0
- package/dist/env.d.ts +12 -0
- package/dist/env.js +50 -0
- package/dist/export.d.ts +9 -0
- package/dist/export.js +32 -0
- package/dist/frontmatter.d.ts +19 -0
- package/dist/frontmatter.js +65 -0
- package/dist/github.d.ts +15 -0
- package/dist/github.js +254 -0
- package/dist/gitsource.d.ts +23 -0
- package/dist/gitsource.js +50 -0
- package/dist/hash.d.ts +21 -0
- package/dist/hash.js +65 -0
- package/dist/highlight.d.ts +18 -0
- package/dist/highlight.js +90 -0
- package/dist/hooks/anchor.d.ts +7 -0
- package/dist/hooks/anchor.js +44 -0
- package/dist/hooks/arrownav.d.ts +11 -0
- package/dist/hooks/arrownav.js +49 -0
- package/dist/hooks/async.d.ts +9 -0
- package/dist/hooks/async.js +28 -0
- package/dist/hooks/battery.d.ts +8 -0
- package/dist/hooks/battery.js +34 -0
- package/dist/hooks/breakpoint.d.ts +6 -0
- package/dist/hooks/breakpoint.js +34 -0
- package/dist/hooks/clickoutside.d.ts +11 -0
- package/dist/hooks/clickoutside.js +19 -0
- package/dist/hooks/clipboard-paste.d.ts +8 -0
- package/dist/hooks/clipboard-paste.js +18 -0
- package/dist/hooks/clipboard.d.ts +9 -0
- package/dist/hooks/clipboard.js +24 -0
- package/dist/hooks/colorscheme.d.ts +4 -0
- package/dist/hooks/colorscheme.js +18 -0
- package/dist/hooks/copy.d.ts +12 -0
- package/dist/hooks/copy.js +28 -0
- package/dist/hooks/countdown.d.ts +10 -0
- package/dist/hooks/countdown.js +41 -0
- package/dist/hooks/counter.d.ts +10 -0
- package/dist/hooks/counter.js +12 -0
- package/dist/hooks/debounce.d.ts +9 -0
- package/dist/hooks/debounce.js +16 -0
- package/dist/hooks/documenttitle.d.ts +3 -0
- package/dist/hooks/documenttitle.js +20 -0
- package/dist/hooks/documentvisibility.d.ts +4 -0
- package/dist/hooks/documentvisibility.js +19 -0
- package/dist/hooks/escapekey.d.ts +8 -0
- package/dist/hooks/escapekey.js +18 -0
- package/dist/hooks/eventlistener.d.ts +13 -0
- package/dist/hooks/eventlistener.js +15 -0
- package/dist/hooks/eventsource.d.ts +10 -0
- package/dist/hooks/eventsource.js +31 -0
- package/dist/hooks/eyedropper.d.ts +8 -0
- package/dist/hooks/eyedropper.js +23 -0
- package/dist/hooks/favicon.d.ts +3 -0
- package/dist/hooks/favicon.js +14 -0
- package/dist/hooks/fetch.d.ts +8 -0
- package/dist/hooks/fetch.js +29 -0
- package/dist/hooks/focustrap.d.ts +12 -0
- package/dist/hooks/focustrap.js +62 -0
- package/dist/hooks/focuswithin.d.ts +6 -0
- package/dist/hooks/focuswithin.js +24 -0
- package/dist/hooks/form.d.ts +20 -0
- package/dist/hooks/form.js +42 -0
- package/dist/hooks/fullscreen.d.ts +10 -0
- package/dist/hooks/fullscreen.js +34 -0
- package/dist/hooks/geolocation.d.ts +10 -0
- package/dist/hooks/geolocation.js +38 -0
- package/dist/hooks/hash.d.ts +3 -0
- package/dist/hooks/hash.js +21 -0
- package/dist/hooks/hotkeys.d.ts +11 -0
- package/dist/hooks/hotkeys.js +35 -0
- package/dist/hooks/hover.d.ts +3 -0
- package/dist/hooks/hover.js +22 -0
- package/dist/hooks/idle.d.ts +3 -0
- package/dist/hooks/idle.js +28 -0
- package/dist/hooks/infinitescroll.d.ts +9 -0
- package/dist/hooks/infinitescroll.js +31 -0
- package/dist/hooks/interval.d.ts +3 -0
- package/dist/hooks/interval.js +16 -0
- package/dist/hooks/inview.d.ts +10 -0
- package/dist/hooks/inview.js +28 -0
- package/dist/hooks/keyboard.d.ts +14 -0
- package/dist/hooks/keyboard.js +82 -0
- package/dist/hooks/keypress.d.ts +3 -0
- package/dist/hooks/keypress.js +23 -0
- package/dist/hooks/list.d.ts +14 -0
- package/dist/hooks/list.js +28 -0
- package/dist/hooks/longpress.d.ts +10 -0
- package/dist/hooks/longpress.js +24 -0
- package/dist/hooks/map.d.ts +12 -0
- package/dist/hooks/map.js +23 -0
- package/dist/hooks/measure.d.ts +16 -0
- package/dist/hooks/measure.js +34 -0
- package/dist/hooks/media.d.ts +33 -0
- package/dist/hooks/media.js +35 -0
- package/dist/hooks/mediarecorder.d.ts +11 -0
- package/dist/hooks/mediarecorder.js +37 -0
- package/dist/hooks/mounted.d.ts +3 -0
- package/dist/hooks/mounted.js +12 -0
- package/dist/hooks/mouseposition.d.ts +7 -0
- package/dist/hooks/mouseposition.js +16 -0
- package/dist/hooks/networkstate.d.ts +10 -0
- package/dist/hooks/networkstate.js +34 -0
- package/dist/hooks/online.d.ts +3 -0
- package/dist/hooks/online.js +20 -0
- package/dist/hooks/orientation.d.ts +8 -0
- package/dist/hooks/orientation.js +20 -0
- package/dist/hooks/os.d.ts +4 -0
- package/dist/hooks/os.js +15 -0
- package/dist/hooks/pageleave.d.ts +3 -0
- package/dist/hooks/pageleave.js +18 -0
- package/dist/hooks/pagination.d.ts +26 -0
- package/dist/hooks/pagination.js +49 -0
- package/dist/hooks/permission.d.ts +5 -0
- package/dist/hooks/permission.js +29 -0
- package/dist/hooks/preferredlanguage.d.ts +3 -0
- package/dist/hooks/preferredlanguage.js +17 -0
- package/dist/hooks/previous.d.ts +3 -0
- package/dist/hooks/previous.js +12 -0
- package/dist/hooks/queue.d.ts +11 -0
- package/dist/hooks/queue.js +23 -0
- package/dist/hooks/readprogress.d.ts +6 -0
- package/dist/hooks/readprogress.js +32 -0
- package/dist/hooks/resizeobserver.d.ts +10 -0
- package/dist/hooks/resizeobserver.js +25 -0
- package/dist/hooks/script.d.ts +4 -0
- package/dist/hooks/script.js +30 -0
- package/dist/hooks/scrolldirection.d.ts +4 -0
- package/dist/hooks/scrolldirection.js +33 -0
- package/dist/hooks/scrolllock.d.ts +3 -0
- package/dist/hooks/scrolllock.js +38 -0
- package/dist/hooks/scrollspy.d.ts +7 -0
- package/dist/hooks/scrollspy.js +28 -0
- package/dist/hooks/scrolltop.d.ts +7 -0
- package/dist/hooks/scrolltop.js +19 -0
- package/dist/hooks/selection.d.ts +12 -0
- package/dist/hooks/selection.js +32 -0
- package/dist/hooks/share.d.ts +13 -0
- package/dist/hooks/share.js +37 -0
- package/dist/hooks/speechrecognition.d.ts +10 -0
- package/dist/hooks/speechrecognition.js +34 -0
- package/dist/hooks/stepper.d.ts +13 -0
- package/dist/hooks/stepper.js +31 -0
- package/dist/hooks/storage.d.ts +5 -0
- package/dist/hooks/storage.js +57 -0
- package/dist/hooks/stylesheet.d.ts +4 -0
- package/dist/hooks/stylesheet.js +30 -0
- package/dist/hooks/textselection.d.ts +7 -0
- package/dist/hooks/textselection.js +24 -0
- package/dist/hooks/throttle.d.ts +3 -0
- package/dist/hooks/throttle.js +28 -0
- package/dist/hooks/toggle.d.ts +13 -0
- package/dist/hooks/toggle.js +10 -0
- package/dist/hooks/undoredo.d.ts +12 -0
- package/dist/hooks/undoredo.js +50 -0
- package/dist/hooks/vibrate.d.ts +7 -0
- package/dist/hooks/vibrate.js +15 -0
- package/dist/hooks/viewtransition.d.ts +9 -0
- package/dist/hooks/viewtransition.js +38 -0
- package/dist/hooks/wakelock.d.ts +9 -0
- package/dist/hooks/wakelock.js +32 -0
- package/dist/hooks/websocket.d.ts +10 -0
- package/dist/hooks/websocket.js +30 -0
- package/dist/hooks/windowsize.d.ts +7 -0
- package/dist/hooks/windowsize.js +17 -0
- package/dist/i18n.d.ts +30 -0
- package/dist/i18n.js +73 -0
- package/dist/index.d.ts +115 -0
- package/dist/index.js +107 -0
- package/dist/lastmodified.d.ts +4 -0
- package/dist/lastmodified.js +24 -0
- package/dist/linkcheck.d.ts +26 -0
- package/dist/linkcheck.js +113 -0
- package/dist/llms.d.ts +14 -0
- package/dist/llms.js +39 -0
- package/dist/manifest.d.ts +24 -0
- package/dist/manifest.js +31 -0
- package/dist/mcp.d.ts +56 -0
- package/dist/mcp.js +74 -0
- package/dist/mdtoc.d.ts +16 -0
- package/dist/mdtoc.js +59 -0
- package/dist/mdxscope.d.ts +17 -0
- package/dist/mdxscope.js +58 -0
- package/dist/meta.d.ts +19 -0
- package/dist/meta.js +71 -0
- package/dist/migrate.d.ts +17 -0
- package/dist/migrate.js +108 -0
- package/dist/navgen.d.ts +31 -0
- package/dist/navgen.js +147 -0
- package/dist/navtree.d.ts +28 -0
- package/dist/navtree.js +93 -0
- package/dist/next.d.ts +3 -0
- package/dist/next.js +3 -0
- package/dist/oembed.d.ts +20 -0
- package/dist/oembed.js +62 -0
- package/dist/ogimage.d.ts +45 -0
- package/dist/ogimage.js +62 -0
- package/dist/openapi.d.ts +6 -0
- package/dist/openapi.js +141 -0
- package/dist/openapiguard.d.ts +22 -0
- package/dist/openapiguard.js +87 -0
- package/dist/openapiutil.d.ts +72 -0
- package/dist/openapiutil.js +61 -0
- package/dist/orama.d.ts +16 -0
- package/dist/orama.js +100 -0
- package/dist/pipeline.d.ts +19 -0
- package/dist/pipeline.js +40 -0
- package/dist/preload.d.ts +15 -0
- package/dist/preload.js +19 -0
- package/dist/ranking.d.ts +28 -0
- package/dist/ranking.js +95 -0
- package/dist/reactrouter.d.ts +3 -0
- package/dist/reactrouter.js +3 -0
- package/dist/readtime.d.ts +3 -0
- package/dist/readtime.js +8 -0
- package/dist/redirects.d.ts +27 -0
- package/dist/redirects.js +74 -0
- package/dist/rehype.d.ts +5 -0
- package/dist/rehype.js +30 -0
- package/dist/rehypeautolink.d.ts +11 -0
- package/dist/rehypeautolink.js +43 -0
- package/dist/rehypecode.d.ts +6 -0
- package/dist/rehypecode.js +68 -0
- package/dist/rehypecopy.d.ts +6 -0
- package/dist/rehypecopy.js +29 -0
- package/dist/rehypeinline.d.ts +6 -0
- package/dist/rehypeinline.js +32 -0
- package/dist/rehypelinks.d.ts +10 -0
- package/dist/rehypelinks.js +49 -0
- package/dist/rehyperaw.d.ts +6 -0
- package/dist/rehyperaw.js +27 -0
- package/dist/rehypeslug.d.ts +7 -0
- package/dist/rehypeslug.js +39 -0
- package/dist/rehypetablewrap.d.ts +9 -0
- package/dist/rehypetablewrap.js +24 -0
- package/dist/rehypetoc.d.ts +16 -0
- package/dist/rehypetoc.js +61 -0
- package/dist/remark.d.ts +6 -0
- package/dist/remark.js +48 -0
- package/dist/remarkadmonition.d.ts +6 -0
- package/dist/remarkadmonition.js +78 -0
- package/dist/remarkannotation.d.ts +10 -0
- package/dist/remarkannotation.js +65 -0
- package/dist/remarkbadge.d.ts +6 -0
- package/dist/remarkbadge.js +40 -0
- package/dist/remarkblockmath.d.ts +6 -0
- package/dist/remarkblockmath.js +57 -0
- package/dist/remarkcallout.d.ts +6 -0
- package/dist/remarkcallout.js +65 -0
- package/dist/remarkcaption.d.ts +6 -0
- package/dist/remarkcaption.js +48 -0
- package/dist/remarkcodetitle.d.ts +6 -0
- package/dist/remarkcodetitle.js +39 -0
- package/dist/remarkcolumns.d.ts +6 -0
- package/dist/remarkcolumns.js +67 -0
- package/dist/remarkdetails.d.ts +6 -0
- package/dist/remarkdetails.js +61 -0
- package/dist/remarkdirective.d.ts +7 -0
- package/dist/remarkdirective.js +98 -0
- package/dist/remarkembed.d.ts +6 -0
- package/dist/remarkembed.js +72 -0
- package/dist/remarkfiletree.d.ts +6 -0
- package/dist/remarkfiletree.js +67 -0
- package/dist/remarkfootnote.d.ts +6 -0
- package/dist/remarkfootnote.js +63 -0
- package/dist/remarkgfm.d.ts +6 -0
- package/dist/remarkgfm.js +60 -0
- package/dist/remarkheadingid.d.ts +6 -0
- package/dist/remarkheadingid.js +40 -0
- package/dist/remarkimage.d.ts +11 -0
- package/dist/remarkimage.js +91 -0
- package/dist/remarkinclude.d.ts +10 -0
- package/dist/remarkinclude.js +49 -0
- package/dist/remarkinstall.d.ts +6 -0
- package/dist/remarkinstall.js +52 -0
- package/dist/remarklinkcard.d.ts +6 -0
- package/dist/remarklinkcard.js +38 -0
- package/dist/remarkmath.d.ts +6 -0
- package/dist/remarkmath.js +69 -0
- package/dist/remarkmermaid.d.ts +6 -0
- package/dist/remarkmermaid.js +21 -0
- package/dist/remarkmeta.d.ts +15 -0
- package/dist/remarkmeta.js +63 -0
- package/dist/remarkreadingtime.d.ts +11 -0
- package/dist/remarkreadingtime.js +44 -0
- package/dist/remarksteps.d.ts +6 -0
- package/dist/remarksteps.js +56 -0
- package/dist/remarkstructure.d.ts +18 -0
- package/dist/remarkstructure.js +53 -0
- package/dist/remarktabs.d.ts +6 -0
- package/dist/remarktabs.js +42 -0
- package/dist/remarktoc.d.ts +6 -0
- package/dist/remarktoc.js +47 -0
- package/dist/remarkts2js.d.ts +6 -0
- package/dist/remarkts2js.js +88 -0
- package/dist/remarktwoslash.d.ts +20 -0
- package/dist/remarktwoslash.js +86 -0
- package/dist/remarkvideo.d.ts +16 -0
- package/dist/remarkvideo.js +59 -0
- package/dist/remix.d.ts +3 -0
- package/dist/remix.js +3 -0
- package/dist/schema.d.ts +54 -0
- package/dist/schema.js +17 -0
- package/dist/search.d.ts +24 -0
- package/dist/search.js +155 -0
- package/dist/searchindex.d.ts +28 -0
- package/dist/searchindex.js +184 -0
- package/dist/searchpolicy.d.ts +5 -0
- package/dist/searchpolicy.js +9 -0
- package/dist/searchscore.d.ts +30 -0
- package/dist/searchscore.js +54 -0
- package/dist/searchtypo.d.ts +3 -0
- package/dist/searchtypo.js +47 -0
- package/dist/seo.d.ts +26 -0
- package/dist/seo.js +69 -0
- package/dist/shortcodes.d.ts +13 -0
- package/dist/shortcodes.js +61 -0
- package/dist/sitemap.d.ts +25 -0
- package/dist/sitemap.js +69 -0
- package/dist/snippets.d.ts +18 -0
- package/dist/snippets.js +89 -0
- package/dist/source.d.ts +23 -0
- package/dist/source.js +188 -0
- package/dist/stats.d.ts +25 -0
- package/dist/stats.js +81 -0
- package/dist/tanstack.d.ts +3 -0
- package/dist/tanstack.js +3 -0
- package/dist/testing.d.ts +35 -0
- package/dist/testing.js +134 -0
- package/dist/themeutil.d.ts +31 -0
- package/dist/themeutil.js +92 -0
- package/dist/typegen.d.ts +10 -0
- package/dist/typegen.js +74 -0
- package/dist/types.d.ts +267 -0
- package/dist/types.js +1 -0
- package/dist/validate.d.ts +13 -0
- package/dist/validate.js +78 -0
- package/dist/validator.d.ts +35 -0
- package/dist/validator.js +53 -0
- package/dist/versioning.d.ts +32 -0
- package/dist/versioning.js +62 -0
- package/dist/vite.d.ts +3 -0
- package/dist/vite.js +3 -0
- package/dist/watcher.d.ts +19 -0
- package/dist/watcher.js +82 -0
- package/dist/webhook.d.ts +25 -0
- package/dist/webhook.js +67 -0
- package/dist/workspace.d.ts +26 -0
- package/dist/workspace.js +81 -0
- package/package.json +138 -11
- package/styles/reset.css +3 -0
- package/index.js +0 -3
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { memo, useState, useId, useMemo, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
function Table({
|
|
6
|
+
data,
|
|
7
|
+
columns,
|
|
8
|
+
defaultSort,
|
|
9
|
+
defaultDirection = "asc",
|
|
10
|
+
striped = false,
|
|
11
|
+
hoverable = true,
|
|
12
|
+
compact = false,
|
|
13
|
+
caption,
|
|
14
|
+
className = ""
|
|
15
|
+
}) {
|
|
16
|
+
const [sortKey, setSortKey] = useState(defaultSort ?? null);
|
|
17
|
+
const [sortDir, setSortDir] = useState(defaultSort ? defaultDirection : null);
|
|
18
|
+
const id = useId();
|
|
19
|
+
const sorted = useMemo(() => {
|
|
20
|
+
if (!sortKey || !sortDir) return data;
|
|
21
|
+
return [...data].sort((a, b) => {
|
|
22
|
+
const va = a[sortKey];
|
|
23
|
+
const vb = b[sortKey];
|
|
24
|
+
if (va === vb) return 0;
|
|
25
|
+
if (va == null) return 1;
|
|
26
|
+
if (vb == null) return -1;
|
|
27
|
+
const cmp = va < vb ? -1 : 1;
|
|
28
|
+
return sortDir === "asc" ? cmp : -cmp;
|
|
29
|
+
});
|
|
30
|
+
}, [data, sortKey, sortDir]);
|
|
31
|
+
const handleSort = useCallback(
|
|
32
|
+
(key) => {
|
|
33
|
+
if (sortKey === key) {
|
|
34
|
+
setSortDir(sortDir === "asc" ? "desc" : sortDir === "desc" ? null : "asc");
|
|
35
|
+
if (sortDir === "desc") setSortKey(null);
|
|
36
|
+
} else {
|
|
37
|
+
setSortKey(key);
|
|
38
|
+
setSortDir("asc");
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
[sortKey, sortDir]
|
|
42
|
+
);
|
|
43
|
+
const padding = compact ? "px-3 py-2" : "px-4 py-3";
|
|
44
|
+
const getSortLabel = useCallback(
|
|
45
|
+
(col) => {
|
|
46
|
+
if (sortKey === col.key) {
|
|
47
|
+
if (sortDir === "asc") return `${col.header}, sorted ascending`;
|
|
48
|
+
if (sortDir === "desc") return `${col.header}, sorted descending`;
|
|
49
|
+
}
|
|
50
|
+
return `${col.header}, sortable`;
|
|
51
|
+
},
|
|
52
|
+
[sortKey, sortDir]
|
|
53
|
+
);
|
|
54
|
+
return /* @__PURE__ */ jsx(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
className: `my-6 overflow-x-auto rounded-lg border border-line ${className}`.trim(),
|
|
58
|
+
role: "region",
|
|
59
|
+
"aria-label": caption || "Data table",
|
|
60
|
+
tabIndex: 0,
|
|
61
|
+
children: /* @__PURE__ */ jsxs(
|
|
62
|
+
"table",
|
|
63
|
+
{
|
|
64
|
+
className: "w-full text-sm",
|
|
65
|
+
"aria-rowcount": data.length + 1,
|
|
66
|
+
"aria-colcount": columns.length,
|
|
67
|
+
children: [
|
|
68
|
+
caption && /* @__PURE__ */ jsx("caption", { id: `${id}-caption`, className: "sr-only", children: caption }),
|
|
69
|
+
/* @__PURE__ */ jsx("thead", { className: "bg-surface", children: /* @__PURE__ */ jsx("tr", { children: columns.map((col, colIndex) => /* @__PURE__ */ jsx(
|
|
70
|
+
"th",
|
|
71
|
+
{
|
|
72
|
+
scope: "col",
|
|
73
|
+
"aria-colindex": colIndex + 1,
|
|
74
|
+
style: col.width ? { width: col.width } : void 0,
|
|
75
|
+
className: `text-left ${padding} font-medium text-fg ${col.hideOnMobile ? "hidden sm:table-cell" : ""}`,
|
|
76
|
+
"aria-sort": col.sortable && sortKey === col.key && sortDir ? sortDir === "asc" ? "ascending" : "descending" : void 0,
|
|
77
|
+
children: col.sortable ? /* @__PURE__ */ jsxs(
|
|
78
|
+
"button",
|
|
79
|
+
{
|
|
80
|
+
type: "button",
|
|
81
|
+
onClick: () => handleSort(col.key),
|
|
82
|
+
"aria-label": getSortLabel(col),
|
|
83
|
+
className: "inline-flex items-center gap-1.5 transition-colors hover:text-accent focus:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-bg rounded",
|
|
84
|
+
children: [
|
|
85
|
+
col.header,
|
|
86
|
+
/* @__PURE__ */ jsx(
|
|
87
|
+
SortIcon,
|
|
88
|
+
{
|
|
89
|
+
active: sortKey === col.key,
|
|
90
|
+
direction: sortKey === col.key ? sortDir : null
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
) : col.header
|
|
96
|
+
},
|
|
97
|
+
col.key
|
|
98
|
+
)) }) }),
|
|
99
|
+
/* @__PURE__ */ jsx("tbody", { children: sorted.map((row, i) => /* @__PURE__ */ jsx(
|
|
100
|
+
"tr",
|
|
101
|
+
{
|
|
102
|
+
"aria-rowindex": i + 2,
|
|
103
|
+
className: `border-t border-line/50 ${striped && i % 2 === 1 ? "bg-surface/30" : ""} ${hoverable ? "hover:bg-surface/50" : ""}`,
|
|
104
|
+
children: columns.map((col, colIndex) => /* @__PURE__ */ jsx(
|
|
105
|
+
"td",
|
|
106
|
+
{
|
|
107
|
+
"aria-colindex": colIndex + 1,
|
|
108
|
+
className: `${padding} text-muted ${col.hideOnMobile ? "hidden sm:table-cell" : ""}`,
|
|
109
|
+
children: col.render ? col.render(row[col.key], row) : String(row[col.key] ?? "")
|
|
110
|
+
},
|
|
111
|
+
col.key
|
|
112
|
+
))
|
|
113
|
+
},
|
|
114
|
+
i
|
|
115
|
+
)) })
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
const SortIcon = memo(function SortIcon2({ active, direction }) {
|
|
123
|
+
return /* @__PURE__ */ jsx(
|
|
124
|
+
"svg",
|
|
125
|
+
{
|
|
126
|
+
"aria-hidden": "true",
|
|
127
|
+
viewBox: "0 0 16 16",
|
|
128
|
+
fill: "currentColor",
|
|
129
|
+
className: `size-3.5 transition-colors ${active && direction ? "text-accent" : "text-muted/50"}`,
|
|
130
|
+
children: direction === "asc" ? /* @__PURE__ */ jsx("path", { d: "M8 4l4 5H4l4-5z" }) : direction === "desc" ? /* @__PURE__ */ jsx("path", { d: "M8 12l-4-5h8l-4 5z" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
131
|
+
/* @__PURE__ */ jsx("path", { d: "M8 4l3 3.5H5L8 4z", opacity: 0.5 }),
|
|
132
|
+
/* @__PURE__ */ jsx("path", { d: "M8 12l-3-3.5h6L8 12z", opacity: 0.5 })
|
|
133
|
+
] })
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
export { Table };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Individual tab configuration for navigation
|
|
5
|
+
*/
|
|
6
|
+
interface NavTab {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
href: string;
|
|
10
|
+
icon?: ReactNode;
|
|
11
|
+
match?: string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Props for the horizontal tab navigation component
|
|
15
|
+
*/
|
|
16
|
+
interface TabNavProps {
|
|
17
|
+
tabs: NavTab[];
|
|
18
|
+
label?: string;
|
|
19
|
+
}
|
|
20
|
+
declare function TabNav({ tabs, label }: TabNavProps): ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* Props for the dropdown tab navigation component
|
|
23
|
+
*/
|
|
24
|
+
interface TabNavDropdownProps {
|
|
25
|
+
tabs: NavTab[];
|
|
26
|
+
label?: string;
|
|
27
|
+
}
|
|
28
|
+
declare function TabNavDropdown({ tabs, label }: TabNavDropdownProps): ReactNode;
|
|
29
|
+
|
|
30
|
+
export { type NavTab, TabNav, TabNavDropdown, type TabNavDropdownProps, type TabNavProps };
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
3
|
+
import Link from 'next/link';
|
|
4
|
+
import { usePathname } from 'next/navigation';
|
|
5
|
+
import { useRef, useCallback, useState, useId } from 'react';
|
|
6
|
+
import { getNextIndex } from '../hooks/arrownav';
|
|
7
|
+
import { IconChevronDown } from './icons';
|
|
8
|
+
|
|
9
|
+
function TabNav({ tabs, label = "Navigation" }) {
|
|
10
|
+
const pathname = usePathname();
|
|
11
|
+
const refs = useRef([]);
|
|
12
|
+
const isActive = useCallback(
|
|
13
|
+
(tab) => {
|
|
14
|
+
if (tab.match) {
|
|
15
|
+
return tab.match.some((pattern) => pathname.startsWith(pattern));
|
|
16
|
+
}
|
|
17
|
+
return pathname.startsWith(tab.href);
|
|
18
|
+
},
|
|
19
|
+
[pathname]
|
|
20
|
+
);
|
|
21
|
+
const handleKeyDown = useCallback(
|
|
22
|
+
(e, index) => {
|
|
23
|
+
const next = getNextIndex(e.key, {
|
|
24
|
+
count: tabs.length,
|
|
25
|
+
current: index,
|
|
26
|
+
direction: "both",
|
|
27
|
+
wrap: true
|
|
28
|
+
});
|
|
29
|
+
if (next === index) return;
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
refs.current[next]?.focus();
|
|
32
|
+
},
|
|
33
|
+
[tabs.length]
|
|
34
|
+
);
|
|
35
|
+
return /* @__PURE__ */ jsx("nav", { "aria-label": label, role: "tablist", className: "flex gap-1 p-1 bg-surface rounded-lg", children: tabs.map((tab, i) => {
|
|
36
|
+
const active = isActive(tab);
|
|
37
|
+
return /* @__PURE__ */ jsxs(
|
|
38
|
+
Link,
|
|
39
|
+
{
|
|
40
|
+
ref: (el) => {
|
|
41
|
+
refs.current[i] = el;
|
|
42
|
+
},
|
|
43
|
+
href: tab.href,
|
|
44
|
+
role: "tab",
|
|
45
|
+
tabIndex: active ? 0 : -1,
|
|
46
|
+
"aria-selected": active,
|
|
47
|
+
"aria-current": active ? "page" : void 0,
|
|
48
|
+
onKeyDown: (e) => handleKeyDown(e, i),
|
|
49
|
+
className: `flex items-center gap-2 px-3 py-1.5 rounded-md text-sm font-medium transition-colors ${active ? "bg-bg text-fg shadow-sm" : "text-muted hover:text-fg hover:bg-bg/50"}`,
|
|
50
|
+
children: [
|
|
51
|
+
tab.icon && /* @__PURE__ */ jsx("span", { className: "w-4 h-4", "aria-hidden": "true", children: tab.icon }),
|
|
52
|
+
tab.label
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
tab.id
|
|
56
|
+
);
|
|
57
|
+
}) });
|
|
58
|
+
}
|
|
59
|
+
function TabNavDropdown({ tabs, label = "Navigation" }) {
|
|
60
|
+
const pathname = usePathname();
|
|
61
|
+
const [open, setOpen] = useState(false);
|
|
62
|
+
const [focused, setFocused] = useState(0);
|
|
63
|
+
const containerRef = useRef(null);
|
|
64
|
+
const buttonRef = useRef(null);
|
|
65
|
+
const optionRefs = useRef([]);
|
|
66
|
+
const listId = useId();
|
|
67
|
+
const isActive = useCallback(
|
|
68
|
+
(tab) => {
|
|
69
|
+
if (tab.match) {
|
|
70
|
+
return tab.match.some((pattern) => pathname.startsWith(pattern));
|
|
71
|
+
}
|
|
72
|
+
return pathname.startsWith(tab.href);
|
|
73
|
+
},
|
|
74
|
+
[pathname]
|
|
75
|
+
);
|
|
76
|
+
const currentTab = tabs.find((tab) => isActive(tab)) || tabs[0];
|
|
77
|
+
const currentIndex = tabs.findIndex((tab) => isActive(tab));
|
|
78
|
+
const openMenu = useCallback((index) => {
|
|
79
|
+
setOpen(true);
|
|
80
|
+
setFocused(index);
|
|
81
|
+
requestAnimationFrame(() => {
|
|
82
|
+
optionRefs.current[index]?.focus();
|
|
83
|
+
});
|
|
84
|
+
}, []);
|
|
85
|
+
const closeMenu = useCallback(() => {
|
|
86
|
+
setOpen(false);
|
|
87
|
+
buttonRef.current?.focus();
|
|
88
|
+
}, []);
|
|
89
|
+
const handleButtonKeyDown = useCallback(
|
|
90
|
+
(e) => {
|
|
91
|
+
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
92
|
+
e.preventDefault();
|
|
93
|
+
openMenu(currentIndex >= 0 ? currentIndex : 0);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
[currentIndex, openMenu]
|
|
97
|
+
);
|
|
98
|
+
const handleOptionKeyDown = useCallback(
|
|
99
|
+
(e, index) => {
|
|
100
|
+
if (e.key === "Escape") {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
closeMenu();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (e.key === "Tab") {
|
|
106
|
+
setOpen(false);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const next = getNextIndex(e.key, {
|
|
110
|
+
count: tabs.length,
|
|
111
|
+
current: index,
|
|
112
|
+
wrap: true
|
|
113
|
+
});
|
|
114
|
+
if (next === index) return;
|
|
115
|
+
e.preventDefault();
|
|
116
|
+
setFocused(next);
|
|
117
|
+
optionRefs.current[next]?.focus();
|
|
118
|
+
},
|
|
119
|
+
[closeMenu, tabs.length]
|
|
120
|
+
);
|
|
121
|
+
const handleButtonClick = useCallback(() => {
|
|
122
|
+
if (open) {
|
|
123
|
+
closeMenu();
|
|
124
|
+
} else {
|
|
125
|
+
openMenu(currentIndex >= 0 ? currentIndex : 0);
|
|
126
|
+
}
|
|
127
|
+
}, [open, closeMenu, openMenu, currentIndex]);
|
|
128
|
+
const handleBlur = useCallback(
|
|
129
|
+
(e) => {
|
|
130
|
+
if (!containerRef.current?.contains(e.relatedTarget)) {
|
|
131
|
+
setOpen(false);
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
[]
|
|
135
|
+
);
|
|
136
|
+
return /* @__PURE__ */ jsxs("nav", { "aria-label": label, className: "relative", ref: containerRef, children: [
|
|
137
|
+
/* @__PURE__ */ jsxs(
|
|
138
|
+
"button",
|
|
139
|
+
{
|
|
140
|
+
ref: buttonRef,
|
|
141
|
+
type: "button",
|
|
142
|
+
onClick: handleButtonClick,
|
|
143
|
+
onKeyDown: handleButtonKeyDown,
|
|
144
|
+
onBlur: handleBlur,
|
|
145
|
+
"aria-expanded": open,
|
|
146
|
+
"aria-haspopup": "listbox",
|
|
147
|
+
"aria-controls": listId,
|
|
148
|
+
className: "flex items-center gap-2 px-3 py-2 w-full rounded-lg bg-surface border border-line text-sm font-medium text-fg hover:bg-surface/80 transition-colors",
|
|
149
|
+
children: [
|
|
150
|
+
currentTab?.icon && /* @__PURE__ */ jsx("span", { className: "w-4 h-4", "aria-hidden": "true", children: currentTab.icon }),
|
|
151
|
+
currentTab?.label,
|
|
152
|
+
/* @__PURE__ */ jsx(
|
|
153
|
+
IconChevronDown,
|
|
154
|
+
{
|
|
155
|
+
size: 16,
|
|
156
|
+
className: `ml-auto text-muted transition-transform ${open ? "rotate-180" : ""}`
|
|
157
|
+
}
|
|
158
|
+
)
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
open && /* @__PURE__ */ jsx(
|
|
163
|
+
"div",
|
|
164
|
+
{
|
|
165
|
+
id: listId,
|
|
166
|
+
role: "listbox",
|
|
167
|
+
"aria-activedescendant": tabs[focused]?.id,
|
|
168
|
+
className: "absolute left-0 right-0 top-full mt-1 bg-surface border border-line rounded-lg shadow-lg overflow-hidden z-50",
|
|
169
|
+
children: tabs.map((tab, i) => {
|
|
170
|
+
const active = isActive(tab);
|
|
171
|
+
return /* @__PURE__ */ jsxs(
|
|
172
|
+
Link,
|
|
173
|
+
{
|
|
174
|
+
id: tab.id,
|
|
175
|
+
ref: (el) => {
|
|
176
|
+
optionRefs.current[i] = el;
|
|
177
|
+
},
|
|
178
|
+
href: tab.href,
|
|
179
|
+
role: "option",
|
|
180
|
+
tabIndex: -1,
|
|
181
|
+
"aria-selected": active,
|
|
182
|
+
onClick: () => setOpen(false),
|
|
183
|
+
onKeyDown: (e) => handleOptionKeyDown(e, i),
|
|
184
|
+
onBlur: handleBlur,
|
|
185
|
+
className: `flex items-center gap-2 px-3 py-2 text-sm transition-colors ${active ? "bg-bg text-fg" : "text-muted hover:text-fg hover:bg-bg/50"} ${i === focused ? "ring-1 ring-inset ring-accent" : ""}`,
|
|
186
|
+
children: [
|
|
187
|
+
tab.icon && /* @__PURE__ */ jsx("span", { className: "w-4 h-4", "aria-hidden": "true", children: tab.icon }),
|
|
188
|
+
tab.label
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
tab.id
|
|
192
|
+
);
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
)
|
|
196
|
+
] });
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export { TabNav, TabNavDropdown };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactNode, JSX } from 'react';
|
|
2
|
+
|
|
3
|
+
interface TabsProps {
|
|
4
|
+
items: readonly string[];
|
|
5
|
+
defaultValue?: string;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
declare function Tabs({ items, defaultValue, children }: TabsProps): JSX.Element;
|
|
9
|
+
interface TabProps {
|
|
10
|
+
value: string;
|
|
11
|
+
children: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
declare function Tab({ value, children }: TabProps): JSX.Element | null;
|
|
14
|
+
|
|
15
|
+
export { Tab, type TabProps, Tabs, type TabsProps };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
3
|
+
import { createContext, useState, useId, useRef, useCallback, useContext } from 'react';
|
|
4
|
+
import { getNextIndex } from '../hooks/arrownav';
|
|
5
|
+
|
|
6
|
+
const TabsContext = createContext(null);
|
|
7
|
+
function Tabs({ items, defaultValue, children }) {
|
|
8
|
+
const [active, setActive] = useState(defaultValue ?? items[0] ?? "");
|
|
9
|
+
const id = useId();
|
|
10
|
+
const tabsRef = useRef(null);
|
|
11
|
+
const tabMap = useRef(/* @__PURE__ */ new Map());
|
|
12
|
+
for (const item of items) {
|
|
13
|
+
if (!tabMap.current.has(item)) {
|
|
14
|
+
tabMap.current.set(item, tabMap.current.size);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const getTabId = useCallback(
|
|
18
|
+
(value) => {
|
|
19
|
+
const index = tabMap.current.get(value) ?? 0;
|
|
20
|
+
return `${id}-tab-${index}`;
|
|
21
|
+
},
|
|
22
|
+
[id]
|
|
23
|
+
);
|
|
24
|
+
const getPanelId = useCallback(
|
|
25
|
+
(value) => {
|
|
26
|
+
const index = tabMap.current.get(value) ?? 0;
|
|
27
|
+
return `${id}-panel-${index}`;
|
|
28
|
+
},
|
|
29
|
+
[id]
|
|
30
|
+
);
|
|
31
|
+
const handleKeyDown = useCallback(
|
|
32
|
+
(e) => {
|
|
33
|
+
const currentIndex = items.indexOf(active);
|
|
34
|
+
const nextIndex = getNextIndex(e.key, {
|
|
35
|
+
count: items.length,
|
|
36
|
+
current: currentIndex,
|
|
37
|
+
direction: "horizontal",
|
|
38
|
+
wrap: true
|
|
39
|
+
});
|
|
40
|
+
if (nextIndex === currentIndex) return;
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
const nextItem = items[nextIndex];
|
|
43
|
+
if (nextItem !== void 0) {
|
|
44
|
+
setActive(nextItem);
|
|
45
|
+
}
|
|
46
|
+
const tabs = tabsRef.current?.querySelectorAll('[role="tab"]');
|
|
47
|
+
tabs?.[nextIndex]?.focus();
|
|
48
|
+
},
|
|
49
|
+
[active, items]
|
|
50
|
+
);
|
|
51
|
+
return /* @__PURE__ */ jsx(TabsContext.Provider, { value: { active, setActive, id, getTabId, getPanelId }, children: /* @__PURE__ */ jsxs("div", { className: "my-6", children: [
|
|
52
|
+
/* @__PURE__ */ jsx(
|
|
53
|
+
"div",
|
|
54
|
+
{
|
|
55
|
+
ref: tabsRef,
|
|
56
|
+
role: "tablist",
|
|
57
|
+
onKeyDown: handleKeyDown,
|
|
58
|
+
className: "flex border-b border-line",
|
|
59
|
+
children: items.map((item) => /* @__PURE__ */ jsx(
|
|
60
|
+
"button",
|
|
61
|
+
{
|
|
62
|
+
id: getTabId(item),
|
|
63
|
+
type: "button",
|
|
64
|
+
role: "tab",
|
|
65
|
+
"aria-selected": active === item,
|
|
66
|
+
"aria-controls": getPanelId(item),
|
|
67
|
+
tabIndex: active === item ? 0 : -1,
|
|
68
|
+
onClick: () => setActive(item),
|
|
69
|
+
className: `px-4 py-2 text-sm font-medium transition-colors border-b -mb-px ${active === item ? "text-fg border-fg" : "text-muted hover:text-fg border-transparent"}`,
|
|
70
|
+
children: item
|
|
71
|
+
},
|
|
72
|
+
item
|
|
73
|
+
))
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
/* @__PURE__ */ jsx(
|
|
77
|
+
"div",
|
|
78
|
+
{
|
|
79
|
+
id: getPanelId(active),
|
|
80
|
+
role: "tabpanel",
|
|
81
|
+
"aria-labelledby": getTabId(active),
|
|
82
|
+
tabIndex: 0,
|
|
83
|
+
className: "pt-4",
|
|
84
|
+
children
|
|
85
|
+
}
|
|
86
|
+
)
|
|
87
|
+
] }) });
|
|
88
|
+
}
|
|
89
|
+
function Tab({ value, children }) {
|
|
90
|
+
const context = useContext(TabsContext);
|
|
91
|
+
if (!context) return null;
|
|
92
|
+
if (context.active !== value) return null;
|
|
93
|
+
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export { Tab, Tabs };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { HTMLAttributes, ReactNode, ReactElement } from 'react';
|
|
3
|
+
|
|
4
|
+
type TagVariant = "default" | "primary" | "success" | "warning" | "danger";
|
|
5
|
+
/**
|
|
6
|
+
* Props for the Tag component
|
|
7
|
+
*/
|
|
8
|
+
interface TagProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children"> {
|
|
9
|
+
/**
|
|
10
|
+
* Visual style variant
|
|
11
|
+
*/
|
|
12
|
+
variant?: TagVariant;
|
|
13
|
+
/**
|
|
14
|
+
* Tag content
|
|
15
|
+
*/
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}
|
|
18
|
+
declare function TagBase({ variant, className, children, ...props }: TagProps): ReactElement;
|
|
19
|
+
declare const Tag: react.MemoExoticComponent<typeof TagBase>;
|
|
20
|
+
/**
|
|
21
|
+
* Props for the Tags container component
|
|
22
|
+
*/
|
|
23
|
+
interface TagsProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
24
|
+
/**
|
|
25
|
+
* Tag elements to render
|
|
26
|
+
*/
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
}
|
|
29
|
+
declare function TagsBase({ className, children, ...props }: TagsProps): ReactElement;
|
|
30
|
+
declare const Tags: react.MemoExoticComponent<typeof TagsBase>;
|
|
31
|
+
|
|
32
|
+
export { Tag, type TagProps, type TagVariant, Tags, type TagsProps };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { memo } from 'react';
|
|
4
|
+
|
|
5
|
+
const styles = {
|
|
6
|
+
default: "bg-surface border-line text-muted",
|
|
7
|
+
primary: "bg-accent/10 border-accent/20 text-accent",
|
|
8
|
+
success: "bg-emerald-500/10 border-emerald-500/20 text-emerald-400",
|
|
9
|
+
warning: "bg-amber-500/10 border-amber-500/20 text-amber-400",
|
|
10
|
+
danger: "bg-red-500/10 border-red-500/20 text-red-400"
|
|
11
|
+
};
|
|
12
|
+
function TagBase({ variant = "default", className, children, ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(
|
|
14
|
+
"span",
|
|
15
|
+
{
|
|
16
|
+
role: "listitem",
|
|
17
|
+
className: `inline-flex items-center px-2 py-0.5 text-xs font-medium rounded border ${styles[variant]}${className ? ` ${className}` : ""}`,
|
|
18
|
+
...props,
|
|
19
|
+
children
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
const Tag = memo(TagBase);
|
|
24
|
+
function TagsBase({ className, children, ...props }) {
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
"div",
|
|
27
|
+
{
|
|
28
|
+
role: "list",
|
|
29
|
+
"aria-label": "Tags",
|
|
30
|
+
className: `flex flex-wrap gap-1.5 my-4${className ? ` ${className}` : ""}`,
|
|
31
|
+
...props,
|
|
32
|
+
children
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
const Tags = memo(TagsBase);
|
|
37
|
+
|
|
38
|
+
export { Tag, Tags };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* props for the terminal container component
|
|
6
|
+
*/
|
|
7
|
+
interface TerminalProps {
|
|
8
|
+
title?: string;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* terminal window with macos-style title bar
|
|
13
|
+
*/
|
|
14
|
+
declare const Terminal: react.NamedExoticComponent<TerminalProps>;
|
|
15
|
+
/**
|
|
16
|
+
* props for terminal command line
|
|
17
|
+
*/
|
|
18
|
+
interface LineProps {
|
|
19
|
+
prompt?: string;
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* command line with prompt symbol
|
|
24
|
+
*/
|
|
25
|
+
declare const Line: react.NamedExoticComponent<LineProps>;
|
|
26
|
+
/**
|
|
27
|
+
* props for terminal output
|
|
28
|
+
*/
|
|
29
|
+
interface OutputProps {
|
|
30
|
+
children: ReactNode;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* command output text
|
|
34
|
+
*/
|
|
35
|
+
declare const Output: react.NamedExoticComponent<OutputProps>;
|
|
36
|
+
/**
|
|
37
|
+
* props for typewriter animation
|
|
38
|
+
*/
|
|
39
|
+
interface TypedProps {
|
|
40
|
+
text: string;
|
|
41
|
+
speed?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* typewriter text animation with blinking caret
|
|
45
|
+
*/
|
|
46
|
+
declare function Typed({ text, speed }: TypedProps): ReactNode;
|
|
47
|
+
|
|
48
|
+
export { Line, type LineProps, Output, type OutputProps, Terminal, type TerminalProps, Typed, type TypedProps };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { memo, useState, useRef, useCallback, useEffect } from 'react';
|
|
4
|
+
|
|
5
|
+
const Terminal = memo(function Terminal2({ title = "Terminal", children }) {
|
|
6
|
+
return /* @__PURE__ */ jsxs("div", { className: "my-6 rounded-xl border border-line overflow-hidden", children: [
|
|
7
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-4 py-2.5 bg-[#0a0a0a] border-b border-line", children: [
|
|
8
|
+
/* @__PURE__ */ jsxs("div", { className: "flex gap-1.5", "aria-hidden": "true", children: [
|
|
9
|
+
/* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[#ff5f57]" }),
|
|
10
|
+
/* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[#febc2e]" }),
|
|
11
|
+
/* @__PURE__ */ jsx("div", { className: "w-3 h-3 rounded-full bg-[#28c840]" })
|
|
12
|
+
] }),
|
|
13
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted ml-2", children: title })
|
|
14
|
+
] }),
|
|
15
|
+
/* @__PURE__ */ jsx("div", { className: "p-4 bg-[#0a0a0a] font-mono text-sm", children })
|
|
16
|
+
] });
|
|
17
|
+
});
|
|
18
|
+
const Line = memo(function Line2({ prompt = "$", children }) {
|
|
19
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
20
|
+
/* @__PURE__ */ jsx("span", { className: "text-emerald-400 select-none shrink-0", children: prompt }),
|
|
21
|
+
/* @__PURE__ */ jsx("span", { className: "text-zinc-300", children })
|
|
22
|
+
] });
|
|
23
|
+
});
|
|
24
|
+
const Output = memo(function Output2({ children }) {
|
|
25
|
+
return /* @__PURE__ */ jsx("div", { className: "text-zinc-500 pl-5", children });
|
|
26
|
+
});
|
|
27
|
+
const caretStyle = {
|
|
28
|
+
animation: "caret 530ms steps(1) infinite"
|
|
29
|
+
};
|
|
30
|
+
function Typed({ text, speed = 50 }) {
|
|
31
|
+
const [displayed, setDisplayed] = useState("");
|
|
32
|
+
const [done, setDone] = useState(false);
|
|
33
|
+
const indexRef = useRef(0);
|
|
34
|
+
const reset = useCallback(() => {
|
|
35
|
+
setDisplayed("");
|
|
36
|
+
setDone(false);
|
|
37
|
+
indexRef.current = 0;
|
|
38
|
+
}, []);
|
|
39
|
+
const tick = useCallback(() => {
|
|
40
|
+
if (indexRef.current < text.length) {
|
|
41
|
+
indexRef.current++;
|
|
42
|
+
setDisplayed(text.slice(0, indexRef.current));
|
|
43
|
+
} else {
|
|
44
|
+
setDone(true);
|
|
45
|
+
}
|
|
46
|
+
}, [text]);
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
reset();
|
|
49
|
+
}, [text, reset]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
if (done) return;
|
|
52
|
+
const interval = setInterval(tick, speed);
|
|
53
|
+
return () => clearInterval(interval);
|
|
54
|
+
}, [text, speed, done, tick]);
|
|
55
|
+
return /* @__PURE__ */ jsxs("span", { children: [
|
|
56
|
+
/* @__PURE__ */ jsx("style", { children: `@keyframes caret { 50% { opacity: 0; } }` }),
|
|
57
|
+
displayed,
|
|
58
|
+
!done && /* @__PURE__ */ jsx("span", { style: caretStyle, "aria-hidden": "true", children: "\u258B" })
|
|
59
|
+
] });
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { Line, Output, Terminal, Typed };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
type TextareaVariant = "default" | "error";
|
|
5
|
+
type TextareaSize = "sm" | "md" | "lg";
|
|
6
|
+
/**
|
|
7
|
+
* Props for the Textarea component.
|
|
8
|
+
* @property variant - visual style variant
|
|
9
|
+
* @property size - textarea size
|
|
10
|
+
* @property label - accessible label
|
|
11
|
+
* @property error - error message
|
|
12
|
+
* @property hint - helper text
|
|
13
|
+
* @property autoresize - auto-resize based on content
|
|
14
|
+
* @property maxLength - maximum character count
|
|
15
|
+
* @property showCount - show character count
|
|
16
|
+
* @property tooltip - help text shown on hover
|
|
17
|
+
*/
|
|
18
|
+
interface TextareaProps extends Omit<React.ComponentPropsWithRef<"textarea">, "size"> {
|
|
19
|
+
variant?: TextareaVariant;
|
|
20
|
+
size?: TextareaSize;
|
|
21
|
+
label?: ReactNode;
|
|
22
|
+
error?: ReactNode;
|
|
23
|
+
hint?: ReactNode;
|
|
24
|
+
autoresize?: boolean;
|
|
25
|
+
showCount?: boolean;
|
|
26
|
+
tooltip?: ReactNode;
|
|
27
|
+
}
|
|
28
|
+
declare const Textarea: react.NamedExoticComponent<Omit<TextareaProps, "ref"> & react.RefAttributes<HTMLTextAreaElement>>;
|
|
29
|
+
|
|
30
|
+
export { Textarea, type TextareaProps, type TextareaSize, type TextareaVariant };
|