@brumaombra/ui-vintage 0.7.8 → 0.7.9

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 (272) hide show
  1. package/README.md +308 -48
  2. package/module.mjs +1 -1
  3. package/package.json +2 -1
  4. package/src/components/background-grid/BackgroundGrid.vue +11 -2
  5. package/src/components/background-grid/index.ts +2 -2
  6. package/src/components/blog/AllPostsSection.vue +25 -9
  7. package/src/components/blog/BlogFAQSection.vue +8 -3
  8. package/src/components/blog/BlogHeaderSection.vue +14 -11
  9. package/src/components/blog/BlogInfoSection.vue +13 -11
  10. package/src/components/blog/BlogSectionTitle.vue +5 -5
  11. package/src/components/blog/CategoriesList.vue +11 -3
  12. package/src/components/blog/CategoriesSection.vue +11 -3
  13. package/src/components/blog/CategoryCard.vue +10 -8
  14. package/src/components/blog/HeaderCarousel.vue +24 -15
  15. package/src/components/blog/PostCard.vue +16 -11
  16. package/src/components/blog/PostsList.vue +12 -3
  17. package/src/components/blog/SocialShareSidebar.vue +11 -11
  18. package/src/components/blog/TableOfContents.vue +29 -13
  19. package/src/components/busy-indicator/BusyIndicator.vue +2 -2
  20. package/src/components/busy-indicator/busy-indicator-state.ts +11 -12
  21. package/src/components/busy-indicator/index.ts +3 -3
  22. package/src/components/card-grid/CardGrid.vue +25 -11
  23. package/src/components/chip/Chip.vue +15 -15
  24. package/src/components/chip/index.ts +2 -2
  25. package/src/components/confirm-dialog/ConfirmDialog.vue +9 -9
  26. package/src/components/confirm-dialog/confirm-dialog-state.ts +15 -14
  27. package/src/components/confirm-dialog/index.ts +3 -12
  28. package/src/components/content/BlogList.vue +11 -8
  29. package/src/components/content/BlogTable.vue +18 -14
  30. package/src/components/content/ProseHr.vue +10 -7
  31. package/src/components/content/Terminal.vue +70 -0
  32. package/src/components/content/index.ts +2 -1
  33. package/src/components/dashboard-shell/DashboardShell.vue +43 -64
  34. package/src/components/dashboard-shell/index.ts +2 -2
  35. package/src/components/data-list/DataList.vue +11 -13
  36. package/src/components/data-list/DataListItem.vue +9 -11
  37. package/src/components/data-list/DataListLabel.vue +9 -11
  38. package/src/components/data-list/DataListText.vue +9 -11
  39. package/src/components/data-list/DataListValue.vue +9 -11
  40. package/src/components/data-list/index.ts +5 -5
  41. package/src/components/empty-state-card/EmptyStateCard.vue +21 -11
  42. package/src/components/error-page/ErrorPage.vue +24 -27
  43. package/src/components/error-page/index.ts +2 -2
  44. package/src/components/info-card/InfoCard.vue +17 -11
  45. package/src/components/landing/index.ts +6 -6
  46. package/src/components/landing/landing-content/LandingContent.vue +5 -7
  47. package/src/components/landing/landing-content/index.ts +2 -2
  48. package/src/components/landing/landing-footer/LandingFooter.vue +26 -29
  49. package/src/components/landing/landing-footer/index.ts +3 -3
  50. package/src/components/landing/landing-navbar/LandingNavbar.vue +15 -17
  51. package/src/components/landing/landing-navbar/index.ts +2 -2
  52. package/src/components/landing/landing-shell/LandingShell.vue +10 -13
  53. package/src/components/landing/landing-shell/index.ts +2 -2
  54. package/src/components/language-flag/LanguageFlag.vue +6 -5
  55. package/src/components/language-flag/index.ts +1 -0
  56. package/src/components/language-selector/LanguageSelector.vue +20 -21
  57. package/src/components/load-more-button/LoadMoreButton.vue +18 -14
  58. package/src/components/loading-state-card/LoadingStateCard.vue +13 -9
  59. package/src/components/message-dialog/MessageDialog.vue +19 -19
  60. package/src/components/message-dialog/index.ts +3 -11
  61. package/src/components/message-dialog/message-dialog-state.ts +12 -11
  62. package/src/components/message-toast/MessageToast.vue +16 -16
  63. package/src/components/message-toast/index.ts +2 -9
  64. package/src/components/message-toast/message-toast-state.ts +9 -9
  65. package/src/components/page-header/PageHeader.vue +8 -5
  66. package/src/components/progress-component/ProgressComponent.vue +13 -10
  67. package/src/components/single-value-card/SingleValueCard.vue +22 -19
  68. package/src/components/slider-form-component/SliderFormComponent.vue +11 -20
  69. package/src/components/slider-form-component/index.ts +2 -2
  70. package/src/components/switch-form-component/SwitchFormComponent.vue +7 -9
  71. package/src/components/switch-form-component/index.ts +2 -2
  72. package/src/components/text-link/TextLink.vue +11 -7
  73. package/src/components/ui/accordion/Accordion.vue +10 -13
  74. package/src/components/ui/accordion/index.ts +1 -1
  75. package/src/components/ui/alert/Alert.vue +11 -10
  76. package/src/components/ui/alert/AlertDescription.vue +9 -8
  77. package/src/components/ui/alert/AlertTitle.vue +9 -8
  78. package/src/components/ui/alert/index.ts +10 -10
  79. package/src/components/ui/alert-dialog/AlertDialog.vue +13 -9
  80. package/src/components/ui/alert-dialog/AlertDialogAction.vue +14 -12
  81. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +14 -16
  82. package/src/components/ui/alert-dialog/AlertDialogContent.vue +24 -27
  83. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +13 -13
  84. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +9 -12
  85. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +9 -8
  86. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +13 -11
  87. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +8 -7
  88. package/src/components/ui/alert-dialog/index.ts +9 -9
  89. package/src/components/ui/badge/Badge.vue +11 -12
  90. package/src/components/ui/badge/index.ts +1 -1
  91. package/src/components/ui/breadcrumb/Breadcrumb.vue +9 -12
  92. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +15 -19
  93. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +10 -12
  94. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +13 -17
  95. package/src/components/ui/breadcrumb/BreadcrumbList.vue +10 -12
  96. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +10 -15
  97. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +14 -18
  98. package/src/components/ui/breadcrumb/index.ts +7 -7
  99. package/src/components/ui/busy/Busy.vue +36 -29
  100. package/src/components/ui/busy/index.ts +1 -1
  101. package/src/components/ui/button/Button.vue +18 -19
  102. package/src/components/ui/button/index.ts +54 -35
  103. package/src/components/ui/calendar/Calendar.vue +167 -121
  104. package/src/components/ui/calendar/CalendarCell.vue +18 -17
  105. package/src/components/ui/calendar/CalendarCellTrigger.vue +31 -33
  106. package/src/components/ui/calendar/CalendarGrid.vue +14 -17
  107. package/src/components/ui/calendar/CalendarGridBody.vue +9 -11
  108. package/src/components/ui/calendar/CalendarGridHead.vue +10 -12
  109. package/src/components/ui/calendar/CalendarGridRow.vue +14 -16
  110. package/src/components/ui/calendar/CalendarHeadCell.vue +18 -17
  111. package/src/components/ui/calendar/CalendarHeader.vue +18 -17
  112. package/src/components/ui/calendar/CalendarHeading.vue +18 -22
  113. package/src/components/ui/calendar/CalendarNextButton.vue +29 -26
  114. package/src/components/ui/calendar/CalendarPrevButton.vue +29 -26
  115. package/src/components/ui/calendar/index.ts +17 -13
  116. package/src/components/ui/card/Card.vue +21 -13
  117. package/src/components/ui/card/CardAction.vue +12 -7
  118. package/src/components/ui/card/CardContent.vue +8 -7
  119. package/src/components/ui/card/CardDescription.vue +16 -7
  120. package/src/components/ui/card/CardFooter.vue +8 -7
  121. package/src/components/ui/card/CardHeader.vue +12 -7
  122. package/src/components/ui/card/CardText.vue +12 -7
  123. package/src/components/ui/card/CardTitle.vue +9 -7
  124. package/src/components/ui/card/index.ts +8 -8
  125. package/src/components/ui/command/Command.vue +71 -61
  126. package/src/components/ui/command/CommandDialog.vue +33 -23
  127. package/src/components/ui/command/CommandEmpty.vue +19 -20
  128. package/src/components/ui/command/CommandGroup.vue +32 -35
  129. package/src/components/ui/command/CommandInput.vue +25 -21
  130. package/src/components/ui/command/CommandItem.vue +62 -59
  131. package/src/components/ui/command/CommandList.vue +21 -18
  132. package/src/components/ui/command/CommandSeparator.vue +13 -11
  133. package/src/components/ui/command/CommandShortcut.vue +13 -8
  134. package/src/components/ui/command/index.ts +24 -20
  135. package/src/components/ui/date-picker/DatePicker.vue +46 -37
  136. package/src/components/ui/date-picker/index.ts +2 -2
  137. package/src/components/ui/date-time-picker/DateTimePicker.vue +99 -95
  138. package/src/components/ui/date-time-picker/index.ts +2 -2
  139. package/src/components/ui/dialog/Dialog.vue +12 -9
  140. package/src/components/ui/dialog/DialogClose.vue +8 -10
  141. package/src/components/ui/dialog/DialogContent.vue +36 -42
  142. package/src/components/ui/dialog/DialogDescription.vue +16 -11
  143. package/src/components/ui/dialog/DialogFooter.vue +13 -12
  144. package/src/components/ui/dialog/DialogHeader.vue +9 -8
  145. package/src/components/ui/dialog/DialogOverlay.vue +16 -11
  146. package/src/components/ui/dialog/DialogScrollContent.vue +47 -45
  147. package/src/components/ui/dialog/DialogTitle.vue +13 -12
  148. package/src/components/ui/dialog/DialogTrigger.vue +8 -7
  149. package/src/components/ui/dialog/index.ts +10 -10
  150. package/src/components/ui/field/Field.vue +12 -14
  151. package/src/components/ui/field/FieldContent.vue +13 -11
  152. package/src/components/ui/field/FieldDescription.vue +15 -13
  153. package/src/components/ui/field/FieldError.vue +43 -40
  154. package/src/components/ui/field/FieldGroup.vue +13 -11
  155. package/src/components/ui/field/FieldLabel.vue +16 -14
  156. package/src/components/ui/field/FieldLegend.vue +16 -14
  157. package/src/components/ui/field/FieldSeparator.vue +17 -15
  158. package/src/components/ui/field/FieldSet.vue +14 -12
  159. package/src/components/ui/field/FieldTitle.vue +13 -11
  160. package/src/components/ui/field/index.ts +36 -36
  161. package/src/components/ui/input/Input.vue +23 -20
  162. package/src/components/ui/input/index.ts +1 -1
  163. package/src/components/ui/label/Label.vue +16 -15
  164. package/src/components/ui/label/index.ts +1 -1
  165. package/src/components/ui/native-select/NativeSelect.vue +31 -41
  166. package/src/components/ui/native-select/NativeSelectOptGroup.vue +8 -7
  167. package/src/components/ui/native-select/NativeSelectOption.vue +8 -7
  168. package/src/components/ui/native-select/index.ts +3 -3
  169. package/src/components/ui/popover/Popover.vue +12 -9
  170. package/src/components/ui/popover/PopoverAnchor.vue +8 -7
  171. package/src/components/ui/popover/PopoverContent.vue +27 -31
  172. package/src/components/ui/popover/PopoverTrigger.vue +8 -7
  173. package/src/components/ui/popover/index.ts +4 -4
  174. package/src/components/ui/progress/Progress.vue +18 -32
  175. package/src/components/ui/progress/index.ts +1 -1
  176. package/src/components/ui/scroll-area/ScrollArea.vue +23 -26
  177. package/src/components/ui/scroll-area/ScrollBar.vue +22 -26
  178. package/src/components/ui/scroll-area/index.ts +2 -2
  179. package/src/components/ui/select/Select.vue +12 -9
  180. package/src/components/ui/select/SelectContent.vue +39 -40
  181. package/src/components/ui/select/SelectGroup.vue +8 -7
  182. package/src/components/ui/select/SelectItem.vue +36 -41
  183. package/src/components/ui/select/SelectItemContent.vue +22 -15
  184. package/src/components/ui/select/SelectItemText.vue +8 -7
  185. package/src/components/ui/select/SelectLabel.vue +10 -9
  186. package/src/components/ui/select/SelectScrollDownButton.vue +21 -17
  187. package/src/components/ui/select/SelectScrollUpButton.vue +21 -17
  188. package/src/components/ui/select/SelectSeparator.vue +11 -9
  189. package/src/components/ui/select/SelectTrigger.vue +27 -25
  190. package/src/components/ui/select/SelectValue.vue +8 -7
  191. package/src/components/ui/select/SelectValueContent.vue +30 -18
  192. package/src/components/ui/select/index.ts +13 -13
  193. package/src/components/ui/separator/Separator.vue +17 -18
  194. package/src/components/ui/separator/index.ts +1 -1
  195. package/src/components/ui/sheet/Sheet.vue +12 -9
  196. package/src/components/ui/sheet/SheetClose.vue +8 -7
  197. package/src/components/ui/sheet/SheetContent.vue +36 -37
  198. package/src/components/ui/sheet/SheetDescription.vue +12 -11
  199. package/src/components/ui/sheet/SheetFooter.vue +8 -7
  200. package/src/components/ui/sheet/SheetHeader.vue +8 -7
  201. package/src/components/ui/sheet/SheetOverlay.vue +16 -11
  202. package/src/components/ui/sheet/SheetTitle.vue +12 -11
  203. package/src/components/ui/sheet/SheetTrigger.vue +8 -7
  204. package/src/components/ui/sheet/index.ts +8 -8
  205. package/src/components/ui/sidebar/Sidebar.vue +68 -61
  206. package/src/components/ui/sidebar/SidebarContent.vue +13 -8
  207. package/src/components/ui/sidebar/SidebarFooter.vue +13 -8
  208. package/src/components/ui/sidebar/SidebarGroup.vue +13 -8
  209. package/src/components/ui/sidebar/SidebarGroupAction.vue +16 -16
  210. package/src/components/ui/sidebar/SidebarGroupContent.vue +9 -8
  211. package/src/components/ui/sidebar/SidebarGroupLabel.vue +15 -14
  212. package/src/components/ui/sidebar/SidebarHeader.vue +13 -8
  213. package/src/components/ui/sidebar/SidebarInput.vue +14 -12
  214. package/src/components/ui/sidebar/SidebarInset.vue +14 -12
  215. package/src/components/ui/sidebar/SidebarMenu.vue +9 -8
  216. package/src/components/ui/sidebar/SidebarMenuAction.vue +25 -23
  217. package/src/components/ui/sidebar/SidebarMenuBadge.vue +19 -17
  218. package/src/components/ui/sidebar/SidebarMenuButton.vue +33 -32
  219. package/src/components/ui/sidebar/SidebarMenuButtonChild.vue +19 -18
  220. package/src/components/ui/sidebar/SidebarMenuItem.vue +9 -8
  221. package/src/components/ui/sidebar/SidebarMenuSkeleton.vue +17 -12
  222. package/src/components/ui/sidebar/SidebarMenuSub.vue +14 -12
  223. package/src/components/ui/sidebar/SidebarMenuSubButton.vue +24 -21
  224. package/src/components/ui/sidebar/SidebarMenuSubItem.vue +9 -8
  225. package/src/components/ui/sidebar/SidebarProvider.vue +63 -53
  226. package/src/components/ui/sidebar/SidebarRail.vue +20 -18
  227. package/src/components/ui/sidebar/SidebarSeparator.vue +10 -9
  228. package/src/components/ui/sidebar/SidebarTrigger.vue +15 -14
  229. package/src/components/ui/sidebar/index.ts +62 -58
  230. package/src/components/ui/sidebar/utils.ts +16 -16
  231. package/src/components/ui/skeleton/Skeleton.vue +12 -9
  232. package/src/components/ui/skeleton/index.ts +1 -1
  233. package/src/components/ui/slider/Slider.vue +24 -19
  234. package/src/components/ui/slider/index.ts +1 -1
  235. package/src/components/ui/switch/Switch.vue +26 -23
  236. package/src/components/ui/switch/index.ts +1 -1
  237. package/src/components/ui/table/Table.vue +11 -10
  238. package/src/components/ui/table/TableBody.vue +9 -11
  239. package/src/components/ui/table/TableCaption.vue +9 -11
  240. package/src/components/ui/table/TableCell.vue +13 -16
  241. package/src/components/ui/table/TableEmpty.vue +22 -25
  242. package/src/components/ui/table/TableFooter.vue +13 -11
  243. package/src/components/ui/table/TableHead.vue +13 -11
  244. package/src/components/ui/table/TableHeader.vue +9 -11
  245. package/src/components/ui/table/TableRow.vue +13 -11
  246. package/src/components/ui/table/index.ts +9 -9
  247. package/src/components/ui/tabs/Tabs.vue +18 -18
  248. package/src/components/ui/tabs/TabsContent.vue +14 -15
  249. package/src/components/ui/tabs/TabsList.vue +18 -18
  250. package/src/components/ui/tabs/TabsTrigger.vue +19 -20
  251. package/src/components/ui/tabs/index.ts +4 -4
  252. package/src/components/ui/textarea/Textarea.vue +23 -20
  253. package/src/components/ui/textarea/index.ts +1 -1
  254. package/src/components/ui/time-picker/TimePicker.vue +33 -38
  255. package/src/components/ui/time-picker/index.ts +2 -2
  256. package/src/components/ui/tooltip/Tooltip.vue +12 -9
  257. package/src/components/ui/tooltip/TooltipContent.vue +28 -20
  258. package/src/components/ui/tooltip/TooltipProvider.vue +9 -8
  259. package/src/components/ui/tooltip/TooltipTrigger.vue +8 -7
  260. package/src/components/ui/tooltip/index.ts +4 -4
  261. package/src/i18n/de.json +5 -0
  262. package/src/i18n/en.json +5 -0
  263. package/src/i18n/es.json +5 -0
  264. package/src/i18n/fr.json +5 -0
  265. package/src/i18n/it.json +5 -0
  266. package/src/i18n/ja.json +5 -0
  267. package/src/i18n/pt.json +5 -0
  268. package/src/i18n/ru.json +5 -0
  269. package/src/i18n/zh.json +5 -0
  270. package/src/lib/common-types.ts +2 -0
  271. package/src/lib/i18n.ts +0 -5
  272. package/src/runtime/{ui-vintage-i18n-plugin.js → ui-vintage-i18n-plugin.ts} +30 -8
