@vestow/vue 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 (491) hide show
  1. package/README.md +233 -0
  2. package/index.ts +8 -0
  3. package/package.json +68 -0
  4. package/src/components/accordion/Accordion.vue +45 -0
  5. package/src/components/accordion/AccordionContent.vue +31 -0
  6. package/src/components/accordion/AccordionItem.vue +26 -0
  7. package/src/components/accordion/AccordionTrigger.vue +39 -0
  8. package/src/components/accordion/index.ts +18 -0
  9. package/src/components/alert/Alert.vue +17 -0
  10. package/src/components/alert/AlertDescription.vue +12 -0
  11. package/src/components/alert/AlertTitle.vue +12 -0
  12. package/src/components/alert/index.ts +5 -0
  13. package/src/components/avatar/Avatar.vue +32 -0
  14. package/src/components/avatar/AvatarFallback.vue +23 -0
  15. package/src/components/avatar/AvatarImage.vue +18 -0
  16. package/src/components/avatar/index.ts +3 -0
  17. package/src/components/badge/Badge.vue +25 -0
  18. package/src/components/badge/index.ts +3 -0
  19. package/src/components/breadcrumb/Breadcrumb.vue +14 -0
  20. package/src/components/breadcrumb/BreadcrumbItem.vue +12 -0
  21. package/src/components/breadcrumb/BreadcrumbLink.vue +19 -0
  22. package/src/components/breadcrumb/BreadcrumbPage.vue +12 -0
  23. package/src/components/breadcrumb/BreadcrumbSeparator.vue +15 -0
  24. package/src/components/breadcrumb/index.ts +5 -0
  25. package/src/components/button/Button.vue +55 -0
  26. package/src/components/button/index.ts +3 -0
  27. package/src/components/button-group/ButtonGroup.vue +29 -0
  28. package/src/components/button-group/ButtonGroupSeparator.vue +30 -0
  29. package/src/components/button-group/ButtonGroupText.vue +29 -0
  30. package/src/components/button-group/SplitButton.vue +103 -0
  31. package/src/components/button-group/SplitButtonItems.vue +50 -0
  32. package/src/components/button-group/index.ts +34 -0
  33. package/src/components/calendar/Calendar.vue +120 -0
  34. package/src/components/calendar/RangeCalendar.vue +127 -0
  35. package/src/components/calendar/index.ts +2 -0
  36. package/src/components/card/Card.vue +12 -0
  37. package/src/components/card/CardAction.vue +12 -0
  38. package/src/components/card/CardContent.vue +12 -0
  39. package/src/components/card/CardDescription.vue +12 -0
  40. package/src/components/card/CardFooter.vue +12 -0
  41. package/src/components/card/CardHeader.vue +15 -0
  42. package/src/components/card/CardTitle.vue +12 -0
  43. package/src/components/card/index.ts +7 -0
  44. package/src/components/carousel/Carousel.vue +164 -0
  45. package/src/components/carousel/CarouselContent.vue +43 -0
  46. package/src/components/carousel/CarouselDots.vue +42 -0
  47. package/src/components/carousel/CarouselItem.vue +58 -0
  48. package/src/components/carousel/CarouselNext.vue +45 -0
  49. package/src/components/carousel/CarouselPrevious.vue +45 -0
  50. package/src/components/carousel/index.ts +44 -0
  51. package/src/components/cascade-select/CascadeSelect.vue +314 -0
  52. package/src/components/cascade-select/index.ts +11 -0
  53. package/src/components/chart/AreaChart.vue +201 -0
  54. package/src/components/chart/BarChart.vue +389 -0
  55. package/src/components/chart/ChartContainer.vue +127 -0
  56. package/src/components/chart/ChartCrosshair.vue +92 -0
  57. package/src/components/chart/ChartLegend.vue +63 -0
  58. package/src/components/chart/ChartTooltipCard.vue +49 -0
  59. package/src/components/chart/LineChart.vue +214 -0
  60. package/src/components/chart/PieChart.vue +280 -0
  61. package/src/components/chart/RadarChart.vue +291 -0
  62. package/src/components/chart/RadialChart.vue +354 -0
  63. package/src/components/chart/index.ts +30 -0
  64. package/src/components/chart/polar.ts +5 -0
  65. package/src/components/chart/tooltip.ts +5 -0
  66. package/src/components/chart/types.ts +52 -0
  67. package/src/components/chart/useChartSeries.ts +138 -0
  68. package/src/components/chart/xy-label.ts +5 -0
  69. package/src/components/checkbox/Checkbox.vue +81 -0
  70. package/src/components/checkbox/CheckboxField.vue +129 -0
  71. package/src/components/checkbox/CheckboxGroup.vue +62 -0
  72. package/src/components/checkbox/index.ts +21 -0
  73. package/src/components/chip/Chip.vue +73 -0
  74. package/src/components/chip/index.ts +3 -0
  75. package/src/components/code-block/CodeBlock.vue +100 -0
  76. package/src/components/code-block/index.ts +4 -0
  77. package/src/components/collapsible/Collapsible.vue +15 -0
  78. package/src/components/collapsible/CollapsibleContent.vue +26 -0
  79. package/src/components/collapsible/CollapsibleTrigger.vue +12 -0
  80. package/src/components/collapsible/index.ts +3 -0
  81. package/src/components/combobox/Combobox.vue +23 -0
  82. package/src/components/combobox/ComboboxAnchor.vue +20 -0
  83. package/src/components/combobox/ComboboxEmpty.vue +21 -0
  84. package/src/components/combobox/ComboboxGroup.vue +23 -0
  85. package/src/components/combobox/ComboboxInput.vue +32 -0
  86. package/src/components/combobox/ComboboxItem.vue +38 -0
  87. package/src/components/combobox/ComboboxList.vue +43 -0
  88. package/src/components/combobox/ComboboxSeparator.vue +18 -0
  89. package/src/components/combobox/ComboboxTrigger.vue +12 -0
  90. package/src/components/combobox/index.ts +9 -0
  91. package/src/components/command/Command.vue +54 -0
  92. package/src/components/command/CommandDialog.vue +41 -0
  93. package/src/components/command/CommandEmpty.vue +19 -0
  94. package/src/components/command/CommandGroup.vue +28 -0
  95. package/src/components/command/CommandInput.vue +25 -0
  96. package/src/components/command/CommandItem.vue +40 -0
  97. package/src/components/command/CommandList.vue +13 -0
  98. package/src/components/command/CommandSeparator.vue +11 -0
  99. package/src/components/command/CommandShortcut.vue +13 -0
  100. package/src/components/command/index.ts +34 -0
  101. package/src/components/command-block/CommandBlock.vue +90 -0
  102. package/src/components/command-block/index.ts +2 -0
  103. package/src/components/confirm-dialog/ConfirmDialog.vue +37 -0
  104. package/src/components/confirm-dialog/index.ts +1 -0
  105. package/src/components/confirm-popup/ConfirmPopup.vue +123 -0
  106. package/src/components/confirm-popup/index.ts +1 -0
  107. package/src/components/context-menu/ContextMenu.vue +15 -0
  108. package/src/components/context-menu/ContextMenuCheckboxItem.vue +30 -0
  109. package/src/components/context-menu/ContextMenuContent.vue +36 -0
  110. package/src/components/context-menu/ContextMenuGroup.vue +12 -0
  111. package/src/components/context-menu/ContextMenuItem.vue +32 -0
  112. package/src/components/context-menu/ContextMenuLabel.vue +21 -0
  113. package/src/components/context-menu/ContextMenuRadioGroup.vue +15 -0
  114. package/src/components/context-menu/ContextMenuRadioItem.vue +30 -0
  115. package/src/components/context-menu/ContextMenuSeparator.vue +19 -0
  116. package/src/components/context-menu/ContextMenuShortcut.vue +13 -0
  117. package/src/components/context-menu/ContextMenuSub.vue +15 -0
  118. package/src/components/context-menu/ContextMenuSubContent.vue +26 -0
  119. package/src/components/context-menu/ContextMenuSubTrigger.vue +26 -0
  120. package/src/components/context-menu/ContextMenuTrigger.vue +12 -0
  121. package/src/components/context-menu/index.ts +14 -0
  122. package/src/components/data-table/DataTable.vue +458 -0
  123. package/src/components/data-table/DataTableFacetedFilter.vue +97 -0
  124. package/src/components/data-table/DataTablePagination.vue +103 -0
  125. package/src/components/data-table/DataTableViewOptions.vue +69 -0
  126. package/src/components/data-table/features.ts +87 -0
  127. package/src/components/data-table/index.ts +27 -0
  128. package/src/components/data-table/pagination-adapter.ts +67 -0
  129. package/src/components/data-table/selection-column.ts +48 -0
  130. package/src/components/data-table/types.ts +36 -0
  131. package/src/components/data-view/DataView.vue +136 -0
  132. package/src/components/data-view/index.ts +1 -0
  133. package/src/components/date-picker/DatePicker.vue +117 -0
  134. package/src/components/date-picker/DateRangePicker.vue +122 -0
  135. package/src/components/date-picker/index.ts +2 -0
  136. package/src/components/deferred/Deferred.vue +80 -0
  137. package/src/components/deferred/index.ts +1 -0
  138. package/src/components/dialog/Dialog.vue +15 -0
  139. package/src/components/dialog/DialogClose.vue +12 -0
  140. package/src/components/dialog/DialogContent.vue +46 -0
  141. package/src/components/dialog/DialogDescription.vue +19 -0
  142. package/src/components/dialog/DialogFooter.vue +12 -0
  143. package/src/components/dialog/DialogHeader.vue +12 -0
  144. package/src/components/dialog/DialogTitle.vue +19 -0
  145. package/src/components/dialog/DialogTrigger.vue +12 -0
  146. package/src/components/dialog/index.ts +10 -0
  147. package/src/components/doc-example/DocExample.vue +41 -0
  148. package/src/components/doc-example/index.ts +1 -0
  149. package/src/components/doc-text/DocText.vue +64 -0
  150. package/src/components/doc-text/index.ts +1 -0
  151. package/src/components/dropdown-menu/DropdownMenu.vue +15 -0
  152. package/src/components/dropdown-menu/DropdownMenuCheckboxItem.vue +33 -0
  153. package/src/components/dropdown-menu/DropdownMenuContent.vue +36 -0
  154. package/src/components/dropdown-menu/DropdownMenuGroup.vue +12 -0
  155. package/src/components/dropdown-menu/DropdownMenuItem.vue +32 -0
  156. package/src/components/dropdown-menu/DropdownMenuLabel.vue +24 -0
  157. package/src/components/dropdown-menu/DropdownMenuRadioGroup.vue +15 -0
  158. package/src/components/dropdown-menu/DropdownMenuRadioItem.vue +33 -0
  159. package/src/components/dropdown-menu/DropdownMenuSeparator.vue +19 -0
  160. package/src/components/dropdown-menu/DropdownMenuShortcut.vue +13 -0
  161. package/src/components/dropdown-menu/DropdownMenuSub.vue +15 -0
  162. package/src/components/dropdown-menu/DropdownMenuSubContent.vue +29 -0
  163. package/src/components/dropdown-menu/DropdownMenuSubTrigger.vue +26 -0
  164. package/src/components/dropdown-menu/DropdownMenuTrigger.vue +12 -0
  165. package/src/components/dropdown-menu/index.ts +14 -0
  166. package/src/components/editable/Editable.vue +41 -0
  167. package/src/components/editable/EditableArea.vue +22 -0
  168. package/src/components/editable/EditableCancelTrigger.vue +40 -0
  169. package/src/components/editable/EditableEditTrigger.vue +40 -0
  170. package/src/components/editable/EditableInput.vue +28 -0
  171. package/src/components/editable/EditablePreview.vue +34 -0
  172. package/src/components/editable/EditableSubmitTrigger.vue +40 -0
  173. package/src/components/editable/index.ts +17 -0
  174. package/src/components/empty/Empty.vue +17 -0
  175. package/src/components/empty/EmptyActions.vue +14 -0
  176. package/src/components/empty/EmptyDescription.vue +12 -0
  177. package/src/components/empty/EmptyMedia.vue +16 -0
  178. package/src/components/empty/EmptyTitle.vue +17 -0
  179. package/src/components/empty/index.ts +7 -0
  180. package/src/components/field/Field.vue +22 -0
  181. package/src/components/field/FieldDescription.vue +20 -0
  182. package/src/components/field/FieldGroup.vue +22 -0
  183. package/src/components/field/FieldLabel.vue +27 -0
  184. package/src/components/field/FieldSeparator.vue +28 -0
  185. package/src/components/field/index.ts +7 -0
  186. package/src/components/fieldset/Fieldset.vue +126 -0
  187. package/src/components/fieldset/index.ts +1 -0
  188. package/src/components/file-upload/FileUpload.vue +149 -0
  189. package/src/components/file-upload/index.ts +8 -0
  190. package/src/components/float-label/FloatLabel.vue +26 -0
  191. package/src/components/float-label/index.ts +3 -0
  192. package/src/components/form/Form.vue +126 -0
  193. package/src/components/form/FormDescription.vue +12 -0
  194. package/src/components/form/FormField.vue +127 -0
  195. package/src/components/form/FormItem.vue +12 -0
  196. package/src/components/form/FormLabel.vue +14 -0
  197. package/src/components/form/FormMessage.vue +31 -0
  198. package/src/components/form/context.ts +54 -0
  199. package/src/components/form/errors.ts +6 -0
  200. package/src/components/form/index.ts +7 -0
  201. package/src/components/form/types.ts +55 -0
  202. package/src/components/hover-card/HoverCard.vue +27 -0
  203. package/src/components/hover-card/HoverCardContent.vue +36 -0
  204. package/src/components/hover-card/HoverCardTrigger.vue +12 -0
  205. package/src/components/hover-card/index.ts +3 -0
  206. package/src/components/ifta-label/IftaLabel.vue +26 -0
  207. package/src/components/ifta-label/index.ts +1 -0
  208. package/src/components/index.ts +89 -0
  209. package/src/components/input/Input.vue +87 -0
  210. package/src/components/input/index.ts +1 -0
  211. package/src/components/input-color/ColorArea.vue +36 -0
  212. package/src/components/input-color/ColorField.vue +32 -0
  213. package/src/components/input-color/ColorSlider.vue +31 -0
  214. package/src/components/input-color/InputColor.vue +65 -0
  215. package/src/components/input-color/index.ts +16 -0
  216. package/src/components/input-group/InputGroup.vue +26 -0
  217. package/src/components/input-group/InputGroupAddon.vue +32 -0
  218. package/src/components/input-group/InputGroupInput.vue +33 -0
  219. package/src/components/input-group/index.ts +17 -0
  220. package/src/components/input-number/InputNumber.vue +82 -0
  221. package/src/components/input-number/index.ts +1 -0
  222. package/src/components/input-otp/InputOtp.vue +186 -0
  223. package/src/components/input-otp/index.ts +1 -0
  224. package/src/components/input-password/InputPassword.vue +116 -0
  225. package/src/components/input-password/index.ts +5 -0
  226. package/src/components/input-tags/InputTags.vue +38 -0
  227. package/src/components/input-tags/InputTagsClear.vue +39 -0
  228. package/src/components/input-tags/InputTagsInput.vue +27 -0
  229. package/src/components/input-tags/InputTagsItem.vue +40 -0
  230. package/src/components/input-tags/InputTagsItemDelete.vue +32 -0
  231. package/src/components/input-tags/InputTagsItemText.vue +18 -0
  232. package/src/components/input-tags/index.ts +16 -0
  233. package/src/components/kbd/Kbd.vue +17 -0
  234. package/src/components/kbd/KbdGroup.vue +15 -0
  235. package/src/components/kbd/index.ts +4 -0
  236. package/src/components/label/Label.vue +23 -0
  237. package/src/components/label/index.ts +1 -0
  238. package/src/components/listbox/Listbox.vue +42 -0
  239. package/src/components/listbox/ListboxContent.vue +22 -0
  240. package/src/components/listbox/ListboxFilter.vue +34 -0
  241. package/src/components/listbox/ListboxGroup.vue +31 -0
  242. package/src/components/listbox/ListboxItem.vue +46 -0
  243. package/src/components/listbox/index.ts +19 -0
  244. package/src/components/mask/Mask.vue +205 -0
  245. package/src/components/mask/index.ts +15 -0
  246. package/src/components/menubar/Menubar.vue +26 -0
  247. package/src/components/menubar/MenubarCheckboxItem.vue +30 -0
  248. package/src/components/menubar/MenubarContent.vue +52 -0
  249. package/src/components/menubar/MenubarGroup.vue +12 -0
  250. package/src/components/menubar/MenubarItem.vue +32 -0
  251. package/src/components/menubar/MenubarLabel.vue +21 -0
  252. package/src/components/menubar/MenubarMenu.vue +12 -0
  253. package/src/components/menubar/MenubarRadioGroup.vue +15 -0
  254. package/src/components/menubar/MenubarRadioItem.vue +30 -0
  255. package/src/components/menubar/MenubarSeparator.vue +12 -0
  256. package/src/components/menubar/MenubarShortcut.vue +13 -0
  257. package/src/components/menubar/MenubarSub.vue +15 -0
  258. package/src/components/menubar/MenubarSubContent.vue +26 -0
  259. package/src/components/menubar/MenubarSubTrigger.vue +26 -0
  260. package/src/components/menubar/MenubarTrigger.vue +30 -0
  261. package/src/components/menubar/index.ts +29 -0
  262. package/src/components/navigation-menu/NavigationMenu.vue +43 -0
  263. package/src/components/navigation-menu/NavigationMenuContent.vue +63 -0
  264. package/src/components/navigation-menu/NavigationMenuIndicator.vue +31 -0
  265. package/src/components/navigation-menu/NavigationMenuItem.vue +20 -0
  266. package/src/components/navigation-menu/NavigationMenuLink.vue +34 -0
  267. package/src/components/navigation-menu/NavigationMenuList.vue +23 -0
  268. package/src/components/navigation-menu/NavigationMenuTrigger.vue +38 -0
  269. package/src/components/navigation-menu/NavigationMenuViewport.vue +34 -0
  270. package/src/components/navigation-menu/index.ts +18 -0
  271. package/src/components/order-list/OrderList.vue +168 -0
  272. package/src/components/order-list/SelectableList.vue +200 -0
  273. package/src/components/order-list/index.ts +1 -0
  274. package/src/components/pagination/Pagination.vue +133 -0
  275. package/src/components/pagination/index.ts +1 -0
  276. package/src/components/panel/Panel.vue +69 -0
  277. package/src/components/panel/index.ts +1 -0
  278. package/src/components/pick-list/PickList.vue +211 -0
  279. package/src/components/pick-list/index.ts +1 -0
  280. package/src/components/popover/Popover.vue +15 -0
  281. package/src/components/popover/PopoverAnchor.vue +12 -0
  282. package/src/components/popover/PopoverContent.vue +39 -0
  283. package/src/components/popover/PopoverTrigger.vue +12 -0
  284. package/src/components/popover/index.ts +4 -0
  285. package/src/components/progress/Progress.vue +39 -0
  286. package/src/components/progress/index.ts +1 -0
  287. package/src/components/props-table/PropsTable.vue +62 -0
  288. package/src/components/props-table/index.ts +2 -0
  289. package/src/components/radio-group/RadioGroup.vue +52 -0
  290. package/src/components/radio-group/RadioGroupItem.vue +80 -0
  291. package/src/components/radio-group/RadioGroupItemField.vue +128 -0
  292. package/src/components/radio-group/index.ts +21 -0
  293. package/src/components/rating/Rating.vue +70 -0
  294. package/src/components/rating/RatingItem.vue +26 -0
  295. package/src/components/rating/RatingItemIndicator.vue +28 -0
  296. package/src/components/rating/RatingStar.vue +16 -0
  297. package/src/components/rating/index.ts +13 -0
  298. package/src/components/scroll-area/ScrollArea.vue +52 -0
  299. package/src/components/scroll-area/index.ts +1 -0
  300. package/src/components/search-input/SearchInput.vue +46 -0
  301. package/src/components/search-input/index.ts +1 -0
  302. package/src/components/select/Select.vue +15 -0
  303. package/src/components/select/SelectContent.vue +67 -0
  304. package/src/components/select/SelectGroup.vue +20 -0
  305. package/src/components/select/SelectItem.vue +59 -0
  306. package/src/components/select/SelectLabel.vue +20 -0
  307. package/src/components/select/SelectSeparator.vue +18 -0
  308. package/src/components/select/SelectTrigger.vue +101 -0
  309. package/src/components/select/SelectValue.vue +46 -0
  310. package/src/components/select/index.ts +8 -0
  311. package/src/components/separator/Separator.vue +25 -0
  312. package/src/components/separator/index.ts +1 -0
  313. package/src/components/sheet/Sheet.vue +15 -0
  314. package/src/components/sheet/SheetClose.vue +12 -0
  315. package/src/components/sheet/SheetContent.vue +45 -0
  316. package/src/components/sheet/SheetDescription.vue +19 -0
  317. package/src/components/sheet/SheetFooter.vue +12 -0
  318. package/src/components/sheet/SheetHeader.vue +12 -0
  319. package/src/components/sheet/SheetTitle.vue +19 -0
  320. package/src/components/sheet/SheetTrigger.vue +12 -0
  321. package/src/components/sheet/index.ts +10 -0
  322. package/src/components/sidebar/Sidebar.vue +108 -0
  323. package/src/components/sidebar/SidebarContent.vue +19 -0
  324. package/src/components/sidebar/SidebarFooter.vue +19 -0
  325. package/src/components/sidebar/SidebarGroup.vue +19 -0
  326. package/src/components/sidebar/SidebarGroupAction.vue +28 -0
  327. package/src/components/sidebar/SidebarGroupContent.vue +19 -0
  328. package/src/components/sidebar/SidebarGroupLabel.vue +25 -0
  329. package/src/components/sidebar/SidebarHeader.vue +19 -0
  330. package/src/components/sidebar/SidebarInput.vue +15 -0
  331. package/src/components/sidebar/SidebarInset.vue +22 -0
  332. package/src/components/sidebar/SidebarMenu.vue +19 -0
  333. package/src/components/sidebar/SidebarMenuAction.vue +41 -0
  334. package/src/components/sidebar/SidebarMenuBadge.vue +24 -0
  335. package/src/components/sidebar/SidebarMenuButton.vue +94 -0
  336. package/src/components/sidebar/SidebarMenuItem.vue +19 -0
  337. package/src/components/sidebar/SidebarMenuSkeleton.vue +36 -0
  338. package/src/components/sidebar/SidebarMenuSub.vue +22 -0
  339. package/src/components/sidebar/SidebarMenuSubButton.vue +39 -0
  340. package/src/components/sidebar/SidebarMenuSubItem.vue +19 -0
  341. package/src/components/sidebar/SidebarProvider.vue +114 -0
  342. package/src/components/sidebar/SidebarRail.vue +37 -0
  343. package/src/components/sidebar/SidebarSeparator.vue +15 -0
  344. package/src/components/sidebar/SidebarTrigger.vue +27 -0
  345. package/src/components/sidebar/context.ts +39 -0
  346. package/src/components/sidebar/index.ts +34 -0
  347. package/src/components/skeleton/Skeleton.vue +10 -0
  348. package/src/components/skeleton/index.ts +1 -0
  349. package/src/components/skip-link/SkipLink.vue +45 -0
  350. package/src/components/skip-link/index.ts +1 -0
  351. package/src/components/slider/Slider.vue +57 -0
  352. package/src/components/slider/index.ts +3 -0
  353. package/src/components/speed-dial/SpeedDial.vue +362 -0
  354. package/src/components/speed-dial/index.ts +28 -0
  355. package/src/components/spinner/Spinner.vue +20 -0
  356. package/src/components/spinner/index.ts +1 -0
  357. package/src/components/splitter/Splitter.vue +24 -0
  358. package/src/components/splitter/SplitterHandle.vue +51 -0
  359. package/src/components/splitter/SplitterPanel.vue +30 -0
  360. package/src/components/splitter/index.ts +14 -0
  361. package/src/components/stepper/Stepper.vue +34 -0
  362. package/src/components/stepper/StepperItem.vue +113 -0
  363. package/src/components/stepper/index.ts +2 -0
  364. package/src/components/switch/Switch.vue +35 -0
  365. package/src/components/switch/index.ts +1 -0
  366. package/src/components/table/Table.vue +24 -0
  367. package/src/components/table/TableBody.vue +12 -0
  368. package/src/components/table/TableCell.vue +12 -0
  369. package/src/components/table/TableEmpty.vue +20 -0
  370. package/src/components/table/TableHead.vue +17 -0
  371. package/src/components/table/TableHeader.vue +12 -0
  372. package/src/components/table/TableRow.vue +19 -0
  373. package/src/components/table/index.ts +7 -0
  374. package/src/components/tabs/Tabs.vue +23 -0
  375. package/src/components/tabs/TabsContent.vue +23 -0
  376. package/src/components/tabs/TabsList.vue +26 -0
  377. package/src/components/tabs/TabsTrigger.vue +30 -0
  378. package/src/components/tabs/index.ts +4 -0
  379. package/src/components/textarea/Textarea.vue +25 -0
  380. package/src/components/textarea/index.ts +1 -0
  381. package/src/components/theme-controls/LocaleMenu.vue +95 -0
  382. package/src/components/theme-controls/PaletteMenu.vue +155 -0
  383. package/src/components/theme-controls/ThemeToggle.vue +21 -0
  384. package/src/components/theme-controls/index.ts +15 -0
  385. package/src/components/timeline/Timeline.vue +20 -0
  386. package/src/components/timeline/TimelineItem.vue +68 -0
  387. package/src/components/timeline/index.ts +15 -0
  388. package/src/components/toast/Toaster.vue +62 -0
  389. package/src/components/toast/index.ts +4 -0
  390. package/src/components/toast/toast.ts +57 -0
  391. package/src/components/toggle/Toggle.vue +32 -0
  392. package/src/components/toggle/ToggleGroup.vue +56 -0
  393. package/src/components/toggle/ToggleGroupItem.vue +33 -0
  394. package/src/components/toggle/index.ts +18 -0
  395. package/src/components/token-table/TokenTable.vue +67 -0
  396. package/src/components/token-table/index.ts +2 -0
  397. package/src/components/toolbar/Toolbar.vue +34 -0
  398. package/src/components/toolbar/ToolbarButton.vue +33 -0
  399. package/src/components/toolbar/ToolbarSeparator.vue +21 -0
  400. package/src/components/toolbar/index.ts +3 -0
  401. package/src/components/tooltip/Tooltip.vue +15 -0
  402. package/src/components/tooltip/TooltipContent.vue +38 -0
  403. package/src/components/tooltip/TooltipProvider.vue +16 -0
  404. package/src/components/tooltip/TooltipTrigger.vue +12 -0
  405. package/src/components/tooltip/index.ts +4 -0
  406. package/src/components/tree/Tree.vue +53 -0
  407. package/src/components/tree/TreeItem.vue +59 -0
  408. package/src/components/tree/index.ts +21 -0
  409. package/src/components/tree-select/TreeSelect.vue +141 -0
  410. package/src/components/tree-select/index.ts +1 -0
  411. package/src/components/tree-table/TreeTable.vue +302 -0
  412. package/src/components/tree-table/features.ts +49 -0
  413. package/src/components/tree-table/index.ts +3 -0
  414. package/src/components/video-player/VideoPlayer.vue +472 -0
  415. package/src/components/video-player/index.ts +20 -0
  416. package/src/composables/index.ts +15 -0
  417. package/src/composables/useBase.ts +32 -0
  418. package/src/composables/useChartPalette.ts +33 -0
  419. package/src/composables/useColorMode.ts +29 -0
  420. package/src/composables/useConfirm.ts +81 -0
  421. package/src/composables/useDelayedFlag.ts +62 -0
  422. package/src/composables/useI18n.ts +107 -0
  423. package/src/composables/useIsMobile.ts +34 -0
  424. package/src/composables/useMenuAccent.ts +32 -0
  425. package/src/composables/useMenuAppearance.ts +31 -0
  426. package/src/composables/useMenuColor.ts +31 -0
  427. package/src/composables/usePalette.ts +30 -0
  428. package/src/composables/useStyle.ts +35 -0
  429. package/src/composables/useSurface.ts +30 -0
  430. package/src/composables/useTableQuery.ts +73 -0
  431. package/src/composables/useThemeController.ts +48 -0
  432. package/src/i18n/README.md +68 -0
  433. package/src/i18n/controller.ts +233 -0
  434. package/src/i18n/dictionary.ts +43 -0
  435. package/src/i18n/index.ts +34 -0
  436. package/src/i18n/registry.ts +64 -0
  437. package/src/i18n/ui/en/ui.json +114 -0
  438. package/src/i18n/ui/en/zod.json +16 -0
  439. package/src/i18n/ui/index.ts +48 -0
  440. package/src/i18n/ui/vi/ui.json +114 -0
  441. package/src/i18n/ui/vi/zod.json +16 -0
  442. package/src/lib/date.ts +24 -0
  443. package/src/lib/focus.ts +12 -0
  444. package/src/lib/icons.ts +345 -0
  445. package/src/lib/menu-styles.ts +16 -0
  446. package/src/lib/menu.ts +20 -0
  447. package/src/lib/platform.ts +5 -0
  448. package/src/lib/types.ts +6 -0
  449. package/src/lib/utils.ts +9 -0
  450. package/src/lib/zod-messages.ts +127 -0
  451. package/src/styles/chart.css +30 -0
  452. package/src/styles/index.css +18 -0
  453. package/src/variants/README.md +55 -0
  454. package/src/variants/components/accordion.ts +71 -0
  455. package/src/variants/components/alert.ts +20 -0
  456. package/src/variants/components/badge.ts +76 -0
  457. package/src/variants/components/button-group.ts +136 -0
  458. package/src/variants/components/button.ts +160 -0
  459. package/src/variants/components/checkbox.ts +67 -0
  460. package/src/variants/components/chip.ts +51 -0
  461. package/src/variants/components/code-block.ts +22 -0
  462. package/src/variants/components/dialog.ts +28 -0
  463. package/src/variants/components/empty.ts +60 -0
  464. package/src/variants/components/field.ts +35 -0
  465. package/src/variants/components/float-label.ts +95 -0
  466. package/src/variants/components/input-group.ts +73 -0
  467. package/src/variants/components/input-password.ts +68 -0
  468. package/src/variants/components/kbd.ts +47 -0
  469. package/src/variants/components/picker-trigger.ts +30 -0
  470. package/src/variants/components/radio-group.ts +63 -0
  471. package/src/variants/components/sheet.ts +23 -0
  472. package/src/variants/components/sidebar.ts +33 -0
  473. package/src/variants/components/slider.ts +49 -0
  474. package/src/variants/components/timeline.ts +45 -0
  475. package/src/variants/components/toggle.ts +58 -0
  476. package/src/variants/index.ts +35 -0
  477. package/src/variants/lib/chart/polar.ts +139 -0
  478. package/src/variants/lib/chart/tooltip.ts +101 -0
  479. package/src/variants/lib/chart/types.ts +172 -0
  480. package/src/variants/lib/chart/xy-label.ts +42 -0
  481. package/src/variants/lib/focus.ts +66 -0
  482. package/src/variants/lib/form-errors.ts +59 -0
  483. package/src/variants/lib/highlight.ts +548 -0
  484. package/src/variants/lib/list-move.ts +63 -0
  485. package/src/variants/lib/mask.ts +106 -0
  486. package/src/variants/lib/media.ts +56 -0
  487. package/src/variants/lib/menu-styles.ts +71 -0
  488. package/src/variants/lib/platform.ts +68 -0
  489. package/src/variants/lib/tree.ts +119 -0
  490. package/src/variants/lib/upload.ts +58 -0
  491. package/src/variants/lib/utils.ts +11 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "array.max": "Chọn tối đa {count} mục",
