@salesforce/templates 66.17.0-beta.3 → 66.17.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 (154) hide show
  1. package/lib/generators/lightningAppGenerator.js +7 -7
  2. package/lib/generators/lightningAppGenerator.js.map +1 -1
  3. package/lib/generators/uiBundleGenerator.d.ts +1 -0
  4. package/lib/generators/uiBundleGenerator.js +12 -0
  5. package/lib/generators/uiBundleGenerator.js.map +1 -1
  6. package/lib/generators/visualforceComponentGenerator.js +2 -2
  7. package/lib/generators/visualforceComponentGenerator.js.map +1 -1
  8. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +674 -831
  9. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +680 -837
  10. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +1765 -1639
  11. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +1771 -1645
  12. package/lib/templates/uiBundles/angularbasic/package-lock.json +674 -831
  13. package/lib/templates/uiBundles/reactbasic/package-lock.json +1765 -1639
  14. package/lib/templates/uiBundles/vuebasic/.forceignore +15 -0
  15. package/lib/templates/uiBundles/vuebasic/.graphqlrc.yml +2 -0
  16. package/lib/templates/uiBundles/vuebasic/.prettierignore +9 -0
  17. package/lib/templates/uiBundles/vuebasic/.prettierrc +11 -0
  18. package/lib/templates/uiBundles/vuebasic/README.md +43 -0
  19. package/lib/templates/uiBundles/vuebasic/_uibundle.uibundle-meta.xml +7 -0
  20. package/lib/templates/uiBundles/vuebasic/codegen.yml +95 -0
  21. package/lib/templates/uiBundles/vuebasic/components.json +19 -0
  22. package/lib/templates/uiBundles/vuebasic/eslint.config.js +110 -0
  23. package/lib/templates/uiBundles/vuebasic/index.html +12 -0
  24. package/lib/templates/uiBundles/vuebasic/package-lock.json +15489 -0
  25. package/lib/templates/uiBundles/vuebasic/package.json +72 -0
  26. package/lib/templates/uiBundles/vuebasic/playwright.config.ts +24 -0
  27. package/lib/templates/uiBundles/vuebasic/scripts/get-graphql-schema.mjs +71 -0
  28. package/lib/templates/uiBundles/vuebasic/scripts/rewrite-e2e-assets.mjs +23 -0
  29. package/lib/templates/uiBundles/vuebasic/src/App.vue +5 -0
  30. package/lib/templates/uiBundles/vuebasic/src/api/graphqlClient.ts +44 -0
  31. package/lib/templates/uiBundles/vuebasic/src/appLayout.vue +80 -0
  32. package/lib/templates/uiBundles/vuebasic/src/components/alerts/status-alert.vue +59 -0
  33. package/lib/templates/uiBundles/vuebasic/src/components/layouts/card-layout.vue +30 -0
  34. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/Alert.vue +21 -0
  35. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertAction.vue +17 -0
  36. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertDescription.vue +22 -0
  37. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertTitle.vue +22 -0
  38. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/index.ts +25 -0
  39. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/Avatar.vue +23 -0
  40. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/AvatarFallback.vue +31 -0
  41. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/AvatarImage.vue +16 -0
  42. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/index.ts +3 -0
  43. package/lib/templates/uiBundles/vuebasic/src/components/ui/button/Button.vue +33 -0
  44. package/lib/templates/uiBundles/vuebasic/src/components/ui/button/index.ts +43 -0
  45. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/Card.vue +29 -0
  46. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardAction.vue +22 -0
  47. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardContent.vue +17 -0
  48. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardDescription.vue +17 -0
  49. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardFooter.vue +22 -0
  50. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardHeader.vue +22 -0
  51. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardTitle.vue +22 -0
  52. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/index.ts +7 -0
  53. package/lib/templates/uiBundles/vuebasic/src/components/ui/checkbox/Checkbox.vue +43 -0
  54. package/lib/templates/uiBundles/vuebasic/src/components/ui/checkbox/index.ts +1 -0
  55. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/Collapsible.vue +19 -0
  56. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/CollapsibleContent.vue +12 -0
  57. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  58. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/index.ts +3 -0
  59. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/Dialog.vue +15 -0
  60. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogClose.vue +12 -0
  61. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogContent.vue +59 -0
  62. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogDescription.vue +31 -0
  63. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogFooter.vue +33 -0
  64. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogHeader.vue +17 -0
  65. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogOverlay.vue +31 -0
  66. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogPortal.vue +12 -0
  67. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogTitle.vue +26 -0
  68. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogTrigger.vue +12 -0
  69. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/index.ts +10 -0
  70. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
  71. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +51 -0
  72. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
  73. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  74. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuItem.vue +44 -0
  75. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +30 -0
  76. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +12 -0
  77. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  78. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +52 -0
  79. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +26 -0
  80. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
  81. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  82. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +37 -0
  83. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +38 -0
  84. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  85. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/index.ts +15 -0
  86. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/Field.vue +27 -0
  87. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldContent.vue +22 -0
  88. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldDescription.vue +24 -0
  89. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldError.vue +48 -0
  90. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldGroup.vue +22 -0
  91. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldLabel.vue +24 -0
  92. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldLegend.vue +29 -0
  93. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldSeparator.vue +31 -0
  94. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldSet.vue +22 -0
  95. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldTitle.vue +22 -0
  96. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/index.ts +33 -0
  97. package/lib/templates/uiBundles/vuebasic/src/components/ui/index.ts +115 -0
  98. package/lib/templates/uiBundles/vuebasic/src/components/ui/input/Input.vue +30 -0
  99. package/lib/templates/uiBundles/vuebasic/src/components/ui/input/index.ts +1 -0
  100. package/lib/templates/uiBundles/vuebasic/src/components/ui/label/Label.vue +29 -0
  101. package/lib/templates/uiBundles/vuebasic/src/components/ui/label/index.ts +1 -0
  102. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/Pagination.vue +17 -0
  103. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationContent.vue +15 -0
  104. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationEllipsis.vue +23 -0
  105. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationItem.vue +7 -0
  106. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationLink.vue +31 -0
  107. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationNext.vue +29 -0
  108. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationPrevious.vue +29 -0
  109. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/index.ts +7 -0
  110. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/Popover.vue +15 -0
  111. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverAnchor.vue +12 -0
  112. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverContent.vue +44 -0
  113. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverDescription.vue +17 -0
  114. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverHeader.vue +17 -0
  115. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverTitle.vue +14 -0
  116. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverTrigger.vue +12 -0
  117. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/index.ts +7 -0
  118. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/Select.vue +15 -0
  119. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectContent.vue +65 -0
  120. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectGroup.vue +26 -0
  121. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectItem.vue +41 -0
  122. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectLabel.vue +26 -0
  123. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectScrollDownButton.vue +32 -0
  124. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectScrollUpButton.vue +32 -0
  125. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectSeparator.vue +24 -0
  126. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectTrigger.vue +45 -0
  127. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectValue.vue +12 -0
  128. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/index.ts +10 -0
  129. package/lib/templates/uiBundles/vuebasic/src/components/ui/separator/Separator.vue +33 -0
  130. package/lib/templates/uiBundles/vuebasic/src/components/ui/separator/index.ts +1 -0
  131. package/lib/templates/uiBundles/vuebasic/src/components/ui/skeleton/Skeleton.vue +15 -0
  132. package/lib/templates/uiBundles/vuebasic/src/components/ui/skeleton/index.ts +1 -0
  133. package/lib/templates/uiBundles/vuebasic/src/components/ui/sonner/Sonner.vue +29 -0
  134. package/lib/templates/uiBundles/vuebasic/src/components/ui/sonner/index.ts +3 -0
  135. package/lib/templates/uiBundles/vuebasic/src/components/ui/spinner/Spinner.vue +17 -0
  136. package/lib/templates/uiBundles/vuebasic/src/components/ui/spinner/index.ts +1 -0
  137. package/lib/templates/uiBundles/vuebasic/src/composables/useAsyncData.ts +69 -0
  138. package/lib/templates/uiBundles/vuebasic/src/lib/utils.ts +6 -0
  139. package/lib/templates/uiBundles/vuebasic/src/main.ts +6 -0
  140. package/lib/templates/uiBundles/vuebasic/src/pages/Home.vue +10 -0
  141. package/lib/templates/uiBundles/vuebasic/src/pages/NotFound.vue +18 -0
  142. package/lib/templates/uiBundles/vuebasic/src/router-utils.ts +32 -0
  143. package/lib/templates/uiBundles/vuebasic/src/router.ts +40 -0
  144. package/lib/templates/uiBundles/vuebasic/src/styles/global.css +134 -0
  145. package/lib/templates/uiBundles/vuebasic/src/test/setup.ts +1 -0
  146. package/lib/templates/uiBundles/vuebasic/tsconfig.json +45 -0
  147. package/lib/templates/uiBundles/vuebasic/tsconfig.node.json +13 -0
  148. package/lib/templates/uiBundles/vuebasic/ui-bundle.json +7 -0
  149. package/lib/templates/uiBundles/vuebasic/vite-env.d.ts +14 -0
  150. package/lib/templates/uiBundles/vuebasic/vite.config.ts +106 -0
  151. package/lib/templates/uiBundles/vuebasic/vitest-env.d.ts +2 -0
  152. package/lib/utils/constants.d.ts +1 -1
  153. package/lib/utils/constants.js +1 -1
  154. package/package.json +2 -1
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class'];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="field-label"
13
+ :class="
14
+ cn(
15
+ 'gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50 flex w-fit items-center leading-snug',
16
+ props.class
17
+ )
18
+ "
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -0,0 +1,33 @@
1
+ import type { VariantProps } from 'class-variance-authority';
2
+ import { cva } from 'class-variance-authority';
3
+
4
+ export const fieldVariants = cva(
5
+ 'data-[invalid=true]:text-destructive gap-2 group/field flex w-full',
6
+ {
7
+ variants: {
8
+ orientation: {
9
+ vertical: 'flex-col *:w-full [&>.sr-only]:w-auto',
10
+ horizontal:
11
+ 'flex-row items-center *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',
12
+ responsive:
13
+ 'flex-col *:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ orientation: 'vertical',
18
+ },
19
+ }
20
+ );
21
+
22
+ export type FieldVariants = VariantProps<typeof fieldVariants>;
23
+
24
+ export { default as Field } from './Field.vue';
25
+ export { default as FieldContent } from './FieldContent.vue';
26
+ export { default as FieldDescription } from './FieldDescription.vue';
27
+ export { default as FieldError } from './FieldError.vue';
28
+ export { default as FieldGroup } from './FieldGroup.vue';
29
+ export { default as FieldLabel } from './FieldLabel.vue';
30
+ export { default as FieldLegend } from './FieldLegend.vue';
31
+ export { default as FieldSeparator } from './FieldSeparator.vue';
32
+ export { default as FieldSet } from './FieldSet.vue';
33
+ export { default as FieldTitle } from './FieldTitle.vue';
@@ -0,0 +1,115 @@
1
+ /**
2
+ * UI Components Index
3
+ *
4
+ * Re-exports all UI components for easier imports.
5
+ *
6
+ * Usage:
7
+ * import { Button, Input } from "@/components/ui"
8
+ *
9
+ * Instead of:
10
+ * import { Button } from "@/components/ui/button"
11
+ * import { Input } from "@/components/ui/input"
12
+ */
13
+
14
+ export {
15
+ Alert,
16
+ AlertTitle,
17
+ AlertDescription,
18
+ AlertAction,
19
+ alertVariants,
20
+ } from './alert';
21
+ export { Avatar, AvatarImage, AvatarFallback } from './avatar';
22
+ export { Button, buttonVariants } from './button';
23
+ export {
24
+ Card,
25
+ CardHeader,
26
+ CardFooter,
27
+ CardTitle,
28
+ CardAction,
29
+ CardDescription,
30
+ CardContent,
31
+ } from './card';
32
+ export { Checkbox } from './checkbox';
33
+ export {
34
+ Collapsible,
35
+ CollapsibleContent,
36
+ CollapsibleTrigger,
37
+ } from './collapsible';
38
+ export {
39
+ Dialog,
40
+ DialogClose,
41
+ DialogContent,
42
+ DialogDescription,
43
+ DialogFooter,
44
+ DialogHeader,
45
+ DialogOverlay,
46
+ DialogPortal,
47
+ DialogTitle,
48
+ DialogTrigger,
49
+ } from './dialog';
50
+ export {
51
+ DropdownMenu,
52
+ DropdownMenuPortal,
53
+ DropdownMenuTrigger,
54
+ DropdownMenuContent,
55
+ DropdownMenuGroup,
56
+ DropdownMenuLabel,
57
+ DropdownMenuItem,
58
+ DropdownMenuCheckboxItem,
59
+ DropdownMenuRadioGroup,
60
+ DropdownMenuRadioItem,
61
+ DropdownMenuSeparator,
62
+ DropdownMenuShortcut,
63
+ DropdownMenuSub,
64
+ DropdownMenuSubTrigger,
65
+ DropdownMenuSubContent,
66
+ } from './dropdown-menu';
67
+ export {
68
+ Field,
69
+ FieldContent,
70
+ FieldDescription,
71
+ FieldError,
72
+ FieldGroup,
73
+ FieldLabel,
74
+ FieldLegend,
75
+ FieldSeparator,
76
+ FieldSet,
77
+ FieldTitle,
78
+ fieldVariants,
79
+ } from './field';
80
+ export { Input } from './input';
81
+ export { Label } from './label';
82
+ export {
83
+ Pagination,
84
+ PaginationContent,
85
+ PaginationEllipsis,
86
+ PaginationItem,
87
+ PaginationLink,
88
+ PaginationNext,
89
+ PaginationPrevious,
90
+ } from './pagination';
91
+ export {
92
+ Popover,
93
+ PopoverAnchor,
94
+ PopoverContent,
95
+ PopoverDescription,
96
+ PopoverHeader,
97
+ PopoverTitle,
98
+ PopoverTrigger,
99
+ } from './popover';
100
+ export {
101
+ Select,
102
+ SelectGroup,
103
+ SelectValue,
104
+ SelectTrigger,
105
+ SelectContent,
106
+ SelectLabel,
107
+ SelectItem,
108
+ SelectSeparator,
109
+ SelectScrollUpButton,
110
+ SelectScrollDownButton,
111
+ } from './select';
112
+ export { Separator } from './separator';
113
+ export { Skeleton } from './skeleton';
114
+ export { Sonner, Toaster, toast } from './sonner';
115
+ export { Spinner } from './spinner';
@@ -0,0 +1,30 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ defineOptions({
6
+ inheritAttrs: false,
7
+ });
8
+
9
+ const props = defineProps<{
10
+ class?: HTMLAttributes['class'];
11
+ type?: string;
12
+ }>();
13
+
14
+ const modelValue = defineModel<string | number>();
15
+ </script>
16
+
17
+ <template>
18
+ <input
19
+ v-model="modelValue"
20
+ :type="type"
21
+ data-slot="input"
22
+ v-bind="$attrs"
23
+ :class="
24
+ cn(
25
+ 'dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm file:text-foreground placeholder:text-muted-foreground/70 placeholder:italic w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',
26
+ props.class
27
+ )
28
+ "
29
+ />
30
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Input } from './Input.vue';
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import type { LabelProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { Label } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<LabelProps & { class?: HTMLAttributes['class'] }>();
9
+
10
+ const delegatedProps = computed(() => {
11
+ const { class: _class, ...rest } = props;
12
+ return rest;
13
+ });
14
+ </script>
15
+
16
+ <template>
17
+ <Label
18
+ data-slot="label"
19
+ v-bind="delegatedProps"
20
+ :class="
21
+ cn(
22
+ 'gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed',
23
+ props.class
24
+ )
25
+ "
26
+ >
27
+ <slot />
28
+ </Label>
29
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Label } from './Label.vue';
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{ class?: HTMLAttributes['class'] }>();
6
+ </script>
7
+
8
+ <template>
9
+ <nav
10
+ role="navigation"
11
+ aria-label="pagination"
12
+ data-slot="pagination"
13
+ :class="cn('mx-auto flex w-full justify-center', props.class)"
14
+ >
15
+ <slot />
16
+ </nav>
17
+ </template>
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{ class?: HTMLAttributes['class'] }>();
6
+ </script>
7
+
8
+ <template>
9
+ <ul
10
+ data-slot="pagination-content"
11
+ :class="cn('gap-0.5 flex items-center', props.class)"
12
+ >
13
+ <slot />
14
+ </ul>
15
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { MoreHorizontalIcon } from '@lucide/vue';
4
+ import { cn } from '@/lib/utils';
5
+
6
+ const props = defineProps<{ class?: HTMLAttributes['class'] }>();
7
+ </script>
8
+
9
+ <template>
10
+ <span
11
+ aria-hidden
12
+ data-slot="pagination-ellipsis"
13
+ :class="
14
+ cn(
15
+ `size-8 [&_svg:not([class*='size-'])]:size-4 flex items-center justify-center`,
16
+ props.class
17
+ )
18
+ "
19
+ >
20
+ <MoreHorizontalIcon />
21
+ <span class="sr-only">More pages</span>
22
+ </span>
23
+ </template>
@@ -0,0 +1,7 @@
1
+ <script setup lang="ts"></script>
2
+
3
+ <template>
4
+ <li data-slot="pagination-item">
5
+ <slot />
6
+ </li>
7
+ </template>
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import type { ButtonVariants } from '../button';
4
+ import { cn } from '@/lib/utils';
5
+ import { Button } from '../button';
6
+
7
+ const props = withDefaults(
8
+ defineProps<{
9
+ isActive?: boolean;
10
+ size?: ButtonVariants['size'];
11
+ class?: HTMLAttributes['class'];
12
+ }>(),
13
+ {
14
+ size: 'icon',
15
+ }
16
+ );
17
+ </script>
18
+
19
+ <template>
20
+ <Button
21
+ as="a"
22
+ :variant="isActive ? 'outline' : 'ghost'"
23
+ :size="size"
24
+ :aria-current="isActive ? 'page' : undefined"
25
+ data-slot="pagination-link"
26
+ :data-active="isActive"
27
+ :class="cn(props.class)"
28
+ >
29
+ <slot />
30
+ </Button>
31
+ </template>
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { ChevronRightIcon } from '@lucide/vue';
4
+ import { cn } from '@/lib/utils';
5
+ import PaginationLink from './PaginationLink.vue';
6
+
7
+ const props = withDefaults(
8
+ defineProps<{
9
+ isActive?: boolean;
10
+ text?: string;
11
+ class?: HTMLAttributes['class'];
12
+ }>(),
13
+ {
14
+ text: 'Next',
15
+ }
16
+ );
17
+ </script>
18
+
19
+ <template>
20
+ <PaginationLink
21
+ aria-label="Go to next page"
22
+ size="default"
23
+ :is-active="isActive"
24
+ :class="cn('pr-1.5!', props.class)"
25
+ >
26
+ <span class="hidden sm:block">{{ text }}</span>
27
+ <ChevronRightIcon data-icon="inline-end" class="cn-rtl-flip" />
28
+ </PaginationLink>
29
+ </template>
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { ChevronLeftIcon } from '@lucide/vue';
4
+ import { cn } from '@/lib/utils';
5
+ import PaginationLink from './PaginationLink.vue';
6
+
7
+ const props = withDefaults(
8
+ defineProps<{
9
+ isActive?: boolean;
10
+ text?: string;
11
+ class?: HTMLAttributes['class'];
12
+ }>(),
13
+ {
14
+ text: 'Previous',
15
+ }
16
+ );
17
+ </script>
18
+
19
+ <template>
20
+ <PaginationLink
21
+ aria-label="Go to previous page"
22
+ size="default"
23
+ :is-active="isActive"
24
+ :class="cn('pl-1.5!', props.class)"
25
+ >
26
+ <ChevronLeftIcon data-icon="inline-start" class="cn-rtl-flip" />
27
+ <span class="hidden sm:block">{{ text }}</span>
28
+ </PaginationLink>
29
+ </template>
@@ -0,0 +1,7 @@
1
+ export { default as Pagination } from './Pagination.vue';
2
+ export { default as PaginationContent } from './PaginationContent.vue';
3
+ export { default as PaginationItem } from './PaginationItem.vue';
4
+ export { default as PaginationLink } from './PaginationLink.vue';
5
+ export { default as PaginationPrevious } from './PaginationPrevious.vue';
6
+ export { default as PaginationNext } from './PaginationNext.vue';
7
+ export { default as PaginationEllipsis } from './PaginationEllipsis.vue';
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { PopoverRootEmits, PopoverRootProps } from 'reka-ui';
3
+ import { PopoverRoot, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<PopoverRootProps>();
6
+ const emits = defineEmits<PopoverRootEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <PopoverRoot v-slot="slotProps" data-slot="popover" v-bind="forwarded">
13
+ <slot v-bind="slotProps" />
14
+ </PopoverRoot>
15
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { PopoverAnchorProps } from 'reka-ui';
3
+ import { PopoverAnchor } from 'reka-ui';
4
+
5
+ const props = defineProps<PopoverAnchorProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <PopoverAnchor data-slot="popover-anchor" v-bind="props">
10
+ <slot />
11
+ </PopoverAnchor>
12
+ </template>
@@ -0,0 +1,44 @@
1
+ <script setup lang="ts">
2
+ import type { PopoverContentEmits, PopoverContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { PopoverContent, PopoverPortal, useForwardPropsEmits } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ defineOptions({
9
+ inheritAttrs: false,
10
+ });
11
+
12
+ const props = withDefaults(
13
+ defineProps<PopoverContentProps & { class?: HTMLAttributes['class'] }>(),
14
+ {
15
+ align: 'center',
16
+ sideOffset: 4,
17
+ }
18
+ );
19
+ const emits = defineEmits<PopoverContentEmits>();
20
+
21
+ const delegatedProps = computed(() => {
22
+ const { class: _class, ...rest } = props;
23
+ return rest;
24
+ });
25
+
26
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
27
+ </script>
28
+
29
+ <template>
30
+ <PopoverPortal>
31
+ <PopoverContent
32
+ data-slot="popover-content"
33
+ v-bind="{ ...$attrs, ...forwarded }"
34
+ :class="
35
+ cn(
36
+ 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100 z-50 w-72 origin-(--radix-popover-content-transform-origin) outline-hidden',
37
+ props.class
38
+ )
39
+ "
40
+ >
41
+ <slot />
42
+ </PopoverContent>
43
+ </PopoverPortal>
44
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class'];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <p
12
+ data-slot="popover-description"
13
+ :class="cn('text-muted-foreground', props.class)"
14
+ >
15
+ <slot />
16
+ </p>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class'];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <div
12
+ data-slot="popover-header"
13
+ :class="cn('flex flex-col gap-0.5 text-sm', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -0,0 +1,14 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes['class'];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <div data-slot="popover-title" :class="cn('font-medium', props.class)">
12
+ <slot />
13
+ </div>
14
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { PopoverTriggerProps } from 'reka-ui';
3
+ import { PopoverTrigger } from 'reka-ui';
4
+
5
+ const props = defineProps<PopoverTriggerProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <PopoverTrigger data-slot="popover-trigger" v-bind="props">
10
+ <slot />
11
+ </PopoverTrigger>
12
+ </template>
@@ -0,0 +1,7 @@
1
+ export { default as Popover } from './Popover.vue';
2
+ export { default as PopoverAnchor } from './PopoverAnchor.vue';
3
+ export { default as PopoverContent } from './PopoverContent.vue';
4
+ export { default as PopoverDescription } from './PopoverDescription.vue';
5
+ export { default as PopoverHeader } from './PopoverHeader.vue';
6
+ export { default as PopoverTitle } from './PopoverTitle.vue';
7
+ export { default as PopoverTrigger } from './PopoverTrigger.vue';
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { SelectRootEmits, SelectRootProps } from 'reka-ui';
3
+ import { SelectRoot, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<SelectRootProps>();
6
+ const emits = defineEmits<SelectRootEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <SelectRoot v-slot="slotProps" data-slot="select" v-bind="forwarded">
13
+ <slot v-bind="slotProps" />
14
+ </SelectRoot>
15
+ </template>
@@ -0,0 +1,65 @@
1
+ <script setup lang="ts">
2
+ import type { SelectContentEmits, SelectContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import {
6
+ SelectContent,
7
+ SelectPortal,
8
+ SelectViewport,
9
+ useForwardPropsEmits,
10
+ } from 'reka-ui';
11
+ import { cn } from '@/lib/utils';
12
+ import SelectScrollDownButton from './SelectScrollDownButton.vue';
13
+ import SelectScrollUpButton from './SelectScrollUpButton.vue';
14
+
15
+ defineOptions({
16
+ inheritAttrs: false,
17
+ });
18
+
19
+ const props = withDefaults(
20
+ defineProps<SelectContentProps & { class?: HTMLAttributes['class'] }>(),
21
+ {
22
+ position: 'item-aligned',
23
+ align: 'center',
24
+ }
25
+ );
26
+ const emits = defineEmits<SelectContentEmits>();
27
+
28
+ const delegatedProps = computed(() => {
29
+ const { class: _class, ...rest } = props;
30
+ return rest;
31
+ });
32
+
33
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
34
+ </script>
35
+
36
+ <template>
37
+ <SelectPortal>
38
+ <SelectContent
39
+ data-slot="select-content"
40
+ :data-align-trigger="position === 'item-aligned'"
41
+ v-bind="{ ...$attrs, ...forwarded }"
42
+ :class="
43
+ cn(
44
+ 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100 relative z-50 max-h-(--radix-select-content-available-height) origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none',
45
+ position === 'popper' &&
46
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
47
+ props.class
48
+ )
49
+ "
50
+ >
51
+ <SelectScrollUpButton />
52
+ <SelectViewport
53
+ :data-position="position"
54
+ :class="
55
+ cn(
56
+ 'data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)'
57
+ )
58
+ "
59
+ >
60
+ <slot />
61
+ </SelectViewport>
62
+ <SelectScrollDownButton />
63
+ </SelectContent>
64
+ </SelectPortal>
65
+ </template>
@@ -0,0 +1,26 @@
1
+ <script setup lang="ts">
2
+ import type { SelectGroupProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { SelectGroup } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ SelectGroupProps & { class?: HTMLAttributes['class'] }
10
+ >();
11
+
12
+ const delegatedProps = computed(() => {
13
+ const { class: _class, ...rest } = props;
14
+ return rest;
15
+ });
16
+ </script>
17
+
18
+ <template>
19
+ <SelectGroup
20
+ data-slot="select-group"
21
+ v-bind="delegatedProps"
22
+ :class="cn('scroll-my-1 p-1', props.class)"
23
+ >
24
+ <slot />
25
+ </SelectGroup>
26
+ </template>