@@ -1,8 +1,9 @@
1
- import { h, markRaw, reactive, render } from "vue";
2
- import type { ButtonVariants } from "../ui/button";
1
+ import { h, markRaw, reactive, render } from 'vue';
2
+ import type { ButtonVariants } from '../ui/button';
3
+ import type { HugeiconsIconDefinition } from '../../lib/common-types';
3
4
 
4
- export type DialogButtonVariant = NonNullable<ButtonVariants["variant"]>;
5
- export type HugeiconsIconDefinition = readonly (readonly [string, { readonly [key: string]: string | number }])[];
5
+ export type DialogButtonVariant = NonNullable<ButtonVariants['variant']>;
6
+ export type { HugeiconsIconDefinition };
6
7
 
7
8
  export interface ShowConfirmDialogOptions {
8
9
  title?: string;
@@ -20,7 +21,7 @@ export interface ShowConfirmDialogOptions {
20
21
 
21
22
  interface ConfirmDialogRequest {
22
23
  id: number;
23
- options: Required<Omit<ShowConfirmDialogOptions, "icon" | "confirmButtonIcon" | "cancelButtonIcon" | "onConfirm" | "onCancel">> & {
24
+ options: Required<Omit<ShowConfirmDialogOptions, 'icon' | 'confirmButtonIcon' | 'cancelButtonIcon' | 'onConfirm' | 'onCancel'>> & {
24
25
  icon: HugeiconsIconDefinition | null;
25
26
  confirmButtonIcon: HugeiconsIconDefinition | null;
26
27
  cancelButtonIcon: HugeiconsIconDefinition | null;
@@ -42,7 +43,7 @@ const DIALOG_CLOSE_DURATION_MS = 300;
42
43
  let closeTimer: ReturnType<typeof setTimeout> | null = null;
43
44
  let confirmDialogMountPromise: Promise<void> | null = null;
44
45
 
45
- const CONFIRM_DIALOG_ROOT_ID = "ui-vintage-confirm-dialog-root";
46
+ const CONFIRM_DIALOG_ROOT_ID = 'ui-vintage-confirm-dialog-root';
46
47
 
47
48
  // Shared confirm dialog state
48
49
  export const confirmDialogState: ConfirmDialogState = reactive({
@@ -57,7 +58,7 @@ const markIcon = (icon: HugeiconsIconDefinition | null | undefined) => icon ? ma
57
58
  // Mount the dialog once on demand
58
59
  const ensureConfirmDialogMounted = () => {
59
60
  // Skip mounting during SSR
60
- if (typeof document === "undefined") {
61
+ if (typeof document === 'undefined') {
61
62
  return Promise.resolve();
62
63
  }
63
64
 
@@ -75,7 +76,7 @@ const ensureConfirmDialogMounted = () => {
75
76
  // Start the lazy mount
76
77
  confirmDialogMountPromise = (async () => {
77
78
  // Load the component only when needed
78
- const { default: ConfirmDialog } = await import("./ConfirmDialog.vue");
79
+ const { default: ConfirmDialog } = await import('./ConfirmDialog.vue');
79
80
 
80
81
  // Guard against a concurrent mount
81
82
  if (document.getElementById(CONFIRM_DIALOG_ROOT_ID)) {
@@ -83,7 +84,7 @@ const ensureConfirmDialogMounted = () => {
83
84
  }
84
85
 
85
86
  // Create the host element and render the component
86
- const container = document.createElement("div");
87
+ const container = document.createElement('div');
87
88
  container.id = CONFIRM_DIALOG_ROOT_ID;
88
89
  document.body.appendChild(container);
89
90
  render(h(ConfirmDialog), container);
@@ -182,12 +183,12 @@ export const showConfirmDialog = (options: ShowConfirmDialogOptions) => {
182
183
  enqueueConfirmDialog({
183
184
  id: nextConfirmDialogId += 1,
184
185
  options: {
185
- title: options.title ?? "Confirm",
186
+ title: options.title ?? 'Confirm',
186
187
  message: options.message,
187
- confirmText: options.confirmText ?? "Confirm",
188
- cancelText: options.cancelText ?? "Cancel",
189
- confirmButtonType: options.confirmButtonType ?? "primary",
190
- cancelButtonType: options.cancelButtonType ?? "secondary",
188
+ confirmText: options.confirmText ?? 'Confirm',
189
+ cancelText: options.cancelText ?? 'Cancel',
190
+ confirmButtonType: options.confirmButtonType ?? 'primary',
191
+ cancelButtonType: options.cancelButtonType ?? 'secondary',
191
192
  icon: markIcon(options.icon),
192
193
  confirmButtonIcon: markIcon(options.confirmButtonIcon),
193
194
  cancelButtonIcon: markIcon(options.cancelButtonIcon),
@@ -1,12 +1,3 @@
1
- export { default as ConfirmDialog } from "./ConfirmDialog.vue";
2
- export {
3
- cancelActiveConfirmDialog,
4
- closeConfirmDialog,
5
- confirmActiveDialog,
6
- confirmDialogState,
7
- showConfirmDialog
8
- } from "./confirm-dialog-state";
9
- export type {
10
- DialogButtonVariant,
11
- ShowConfirmDialogOptions
12
- } from "./confirm-dialog-state";
1
+ export { default as ConfirmDialog } from './ConfirmDialog.vue';
2
+ export { cancelActiveConfirmDialog, closeConfirmDialog, confirmActiveDialog, confirmDialogState, showConfirmDialog } from './confirm-dialog-state';
3
+ export type { DialogButtonVariant, ShowConfirmDialogOptions } from './confirm-dialog-state';
@@ -1,22 +1,25 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { Cancel01Icon, CheckmarkCircle02Icon, CircleSmallIcon } from '@hugeicons/core-free-icons';
3
3
  import { HugeiconsIcon } from '@hugeicons/vue';
4
4
  import { Card, CardContent } from '../ui/card';
5
5
 
6
6
  // Props
7
- const props = defineProps({
8
- items: { type: Array, default: () => [] },
9
- variant: { type: String, default: 'checkmark', validator: value => ['circle', 'checkmark', 'numbered', 'cross'].includes(value) }
7
+ const props = withDefaults(defineProps<{
8
+ items?: string[];
9
+ variant?: 'circle' | 'checkmark' | 'numbered' | 'cross';
10
+ }>(), {
11
+ items: () => [],
12
+ variant: 'checkmark'
10
13
  });
11
14
 
12
15
  // Icon container classes
13
16
  const getIconContainerClasses = () => {
14
- return 'flex items-center justify-center w-8 h-8 bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] border border-[var(--border-light)] dark:border-[var(--border-dark)] rounded mr-4 flex-shrink-0';
17
+ return 'flex items-center justify-center w-8 h-8 bg-(--bg-card-light) dark:bg-(--bg-card-dark) border border-(--border-light) dark:border-(--border-dark) rounded mr-4 shrink-0';
15
18
  };
16
19
 
17
20
  // Icon color classes
18
21
  const getIconClasses = () => {
19
- return 'text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] text-xs';
22
+ return 'text-(--text-secondary-light) dark:text-(--text-secondary-dark) text-xs';
20
23
  };
21
24
  </script>
22
25
 
@@ -24,7 +27,7 @@ const getIconClasses = () => {
24
27
  <div class="not-prose my-6 sm:my-12">
25
28
  <Card>
26
29
  <CardContent class="gap-0">
27
- <ul class="text-xs md:text-sm !p-0 !space-y-6">
30
+ <ul class="text-xs md:text-sm p-0! space-y-6!">
28
31
  <li v-for="(item, index) in props.items" :key="index" class="flex items-center">
29
32
  <!-- Circle -->
30
33
  <div v-if="props.variant === 'circle'" :class="getIconContainerClasses()">
@@ -48,7 +51,7 @@ const getIconClasses = () => {
48
51
 
49
52
  <!-- Content -->
50
53
  <div class="flex-1">
51
- <div class="text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] leading-relaxed">
54
+ <div class="text-(--text-primary-light) dark:text-(--text-primary-dark) leading-relaxed">
52
55
  {{ item }}
53
56
  </div>
54
57
  </div>
@@ -1,26 +1,30 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { Card, CardContent } from '../ui/card';
3
3
  import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '../ui/table';
4
4
 
5
5
  // Props
6
- const props = defineProps({
7
- headers: { type: Array, default: () => [] },
8
- rows: { type: Array, default: () => [] },
9
- highlightCol: { type: Number, default: -1 }
6
+ const props = withDefaults(defineProps<{
7
+ headers?: string[];
8
+ rows?: string[][];
9
+ highlightCol?: number;
10
+ }>(), {
11
+ headers: () => [],
12
+ rows: () => [],
13
+ highlightCol: -1
10
14
  });
11
15
 
12
16
  // Header cell classes
13
- const getHeaderClasses = colIndex => {
14
- const baseClasses = 'text-left font-semibold text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)]';
15
- const highlightClass = props.highlightCol === colIndex ? 'bg-[var(--bg-selected-light)] dark:bg-[var(--bg-selected-dark)]' : '';
17
+ const getHeaderClasses = (colIndex: number) => {
18
+ const baseClasses = 'text-left font-semibold text-(--text-primary-light) dark:text-(--text-primary-dark)';
19
+ const highlightClass = props.highlightCol === colIndex ? 'bg-(--bg-selected-light) dark:bg-(--bg-selected-dark)' : '';
16
20
  return [baseClasses, highlightClass];
17
21
  };
18
22
 
19
23
  // Body cell classes
20
- const getCellClasses = colIndex => {
21
- const baseClasses = 'align-top text-[var(--text-primary-light)] dark:text-[var(--text-primary-dark)] leading-relaxed whitespace-normal';
22
- const firstColClass = colIndex === 0 ? 'font-semibold text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]' : '';
23
- const highlightClass = props.highlightCol === colIndex ? 'bg-[var(--bg-selected-light)] dark:bg-[var(--bg-selected-dark)]' : '';
24
+ const getCellClasses = (colIndex: number) => {
25
+ const baseClasses = 'align-top text-(--text-primary-light) dark:text-(--text-primary-dark) leading-relaxed whitespace-normal';
26
+ const firstColClass = colIndex === 0 ? 'font-semibold text-(--text-secondary-light) dark:text-(--text-secondary-dark)' : '';
27
+ const highlightClass = props.highlightCol === colIndex ? 'bg-(--bg-selected-light) dark:bg-(--bg-selected-dark)' : '';
24
28
  return [baseClasses, firstColClass, highlightClass];
25
29
  };
26
30
  </script>
@@ -33,7 +37,7 @@ const getCellClasses = colIndex => {
33
37
  <Table class="w-full text-sm text-left">
34
38
  <!-- Table header -->
35
39
  <TableHeader>
36
- <TableRow class="bg-transparent text-sm text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] hover:bg-transparent">
40
+ <TableRow class="bg-transparent text-sm text-(--text-secondary-light) dark:text-(--text-secondary-dark) hover:bg-transparent">
37
41
  <TableHead v-for="(header, colIndex) in props.headers" :key="colIndex" :class="getHeaderClasses(colIndex)">
38
42
  {{ header }}
39
43
  </TableHead>
@@ -42,7 +46,7 @@ const getCellClasses = colIndex => {
42
46
 
43
47
  <!-- Table body -->
44
48
  <TableBody>
45
- <TableRow v-for="(row, rowIndex) in props.rows" :key="rowIndex" class="text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)] hover:bg-transparent">
49
+ <TableRow v-for="(row, rowIndex) in props.rows" :key="rowIndex" class="text-(--text-secondary-light) dark:text-(--text-secondary-dark) hover:bg-transparent">
46
50
  <TableCell v-for="(cell, colIndex) in row" :key="colIndex" :class="getCellClasses(colIndex)">
47
51
  {{ cell }}
48
52
  </TableCell>
@@ -1,10 +1,13 @@
1
- <script setup>
1
+ <script setup lang="ts">
2
2
  import { ChartLineData02Icon } from '@hugeicons/core-free-icons';
3
3
  import { HugeiconsIcon } from '@hugeicons/vue';
4
+ import type { HugeiconsIconDefinition } from '../../lib/common-types';
4
5
 
5
6
  // Props
6
- const props = defineProps({
7
- icon: { type: Object, default: () => ChartLineData02Icon }
7
+ const props = withDefaults(defineProps<{
8
+ icon?: HugeiconsIconDefinition;
9
+ }>(), {
10
+ icon: () => ChartLineData02Icon
8
11
  });
9
12
  </script>
10
13
 
@@ -12,15 +15,15 @@ const props = defineProps({
12
15
  <div aria-hidden="true" class="not-prose my-6 sm:my-12">
13
16
  <div class="flex items-center gap-3 sm:gap-4">
14
17
  <!-- Left line -->
15
- <div class="h-px flex-1 bg-gradient-to-r from-transparent via-[var(--border-light)] to-[var(--border-light)] dark:via-[var(--border-dark)] dark:to-[var(--border-dark)]" />
18
+ <div class="h-px flex-1 bg-linear-to-r from-transparent via-(--border-light) to-(--border-light) dark:via-(--border-dark) dark:to-(--border-dark)" />
16
19
 
17
20
  <!-- Icon in the middle -->
18
- <div class="flex h-9 w-9 items-center justify-center rounded bg-[var(--bg-card-light)] dark:bg-[var(--bg-card-dark)] border border-[var(--border-light)] dark:border-[var(--border-dark)]">
19
- <HugeiconsIcon :icon="props.icon" class="size-4 text-[var(--text-secondary-light)] dark:text-[var(--text-secondary-dark)]" />
21
+ <div class="flex h-9 w-9 items-center justify-center rounded bg-(--bg-card-light) dark:bg-(--bg-card-dark) border border-(--border-light) dark:border-(--border-dark)">
22
+ <HugeiconsIcon :icon="props.icon" class="size-4 text-(--text-secondary-light) dark:text-(--text-secondary-dark)" />
20
23
  </div>
21
24
 
22
25
  <!-- Right line -->
23
- <div class="h-px flex-1 bg-gradient-to-l from-transparent via-[var(--border-light)] to-[var(--border-light)] dark:via-[var(--border-dark)] dark:to-[var(--border-dark)]" />
26
+ <div class="h-px flex-1 bg-linear-to-l from-transparent via-(--border-light) to-(--border-light) dark:via-(--border-dark) dark:to-(--border-dark)" />
24
27
  </div>
25
28
  </div>
26
29
  </template>
@@ -0,0 +1,70 @@
1
+ <script setup lang="ts">
2
+ import { CheckmarkCircle02Icon, Copy01Icon, TerminalIcon } from '@hugeicons/core-free-icons';
3
+ import { HugeiconsIcon } from '@hugeicons/vue';
4
+ import { computed, ref } from 'vue';
5
+ import { useI18n } from 'vue-i18n';
6
+ import { Button } from '../ui/button';
7
+ import { Card } from '../ui/card';
8
+
9
+ // Props
10
+ const props = withDefaults(defineProps<{
11
+ commands?: string[];
12
+ title?: string;
13
+ prompt?: string;
14
+ copyable?: boolean;
15
+ }>(), {
16
+ commands: () => [],
17
+ title: '',
18
+ prompt: '$',
19
+ copyable: true
20
+ });
21
+
22
+ const { t } = useI18n();
23
+ const copied = ref(false);
24
+ const commandText = computed(() => props.commands.join('\n'));
25
+ const resolvedTitle = computed(() => props.title || t('uiVintage.terminal.title'));
26
+
27
+ // Copy all command lines to the clipboard
28
+ const copyCommands = async () => {
29
+ // Check if copy is enabled
30
+ if (!props.copyable || !commandText.value || !navigator.clipboard) {
31
+ return;
32
+ }
33
+
34
+ // Copy the command text to the clipboard
35
+ await navigator.clipboard.writeText(commandText.value);
36
+ copied.value = true;
37
+ window.setTimeout(() => {
38
+ copied.value = false;
39
+ }, 1800);
40
+ };
41
+ </script>
42
+
43
+ <template>
44
+ <div class="not-prose my-6 sm:my-12">
45
+ <Card class="gap-0! sm:gap-0! overflow-hidden p-0! text-(--text-primary-light) dark:text-(--text-primary-dark)">
46
+ <!-- Terminal header -->
47
+ <div class="flex items-center justify-between gap-3 border-b border-(--border-light) bg-(--bg-card-light) px-3 py-2 sm:px-4 dark:border-(--border-dark) dark:bg-(--bg-card-dark)">
48
+ <div class="flex min-w-0 items-center gap-2">
49
+ <HugeiconsIcon :icon="TerminalIcon" class="size-4 shrink-0 text-(--text-secondary-light) dark:text-(--text-secondary-dark)" />
50
+ <span class="truncate text-xs font-semibold text-(--text-secondary-light) dark:text-(--text-secondary-dark)">{{ resolvedTitle }}</span>
51
+ </div>
52
+
53
+ <!-- Copy command button -->
54
+ <Button v-if="props.copyable"
55
+ variant="ghost"
56
+ size="icon"
57
+ class="size-7 text-(--text-secondary-light) hover:bg-(--bg-selected-light) hover:text-(--text-primary-light) dark:text-(--text-secondary-dark) dark:hover:bg-(--bg-selected-dark) dark:hover:text-(--text-primary-dark)"
58
+ :aria-label="t('uiVintage.terminal.copy')"
59
+ :title="t('uiVintage.terminal.copy')"
60
+ :disabled="!commandText"
61
+ @click="copyCommands">
62
+ <HugeiconsIcon :icon="copied ? CheckmarkCircle02Icon : Copy01Icon" class="size-4" />
63
+ </Button>
64
+ </div>
65
+
66
+ <!-- Terminal commands -->
67
+ <pre class="overflow-x-auto bg-(--bg-surface-light) px-4 py-3 text-xs leading-6 dark:bg-(--bg-surface-dark) sm:px-5 sm:py-4 sm:text-sm"><code><span v-for="(command, index) in props.commands" :key="`${command}-${index}`" class="flex min-w-max"><span class="mr-3 select-none text-(--text-secondary-light) dark:text-(--text-secondary-dark)" aria-hidden="true">{{ props.prompt }}</span><span>{{ command }}</span></span></code></pre>
68
+ </Card>
69
+ </div>
70
+ </template>
@@ -1,3 +1,4 @@
1
1
  export { default as BlogList } from './BlogList.vue';
2
2
  export { default as BlogTable } from './BlogTable.vue';
3
- export { default as ProseHr } from './ProseHr.vue';
3
+ export { default as ProseHr } from './ProseHr.vue';
4
+ export { default as Terminal } from './Terminal.vue';
@@ -1,91 +1,70 @@
1
1
  <script setup lang="ts">
2
- import { NuxtImg } from "#components";
3
- import type { Component, HTMLAttributes } from "vue";
4
- import { HugeiconsIcon } from "@hugeicons/vue";
5
- import BackgroundGrid from "../background-grid/BackgroundGrid.vue";
6
- import { ThemeSelector } from "../theme-selector";
7
- import { Separator } from "../ui/separator";
8
- import {
9
- Sidebar,
10
- SidebarContent,
11
- SidebarFooter,
12
- SidebarGroup,
13
- SidebarGroupContent,
14
- SidebarGroupLabel,
15
- SidebarHeader,
16
- SidebarInset,
17
- SidebarMenu,
18
- SidebarMenuButton,
19
- SidebarMenuItem,
20
- SidebarProvider,
21
- SidebarTrigger
22
- } from "../ui/sidebar";
23
- import { cn } from "../../lib/utils";
24
-
25
- type HugeiconsIconDefinition = readonly (readonly [string, { readonly [key: string]: string | number }])[];
26
-
27
- interface DashboardSidebarItem {
28
- id: string;
29
- label: string;
30
- description?: string;
31
- icon?: HugeiconsIconDefinition | null;
32
- href?: string;
33
- to?: unknown;
34
- active?: boolean;
35
- newTab?: boolean;
36
- }
37
-
38
- interface DashboardSidebarSection {
39
- id: string;
40
- label?: string;
41
- items: DashboardSidebarItem[];
42
- }
43
-
44
- interface DashboardShellProps {
2
+ import { NuxtImg } from '#components';
3
+ import type { Component, HTMLAttributes } from 'vue';
4
+ import { HugeiconsIcon } from '@hugeicons/vue';
5
+ import BackgroundGrid from '../background-grid/BackgroundGrid.vue';
6
+ import { ThemeSelector } from '../theme-selector';
7
+ import { Separator } from '../ui/separator';
8
+ import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarProvider, SidebarTrigger } from '../ui/sidebar';
9
+ import { cn } from '../../lib/utils';
10
+ import type { HugeiconsIconDefinition } from '../../lib/common-types';
11
+
12
+ // Props
13
+ const props = withDefaults(defineProps<{
45
14
  appName?: string;
46
15
  appLogo?: string;
47
16
  appLinkTo?: string;
48
17
  title?: string;
49
18
  description?: string;
50
- collapsible?: "offcanvas" | "icon" | "none";
19
+ collapsible?: 'offcanvas' | 'icon' | 'none';
51
20
  compact?: boolean;
52
- sidebarSections?: DashboardSidebarSection[];
21
+ sidebarSections?: Array<{
22
+ id: string;
23
+ label?: string;
24
+ items: Array<{
25
+ id: string;
26
+ label: string;
27
+ description?: string;
28
+ icon?: HugeiconsIconDefinition | null;
29
+ href?: string;
30
+ to?: unknown;
31
+ active?: boolean;
32
+ newTab?: boolean;
33
+ }>;
34
+ }>;
53
35
  sidebarLinkComponent?: Component | string;
54
36
  showBackground?: boolean;
55
- insetClass?: HTMLAttributes["class"];
56
- topbarClass?: HTMLAttributes["class"];
57
- contentContainerClass?: HTMLAttributes["class"];
58
- }
59
-
60
- // Props
61
- const props = withDefaults(defineProps<DashboardShellProps>(), {
62
- appName: "",
63
- appLogo: "",
64
- appLinkTo: "/",
65
- title: "",
66
- description: "",
67
- collapsible: "offcanvas",
37
+ insetClass?: HTMLAttributes['class'];
38
+ topbarClass?: HTMLAttributes['class'];
39
+ contentContainerClass?: HTMLAttributes['class'];
40
+ }>(), {
41
+ appName: '',
42
+ appLogo: '',
43
+ appLinkTo: '/',
44
+ title: '',
45
+ description: '',
46
+ collapsible: 'offcanvas',
68
47
  compact: false,
69
48
  sidebarSections: () => [],
70
- sidebarLinkComponent: "a",
49
+ sidebarLinkComponent: 'a',
71
50
  showBackground: true
72
51
  });
73
52
 
74
53
  // Resolve link props for sidebar items
75
- const getSidebarItemLinkProps = (item: DashboardSidebarItem) => {
76
- const sharedProps = item.newTab ? { target: "_blank", rel: "noopener noreferrer" } : {};
54
+ const getSidebarItemLinkProps = (item: NonNullable<typeof props.sidebarSections>[number]['items'][number]) => {
55
+ const sharedProps = item.newTab ? { target: '_blank', rel: 'noopener noreferrer' } : {};
77
56
 
78
57
  // If the link component is an anchor, use href. Otherwise, use to for router links.
79
- if (props.sidebarLinkComponent === "a") {
58
+ if (props.sidebarLinkComponent === 'a') {
80
59
  return {
81
- href: item.href ?? "#",
60
+ href: item.href ?? '#',
82
61
  ...sharedProps
83
62
  };
84
63
  }
85
64
 
86
65
  // For non-anchor link components, assume they use a "to" prop (like Vue Router's <RouterLink>).
87
66
  return {
88
- to: item.to ?? item.href ?? "/",
67
+ to: item.to ?? item.href ?? '/',
89
68
  ...sharedProps
90
69
  };
91
70
  };
@@ -1,2 +1,2 @@
1
- export { default } from "./DashboardShell.vue";
2
- export { default as DashboardShell } from "./DashboardShell.vue";
1
+ export { default } from './DashboardShell.vue';
2
+ export { default as DashboardShell } from './DashboardShell.vue';
@@ -1,19 +1,17 @@
1
- <script lang="ts" setup>
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../lib/utils"
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <table
12
- data-slot="data-list"
13
- :class="cn('w-full text-left text-xs md:text-sm', props.class)"
14
- >
15
- <tbody class="border-y border-border">
16
- <slot />
17
- </tbody>
18
- </table>
12
+ <table data-slot="data-list" :class="cn('w-full text-left text-xs md:text-sm', props.class)">
13
+ <tbody class="border-y border-border">
14
+ <slot />
15
+ </tbody>
16
+ </table>
19
17
  </template>
@@ -1,17 +1,15 @@
1
- <script lang="ts" setup>
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../lib/utils"
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <tr
12
- data-slot="data-list-item"
13
- :class="cn('border-b border-border last:border-b-0', props.class)"
14
- >
15
- <slot />
16
- </tr>
12
+ <tr data-slot="data-list-item" :class="cn('border-b border-border last:border-b-0', props.class)">
13
+ <slot />
14
+ </tr>
17
15
  </template>
@@ -1,17 +1,15 @@
1
- <script lang="ts" setup>
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../lib/utils"
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <td
12
- data-slot="data-list-label"
13
- :class="cn('py-3 align-top text-muted-foreground', props.class)"
14
- >
15
- <slot />
16
- </td>
12
+ <td data-slot="data-list-label" :class="cn('py-3 align-top text-muted-foreground', props.class)">
13
+ <slot />
14
+ </td>
17
15
  </template>
@@ -1,17 +1,15 @@
1
- <script lang="ts" setup>
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../lib/utils"
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <div
12
- data-slot="data-list-text"
13
- :class="cn('line-clamp-3', props.class)"
14
- >
15
- <slot />
16
- </div>
12
+ <div data-slot="data-list-text" :class="cn('line-clamp-3', props.class)">
13
+ <slot />
14
+ </div>
17
15
  </template>
@@ -1,17 +1,15 @@
1
- <script lang="ts" setup>
2
- import type { HTMLAttributes } from "vue"
3
- import { cn } from "../../lib/utils"
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '../../lib/utils';
4
4
 
5
+ // Props
5
6
  const props = defineProps<{
6
- class?: HTMLAttributes["class"]
7
- }>()
7
+ class?: HTMLAttributes['class'];
8
+ }>();
8
9
  </script>
9
10
 
10
11
  <template>
11
- <td
12
- data-slot="data-list-value"
13
- :class="cn('py-3 pl-2 align-top text-right font-semibold text-foreground', props.class)"
14
- >
15
- <slot />
16
- </td>
12
+ <td data-slot="data-list-value" :class="cn('py-3 pl-2 align-top text-right font-semibold text-foreground', props.class)">
13
+ <slot />
14
+ </td>
17
15
  </template>
@@ -1,5 +1,5 @@
1
- export { default as DataList } from "./DataList.vue"
2
- export { default as DataListItem } from "./DataListItem.vue"
3
- export { default as DataListLabel } from "./DataListLabel.vue"
4
- export { default as DataListText } from "./DataListText.vue"
5
- export { default as DataListValue } from "./DataListValue.vue"
1
+ export { default as DataList } from './DataList.vue';
2
+ export { default as DataListItem } from './DataListItem.vue';
3
+ export { default as DataListLabel } from './DataListLabel.vue';
4
+ export { default as DataListText } from './DataListText.vue';
5
+ export { default as DataListValue } from './DataListValue.vue';