@polymarbot/nuxt-layer-shadcn-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (408) hide show
  1. package/app/assets/styles/animate.css +71 -0
  2. package/app/assets/styles/colors.css +116 -0
  3. package/app/assets/styles/globals.css +43 -0
  4. package/app/assets/styles/index.stories.ts +211 -0
  5. package/app/assets/styles/transition.css +34 -0
  6. package/app/assets/styles/utilities.css +26 -0
  7. package/app/components/shadcn/accordion/Accordion.vue +18 -0
  8. package/app/components/shadcn/accordion/AccordionContent.vue +23 -0
  9. package/app/components/shadcn/accordion/AccordionItem.vue +24 -0
  10. package/app/components/shadcn/accordion/AccordionTrigger.vue +37 -0
  11. package/app/components/shadcn/accordion/index.ts +4 -0
  12. package/app/components/shadcn/alert/Alert.vue +21 -0
  13. package/app/components/shadcn/alert/AlertDescription.vue +17 -0
  14. package/app/components/shadcn/alert/AlertTitle.vue +17 -0
  15. package/app/components/shadcn/alert/index.ts +24 -0
  16. package/app/components/shadcn/avatar/Avatar.vue +18 -0
  17. package/app/components/shadcn/avatar/AvatarFallback.vue +21 -0
  18. package/app/components/shadcn/avatar/AvatarImage.vue +16 -0
  19. package/app/components/shadcn/avatar/index.ts +3 -0
  20. package/app/components/shadcn/badge/Badge.vue +26 -0
  21. package/app/components/shadcn/badge/index.ts +26 -0
  22. package/app/components/shadcn/breadcrumb/Breadcrumb.vue +17 -0
  23. package/app/components/shadcn/breadcrumb/BreadcrumbEllipsis.vue +23 -0
  24. package/app/components/shadcn/breadcrumb/BreadcrumbItem.vue +17 -0
  25. package/app/components/shadcn/breadcrumb/BreadcrumbLink.vue +21 -0
  26. package/app/components/shadcn/breadcrumb/BreadcrumbList.vue +17 -0
  27. package/app/components/shadcn/breadcrumb/BreadcrumbPage.vue +20 -0
  28. package/app/components/shadcn/breadcrumb/BreadcrumbSeparator.vue +22 -0
  29. package/app/components/shadcn/breadcrumb/index.ts +7 -0
  30. package/app/components/shadcn/button/Button.vue +31 -0
  31. package/app/components/shadcn/button/index.ts +38 -0
  32. package/app/components/shadcn/card/Card.vue +22 -0
  33. package/app/components/shadcn/card/CardAction.vue +17 -0
  34. package/app/components/shadcn/card/CardContent.vue +17 -0
  35. package/app/components/shadcn/card/CardDescription.vue +17 -0
  36. package/app/components/shadcn/card/CardFooter.vue +17 -0
  37. package/app/components/shadcn/card/CardHeader.vue +17 -0
  38. package/app/components/shadcn/card/CardTitle.vue +17 -0
  39. package/app/components/shadcn/card/index.ts +7 -0
  40. package/app/components/shadcn/checkbox/Checkbox.vue +35 -0
  41. package/app/components/shadcn/checkbox/index.ts +1 -0
  42. package/app/components/shadcn/collapsible/Collapsible.vue +19 -0
  43. package/app/components/shadcn/collapsible/CollapsibleContent.vue +15 -0
  44. package/app/components/shadcn/collapsible/CollapsibleTrigger.vue +15 -0
  45. package/app/components/shadcn/collapsible/index.ts +3 -0
  46. package/app/components/shadcn/command/Command.vue +87 -0
  47. package/app/components/shadcn/command/CommandDialog.vue +31 -0
  48. package/app/components/shadcn/command/CommandEmpty.vue +27 -0
  49. package/app/components/shadcn/command/CommandGroup.vue +45 -0
  50. package/app/components/shadcn/command/CommandInput.vue +39 -0
  51. package/app/components/shadcn/command/CommandItem.vue +76 -0
  52. package/app/components/shadcn/command/CommandList.vue +25 -0
  53. package/app/components/shadcn/command/CommandSeparator.vue +21 -0
  54. package/app/components/shadcn/command/CommandShortcut.vue +17 -0
  55. package/app/components/shadcn/command/index.ts +25 -0
  56. package/app/components/shadcn/dialog/Dialog.vue +19 -0
  57. package/app/components/shadcn/dialog/DialogClose.vue +15 -0
  58. package/app/components/shadcn/dialog/DialogContent.vue +53 -0
  59. package/app/components/shadcn/dialog/DialogDescription.vue +23 -0
  60. package/app/components/shadcn/dialog/DialogFooter.vue +27 -0
  61. package/app/components/shadcn/dialog/DialogHeader.vue +17 -0
  62. package/app/components/shadcn/dialog/DialogOverlay.vue +21 -0
  63. package/app/components/shadcn/dialog/DialogScrollContent.vue +59 -0
  64. package/app/components/shadcn/dialog/DialogTitle.vue +23 -0
  65. package/app/components/shadcn/dialog/DialogTrigger.vue +15 -0
  66. package/app/components/shadcn/dialog/index.ts +10 -0
  67. package/app/components/shadcn/dropdown-menu/DropdownMenu.vue +19 -0
  68. package/app/components/shadcn/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
  69. package/app/components/shadcn/dropdown-menu/DropdownMenuContent.vue +39 -0
  70. package/app/components/shadcn/dropdown-menu/DropdownMenuGroup.vue +15 -0
  71. package/app/components/shadcn/dropdown-menu/DropdownMenuItem.vue +31 -0
  72. package/app/components/shadcn/dropdown-menu/DropdownMenuLabel.vue +23 -0
  73. package/app/components/shadcn/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  74. package/app/components/shadcn/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
  75. package/app/components/shadcn/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  76. package/app/components/shadcn/dropdown-menu/DropdownMenuShortcut.vue +17 -0
  77. package/app/components/shadcn/dropdown-menu/DropdownMenuSub.vue +18 -0
  78. package/app/components/shadcn/dropdown-menu/DropdownMenuSubContent.vue +27 -0
  79. package/app/components/shadcn/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
  80. package/app/components/shadcn/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  81. package/app/components/shadcn/dropdown-menu/index.ts +16 -0
  82. package/app/components/shadcn/field/Field.vue +25 -0
  83. package/app/components/shadcn/field/FieldContent.vue +20 -0
  84. package/app/components/shadcn/field/FieldDescription.vue +22 -0
  85. package/app/components/shadcn/field/FieldError.vue +53 -0
  86. package/app/components/shadcn/field/FieldGroup.vue +20 -0
  87. package/app/components/shadcn/field/FieldLabel.vue +23 -0
  88. package/app/components/shadcn/field/FieldLegend.vue +24 -0
  89. package/app/components/shadcn/field/FieldSeparator.vue +29 -0
  90. package/app/components/shadcn/field/FieldSet.vue +21 -0
  91. package/app/components/shadcn/field/FieldTitle.vue +20 -0
  92. package/app/components/shadcn/field/index.ts +39 -0
  93. package/app/components/shadcn/input/Input.vue +33 -0
  94. package/app/components/shadcn/input/index.ts +1 -0
  95. package/app/components/shadcn/input-group/InputGroup.vue +35 -0
  96. package/app/components/shadcn/input-group/InputGroupAddon.vue +36 -0
  97. package/app/components/shadcn/input-group/InputGroupButton.vue +29 -0
  98. package/app/components/shadcn/input-group/InputGroupInput.vue +19 -0
  99. package/app/components/shadcn/input-group/InputGroupText.vue +19 -0
  100. package/app/components/shadcn/input-group/InputGroupTextarea.vue +19 -0
  101. package/app/components/shadcn/input-group/index.ts +51 -0
  102. package/app/components/shadcn/label/Label.vue +26 -0
  103. package/app/components/shadcn/label/index.ts +1 -0
  104. package/app/components/shadcn/number-field/NumberField.vue +20 -0
  105. package/app/components/shadcn/number-field/NumberFieldContent.vue +14 -0
  106. package/app/components/shadcn/number-field/NumberFieldDecrement.vue +22 -0
  107. package/app/components/shadcn/number-field/NumberFieldIncrement.vue +22 -0
  108. package/app/components/shadcn/number-field/NumberFieldInput.vue +16 -0
  109. package/app/components/shadcn/number-field/index.ts +5 -0
  110. package/app/components/shadcn/pagination/Pagination.vue +26 -0
  111. package/app/components/shadcn/pagination/PaginationContent.vue +22 -0
  112. package/app/components/shadcn/pagination/PaginationEllipsis.vue +25 -0
  113. package/app/components/shadcn/pagination/PaginationFirst.vue +33 -0
  114. package/app/components/shadcn/pagination/PaginationItem.vue +34 -0
  115. package/app/components/shadcn/pagination/PaginationLast.vue +33 -0
  116. package/app/components/shadcn/pagination/PaginationNext.vue +33 -0
  117. package/app/components/shadcn/pagination/PaginationPrevious.vue +33 -0
  118. package/app/components/shadcn/pagination/index.ts +8 -0
  119. package/app/components/shadcn/pin-input/PinInput.vue +26 -0
  120. package/app/components/shadcn/pin-input/PinInputGroup.vue +21 -0
  121. package/app/components/shadcn/pin-input/PinInputSeparator.vue +19 -0
  122. package/app/components/shadcn/pin-input/PinInputSlot.vue +21 -0
  123. package/app/components/shadcn/pin-input/index.ts +4 -0
  124. package/app/components/shadcn/popover/Popover.vue +19 -0
  125. package/app/components/shadcn/popover/PopoverAnchor.vue +15 -0
  126. package/app/components/shadcn/popover/PopoverContent.vue +45 -0
  127. package/app/components/shadcn/popover/PopoverTrigger.vue +15 -0
  128. package/app/components/shadcn/popover/index.ts +4 -0
  129. package/app/components/shadcn/progress/Progress.vue +38 -0
  130. package/app/components/shadcn/progress/index.ts +1 -0
  131. package/app/components/shadcn/radio-group/RadioGroup.vue +25 -0
  132. package/app/components/shadcn/radio-group/RadioGroupItem.vue +40 -0
  133. package/app/components/shadcn/radio-group/index.ts +2 -0
  134. package/app/components/shadcn/scroll-area/ScrollArea.vue +33 -0
  135. package/app/components/shadcn/scroll-area/ScrollBar.vue +32 -0
  136. package/app/components/shadcn/scroll-area/index.ts +2 -0
  137. package/app/components/shadcn/select/Select.vue +19 -0
  138. package/app/components/shadcn/select/SelectContent.vue +51 -0
  139. package/app/components/shadcn/select/SelectGroup.vue +15 -0
  140. package/app/components/shadcn/select/SelectItem.vue +44 -0
  141. package/app/components/shadcn/select/SelectItemText.vue +15 -0
  142. package/app/components/shadcn/select/SelectLabel.vue +17 -0
  143. package/app/components/shadcn/select/SelectScrollDownButton.vue +26 -0
  144. package/app/components/shadcn/select/SelectScrollUpButton.vue +26 -0
  145. package/app/components/shadcn/select/SelectSeparator.vue +19 -0
  146. package/app/components/shadcn/select/SelectTrigger.vue +33 -0
  147. package/app/components/shadcn/select/SelectValue.vue +15 -0
  148. package/app/components/shadcn/select/index.ts +11 -0
  149. package/app/components/shadcn/separator/Separator.vue +29 -0
  150. package/app/components/shadcn/separator/index.ts +1 -0
  151. package/app/components/shadcn/sheet/Sheet.vue +19 -0
  152. package/app/components/shadcn/sheet/SheetClose.vue +15 -0
  153. package/app/components/shadcn/sheet/SheetContent.vue +62 -0
  154. package/app/components/shadcn/sheet/SheetDescription.vue +21 -0
  155. package/app/components/shadcn/sheet/SheetFooter.vue +16 -0
  156. package/app/components/shadcn/sheet/SheetHeader.vue +15 -0
  157. package/app/components/shadcn/sheet/SheetOverlay.vue +21 -0
  158. package/app/components/shadcn/sheet/SheetTitle.vue +21 -0
  159. package/app/components/shadcn/sheet/SheetTrigger.vue +15 -0
  160. package/app/components/shadcn/sheet/index.ts +8 -0
  161. package/app/components/shadcn/sidebar/Sidebar.vue +96 -0
  162. package/app/components/shadcn/sidebar/SidebarContent.vue +18 -0
  163. package/app/components/shadcn/sidebar/SidebarFooter.vue +18 -0
  164. package/app/components/shadcn/sidebar/SidebarGroup.vue +18 -0
  165. package/app/components/shadcn/sidebar/SidebarGroupAction.vue +27 -0
  166. package/app/components/shadcn/sidebar/SidebarGroupContent.vue +18 -0
  167. package/app/components/shadcn/sidebar/SidebarGroupLabel.vue +25 -0
  168. package/app/components/shadcn/sidebar/SidebarHeader.vue +18 -0
  169. package/app/components/shadcn/sidebar/SidebarInput.vue +22 -0
  170. package/app/components/shadcn/sidebar/SidebarInset.vue +21 -0
  171. package/app/components/shadcn/sidebar/SidebarMenu.vue +18 -0
  172. package/app/components/shadcn/sidebar/SidebarMenuAction.vue +35 -0
  173. package/app/components/shadcn/sidebar/SidebarMenuBadge.vue +26 -0
  174. package/app/components/shadcn/sidebar/SidebarMenuButton.vue +48 -0
  175. package/app/components/shadcn/sidebar/SidebarMenuButtonChild.vue +36 -0
  176. package/app/components/shadcn/sidebar/SidebarMenuItem.vue +18 -0
  177. package/app/components/shadcn/sidebar/SidebarMenuSkeleton.vue +35 -0
  178. package/app/components/shadcn/sidebar/SidebarMenuSub.vue +22 -0
  179. package/app/components/shadcn/sidebar/SidebarMenuSubButton.vue +36 -0
  180. package/app/components/shadcn/sidebar/SidebarMenuSubItem.vue +18 -0
  181. package/app/components/shadcn/sidebar/SidebarProvider.vue +82 -0
  182. package/app/components/shadcn/sidebar/SidebarRail.vue +33 -0
  183. package/app/components/shadcn/sidebar/SidebarSeparator.vue +19 -0
  184. package/app/components/shadcn/sidebar/SidebarTrigger.vue +27 -0
  185. package/app/components/shadcn/sidebar/index.ts +60 -0
  186. package/app/components/shadcn/sidebar/utils.ts +19 -0
  187. package/app/components/shadcn/skeleton/Skeleton.vue +17 -0
  188. package/app/components/shadcn/skeleton/index.ts +1 -0
  189. package/app/components/shadcn/slider/Slider.vue +43 -0
  190. package/app/components/shadcn/slider/index.ts +1 -0
  191. package/app/components/shadcn/sonner/Sonner.vue +42 -0
  192. package/app/components/shadcn/sonner/index.ts +1 -0
  193. package/app/components/shadcn/switch/Switch.vue +38 -0
  194. package/app/components/shadcn/switch/index.ts +1 -0
  195. package/app/components/shadcn/table/Table.vue +16 -0
  196. package/app/components/shadcn/table/TableBody.vue +17 -0
  197. package/app/components/shadcn/table/TableCaption.vue +17 -0
  198. package/app/components/shadcn/table/TableCell.vue +22 -0
  199. package/app/components/shadcn/table/TableEmpty.vue +34 -0
  200. package/app/components/shadcn/table/TableFooter.vue +17 -0
  201. package/app/components/shadcn/table/TableHead.vue +17 -0
  202. package/app/components/shadcn/table/TableHeader.vue +17 -0
  203. package/app/components/shadcn/table/TableRow.vue +17 -0
  204. package/app/components/shadcn/table/index.ts +9 -0
  205. package/app/components/shadcn/table/utils.ts +10 -0
  206. package/app/components/shadcn/tabs/Tabs.vue +24 -0
  207. package/app/components/shadcn/tabs/TabsContent.vue +21 -0
  208. package/app/components/shadcn/tabs/TabsList.vue +24 -0
  209. package/app/components/shadcn/tabs/TabsTrigger.vue +26 -0
  210. package/app/components/shadcn/tabs/index.ts +4 -0
  211. package/app/components/shadcn/textarea/Textarea.vue +28 -0
  212. package/app/components/shadcn/textarea/index.ts +1 -0
  213. package/app/components/shadcn/toggle/Toggle.vue +35 -0
  214. package/app/components/shadcn/toggle/index.ts +28 -0
  215. package/app/components/shadcn/toggle-group/ToggleGroup.vue +49 -0
  216. package/app/components/shadcn/toggle-group/ToggleGroupItem.vue +46 -0
  217. package/app/components/shadcn/toggle-group/index.ts +2 -0
  218. package/app/components/shadcn/tooltip/Tooltip.vue +19 -0
  219. package/app/components/shadcn/tooltip/TooltipContent.vue +34 -0
  220. package/app/components/shadcn/tooltip/TooltipProvider.vue +14 -0
  221. package/app/components/shadcn/tooltip/TooltipTrigger.vue +15 -0
  222. package/app/components/shadcn/tooltip/index.ts +4 -0
  223. package/app/components/ui/Accordion/index.stories.ts +108 -0
  224. package/app/components/ui/Accordion/index.vue +80 -0
  225. package/app/components/ui/Accordion/types.ts +27 -0
  226. package/app/components/ui/Alert/index.stories.ts +53 -0
  227. package/app/components/ui/Alert/index.vue +61 -0
  228. package/app/components/ui/Alert/types.ts +9 -0
  229. package/app/components/ui/AlertDialog/index.stories.ts +108 -0
  230. package/app/components/ui/AlertDialog/index.vue +25 -0
  231. package/app/components/ui/AsyncDataTable/en.json +3 -0
  232. package/app/components/ui/AsyncDataTable/index.stories.ts +141 -0
  233. package/app/components/ui/AsyncDataTable/index.vue +312 -0
  234. package/app/components/ui/AsyncDataTable/types.ts +53 -0
  235. package/app/components/ui/Avatar/index.stories.ts +84 -0
  236. package/app/components/ui/Avatar/index.vue +52 -0
  237. package/app/components/ui/Avatar/types.ts +8 -0
  238. package/app/components/ui/Badge/index.stories.ts +67 -0
  239. package/app/components/ui/Badge/index.vue +12 -0
  240. package/app/components/ui/Badge/types.ts +3 -0
  241. package/app/components/ui/Breadcrumb/index.stories.ts +52 -0
  242. package/app/components/ui/Breadcrumb/index.vue +61 -0
  243. package/app/components/ui/Breadcrumb/types.ts +11 -0
  244. package/app/components/ui/Button/index.stories.ts +145 -0
  245. package/app/components/ui/Button/index.vue +63 -0
  246. package/app/components/ui/Button/types.ts +14 -0
  247. package/app/components/ui/ButtonGroup/index.stories.ts +75 -0
  248. package/app/components/ui/ButtonGroup/index.vue +22 -0
  249. package/app/components/ui/ButtonGroup/types.ts +3 -0
  250. package/app/components/ui/Card/index.stories.ts +65 -0
  251. package/app/components/ui/Card/index.vue +28 -0
  252. package/app/components/ui/Card/types.ts +3 -0
  253. package/app/components/ui/Checkbox/index.stories.ts +68 -0
  254. package/app/components/ui/Checkbox/index.vue +23 -0
  255. package/app/components/ui/Checkbox/types.ts +3 -0
  256. package/app/components/ui/CopyButton/en.json +4 -0
  257. package/app/components/ui/CopyButton/index.stories.ts +55 -0
  258. package/app/components/ui/CopyButton/index.vue +98 -0
  259. package/app/components/ui/CopyButton/types.ts +10 -0
  260. package/app/components/ui/DataTable/en.json +3 -0
  261. package/app/components/ui/DataTable/index.stories.ts +231 -0
  262. package/app/components/ui/DataTable/index.vue +505 -0
  263. package/app/components/ui/DataTable/types.ts +42 -0
  264. package/app/components/ui/DatePicker/en.json +9 -0
  265. package/app/components/ui/DatePicker/index.stories.ts +70 -0
  266. package/app/components/ui/DatePicker/index.vue +127 -0
  267. package/app/components/ui/DatePicker/style.css +88 -0
  268. package/app/components/ui/DatePicker/types.ts +41 -0
  269. package/app/components/ui/DateRangePicker/en.json +5 -0
  270. package/app/components/ui/DateRangePicker/index.stories.ts +67 -0
  271. package/app/components/ui/DateRangePicker/index.vue +138 -0
  272. package/app/components/ui/DateRangePicker/types.ts +31 -0
  273. package/app/components/ui/Divider/index.stories.ts +42 -0
  274. package/app/components/ui/Divider/index.vue +16 -0
  275. package/app/components/ui/Divider/types.ts +3 -0
  276. package/app/components/ui/Drawer/index.stories.ts +124 -0
  277. package/app/components/ui/Drawer/index.vue +197 -0
  278. package/app/components/ui/Drawer/types.ts +22 -0
  279. package/app/components/ui/Dropdown/index.stories.ts +145 -0
  280. package/app/components/ui/Dropdown/index.vue +258 -0
  281. package/app/components/ui/Dropdown/types.ts +87 -0
  282. package/app/components/ui/FormItem/index.stories.ts +70 -0
  283. package/app/components/ui/FormItem/index.vue +56 -0
  284. package/app/components/ui/FormItem/types.ts +14 -0
  285. package/app/components/ui/Help/index.stories.ts +54 -0
  286. package/app/components/ui/Help/index.vue +35 -0
  287. package/app/components/ui/Help/types.ts +8 -0
  288. package/app/components/ui/Icon/index.stories.ts +68 -0
  289. package/app/components/ui/Icon/index.vue +30 -0
  290. package/app/components/ui/Icon/types.ts +5 -0
  291. package/app/components/ui/Input/index.stories.ts +73 -0
  292. package/app/components/ui/Input/index.vue +92 -0
  293. package/app/components/ui/Input/types.ts +9 -0
  294. package/app/components/ui/InputCurrency/index.stories.ts +75 -0
  295. package/app/components/ui/InputCurrency/index.vue +31 -0
  296. package/app/components/ui/InputCurrency/types.ts +4 -0
  297. package/app/components/ui/InputNumber/index.stories.ts +56 -0
  298. package/app/components/ui/InputNumber/index.vue +76 -0
  299. package/app/components/ui/InputNumber/types.ts +10 -0
  300. package/app/components/ui/InputOtp/index.stories.ts +39 -0
  301. package/app/components/ui/InputOtp/index.vue +45 -0
  302. package/app/components/ui/InputOtp/types.ts +5 -0
  303. package/app/components/ui/InputPercent/index.stories.ts +32 -0
  304. package/app/components/ui/InputPercent/index.vue +8 -0
  305. package/app/components/ui/InputRange/index.stories.ts +37 -0
  306. package/app/components/ui/InputRange/index.vue +49 -0
  307. package/app/components/ui/InputRange/types.ts +8 -0
  308. package/app/components/ui/Loading/index.stories.ts +36 -0
  309. package/app/components/ui/Loading/index.vue +15 -0
  310. package/app/components/ui/Loading/types.ts +3 -0
  311. package/app/components/ui/Markdown/index.stories.ts +52 -0
  312. package/app/components/ui/Markdown/index.vue +22 -0
  313. package/app/components/ui/Markdown/themes/github.css +1248 -0
  314. package/app/components/ui/Markdown/types.ts +3 -0
  315. package/app/components/ui/Modal/index.stories.ts +124 -0
  316. package/app/components/ui/Modal/index.vue +202 -0
  317. package/app/components/ui/Modal/types.ts +23 -0
  318. package/app/components/ui/ModalContent/index.stories.ts +47 -0
  319. package/app/components/ui/ModalContent/index.vue +79 -0
  320. package/app/components/ui/ModalContent/types.ts +9 -0
  321. package/app/components/ui/PageCard/index.stories.ts +106 -0
  322. package/app/components/ui/PageCard/index.vue +135 -0
  323. package/app/components/ui/PageCard/types.ts +16 -0
  324. package/app/components/ui/Pagination/en.json +3 -0
  325. package/app/components/ui/Pagination/index.stories.ts +82 -0
  326. package/app/components/ui/Pagination/index.vue +173 -0
  327. package/app/components/ui/Pagination/types.ts +18 -0
  328. package/app/components/ui/Popover/index.stories.ts +67 -0
  329. package/app/components/ui/Popover/index.vue +21 -0
  330. package/app/components/ui/Popover/types.ts +5 -0
  331. package/app/components/ui/Qrcode/index.stories.ts +57 -0
  332. package/app/components/ui/Qrcode/index.vue +40 -0
  333. package/app/components/ui/Qrcode/types.ts +3 -0
  334. package/app/components/ui/Radio/index.stories.ts +71 -0
  335. package/app/components/ui/Radio/index.vue +10 -0
  336. package/app/components/ui/Radio/types.ts +3 -0
  337. package/app/components/ui/RadioCardGroup/index.stories.ts +90 -0
  338. package/app/components/ui/RadioCardGroup/index.vue +64 -0
  339. package/app/components/ui/RadioCardGroup/types.ts +13 -0
  340. package/app/components/ui/ScrollArea/index.stories.ts +66 -0
  341. package/app/components/ui/ScrollArea/index.vue +64 -0
  342. package/app/components/ui/ScrollArea/types.ts +5 -0
  343. package/app/components/ui/SearchSelect/en.json +5 -0
  344. package/app/components/ui/SearchSelect/index.stories.ts +126 -0
  345. package/app/components/ui/SearchSelect/index.vue +259 -0
  346. package/app/components/ui/SearchSelect/types.ts +39 -0
  347. package/app/components/ui/Select/en.json +6 -0
  348. package/app/components/ui/Select/index.stories.ts +128 -0
  349. package/app/components/ui/Select/index.vue +267 -0
  350. package/app/components/ui/Select/types.ts +34 -0
  351. package/app/components/ui/Skeleton/index.stories.ts +56 -0
  352. package/app/components/ui/Skeleton/index.vue +12 -0
  353. package/app/components/ui/Skeleton/types.ts +4 -0
  354. package/app/components/ui/Slider/index.stories.ts +60 -0
  355. package/app/components/ui/Slider/index.vue +27 -0
  356. package/app/components/ui/Slider/types.ts +5 -0
  357. package/app/components/ui/Surface/index.stories.ts +50 -0
  358. package/app/components/ui/Surface/index.vue +108 -0
  359. package/app/components/ui/Surface/types.ts +8 -0
  360. package/app/components/ui/Switch/index.stories.ts +32 -0
  361. package/app/components/ui/Switch/index.vue +10 -0
  362. package/app/components/ui/Switch/types.ts +3 -0
  363. package/app/components/ui/Tabs/index.stories.ts +116 -0
  364. package/app/components/ui/Tabs/index.vue +94 -0
  365. package/app/components/ui/Tabs/types.ts +19 -0
  366. package/app/components/ui/Tag/index.stories.ts +51 -0
  367. package/app/components/ui/Tag/index.vue +108 -0
  368. package/app/components/ui/Tag/types.ts +8 -0
  369. package/app/components/ui/Textarea/index.stories.ts +35 -0
  370. package/app/components/ui/Textarea/index.vue +50 -0
  371. package/app/components/ui/Textarea/types.ts +8 -0
  372. package/app/components/ui/Toast/index.stories.ts +48 -0
  373. package/app/components/ui/Toast/index.vue +21 -0
  374. package/app/components/ui/Toast/types.ts +5 -0
  375. package/app/components/ui/Tooltip/index.stories.ts +62 -0
  376. package/app/components/ui/Tooltip/index.vue +72 -0
  377. package/app/components/ui/Tooltip/types.ts +7 -0
  378. package/app/components/ui/WebLink/index.stories.ts +59 -0
  379. package/app/components/ui/WebLink/index.vue +61 -0
  380. package/app/components/ui/WebLink/types.ts +11 -0
  381. package/app/composables/index.ts +9 -0
  382. package/app/composables/useDialog.ts +76 -0
  383. package/app/composables/useToast.ts +49 -0
  384. package/app/en.json +23 -0
  385. package/app/types/index.ts +7 -0
  386. package/app/utils/index.ts +6 -0
  387. package/i18n/messages/ar.json +65 -0
  388. package/i18n/messages/de.json +65 -0
  389. package/i18n/messages/en.json +65 -0
  390. package/i18n/messages/es.json +65 -0
  391. package/i18n/messages/fr.json +65 -0
  392. package/i18n/messages/hi.json +65 -0
  393. package/i18n/messages/id.json +65 -0
  394. package/i18n/messages/it.json +65 -0
  395. package/i18n/messages/ja.json +65 -0
  396. package/i18n/messages/ko.json +65 -0
  397. package/i18n/messages/nl.json +65 -0
  398. package/i18n/messages/pl.json +65 -0
  399. package/i18n/messages/pt.json +65 -0
  400. package/i18n/messages/ru.json +65 -0
  401. package/i18n/messages/th.json +65 -0
  402. package/i18n/messages/tr.json +65 -0
  403. package/i18n/messages/vi.json +65 -0
  404. package/i18n/messages/zh-CN.json +65 -0
  405. package/i18n/messages/zh-TW.json +65 -0
  406. package/i18n.config.ts +19 -0
  407. package/nuxt.config.ts +62 -0
  408. package/package.json +46 -0
