@kirchdev/duxt 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +151 -0
  3. package/app/app.config.ts +13 -0
  4. package/app/app.vue +122 -0
  5. package/app/assets/css/duxt.css +555 -0
  6. package/app/assets/css/typeset.css +498 -0
  7. package/app/components/DuxtBrand.vue +53 -0
  8. package/app/components/DuxtBreadcrumb.vue +37 -0
  9. package/app/components/DuxtCodeBlock.vue +143 -0
  10. package/app/components/DuxtCopyPage.vue +117 -0
  11. package/app/components/DuxtFooter.vue +86 -0
  12. package/app/components/DuxtHeader.vue +496 -0
  13. package/app/components/DuxtJsonEditor.vue +359 -0
  14. package/app/components/DuxtLandingProse.vue +90 -0
  15. package/app/components/DuxtLandingShowcase.vue +295 -0
  16. package/app/components/DuxtLiveWindow.vue +343 -0
  17. package/app/components/DuxtLocale.vue +86 -0
  18. package/app/components/DuxtMetaList.vue +76 -0
  19. package/app/components/DuxtNavigation.vue +94 -0
  20. package/app/components/DuxtNavigationLink.vue +41 -0
  21. package/app/components/DuxtOpenApiCallbacks.vue +92 -0
  22. package/app/components/DuxtOpenApiClient.vue +1339 -0
  23. package/app/components/DuxtOpenApiMedia.vue +108 -0
  24. package/app/components/DuxtOpenApiMethod.vue +59 -0
  25. package/app/components/DuxtOpenApiParameters.vue +114 -0
  26. package/app/components/DuxtOpenApiResponses.vue +109 -0
  27. package/app/components/DuxtOpenApiSchema.vue +365 -0
  28. package/app/components/DuxtOpenApiSecurity.vue +115 -0
  29. package/app/components/DuxtPageFeedback.vue +56 -0
  30. package/app/components/DuxtPageInfo.vue +194 -0
  31. package/app/components/DuxtPageNav.vue +93 -0
  32. package/app/components/DuxtPreviewSkeleton.vue +262 -0
  33. package/app/components/DuxtProgress.vue +45 -0
  34. package/app/components/DuxtSearch.vue +271 -0
  35. package/app/components/DuxtSections.vue +65 -0
  36. package/app/components/DuxtShortcuts.vue +46 -0
  37. package/app/components/DuxtSkipLink.vue +34 -0
  38. package/app/components/DuxtToc.vue +86 -0
  39. package/app/components/DuxtTranslationBanner.vue +64 -0
  40. package/app/components/DuxtVersion.vue +168 -0
  41. package/app/components/DuxtVersionBanner.vue +109 -0
  42. package/app/components/OgImage/Duxt.satori.vue +82 -0
  43. package/app/components/content/Accordion.vue +37 -0
  44. package/app/components/content/AccordionItem.vue +46 -0
  45. package/app/components/content/Callout.vue +58 -0
  46. package/app/components/content/ChangelogGroup.vue +91 -0
  47. package/app/components/content/ChangelogReleases.vue +520 -0
  48. package/app/components/content/CodeGroup.vue +183 -0
  49. package/app/components/content/DevtoolsPanel.vue +107 -0
  50. package/app/components/content/Field.vue +50 -0
  51. package/app/components/content/FieldGroup.vue +8 -0
  52. package/app/components/content/FileTree.vue +92 -0
  53. package/app/components/content/Mermaid.vue +70 -0
  54. package/app/components/content/OpenApiOperation.vue +185 -0
  55. package/app/components/content/OpenApiOperations.vue +72 -0
  56. package/app/components/content/OpenApiOverview.vue +302 -0
  57. package/app/components/content/PackageManagers.vue +187 -0
  58. package/app/components/content/PageCards.vue +48 -0
  59. package/app/components/content/Partial.vue +65 -0
  60. package/app/components/content/Preview.vue +173 -0
  61. package/app/components/content/ProseA.vue +55 -0
  62. package/app/components/content/ProseH2.vue +53 -0
  63. package/app/components/content/ProseH3.vue +53 -0
  64. package/app/components/content/ProseH4.vue +53 -0
  65. package/app/components/content/ProseImg.vue +87 -0
  66. package/app/components/content/ProsePre.vue +58 -0
  67. package/app/components/content/ProseTable.vue +11 -0
  68. package/app/components/content/Since.vue +21 -0
  69. package/app/components/content/Steps.vue +20 -0
  70. package/app/components/content/Tab.vue +23 -0
  71. package/app/components/content/TabGroup.vue +58 -0
  72. package/app/components/ui/alert/Alert.vue +21 -0
  73. package/app/components/ui/alert/AlertDescription.vue +22 -0
  74. package/app/components/ui/alert/AlertTitle.vue +22 -0
  75. package/app/components/ui/alert/index.ts +24 -0
  76. package/app/components/ui/badge/Badge.vue +28 -0
  77. package/app/components/ui/badge/index.ts +52 -0
  78. package/app/components/ui/breadcrumb/Breadcrumb.vue +13 -0
  79. package/app/components/ui/breadcrumb/BreadcrumbEllipsis.vue +22 -0
  80. package/app/components/ui/breadcrumb/BreadcrumbItem.vue +17 -0
  81. package/app/components/ui/breadcrumb/BreadcrumbLink.vue +24 -0
  82. package/app/components/ui/breadcrumb/BreadcrumbList.vue +22 -0
  83. package/app/components/ui/breadcrumb/BreadcrumbPage.vue +20 -0
  84. package/app/components/ui/breadcrumb/BreadcrumbSeparator.vue +21 -0
  85. package/app/components/ui/breadcrumb/index.ts +7 -0
  86. package/app/components/ui/button/Button.vue +31 -0
  87. package/app/components/ui/button/index.ts +39 -0
  88. package/app/components/ui/card/Card.vue +22 -0
  89. package/app/components/ui/card/CardAction.vue +22 -0
  90. package/app/components/ui/card/CardContent.vue +14 -0
  91. package/app/components/ui/card/CardDescription.vue +17 -0
  92. package/app/components/ui/card/CardFooter.vue +17 -0
  93. package/app/components/ui/card/CardHeader.vue +22 -0
  94. package/app/components/ui/card/CardTitle.vue +17 -0
  95. package/app/components/ui/card/index.ts +7 -0
  96. package/app/components/ui/collapsible/Collapsible.vue +19 -0
  97. package/app/components/ui/collapsible/CollapsibleContent.vue +12 -0
  98. package/app/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  99. package/app/components/ui/collapsible/index.ts +3 -0
  100. package/app/components/ui/command/Command.vue +98 -0
  101. package/app/components/ui/command/CommandDialog.vue +42 -0
  102. package/app/components/ui/command/CommandEmpty.vue +31 -0
  103. package/app/components/ui/command/CommandGroup.vue +52 -0
  104. package/app/components/ui/command/CommandInput.vue +45 -0
  105. package/app/components/ui/command/CommandItem.vue +85 -0
  106. package/app/components/ui/command/CommandList.vue +32 -0
  107. package/app/components/ui/command/CommandSeparator.vue +23 -0
  108. package/app/components/ui/command/CommandShortcut.vue +19 -0
  109. package/app/components/ui/command/index.ts +29 -0
  110. package/app/components/ui/dialog/Dialog.vue +15 -0
  111. package/app/components/ui/dialog/DialogClose.vue +12 -0
  112. package/app/components/ui/dialog/DialogContent.vue +61 -0
  113. package/app/components/ui/dialog/DialogDescription.vue +25 -0
  114. package/app/components/ui/dialog/DialogFooter.vue +30 -0
  115. package/app/components/ui/dialog/DialogHeader.vue +17 -0
  116. package/app/components/ui/dialog/DialogOverlay.vue +28 -0
  117. package/app/components/ui/dialog/DialogScrollContent.vue +65 -0
  118. package/app/components/ui/dialog/DialogTitle.vue +25 -0
  119. package/app/components/ui/dialog/DialogTrigger.vue +12 -0
  120. package/app/components/ui/dialog/index.ts +10 -0
  121. package/app/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
  122. package/app/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +47 -0
  123. package/app/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
  124. package/app/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  125. package/app/components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
  126. package/app/components/ui/dropdown-menu/DropdownMenuLabel.vue +27 -0
  127. package/app/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  128. package/app/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +48 -0
  129. package/app/components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  130. package/app/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
  131. package/app/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  132. package/app/components/ui/dropdown-menu/DropdownMenuSubContent.vue +34 -0
  133. package/app/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +34 -0
  134. package/app/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  135. package/app/components/ui/dropdown-menu/index.ts +16 -0
  136. package/app/components/ui/input/Input.vue +35 -0
  137. package/app/components/ui/input/index.ts +1 -0
  138. package/app/components/ui/navigation-menu/NavigationMenu.vue +42 -0
  139. package/app/components/ui/navigation-menu/NavigationMenuContent.vue +35 -0
  140. package/app/components/ui/navigation-menu/NavigationMenuIndicator.vue +32 -0
  141. package/app/components/ui/navigation-menu/NavigationMenuItem.vue +23 -0
  142. package/app/components/ui/navigation-menu/NavigationMenuLink.vue +30 -0
  143. package/app/components/ui/navigation-menu/NavigationMenuList.vue +30 -0
  144. package/app/components/ui/navigation-menu/NavigationMenuTrigger.vue +31 -0
  145. package/app/components/ui/navigation-menu/NavigationMenuViewport.vue +30 -0
  146. package/app/components/ui/navigation-menu/index.ts +14 -0
  147. package/app/components/ui/scroll-area/ScrollArea.vue +31 -0
  148. package/app/components/ui/scroll-area/ScrollBar.vue +38 -0
  149. package/app/components/ui/scroll-area/index.ts +2 -0
  150. package/app/components/ui/select/Select.vue +15 -0
  151. package/app/components/ui/select/SelectContent.vue +59 -0
  152. package/app/components/ui/select/SelectGroup.vue +19 -0
  153. package/app/components/ui/select/SelectItem.vue +42 -0
  154. package/app/components/ui/select/SelectItemText.vue +12 -0
  155. package/app/components/ui/select/SelectLabel.vue +16 -0
  156. package/app/components/ui/select/SelectScrollDownButton.vue +28 -0
  157. package/app/components/ui/select/SelectScrollUpButton.vue +28 -0
  158. package/app/components/ui/select/SelectSeparator.vue +20 -0
  159. package/app/components/ui/select/SelectTrigger.vue +32 -0
  160. package/app/components/ui/select/SelectValue.vue +12 -0
  161. package/app/components/ui/select/index.ts +11 -0
  162. package/app/components/ui/separator/Separator.vue +30 -0
  163. package/app/components/ui/separator/index.ts +1 -0
  164. package/app/components/ui/sheet/Sheet.vue +15 -0
  165. package/app/components/ui/sheet/SheetClose.vue +12 -0
  166. package/app/components/ui/sheet/SheetContent.vue +68 -0
  167. package/app/components/ui/sheet/SheetDescription.vue +23 -0
  168. package/app/components/ui/sheet/SheetFooter.vue +15 -0
  169. package/app/components/ui/sheet/SheetHeader.vue +15 -0
  170. package/app/components/ui/sheet/SheetOverlay.vue +28 -0
  171. package/app/components/ui/sheet/SheetTitle.vue +23 -0
  172. package/app/components/ui/sheet/SheetTrigger.vue +12 -0
  173. package/app/components/ui/sheet/index.ts +8 -0
  174. package/app/components/ui/sidebar/Sidebar.vue +110 -0
  175. package/app/components/ui/sidebar/SidebarContent.vue +23 -0
  176. package/app/components/ui/sidebar/SidebarFooter.vue +18 -0
  177. package/app/components/ui/sidebar/SidebarGroup.vue +18 -0
  178. package/app/components/ui/sidebar/SidebarGroupAction.vue +31 -0
  179. package/app/components/ui/sidebar/SidebarGroupContent.vue +18 -0
  180. package/app/components/ui/sidebar/SidebarGroupLabel.vue +30 -0
  181. package/app/components/ui/sidebar/SidebarHeader.vue +18 -0
  182. package/app/components/ui/sidebar/SidebarInput.vue +19 -0
  183. package/app/components/ui/sidebar/SidebarInset.vue +23 -0
  184. package/app/components/ui/sidebar/SidebarMenu.vue +18 -0
  185. package/app/components/ui/sidebar/SidebarMenuAction.vue +42 -0
  186. package/app/components/ui/sidebar/SidebarMenuBadge.vue +28 -0
  187. package/app/components/ui/sidebar/SidebarMenuButton.vue +60 -0
  188. package/app/components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
  189. package/app/components/ui/sidebar/SidebarMenuItem.vue +18 -0
  190. package/app/components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
  191. package/app/components/ui/sidebar/SidebarMenuSub.vue +24 -0
  192. package/app/components/ui/sidebar/SidebarMenuSubButton.vue +43 -0
  193. package/app/components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
  194. package/app/components/ui/sidebar/SidebarProvider.vue +109 -0
  195. package/app/components/ui/sidebar/SidebarRail.vue +35 -0
  196. package/app/components/ui/sidebar/SidebarSeparator.vue +19 -0
  197. package/app/components/ui/sidebar/SidebarTrigger.vue +26 -0
  198. package/app/components/ui/sidebar/index.ts +62 -0
  199. package/app/components/ui/sidebar/utils.ts +19 -0
  200. package/app/components/ui/skeleton/Skeleton.vue +17 -0
  201. package/app/components/ui/skeleton/index.ts +1 -0
  202. package/app/components/ui/sonner/Sonner.vue +67 -0
  203. package/app/components/ui/sonner/index.ts +1 -0
  204. package/app/components/ui/tabs/Tabs.vue +26 -0
  205. package/app/components/ui/tabs/TabsContent.vue +23 -0
  206. package/app/components/ui/tabs/TabsList.vue +28 -0
  207. package/app/components/ui/tabs/TabsTrigger.vue +30 -0
  208. package/app/components/ui/tabs/index.ts +4 -0
  209. package/app/components/ui/textarea/Textarea.vue +32 -0
  210. package/app/components/ui/textarea/index.ts +1 -0
  211. package/app/components/ui/tooltip/Tooltip.vue +15 -0
  212. package/app/components/ui/tooltip/TooltipContent.vue +49 -0
  213. package/app/components/ui/tooltip/TooltipProvider.vue +14 -0
  214. package/app/components/ui/tooltip/TooltipTrigger.vue +12 -0
  215. package/app/components/ui/tooltip/index.ts +4 -0
  216. package/app/composables/useActiveHeading.ts +90 -0
  217. package/app/composables/useDuxtAnimatedHeight.ts +155 -0
  218. package/app/composables/useDuxtBreadcrumb.ts +60 -0
  219. package/app/composables/useDuxtChoice.ts +28 -0
  220. package/app/composables/useDuxtCollection.ts +89 -0
  221. package/app/composables/useDuxtConfig.ts +47 -0
  222. package/app/composables/useDuxtNavigation.ts +87 -0
  223. package/app/composables/useDuxtPageFocus.ts +30 -0
  224. package/app/composables/useDuxtPath.ts +42 -0
  225. package/app/composables/useDuxtSearch.ts +208 -0
  226. package/app/composables/useDuxtSection.ts +44 -0
  227. package/app/composables/useDuxtSectionRow.ts +49 -0
  228. package/app/composables/useDuxtShortcuts.ts +58 -0
  229. package/app/composables/useDuxtSiteUrl.ts +27 -0
  230. package/app/composables/useDuxtToast.ts +25 -0
  231. package/app/composables/useDuxtVersion.ts +138 -0
  232. package/app/composables/useFuzzySearch.ts +83 -0
  233. package/app/composables/usePackageManager.ts +4 -0
  234. package/app/composables/useRecentPages.ts +52 -0
  235. package/app/error.vue +133 -0
  236. package/app/layouts/changelog.vue +85 -0
  237. package/app/layouts/default.vue +23 -0
  238. package/app/layouts/docs.vue +62 -0
  239. package/app/layouts/reference.vue +85 -0
  240. package/app/lib/utils.ts +7 -0
  241. package/app/middleware/duxt-section-layout.global.ts +57 -0
  242. package/app/pages/[...slug].vue +441 -0
  243. package/app/pages/index.vue +479 -0
  244. package/app/types/duxt.d.ts +955 -0
  245. package/app/utils/aside.ts +16 -0
  246. package/app/utils/changelog.ts +182 -0
  247. package/app/utils/code-highlight.ts +116 -0
  248. package/app/utils/duxt-config.ts +185 -0
  249. package/app/utils/duxt-text.ts +135 -0
  250. package/app/utils/file-icons.ts +62 -0
  251. package/app/utils/generated-sections.ts +190 -0
  252. package/app/utils/generated-toc.ts +216 -0
  253. package/app/utils/heading-link.ts +32 -0
  254. package/app/utils/locale-path.ts +45 -0
  255. package/app/utils/navigation-tree.ts +206 -0
  256. package/app/utils/nearest-page.ts +72 -0
  257. package/app/utils/openapi.ts +1028 -0
  258. package/app/utils/package-command.ts +162 -0
  259. package/app/utils/request-samples.ts +635 -0
  260. package/app/utils/section-scope.ts +97 -0
  261. package/app/utils/sheet-navigation.ts +100 -0
  262. package/app/utils/source-file.ts +84 -0
  263. package/app/utils/version-choices.ts +68 -0
  264. package/app/utils/version-paths.ts +65 -0
  265. package/bin/duxt-report.mjs +45 -0
  266. package/components.json +19 -0
  267. package/content-cache.ts +193 -0
  268. package/content.config.ts +38 -0
  269. package/duxt-app-config.ts +124 -0
  270. package/highlight-langs.ts +68 -0
  271. package/i18n/i18n.config.ts +16 -0
  272. package/i18n/locales/de/duxt/changelog.json +17 -0
  273. package/i18n/locales/de/duxt/code.json +13 -0
  274. package/i18n/locales/de/duxt/defaults.json +22 -0
  275. package/i18n/locales/de/duxt/devtools.json +7 -0
  276. package/i18n/locales/de/duxt/error.json +10 -0
  277. package/i18n/locales/de/duxt/footer.json +7 -0
  278. package/i18n/locales/de/duxt/locale.json +7 -0
  279. package/i18n/locales/de/duxt/nav.json +17 -0
  280. package/i18n/locales/de/duxt/openapi.json +89 -0
  281. package/i18n/locales/de/duxt/page.json +34 -0
  282. package/i18n/locales/de/duxt/search.json +12 -0
  283. package/i18n/locales/de/duxt/shortcuts.json +11 -0
  284. package/i18n/locales/de/duxt/theme.json +7 -0
  285. package/i18n/locales/de/duxt/toc.json +7 -0
  286. package/i18n/locales/de/duxt/version.json +25 -0
  287. package/i18n/locales/en/duxt/changelog.json +17 -0
  288. package/i18n/locales/en/duxt/code.json +13 -0
  289. package/i18n/locales/en/duxt/defaults.json +22 -0
  290. package/i18n/locales/en/duxt/devtools.json +7 -0
  291. package/i18n/locales/en/duxt/error.json +10 -0
  292. package/i18n/locales/en/duxt/footer.json +7 -0
  293. package/i18n/locales/en/duxt/locale.json +7 -0
  294. package/i18n/locales/en/duxt/nav.json +17 -0
  295. package/i18n/locales/en/duxt/openapi.json +89 -0
  296. package/i18n/locales/en/duxt/page.json +34 -0
  297. package/i18n/locales/en/duxt/search.json +12 -0
  298. package/i18n/locales/en/duxt/shortcuts.json +11 -0
  299. package/i18n/locales/en/duxt/theme.json +7 -0
  300. package/i18n/locales/en/duxt/toc.json +7 -0
  301. package/i18n/locales/en/duxt/version.json +25 -0
  302. package/i18n/locales/es/duxt/changelog.json +17 -0
  303. package/i18n/locales/es/duxt/code.json +13 -0
  304. package/i18n/locales/es/duxt/defaults.json +22 -0
  305. package/i18n/locales/es/duxt/devtools.json +7 -0
  306. package/i18n/locales/es/duxt/error.json +10 -0
  307. package/i18n/locales/es/duxt/footer.json +7 -0
  308. package/i18n/locales/es/duxt/locale.json +7 -0
  309. package/i18n/locales/es/duxt/nav.json +17 -0
  310. package/i18n/locales/es/duxt/openapi.json +89 -0
  311. package/i18n/locales/es/duxt/page.json +34 -0
  312. package/i18n/locales/es/duxt/search.json +12 -0
  313. package/i18n/locales/es/duxt/shortcuts.json +11 -0
  314. package/i18n/locales/es/duxt/theme.json +7 -0
  315. package/i18n/locales/es/duxt/toc.json +7 -0
  316. package/i18n/locales/es/duxt/version.json +25 -0
  317. package/i18n/locales/fr/duxt/changelog.json +17 -0
  318. package/i18n/locales/fr/duxt/code.json +13 -0
  319. package/i18n/locales/fr/duxt/defaults.json +22 -0
  320. package/i18n/locales/fr/duxt/devtools.json +7 -0
  321. package/i18n/locales/fr/duxt/error.json +10 -0
  322. package/i18n/locales/fr/duxt/footer.json +7 -0
  323. package/i18n/locales/fr/duxt/locale.json +7 -0
  324. package/i18n/locales/fr/duxt/nav.json +17 -0
  325. package/i18n/locales/fr/duxt/openapi.json +89 -0
  326. package/i18n/locales/fr/duxt/page.json +34 -0
  327. package/i18n/locales/fr/duxt/search.json +12 -0
  328. package/i18n/locales/fr/duxt/shortcuts.json +11 -0
  329. package/i18n/locales/fr/duxt/theme.json +7 -0
  330. package/i18n/locales/fr/duxt/toc.json +7 -0
  331. package/i18n/locales/fr/duxt/version.json +25 -0
  332. package/i18n/locales/pt/duxt/changelog.json +17 -0
  333. package/i18n/locales/pt/duxt/code.json +13 -0
  334. package/i18n/locales/pt/duxt/defaults.json +22 -0
  335. package/i18n/locales/pt/duxt/devtools.json +7 -0
  336. package/i18n/locales/pt/duxt/error.json +10 -0
  337. package/i18n/locales/pt/duxt/footer.json +7 -0
  338. package/i18n/locales/pt/duxt/locale.json +7 -0
  339. package/i18n/locales/pt/duxt/nav.json +17 -0
  340. package/i18n/locales/pt/duxt/openapi.json +89 -0
  341. package/i18n/locales/pt/duxt/page.json +34 -0
  342. package/i18n/locales/pt/duxt/search.json +12 -0
  343. package/i18n/locales/pt/duxt/shortcuts.json +11 -0
  344. package/i18n/locales/pt/duxt/theme.json +7 -0
  345. package/i18n/locales/pt/duxt/toc.json +7 -0
  346. package/i18n/locales/pt/duxt/version.json +25 -0
  347. package/i18n/locales/pt-BR/duxt/error.json +8 -0
  348. package/i18n/locales/pt-BR/duxt/nav.json +10 -0
  349. package/i18n/locales/pt-BR/duxt/page.json +10 -0
  350. package/i18n/locales/pt-BR/duxt/search.json +11 -0
  351. package/i18n/locales/pt-BR/duxt/version.json +13 -0
  352. package/mdc.config.ts +28 -0
  353. package/modules/config.ts +440 -0
  354. package/modules/devtools.ts +126 -0
  355. package/modules/git-meta.ts +349 -0
  356. package/modules/redirects.ts +152 -0
  357. package/modules/validate.ts +137 -0
  358. package/nuxt.config.ts +530 -0
  359. package/openapi-model.ts +358 -0
  360. package/openapi-parse.ts +1052 -0
  361. package/package.json +161 -0
  362. package/public/devtools/cache.html +318 -0
  363. package/public/devtools/checks.html +309 -0
  364. package/public/devtools/config.html +461 -0
  365. package/public/devtools/i18n.html +309 -0
  366. package/public/devtools/pages.html +348 -0
  367. package/public/devtools/paths.html +315 -0
  368. package/public/devtools/redirects.html +309 -0
  369. package/public/devtools/search.html +324 -0
  370. package/public/devtools/sources.html +309 -0
  371. package/public/devtools/versions.html +318 -0
  372. package/report.ts +303 -0
  373. package/repository-root.ts +26 -0
  374. package/section-reports.ts +55 -0
  375. package/sections-changelog.ts +644 -0
  376. package/sections-openapi.ts +450 -0
  377. package/sections-resolve.ts +711 -0
  378. package/sections.ts +157 -0
  379. package/server/devtools/content.ts +120 -0
  380. package/server/devtools/context.ts +38 -0
  381. package/server/devtools/entry-path.ts +30 -0
  382. package/server/devtools/handler.ts +104 -0
  383. package/server/devtools/preview.ts +461 -0
  384. package/server/devtools/render/content.ts +233 -0
  385. package/server/devtools/render/sources.ts +414 -0
  386. package/server/devtools/render/system.ts +352 -0
  387. package/server/devtools/shell.ts +611 -0
  388. package/server/devtools/sources.ts +122 -0
  389. package/server/devtools/system.ts +178 -0
  390. package/server/mcp/tools/list-pages.ts +52 -0
  391. package/server/mcp/tools/read-page.ts +57 -0
  392. package/server/mcp/tools/search-docs.ts +74 -0
  393. package/server/middleware/raw-markdown.ts +86 -0
  394. package/server/routes/llms-full.txt.get.ts +75 -0
  395. package/server/routes/llms.txt.get.ts +63 -0
  396. package/server/routes/rss.xml.get.ts +125 -0
  397. package/server/utils/duxt-server-text.ts +46 -0
  398. package/sources-git.ts +113 -0
  399. package/sources-resolve.ts +908 -0
  400. package/sources.ts +287 -0
  401. package/validate-report.ts +494 -0
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { DropdownMenuSubEmits, DropdownMenuSubProps } from 'reka-ui';
3
+ import { DropdownMenuSub, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<DropdownMenuSubProps>();
6
+ const emits = defineEmits<DropdownMenuSubEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <DropdownMenuSub
13
+ v-slot="slotProps"
14
+ data-slot="dropdown-menu-sub"
15
+ v-bind="forwarded"
16
+ >
17
+ <slot v-bind="slotProps" />
18
+ </DropdownMenuSub>
19
+ </template>
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type {
3
+ DropdownMenuSubContentEmits,
4
+ DropdownMenuSubContentProps
5
+ } from 'reka-ui';
6
+ import type { HTMLAttributes } from 'vue';
7
+ import { reactiveOmit } from '@vueuse/core';
8
+ import { DropdownMenuSubContent, useForwardPropsEmits } from 'reka-ui';
9
+ import { cn } from '@duxt/lib/utils';
10
+
11
+ const props = defineProps<
12
+ DropdownMenuSubContentProps & { class?: HTMLAttributes['class'] }
13
+ >();
14
+ const emits = defineEmits<DropdownMenuSubContentEmits>();
15
+
16
+ const delegatedProps = reactiveOmit(props, 'class');
17
+
18
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
19
+ </script>
20
+
21
+ <template>
22
+ <DropdownMenuSubContent
23
+ data-slot="dropdown-menu-sub-content"
24
+ v-bind="forwarded"
25
+ :class="
26
+ cn(
27
+ 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] max-w-(--reka-dropdown-menu-content-available-width) origin-(--reka-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',
28
+ props.class
29
+ )
30
+ "
31
+ >
32
+ <slot />
33
+ </DropdownMenuSubContent>
34
+ </template>
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type { DropdownMenuSubTriggerProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { DropdownMenuSubTrigger, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ DropdownMenuSubTriggerProps & {
10
+ class?: HTMLAttributes['class'];
11
+ inset?: boolean;
12
+ }
13
+ >();
14
+
15
+ const delegatedProps = reactiveOmit(props, 'class', 'inset');
16
+ const forwardedProps = useForwardProps(delegatedProps);
17
+ </script>
18
+
19
+ <template>
20
+ <DropdownMenuSubTrigger
21
+ data-slot="dropdown-menu-sub-trigger"
22
+ v-bind="forwardedProps"
23
+ :data-inset="inset ? '' : undefined"
24
+ :class="
25
+ cn(
26
+ `relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,
27
+ props.class
28
+ )
29
+ "
30
+ >
31
+ <slot />
32
+ <Icon name="lucide:chevron-right" class="ml-auto size-4" />
33
+ </DropdownMenuSubTrigger>
34
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { DropdownMenuTriggerProps } from 'reka-ui';
3
+ import { DropdownMenuTrigger, useForwardProps } from 'reka-ui';
4
+
5
+ const props = defineProps<DropdownMenuTriggerProps>();
6
+
7
+ const forwardedProps = useForwardProps(props);
8
+ </script>
9
+
10
+ <template>
11
+ <DropdownMenuTrigger
12
+ data-slot="dropdown-menu-trigger"
13
+ v-bind="forwardedProps"
14
+ >
15
+ <slot />
16
+ </DropdownMenuTrigger>
17
+ </template>
@@ -0,0 +1,16 @@
1
+ export { default as DropdownMenu } from './DropdownMenu.vue';
2
+
3
+ export { default as DropdownMenuCheckboxItem } from './DropdownMenuCheckboxItem.vue';
4
+ export { default as DropdownMenuContent } from './DropdownMenuContent.vue';
5
+ export { default as DropdownMenuGroup } from './DropdownMenuGroup.vue';
6
+ export { default as DropdownMenuItem } from './DropdownMenuItem.vue';
7
+ export { default as DropdownMenuLabel } from './DropdownMenuLabel.vue';
8
+ export { default as DropdownMenuRadioGroup } from './DropdownMenuRadioGroup.vue';
9
+ export { default as DropdownMenuRadioItem } from './DropdownMenuRadioItem.vue';
10
+ export { default as DropdownMenuSeparator } from './DropdownMenuSeparator.vue';
11
+ export { default as DropdownMenuShortcut } from './DropdownMenuShortcut.vue';
12
+ export { default as DropdownMenuSub } from './DropdownMenuSub.vue';
13
+ export { default as DropdownMenuSubContent } from './DropdownMenuSubContent.vue';
14
+ export { default as DropdownMenuSubTrigger } from './DropdownMenuSubTrigger.vue';
15
+ export { default as DropdownMenuTrigger } from './DropdownMenuTrigger.vue';
16
+ export { DropdownMenuPortal } from 'reka-ui';
@@ -0,0 +1,35 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { useVModel } from '@vueuse/core';
4
+ import { cn } from '@duxt/lib/utils';
5
+
6
+ const props = defineProps<{
7
+ defaultValue?: string | number;
8
+ modelValue?: string | number;
9
+ class?: HTMLAttributes['class'];
10
+ }>();
11
+
12
+ const emits = defineEmits<{
13
+ (e: 'update:modelValue', payload: string | number): void;
14
+ }>();
15
+
16
+ const modelValue = useVModel(props, 'modelValue', emits, {
17
+ passive: true,
18
+ defaultValue: props.defaultValue
19
+ });
20
+ </script>
21
+
22
+ <template>
23
+ <input
24
+ v-model="modelValue"
25
+ data-slot="input"
26
+ :class="
27
+ cn(
28
+ 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',
29
+ 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3',
30
+ 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
31
+ props.class
32
+ )
33
+ "
34
+ />
35
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Input } from './Input.vue';
@@ -0,0 +1,42 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuRootEmits, NavigationMenuRootProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuRoot, useForwardPropsEmits } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+ import NavigationMenuViewport from './NavigationMenuViewport.vue';
8
+
9
+ const props = withDefaults(
10
+ defineProps<
11
+ NavigationMenuRootProps & {
12
+ class?: HTMLAttributes['class'];
13
+ viewport?: boolean;
14
+ }
15
+ >(),
16
+ {
17
+ viewport: true
18
+ }
19
+ );
20
+ const emits = defineEmits<NavigationMenuRootEmits>();
21
+
22
+ const delegatedProps = reactiveOmit(props, 'class', 'viewport');
23
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
24
+ </script>
25
+
26
+ <template>
27
+ <NavigationMenuRoot
28
+ v-slot="slotProps"
29
+ data-slot="navigation-menu"
30
+ :data-viewport="viewport"
31
+ v-bind="forwarded"
32
+ :class="
33
+ cn(
34
+ 'group/navigation-menu relative flex max-w-max flex-1 items-center justify-center',
35
+ props.class
36
+ )
37
+ "
38
+ >
39
+ <slot v-bind="slotProps" />
40
+ <NavigationMenuViewport v-if="viewport" />
41
+ </NavigationMenuRoot>
42
+ </template>
@@ -0,0 +1,35 @@
1
+ <script setup lang="ts">
2
+ import type {
3
+ NavigationMenuContentEmits,
4
+ NavigationMenuContentProps
5
+ } from 'reka-ui';
6
+ import type { HTMLAttributes } from 'vue';
7
+ import { reactiveOmit } from '@vueuse/core';
8
+ import { NavigationMenuContent, useForwardPropsEmits } from 'reka-ui';
9
+ import { cn } from '@duxt/lib/utils';
10
+
11
+ const props = defineProps<
12
+ NavigationMenuContentProps & { class?: HTMLAttributes['class'] }
13
+ >();
14
+ const emits = defineEmits<NavigationMenuContentEmits>();
15
+
16
+ const delegatedProps = reactiveOmit(props, 'class');
17
+
18
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
19
+ </script>
20
+
21
+ <template>
22
+ <NavigationMenuContent
23
+ data-slot="navigation-menu-content"
24
+ v-bind="forwarded"
25
+ :class="
26
+ cn(
27
+ 'data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto',
28
+ 'group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none',
29
+ props.class
30
+ )
31
+ "
32
+ >
33
+ <slot />
34
+ </NavigationMenuContent>
35
+ </template>
@@ -0,0 +1,32 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuIndicatorProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuIndicator, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ NavigationMenuIndicatorProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+
14
+ const forwardedProps = useForwardProps(delegatedProps);
15
+ </script>
16
+
17
+ <template>
18
+ <NavigationMenuIndicator
19
+ data-slot="navigation-menu-indicator"
20
+ v-bind="forwardedProps"
21
+ :class="
22
+ cn(
23
+ 'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',
24
+ props.class
25
+ )
26
+ "
27
+ >
28
+ <div
29
+ class="bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md"
30
+ />
31
+ </NavigationMenuIndicator>
32
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuItemProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuItem } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ NavigationMenuItemProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+ </script>
14
+
15
+ <template>
16
+ <NavigationMenuItem
17
+ data-slot="navigation-menu-item"
18
+ v-bind="delegatedProps"
19
+ :class="cn('relative', props.class)"
20
+ >
21
+ <slot />
22
+ </NavigationMenuItem>
23
+ </template>
@@ -0,0 +1,30 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuLinkEmits, NavigationMenuLinkProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuLink, useForwardPropsEmits } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ NavigationMenuLinkProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+ const emits = defineEmits<NavigationMenuLinkEmits>();
12
+
13
+ const delegatedProps = reactiveOmit(props, 'class');
14
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
15
+ </script>
16
+
17
+ <template>
18
+ <NavigationMenuLink
19
+ data-slot="navigation-menu-link"
20
+ v-bind="forwarded"
21
+ :class="
22
+ cn(
23
+ `data-active:focus:bg-accent data-active:hover:bg-accent data-active:bg-accent/50 data-active:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground ring-ring/10 dark:ring-ring/20 dark:outline-ring/40 outline-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-[color,box-shadow] focus-visible:ring-4 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4`,
24
+ props.class
25
+ )
26
+ "
27
+ >
28
+ <slot />
29
+ </NavigationMenuLink>
30
+ </template>
@@ -0,0 +1,30 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuListProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuList, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ NavigationMenuListProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+
14
+ const forwardedProps = useForwardProps(delegatedProps);
15
+ </script>
16
+
17
+ <template>
18
+ <NavigationMenuList
19
+ data-slot="navigation-menu-list"
20
+ v-bind="forwardedProps"
21
+ :class="
22
+ cn(
23
+ 'group flex flex-1 list-none items-center justify-center gap-1',
24
+ props.class
25
+ )
26
+ "
27
+ >
28
+ <slot />
29
+ </NavigationMenuList>
30
+ </template>
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuTriggerProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuTrigger, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+ import { navigationMenuTriggerStyle } from '.';
8
+
9
+ const props = defineProps<
10
+ NavigationMenuTriggerProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+
13
+ const delegatedProps = reactiveOmit(props, 'class');
14
+
15
+ const forwardedProps = useForwardProps(delegatedProps);
16
+ </script>
17
+
18
+ <template>
19
+ <NavigationMenuTrigger
20
+ data-slot="navigation-menu-trigger"
21
+ v-bind="forwardedProps"
22
+ :class="cn(navigationMenuTriggerStyle(), 'group', props.class)"
23
+ >
24
+ <slot />
25
+ <Icon
26
+ name="lucide:chevron-down"
27
+ class="relative top-px ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180"
28
+ aria-hidden="true"
29
+ />
30
+ </NavigationMenuTrigger>
31
+ </template>
@@ -0,0 +1,30 @@
1
+ <script setup lang="ts">
2
+ import type { NavigationMenuViewportProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { NavigationMenuViewport, useForwardProps } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ NavigationMenuViewportProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+
14
+ const forwardedProps = useForwardProps(delegatedProps);
15
+ </script>
16
+
17
+ <template>
18
+ <div class="absolute top-full left-0 isolate z-50 flex justify-center">
19
+ <NavigationMenuViewport
20
+ data-slot="navigation-menu-viewport"
21
+ v-bind="forwardedProps"
22
+ :class="
23
+ cn(
24
+ 'origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-(--reka-navigation-menu-viewport-height) w-full overflow-hidden rounded-md border shadow md:w-(--reka-navigation-menu-viewport-width) left-(--reka-navigation-menu-viewport-left)',
25
+ props.class
26
+ )
27
+ "
28
+ />
29
+ </div>
30
+ </template>
@@ -0,0 +1,14 @@
1
+ import { cva } from 'class-variance-authority';
2
+
3
+ export { default as NavigationMenu } from './NavigationMenu.vue';
4
+ export { default as NavigationMenuContent } from './NavigationMenuContent.vue';
5
+ export { default as NavigationMenuIndicator } from './NavigationMenuIndicator.vue';
6
+ export { default as NavigationMenuItem } from './NavigationMenuItem.vue';
7
+ export { default as NavigationMenuLink } from './NavigationMenuLink.vue';
8
+ export { default as NavigationMenuList } from './NavigationMenuList.vue';
9
+ export { default as NavigationMenuTrigger } from './NavigationMenuTrigger.vue';
10
+ export { default as NavigationMenuViewport } from './NavigationMenuViewport.vue';
11
+
12
+ export const navigationMenuTriggerStyle = cva(
13
+ 'group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-3 focus-visible:outline-1'
14
+ );
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import type { ScrollAreaRootProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { ScrollAreaCorner, ScrollAreaRoot, ScrollAreaViewport } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+ import ScrollBar from './ScrollBar.vue';
8
+
9
+ const props = defineProps<
10
+ ScrollAreaRootProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+
13
+ const delegatedProps = reactiveOmit(props, 'class');
14
+ </script>
15
+
16
+ <template>
17
+ <ScrollAreaRoot
18
+ data-slot="scroll-area"
19
+ v-bind="delegatedProps"
20
+ :class="cn('relative', props.class)"
21
+ >
22
+ <ScrollAreaViewport
23
+ data-slot="scroll-area-viewport"
24
+ class="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-3 focus-visible:outline-1"
25
+ >
26
+ <slot />
27
+ </ScrollAreaViewport>
28
+ <ScrollBar />
29
+ <ScrollAreaCorner />
30
+ </ScrollAreaRoot>
31
+ </template>
@@ -0,0 +1,38 @@
1
+ <script setup lang="ts">
2
+ import type { ScrollAreaScrollbarProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { ScrollAreaScrollbar, ScrollAreaThumb } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = withDefaults(
9
+ defineProps<ScrollAreaScrollbarProps & { class?: HTMLAttributes['class'] }>(),
10
+ {
11
+ orientation: 'vertical'
12
+ }
13
+ );
14
+
15
+ const delegatedProps = reactiveOmit(props, 'class');
16
+ </script>
17
+
18
+ <template>
19
+ <ScrollAreaScrollbar
20
+ data-slot="scroll-area-scrollbar"
21
+ v-bind="delegatedProps"
22
+ :class="
23
+ cn(
24
+ 'flex touch-none p-px transition-colors select-none',
25
+ orientation === 'vertical' &&
26
+ 'h-full w-2.5 border-l border-l-transparent',
27
+ orientation === 'horizontal' &&
28
+ 'h-2.5 flex-col border-t border-t-transparent',
29
+ props.class
30
+ )
31
+ "
32
+ >
33
+ <ScrollAreaThumb
34
+ data-slot="scroll-area-thumb"
35
+ class="bg-border relative flex-1 rounded-full"
36
+ />
37
+ </ScrollAreaScrollbar>
38
+ </template>
@@ -0,0 +1,2 @@
1
+ export { default as ScrollArea } from './ScrollArea.vue';
2
+ export { default as ScrollBar } from './ScrollBar.vue';
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { SelectRootEmits, SelectRootProps } from 'reka-ui';
3
+ import { SelectRoot, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<SelectRootProps>();
6
+ const emits = defineEmits<SelectRootEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <SelectRoot v-bind="forwarded">
13
+ <slot />
14
+ </SelectRoot>
15
+ </template>
@@ -0,0 +1,59 @@
1
+ <script setup lang="ts">
2
+ import type { SelectContentEmits, SelectContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import {
6
+ SelectContent,
7
+ SelectPortal,
8
+ SelectViewport,
9
+ useForwardPropsEmits
10
+ } from 'reka-ui';
11
+ import { cn } from '@duxt/lib/utils';
12
+ import { SelectScrollDownButton, SelectScrollUpButton } from '.';
13
+
14
+ defineOptions({
15
+ inheritAttrs: false
16
+ });
17
+
18
+ const props = withDefaults(
19
+ defineProps<SelectContentProps & { class?: HTMLAttributes['class'] }>(),
20
+ {
21
+ position: 'popper'
22
+ }
23
+ );
24
+ const emits = defineEmits<SelectContentEmits>();
25
+
26
+ const delegatedProps = reactiveOmit(props, 'class');
27
+
28
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
29
+ </script>
30
+
31
+ <template>
32
+ <SelectPortal>
33
+ <SelectContent
34
+ v-bind="{ ...forwarded, ...$attrs }"
35
+ :class="
36
+ cn(
37
+ 'relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
38
+ position === 'popper' &&
39
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
40
+ props.class
41
+ )
42
+ "
43
+ >
44
+ <SelectScrollUpButton />
45
+ <SelectViewport
46
+ :class="
47
+ cn(
48
+ 'p-1',
49
+ position === 'popper' &&
50
+ 'h-(--reka-select-trigger-height) w-full min-w-(--reka-select-trigger-width)'
51
+ )
52
+ "
53
+ >
54
+ <slot />
55
+ </SelectViewport>
56
+ <SelectScrollDownButton />
57
+ </SelectContent>
58
+ </SelectPortal>
59
+ </template>
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { SelectGroupProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import { SelectGroup } from 'reka-ui';
6
+ import { cn } from '@duxt/lib/utils';
7
+
8
+ const props = defineProps<
9
+ SelectGroupProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = reactiveOmit(props, 'class');
13
+ </script>
14
+
15
+ <template>
16
+ <SelectGroup :class="cn('p-1 w-full', props.class)" v-bind="delegatedProps">
17
+ <slot />
18
+ </SelectGroup>
19
+ </template>
@@ -0,0 +1,42 @@
1
+ <script setup lang="ts">
2
+ import type { SelectItemProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { reactiveOmit } from '@vueuse/core';
5
+ import {
6
+ SelectItem,
7
+ SelectItemIndicator,
8
+ SelectItemText,
9
+ useForwardProps
10
+ } from 'reka-ui';
11
+ import { cn } from '@duxt/lib/utils';
12
+
13
+ const props = defineProps<
14
+ SelectItemProps & { class?: HTMLAttributes['class'] }
15
+ >();
16
+
17
+ const delegatedProps = reactiveOmit(props, 'class');
18
+
19
+ const forwardedProps = useForwardProps(delegatedProps);
20
+ </script>
21
+
22
+ <template>
23
+ <SelectItem
24
+ v-bind="forwardedProps"
25
+ :class="
26
+ cn(
27
+ 'relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
28
+ props.class
29
+ )
30
+ "
31
+ >
32
+ <span class="absolute right-2 flex h-3.5 w-3.5 items-center justify-center">
33
+ <SelectItemIndicator>
34
+ <Icon name="lucide:check" class="size-4" />
35
+ </SelectItemIndicator>
36
+ </span>
37
+
38
+ <SelectItemText>
39
+ <slot />
40
+ </SelectItemText>
41
+ </SelectItem>
42
+ </template>