3
+ "array.min": "Chọn ít nhất {count} mục",
4
+ "date": "Ngày không hợp lệ",
5
+ "email": "Email không hợp lệ",
6
+ "enum": "Giá trị không nằm trong danh sách cho phép",
7
+ "format": "Giá trị không đúng định dạng",
8
+ "invalidType": "Kiểu dữ liệu không hợp lệ (cần {expected})",
9
+ "number.max": "Giá trị tối đa là {count}",
10
+ "number.min": "Giá trị tối thiểu là {count}",
11
+ "required": "Trường này là bắt buộc",
12
+ "string.max": "Tối đa {count} ký tự",
13
+ "string.min": "Tối thiểu {count} ký tự",
14
+ "url": "Đường dẫn không hợp lệ",
15
+ "uuid": "UUID không hợp lệ"
16
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Cửa ra cho kiểu và hàm ngày tháng.
3
+ *
4
+ * `DatePicker` nhận `DateValue` của `@internationalized/date` (reka bắt buộc
5
+ * vậy). Nếu app muốn dùng thì phải import được kiểu đó — mà khai thêm
6
+ * `@internationalized/date` vào `apps/admin` chỉ để có mấy cái type là bắt bên
7
+ * dùng phải biết kit đang chạy thư viện ngày nào.
8
+ *
9
+ * Re-export ở đây: app chỉ nhập từ `@vestow/vue`, và nếu sau này đổi thư viện
10
+ * thì chỉ phải sửa một file.
11
+ */
12
+ export {
13
+ CalendarDate,
14
+ CalendarDateTime,
15
+ DateFormatter,
16
+ getLocalTimeZone,
17
+ isSameDay,
18
+ parseDate,
19
+ today,
20
+ ZonedDateTime,
21
+ } from '@internationalized/date'
22
+
23
+ export type { DateValue } from '@internationalized/date'
24
+ export type { DateRange } from 'reka-ui'
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cửa ra cho vòng focus. Bản thật — kèm bảng bốn trạng thái và lời giải thích
3
+ * vì sao `data-[invalid]:focus-visible:*` thắng nhờ specificity — nằm ở
4
+ * `src/variants/lib/focus`, cạnh những bảng cva đọc nó.
5
+ */
6
+ export {
7
+ focusRing,
8
+ focusRingWithin,
9
+ invalidRing,
10
+ invalidRingStatic,
11
+ invalidRingWithin,
12
+ } from '../variants/lib/focus'
@@ -0,0 +1,345 @@
1
+ // `Component` phải đổi tên: Lucide có một icon TÊN LÀ `Component`, nên để
2
+ // nguyên là type của Vue và wrapper icon đụng nhau ngay trong file này.
3
+ import type { Component as VueComponent } from 'vue'
4
+ import * as lucide from 'lucide-vue-next'
5
+ import { defineComponent, h, shallowRef } from 'vue'
6
+
7
+ /**
8
+ * Tầng icon: mọi component của thư viện đi qua đây thay vì import thẳng
9
+ * `lucide-vue-next`.
10
+ *
11
+ * KHÔNG THÊM DEPENDENCY NÀO, và đó là cả điểm của file này. `@vestow/vue`
12
+ * ship source, nên nhét bốn bộ icon vào đây là bắt MỌI app tiêu thụ tải về
13
+ * 11,2 MB JSON cho một trục của một trang playground mà chúng không có. Ở đây
14
+ * chỉ có một chỗ cắm; app nào muốn đổi bộ thì tự cắm bộ của nó vào bằng
15
+ * `setIconResolver`. App không cắm gì thì mọi thứ y như trước — Lucide, import
16
+ * tĩnh, tree-shake bình thường.
17
+ *
18
+ * Đây cũng là lý do trục này KHÔNG nằm ở `packages/theme` như tám trục kia:
19
+ * bộ icon không phải CSS, không có `data-*` nào tả được nó, và nó phải dựng ra
20
+ * component. Ranh giới ở `CLAUDE.md` nói đúng chuyện đó — `packages/` không
21
+ * biết framework và không biết cách vẽ.
22
+ */
23
+
24
+ /** Tên icon dùng trong thư viện. Chính là tên của Lucide. */
25
+ export type IconName = keyof typeof iconComponents
26
+
27
+ /**
28
+ * Trả về component thay thế cho một tên icon, hoặc `undefined` để dùng Lucide.
29
+ * App cắm vào bằng `setIconResolver`.
30
+ */
31
+ export type IconResolver = (name: string) => VueComponent | undefined
32
+
33
+ const resolver = shallowRef<IconResolver | undefined>()
34
+
35
+ /**
36
+ * Cắm bộ icon của app vào. Truyền `undefined` để trả về Lucide.
37
+ *
38
+ * `shallowRef` chứ không phải biến thường: đổi bộ phải vẽ lại 136 wrapper đang
39
+ * mount, mà chúng chỉ vẽ lại nếu hàm render có đăng ký phụ thuộc — đọc một biến
40
+ * thường thì Vue không biết gì và giao diện đứng im tới lần render sau.
41
+ */
42
+ export function setIconResolver(next: IconResolver | undefined): void {
43
+ resolver.value = next
44
+ }
45
+
46
+ /**
47
+ * Bọc một icon Lucide lại. Wrapper CHUYỂN TIẾP attrs chứ không khai prop nào —
48
+ * nhờ vậy `class`, `aria-hidden`, `stroke-width` và mọi thứ chỗ gọi đang đặt
49
+ * đều đi thẳng xuống, và luật "cỡ icon đi theo cỡ control" ở `vue/CLAUDE.md`
50
+ * không phải sửa một dòng nào.
51
+ */
52
+ function icon(name: string): VueComponent {
53
+ return defineComponent({
54
+ name: `Wb${name}`,
55
+ inheritAttrs: false,
56
+ setup(_props, { attrs }) {
57
+ // Đọc `lucide[name]` LÚC RENDER, không phải lúc module khởi tạo.
58
+ //
59
+ // File này khai 136 `export const` gọi `icon()` ngay tại tầng module, nên
60
+ // đọc sớm là chạm vào namespace của `lucide-vue-next` trong khi chính nó
61
+ // còn đang khởi tạo — ra `ReferenceError: Cannot access 'Activity' before
62
+ // initialization`, và vì nó ném ở tầng module nên CẢ TRANG trắng chứ
63
+ // không phải một icon hỏng. Tới lúc render thì mọi module đã xong.
64
+ const fallback = (lucide as unknown as Record<string, VueComponent>)[name]
65
+ return () => h(resolver.value?.(name) ?? fallback, attrs)
66
+ },
67
+ })
68
+ }
69
+
70
+ export const Activity = /* @__PURE__ */ icon('Activity')
71
+ export const AlertCircle = /* @__PURE__ */ icon('AlertCircle')
72
+ export const AlignCenter = /* @__PURE__ */ icon('AlignCenter')
73
+ export const AlignJustify = /* @__PURE__ */ icon('AlignJustify')
74
+ export const AlignLeft = /* @__PURE__ */ icon('AlignLeft')
75
+ export const AlignRight = /* @__PURE__ */ icon('AlignRight')
76
+ export const AlignVerticalSpaceAround = /* @__PURE__ */ icon('AlignVerticalSpaceAround')
77
+ export const Archive = /* @__PURE__ */ icon('Archive')
78
+ export const ArrowDown = /* @__PURE__ */ icon('ArrowDown')
79
+ export const ArrowLeft = /* @__PURE__ */ icon('ArrowLeft')
80
+ export const ArrowLeftRight = /* @__PURE__ */ icon('ArrowLeftRight')
81
+ export const ArrowRight = /* @__PURE__ */ icon('ArrowRight')
82
+ export const ArrowUp = /* @__PURE__ */ icon('ArrowUp')
83
+ export const ArrowUpIcon = /* @__PURE__ */ icon('ArrowUpIcon')
84
+ export const ArrowUpRight = /* @__PURE__ */ icon('ArrowUpRight')
85
+ export const AudioLines = /* @__PURE__ */ icon('AudioLines')
86
+ export const Ban = /* @__PURE__ */ icon('Ban')
87
+ export const Baseline = /* @__PURE__ */ icon('Baseline')
88
+ export const Bell = /* @__PURE__ */ icon('Bell')
89
+ export const Bold = /* @__PURE__ */ icon('Bold')
90
+ export const BookOpen = /* @__PURE__ */ icon('BookOpen')
91
+ export const Calendar = /* @__PURE__ */ icon('Calendar')
92
+ export const CalendarDays = /* @__PURE__ */ icon('CalendarDays')
93
+ export const CalendarIcon = /* @__PURE__ */ icon('CalendarIcon')
94
+ export const ChartArea = /* @__PURE__ */ icon('ChartArea')
95
+ export const ChartBar = /* @__PURE__ */ icon('ChartBar')
96
+ export const ChartColumn = /* @__PURE__ */ icon('ChartColumn')
97
+ export const ChartLine = /* @__PURE__ */ icon('ChartLine')
98
+ export const Check = /* @__PURE__ */ icon('Check')
99
+ export const ChevronDown = /* @__PURE__ */ icon('ChevronDown')
100
+ export const ChevronLeft = /* @__PURE__ */ icon('ChevronLeft')
101
+ export const ChevronRight = /* @__PURE__ */ icon('ChevronRight')
102
+ export const ChevronUp = /* @__PURE__ */ icon('ChevronUp')
103
+ export const ChevronsDown = /* @__PURE__ */ icon('ChevronsDown')
104
+ export const ChevronsLeft = /* @__PURE__ */ icon('ChevronsLeft')
105
+ export const ChevronsRight = /* @__PURE__ */ icon('ChevronsRight')
106
+ export const ChevronsUp = /* @__PURE__ */ icon('ChevronsUp')
107
+ export const ChevronsUpDown = /* @__PURE__ */ icon('ChevronsUpDown')
108
+ export const Circle = /* @__PURE__ */ icon('Circle')
109
+ export const CircleAlert = /* @__PURE__ */ icon('CircleAlert')
110
+ export const CircleCheck = /* @__PURE__ */ icon('CircleCheck')
111
+ export const CircleHelp = /* @__PURE__ */ icon('CircleHelp')
112
+ export const CircleUser = /* @__PURE__ */ icon('CircleUser')
113
+ export const Clock = /* @__PURE__ */ icon('Clock')
114
+ export const Code2 = /* @__PURE__ */ icon('Code2')
115
+ export const Component = /* @__PURE__ */ icon('Component')
116
+ export const Copy = /* @__PURE__ */ icon('Copy')
117
+ export const CreditCard = /* @__PURE__ */ icon('CreditCard')
118
+ export const Dices = /* @__PURE__ */ icon('Dices')
119
+ export const Download = /* @__PURE__ */ icon('Download')
120
+ export const Ellipsis = /* @__PURE__ */ icon('Ellipsis')
121
+ export const ExternalLink = /* @__PURE__ */ icon('ExternalLink')
122
+ export const Eye = /* @__PURE__ */ icon('Eye')
123
+ export const EyeOff = /* @__PURE__ */ icon('EyeOff')
124
+ export const File = /* @__PURE__ */ icon('File')
125
+ export const FileDown = /* @__PURE__ */ icon('FileDown')
126
+ export const FileQuestion = /* @__PURE__ */ icon('FileQuestion')
127
+ export const FileText = /* @__PURE__ */ icon('FileText')
128
+ export const Filter = /* @__PURE__ */ icon('Filter')
129
+ export const Flag = /* @__PURE__ */ icon('Flag')
130
+ export const Folder = /* @__PURE__ */ icon('Folder')
131
+ export const FolderOpen = /* @__PURE__ */ icon('FolderOpen')
132
+ export const FolderPlus = /* @__PURE__ */ icon('FolderPlus')
133
+ export const Footprints = /* @__PURE__ */ icon('Footprints')
134
+ export const Gauge = /* @__PURE__ */ icon('Gauge')
135
+ export const GitBranch = /* @__PURE__ */ icon('GitBranch')
136
+ export const Globe = /* @__PURE__ */ icon('Globe')
137
+ export const GripVertical = /* @__PURE__ */ icon('GripVertical')
138
+ export const Heart = /* @__PURE__ */ icon('Heart')
139
+ export const Hexagon = /* @__PURE__ */ icon('Hexagon')
140
+ export const Inbox = /* @__PURE__ */ icon('Inbox')
141
+ export const Info = /* @__PURE__ */ icon('Info')
142
+ export const Italic = /* @__PURE__ */ icon('Italic')
143
+ export const Landmark = /* @__PURE__ */ icon('Landmark')
144
+ export const Languages = /* @__PURE__ */ icon('Languages')
145
+ export const Layers = /* @__PURE__ */ icon('Layers')
146
+ export const LayoutDashboard = /* @__PURE__ */ icon('LayoutDashboard')
147
+ export const LayoutGrid = /* @__PURE__ */ icon('LayoutGrid')
148
+ export const LifeBuoy = /* @__PURE__ */ icon('LifeBuoy')
149
+ export const Link2 = /* @__PURE__ */ icon('Link2')
150
+ export const List = /* @__PURE__ */ icon('List')
151
+ export const LoaderCircle = /* @__PURE__ */ icon('LoaderCircle')
152
+ export const Lock = /* @__PURE__ */ icon('Lock')
153
+ export const LogOut = /* @__PURE__ */ icon('LogOut')
154
+ export const Mail = /* @__PURE__ */ icon('Mail')
155
+ export const Maximize = /* @__PURE__ */ icon('Maximize')
156
+ export const Menu = /* @__PURE__ */ icon('Menu')
157
+ export const Minimize = /* @__PURE__ */ icon('Minimize')
158
+ export const Minus = /* @__PURE__ */ icon('Minus')
159
+ export const Monitor = /* @__PURE__ */ icon('Monitor')
160
+ export const Moon = /* @__PURE__ */ icon('Moon')
161
+ export const MoreHorizontal = /* @__PURE__ */ icon('MoreHorizontal')
162
+ export const PaintBucket = /* @__PURE__ */ icon('PaintBucket')
163
+ export const Palette = /* @__PURE__ */ icon('Palette')
164
+ export const PanelLeft = /* @__PURE__ */ icon('PanelLeft')
165
+ export const PanelTop = /* @__PURE__ */ icon('PanelTop')
166
+ export const Pause = /* @__PURE__ */ icon('Pause')
167
+ export const Pencil = /* @__PURE__ */ icon('Pencil')
168
+ export const PieChart = /* @__PURE__ */ icon('PieChart')
169
+ export const Play = /* @__PURE__ */ icon('Play')
170
+ export const Plus = /* @__PURE__ */ icon('Plus')
171
+ export const Power = /* @__PURE__ */ icon('Power')
172
+ export const Printer = /* @__PURE__ */ icon('Printer')
173
+ export const Puzzle = /* @__PURE__ */ icon('Puzzle')
174
+ export const Redo2 = /* @__PURE__ */ icon('Redo2')
175
+ export const RefreshCw = /* @__PURE__ */ icon('RefreshCw')
176
+ export const Rocket = /* @__PURE__ */ icon('Rocket')
177
+ export const RotateCcw = /* @__PURE__ */ icon('RotateCcw')
178
+ export const RotateCw = /* @__PURE__ */ icon('RotateCw')
179
+ export const Search = /* @__PURE__ */ icon('Search')
180
+ export const SearchX = /* @__PURE__ */ icon('SearchX')
181
+ export const Settings = /* @__PURE__ */ icon('Settings')
182
+ export const Shapes = /* @__PURE__ */ icon('Shapes')
183
+ export const Share2 = /* @__PURE__ */ icon('Share2')
184
+ export const Shield = /* @__PURE__ */ icon('Shield')
185
+ export const SlidersHorizontal = /* @__PURE__ */ icon('SlidersHorizontal')
186
+ export const Smartphone = /* @__PURE__ */ icon('Smartphone')
187
+ export const Sparkles = /* @__PURE__ */ icon('Sparkles')
188
+ export const Squircle = /* @__PURE__ */ icon('Squircle')
189
+ export const Star = /* @__PURE__ */ icon('Star')
190
+ export const Sun = /* @__PURE__ */ icon('Sun')
191
+ export const SunMoon = /* @__PURE__ */ icon('SunMoon')
192
+ export const Target = /* @__PURE__ */ icon('Target')
193
+ export const Trash2 = /* @__PURE__ */ icon('Trash2')
194
+ export const TriangleAlert = /* @__PURE__ */ icon('TriangleAlert')
195
+ export const Type = /* @__PURE__ */ icon('Type')
196
+ export const Underline = /* @__PURE__ */ icon('Underline')
197
+ export const Undo2 = /* @__PURE__ */ icon('Undo2')
198
+ export const Upload = /* @__PURE__ */ icon('Upload')
199
+ export const User = /* @__PURE__ */ icon('User')
200
+ export const Users = /* @__PURE__ */ icon('Users')
201
+ export const Volume1 = /* @__PURE__ */ icon('Volume1')
202
+ export const Volume2 = /* @__PURE__ */ icon('Volume2')
203
+ export const VolumeX = /* @__PURE__ */ icon('VolumeX')
204
+ export const Waves = /* @__PURE__ */ icon('Waves')
205
+ export const X = /* @__PURE__ */ icon('X')
206
+
207
+ /** Bảng tra dùng cho `IconName` và cho bộ resolver của app. */
208
+ export const iconComponents = {
209
+ Activity,
210
+ AlertCircle,
211
+ AlignCenter,
212
+ AlignJustify,
213
+ AlignLeft,
214
+ AlignRight,
215
+ AlignVerticalSpaceAround,
216
+ Archive,
217
+ ArrowDown,
218
+ ArrowLeft,
219
+ ArrowLeftRight,
220
+ ArrowRight,
221
+ ArrowUp,
222
+ ArrowUpIcon,
223
+ ArrowUpRight,
224
+ AudioLines,
225
+ Ban,
226
+ Baseline,
227
+ Bell,
228
+ Bold,
229
+ BookOpen,
230
+ Calendar,
231
+ CalendarDays,
232
+ CalendarIcon,
233
+ ChartArea,
234
+ ChartBar,
235
+ ChartColumn,
236
+ ChartLine,
237
+ Check,
238
+ ChevronDown,
239
+ ChevronLeft,
240
+ ChevronRight,
241
+ ChevronUp,
242
+ ChevronsDown,
243
+ ChevronsLeft,
244
+ ChevronsRight,
245
+ ChevronsUp,
246
+ ChevronsUpDown,
247
+ Circle,
248
+ CircleAlert,
249
+ CircleCheck,
250
+ CircleHelp,
251
+ CircleUser,
252
+ Clock,
253
+ Code2,
254
+ Component,
255
+ Copy,
256
+ CreditCard,
257
+ Dices,
258
+ Download,
259
+ Ellipsis,
260
+ ExternalLink,
261
+ Eye,
262
+ EyeOff,
263
+ File,
264
+ FileDown,
265
+ FileQuestion,
266
+ FileText,
267
+ Filter,
268
+ Flag,
269
+ Folder,
270
+ FolderOpen,
271
+ FolderPlus,
272
+ Footprints,
273
+ Gauge,
274
+ GitBranch,
275
+ Globe,
276
+ GripVertical,
277
+ Heart,
278
+ Hexagon,
279
+ Inbox,
280
+ Info,
281
+ Italic,
282
+ Landmark,
283
+ Languages,
284
+ Layers,
285
+ LayoutDashboard,
286
+ LayoutGrid,
287
+ LifeBuoy,
288
+ Link2,
289
+ List,
290
+ LoaderCircle,
291
+ Lock,
292
+ LogOut,
293
+ Mail,
294
+ Maximize,
295
+ Menu,
296
+ Minimize,
297
+ Minus,
298
+ Monitor,
299
+ Moon,
300
+ MoreHorizontal,
301
+ PaintBucket,
302
+ Palette,
303
+ PanelLeft,
304
+ PanelTop,
305
+ Pause,
306
+ Pencil,
307
+ PieChart,
308
+ Play,
309
+ Plus,
310
+ Power,
311
+ Printer,
312
+ Puzzle,
313
+ Redo2,
314
+ RefreshCw,
315
+ Rocket,
316
+ RotateCcw,
317
+ RotateCw,
318
+ Search,
319
+ SearchX,
320
+ Settings,
321
+ Shapes,
322
+ Share2,
323
+ Shield,
324
+ SlidersHorizontal,
325
+ Smartphone,
326
+ Sparkles,
327
+ Squircle,
328
+ Star,
329
+ Sun,
330
+ SunMoon,
331
+ Target,
332
+ Trash2,
333
+ TriangleAlert,
334
+ Type,
335
+ Underline,
336
+ Undo2,
337
+ Upload,
338
+ User,
339
+ Users,
340
+ Volume1,
341
+ Volume2,
342
+ VolumeX,
343
+ Waves,
344
+ X,
345
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Cửa ra cho class dùng chung của mọi loại menu. Bản thật ở
3
+ * `src/variants/lib/menu-styles`.
4
+ */
5
+ export {
6
+ menuContentClass,
7
+ menuIndicatorItemClass,
8
+ menuIndicatorSlotClass,
9
+ menuInsetClass,
10
+ menuItemClass,
11
+ menuLabelClass,
12
+ menuSeparatorClass,
13
+ menuShortcutClass,
14
+ menuSubContentClass,
15
+ menuSubTriggerClass,
16
+ } from '../variants/lib/menu-styles'
@@ -0,0 +1,20 @@
1
+ import type { Component } from 'vue'
2
+
3
+ /**
4
+ * Phần chung của một mục hành động trong menu, theo khuôn MenuModel của PrimeVue.
5
+ *
6
+ * `SplitButtonItem` và `SpeedDialItem` đều mọc ra từ đây: khai một lần để hai
7
+ * component không trôi khỏi nhau, và để cùng một mảng `model` dùng được cho cả
8
+ * hai mà không phải viết lại.
9
+ */
10
+ export interface MenuActionItem {
11
+ label?: string
12
+ /** Icon đặt trước nhãn — truyền chính component, ví dụ `Pencil`. */
13
+ icon?: Component
14
+ /** Chạy khi bấm. Bỏ qua nếu mục có `url`. */
15
+ command?: (item: MenuActionItem) => void
16
+ /** Có `url` thì mục render thành thẻ `<a>`. */
17
+ url?: string
18
+ target?: string
19
+ disabled?: boolean
20
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Chuyển tiếp sang `src/variants/lib/platform` — logic thuần, không dính Vue,
3
+ * nên nó ở cùng chỗ với phần còn lại của tầng class.
4
+ */
5
+ export { isMacPlatform, metaKeyLabel, shortcutLabel } from '../variants/lib/platform'
@@ -0,0 +1,6 @@
1
+ import type { HTMLAttributes } from 'vue'
2
+
3
+ /** Prop `class` của Vue không nằm trong props type mặc định — khai báo lại. */
4
+ export interface ClassProps {
5
+ class?: HTMLAttributes['class']
6
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Cửa ra cho `cn()`. Bản thật nằm ở `src/variants`, cạnh 27 bảng cva đọc nó.
3
+ *
4
+ * Giữ lối vào tương đối ở đây thay vì sửa 266 file: mọi component trong
5
+ * `packages/ui` nhập class helper theo cùng một cách, dù helper đó nằm trong
6
+ * package này hay đã chuyển đi. `cn` cũng là export công khai của
7
+ * `@vestow/vue`, nên file này còn là chỗ neo cho `index.ts`.
8
+ */
9
+ export { cn } from '../variants/lib/utils'
@@ -0,0 +1,127 @@
1
+ import type { core } from 'zod'
2
+ import { z } from 'zod'
3
+ import { translate } from '../composables/useI18n'
4
+
5
+ /**
6
+ * Thông báo lỗi zod theo ngôn ngữ đang bật.
7
+ *
8
+ * Cần thiết vì form khởi tạo field vắng mặt là `undefined`, nên zod báo
9
+ * `invalid_type` (mặc định: "Invalid input: expected string, received
10
+ * undefined") thay vì chạy tới `.min(1, '...')` của schema. Không đặt error map
11
+ * thì mọi form đều hiện chữ tiếng Anh của zod, bất kể app đang ở ngôn ngữ nào.
12
+ *
13
+ * Gọi một lần trong main.ts:
14
+ *
15
+ * import { setupZodMessages } from '@vestow/vue'
16
+ * setupZodMessages()
17
+ *
18
+ * Dùng `translate` chứ không `useI18n`: error map là hàm thường, gọi lúc
19
+ * validate chứ không trong `setup`. Hệ quả cần biết — thông báo đã sinh ra thì
20
+ * GIỮ NGUYÊN ngôn ngữ lúc sinh; đổi ngôn ngữ giữa chừng chỉ đổi được những lỗi
21
+ * validate lại sau đó. Đúng cách zod hoạt động, và cũng hợp lý: lỗi là ảnh chụp
22
+ * một lần bấm nút, không phải chữ trên nhãn.
23
+ */
24
+
25
+ /**
26
+ * Vì sao KHÔNG dùng `z.locales.vi` có sẵn của zod 4.
27
+ *
28
+ * Hai lý do, lý do nào cũng đủ:
29
+ *
30
+ * 1. Locale cài đặt MỘT lần lúc khởi động, còn app đổi ngôn ngữ lúc chạy. Bộ
31
+ * locale không đọc `i18nController`, nên bật tiếng Anh xong lỗi vẫn tiếng
32
+ * Việt.
33
+ * 2. Chữ của nó dịch máy móc từ khuôn tiếng Anh: `z.string().min(2)` ra
34
+ * "Quá nhỏ: mong đợi string có >=2 ký tự" — lộ cả tên kiểu lẫn dấu `>=`.
35
+ * Bộ chuỗi của repo nói "Tối thiểu 2 ký tự".
36
+ */
37
+
38
+ /**
39
+ * Ca "field vắng mặt" nhận ra bằng `issue.input`, KHÔNG bằng `issue.received`.
40
+ *
41
+ * Đây là chỗ khác v3 dễ hụt nhất khi chuyển: v3 phân biệt bằng
42
+ * `issue.received === 'undefined'` — một CHUỖI tên kiểu — còn v4 bỏ hẳn trường
43
+ * đó khỏi `invalid_type` và đưa thẳng giá trị thật vào `input`. Đã đo: raw issue
44
+ * mà error map nhận được có đúng các khoá `code, expected, input, inst, schema`.
45
+ *
46
+ * Nếu đọc nhầm sang một trường không tồn tại thì nhánh này im lặng không bao giờ
47
+ * khớp, và mọi field bỏ trống hiện ra "Kiểu dữ liệu không hợp lệ (cần string)"
48
+ * thay vì "Trường này là bắt buộc" — vẫn là một câu tiếng Việt hợp lý, nên nhìn
49
+ * không ra.
50
+ */
51
+ function typeMessage(issue: core.$ZodRawIssue<core.$ZodIssueInvalidType>): string {
52
+ if (issue.input === undefined || issue.input === null)
53
+ return translate('zod.required')
54
+
55
+ /**
56
+ * `new Date('x')` là một Date THẬT nên không rơi vào nhánh trên. zod 4 bỏ mã
57
+ * `invalid_date` của v3 và gộp ca này vào `invalid_type` với
58
+ * `expected: 'date'` — chỉ riêng ca đó raw issue mới có thêm khoá `received`.
59
+ */
60
+ if (issue.expected === 'date')
61
+ return translate('zod.date')
62
+
63
+ return translate('zod.invalidType', { expected: issue.expected })
64
+ }
65
+
66
+ /**
67
+ * `too_small` / `too_big` khoá theo `origin`, KHÔNG theo `type` như v3.
68
+ *
69
+ * Trả `undefined` thì zod rơi lui về thông báo mặc định của locale — đây là vế
70
+ * thay cho `ctx.defaultError` của v3, và error map v4 không còn tham số `ctx`
71
+ * nào để mà đọc.
72
+ */
73
+ function sizeMessage(
74
+ origin: string,
75
+ bound: number | bigint,
76
+ kind: 'min' | 'max',
77
+ ): string | undefined {
78
+ /** `.min(1)` trên chuỗi nghĩa là "phải điền", không phải "phải dài 1 ký tự". */
79
+ if (origin === 'string' && kind === 'min' && Number(bound) === 1)
80
+ return translate('zod.required')
81
+
82
+ if (origin === 'string' || origin === 'number' || origin === 'array')
83
+ return translate(`zod.${origin}.${kind}`, { count: Number(bound) })
84
+
85
+ return undefined
86
+ }
87
+
88
+ export function setupZodMessages(): void {
89
+ /**
90
+ * `customError` chứ không `localeError`: nó đứng trên locale, nên chuỗi chưa
91
+ * phủ (bigint, set, file…) vẫn rơi lui về thông báo dựng sẵn thay vì mất hẳn.
92
+ *
93
+ * Thay cho `z.setErrorMap` của v3 — hàm đó không còn.
94
+ */
95
+ z.config({
96
+ customError: (issue) => {
97
+ switch (issue.code) {
98
+ case 'invalid_type':
99
+ return typeMessage(issue as core.$ZodRawIssue<core.$ZodIssueInvalidType>)
100
+
101
+ case 'too_small':
102
+ return sizeMessage(issue.origin, issue.minimum, 'min')
103
+
104
+ case 'too_big':
105
+ return sizeMessage(issue.origin, issue.maximum, 'max')
106
+
107
+ /** v3 gọi là `invalid_string` và khoá theo `validation`. */
108
+ case 'invalid_format':
109
+ if (issue.format === 'email')
110
+ return translate('zod.email')
111
+ if (issue.format === 'url')
112
+ return translate('zod.url')
113
+ if (issue.format === 'uuid')
114
+ return translate('zod.uuid')
115
+
116
+ return translate('zod.format')
117
+
118
+ /** Gộp `invalid_enum_value` và `invalid_literal` của v3 làm một. */
119
+ case 'invalid_value':
120
+ return translate('zod.enum')
121
+
122
+ default:
123
+ return undefined
124
+ }
125
+ },
126
+ })
127
+ }
@@ -0,0 +1,30 @@
1
+ /* Cột đang chọn của BarChart — NGOÀI mọi @layer, cố ý.
2
+
3
+ Ở đây chứ không ở entry CSS của từng cây: rule này nói về Unovis, mà cả hai
4
+ cây giờ đều dựng Chart trên Unovis. Bản trước ghi chú "ở lại bên Vue vì bản
5
+ React chưa có" — vế đó hết đúng từ đợt port Chart.
6
+
7
+ KHÔNG import vào `index.css` của variants: app nào cũng phải trả tiền cho một
8
+ rule chỉ có nghĩa khi màn hình đó có biểu đồ. Hai package component tự import
9
+ file này, nên chỉ ai dùng mới nạp.
10
+
11
+ Unovis khai diện mạo của cột bằng class emotion tiêm lúc chạy
12
+ (`stroke: none; stroke-width: 0`), mà stylesheet đó nằm ngoài cascade layer
13
+ nên rule đặt trong `@layer` sẽ thua bất kể specificity — đúng bẫy số 8 trong
14
+ CLAUDE.md. Ra ngoài layer thì hai bên cùng hạng, và (0,2,0) ở đây thắng
15
+ (0,1,0) của class kia.
16
+
17
+ Cũng vì vậy mà KHÔNG ghi được qua `attributes` của Unovis: nó gọi
18
+ `selection.attr()`, mà thuộc tính trình bày thì yếu hơn mọi rule CSS.
19
+ `attributes` chỉ dùng để gắn cái móc `data-active-bar`.
20
+
21
+ Bốn giá trị lấy đúng của shadcn (`chart-bar-active`): viền đứt nét 4, lệch 4,
22
+ dày 2, nền còn 80%. Màu viền là màu của CHÍNH cột đó — BarChart truyền xuống
23
+ qua `--chart-active-bar`, vì CSS không đọc được `fill` của element để dùng lại. */
24
+ .ui-chart [data-active-bar="true"] {
25
+ fill-opacity: 0.8;
26
+ stroke: var(--chart-active-bar, currentColor);
27
+ stroke-width: 2px;
28
+ stroke-dasharray: 4;
29
+ stroke-dashoffset: 4;
30
+ }
@@ -0,0 +1,18 @@
1
+ /* Entry CSS của bản Vue. App chỉ cần: @import "@vestow/vue/styles.css";
2
+
3
+ Phần theme — Tailwind, token, và các khối @layer là mặt của theme kính
4
+ (.surface, .scroll-edge, .app-backdrop) cùng reset base — nằm ở
5
+ `@vestow/theme/css/app.css`. */
6
+ @import "@vestow/theme/css/app.css";
7
+
8
+ /* Tailwind v4 chỉ quét file nằm dưới thư mục chứa CSS entry của APP.
9
+ packages/ui nằm ngoài phạm vi đó -> phải khai báo thủ công,
10
+ nếu không toàn bộ class trong component library sẽ bị purge.
11
+
12
+ Vùng này phủ CẢ `src/variants` — 27 bảng cva nằm trong đó. Trước đợt gộp
13
+ chúng ở package riêng và phải tự khai `@source` của chính mình; giờ chúng
14
+ nằm dưới `src/` nên dòng dưới đây là đủ. */
15
+ @source "../";
16
+
17
+ /* Rule cột-đang-chọn của BarChart; lý do "ngoài mọi @layer" ghi trong file. */
18
+ @import "./chart.css";