@@ -0,0 +1,61 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ Breadcrumb as ShadcnBreadcrumb,
4
+ BreadcrumbItem,
5
+ BreadcrumbLink,
6
+ BreadcrumbList,
7
+ BreadcrumbPage,
8
+ BreadcrumbSeparator,
9
+ } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/breadcrumb'
10
+ import type { BreadcrumbItem as BreadcrumbItemType, BreadcrumbProps } from './types'
11
+
12
+ const props = defineProps<BreadcrumbProps>()
13
+
14
+ const allItems = computed(() => {
15
+ const items: BreadcrumbItemType[] = []
16
+ if (props.home) items.push(props.home)
17
+ if (props.model) items.push(...props.model)
18
+ return items
19
+ })
20
+ </script>
21
+
22
+ <template>
23
+ <ShadcnBreadcrumb>
24
+ <BreadcrumbList>
25
+ <template
26
+ v-for="(item, index) in allItems"
27
+ :key="index"
28
+ >
29
+ <BreadcrumbSeparator v-if="index > 0" />
30
+ <BreadcrumbItem>
31
+ <BreadcrumbLink
32
+ v-if="item.href"
33
+ asChild
34
+ >
35
+ <WebLink
36
+ :href="item.href"
37
+ unstyled
38
+ class="inline-flex items-center gap-1"
39
+ >
40
+ <Icon
41
+ v-if="item.icon"
42
+ :name="item.icon"
43
+ />
44
+ <span>{{ item.label }}</span>
45
+ </WebLink>
46
+ </BreadcrumbLink>
47
+ <BreadcrumbPage
48
+ v-else
49
+ class="inline-flex items-center gap-1"
50
+ >
51
+ <Icon
52
+ v-if="item.icon"
53
+ :name="item.icon"
54
+ />
55
+ <span>{{ item.label }}</span>
56
+ </BreadcrumbPage>
57
+ </BreadcrumbItem>
58
+ </template>
59
+ </BreadcrumbList>
60
+ </ShadcnBreadcrumb>
61
+ </template>
@@ -0,0 +1,11 @@
1
+ export interface BreadcrumbItem {
2
+ label?: string
3
+ icon?: string
4
+ href?: string
5
+ target?: string
6
+ }
7
+
8
+ export interface BreadcrumbProps {
9
+ model?: BreadcrumbItem[]
10
+ home?: BreadcrumbItem
11
+ }
@@ -0,0 +1,145 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import Icon from '../Icon/index.vue'
3
+ import Button from './index.vue'
4
+
5
+ type ButtonVariant
6
+ = | 'default'
7
+ | 'destructive'
8
+ | 'outline'
9
+ | 'secondary'
10
+ | 'ghost'
11
+ | 'link'
12
+ type ButtonSize = 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg'
13
+
14
+ const variants: ButtonVariant[] = [
15
+ 'default',
16
+ 'destructive',
17
+ 'outline',
18
+ 'secondary',
19
+ 'ghost',
20
+ 'link',
21
+ ]
22
+ const sizes: ButtonSize[] = [
23
+ 'sm',
24
+ 'default',
25
+ 'lg',
26
+ 'icon-sm',
27
+ 'icon',
28
+ 'icon-lg',
29
+ ]
30
+
31
+ const meta = {
32
+ title: 'UI/Button',
33
+ component: Button,
34
+ argTypes: {
35
+ variant: { control: 'select', options: variants },
36
+ size: { control: 'select', options: sizes },
37
+ rounded: { control: 'boolean' },
38
+ icon: { control: 'text' },
39
+ iconPosition: { control: 'select', options: [ 'start', 'end' ]},
40
+ loading: { control: 'boolean' },
41
+ disabled: { control: 'boolean' },
42
+ },
43
+ args: {
44
+ variant: 'default',
45
+ size: 'default',
46
+ rounded: false,
47
+ icon: '',
48
+ iconPosition: 'start',
49
+ loading: false,
50
+ disabled: false,
51
+ },
52
+ } satisfies Meta<typeof Button>
53
+
54
+ export default meta
55
+ type Story = StoryObj<typeof meta>
56
+
57
+ export const Default: Story = {
58
+ args: {
59
+ loading: false,
60
+ },
61
+
62
+ render: args => ({
63
+ components: { Button, Icon },
64
+ setup: () => ({ args, variants, sizes }),
65
+ template: `
66
+ <div class="space-y-10">
67
+ <!-- Controlled -->
68
+ <section>
69
+ <h3 class="mb-4 text-lg font-medium">Controlled</h3>
70
+ <Button v-bind="args">Button</Button>
71
+ </section>
72
+
73
+ <!-- Variants -->
74
+ <section>
75
+ <h3 class="mb-4 text-lg font-medium">Variants</h3>
76
+ <div class="flex flex-wrap items-center gap-3">
77
+ <Button v-for="v in variants" :key="v" :variant="v">{{ v }}</Button>
78
+ </div>
79
+ </section>
80
+
81
+ <!-- Sizes -->
82
+ <section>
83
+ <h3 class="mb-4 text-lg font-medium">Sizes</h3>
84
+ <div class="flex flex-wrap items-center gap-3">
85
+ <Button v-for="s in sizes" :key="s" :size="s">
86
+ <Icon v-if="s.startsWith('icon')" name="plus" />
87
+ <template v-else>{{ s }}</template>
88
+ </Button>
89
+ </div>
90
+ </section>
91
+
92
+ <!-- With Icons -->
93
+ <section>
94
+ <h3 class="mb-4 text-lg font-medium">With Icons</h3>
95
+ <div class="flex flex-wrap items-center gap-3">
96
+ <Button icon="mail">Login with Email</Button>
97
+ <Button icon="chevron-right" iconPosition="end" variant="secondary">Next</Button>
98
+ <Button icon="trash-2" variant="destructive">Delete</Button>
99
+ <Button icon="plus" size="icon" variant="outline" />
100
+ </div>
101
+ </section>
102
+
103
+ <!-- Loading -->
104
+ <section>
105
+ <h3 class="mb-4 text-lg font-medium">Loading</h3>
106
+ <div class="flex flex-wrap items-center gap-3">
107
+ <Button loading icon="mail">Login with Email</Button>
108
+ <Button loading icon="chevron-right" iconPosition="end" variant="secondary">Next</Button>
109
+ <Button loading icon="trash-2" variant="destructive">Delete</Button>
110
+ <Button loading icon="plus" size="icon" variant="outline" />
111
+ </div>
112
+ </section>
113
+
114
+ <!-- Disabled -->
115
+ <section>
116
+ <h3 class="mb-4 text-lg font-medium">Disabled</h3>
117
+ <div class="flex flex-wrap items-center gap-3">
118
+ <Button v-for="v in variants" :key="v" :variant="v" disabled>{{ v }}</Button>
119
+ </div>
120
+ </section>
121
+
122
+ <!-- Rounded -->
123
+ <section>
124
+ <h3 class="mb-4 text-lg font-medium">Rounded</h3>
125
+ <div class="flex flex-wrap items-center gap-3">
126
+ <Button rounded>Rounded</Button>
127
+ <Button rounded variant="outline">Outline</Button>
128
+ <Button rounded variant="secondary">Secondary</Button>
129
+ <Button rounded size="icon" variant="outline" icon="plus" />
130
+ <Button rounded size="icon" variant="secondary" icon="sun" />
131
+ </div>
132
+ </section>
133
+
134
+ <!-- Link Buttons -->
135
+ <section>
136
+ <h3 class="mb-4 text-lg font-medium">Link Buttons</h3>
137
+ <div class="flex flex-wrap items-center gap-3">
138
+ <Button href="/dialog" variant="outline">Internal Link</Button>
139
+ <Button href="https://example.com" icon="chevron-right" iconPosition="end">External Link</Button>
140
+ </div>
141
+ </section>
142
+ </div>
143
+ `,
144
+ }),
145
+ }
@@ -0,0 +1,63 @@
1
+ <script setup lang="ts">
2
+ import { Button as ShadcnButton } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/button'
3
+ import WebLink from '@polymarbot/nuxt-layer-shadcn-ui/app/components/ui/WebLink/index.vue'
4
+ import type { ButtonProps } from './types'
5
+
6
+ const props = defineProps<ButtonProps>()
7
+ const mergedClass = computed(() => cn('cursor-pointer', props.rounded && `
8
+ rounded-full
9
+ `, props.class))
10
+
11
+ const isLink = computed(() => !!props.href || !!props.to)
12
+ const hasIcon = computed(() => !!$slots.icon || !!props.icon)
13
+ const isIconEnd = computed(() => props.iconPosition === 'end')
14
+ const $slots = defineSlots<{
15
+ default?: () => any
16
+ icon?: () => any
17
+ }>()
18
+ </script>
19
+
20
+ <template>
21
+ <ShadcnButton
22
+ :class="mergedClass"
23
+ :asChild="isLink"
24
+ :type="isLink ? undefined : 'button'"
25
+ :disabled="loading || disabled"
26
+ >
27
+ <component
28
+ :is="isLink ? WebLink : 'span'"
29
+ :class="isLink ? undefined : 'contents'"
30
+ v-bind="isLink ? { unstyled: true, href, to, target } : {}"
31
+ >
32
+ <!-- Start: icon or loading -->
33
+ <template v-if="!isIconEnd">
34
+ <Icon
35
+ v-if="loading"
36
+ name="loader-circle"
37
+ class="animate-spin"
38
+ />
39
+ <slot
40
+ v-else-if="hasIcon"
41
+ name="icon"
42
+ >
43
+ <Icon :name="icon!" />
44
+ </slot>
45
+ </template>
46
+ <slot />
47
+ <!-- End: icon or loading -->
48
+ <template v-if="isIconEnd">
49
+ <Icon
50
+ v-if="loading"
51
+ name="loader-circle"
52
+ class="animate-spin"
53
+ />
54
+ <slot
55
+ v-else-if="hasIcon"
56
+ name="icon"
57
+ >
58
+ <Icon :name="icon!" />
59
+ </slot>
60
+ </template>
61
+ </component>
62
+ </ShadcnButton>
63
+ </template>
@@ -0,0 +1,14 @@
1
+ import type { ButtonVariants } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/button'
2
+ import type { RouteLocationRaw } from 'vue-router'
3
+
4
+ export interface ButtonProps extends /* @vue-ignore */ ButtonVariants {
5
+ loading?: boolean
6
+ disabled?: boolean
7
+ rounded?: boolean
8
+ icon?: string
9
+ iconPosition?: 'start' | 'end'
10
+ href?: string
11
+ to?: RouteLocationRaw
12
+ target?: string
13
+ class?: ClassValue
14
+ }
@@ -0,0 +1,75 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import Icon from '../Icon/index.vue'
3
+ import Button from '../Button/index.vue'
4
+ import Input from '../Input/index.vue'
5
+ import ButtonGroup from './index.vue'
6
+
7
+ const meta = {
8
+ title: 'UI/ButtonGroup',
9
+ component: ButtonGroup,
10
+ } satisfies Meta<typeof ButtonGroup>
11
+
12
+ export default meta
13
+ type Story = StoryObj<typeof meta>
14
+
15
+ export const Default: Story = {
16
+ render: () => ({
17
+ components: { ButtonGroup, Button, Input, Icon },
18
+ setup () {
19
+ const search = ref('')
20
+ return { search }
21
+ },
22
+ template: `
23
+ <div class="space-y-10">
24
+ <!-- Button Group -->
25
+ <section>
26
+ <h3 class="mb-4 text-lg font-medium">Buttons</h3>
27
+ <ButtonGroup>
28
+ <Button variant="outline">Left</Button>
29
+ <Button variant="outline">Center</Button>
30
+ <Button variant="outline">Right</Button>
31
+ </ButtonGroup>
32
+ </section>
33
+
34
+ <!-- With Icons -->
35
+ <section>
36
+ <h3 class="mb-4 text-lg font-medium">With Icons</h3>
37
+ <ButtonGroup>
38
+ <Button variant="outline" size="icon"><Icon name="bold" /></Button>
39
+ <Button variant="outline" size="icon"><Icon name="italic" /></Button>
40
+ <Button variant="outline" size="icon"><Icon name="underline" /></Button>
41
+ <Button variant="outline" size="icon"><Icon name="strikethrough" /></Button>
42
+ </ButtonGroup>
43
+ </section>
44
+
45
+ <!-- Input + Button -->
46
+ <section>
47
+ <h3 class="mb-4 text-lg font-medium">Input + Button</h3>
48
+ <ButtonGroup>
49
+ <Input v-model="search" placeholder="Search..." />
50
+ <Button variant="outline"><Icon name="search" /></Button>
51
+ </ButtonGroup>
52
+ </section>
53
+
54
+ <!-- Button + Input + Button -->
55
+ <section>
56
+ <h3 class="mb-4 text-lg font-medium">Button + Input + Button</h3>
57
+ <ButtonGroup>
58
+ <Button variant="outline" size="icon"><Icon name="minus" /></Button>
59
+ <Input class="w-20 text-center" model-value="5" />
60
+ <Button variant="outline" size="icon"><Icon name="plus" /></Button>
61
+ </ButtonGroup>
62
+ </section>
63
+
64
+ <!-- Mixed Variants -->
65
+ <section>
66
+ <h3 class="mb-4 text-lg font-medium">Mixed Variants</h3>
67
+ <ButtonGroup>
68
+ <Button variant="outline">Save</Button>
69
+ <Button>Submit</Button>
70
+ </ButtonGroup>
71
+ </section>
72
+ </div>
73
+ `,
74
+ }),
75
+ }
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ import type { ButtonGroupProps } from './types'
3
+
4
+ const props = defineProps<ButtonGroupProps>()
5
+
6
+ const mergedClass = computed(() => cn(`
7
+ inline-flex items-center
8
+ *:rounded-none *:border-r-0
9
+ [&>*:first-child]:rounded-l-md
10
+ [&>*:focus-visible]:relative [&>*:focus-visible]:z-10
11
+ [&>*:last-child]:rounded-r-md [&>*:last-child]:border-r
12
+ `, props.class))
13
+ </script>
14
+
15
+ <template>
16
+ <div
17
+ role="group"
18
+ :class="mergedClass"
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -0,0 +1,3 @@
1
+ export interface ButtonGroupProps {
2
+ class?: ClassValue
3
+ }
@@ -0,0 +1,65 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import Button from '../Button/index.vue'
3
+ import Card from './index.vue'
4
+
5
+ const meta = {
6
+ title: 'UI/Card',
7
+ component: Card,
8
+ } satisfies Meta<typeof Card>
9
+
10
+ export default meta
11
+ type Story = StoryObj<typeof meta>
12
+
13
+ export const Default: Story = {
14
+ render: args => ({
15
+ components: { Card, Button },
16
+ setup: () => ({ args }),
17
+ template: `
18
+ <div class="space-y-10 max-w-md">
19
+ <!-- Basic Card -->
20
+ <section>
21
+ <h3 class="mb-4 text-lg font-medium">Basic Card</h3>
22
+ <Card>
23
+ <p>This is a basic card with default content only.</p>
24
+ </Card>
25
+ </section>
26
+
27
+ <!-- Card with Title -->
28
+ <section>
29
+ <h3 class="mb-4 text-lg font-medium">Card with Title</h3>
30
+ <Card title="Card Title">
31
+ <p>This card has a title prop set.</p>
32
+ </Card>
33
+ </section>
34
+
35
+ <!-- Card with Custom Header -->
36
+ <section>
37
+ <h3 class="mb-4 text-lg font-medium">Card with Custom Header</h3>
38
+ <Card>
39
+ <template #header>
40
+ <div class="flex items-center justify-between">
41
+ <span class="text-lg font-semibold">Custom Header</span>
42
+ <Button variant="ghost" size="sm">Action</Button>
43
+ </div>
44
+ </template>
45
+ <p>This card uses the header slot for a custom layout.</p>
46
+ </Card>
47
+ </section>
48
+
49
+ <!-- Card with Footer -->
50
+ <section>
51
+ <h3 class="mb-4 text-lg font-medium">Card with Footer</h3>
52
+ <Card title="Settings">
53
+ <p>Update your account settings here.</p>
54
+ <template #footer>
55
+ <div class="w-full flex justify-end gap-2">
56
+ <Button variant="outline">Cancel</Button>
57
+ <Button>Save</Button>
58
+ </div>
59
+ </template>
60
+ </Card>
61
+ </section>
62
+ </div>
63
+ `,
64
+ }),
65
+ }
@@ -0,0 +1,28 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ Card as ShadcnCard,
4
+ CardContent as ShadcnCardContent,
5
+ CardFooter as ShadcnCardFooter,
6
+ CardHeader as ShadcnCardHeader,
7
+ CardTitle as ShadcnCardTitle,
8
+ } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/card'
9
+ import type { CardProps } from './types'
10
+
11
+ defineProps<CardProps>()
12
+ </script>
13
+
14
+ <template>
15
+ <ShadcnCard>
16
+ <ShadcnCardHeader v-if="title || $slots.header">
17
+ <slot name="header">
18
+ <ShadcnCardTitle>{{ title }}</ShadcnCardTitle>
19
+ </slot>
20
+ </ShadcnCardHeader>
21
+ <ShadcnCardContent>
22
+ <slot />
23
+ </ShadcnCardContent>
24
+ <ShadcnCardFooter v-if="$slots.footer">
25
+ <slot name="footer" />
26
+ </ShadcnCardFooter>
27
+ </ShadcnCard>
28
+ </template>
@@ -0,0 +1,3 @@
1
+ export interface CardProps {
2
+ title?: string
3
+ }
@@ -0,0 +1,68 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import Checkbox from './index.vue'
3
+
4
+ const meta = {
5
+ title: 'UI/Checkbox',
6
+ component: Checkbox,
7
+ } satisfies Meta<typeof Checkbox>
8
+
9
+ export default meta
10
+ type Story = StoryObj<typeof meta>
11
+
12
+ export const Default: Story = {
13
+ render: () => ({
14
+ components: { Checkbox },
15
+ setup () {
16
+ const checked = ref(false)
17
+ const checkedOn = ref(true)
18
+ return { checked, checkedOn }
19
+ },
20
+ template: `
21
+ <div class="space-y-10">
22
+ <section>
23
+ <h3 class="mb-4 text-lg font-medium">Basic</h3>
24
+ <label class="flex items-center gap-2 cursor-pointer">
25
+ <Checkbox v-model="checked" />
26
+ <span class="text-sm">Accept terms and conditions</span>
27
+ </label>
28
+ <div class="mt-2 text-sm text-muted-foreground">Value: {{ checked }}</div>
29
+ </section>
30
+
31
+ <section>
32
+ <h3 class="mb-4 text-lg font-medium">Checked</h3>
33
+ <label class="flex items-center gap-2 cursor-pointer">
34
+ <Checkbox v-model="checkedOn" />
35
+ <span class="text-sm">Enable notifications</span>
36
+ </label>
37
+ <div class="mt-2 text-sm text-muted-foreground">Value: {{ checkedOn }}</div>
38
+ </section>
39
+
40
+ <section>
41
+ <h3 class="mb-4 text-lg font-medium">Indeterminate</h3>
42
+ <label class="flex items-center gap-2 cursor-pointer">
43
+ <Checkbox model-value="indeterminate" />
44
+ <span class="text-sm">Select all items</span>
45
+ </label>
46
+ </section>
47
+
48
+ <section>
49
+ <h3 class="mb-4 text-lg font-medium">Disabled</h3>
50
+ <div class="flex flex-col gap-3">
51
+ <label class="flex items-center gap-2 cursor-not-allowed opacity-50">
52
+ <Checkbox :model-value="false" disabled />
53
+ <span class="text-sm">Unchecked disabled</span>
54
+ </label>
55
+ <label class="flex items-center gap-2 cursor-not-allowed opacity-50">
56
+ <Checkbox :model-value="true" disabled />
57
+ <span class="text-sm">Checked disabled</span>
58
+ </label>
59
+ <label class="flex items-center gap-2 cursor-not-allowed opacity-50">
60
+ <Checkbox model-value="indeterminate" disabled />
61
+ <span class="text-sm">Indeterminate disabled</span>
62
+ </label>
63
+ </div>
64
+ </section>
65
+ </div>
66
+ `,
67
+ }),
68
+ }
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import { Checkbox as ShadcnCheckbox } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/checkbox'
3
+ import type { CheckboxProps } from './types'
4
+
5
+ defineProps<CheckboxProps>()
6
+ </script>
7
+
8
+ <template>
9
+ <ShadcnCheckbox
10
+ v-slot="{ state }"
11
+ class="
12
+ data-[state=indeterminate]:border-primary
13
+ data-[state=indeterminate]:bg-primary
14
+ data-[state=indeterminate]:text-primary-foreground
15
+ "
16
+ >
17
+ <Icon
18
+ v-if="state === 'indeterminate'"
19
+ name="minus"
20
+ class="size-3.5"
21
+ />
22
+ </ShadcnCheckbox>
23
+ </template>
@@ -0,0 +1,3 @@
1
+ import type { CheckboxRootProps } from 'reka-ui'
2
+
3
+ export interface CheckboxProps extends /* @vue-ignore */ CheckboxRootProps {}
@@ -0,0 +1,4 @@
1
+ {
2
+ "copied": "Copied",
3
+ "copyToClipboard": "Copy"
4
+ }
@@ -0,0 +1,55 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import CopyButton from './index.vue'
3
+
4
+ const meta = {
5
+ title: 'UI/CopyButton',
6
+ component: CopyButton,
7
+ argTypes: {
8
+ copy: { control: 'text' },
9
+ variant: { control: 'select', options: [ 'default', 'destructive', 'outline', 'secondary', 'ghost' ]},
10
+ size: { control: 'select', options: [ 'default', 'sm', 'lg', 'icon' ]},
11
+ },
12
+ args: {
13
+ copy: 'Hello, World!',
14
+ variant: 'outline',
15
+ },
16
+ } satisfies Meta<typeof CopyButton>
17
+
18
+ export default meta
19
+ type Story = StoryObj<typeof meta>
20
+
21
+ export const Default: Story = {
22
+ render: args => ({
23
+ components: { CopyButton },
24
+ setup: () => ({ args }),
25
+ template: `
26
+ <div class="space-y-10">
27
+ <section>
28
+ <h3 class="mb-4 text-lg font-medium">Icon Only (default)</h3>
29
+ <div class="flex items-center gap-4">
30
+ <CopyButton v-bind="args" />
31
+ <CopyButton v-bind="args" variant="ghost" />
32
+ <CopyButton v-bind="args" variant="secondary" />
33
+ </div>
34
+ </section>
35
+
36
+ <section>
37
+ <h3 class="mb-4 text-lg font-medium">With Label</h3>
38
+ <div class="flex items-center gap-4">
39
+ <CopyButton v-bind="args">Copy Text</CopyButton>
40
+ <CopyButton v-bind="args" variant="secondary">Copy Address</CopyButton>
41
+ </div>
42
+ </section>
43
+
44
+ <section>
45
+ <h3 class="mb-4 text-lg font-medium">Sizes</h3>
46
+ <div class="flex items-center gap-4">
47
+ <CopyButton v-bind="args" size="sm">Small</CopyButton>
48
+ <CopyButton v-bind="args" size="default">Default</CopyButton>
49
+ <CopyButton v-bind="args" size="lg">Large</CopyButton>
50
+ </div>
51
+ </section>
52
+ </div>
53
+ `,
54
+ }),
55
+ }