@geniusdynamics/ns8-ui-lib 1.0.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 (310) hide show
  1. package/README.md +167 -0
  2. package/dist/index.d.ts +14 -0
  3. package/dist/ns8-ui-lib.es.js +4278 -0
  4. package/dist/ns8-ui-lib.es.js.map +1 -0
  5. package/dist/ns8-ui-lib.umd.js +7 -0
  6. package/dist/ns8-ui-lib.umd.js.map +1 -0
  7. package/dist/src/App.vue.d.ts +2 -0
  8. package/dist/src/components/HelloWorld.vue.d.ts +5 -0
  9. package/dist/src/components/NS/cards/NSBackupCard.vue.d.ts +51 -0
  10. package/dist/src/components/NS/cards/NSSystemInfoCard.vue.d.ts +58 -0
  11. package/dist/src/components/NS/cards/NSSystemdServiceCard.vue.d.ts +47 -0
  12. package/dist/src/components/NS/cards/index.d.ts +3 -0
  13. package/dist/src/components/NS/checkbox/NSCheckbox.vue.d.ts +37 -0
  14. package/dist/src/components/NS/checkbox/index.d.ts +1 -0
  15. package/dist/src/components/NS/data-table/NSDataTable.vue.d.ts +98 -0
  16. package/dist/src/components/NS/data-table/index.d.ts +1 -0
  17. package/dist/src/components/NS/empty-state/NSEmptyState.vue.d.ts +45 -0
  18. package/dist/src/components/NS/empty-state/index.d.ts +1 -0
  19. package/dist/src/components/NS/index.d.ts +35 -0
  20. package/dist/src/components/NS/inline-notification/NSInlineNotification.vue.d.ts +44 -0
  21. package/dist/src/components/NS/inline-notification/index.d.ts +1 -0
  22. package/dist/src/components/NS/lottie-animation/NSLottieAnimation.vue.d.ts +75 -0
  23. package/dist/src/components/NS/lottie-animation/index.d.ts +1 -0
  24. package/dist/src/components/NS/modal/NSModal.vue.d.ts +56 -0
  25. package/dist/src/components/NS/modal/NSModalTrigger.vue.d.ts +64 -0
  26. package/dist/src/components/NS/modal/index.d.ts +2 -0
  27. package/dist/src/components/NS/pagination/NSPagination.vue.d.ts +36 -0
  28. package/dist/src/components/NS/pagination/index.d.ts +1 -0
  29. package/dist/src/components/NS/progress/NSProgress.vue.d.ts +37 -0
  30. package/dist/src/components/NS/progress/NSProgressBar.vue.d.ts +39 -0
  31. package/dist/src/components/NS/progress/index.d.ts +2 -0
  32. package/dist/src/components/NS/slider/NSByteSlider.vue.d.ts +50 -0
  33. package/dist/src/components/NS/slider/NSSlider.vue.d.ts +49 -0
  34. package/dist/src/components/NS/slider/index.d.ts +2 -0
  35. package/dist/src/components/NS/tag/NSTag.vue.d.ts +41 -0
  36. package/dist/src/components/NS/tag/index.d.ts +1 -0
  37. package/dist/src/components/NS/text-input/NSTextInput.vue.d.ts +67 -0
  38. package/dist/src/components/NS/text-input/index.d.ts +1 -0
  39. package/dist/src/components/NS/toast-notification/NSToastNotification.vue.d.ts +44 -0
  40. package/dist/src/components/NS/toast-notification/index.d.ts +1 -0
  41. package/dist/src/components/NS/toggle/NSToggle.vue.d.ts +51 -0
  42. package/dist/src/components/NS/toggle/index.d.ts +1 -0
  43. package/dist/src/components/NS/wizard/NSWizard.vue.d.ts +86 -0
  44. package/dist/src/components/NS/wizard/index.d.ts +1 -0
  45. package/dist/src/components/ui/button/Button.vue.d.ts +27 -0
  46. package/dist/src/components/ui/button/index.d.ts +7 -0
  47. package/dist/src/components/ui/card/Card.vue.d.ts +21 -0
  48. package/dist/src/components/ui/card/CardAction.vue.d.ts +21 -0
  49. package/dist/src/components/ui/card/CardContent.vue.d.ts +21 -0
  50. package/dist/src/components/ui/card/CardDescription.vue.d.ts +21 -0
  51. package/dist/src/components/ui/card/CardFooter.vue.d.ts +21 -0
  52. package/dist/src/components/ui/card/CardHeader.vue.d.ts +21 -0
  53. package/dist/src/components/ui/card/CardTitle.vue.d.ts +21 -0
  54. package/dist/src/components/ui/card/index.d.ts +7 -0
  55. package/dist/src/components/ui/checkbox/NsCheckbox.vue.d.ts +49 -0
  56. package/dist/src/components/ui/checkbox/index.d.ts +11 -0
  57. package/dist/src/components/ui/dialog/Dialog.vue.d.ts +28 -0
  58. package/dist/src/components/ui/dialog/index.d.ts +1 -0
  59. package/dist/src/components/ui/empty-state/NsEmptyState.vue.d.ts +45 -0
  60. package/dist/src/components/ui/empty-state/index.d.ts +11 -0
  61. package/dist/src/components/ui/inline-notification/NsInlineNotification.vue.d.ts +45 -0
  62. package/dist/src/components/ui/inline-notification/index.d.ts +6 -0
  63. package/dist/src/components/ui/input/Input.vue.d.ts +12 -0
  64. package/dist/src/components/ui/input/index.d.ts +1 -0
  65. package/dist/src/components/ui/input-group/InputGroup.vue.d.ts +21 -0
  66. package/dist/src/components/ui/input-group/InputGroupAddon.vue.d.ts +25 -0
  67. package/dist/src/components/ui/input-group/InputGroupButton.vue.d.ts +22 -0
  68. package/dist/src/components/ui/input-group/InputGroupInput.vue.d.ts +6 -0
  69. package/dist/src/components/ui/input-group/InputGroupText.vue.d.ts +21 -0
  70. package/dist/src/components/ui/input-group/InputGroupTextarea.vue.d.ts +6 -0
  71. package/dist/src/components/ui/input-group/index.d.ts +22 -0
  72. package/dist/src/components/ui/item/Item.vue.d.ts +27 -0
  73. package/dist/src/components/ui/item/ItemActions.vue.d.ts +21 -0
  74. package/dist/src/components/ui/item/ItemContent.vue.d.ts +21 -0
  75. package/dist/src/components/ui/item/ItemDescription.vue.d.ts +21 -0
  76. package/dist/src/components/ui/item/ItemFooter.vue.d.ts +21 -0
  77. package/dist/src/components/ui/item/ItemGroup.vue.d.ts +21 -0
  78. package/dist/src/components/ui/item/ItemHeader.vue.d.ts +21 -0
  79. package/dist/src/components/ui/item/ItemMedia.vue.d.ts +23 -0
  80. package/dist/src/components/ui/item/ItemSeparator.vue.d.ts +7 -0
  81. package/dist/src/components/ui/item/ItemTitle.vue.d.ts +21 -0
  82. package/dist/src/components/ui/item/index.d.ts +20 -0
  83. package/dist/src/components/ui/label/Label.vue.d.ts +22 -0
  84. package/dist/src/components/ui/label/index.d.ts +1 -0
  85. package/dist/src/components/ui/scroll-area/ScrollArea.vue.d.ts +22 -0
  86. package/dist/src/components/ui/scroll-area/ScrollBar.vue.d.ts +9 -0
  87. package/dist/src/components/ui/scroll-area/index.d.ts +2 -0
  88. package/dist/src/components/ui/select/Select.vue.d.ts +28 -0
  89. package/dist/src/components/ui/select/SelectContent.vue.d.ts +32 -0
  90. package/dist/src/components/ui/select/SelectGroup.vue.d.ts +18 -0
  91. package/dist/src/components/ui/select/SelectItem.vue.d.ts +23 -0
  92. package/dist/src/components/ui/select/SelectItemText.vue.d.ts +18 -0
  93. package/dist/src/components/ui/select/SelectLabel.vue.d.ts +22 -0
  94. package/dist/src/components/ui/select/SelectScrollDownButton.vue.d.ts +22 -0
  95. package/dist/src/components/ui/select/SelectScrollUpButton.vue.d.ts +22 -0
  96. package/dist/src/components/ui/select/SelectSeparator.vue.d.ts +7 -0
  97. package/dist/src/components/ui/select/SelectTrigger.vue.d.ts +25 -0
  98. package/dist/src/components/ui/select/SelectValue.vue.d.ts +18 -0
  99. package/dist/src/components/ui/select/index.d.ts +11 -0
  100. package/dist/src/components/ui/separator/Separator.vue.d.ts +10 -0
  101. package/dist/src/components/ui/separator/index.d.ts +1 -0
  102. package/dist/src/components/ui/sheet/Sheet.vue.d.ts +25 -0
  103. package/dist/src/components/ui/sheet/SheetClose.vue.d.ts +18 -0
  104. package/dist/src/components/ui/sheet/SheetContent.vue.d.ts +39 -0
  105. package/dist/src/components/ui/sheet/SheetDescription.vue.d.ts +22 -0
  106. package/dist/src/components/ui/sheet/SheetFooter.vue.d.ts +21 -0
  107. package/dist/src/components/ui/sheet/SheetHeader.vue.d.ts +21 -0
  108. package/dist/src/components/ui/sheet/SheetOverlay.vue.d.ts +22 -0
  109. package/dist/src/components/ui/sheet/SheetTitle.vue.d.ts +22 -0
  110. package/dist/src/components/ui/sheet/SheetTrigger.vue.d.ts +18 -0
  111. package/dist/src/components/ui/sheet/index.d.ts +8 -0
  112. package/dist/src/components/ui/sidebar/Sidebar.vue.d.ts +24 -0
  113. package/dist/src/components/ui/sidebar/SidebarContent.vue.d.ts +21 -0
  114. package/dist/src/components/ui/sidebar/SidebarFooter.vue.d.ts +21 -0
  115. package/dist/src/components/ui/sidebar/SidebarGroup.vue.d.ts +21 -0
  116. package/dist/src/components/ui/sidebar/SidebarGroupAction.vue.d.ts +22 -0
  117. package/dist/src/components/ui/sidebar/SidebarGroupContent.vue.d.ts +21 -0
  118. package/dist/src/components/ui/sidebar/SidebarGroupLabel.vue.d.ts +22 -0
  119. package/dist/src/components/ui/sidebar/SidebarHeader.vue.d.ts +21 -0
  120. package/dist/src/components/ui/sidebar/SidebarInput.vue.d.ts +21 -0
  121. package/dist/src/components/ui/sidebar/SidebarInset.vue.d.ts +21 -0
  122. package/dist/src/components/ui/sidebar/SidebarMenu.vue.d.ts +21 -0
  123. package/dist/src/components/ui/sidebar/SidebarMenuAction.vue.d.ts +25 -0
  124. package/dist/src/components/ui/sidebar/SidebarMenuBadge.vue.d.ts +21 -0
  125. package/dist/src/components/ui/sidebar/SidebarMenuButton.vue.d.ts +27 -0
  126. package/dist/src/components/ui/sidebar/SidebarMenuButtonChild.vue.d.ts +30 -0
  127. package/dist/src/components/ui/sidebar/SidebarMenuItem.vue.d.ts +21 -0
  128. package/dist/src/components/ui/sidebar/SidebarMenuSkeleton.vue.d.ts +7 -0
  129. package/dist/src/components/ui/sidebar/SidebarMenuSub.vue.d.ts +21 -0
  130. package/dist/src/components/ui/sidebar/SidebarMenuSubButton.vue.d.ts +27 -0
  131. package/dist/src/components/ui/sidebar/SidebarMenuSubItem.vue.d.ts +21 -0
  132. package/dist/src/components/ui/sidebar/SidebarProvider.vue.d.ts +30 -0
  133. package/dist/src/components/ui/sidebar/SidebarRail.vue.d.ts +21 -0
  134. package/dist/src/components/ui/sidebar/SidebarSeparator.vue.d.ts +21 -0
  135. package/dist/src/components/ui/sidebar/SidebarTrigger.vue.d.ts +6 -0
  136. package/dist/src/components/ui/sidebar/index.d.ts +37 -0
  137. package/dist/src/components/ui/sidebar/utils.d.ts +56 -0
  138. package/dist/src/components/ui/skeleton/Skeleton.vue.d.ts +6 -0
  139. package/dist/src/components/ui/skeleton/index.d.ts +1 -0
  140. package/dist/src/components/ui/sonner/Sonner.vue.d.ts +3 -0
  141. package/dist/src/components/ui/sonner/index.d.ts +1 -0
  142. package/dist/src/components/ui/switch/Switch.vue.d.ts +28 -0
  143. package/dist/src/components/ui/switch/index.d.ts +1 -0
  144. package/dist/src/components/ui/table/Table.vue.d.ts +21 -0
  145. package/dist/src/components/ui/table/TableBody.vue.d.ts +21 -0
  146. package/dist/src/components/ui/table/TableCaption.vue.d.ts +21 -0
  147. package/dist/src/components/ui/table/TableCell.vue.d.ts +21 -0
  148. package/dist/src/components/ui/table/TableEmpty.vue.d.ts +24 -0
  149. package/dist/src/components/ui/table/TableFooter.vue.d.ts +21 -0
  150. package/dist/src/components/ui/table/TableHead.vue.d.ts +21 -0
  151. package/dist/src/components/ui/table/TableHeader.vue.d.ts +21 -0
  152. package/dist/src/components/ui/table/TableRow.vue.d.ts +21 -0
  153. package/dist/src/components/ui/table/index.d.ts +9 -0
  154. package/dist/src/components/ui/table/utils.d.ts +3 -0
  155. package/dist/src/components/ui/tabs/Tabs.vue.d.ts +28 -0
  156. package/dist/src/components/ui/tabs/TabsContent.vue.d.ts +22 -0
  157. package/dist/src/components/ui/tabs/TabsList.vue.d.ts +22 -0
  158. package/dist/src/components/ui/tabs/TabsTrigger.vue.d.ts +22 -0
  159. package/dist/src/components/ui/tabs/index.d.ts +4 -0
  160. package/dist/src/components/ui/tag/NsTag.vue.d.ts +42 -0
  161. package/dist/src/components/ui/tag/index.d.ts +8 -0
  162. package/dist/src/components/ui/text-input/NsTextInput.vue.d.ts +79 -0
  163. package/dist/src/components/ui/text-input/index.d.ts +15 -0
  164. package/dist/src/components/ui/textarea/Textarea.vue.d.ts +12 -0
  165. package/dist/src/components/ui/textarea/index.d.ts +1 -0
  166. package/dist/src/components/ui/toggle/NsToggle.vue.d.ts +54 -0
  167. package/dist/src/components/ui/toggle/index.d.ts +15 -0
  168. package/dist/src/components/ui/tooltip/Tooltip.vue.d.ts +24 -0
  169. package/dist/src/components/ui/tooltip/TooltipContent.vue.d.ts +30 -0
  170. package/dist/src/components/ui/tooltip/TooltipProvider.vue.d.ts +20 -0
  171. package/dist/src/components/ui/tooltip/TooltipTrigger.vue.d.ts +18 -0
  172. package/dist/src/components/ui/tooltip/index.d.ts +4 -0
  173. package/dist/src/composables/index.d.ts +8 -0
  174. package/dist/src/composables/useDateTimeService.d.ts +10 -0
  175. package/dist/src/composables/useFilterService.d.ts +8 -0
  176. package/dist/src/composables/useIconService.d.ts +153 -0
  177. package/dist/src/composables/usePageTitleService.d.ts +3 -0
  178. package/dist/src/composables/useQueryParamService.d.ts +13 -0
  179. package/dist/src/composables/useStorageService.d.ts +5 -0
  180. package/dist/src/composables/useTaskService.d.ts +18 -0
  181. package/dist/src/composables/useUtilService.d.ts +27 -0
  182. package/dist/src/lib/utils.d.ts +2 -0
  183. package/dist/src/main.d.ts +0 -0
  184. package/dist/vite.svg +1 -0
  185. package/package.json +80 -0
  186. package/src/App.vue +30 -0
  187. package/src/components/HelloWorld.vue +41 -0
  188. package/src/components/NS/CompleteDemo.vue +475 -0
  189. package/src/components/NS/Demo.vue +191 -0
  190. package/src/components/NS/cards/NSBackupCard.vue +272 -0
  191. package/src/components/NS/cards/NSSystemInfoCard.vue +252 -0
  192. package/src/components/NS/cards/NSSystemdServiceCard.vue +250 -0
  193. package/src/components/NS/checkbox/NSCheckbox.vue +104 -0
  194. package/src/components/NS/data-table/NSDataTable.vue +434 -0
  195. package/src/components/NS/empty-state/NSEmptyState.vue +188 -0
  196. package/src/components/NS/inline-notification/NSInlineNotification.vue +162 -0
  197. package/src/components/NS/lottie-animation/NSLottieAnimation.vue +255 -0
  198. package/src/components/NS/modal/NSModal.vue +193 -0
  199. package/src/components/NS/modal/NSModalTrigger.vue +109 -0
  200. package/src/components/NS/pagination/NSPagination.vue +247 -0
  201. package/src/components/NS/progress/NSProgress.vue +115 -0
  202. package/src/components/NS/progress/NSProgressBar.vue +137 -0
  203. package/src/components/NS/slider/NSByteSlider.vue +144 -0
  204. package/src/components/NS/slider/NSSlider.vue +142 -0
  205. package/src/components/NS/tag/NSTag.vue +139 -0
  206. package/src/components/NS/text-input/NSTextInput.vue +242 -0
  207. package/src/components/NS/toast-notification/NSToastNotification.vue +163 -0
  208. package/src/components/NS/toggle/NSToggle.vue +156 -0
  209. package/src/components/NS/wizard/NSWizard.vue +399 -0
  210. package/src/components/ui/button/Button.vue +29 -0
  211. package/src/components/ui/card/Card.vue +22 -0
  212. package/src/components/ui/card/CardAction.vue +17 -0
  213. package/src/components/ui/card/CardContent.vue +17 -0
  214. package/src/components/ui/card/CardDescription.vue +17 -0
  215. package/src/components/ui/card/CardFooter.vue +17 -0
  216. package/src/components/ui/card/CardHeader.vue +17 -0
  217. package/src/components/ui/card/CardTitle.vue +17 -0
  218. package/src/components/ui/checkbox/NsCheckbox.vue +123 -0
  219. package/src/components/ui/dialog/Dialog.vue +68 -0
  220. package/src/components/ui/empty-state/NsEmptyState.vue +149 -0
  221. package/src/components/ui/inline-notification/NsInlineNotification.vue +163 -0
  222. package/src/components/ui/input/Input.vue +33 -0
  223. package/src/components/ui/input-group/InputGroup.vue +35 -0
  224. package/src/components/ui/input-group/InputGroupAddon.vue +36 -0
  225. package/src/components/ui/input-group/InputGroupButton.vue +21 -0
  226. package/src/components/ui/input-group/InputGroupInput.vue +19 -0
  227. package/src/components/ui/input-group/InputGroupText.vue +19 -0
  228. package/src/components/ui/input-group/InputGroupTextarea.vue +19 -0
  229. package/src/components/ui/item/Item.vue +27 -0
  230. package/src/components/ui/item/ItemActions.vue +17 -0
  231. package/src/components/ui/item/ItemContent.vue +17 -0
  232. package/src/components/ui/item/ItemDescription.vue +21 -0
  233. package/src/components/ui/item/ItemFooter.vue +17 -0
  234. package/src/components/ui/item/ItemGroup.vue +18 -0
  235. package/src/components/ui/item/ItemHeader.vue +17 -0
  236. package/src/components/ui/item/ItemMedia.vue +21 -0
  237. package/src/components/ui/item/ItemSeparator.vue +18 -0
  238. package/src/components/ui/item/ItemTitle.vue +17 -0
  239. package/src/components/ui/label/Label.vue +26 -0
  240. package/src/components/ui/scroll-area/ScrollArea.vue +33 -0
  241. package/src/components/ui/scroll-area/ScrollBar.vue +32 -0
  242. package/src/components/ui/select/Select.vue +19 -0
  243. package/src/components/ui/select/SelectContent.vue +51 -0
  244. package/src/components/ui/select/SelectGroup.vue +15 -0
  245. package/src/components/ui/select/SelectItem.vue +44 -0
  246. package/src/components/ui/select/SelectItemText.vue +15 -0
  247. package/src/components/ui/select/SelectLabel.vue +17 -0
  248. package/src/components/ui/select/SelectScrollDownButton.vue +26 -0
  249. package/src/components/ui/select/SelectScrollUpButton.vue +26 -0
  250. package/src/components/ui/select/SelectSeparator.vue +19 -0
  251. package/src/components/ui/select/SelectTrigger.vue +33 -0
  252. package/src/components/ui/select/SelectValue.vue +15 -0
  253. package/src/components/ui/separator/Separator.vue +29 -0
  254. package/src/components/ui/sheet/Sheet.vue +19 -0
  255. package/src/components/ui/sheet/SheetClose.vue +15 -0
  256. package/src/components/ui/sheet/SheetContent.vue +62 -0
  257. package/src/components/ui/sheet/SheetDescription.vue +21 -0
  258. package/src/components/ui/sheet/SheetFooter.vue +16 -0
  259. package/src/components/ui/sheet/SheetHeader.vue +15 -0
  260. package/src/components/ui/sheet/SheetOverlay.vue +21 -0
  261. package/src/components/ui/sheet/SheetTitle.vue +21 -0
  262. package/src/components/ui/sheet/SheetTrigger.vue +15 -0
  263. package/src/components/ui/sidebar/Sidebar.vue +96 -0
  264. package/src/components/ui/sidebar/SidebarContent.vue +18 -0
  265. package/src/components/ui/sidebar/SidebarFooter.vue +18 -0
  266. package/src/components/ui/sidebar/SidebarGroup.vue +18 -0
  267. package/src/components/ui/sidebar/SidebarGroupAction.vue +27 -0
  268. package/src/components/ui/sidebar/SidebarGroupContent.vue +18 -0
  269. package/src/components/ui/sidebar/SidebarGroupLabel.vue +25 -0
  270. package/src/components/ui/sidebar/SidebarHeader.vue +18 -0
  271. package/src/components/ui/sidebar/SidebarInput.vue +22 -0
  272. package/src/components/ui/sidebar/SidebarInset.vue +21 -0
  273. package/src/components/ui/sidebar/SidebarMenu.vue +18 -0
  274. package/src/components/ui/sidebar/SidebarMenuAction.vue +35 -0
  275. package/src/components/ui/sidebar/SidebarMenuBadge.vue +26 -0
  276. package/src/components/ui/sidebar/SidebarMenuButton.vue +48 -0
  277. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
  278. package/src/components/ui/sidebar/SidebarMenuItem.vue +18 -0
  279. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
  280. package/src/components/ui/sidebar/SidebarMenuSub.vue +22 -0
  281. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +36 -0
  282. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
  283. package/src/components/ui/sidebar/SidebarProvider.vue +82 -0
  284. package/src/components/ui/sidebar/SidebarRail.vue +33 -0
  285. package/src/components/ui/sidebar/SidebarSeparator.vue +19 -0
  286. package/src/components/ui/sidebar/SidebarTrigger.vue +27 -0
  287. package/src/components/ui/skeleton/Skeleton.vue +17 -0
  288. package/src/components/ui/sonner/Sonner.vue +42 -0
  289. package/src/components/ui/switch/Switch.vue +38 -0
  290. package/src/components/ui/table/Table.vue +16 -0
  291. package/src/components/ui/table/TableBody.vue +17 -0
  292. package/src/components/ui/table/TableCaption.vue +17 -0
  293. package/src/components/ui/table/TableCell.vue +22 -0
  294. package/src/components/ui/table/TableEmpty.vue +34 -0
  295. package/src/components/ui/table/TableFooter.vue +17 -0
  296. package/src/components/ui/table/TableHead.vue +17 -0
  297. package/src/components/ui/table/TableHeader.vue +17 -0
  298. package/src/components/ui/table/TableRow.vue +17 -0
  299. package/src/components/ui/tabs/Tabs.vue +24 -0
  300. package/src/components/ui/tabs/TabsContent.vue +21 -0
  301. package/src/components/ui/tabs/TabsList.vue +24 -0
  302. package/src/components/ui/tabs/TabsTrigger.vue +26 -0
  303. package/src/components/ui/tag/NsTag.vue +114 -0
  304. package/src/components/ui/text-input/NsTextInput.vue +269 -0
  305. package/src/components/ui/textarea/Textarea.vue +28 -0
  306. package/src/components/ui/toggle/NsToggle.vue +126 -0
  307. package/src/components/ui/tooltip/Tooltip.vue +19 -0
  308. package/src/components/ui/tooltip/TooltipContent.vue +34 -0
  309. package/src/components/ui/tooltip/TooltipProvider.vue +14 -0
  310. package/src/components/ui/tooltip/TooltipTrigger.vue +15 -0
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import { cn } from "@/lib/utils"
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes["class"]
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <h3
12
+ data-slot="card-title"
13
+ :class="cn('leading-none font-semibold', props.class)"
14
+ >
15
+ <slot />
16
+ </h3>
17
+ </template>
@@ -0,0 +1,123 @@
1
+ <script setup lang="ts">
2
+ import { computed, useId } from 'vue'
3
+ import { CheckboxRoot, CheckboxIndicator } from 'reka-ui'
4
+ import { Check } from 'lucide-vue-next'
5
+ import { cn } from '@/lib/utils'
6
+ import { checkboxVariants, labelVariants, type CheckboxVariants, type LabelVariants } from '.'
7
+
8
+ interface Props {
9
+ modelValue?: boolean
10
+ checked?: boolean
11
+ defaultChecked?: boolean
12
+ disabled?: boolean
13
+ required?: boolean
14
+ name?: string
15
+ value?: string
16
+ id?: string
17
+ label?: string
18
+ hideLabel?: boolean
19
+ description?: string
20
+ errorMessage?: string
21
+ variant?: CheckboxVariants['variant']
22
+ size?: CheckboxVariants['size']
23
+ labelVariant?: LabelVariants['variant']
24
+ class?: string
25
+ labelClass?: string
26
+ indeterminate?: boolean
27
+ }
28
+
29
+ const props = withDefaults(defineProps<Props>(), {
30
+ variant: 'default',
31
+ size: 'default',
32
+ labelVariant: 'default',
33
+ })
34
+
35
+ const emit = defineEmits<{
36
+ 'update:modelValue': [value: boolean]
37
+ 'update:checked': [value: boolean]
38
+ }>()
39
+
40
+ const uniqueId = useId()
41
+ const checkboxId = props.id || uniqueId
42
+
43
+ const isChecked = computed({
44
+ get: () => props.modelValue ?? props.checked ?? false,
45
+ set: (value: boolean) => {
46
+ emit('update:modelValue', value)
47
+ emit('update:checked', value)
48
+ }
49
+ })
50
+ </script>
51
+
52
+ <template>
53
+ <div :class="cn('flex items-start space-x-2', props.class)">
54
+ <CheckboxRoot
55
+ :id="checkboxId"
56
+ v-model:checked="isChecked"
57
+ :default-checked="defaultChecked"
58
+ :disabled="disabled"
59
+ :required="required"
60
+ :name="name"
61
+ :value="value"
62
+ :class="cn(checkboxVariants({ variant, size }))"
63
+ :data-indeterminate="indeterminate"
64
+ >
65
+ <CheckboxIndicator
66
+ :class="cn('flex items-center justify-center text-current', {
67
+ 'opacity-50': indeterminate
68
+ })"
69
+ >
70
+ <Check
71
+ v-if="!indeterminate"
72
+ :class="cn('h-4 w-4', {
73
+ 'h-3.5 w-3.5': size === 'sm',
74
+ 'h-5 w-5': size === 'lg'
75
+ })"
76
+ />
77
+ <div
78
+ v-else
79
+ :class="cn('h-1 w-2 bg-current rounded-sm', {
80
+ 'h-0.5 w-1.5': size === 'sm',
81
+ 'h-1.5 w-2.5': size === 'lg'
82
+ })"
83
+ />
84
+ </CheckboxIndicator>
85
+ </CheckboxRoot>
86
+
87
+ <div class="grid gap-1.5">
88
+ <label
89
+ v-if="label || $slots.label"
90
+ :for="checkboxId"
91
+ :class="cn(
92
+ labelVariants({ variant: labelVariant }),
93
+ 'cursor-pointer',
94
+ {
95
+ 'sr-only': hideLabel,
96
+ 'cursor-not-allowed': disabled
97
+ },
98
+ labelClass
99
+ )"
100
+ >
101
+ <slot name="label">{{ label }}</slot>
102
+ </label>
103
+
104
+ <p
105
+ v-if="description"
106
+ :class="cn('text-sm text-muted-foreground', {
107
+ 'text-destructive': errorMessage
108
+ })"
109
+ >
110
+ {{ description }}
111
+ </p>
112
+
113
+ <p
114
+ v-if="errorMessage"
115
+ class="text-sm text-destructive"
116
+ >
117
+ {{ errorMessage }}
118
+ </p>
119
+
120
+ <slot name="extra" />
121
+ </div>
122
+ </div>
123
+ </template>
@@ -0,0 +1,68 @@
1
+ <template>
2
+ <DialogRoot v-model:open="open">
3
+ <DialogPortal>
4
+ <DialogOverlay class="fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" />
5
+ <DialogContent
6
+ :class="cn(
7
+ 'fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg md:w-full',
8
+ size === 'sm' && 'max-w-sm',
9
+ size === 'md' && 'max-w-md',
10
+ size === 'lg' && 'max-w-lg',
11
+ size === 'xl' && 'max-w-xl',
12
+ size === '2xl' && 'max-w-2xl',
13
+ size === '3xl' && 'max-w-3xl',
14
+ size === '4xl' && 'max-w-4xl',
15
+ size === '5xl' && 'max-w-5xl',
16
+ className
17
+ )"
18
+ >
19
+ <div v-if="$slots.title || $slots.description" class="flex flex-col space-y-1.5 text-center sm:text-left">
20
+ <DialogTitle v-if="$slots.title" class="text-lg font-semibold leading-none tracking-tight">
21
+ <slot name="title" />
22
+ </DialogTitle>
23
+ <DialogDescription v-if="$slots.description" class="text-sm text-muted-foreground">
24
+ <slot name="description" />
25
+ </DialogDescription>
26
+ </div>
27
+
28
+ <div class="flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2">
29
+ <slot />
30
+ </div>
31
+
32
+ <DialogClose
33
+ class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"
34
+ >
35
+ <Cross2Icon class="h-4 w-4" />
36
+ <span class="sr-only">Close</span>
37
+ </DialogClose>
38
+ </DialogContent>
39
+ </DialogPortal>
40
+ </DialogRoot>
41
+ </template>
42
+
43
+ <script setup lang="ts">
44
+ import { DialogClose, DialogContent, DialogDescription, DialogOverlay, DialogPortal, DialogRoot, DialogTitle } from 'radix-vue'
45
+ import { Cross2Icon } from '@radix-vue/icons'
46
+ import { type HTMLAttributes, computed } from 'vue'
47
+ import { cn } from '@/lib/utils'
48
+
49
+ interface Props {
50
+ open?: boolean
51
+ size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl'
52
+ class?: HTMLAttributes['class']
53
+ }
54
+
55
+ const props = withDefaults(defineProps<Props>(), {
56
+ open: false,
57
+ size: 'lg'
58
+ })
59
+
60
+ const open = computed({
61
+ get: () => props.open,
62
+ set: (value) => {
63
+ if (!value) {
64
+ // Handle close
65
+ }
66
+ }
67
+ })
68
+ </script>
@@ -0,0 +1,149 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+ import { FileX, Search, InBox, AlertCircle, Info } from 'lucide-vue-next'
4
+ import { cn } from '@/lib/utils'
5
+ import { emptyStateVariants, iconVariants, type EmptyStateVariants } from '.'
6
+
7
+ interface Props {
8
+ title?: string
9
+ description?: string
10
+ icon?: string | object // Lucide icon name or component
11
+ animationData?: any
12
+ animationTitle?: string
13
+ size?: EmptyStateVariants['size']
14
+ variant?: EmptyStateVariants['variant']
15
+ loop?: boolean | number
16
+ animateOnHover?: boolean
17
+ autoPlay?: boolean
18
+ class?: string
19
+ iconClass?: string
20
+ titleClass?: string
21
+ descriptionClass?: string
22
+ }
23
+
24
+ const props = withDefaults(defineProps<Props>(), {
25
+ title: 'No data available',
26
+ size: 'default',
27
+ variant: 'default',
28
+ loop: true,
29
+ animateOnHover: false,
30
+ autoPlay: true,
31
+ })
32
+
33
+ const DefaultIcon = computed(() => {
34
+ if (props.icon) {
35
+ return null // Use custom icon
36
+ }
37
+
38
+ // Choose appropriate default icon based on title content
39
+ const title = props.title?.toLowerCase() || ''
40
+
41
+ if (title.includes('search') || title.includes('find') || title.includes('result')) {
42
+ return Search
43
+ } else if (title.includes('empty') || title.includes('no') || title.includes('data')) {
44
+ return FileX
45
+ } else if (title.includes('message') || title.includes('notification') || title.includes('alert')) {
46
+ return InBox
47
+ } else if (title.includes('error') || title.includes('warning')) {
48
+ return AlertCircle
49
+ } else {
50
+ return Info
51
+ }
52
+ })
53
+
54
+ const iconComponent = computed(() => {
55
+ if (typeof props.icon === 'object') {
56
+ return props.icon // Vue component
57
+ }
58
+
59
+ if (typeof props.icon === 'string') {
60
+ // Map string to Lucide icons
61
+ const iconMap: Record<string, any> = {
62
+ 'file-x': FileX,
63
+ 'search': Search,
64
+ 'inbox': InBox,
65
+ 'alert-circle': AlertCircle,
66
+ 'info': Info,
67
+ }
68
+
69
+ return iconMap[props.icon] || DefaultIcon.value
70
+ }
71
+
72
+ return DefaultIcon.value
73
+ })
74
+
75
+ const hasIconSlot = computed(() => !!$slots.icon)
76
+ const hasDescriptionSlot = computed(() => !!$slots.description)
77
+ const hasActionsSlot = computed(() => !!$slots.actions)
78
+ </script>
79
+
80
+ <template>
81
+ <div :class="cn(emptyStateVariants({ size, variant }), props.class)">
82
+ <!-- Icon section -->
83
+ <div class="mb-4">
84
+ <slot name="icon">
85
+ <!-- Lottie animation if provided -->
86
+ <div
87
+ v-if="animationData"
88
+ :class="cn(iconVariants({ size }))"
89
+ :title="animationTitle || title"
90
+ >
91
+ <!-- You can integrate a Lottie component here -->
92
+ <component
93
+ :is="iconComponent"
94
+ :class="cn(iconVariants({ size }), props.iconClass)"
95
+ />
96
+ </div>
97
+
98
+ <!-- Custom icon or default Lucide icon -->
99
+ <component
100
+ v-else-if="iconComponent && !hasIconSlot"
101
+ :is="iconComponent"
102
+ :class="cn(iconVariants({ size }), props.iconClass)"
103
+ />
104
+ </slot>
105
+ </div>
106
+
107
+ <!-- Title section -->
108
+ <h3
109
+ v-if="title || $slots.title"
110
+ :class="cn(
111
+ 'text-lg font-semibold mb-2',
112
+ {
113
+ 'text-foreground': variant === 'default',
114
+ 'text-muted-foreground': variant === 'muted'
115
+ },
116
+ titleClass
117
+ )"
118
+ >
119
+ <slot name="title">{{ title }}</slot>
120
+ </h3>
121
+
122
+ <!-- Description section -->
123
+ <div
124
+ v-if="hasDescriptionSlot || description"
125
+ :class="cn(
126
+ 'text-sm max-w-md mb-6',
127
+ {
128
+ 'text-muted-foreground': variant === 'default',
129
+ 'text-muted-foreground/70': variant === 'muted'
130
+ },
131
+ descriptionClass
132
+ )"
133
+ >
134
+ <slot name="description">
135
+ <p>{{ description }}</p>
136
+ </slot>
137
+ </div>
138
+
139
+ <!-- Actions section -->
140
+ <div v-if="hasActionsSlot" class="mt-4">
141
+ <slot name="actions" />
142
+ </div>
143
+
144
+ <!-- Extra content section -->
145
+ <div v-if="$slots.extra" class="mt-6">
146
+ <slot name="extra" />
147
+ </div>
148
+ </div>
149
+ </template>
@@ -0,0 +1,163 @@
1
+ <script setup lang="ts">
2
+ import { computed } from 'vue'
3
+ import { X, AlertCircle, AlertTriangle, CheckCircle, Info, Loader2 } from 'lucide-vue-next'
4
+ import { cn } from '@/lib/utils'
5
+ import { inlineNotificationVariants, type InlineNotificationVariants } from '.'
6
+
7
+ interface Props {
8
+ title?: string
9
+ description?: string
10
+ variant?: InlineNotificationVariants['variant']
11
+ showCloseButton?: boolean
12
+ actionLabel?: string
13
+ closeAriaLabel?: string
14
+ loading?: boolean
15
+ timer?: number
16
+ lowContrast?: boolean
17
+ class?: string
18
+ icon?: object // Custom icon component
19
+ }
20
+
21
+ const props = withDefaults(defineProps<Props>(), {
22
+ variant: 'info',
23
+ showCloseButton: false,
24
+ closeAriaLabel: 'Dismiss notification',
25
+ loading: false,
26
+ lowContrast: false,
27
+ })
28
+
29
+ const emit = defineEmits<{
30
+ close: []
31
+ action: []
32
+ }>()
33
+
34
+ const NotificationIcon = computed(() => {
35
+ if (props.icon) {
36
+ return props.icon
37
+ }
38
+
39
+ switch (props.variant) {
40
+ case 'destructive':
41
+ return AlertCircle
42
+ case 'warning':
43
+ return AlertTriangle
44
+ case 'success':
45
+ return CheckCircle
46
+ case 'info':
47
+ default:
48
+ return Info
49
+ }
50
+ })
51
+
52
+ const variantToKind = {
53
+ destructive: 'error',
54
+ warning: 'warning',
55
+ success: 'success',
56
+ info: 'info',
57
+ default: 'info'
58
+ }
59
+
60
+ const kind = computed(() => variantToKind[props.variant])
61
+
62
+ const hasTitle = computed(() => props.title || $slots.title)
63
+ const hasDescription = computed(() => props.description || $slots.description)
64
+ const hasAction = computed(() => props.actionLabel)
65
+ const hasTimer = computed(() => props.timer)
66
+ const hasLoading = computed(() => props.loading)
67
+
68
+ const showCloseButtonVisible = computed(() => props.showCloseButton && !hasLoading.value)
69
+
70
+ const role = computed(() => {
71
+ if (props.variant === 'destructive' || props.variant === 'warning') {
72
+ return 'alert'
73
+ }
74
+ return 'status'
75
+ })
76
+
77
+ const ariaLive = computed(() => {
78
+ if (props.variant === 'destructive') {
79
+ return 'assertive'
80
+ }
81
+ return 'polite'
82
+ })
83
+ </script>
84
+
85
+ <template>
86
+ <div
87
+ :class="cn(
88
+ inlineNotificationVariants({ variant }),
89
+ {
90
+ 'opacity-75': lowContrast
91
+ },
92
+ props.class
93
+ )"
94
+ :role="role"
95
+ :aria-live="ariaLive"
96
+ >
97
+ <!-- Icon -->
98
+ <component
99
+ :is="NotificationIcon"
100
+ class="h-4 w-4"
101
+ />
102
+
103
+ <!-- Loading spinner -->
104
+ <Loader2
105
+ v-if="loading"
106
+ class="h-4 w-4 animate-spin absolute right-12 top-4"
107
+ />
108
+
109
+ <!-- Timer circle -->
110
+ <div
111
+ v-if="timer"
112
+ class="h-4 w-4 absolute right-12 top-4"
113
+ >
114
+ <!-- You can integrate NsCircleTimer component here -->
115
+ <div class="h-4 w-4 rounded-full border-2 border-current animate-pulse" />
116
+ </div>
117
+
118
+ <!-- Content -->
119
+ <div class="grid gap-1">
120
+ <!-- Title -->
121
+ <h4
122
+ v-if="hasTitle"
123
+ class="text-sm font-medium leading-none"
124
+ >
125
+ <slot name="title">{{ title }}</slot>
126
+ </h4>
127
+
128
+ <!-- Description -->
129
+ <p
130
+ v-if="hasDescription"
131
+ :class="cn('text-sm opacity-90', {
132
+ 'mr-12': hasAction || showCloseButtonVisible || hasTimer || hasLoading
133
+ })"
134
+ >
135
+ <slot name="description">{{ description }}</slot>
136
+ </p>
137
+
138
+ <!-- Action button -->
139
+ <button
140
+ v-if="hasAction"
141
+ type="button"
142
+ class="inline-flex items-center text-sm font-medium underline underline-offset-2 hover:no-underline focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 rounded-sm"
143
+ @click="emit('action')"
144
+ >
145
+ {{ actionLabel }}
146
+ </button>
147
+ </div>
148
+
149
+ <!-- Close button -->
150
+ <button
151
+ v-if="showCloseButtonVisible"
152
+ type="button"
153
+ :aria-label="closeAriaLabel"
154
+ class="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none"
155
+ @click="emit('close')"
156
+ >
157
+ <X class="h-4 w-4" />
158
+ </button>
159
+
160
+ <!-- Extra content -->
161
+ <slot name="extra" />
162
+ </div>
163
+ </template>
@@ -0,0 +1,33 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import { useVModel } from "@vueuse/core"
4
+ import { cn } from "@/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="cn(
27
+ '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',
28
+ 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',
29
+ 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',
30
+ props.class,
31
+ )"
32
+ >
33
+ </template>
@@ -0,0 +1,35 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import { cn } from "@/lib/utils"
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes["class"]
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="input-group"
13
+ role="group"
14
+ :class="cn(
15
+ 'group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none',
16
+ 'h-9 min-w-0 has-[>textarea]:h-auto',
17
+
18
+ // Variants based on alignment.
19
+ 'has-[>[data-align=inline-start]]:[&>input]:pl-2',
20
+ 'has-[>[data-align=inline-end]]:[&>input]:pr-2',
21
+ 'has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3',
22
+ 'has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3',
23
+
24
+ // Focus state.
25
+ 'has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]',
26
+
27
+ // Error state.
28
+ 'has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40',
29
+
30
+ props.class,
31
+ )"
32
+ >
33
+ <slot />
34
+ </div>
35
+ </template>
@@ -0,0 +1,36 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import type { InputGroupVariants } from "."
4
+ import { cn } from "@/lib/utils"
5
+ import { inputGroupAddonVariants } from "."
6
+
7
+ const props = withDefaults(defineProps<{
8
+ align?: InputGroupVariants["align"]
9
+ class?: HTMLAttributes["class"]
10
+ }>(), {
11
+ align: "inline-start",
12
+ })
13
+
14
+ function handleInputGroupAddonClick(e: MouseEvent) {
15
+ const currentTarget = e.currentTarget as HTMLElement | null
16
+ const target = e.target as HTMLElement | null
17
+ if (target && target.closest("button")) {
18
+ return
19
+ }
20
+ if (currentTarget && currentTarget?.parentElement) {
21
+ currentTarget.parentElement?.querySelector("input")?.focus()
22
+ }
23
+ }
24
+ </script>
25
+
26
+ <template>
27
+ <div
28
+ role="group"
29
+ data-slot="input-group-addon"
30
+ :data-align="props.align"
31
+ :class="cn(inputGroupAddonVariants({ align: props.align }), props.class)"
32
+ @click="handleInputGroupAddonClick"
33
+ >
34
+ <slot />
35
+ </div>
36
+ </template>
@@ -0,0 +1,21 @@
1
+ <script setup lang="ts">
2
+ import type { InputGroupButtonProps } from "."
3
+ import { cn } from "@/lib/utils"
4
+ import { Button } from '@/components/ui/button'
5
+ import { inputGroupButtonVariants } from "."
6
+
7
+ const props = withDefaults(defineProps<InputGroupButtonProps>(), {
8
+ size: "xs",
9
+ variant: "ghost",
10
+ })
11
+ </script>
12
+
13
+ <template>
14
+ <Button
15
+ :data-size="props.size"
16
+ :variant="props.variant"
17
+ :class="cn(inputGroupButtonVariants({ size: props.size }), props.class)"
18
+ >
19
+ <slot />
20
+ </Button>
21
+ </template>
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import { cn } from "@/lib/utils"
4
+ import { Input } from '@/components/ui/input'
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes["class"]
8
+ }>()
9
+ </script>
10
+
11
+ <template>
12
+ <Input
13
+ data-slot="input-group-control"
14
+ :class="cn(
15
+ 'flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent',
16
+ props.class,
17
+ )"
18
+ />
19
+ </template>
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import { cn } from "@/lib/utils"
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes["class"]
7
+ }>()
8
+ </script>
9
+
10
+ <template>
11
+ <span
12
+ :class="cn(
13
+ 'text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*=\'size-\'])]:size-4',
14
+ props.class,
15
+ )"
16
+ >
17
+ <slot />
18
+ </span>
19
+ </template>