@spavn/ui 0.0.1

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 (399) hide show
  1. package/cli/commands/add.d.ts +5 -0
  2. package/cli/commands/add.d.ts.map +1 -0
  3. package/cli/commands/add.js +104 -0
  4. package/cli/commands/add.js.map +1 -0
  5. package/cli/commands/init.d.ts +5 -0
  6. package/cli/commands/init.d.ts.map +1 -0
  7. package/cli/commands/init.js +129 -0
  8. package/cli/commands/init.js.map +1 -0
  9. package/cli/index.d.ts +3 -0
  10. package/cli/index.d.ts.map +1 -0
  11. package/cli/index.js +27 -0
  12. package/cli/index.js.map +1 -0
  13. package/cli/registry.d.ts +12 -0
  14. package/cli/registry.d.ts.map +1 -0
  15. package/cli/registry.js +1112 -0
  16. package/cli/registry.js.map +1 -0
  17. package/dist/index.js +7492 -0
  18. package/dist/index.umd.cjs +122 -0
  19. package/dist/style.css +1 -0
  20. package/mcp-server/index.d.ts +3 -0
  21. package/mcp-server/index.d.ts.map +1 -0
  22. package/mcp-server/index.js +1266 -0
  23. package/mcp-server/index.js.map +1 -0
  24. package/package.json +91 -0
  25. package/src/index.ts +432 -0
  26. package/src/lib/accordion/Accordion.test.ts +109 -0
  27. package/src/lib/accordion/Accordion.vue +11 -0
  28. package/src/lib/accordion/AccordionContent.vue +23 -0
  29. package/src/lib/accordion/AccordionItem.vue +16 -0
  30. package/src/lib/accordion/AccordionTrigger.vue +37 -0
  31. package/src/lib/accordion/index.ts +4 -0
  32. package/src/lib/alert/Alert.test.ts +144 -0
  33. package/src/lib/alert/Alert.vue +17 -0
  34. package/src/lib/alert/AlertDescription.vue +15 -0
  35. package/src/lib/alert/AlertTitle.vue +15 -0
  36. package/src/lib/alert/variants.test.ts +47 -0
  37. package/src/lib/alert/variants.ts +19 -0
  38. package/src/lib/alert-dialog/AlertDialog.vue +11 -0
  39. package/src/lib/alert-dialog/AlertDialogAction.vue +23 -0
  40. package/src/lib/alert-dialog/AlertDialogCancel.vue +24 -0
  41. package/src/lib/alert-dialog/AlertDialogContent.vue +33 -0
  42. package/src/lib/alert-dialog/AlertDialogDescription.vue +16 -0
  43. package/src/lib/alert-dialog/AlertDialogFooter.vue +17 -0
  44. package/src/lib/alert-dialog/AlertDialogHeader.vue +17 -0
  45. package/src/lib/alert-dialog/AlertDialogOverlay.vue +21 -0
  46. package/src/lib/alert-dialog/AlertDialogPortal.vue +11 -0
  47. package/src/lib/alert-dialog/AlertDialogTitle.vue +16 -0
  48. package/src/lib/alert-dialog/AlertDialogTrigger.vue +11 -0
  49. package/src/lib/alert-dialog/index.ts +11 -0
  50. package/src/lib/aspect-ratio/AspectRatio.vue +11 -0
  51. package/src/lib/aspect-ratio/index.ts +1 -0
  52. package/src/lib/avatar/Avatar.test.ts +58 -0
  53. package/src/lib/avatar/Avatar.vue +20 -0
  54. package/src/lib/avatar/AvatarFallback.vue +20 -0
  55. package/src/lib/avatar/AvatarImage.vue +10 -0
  56. package/src/lib/avatar/index.ts +3 -0
  57. package/src/lib/badge/Badge.test.ts +77 -0
  58. package/src/lib/badge/Badge.vue +20 -0
  59. package/src/lib/badge/index.ts +2 -0
  60. package/src/lib/badge/variants.test.ts +73 -0
  61. package/src/lib/badge/variants.ts +26 -0
  62. package/src/lib/breadcrumb/Breadcrumb.vue +13 -0
  63. package/src/lib/breadcrumb/BreadcrumbEllipsis.vue +35 -0
  64. package/src/lib/breadcrumb/BreadcrumbItem.vue +15 -0
  65. package/src/lib/breadcrumb/BreadcrumbLink.vue +21 -0
  66. package/src/lib/breadcrumb/BreadcrumbList.vue +22 -0
  67. package/src/lib/breadcrumb/BreadcrumbPage.vue +20 -0
  68. package/src/lib/breadcrumb/BreadcrumbSeparator.vue +34 -0
  69. package/src/lib/breadcrumb/index.ts +7 -0
  70. package/src/lib/button/Button.test.ts +84 -0
  71. package/src/lib/button/Button.vue +63 -0
  72. package/src/lib/button/index.ts +2 -0
  73. package/src/lib/button/variants.test.ts +128 -0
  74. package/src/lib/button/variants.ts +66 -0
  75. package/src/lib/button-group/ButtonGroup.vue +25 -0
  76. package/src/lib/button-group/index.ts +1 -0
  77. package/src/lib/calendar/Calendar.vue +58 -0
  78. package/src/lib/calendar/CalendarCell.vue +22 -0
  79. package/src/lib/calendar/CalendarCellTrigger.vue +28 -0
  80. package/src/lib/calendar/CalendarGrid.vue +16 -0
  81. package/src/lib/calendar/CalendarGridBody.vue +11 -0
  82. package/src/lib/calendar/CalendarGridHead.vue +11 -0
  83. package/src/lib/calendar/CalendarGridRow.vue +16 -0
  84. package/src/lib/calendar/CalendarHeadCell.vue +16 -0
  85. package/src/lib/calendar/CalendarHeader.vue +16 -0
  86. package/src/lib/calendar/CalendarHeading.vue +16 -0
  87. package/src/lib/calendar/CalendarNext.vue +37 -0
  88. package/src/lib/calendar/CalendarPrev.vue +37 -0
  89. package/src/lib/calendar/index.ts +12 -0
  90. package/src/lib/card/Card.test.ts +202 -0
  91. package/src/lib/card/Card.vue +36 -0
  92. package/src/lib/card/CardContent.vue +15 -0
  93. package/src/lib/card/CardDescription.vue +15 -0
  94. package/src/lib/card/CardFooter.vue +16 -0
  95. package/src/lib/card/CardHeader.vue +15 -0
  96. package/src/lib/card/CardTitle.vue +15 -0
  97. package/src/lib/card/index.ts +6 -0
  98. package/src/lib/carousel/Carousel.vue +73 -0
  99. package/src/lib/carousel/CarouselContent.vue +55 -0
  100. package/src/lib/carousel/CarouselItem.vue +25 -0
  101. package/src/lib/carousel/CarouselNext.vue +40 -0
  102. package/src/lib/carousel/CarouselPrevious.vue +40 -0
  103. package/src/lib/carousel/index.ts +6 -0
  104. package/src/lib/carousel/useCarousel.ts +24 -0
  105. package/src/lib/checkbox/Checkbox.test.ts +45 -0
  106. package/src/lib/checkbox/Checkbox.vue +39 -0
  107. package/src/lib/code-preview/CodePreview.vue +95 -0
  108. package/src/lib/collapsible/Collapsible.test.ts +95 -0
  109. package/src/lib/collapsible/Collapsible.vue +11 -0
  110. package/src/lib/collapsible/CollapsibleContent.vue +21 -0
  111. package/src/lib/collapsible/CollapsibleTrigger.vue +11 -0
  112. package/src/lib/collapsible/index.ts +3 -0
  113. package/src/lib/command/Command.vue +21 -0
  114. package/src/lib/command/CommandDialog.vue +25 -0
  115. package/src/lib/command/CommandEmpty.vue +16 -0
  116. package/src/lib/command/CommandGroup.vue +21 -0
  117. package/src/lib/command/CommandInput.vue +35 -0
  118. package/src/lib/command/CommandItem.vue +23 -0
  119. package/src/lib/command/CommandLabel.vue +16 -0
  120. package/src/lib/command/CommandList.vue +16 -0
  121. package/src/lib/command/CommandSeparator.vue +14 -0
  122. package/src/lib/command/index.ts +9 -0
  123. package/src/lib/context-menu/ContextMenu.vue +11 -0
  124. package/src/lib/context-menu/ContextMenuCheckboxItem.vue +45 -0
  125. package/src/lib/context-menu/ContextMenuContent.vue +31 -0
  126. package/src/lib/context-menu/ContextMenuGroup.vue +11 -0
  127. package/src/lib/context-menu/ContextMenuItem.vue +24 -0
  128. package/src/lib/context-menu/ContextMenuLabel.vue +16 -0
  129. package/src/lib/context-menu/ContextMenuRadioGroup.vue +11 -0
  130. package/src/lib/context-menu/ContextMenuRadioItem.vue +44 -0
  131. package/src/lib/context-menu/ContextMenuSeparator.vue +14 -0
  132. package/src/lib/context-menu/ContextMenuShortcut.vue +11 -0
  133. package/src/lib/context-menu/ContextMenuSub.vue +11 -0
  134. package/src/lib/context-menu/ContextMenuSubContent.vue +28 -0
  135. package/src/lib/context-menu/ContextMenuSubTrigger.vue +36 -0
  136. package/src/lib/context-menu/ContextMenuTrigger.vue +11 -0
  137. package/src/lib/context-menu/index.ts +14 -0
  138. package/src/lib/data-table/DataTable.vue +226 -0
  139. package/src/lib/date-range-picker/DateRangePicker.vue +201 -0
  140. package/src/lib/date-time-picker/DateTimePicker.vue +159 -0
  141. package/src/lib/dialog/Dialog.test.ts +87 -0
  142. package/src/lib/dialog/Dialog.vue +14 -0
  143. package/src/lib/dialog/DialogClose.vue +11 -0
  144. package/src/lib/dialog/DialogContent.vue +56 -0
  145. package/src/lib/dialog/DialogDescription.vue +15 -0
  146. package/src/lib/dialog/DialogFooter.vue +17 -0
  147. package/src/lib/dialog/DialogHeader.vue +17 -0
  148. package/src/lib/dialog/DialogOverlay.vue +20 -0
  149. package/src/lib/dialog/DialogPortal.vue +11 -0
  150. package/src/lib/dialog/DialogTitle.vue +15 -0
  151. package/src/lib/dialog/DialogTrigger.vue +11 -0
  152. package/src/lib/dialog/index.ts +10 -0
  153. package/src/lib/direction/Direction.vue +13 -0
  154. package/src/lib/drawer/Drawer.vue +11 -0
  155. package/src/lib/drawer/DrawerClose.vue +11 -0
  156. package/src/lib/drawer/DrawerContent.vue +31 -0
  157. package/src/lib/drawer/DrawerDescription.vue +16 -0
  158. package/src/lib/drawer/DrawerFooter.vue +15 -0
  159. package/src/lib/drawer/DrawerHeader.vue +15 -0
  160. package/src/lib/drawer/DrawerOverlay.vue +21 -0
  161. package/src/lib/drawer/DrawerTitle.vue +16 -0
  162. package/src/lib/drawer/DrawerTrigger.vue +11 -0
  163. package/src/lib/drawer/index.ts +9 -0
  164. package/src/lib/dropdown-menu/DropdownMenu.test.ts +146 -0
  165. package/src/lib/dropdown-menu/DropdownMenu.vue +11 -0
  166. package/src/lib/dropdown-menu/DropdownMenuCheckboxItem.vue +45 -0
  167. package/src/lib/dropdown-menu/DropdownMenuContent.vue +31 -0
  168. package/src/lib/dropdown-menu/DropdownMenuGroup.vue +11 -0
  169. package/src/lib/dropdown-menu/DropdownMenuItem.vue +24 -0
  170. package/src/lib/dropdown-menu/DropdownMenuLabel.vue +16 -0
  171. package/src/lib/dropdown-menu/DropdownMenuRadioGroup.vue +11 -0
  172. package/src/lib/dropdown-menu/DropdownMenuRadioItem.vue +44 -0
  173. package/src/lib/dropdown-menu/DropdownMenuSeparator.vue +14 -0
  174. package/src/lib/dropdown-menu/DropdownMenuShortcut.vue +11 -0
  175. package/src/lib/dropdown-menu/DropdownMenuSub.vue +11 -0
  176. package/src/lib/dropdown-menu/DropdownMenuSubContent.vue +27 -0
  177. package/src/lib/dropdown-menu/DropdownMenuSubTrigger.vue +36 -0
  178. package/src/lib/dropdown-menu/DropdownMenuTrigger.vue +11 -0
  179. package/src/lib/dropdown-menu/index.ts +14 -0
  180. package/src/lib/empty/Empty.vue +11 -0
  181. package/src/lib/empty/EmptyDescription.vue +11 -0
  182. package/src/lib/empty/EmptyIcon.vue +8 -0
  183. package/src/lib/empty/EmptyTitle.vue +11 -0
  184. package/src/lib/empty/index.ts +4 -0
  185. package/src/lib/feature-card/FeatureCard.vue +177 -0
  186. package/src/lib/feature-card/README.md +139 -0
  187. package/src/lib/feature-card/index.ts +1 -0
  188. package/src/lib/field/Field.vue +15 -0
  189. package/src/lib/field/FieldDescription.vue +15 -0
  190. package/src/lib/field/FieldError.vue +15 -0
  191. package/src/lib/field/FieldLabel.vue +24 -0
  192. package/src/lib/field/index.ts +4 -0
  193. package/src/lib/hover-card/HoverCard.vue +11 -0
  194. package/src/lib/hover-card/HoverCardContent.vue +31 -0
  195. package/src/lib/hover-card/HoverCardTrigger.vue +11 -0
  196. package/src/lib/hover-card/index.ts +3 -0
  197. package/src/lib/icon/Icon.vue +33 -0
  198. package/src/lib/input/Input.test.ts +71 -0
  199. package/src/lib/input/Input.vue +85 -0
  200. package/src/lib/input/index.ts +1 -0
  201. package/src/lib/input-group/InputGroup.vue +24 -0
  202. package/src/lib/input-group/InputGroupAddon.vue +25 -0
  203. package/src/lib/input-group/InputGroupInput.vue +38 -0
  204. package/src/lib/input-group/index.ts +3 -0
  205. package/src/lib/input-otp/InputOTP.vue +16 -0
  206. package/src/lib/input-otp/InputOTPGroup.vue +11 -0
  207. package/src/lib/input-otp/InputOTPSeparator.vue +8 -0
  208. package/src/lib/input-otp/InputOTPSlot.vue +20 -0
  209. package/src/lib/input-otp/index.ts +4 -0
  210. package/src/lib/kbd/Kbd.vue +11 -0
  211. package/src/lib/kbd/index.ts +1 -0
  212. package/src/lib/label/Label.test.ts +38 -0
  213. package/src/lib/label/Label.vue +20 -0
  214. package/src/lib/label/index.ts +1 -0
  215. package/src/lib/layout/AppFooter.vue +18 -0
  216. package/src/lib/layout/AppHeader.vue +22 -0
  217. package/src/lib/layout/AppLayout.vue +13 -0
  218. package/src/lib/layout/AppMain.vue +22 -0
  219. package/src/lib/layout/AppSidebar.vue +50 -0
  220. package/src/lib/menubar/Menubar.vue +21 -0
  221. package/src/lib/menubar/MenubarCheckboxItem.vue +45 -0
  222. package/src/lib/menubar/MenubarContent.vue +30 -0
  223. package/src/lib/menubar/MenubarGroup.vue +11 -0
  224. package/src/lib/menubar/MenubarItem.vue +24 -0
  225. package/src/lib/menubar/MenubarLabel.vue +16 -0
  226. package/src/lib/menubar/MenubarMenu.vue +11 -0
  227. package/src/lib/menubar/MenubarRadioGroup.vue +11 -0
  228. package/src/lib/menubar/MenubarRadioItem.vue +44 -0
  229. package/src/lib/menubar/MenubarSeparator.vue +14 -0
  230. package/src/lib/menubar/MenubarShortcut.vue +11 -0
  231. package/src/lib/menubar/MenubarSub.vue +11 -0
  232. package/src/lib/menubar/MenubarSubContent.vue +26 -0
  233. package/src/lib/menubar/MenubarSubTrigger.vue +36 -0
  234. package/src/lib/menubar/MenubarTrigger.vue +21 -0
  235. package/src/lib/menubar/index.ts +15 -0
  236. package/src/lib/modal/Modal.test.ts +81 -0
  237. package/src/lib/modal/Modal.vue +12 -0
  238. package/src/lib/modal/ModalClose.vue +9 -0
  239. package/src/lib/modal/ModalContent.vue +32 -0
  240. package/src/lib/modal/ModalTrigger.vue +11 -0
  241. package/src/lib/multi-select/MultiSelect.vue +186 -0
  242. package/src/lib/multi-select/MultiSelectItem.vue +47 -0
  243. package/src/lib/native-select/NativeSelect.vue +41 -0
  244. package/src/lib/native-select/index.ts +1 -0
  245. package/src/lib/navigation-menu/NavigationMenu.vue +23 -0
  246. package/src/lib/navigation-menu/NavigationMenuContent.vue +21 -0
  247. package/src/lib/navigation-menu/NavigationMenuIndicator.vue +21 -0
  248. package/src/lib/navigation-menu/NavigationMenuItem.vue +11 -0
  249. package/src/lib/navigation-menu/NavigationMenuLink.vue +23 -0
  250. package/src/lib/navigation-menu/NavigationMenuList.vue +21 -0
  251. package/src/lib/navigation-menu/NavigationMenuTrigger.vue +36 -0
  252. package/src/lib/navigation-menu/NavigationMenuViewport.vue +24 -0
  253. package/src/lib/navigation-menu/index.ts +8 -0
  254. package/src/lib/pagination/Pagination.vue +16 -0
  255. package/src/lib/pagination/PaginationContent.vue +16 -0
  256. package/src/lib/pagination/PaginationEllipsis.vue +27 -0
  257. package/src/lib/pagination/PaginationFirst.vue +25 -0
  258. package/src/lib/pagination/PaginationItem.vue +11 -0
  259. package/src/lib/pagination/PaginationLast.vue +25 -0
  260. package/src/lib/pagination/PaginationLink.vue +31 -0
  261. package/src/lib/pagination/PaginationNext.vue +24 -0
  262. package/src/lib/pagination/PaginationPrev.vue +24 -0
  263. package/src/lib/pagination/index.ts +9 -0
  264. package/src/lib/popover/Popover.test.ts +97 -0
  265. package/src/lib/popover/Popover.vue +11 -0
  266. package/src/lib/popover/PopoverContent.vue +31 -0
  267. package/src/lib/popover/PopoverTrigger.vue +11 -0
  268. package/src/lib/popover/index.ts +3 -0
  269. package/src/lib/progress/Progress.test.ts +59 -0
  270. package/src/lib/progress/Progress.vue +41 -0
  271. package/src/lib/progress/index.ts +1 -0
  272. package/src/lib/radio-group/RadioGroup.test.ts +45 -0
  273. package/src/lib/radio-group/RadioGroup.vue +16 -0
  274. package/src/lib/radio-group/RadioGroupItem.vue +35 -0
  275. package/src/lib/radio-group/index.ts +2 -0
  276. package/src/lib/resizable/ResizableHandle.vue +38 -0
  277. package/src/lib/resizable/ResizablePanel.vue +11 -0
  278. package/src/lib/resizable/ResizablePanelGroup.vue +16 -0
  279. package/src/lib/resizable/index.ts +3 -0
  280. package/src/lib/scroll-area/ScrollArea.vue +29 -0
  281. package/src/lib/scroll-area/ScrollBar.vue +26 -0
  282. package/src/lib/scroll-area/index.ts +2 -0
  283. package/src/lib/select/Select.vue +11 -0
  284. package/src/lib/select/SelectContent.vue +48 -0
  285. package/src/lib/select/SelectGroup.vue +11 -0
  286. package/src/lib/select/SelectItem.vue +41 -0
  287. package/src/lib/select/SelectLabel.vue +16 -0
  288. package/src/lib/select/SelectScrollDownButton.vue +29 -0
  289. package/src/lib/select/SelectScrollUpButton.vue +29 -0
  290. package/src/lib/select/SelectSeparator.vue +14 -0
  291. package/src/lib/select/SelectTrigger.vue +37 -0
  292. package/src/lib/select/SelectValue.vue +11 -0
  293. package/src/lib/select/index.ts +10 -0
  294. package/src/lib/separator/Separator.test.ts +47 -0
  295. package/src/lib/separator/Separator.vue +23 -0
  296. package/src/lib/separator/index.ts +1 -0
  297. package/src/lib/sheet/Sheet.test.ts +118 -0
  298. package/src/lib/sheet/Sheet.vue +11 -0
  299. package/src/lib/sheet/SheetClose.vue +11 -0
  300. package/src/lib/sheet/SheetContent.vue +68 -0
  301. package/src/lib/sheet/SheetDescription.vue +16 -0
  302. package/src/lib/sheet/SheetFooter.vue +15 -0
  303. package/src/lib/sheet/SheetHeader.vue +15 -0
  304. package/src/lib/sheet/SheetOverlay.vue +21 -0
  305. package/src/lib/sheet/SheetTitle.vue +16 -0
  306. package/src/lib/sheet/SheetTrigger.vue +11 -0
  307. package/src/lib/sheet/index.ts +9 -0
  308. package/src/lib/sidebar/Sidebar.vue +19 -0
  309. package/src/lib/sidebar/SidebarContent.vue +11 -0
  310. package/src/lib/sidebar/SidebarFooter.vue +11 -0
  311. package/src/lib/sidebar/SidebarGroup.vue +11 -0
  312. package/src/lib/sidebar/SidebarGroupLabel.vue +11 -0
  313. package/src/lib/sidebar/SidebarHeader.vue +11 -0
  314. package/src/lib/sidebar/SidebarInset.vue +11 -0
  315. package/src/lib/sidebar/SidebarMenu.vue +11 -0
  316. package/src/lib/sidebar/SidebarMenuButton.vue +20 -0
  317. package/src/lib/sidebar/SidebarMenuItem.vue +9 -0
  318. package/src/lib/sidebar/SidebarProvider.vue +23 -0
  319. package/src/lib/sidebar/SidebarSeparator.vue +9 -0
  320. package/src/lib/sidebar/SidebarTrigger.vue +24 -0
  321. package/src/lib/sidebar/context.ts +8 -0
  322. package/src/lib/sidebar/useSidebar.ts +10 -0
  323. package/src/lib/skeleton/Skeleton.test.ts +36 -0
  324. package/src/lib/skeleton/Skeleton.vue +9 -0
  325. package/src/lib/skeleton/index.ts +1 -0
  326. package/src/lib/slider/Slider.test.ts +63 -0
  327. package/src/lib/slider/Slider.vue +67 -0
  328. package/src/lib/slider/index.ts +1 -0
  329. package/src/lib/sonner/Toaster.vue +29 -0
  330. package/src/lib/spinner/Spinner.vue +34 -0
  331. package/src/lib/spinner/index.ts +1 -0
  332. package/src/lib/stats-card/StatsCard.vue +179 -0
  333. package/src/lib/stats-card/index.ts +2 -0
  334. package/src/lib/styles.ts +133 -0
  335. package/src/lib/switch/Switch.test.ts +52 -0
  336. package/src/lib/switch/Switch.vue +43 -0
  337. package/src/lib/table/Table.test.ts +150 -0
  338. package/src/lib/table/Table.vue +13 -0
  339. package/src/lib/table/TableBody.vue +11 -0
  340. package/src/lib/table/TableCaption.vue +11 -0
  341. package/src/lib/table/TableCell.vue +11 -0
  342. package/src/lib/table/TableFooter.vue +11 -0
  343. package/src/lib/table/TableHead.vue +11 -0
  344. package/src/lib/table/TableHeader.vue +11 -0
  345. package/src/lib/table/TableRow.vue +11 -0
  346. package/src/lib/table/index.ts +8 -0
  347. package/src/lib/tabs/Tabs.test.ts +150 -0
  348. package/src/lib/tabs/Tabs.vue +11 -0
  349. package/src/lib/tabs/TabsContent.vue +21 -0
  350. package/src/lib/tabs/TabsList.vue +21 -0
  351. package/src/lib/tabs/TabsTrigger.vue +21 -0
  352. package/src/lib/tabs/index.ts +4 -0
  353. package/src/lib/textarea/Textarea.test.ts +41 -0
  354. package/src/lib/textarea/Textarea.vue +36 -0
  355. package/src/lib/theme-selector/README.md +154 -0
  356. package/src/lib/theme-selector/ThemeSelector.vue +279 -0
  357. package/src/lib/theme-selector/index.ts +2 -0
  358. package/src/lib/time-picker/TimePicker.vue +162 -0
  359. package/src/lib/time-picker/TimePickerSegment.vue +176 -0
  360. package/src/lib/toast/Toast.test.ts +80 -0
  361. package/src/lib/toast/Toast.vue +56 -0
  362. package/src/lib/toast/ToastAction.vue +23 -0
  363. package/src/lib/toast/ToastClose.vue +38 -0
  364. package/src/lib/toast/ToastDescription.vue +12 -0
  365. package/src/lib/toast/ToastProvider.ts +65 -0
  366. package/src/lib/toast/ToastTitle.vue +12 -0
  367. package/src/lib/toast/ToastViewport.vue +18 -0
  368. package/src/lib/toast/Toaster.vue +50 -0
  369. package/src/lib/toast/index.ts +7 -0
  370. package/src/lib/toggle/Toggle.vue +21 -0
  371. package/src/lib/toggle/index.ts +2 -0
  372. package/src/lib/toggle/variants.test.ts +87 -0
  373. package/src/lib/toggle/variants.ts +21 -0
  374. package/src/lib/toggle-group/ToggleGroup.vue +24 -0
  375. package/src/lib/toggle-group/ToggleGroupItem.vue +33 -0
  376. package/src/lib/toggle-group/index.ts +2 -0
  377. package/src/lib/tooltip/Tooltip.test.ts +87 -0
  378. package/src/lib/tooltip/Tooltip.vue +11 -0
  379. package/src/lib/tooltip/TooltipContent.vue +30 -0
  380. package/src/lib/tooltip/TooltipProvider.vue +11 -0
  381. package/src/lib/tooltip/TooltipTrigger.vue +11 -0
  382. package/src/lib/tooltip/index.ts +4 -0
  383. package/src/lib/typography/TypographyBlockquote.vue +11 -0
  384. package/src/lib/typography/TypographyH1.vue +11 -0
  385. package/src/lib/typography/TypographyH2.vue +11 -0
  386. package/src/lib/typography/TypographyH3.vue +11 -0
  387. package/src/lib/typography/TypographyH4.vue +11 -0
  388. package/src/lib/typography/TypographyInlineCode.vue +11 -0
  389. package/src/lib/typography/TypographyLarge.vue +11 -0
  390. package/src/lib/typography/TypographyLead.vue +11 -0
  391. package/src/lib/typography/TypographyMuted.vue +11 -0
  392. package/src/lib/typography/TypographyP.vue +11 -0
  393. package/src/lib/typography/TypographySmall.vue +11 -0
  394. package/src/lib/typography/index.ts +11 -0
  395. package/src/lib/utils.test.ts +45 -0
  396. package/src/lib/utils.ts +14 -0
  397. package/src/lib/variants.ts +45 -0
  398. package/src/theme.css +203 -0
  399. package/src/vite-env.d.ts +6 -0
@@ -0,0 +1,1112 @@
1
+ // Auto-generated component registry for Spavn UI CLI
2
+ // This file maps component names to their source files in the components package
3
+ // Complete registry of all Spavn UI components
4
+ export const COMPONENT_REGISTRY = {
5
+ // ─── Core Components ───────────────────────────────────────────
6
+ button: {
7
+ name: 'Button',
8
+ category: 'core',
9
+ description: 'Interactive button with multiple variants, sizes, and elevation levels',
10
+ files: [
11
+ 'lib/button/Button.vue',
12
+ 'lib/button/variants.ts',
13
+ 'lib/button/index.ts',
14
+ ],
15
+ subComponents: [],
16
+ },
17
+ badge: {
18
+ name: 'Badge',
19
+ category: 'core',
20
+ description: 'Small status label with color variants for tags and statuses',
21
+ files: [
22
+ 'lib/badge/Badge.vue',
23
+ 'lib/badge/variants.ts',
24
+ 'lib/badge/index.ts',
25
+ ],
26
+ subComponents: [],
27
+ },
28
+ avatar: {
29
+ name: 'Avatar',
30
+ category: 'core',
31
+ description: 'User avatar with image source and text fallback',
32
+ files: [
33
+ 'lib/avatar/Avatar.vue',
34
+ 'lib/avatar/AvatarImage.vue',
35
+ 'lib/avatar/AvatarFallback.vue',
36
+ 'lib/avatar/index.ts',
37
+ ],
38
+ subComponents: ['AvatarImage', 'AvatarFallback'],
39
+ },
40
+ icon: {
41
+ name: 'Icon',
42
+ category: 'core',
43
+ description: 'Dynamic Lucide icon renderer that accepts an icon name string',
44
+ files: [
45
+ 'lib/icon/Icon.vue',
46
+ 'lib/icon/index.ts',
47
+ ],
48
+ subComponents: [],
49
+ },
50
+ spinner: {
51
+ name: 'Spinner',
52
+ category: 'core',
53
+ description: 'Animated loading spinner indicator',
54
+ files: [
55
+ 'lib/spinner/Spinner.vue',
56
+ 'lib/spinner/index.ts',
57
+ ],
58
+ subComponents: [],
59
+ },
60
+ skeleton: {
61
+ name: 'Skeleton',
62
+ category: 'core',
63
+ description: 'Placeholder loading animation that mimics content shape',
64
+ files: [
65
+ 'lib/skeleton/Skeleton.vue',
66
+ 'lib/skeleton/index.ts',
67
+ ],
68
+ subComponents: [],
69
+ },
70
+ kbd: {
71
+ name: 'Kbd',
72
+ category: 'core',
73
+ description: 'Keyboard shortcut indicator styled as a key cap',
74
+ files: [
75
+ 'lib/kbd/Kbd.vue',
76
+ 'lib/kbd/index.ts',
77
+ ],
78
+ subComponents: [],
79
+ },
80
+ separator: {
81
+ name: 'Separator',
82
+ category: 'core',
83
+ description: 'Visual divider line for separating content sections',
84
+ files: [
85
+ 'lib/separator/Separator.vue',
86
+ 'lib/separator/index.ts',
87
+ ],
88
+ subComponents: [],
89
+ },
90
+ // ─── Layout Components ─────────────────────────────────────────
91
+ appLayout: {
92
+ name: 'AppLayout',
93
+ category: 'layout',
94
+ description: 'Root application layout shell that composes header, sidebar, main, and footer regions',
95
+ files: [
96
+ 'lib/layout/AppLayout.vue',
97
+ 'lib/layout/index.ts',
98
+ ],
99
+ subComponents: ['AppHeader', 'AppSidebar', 'AppFooter', 'AppMain'],
100
+ },
101
+ appHeader: {
102
+ name: 'AppHeader',
103
+ category: 'layout',
104
+ description: 'Sticky application header bar with slot-based content areas',
105
+ files: [
106
+ 'lib/layout/AppHeader.vue',
107
+ ],
108
+ subComponents: [],
109
+ },
110
+ appSidebar: {
111
+ name: 'AppSidebar',
112
+ category: 'layout',
113
+ description: 'Collapsible application sidebar for primary navigation',
114
+ files: [
115
+ 'lib/layout/AppSidebar.vue',
116
+ ],
117
+ subComponents: [],
118
+ },
119
+ appFooter: {
120
+ name: 'AppFooter',
121
+ category: 'layout',
122
+ description: 'Application footer region pinned to the bottom of the layout',
123
+ files: [
124
+ 'lib/layout/AppFooter.vue',
125
+ ],
126
+ subComponents: [],
127
+ },
128
+ appMain: {
129
+ name: 'AppMain',
130
+ category: 'layout',
131
+ description: 'Main content area that fills the remaining space in AppLayout',
132
+ files: [
133
+ 'lib/layout/AppMain.vue',
134
+ ],
135
+ subComponents: [],
136
+ },
137
+ sidebarProvider: {
138
+ name: 'SidebarProvider',
139
+ category: 'layout',
140
+ description: 'Context provider that manages sidebar open/collapsed state',
141
+ files: [
142
+ 'lib/sidebar/SidebarProvider.vue',
143
+ 'lib/sidebar/Sidebar.vue',
144
+ 'lib/sidebar/SidebarHeader.vue',
145
+ 'lib/sidebar/SidebarContent.vue',
146
+ 'lib/sidebar/SidebarFooter.vue',
147
+ 'lib/sidebar/SidebarGroup.vue',
148
+ 'lib/sidebar/SidebarGroupLabel.vue',
149
+ 'lib/sidebar/SidebarMenu.vue',
150
+ 'lib/sidebar/SidebarMenuItem.vue',
151
+ 'lib/sidebar/SidebarMenuButton.vue',
152
+ 'lib/sidebar/SidebarTrigger.vue',
153
+ 'lib/sidebar/SidebarSeparator.vue',
154
+ 'lib/sidebar/SidebarInset.vue',
155
+ 'lib/sidebar/useSidebar.ts',
156
+ 'lib/sidebar/index.ts',
157
+ ],
158
+ subComponents: [
159
+ 'Sidebar',
160
+ 'SidebarHeader',
161
+ 'SidebarContent',
162
+ 'SidebarFooter',
163
+ 'SidebarGroup',
164
+ 'SidebarGroupLabel',
165
+ 'SidebarMenu',
166
+ 'SidebarMenuItem',
167
+ 'SidebarMenuButton',
168
+ 'SidebarTrigger',
169
+ 'SidebarSeparator',
170
+ 'SidebarInset',
171
+ ],
172
+ },
173
+ // ─── Form Components ───────────────────────────────────────────
174
+ input: {
175
+ name: 'Input',
176
+ category: 'forms',
177
+ description: 'Single-line text input with v-model support and validation states',
178
+ files: [
179
+ 'lib/input/Input.vue',
180
+ 'lib/input/index.ts',
181
+ ],
182
+ subComponents: [],
183
+ },
184
+ inputGroup: {
185
+ name: 'InputGroup',
186
+ category: 'forms',
187
+ description: 'Groups an input with leading/trailing addons (icons, text, buttons)',
188
+ files: [
189
+ 'lib/input-group/InputGroup.vue',
190
+ 'lib/input-group/InputGroupAddon.vue',
191
+ 'lib/input-group/InputGroupInput.vue',
192
+ 'lib/input-group/index.ts',
193
+ ],
194
+ subComponents: ['InputGroupAddon', 'InputGroupInput'],
195
+ },
196
+ inputOtp: {
197
+ name: 'InputOTP',
198
+ category: 'forms',
199
+ description: 'One-time-password input with individual character slots',
200
+ files: [
201
+ 'lib/input-otp/InputOTP.vue',
202
+ 'lib/input-otp/InputOTPGroup.vue',
203
+ 'lib/input-otp/InputOTPSlot.vue',
204
+ 'lib/input-otp/InputOTPSeparator.vue',
205
+ 'lib/input-otp/index.ts',
206
+ ],
207
+ subComponents: ['InputOTPGroup', 'InputOTPSlot', 'InputOTPSeparator'],
208
+ },
209
+ textarea: {
210
+ name: 'Textarea',
211
+ category: 'forms',
212
+ description: 'Multi-line text input with auto-resize support',
213
+ files: [
214
+ 'lib/textarea/Textarea.vue',
215
+ 'lib/textarea/index.ts',
216
+ ],
217
+ subComponents: [],
218
+ },
219
+ label: {
220
+ name: 'Label',
221
+ category: 'forms',
222
+ description: 'Accessible label element that pairs with form controls',
223
+ files: [
224
+ 'lib/label/Label.vue',
225
+ 'lib/label/index.ts',
226
+ ],
227
+ subComponents: [],
228
+ },
229
+ field: {
230
+ name: 'Field',
231
+ category: 'forms',
232
+ description: 'Form field wrapper that composes label, description, control, and error message',
233
+ files: [
234
+ 'lib/field/Field.vue',
235
+ 'lib/field/FieldLabel.vue',
236
+ 'lib/field/FieldDescription.vue',
237
+ 'lib/field/FieldError.vue',
238
+ 'lib/field/index.ts',
239
+ ],
240
+ subComponents: ['FieldLabel', 'FieldDescription', 'FieldError'],
241
+ },
242
+ checkbox: {
243
+ name: 'Checkbox',
244
+ category: 'forms',
245
+ description: 'Checkbox input with indeterminate state support',
246
+ files: [
247
+ 'lib/checkbox/Checkbox.vue',
248
+ 'lib/checkbox/index.ts',
249
+ ],
250
+ subComponents: [],
251
+ },
252
+ switch: {
253
+ name: 'Switch',
254
+ category: 'forms',
255
+ description: 'Toggle switch for boolean on/off values',
256
+ files: [
257
+ 'lib/switch/Switch.vue',
258
+ 'lib/switch/index.ts',
259
+ ],
260
+ subComponents: [],
261
+ },
262
+ radioGroup: {
263
+ name: 'RadioGroup',
264
+ category: 'forms',
265
+ description: 'Group of mutually exclusive radio options',
266
+ files: [
267
+ 'lib/radio-group/RadioGroup.vue',
268
+ 'lib/radio-group/RadioGroupItem.vue',
269
+ 'lib/radio-group/index.ts',
270
+ ],
271
+ subComponents: ['RadioGroupItem'],
272
+ },
273
+ select: {
274
+ name: 'Select',
275
+ category: 'forms',
276
+ description: 'Styled dropdown select with search, groups, and keyboard navigation',
277
+ files: [
278
+ 'lib/select/Select.vue',
279
+ 'lib/select/SelectTrigger.vue',
280
+ 'lib/select/SelectValue.vue',
281
+ 'lib/select/SelectContent.vue',
282
+ 'lib/select/SelectItem.vue',
283
+ 'lib/select/SelectGroup.vue',
284
+ 'lib/select/SelectLabel.vue',
285
+ 'lib/select/SelectSeparator.vue',
286
+ 'lib/select/SelectScrollUpButton.vue',
287
+ 'lib/select/SelectScrollDownButton.vue',
288
+ 'lib/select/index.ts',
289
+ ],
290
+ subComponents: [
291
+ 'SelectTrigger',
292
+ 'SelectValue',
293
+ 'SelectContent',
294
+ 'SelectItem',
295
+ 'SelectGroup',
296
+ 'SelectLabel',
297
+ 'SelectSeparator',
298
+ 'SelectScrollUpButton',
299
+ 'SelectScrollDownButton',
300
+ ],
301
+ },
302
+ nativeSelect: {
303
+ name: 'NativeSelect',
304
+ category: 'forms',
305
+ description: 'Styled wrapper around the native HTML select element',
306
+ files: [
307
+ 'lib/native-select/NativeSelect.vue',
308
+ 'lib/native-select/index.ts',
309
+ ],
310
+ subComponents: [],
311
+ },
312
+ multiSelect: {
313
+ name: 'MultiSelect',
314
+ category: 'forms',
315
+ description: 'Multi-value select with tags and search filtering',
316
+ files: [
317
+ 'lib/multi-select/MultiSelect.vue',
318
+ 'lib/multi-select/MultiSelectItem.vue',
319
+ 'lib/multi-select/index.ts',
320
+ ],
321
+ subComponents: ['MultiSelectItem'],
322
+ },
323
+ slider: {
324
+ name: 'Slider',
325
+ category: 'forms',
326
+ description: 'Range slider for selecting numeric values within a min/max range',
327
+ files: [
328
+ 'lib/slider/Slider.vue',
329
+ 'lib/slider/index.ts',
330
+ ],
331
+ subComponents: [],
332
+ },
333
+ toggle: {
334
+ name: 'Toggle',
335
+ category: 'forms',
336
+ description: 'Two-state toggle button (pressed/not pressed) with variant styling',
337
+ files: [
338
+ 'lib/toggle/Toggle.vue',
339
+ 'lib/toggle/variants.ts',
340
+ 'lib/toggle/index.ts',
341
+ ],
342
+ subComponents: [],
343
+ },
344
+ toggleGroup: {
345
+ name: 'ToggleGroup',
346
+ category: 'forms',
347
+ description: 'Groups multiple Toggle buttons with single or multiple selection',
348
+ files: [
349
+ 'lib/toggle-group/ToggleGroup.vue',
350
+ 'lib/toggle-group/ToggleGroupItem.vue',
351
+ 'lib/toggle-group/index.ts',
352
+ ],
353
+ subComponents: ['ToggleGroupItem'],
354
+ },
355
+ progress: {
356
+ name: 'Progress',
357
+ category: 'forms',
358
+ description: 'Determinate or indeterminate progress bar',
359
+ files: [
360
+ 'lib/progress/Progress.vue',
361
+ 'lib/progress/index.ts',
362
+ ],
363
+ subComponents: [],
364
+ },
365
+ // ─── Data Display Components ───────────────────────────────────
366
+ card: {
367
+ name: 'Card',
368
+ category: 'data-display',
369
+ description: 'Elevated container for grouping related content with header and footer slots',
370
+ files: [
371
+ 'lib/card/Card.vue',
372
+ 'lib/card/CardHeader.vue',
373
+ 'lib/card/CardTitle.vue',
374
+ 'lib/card/CardDescription.vue',
375
+ 'lib/card/CardContent.vue',
376
+ 'lib/card/CardFooter.vue',
377
+ 'lib/card/index.ts',
378
+ ],
379
+ subComponents: ['CardHeader', 'CardTitle', 'CardDescription', 'CardContent', 'CardFooter'],
380
+ },
381
+ statsCard: {
382
+ name: 'StatsCard',
383
+ category: 'data-display',
384
+ description: 'Pre-composed card for displaying a metric with label, value, and trend',
385
+ files: [
386
+ 'lib/stats-card/StatsCard.vue',
387
+ 'lib/stats-card/index.ts',
388
+ ],
389
+ subComponents: [],
390
+ },
391
+ featureCard: {
392
+ name: 'FeatureCard',
393
+ category: 'data-display',
394
+ description: 'Pre-composed card for showcasing a feature with icon, title, and description',
395
+ files: [
396
+ 'lib/feature-card/FeatureCard.vue',
397
+ 'lib/feature-card/index.ts',
398
+ ],
399
+ subComponents: [],
400
+ },
401
+ table: {
402
+ name: 'Table',
403
+ category: 'data-display',
404
+ description: 'Semantic HTML table with styled header, body, footer, and cell components',
405
+ files: [
406
+ 'lib/table/Table.vue',
407
+ 'lib/table/TableHeader.vue',
408
+ 'lib/table/TableBody.vue',
409
+ 'lib/table/TableFooter.vue',
410
+ 'lib/table/TableRow.vue',
411
+ 'lib/table/TableHead.vue',
412
+ 'lib/table/TableCell.vue',
413
+ 'lib/table/TableCaption.vue',
414
+ 'lib/table/index.ts',
415
+ ],
416
+ subComponents: [
417
+ 'TableHeader',
418
+ 'TableBody',
419
+ 'TableFooter',
420
+ 'TableRow',
421
+ 'TableHead',
422
+ 'TableCell',
423
+ 'TableCaption',
424
+ ],
425
+ },
426
+ dataTable: {
427
+ name: 'DataTable',
428
+ category: 'data-display',
429
+ description: 'Full-featured data table with sorting, filtering, pagination, and column visibility',
430
+ files: [
431
+ 'lib/data-table/DataTable.vue',
432
+ 'lib/data-table/index.ts',
433
+ ],
434
+ subComponents: [],
435
+ },
436
+ accordion: {
437
+ name: 'Accordion',
438
+ category: 'data-display',
439
+ description: 'Vertically stacked sections that expand/collapse to reveal content',
440
+ files: [
441
+ 'lib/accordion/Accordion.vue',
442
+ 'lib/accordion/AccordionItem.vue',
443
+ 'lib/accordion/AccordionTrigger.vue',
444
+ 'lib/accordion/AccordionContent.vue',
445
+ 'lib/accordion/index.ts',
446
+ ],
447
+ subComponents: ['AccordionItem', 'AccordionTrigger', 'AccordionContent'],
448
+ },
449
+ collapsible: {
450
+ name: 'Collapsible',
451
+ category: 'data-display',
452
+ description: 'Simple expand/collapse container controlled by a trigger',
453
+ files: [
454
+ 'lib/collapsible/Collapsible.vue',
455
+ 'lib/collapsible/CollapsibleTrigger.vue',
456
+ 'lib/collapsible/CollapsibleContent.vue',
457
+ 'lib/collapsible/index.ts',
458
+ ],
459
+ subComponents: ['CollapsibleTrigger', 'CollapsibleContent'],
460
+ },
461
+ tabs: {
462
+ name: 'Tabs',
463
+ category: 'data-display',
464
+ description: 'Tabbed interface for switching between content panels',
465
+ files: [
466
+ 'lib/tabs/Tabs.vue',
467
+ 'lib/tabs/TabsList.vue',
468
+ 'lib/tabs/TabsTrigger.vue',
469
+ 'lib/tabs/TabsContent.vue',
470
+ 'lib/tabs/index.ts',
471
+ ],
472
+ subComponents: ['TabsList', 'TabsTrigger', 'TabsContent'],
473
+ },
474
+ calendar: {
475
+ name: 'Calendar',
476
+ category: 'data-display',
477
+ description: 'Date calendar grid with month/year navigation and date selection',
478
+ files: [
479
+ 'lib/calendar/Calendar.vue',
480
+ 'lib/calendar/CalendarCell.vue',
481
+ 'lib/calendar/CalendarCellTrigger.vue',
482
+ 'lib/calendar/CalendarGrid.vue',
483
+ 'lib/calendar/CalendarGridBody.vue',
484
+ 'lib/calendar/CalendarGridHead.vue',
485
+ 'lib/calendar/CalendarGridRow.vue',
486
+ 'lib/calendar/CalendarHeadCell.vue',
487
+ 'lib/calendar/CalendarHeader.vue',
488
+ 'lib/calendar/CalendarHeading.vue',
489
+ 'lib/calendar/CalendarNext.vue',
490
+ 'lib/calendar/CalendarPrev.vue',
491
+ 'lib/calendar/index.ts',
492
+ ],
493
+ subComponents: [
494
+ 'CalendarCell',
495
+ 'CalendarCellTrigger',
496
+ 'CalendarGrid',
497
+ 'CalendarGridBody',
498
+ 'CalendarGridHead',
499
+ 'CalendarGridRow',
500
+ 'CalendarHeadCell',
501
+ 'CalendarHeader',
502
+ 'CalendarHeading',
503
+ 'CalendarNext',
504
+ 'CalendarPrev',
505
+ ],
506
+ },
507
+ datePicker: {
508
+ name: 'DateRangePicker',
509
+ category: 'data-display',
510
+ description: 'Dual-calendar date range selector with presets support',
511
+ files: [
512
+ 'lib/date-range-picker/DateRangePicker.vue',
513
+ 'lib/date-range-picker/index.ts',
514
+ ],
515
+ subComponents: [],
516
+ },
517
+ timePicker: {
518
+ name: 'TimePicker',
519
+ category: 'data-display',
520
+ description: 'Time input with segmented hours, minutes, and optional seconds',
521
+ files: [
522
+ 'lib/time-picker/TimePicker.vue',
523
+ 'lib/time-picker/TimePickerSegment.vue',
524
+ 'lib/time-picker/index.ts',
525
+ ],
526
+ subComponents: ['TimePickerSegment'],
527
+ },
528
+ dateTimePicker: {
529
+ name: 'DateTimePicker',
530
+ category: 'data-display',
531
+ description: 'Combined date and time picker in a single control',
532
+ files: [
533
+ 'lib/date-time-picker/DateTimePicker.vue',
534
+ 'lib/date-time-picker/index.ts',
535
+ ],
536
+ subComponents: [],
537
+ },
538
+ carousel: {
539
+ name: 'Carousel',
540
+ category: 'data-display',
541
+ description: 'Horizontal content carousel with previous/next navigation',
542
+ files: [
543
+ 'lib/carousel/Carousel.vue',
544
+ 'lib/carousel/CarouselContent.vue',
545
+ 'lib/carousel/CarouselItem.vue',
546
+ 'lib/carousel/CarouselPrevious.vue',
547
+ 'lib/carousel/CarouselNext.vue',
548
+ 'lib/carousel/useCarousel.ts',
549
+ 'lib/carousel/index.ts',
550
+ ],
551
+ subComponents: ['CarouselContent', 'CarouselItem', 'CarouselPrevious', 'CarouselNext'],
552
+ },
553
+ pagination: {
554
+ name: 'Pagination',
555
+ category: 'data-display',
556
+ description: 'Page navigation with first, previous, numbered, next, and last controls',
557
+ files: [
558
+ 'lib/pagination/Pagination.vue',
559
+ 'lib/pagination/PaginationContent.vue',
560
+ 'lib/pagination/PaginationItem.vue',
561
+ 'lib/pagination/PaginationLink.vue',
562
+ 'lib/pagination/PaginationFirst.vue',
563
+ 'lib/pagination/PaginationPrev.vue',
564
+ 'lib/pagination/PaginationNext.vue',
565
+ 'lib/pagination/PaginationLast.vue',
566
+ 'lib/pagination/PaginationEllipsis.vue',
567
+ 'lib/pagination/index.ts',
568
+ ],
569
+ subComponents: [
570
+ 'PaginationContent',
571
+ 'PaginationItem',
572
+ 'PaginationLink',
573
+ 'PaginationFirst',
574
+ 'PaginationPrev',
575
+ 'PaginationNext',
576
+ 'PaginationLast',
577
+ 'PaginationEllipsis',
578
+ ],
579
+ },
580
+ empty: {
581
+ name: 'Empty',
582
+ category: 'data-display',
583
+ description: 'Empty state placeholder with icon, title, and description slots',
584
+ files: [
585
+ 'lib/empty/Empty.vue',
586
+ 'lib/empty/EmptyIcon.vue',
587
+ 'lib/empty/EmptyTitle.vue',
588
+ 'lib/empty/EmptyDescription.vue',
589
+ 'lib/empty/index.ts',
590
+ ],
591
+ subComponents: ['EmptyIcon', 'EmptyTitle', 'EmptyDescription'],
592
+ },
593
+ alert: {
594
+ name: 'Alert',
595
+ category: 'data-display',
596
+ description: 'Inline alert banner with variant-based styling for info, success, warning, and error',
597
+ files: [
598
+ 'lib/alert/Alert.vue',
599
+ 'lib/alert/AlertTitle.vue',
600
+ 'lib/alert/AlertDescription.vue',
601
+ 'lib/alert/variants.ts',
602
+ 'lib/alert/index.ts',
603
+ ],
604
+ subComponents: ['AlertTitle', 'AlertDescription'],
605
+ },
606
+ typography: {
607
+ name: 'Typography',
608
+ category: 'data-display',
609
+ description: 'Semantic typography primitives for headings, paragraphs, and text styles',
610
+ files: [
611
+ 'lib/typography/TypographyH1.vue',
612
+ 'lib/typography/TypographyH2.vue',
613
+ 'lib/typography/TypographyH3.vue',
614
+ 'lib/typography/TypographyH4.vue',
615
+ 'lib/typography/TypographyP.vue',
616
+ 'lib/typography/TypographyBlockquote.vue',
617
+ 'lib/typography/TypographyInlineCode.vue',
618
+ 'lib/typography/TypographyLead.vue',
619
+ 'lib/typography/TypographyLarge.vue',
620
+ 'lib/typography/TypographySmall.vue',
621
+ 'lib/typography/TypographyMuted.vue',
622
+ 'lib/typography/index.ts',
623
+ ],
624
+ subComponents: [
625
+ 'TypographyH1',
626
+ 'TypographyH2',
627
+ 'TypographyH3',
628
+ 'TypographyH4',
629
+ 'TypographyP',
630
+ 'TypographyBlockquote',
631
+ 'TypographyInlineCode',
632
+ 'TypographyLead',
633
+ 'TypographyLarge',
634
+ 'TypographySmall',
635
+ 'TypographyMuted',
636
+ ],
637
+ },
638
+ codePreview: {
639
+ name: 'CodePreview',
640
+ category: 'data-display',
641
+ description: 'Code snippet preview with syntax highlighting and copy button',
642
+ files: [
643
+ 'lib/code-preview/CodePreview.vue',
644
+ 'lib/code-preview/index.ts',
645
+ ],
646
+ subComponents: [],
647
+ },
648
+ aspectRatio: {
649
+ name: 'AspectRatio',
650
+ category: 'data-display',
651
+ description: 'Container that maintains a fixed aspect ratio for its content',
652
+ files: [
653
+ 'lib/aspect-ratio/AspectRatio.vue',
654
+ 'lib/aspect-ratio/index.ts',
655
+ ],
656
+ subComponents: [],
657
+ },
658
+ scrollArea: {
659
+ name: 'ScrollArea',
660
+ category: 'data-display',
661
+ description: 'Custom scrollable container with styled scrollbars',
662
+ files: [
663
+ 'lib/scroll-area/ScrollArea.vue',
664
+ 'lib/scroll-area/ScrollBar.vue',
665
+ 'lib/scroll-area/index.ts',
666
+ ],
667
+ subComponents: ['ScrollBar'],
668
+ },
669
+ resizable: {
670
+ name: 'Resizable',
671
+ category: 'data-display',
672
+ description: 'Resizable panel layout with draggable dividers',
673
+ files: [
674
+ 'lib/resizable/ResizablePanelGroup.vue',
675
+ 'lib/resizable/ResizablePanel.vue',
676
+ 'lib/resizable/ResizableHandle.vue',
677
+ 'lib/resizable/index.ts',
678
+ ],
679
+ subComponents: ['ResizablePanelGroup', 'ResizablePanel', 'ResizableHandle'],
680
+ },
681
+ // ─── Overlay Components ────────────────────────────────────────
682
+ dialog: {
683
+ name: 'Dialog',
684
+ category: 'overlays',
685
+ description: 'Modal dialog with overlay, triggered by a child element',
686
+ files: [
687
+ 'lib/dialog/Dialog.vue',
688
+ 'lib/dialog/DialogTrigger.vue',
689
+ 'lib/dialog/DialogPortal.vue',
690
+ 'lib/dialog/DialogOverlay.vue',
691
+ 'lib/dialog/DialogContent.vue',
692
+ 'lib/dialog/DialogHeader.vue',
693
+ 'lib/dialog/DialogFooter.vue',
694
+ 'lib/dialog/DialogTitle.vue',
695
+ 'lib/dialog/DialogDescription.vue',
696
+ 'lib/dialog/DialogClose.vue',
697
+ 'lib/dialog/index.ts',
698
+ ],
699
+ subComponents: [
700
+ 'DialogTrigger',
701
+ 'DialogPortal',
702
+ 'DialogOverlay',
703
+ 'DialogContent',
704
+ 'DialogHeader',
705
+ 'DialogFooter',
706
+ 'DialogTitle',
707
+ 'DialogDescription',
708
+ 'DialogClose',
709
+ ],
710
+ },
711
+ modal: {
712
+ name: 'Modal',
713
+ category: 'overlays',
714
+ description: 'Convenience wrapper around Dialog with simplified API',
715
+ files: [
716
+ 'lib/modal/Modal.vue',
717
+ 'lib/modal/ModalContent.vue',
718
+ 'lib/modal/ModalTrigger.vue',
719
+ 'lib/modal/ModalClose.vue',
720
+ 'lib/modal/index.ts',
721
+ ],
722
+ subComponents: ['ModalContent', 'ModalTrigger', 'ModalClose'],
723
+ },
724
+ sheet: {
725
+ name: 'Sheet',
726
+ category: 'overlays',
727
+ description: 'Slide-out panel from any edge of the screen',
728
+ files: [
729
+ 'lib/sheet/Sheet.vue',
730
+ 'lib/sheet/SheetTrigger.vue',
731
+ 'lib/sheet/SheetClose.vue',
732
+ 'lib/sheet/SheetContent.vue',
733
+ 'lib/sheet/SheetHeader.vue',
734
+ 'lib/sheet/SheetFooter.vue',
735
+ 'lib/sheet/SheetTitle.vue',
736
+ 'lib/sheet/SheetDescription.vue',
737
+ 'lib/sheet/index.ts',
738
+ ],
739
+ subComponents: [
740
+ 'SheetTrigger',
741
+ 'SheetClose',
742
+ 'SheetContent',
743
+ 'SheetHeader',
744
+ 'SheetFooter',
745
+ 'SheetTitle',
746
+ 'SheetDescription',
747
+ ],
748
+ },
749
+ drawer: {
750
+ name: 'Drawer',
751
+ category: 'overlays',
752
+ description: 'Bottom sheet drawer with drag-to-dismiss interaction',
753
+ files: [
754
+ 'lib/drawer/Drawer.vue',
755
+ 'lib/drawer/DrawerTrigger.vue',
756
+ 'lib/drawer/DrawerClose.vue',
757
+ 'lib/drawer/DrawerContent.vue',
758
+ 'lib/drawer/DrawerHeader.vue',
759
+ 'lib/drawer/DrawerFooter.vue',
760
+ 'lib/drawer/DrawerTitle.vue',
761
+ 'lib/drawer/DrawerDescription.vue',
762
+ 'lib/drawer/index.ts',
763
+ ],
764
+ subComponents: [
765
+ 'DrawerTrigger',
766
+ 'DrawerClose',
767
+ 'DrawerContent',
768
+ 'DrawerHeader',
769
+ 'DrawerFooter',
770
+ 'DrawerTitle',
771
+ 'DrawerDescription',
772
+ ],
773
+ },
774
+ alertDialog: {
775
+ name: 'AlertDialog',
776
+ category: 'overlays',
777
+ description: 'Confirmation dialog that requires explicit user action before proceeding',
778
+ files: [
779
+ 'lib/alert-dialog/AlertDialog.vue',
780
+ 'lib/alert-dialog/AlertDialogTrigger.vue',
781
+ 'lib/alert-dialog/AlertDialogPortal.vue',
782
+ 'lib/alert-dialog/AlertDialogOverlay.vue',
783
+ 'lib/alert-dialog/AlertDialogContent.vue',
784
+ 'lib/alert-dialog/AlertDialogHeader.vue',
785
+ 'lib/alert-dialog/AlertDialogFooter.vue',
786
+ 'lib/alert-dialog/AlertDialogTitle.vue',
787
+ 'lib/alert-dialog/AlertDialogDescription.vue',
788
+ 'lib/alert-dialog/AlertDialogAction.vue',
789
+ 'lib/alert-dialog/AlertDialogCancel.vue',
790
+ 'lib/alert-dialog/index.ts',
791
+ ],
792
+ subComponents: [
793
+ 'AlertDialogTrigger',
794
+ 'AlertDialogPortal',
795
+ 'AlertDialogOverlay',
796
+ 'AlertDialogContent',
797
+ 'AlertDialogHeader',
798
+ 'AlertDialogFooter',
799
+ 'AlertDialogTitle',
800
+ 'AlertDialogDescription',
801
+ 'AlertDialogAction',
802
+ 'AlertDialogCancel',
803
+ ],
804
+ },
805
+ tooltip: {
806
+ name: 'Tooltip',
807
+ category: 'overlays',
808
+ description: 'Popup hint shown on hover or focus to describe an element',
809
+ files: [
810
+ 'lib/tooltip/Tooltip.vue',
811
+ 'lib/tooltip/TooltipProvider.vue',
812
+ 'lib/tooltip/TooltipTrigger.vue',
813
+ 'lib/tooltip/TooltipContent.vue',
814
+ 'lib/tooltip/index.ts',
815
+ ],
816
+ subComponents: ['TooltipProvider', 'TooltipTrigger', 'TooltipContent'],
817
+ },
818
+ popover: {
819
+ name: 'Popover',
820
+ category: 'overlays',
821
+ description: 'Floating content panel anchored to a trigger element',
822
+ files: [
823
+ 'lib/popover/Popover.vue',
824
+ 'lib/popover/PopoverTrigger.vue',
825
+ 'lib/popover/PopoverContent.vue',
826
+ 'lib/popover/index.ts',
827
+ ],
828
+ subComponents: ['PopoverTrigger', 'PopoverContent'],
829
+ },
830
+ dropdownMenu: {
831
+ name: 'DropdownMenu',
832
+ category: 'overlays',
833
+ description: 'Context-aware dropdown menu with items, checkboxes, radio groups, and sub-menus',
834
+ files: [
835
+ 'lib/dropdown-menu/DropdownMenu.vue',
836
+ 'lib/dropdown-menu/DropdownMenuTrigger.vue',
837
+ 'lib/dropdown-menu/DropdownMenuContent.vue',
838
+ 'lib/dropdown-menu/DropdownMenuItem.vue',
839
+ 'lib/dropdown-menu/DropdownMenuCheckboxItem.vue',
840
+ 'lib/dropdown-menu/DropdownMenuRadioItem.vue',
841
+ 'lib/dropdown-menu/DropdownMenuRadioGroup.vue',
842
+ 'lib/dropdown-menu/DropdownMenuSub.vue',
843
+ 'lib/dropdown-menu/DropdownMenuSubTrigger.vue',
844
+ 'lib/dropdown-menu/DropdownMenuSubContent.vue',
845
+ 'lib/dropdown-menu/DropdownMenuSeparator.vue',
846
+ 'lib/dropdown-menu/DropdownMenuLabel.vue',
847
+ 'lib/dropdown-menu/DropdownMenuGroup.vue',
848
+ 'lib/dropdown-menu/DropdownMenuShortcut.vue',
849
+ 'lib/dropdown-menu/index.ts',
850
+ ],
851
+ subComponents: [
852
+ 'DropdownMenuTrigger',
853
+ 'DropdownMenuContent',
854
+ 'DropdownMenuItem',
855
+ 'DropdownMenuCheckboxItem',
856
+ 'DropdownMenuRadioItem',
857
+ 'DropdownMenuRadioGroup',
858
+ 'DropdownMenuSub',
859
+ 'DropdownMenuSubTrigger',
860
+ 'DropdownMenuSubContent',
861
+ 'DropdownMenuSeparator',
862
+ 'DropdownMenuLabel',
863
+ 'DropdownMenuGroup',
864
+ 'DropdownMenuShortcut',
865
+ ],
866
+ },
867
+ contextMenu: {
868
+ name: 'ContextMenu',
869
+ category: 'overlays',
870
+ description: 'Right-click context menu with items, checkboxes, and sub-menus',
871
+ files: [
872
+ 'lib/context-menu/ContextMenu.vue',
873
+ 'lib/context-menu/ContextMenuTrigger.vue',
874
+ 'lib/context-menu/ContextMenuContent.vue',
875
+ 'lib/context-menu/ContextMenuItem.vue',
876
+ 'lib/context-menu/ContextMenuCheckboxItem.vue',
877
+ 'lib/context-menu/ContextMenuRadioItem.vue',
878
+ 'lib/context-menu/ContextMenuRadioGroup.vue',
879
+ 'lib/context-menu/ContextMenuSub.vue',
880
+ 'lib/context-menu/ContextMenuSubTrigger.vue',
881
+ 'lib/context-menu/ContextMenuSubContent.vue',
882
+ 'lib/context-menu/ContextMenuSeparator.vue',
883
+ 'lib/context-menu/ContextMenuLabel.vue',
884
+ 'lib/context-menu/ContextMenuGroup.vue',
885
+ 'lib/context-menu/ContextMenuShortcut.vue',
886
+ 'lib/context-menu/index.ts',
887
+ ],
888
+ subComponents: [
889
+ 'ContextMenuTrigger',
890
+ 'ContextMenuContent',
891
+ 'ContextMenuItem',
892
+ 'ContextMenuCheckboxItem',
893
+ 'ContextMenuRadioItem',
894
+ 'ContextMenuRadioGroup',
895
+ 'ContextMenuSub',
896
+ 'ContextMenuSubTrigger',
897
+ 'ContextMenuSubContent',
898
+ 'ContextMenuSeparator',
899
+ 'ContextMenuLabel',
900
+ 'ContextMenuGroup',
901
+ 'ContextMenuShortcut',
902
+ ],
903
+ },
904
+ hoverCard: {
905
+ name: 'HoverCard',
906
+ category: 'overlays',
907
+ description: 'Rich content card that appears when hovering over a trigger',
908
+ files: [
909
+ 'lib/hover-card/HoverCard.vue',
910
+ 'lib/hover-card/HoverCardTrigger.vue',
911
+ 'lib/hover-card/HoverCardContent.vue',
912
+ 'lib/hover-card/index.ts',
913
+ ],
914
+ subComponents: ['HoverCardTrigger', 'HoverCardContent'],
915
+ },
916
+ command: {
917
+ name: 'Command',
918
+ category: 'overlays',
919
+ description: 'Command palette / combobox for searching and selecting actions',
920
+ files: [
921
+ 'lib/command/Command.vue',
922
+ 'lib/command/CommandInput.vue',
923
+ 'lib/command/CommandList.vue',
924
+ 'lib/command/CommandEmpty.vue',
925
+ 'lib/command/CommandGroup.vue',
926
+ 'lib/command/CommandItem.vue',
927
+ 'lib/command/CommandSeparator.vue',
928
+ 'lib/command/CommandLabel.vue',
929
+ 'lib/command/CommandDialog.vue',
930
+ 'lib/command/index.ts',
931
+ ],
932
+ subComponents: [
933
+ 'CommandInput',
934
+ 'CommandList',
935
+ 'CommandEmpty',
936
+ 'CommandGroup',
937
+ 'CommandItem',
938
+ 'CommandSeparator',
939
+ 'CommandLabel',
940
+ 'CommandDialog',
941
+ ],
942
+ },
943
+ toast: {
944
+ name: 'Toast',
945
+ category: 'overlays',
946
+ description: 'Temporary notification message with title, description, and action slots',
947
+ files: [
948
+ 'lib/toast/Toast.vue',
949
+ 'lib/toast/ToastViewport.vue',
950
+ 'lib/toast/ToastTitle.vue',
951
+ 'lib/toast/ToastDescription.vue',
952
+ 'lib/toast/ToastAction.vue',
953
+ 'lib/toast/ToastClose.vue',
954
+ 'lib/toast/ToastProvider.ts',
955
+ 'lib/toast/Toaster.vue',
956
+ 'lib/toast/index.ts',
957
+ ],
958
+ subComponents: [
959
+ 'ToastViewport',
960
+ 'ToastTitle',
961
+ 'ToastDescription',
962
+ 'ToastAction',
963
+ 'ToastClose',
964
+ 'Toaster',
965
+ ],
966
+ },
967
+ sonner: {
968
+ name: 'Sonner',
969
+ category: 'overlays',
970
+ description: 'Toast notification system using Sonner',
971
+ files: [
972
+ 'lib/sonner/Toaster.vue',
973
+ 'lib/sonner/index.ts',
974
+ ],
975
+ subComponents: [],
976
+ },
977
+ // ─── Navigation Components ─────────────────────────────────────
978
+ breadcrumb: {
979
+ name: 'Breadcrumb',
980
+ category: 'navigation',
981
+ description: 'Hierarchical breadcrumb trail showing the current page path',
982
+ files: [
983
+ 'lib/breadcrumb/Breadcrumb.vue',
984
+ 'lib/breadcrumb/BreadcrumbList.vue',
985
+ 'lib/breadcrumb/BreadcrumbItem.vue',
986
+ 'lib/breadcrumb/BreadcrumbLink.vue',
987
+ 'lib/breadcrumb/BreadcrumbPage.vue',
988
+ 'lib/breadcrumb/BreadcrumbSeparator.vue',
989
+ 'lib/breadcrumb/BreadcrumbEllipsis.vue',
990
+ 'lib/breadcrumb/index.ts',
991
+ ],
992
+ subComponents: [
993
+ 'BreadcrumbList',
994
+ 'BreadcrumbItem',
995
+ 'BreadcrumbLink',
996
+ 'BreadcrumbPage',
997
+ 'BreadcrumbSeparator',
998
+ 'BreadcrumbEllipsis',
999
+ ],
1000
+ },
1001
+ navigationMenu: {
1002
+ name: 'NavigationMenu',
1003
+ category: 'navigation',
1004
+ description: 'Horizontal navigation bar with dropdown content panels and active indicators',
1005
+ files: [
1006
+ 'lib/navigation-menu/NavigationMenu.vue',
1007
+ 'lib/navigation-menu/NavigationMenuList.vue',
1008
+ 'lib/navigation-menu/NavigationMenuItem.vue',
1009
+ 'lib/navigation-menu/NavigationMenuTrigger.vue',
1010
+ 'lib/navigation-menu/NavigationMenuContent.vue',
1011
+ 'lib/navigation-menu/NavigationMenuLink.vue',
1012
+ 'lib/navigation-menu/NavigationMenuViewport.vue',
1013
+ 'lib/navigation-menu/NavigationMenuIndicator.vue',
1014
+ 'lib/navigation-menu/index.ts',
1015
+ ],
1016
+ subComponents: [
1017
+ 'NavigationMenuList',
1018
+ 'NavigationMenuItem',
1019
+ 'NavigationMenuTrigger',
1020
+ 'NavigationMenuContent',
1021
+ 'NavigationMenuLink',
1022
+ 'NavigationMenuViewport',
1023
+ 'NavigationMenuIndicator',
1024
+ ],
1025
+ },
1026
+ menubar: {
1027
+ name: 'Menubar',
1028
+ category: 'navigation',
1029
+ description: 'Desktop-style horizontal menu bar with dropdown sub-menus',
1030
+ files: [
1031
+ 'lib/menubar/Menubar.vue',
1032
+ 'lib/menubar/MenubarMenu.vue',
1033
+ 'lib/menubar/MenubarTrigger.vue',
1034
+ 'lib/menubar/MenubarContent.vue',
1035
+ 'lib/menubar/MenubarItem.vue',
1036
+ 'lib/menubar/MenubarCheckboxItem.vue',
1037
+ 'lib/menubar/MenubarRadioItem.vue',
1038
+ 'lib/menubar/MenubarRadioGroup.vue',
1039
+ 'lib/menubar/MenubarSub.vue',
1040
+ 'lib/menubar/MenubarSubTrigger.vue',
1041
+ 'lib/menubar/MenubarSubContent.vue',
1042
+ 'lib/menubar/MenubarSeparator.vue',
1043
+ 'lib/menubar/MenubarLabel.vue',
1044
+ 'lib/menubar/MenubarGroup.vue',
1045
+ 'lib/menubar/MenubarShortcut.vue',
1046
+ 'lib/menubar/index.ts',
1047
+ ],
1048
+ subComponents: [
1049
+ 'MenubarMenu',
1050
+ 'MenubarTrigger',
1051
+ 'MenubarContent',
1052
+ 'MenubarItem',
1053
+ 'MenubarCheckboxItem',
1054
+ 'MenubarRadioItem',
1055
+ 'MenubarRadioGroup',
1056
+ 'MenubarSub',
1057
+ 'MenubarSubTrigger',
1058
+ 'MenubarSubContent',
1059
+ 'MenubarSeparator',
1060
+ 'MenubarLabel',
1061
+ 'MenubarGroup',
1062
+ 'MenubarShortcut',
1063
+ ],
1064
+ },
1065
+ // ─── Utility Components ────────────────────────────────────────
1066
+ direction: {
1067
+ name: 'Direction',
1068
+ category: 'utility',
1069
+ description: 'Direction provider for RTL/LTR support',
1070
+ files: [
1071
+ 'lib/direction/Direction.vue',
1072
+ 'lib/direction/index.ts',
1073
+ ],
1074
+ subComponents: [],
1075
+ },
1076
+ themeSelector: {
1077
+ name: 'ThemeSelector',
1078
+ category: 'utility',
1079
+ description: 'Theme selector dropdown with light/dark/system options',
1080
+ files: [
1081
+ 'lib/theme-selector/ThemeSelector.vue',
1082
+ 'lib/theme-selector/index.ts',
1083
+ ],
1084
+ subComponents: [],
1085
+ },
1086
+ buttonGroup: {
1087
+ name: 'ButtonGroup',
1088
+ category: 'utility',
1089
+ description: 'Visually groups related buttons with shared border radius',
1090
+ files: [
1091
+ 'lib/button-group/ButtonGroup.vue',
1092
+ 'lib/button-group/index.ts',
1093
+ ],
1094
+ subComponents: [],
1095
+ },
1096
+ };
1097
+ // Helper function to get all available component names
1098
+ export function getAvailableComponents() {
1099
+ return Object.keys(COMPONENT_REGISTRY);
1100
+ }
1101
+ // Helper function to get component info
1102
+ export function getComponentInfo(name) {
1103
+ return COMPONENT_REGISTRY[name.toLowerCase()];
1104
+ }
1105
+ // Helper function to search components
1106
+ export function searchComponents(query) {
1107
+ const lowerQuery = query.toLowerCase();
1108
+ return Object.values(COMPONENT_REGISTRY).filter((component) => component.name.toLowerCase().includes(lowerQuery) ||
1109
+ component.description.toLowerCase().includes(lowerQuery) ||
1110
+ component.category.toLowerCase().includes(lowerQuery));
1111
+ }
1112
+ //# sourceMappingURL=registry.js.map