@salesforce/templates 66.17.0-beta.2 → 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 (159) 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 +7 -2
  7. package/lib/generators/visualforceComponentGenerator.js.map +1 -1
  8. package/lib/generators/visualforcePageGenerator.js +5 -0
  9. package/lib/generators/visualforcePageGenerator.js.map +1 -1
  10. package/lib/i18n/i18n.d.ts +2 -0
  11. package/lib/i18n/i18n.js +2 -0
  12. package/lib/i18n/i18n.js.map +1 -1
  13. package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +1204 -998
  14. package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +1210 -1004
  15. package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +2166 -1676
  16. package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +2172 -1682
  17. package/lib/templates/uiBundles/angularbasic/package-lock.json +1204 -998
  18. package/lib/templates/uiBundles/reactbasic/package-lock.json +2166 -1676
  19. package/lib/templates/uiBundles/vuebasic/.forceignore +15 -0
  20. package/lib/templates/uiBundles/vuebasic/.graphqlrc.yml +2 -0
  21. package/lib/templates/uiBundles/vuebasic/.prettierignore +9 -0
  22. package/lib/templates/uiBundles/vuebasic/.prettierrc +11 -0
  23. package/lib/templates/uiBundles/vuebasic/README.md +43 -0
  24. package/lib/templates/uiBundles/vuebasic/_uibundle.uibundle-meta.xml +7 -0
  25. package/lib/templates/uiBundles/vuebasic/codegen.yml +95 -0
  26. package/lib/templates/uiBundles/vuebasic/components.json +19 -0
  27. package/lib/templates/uiBundles/vuebasic/eslint.config.js +110 -0
  28. package/lib/templates/uiBundles/vuebasic/index.html +12 -0
  29. package/lib/templates/uiBundles/vuebasic/package-lock.json +15489 -0
  30. package/lib/templates/uiBundles/vuebasic/package.json +72 -0
  31. package/lib/templates/uiBundles/vuebasic/playwright.config.ts +24 -0
  32. package/lib/templates/uiBundles/vuebasic/scripts/get-graphql-schema.mjs +71 -0
  33. package/lib/templates/uiBundles/vuebasic/scripts/rewrite-e2e-assets.mjs +23 -0
  34. package/lib/templates/uiBundles/vuebasic/src/App.vue +5 -0
  35. package/lib/templates/uiBundles/vuebasic/src/api/graphqlClient.ts +44 -0
  36. package/lib/templates/uiBundles/vuebasic/src/appLayout.vue +80 -0
  37. package/lib/templates/uiBundles/vuebasic/src/components/alerts/status-alert.vue +59 -0
  38. package/lib/templates/uiBundles/vuebasic/src/components/layouts/card-layout.vue +30 -0
  39. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/Alert.vue +21 -0
  40. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertAction.vue +17 -0
  41. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertDescription.vue +22 -0
  42. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertTitle.vue +22 -0
  43. package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/index.ts +25 -0
  44. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/Avatar.vue +23 -0
  45. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/AvatarFallback.vue +31 -0
  46. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/AvatarImage.vue +16 -0
  47. package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/index.ts +3 -0
  48. package/lib/templates/uiBundles/vuebasic/src/components/ui/button/Button.vue +33 -0
  49. package/lib/templates/uiBundles/vuebasic/src/components/ui/button/index.ts +43 -0
  50. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/Card.vue +29 -0
  51. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardAction.vue +22 -0
  52. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardContent.vue +17 -0
  53. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardDescription.vue +17 -0
  54. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardFooter.vue +22 -0
  55. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardHeader.vue +22 -0
  56. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardTitle.vue +22 -0
  57. package/lib/templates/uiBundles/vuebasic/src/components/ui/card/index.ts +7 -0
  58. package/lib/templates/uiBundles/vuebasic/src/components/ui/checkbox/Checkbox.vue +43 -0
  59. package/lib/templates/uiBundles/vuebasic/src/components/ui/checkbox/index.ts +1 -0
  60. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/Collapsible.vue +19 -0
  61. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/CollapsibleContent.vue +12 -0
  62. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  63. package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/index.ts +3 -0
  64. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/Dialog.vue +15 -0
  65. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogClose.vue +12 -0
  66. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogContent.vue +59 -0
  67. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogDescription.vue +31 -0
  68. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogFooter.vue +33 -0
  69. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogHeader.vue +17 -0
  70. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogOverlay.vue +31 -0
  71. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogPortal.vue +12 -0
  72. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogTitle.vue +26 -0
  73. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogTrigger.vue +12 -0
  74. package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/index.ts +10 -0
  75. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
  76. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +51 -0
  77. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
  78. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  79. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuItem.vue +44 -0
  80. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +30 -0
  81. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +12 -0
  82. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
  83. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +52 -0
  84. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +26 -0
  85. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
  86. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  87. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +37 -0
  88. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +38 -0
  89. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  90. package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/index.ts +15 -0
  91. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/Field.vue +27 -0
  92. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldContent.vue +22 -0
  93. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldDescription.vue +24 -0
  94. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldError.vue +48 -0
  95. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldGroup.vue +22 -0
  96. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldLabel.vue +24 -0
  97. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldLegend.vue +29 -0
  98. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldSeparator.vue +31 -0
  99. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldSet.vue +22 -0
  100. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldTitle.vue +22 -0
  101. package/lib/templates/uiBundles/vuebasic/src/components/ui/field/index.ts +33 -0
  102. package/lib/templates/uiBundles/vuebasic/src/components/ui/index.ts +115 -0
  103. package/lib/templates/uiBundles/vuebasic/src/components/ui/input/Input.vue +30 -0
  104. package/lib/templates/uiBundles/vuebasic/src/components/ui/input/index.ts +1 -0
  105. package/lib/templates/uiBundles/vuebasic/src/components/ui/label/Label.vue +29 -0
  106. package/lib/templates/uiBundles/vuebasic/src/components/ui/label/index.ts +1 -0
  107. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/Pagination.vue +17 -0
  108. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationContent.vue +15 -0
  109. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationEllipsis.vue +23 -0
  110. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationItem.vue +7 -0
  111. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationLink.vue +31 -0
  112. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationNext.vue +29 -0
  113. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationPrevious.vue +29 -0
  114. package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/index.ts +7 -0
  115. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/Popover.vue +15 -0
  116. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverAnchor.vue +12 -0
  117. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverContent.vue +44 -0
  118. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverDescription.vue +17 -0
  119. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverHeader.vue +17 -0
  120. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverTitle.vue +14 -0
  121. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverTrigger.vue +12 -0
  122. package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/index.ts +7 -0
  123. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/Select.vue +15 -0
  124. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectContent.vue +65 -0
  125. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectGroup.vue +26 -0
  126. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectItem.vue +41 -0
  127. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectLabel.vue +26 -0
  128. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectScrollDownButton.vue +32 -0
  129. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectScrollUpButton.vue +32 -0
  130. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectSeparator.vue +24 -0
  131. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectTrigger.vue +45 -0
  132. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectValue.vue +12 -0
  133. package/lib/templates/uiBundles/vuebasic/src/components/ui/select/index.ts +10 -0
  134. package/lib/templates/uiBundles/vuebasic/src/components/ui/separator/Separator.vue +33 -0
  135. package/lib/templates/uiBundles/vuebasic/src/components/ui/separator/index.ts +1 -0
  136. package/lib/templates/uiBundles/vuebasic/src/components/ui/skeleton/Skeleton.vue +15 -0
  137. package/lib/templates/uiBundles/vuebasic/src/components/ui/skeleton/index.ts +1 -0
  138. package/lib/templates/uiBundles/vuebasic/src/components/ui/sonner/Sonner.vue +29 -0
  139. package/lib/templates/uiBundles/vuebasic/src/components/ui/sonner/index.ts +3 -0
  140. package/lib/templates/uiBundles/vuebasic/src/components/ui/spinner/Spinner.vue +17 -0
  141. package/lib/templates/uiBundles/vuebasic/src/components/ui/spinner/index.ts +1 -0
  142. package/lib/templates/uiBundles/vuebasic/src/composables/useAsyncData.ts +69 -0
  143. package/lib/templates/uiBundles/vuebasic/src/lib/utils.ts +6 -0
  144. package/lib/templates/uiBundles/vuebasic/src/main.ts +6 -0
  145. package/lib/templates/uiBundles/vuebasic/src/pages/Home.vue +10 -0
  146. package/lib/templates/uiBundles/vuebasic/src/pages/NotFound.vue +18 -0
  147. package/lib/templates/uiBundles/vuebasic/src/router-utils.ts +32 -0
  148. package/lib/templates/uiBundles/vuebasic/src/router.ts +40 -0
  149. package/lib/templates/uiBundles/vuebasic/src/styles/global.css +134 -0
  150. package/lib/templates/uiBundles/vuebasic/src/test/setup.ts +1 -0
  151. package/lib/templates/uiBundles/vuebasic/tsconfig.json +45 -0
  152. package/lib/templates/uiBundles/vuebasic/tsconfig.node.json +13 -0
  153. package/lib/templates/uiBundles/vuebasic/ui-bundle.json +7 -0
  154. package/lib/templates/uiBundles/vuebasic/vite-env.d.ts +14 -0
  155. package/lib/templates/uiBundles/vuebasic/vite.config.ts +106 -0
  156. package/lib/templates/uiBundles/vuebasic/vitest-env.d.ts +2 -0
  157. package/lib/utils/constants.d.ts +1 -1
  158. package/lib/utils/constants.js +1 -1
  159. package/package.json +2 -1
@@ -0,0 +1,43 @@
1
+ import type { VariantProps } from 'class-variance-authority';
2
+ import { cva } from 'class-variance-authority';
3
+
4
+ export { default as Button } from './Button.vue';
5
+
6
+ export const buttonVariants = cva(
7
+ "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 rounded-lg border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4 inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none shrink-0 [&_svg]:shrink-0 outline-none group/button select-none",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: 'bg-primary text-primary-foreground [a]:hover:bg-primary/80',
12
+ outline:
13
+ 'border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground',
14
+ secondary:
15
+ 'bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
16
+ ghost:
17
+ 'hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground',
18
+ destructive:
19
+ 'bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-red-700 dark:text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30',
20
+ link: 'text-primary underline-offset-4 hover:underline',
21
+ },
22
+ size: {
23
+ default:
24
+ 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
25
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
26
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
27
+ lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3',
28
+ icon: 'size-8',
29
+ 'icon-xs':
30
+ "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
31
+ 'icon-sm':
32
+ 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',
33
+ 'icon-lg': 'size-9',
34
+ },
35
+ },
36
+ defaultVariants: {
37
+ variant: 'default',
38
+ size: 'default',
39
+ },
40
+ }
41
+ );
42
+
43
+ export type ButtonVariants = VariantProps<typeof buttonVariants>;
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { cn } from '@/lib/utils';
4
+
5
+ const props = withDefaults(
6
+ defineProps<{
7
+ class?: HTMLAttributes['class'];
8
+ size?: 'default' | 'sm';
9
+ }>(),
10
+ {
11
+ size: 'default',
12
+ }
13
+ );
14
+ </script>
15
+
16
+ <template>
17
+ <div
18
+ data-slot="card"
19
+ :data-size="size"
20
+ :class="
21
+ cn(
22
+ 'ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col',
23
+ props.class
24
+ )
25
+ "
26
+ >
27
+ <slot />
28
+ </div>
29
+ </template>
@@ -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="card-action"
13
+ :class="
14
+ cn(
15
+ 'col-start-2 row-span-2 row-start-1 self-start justify-self-end',
16
+ props.class
17
+ )
18
+ "
19
+ >
20
+ <slot />
21
+ </div>
22
+ </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="card-content"
13
+ :class="cn('px-4 group-data-[size=sm]/card:px-3', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
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="card-description"
13
+ :class="cn('text-muted-foreground text-sm', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -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="card-footer"
13
+ :class="
14
+ cn(
15
+ 'bg-muted/50 rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3 flex items-center',
16
+ props.class
17
+ )
18
+ "
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -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="card-header"
13
+ :class="
14
+ cn(
15
+ 'gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]',
16
+ props.class
17
+ )
18
+ "
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -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="card-title"
13
+ :class="
14
+ cn(
15
+ 'text-base leading-snug font-medium group-data-[size=sm]/card:text-sm',
16
+ props.class
17
+ )
18
+ "
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -0,0 +1,7 @@
1
+ export { default as Card } from './Card.vue';
2
+ export { default as CardHeader } from './CardHeader.vue';
3
+ export { default as CardFooter } from './CardFooter.vue';
4
+ export { default as CardTitle } from './CardTitle.vue';
5
+ export { default as CardAction } from './CardAction.vue';
6
+ export { default as CardDescription } from './CardDescription.vue';
7
+ export { default as CardContent } from './CardContent.vue';
@@ -0,0 +1,43 @@
1
+ <script setup lang="ts">
2
+ import type { CheckboxRootEmits, CheckboxRootProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { CheckIcon } from '@lucide/vue';
6
+ import { CheckboxIndicator, CheckboxRoot, useForwardPropsEmits } from 'reka-ui';
7
+ import { cn } from '@/lib/utils';
8
+
9
+ const props = defineProps<
10
+ CheckboxRootProps & { class?: HTMLAttributes['class'] }
11
+ >();
12
+ const emits = defineEmits<CheckboxRootEmits>();
13
+
14
+ const delegatedProps = computed(() => {
15
+ const { class: _class, ...rest } = props;
16
+ return rest;
17
+ });
18
+
19
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
20
+ </script>
21
+
22
+ <template>
23
+ <CheckboxRoot
24
+ v-slot="slotProps"
25
+ data-slot="checkbox"
26
+ v-bind="forwarded"
27
+ :class="
28
+ cn(
29
+ 'peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50',
30
+ props.class
31
+ )
32
+ "
33
+ >
34
+ <CheckboxIndicator
35
+ data-slot="checkbox-indicator"
36
+ class="grid place-content-center text-current transition-none"
37
+ >
38
+ <slot v-bind="slotProps">
39
+ <CheckIcon class="size-3.5" />
40
+ </slot>
41
+ </CheckboxIndicator>
42
+ </CheckboxRoot>
43
+ </template>
@@ -0,0 +1 @@
1
+ export { default as Checkbox } from './Checkbox.vue';
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { CollapsibleRootEmits, CollapsibleRootProps } from 'reka-ui';
3
+ import { CollapsibleRoot, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<CollapsibleRootProps>();
6
+ const emits = defineEmits<CollapsibleRootEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <CollapsibleRoot
13
+ v-slot="slotProps"
14
+ data-slot="collapsible"
15
+ v-bind="forwarded"
16
+ >
17
+ <slot v-bind="slotProps" />
18
+ </CollapsibleRoot>
19
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { CollapsibleContentProps } from 'reka-ui';
3
+ import { CollapsibleContent } from 'reka-ui';
4
+
5
+ const props = defineProps<CollapsibleContentProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <CollapsibleContent data-slot="collapsible-content" v-bind="props">
10
+ <slot />
11
+ </CollapsibleContent>
12
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { CollapsibleTriggerProps } from 'reka-ui';
3
+ import { CollapsibleTrigger } from 'reka-ui';
4
+
5
+ const props = defineProps<CollapsibleTriggerProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <CollapsibleTrigger data-slot="collapsible-trigger" v-bind="props">
10
+ <slot />
11
+ </CollapsibleTrigger>
12
+ </template>
@@ -0,0 +1,3 @@
1
+ export { default as Collapsible } from './Collapsible.vue';
2
+ export { default as CollapsibleContent } from './CollapsibleContent.vue';
3
+ export { default as CollapsibleTrigger } from './CollapsibleTrigger.vue';
@@ -0,0 +1,15 @@
1
+ <script setup lang="ts">
2
+ import type { DialogRootEmits, DialogRootProps } from 'reka-ui';
3
+ import { DialogRoot, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<DialogRootProps>();
6
+ const emits = defineEmits<DialogRootEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <DialogRoot v-slot="slotProps" data-slot="dialog" v-bind="forwarded">
13
+ <slot v-bind="slotProps" />
14
+ </DialogRoot>
15
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { DialogCloseProps } from 'reka-ui';
3
+ import { DialogClose } from 'reka-ui';
4
+
5
+ const props = defineProps<DialogCloseProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <DialogClose data-slot="dialog-close" v-bind="props">
10
+ <slot />
11
+ </DialogClose>
12
+ </template>
@@ -0,0 +1,59 @@
1
+ <script setup lang="ts">
2
+ import type { DialogContentEmits, DialogContentProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { XIcon } from '@lucide/vue';
6
+ import { DialogClose, DialogContent, useForwardPropsEmits } from 'reka-ui';
7
+ import { cn } from '@/lib/utils';
8
+ import { Button } from '@/components/ui/button';
9
+ import DialogPortal from './DialogPortal.vue';
10
+ import DialogOverlay from './DialogOverlay.vue';
11
+
12
+ defineOptions({
13
+ inheritAttrs: false,
14
+ });
15
+
16
+ const props = withDefaults(
17
+ defineProps<
18
+ DialogContentProps & {
19
+ class?: HTMLAttributes['class'];
20
+ showCloseButton?: boolean;
21
+ }
22
+ >(),
23
+ {
24
+ showCloseButton: true,
25
+ }
26
+ );
27
+ const emits = defineEmits<DialogContentEmits>();
28
+
29
+ const delegatedProps = computed(() => {
30
+ const { class: _class, showCloseButton: _showCloseButton, ...rest } = props;
31
+ return rest;
32
+ });
33
+
34
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
35
+ </script>
36
+
37
+ <template>
38
+ <DialogPortal>
39
+ <DialogOverlay />
40
+ <DialogContent
41
+ data-slot="dialog-content"
42
+ v-bind="{ ...$attrs, ...forwarded }"
43
+ :class="
44
+ cn(
45
+ 'bg-background 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 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 sm:max-w-sm fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none',
46
+ props.class
47
+ )
48
+ "
49
+ >
50
+ <slot />
51
+ <DialogClose v-if="showCloseButton" data-slot="dialog-close" as-child>
52
+ <Button variant="ghost" class="absolute top-2 right-2" size="icon-sm">
53
+ <XIcon />
54
+ <span class="sr-only">Close</span>
55
+ </Button>
56
+ </DialogClose>
57
+ </DialogContent>
58
+ </DialogPortal>
59
+ </template>
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import type { DialogDescriptionProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { DialogDescription } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ DialogDescriptionProps & { 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
+ <DialogDescription
20
+ data-slot="dialog-description"
21
+ v-bind="delegatedProps"
22
+ :class="
23
+ cn(
24
+ 'text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3',
25
+ props.class
26
+ )
27
+ "
28
+ >
29
+ <slot />
30
+ </DialogDescription>
31
+ </template>
@@ -0,0 +1,33 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from 'vue';
3
+ import { DialogClose } from 'reka-ui';
4
+ import { cn } from '@/lib/utils';
5
+ import { Button } from '@/components/ui/button';
6
+
7
+ const props = withDefaults(
8
+ defineProps<{
9
+ class?: HTMLAttributes['class'];
10
+ showCloseButton?: boolean;
11
+ }>(),
12
+ {
13
+ showCloseButton: false,
14
+ }
15
+ );
16
+ </script>
17
+
18
+ <template>
19
+ <div
20
+ data-slot="dialog-footer"
21
+ :class="
22
+ cn(
23
+ 'bg-muted/50 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end',
24
+ props.class
25
+ )
26
+ "
27
+ >
28
+ <slot />
29
+ <DialogClose v-if="showCloseButton" as-child>
30
+ <Button variant="outline">Close</Button>
31
+ </DialogClose>
32
+ </div>
33
+ </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="dialog-header"
13
+ :class="cn('gap-2 flex flex-col', props.class)"
14
+ >
15
+ <slot />
16
+ </div>
17
+ </template>
@@ -0,0 +1,31 @@
1
+ <script setup lang="ts">
2
+ import type { DialogOverlayProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { DialogOverlay } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ DialogOverlayProps & { 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
+ <DialogOverlay
20
+ data-slot="dialog-overlay"
21
+ v-bind="delegatedProps"
22
+ :class="
23
+ cn(
24
+ 'data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-50',
25
+ props.class
26
+ )
27
+ "
28
+ >
29
+ <slot />
30
+ </DialogOverlay>
31
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { DialogPortalProps } from 'reka-ui';
3
+ import { DialogPortal } from 'reka-ui';
4
+
5
+ const props = defineProps<DialogPortalProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <DialogPortal data-slot="dialog-portal" v-bind="props">
10
+ <slot />
11
+ </DialogPortal>
12
+ </template>
@@ -0,0 +1,26 @@
1
+ <script setup lang="ts">
2
+ import type { DialogTitleProps } from 'reka-ui';
3
+ import type { HTMLAttributes } from 'vue';
4
+ import { computed } from 'vue';
5
+ import { DialogTitle } from 'reka-ui';
6
+ import { cn } from '@/lib/utils';
7
+
8
+ const props = defineProps<
9
+ DialogTitleProps & { 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
+ <DialogTitle
20
+ data-slot="dialog-title"
21
+ v-bind="delegatedProps"
22
+ :class="cn('text-base leading-none font-medium', props.class)"
23
+ >
24
+ <slot />
25
+ </DialogTitle>
26
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { DialogTriggerProps } from 'reka-ui';
3
+ import { DialogTrigger } from 'reka-ui';
4
+
5
+ const props = defineProps<DialogTriggerProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <DialogTrigger data-slot="dialog-trigger" v-bind="props">
10
+ <slot />
11
+ </DialogTrigger>
12
+ </template>
@@ -0,0 +1,10 @@
1
+ export { default as Dialog } from './Dialog.vue';
2
+ export { default as DialogClose } from './DialogClose.vue';
3
+ export { default as DialogContent } from './DialogContent.vue';
4
+ export { default as DialogDescription } from './DialogDescription.vue';
5
+ export { default as DialogFooter } from './DialogFooter.vue';
6
+ export { default as DialogHeader } from './DialogHeader.vue';
7
+ export { default as DialogOverlay } from './DialogOverlay.vue';
8
+ export { default as DialogPortal } from './DialogPortal.vue';
9
+ export { default as DialogTitle } from './DialogTitle.vue';
10
+ export { default as DialogTrigger } from './DialogTrigger.vue';
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { DropdownMenuRootEmits, DropdownMenuRootProps } from 'reka-ui';
3
+ import { DropdownMenuRoot, useForwardPropsEmits } from 'reka-ui';
4
+
5
+ const props = defineProps<DropdownMenuRootProps>();
6
+ const emits = defineEmits<DropdownMenuRootEmits>();
7
+
8
+ const forwarded = useForwardPropsEmits(props, emits);
9
+ </script>
10
+
11
+ <template>
12
+ <DropdownMenuRoot
13
+ v-slot="slotProps"
14
+ data-slot="dropdown-menu"
15
+ v-bind="forwarded"
16
+ >
17
+ <slot v-bind="slotProps" />
18
+ </DropdownMenuRoot>
19
+ </template>
@@ -0,0 +1,51 @@
1
+ <script setup lang="ts">
2
+ import type {
3
+ DropdownMenuCheckboxItemEmits,
4
+ DropdownMenuCheckboxItemProps,
5
+ } from 'reka-ui';
6
+ import type { HTMLAttributes } from 'vue';
7
+ import { computed } from 'vue';
8
+ import { CheckIcon } from '@lucide/vue';
9
+ import {
10
+ DropdownMenuCheckboxItem,
11
+ DropdownMenuItemIndicator,
12
+ useForwardPropsEmits,
13
+ } from 'reka-ui';
14
+ import { cn } from '@/lib/utils';
15
+
16
+ const props = defineProps<
17
+ DropdownMenuCheckboxItemProps & { class?: HTMLAttributes['class'] }
18
+ >();
19
+ const emits = defineEmits<DropdownMenuCheckboxItemEmits>();
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
+ <DropdownMenuCheckboxItem
31
+ data-slot="dropdown-menu-checkbox-item"
32
+ v-bind="forwarded"
33
+ :class="
34
+ cn(
35
+ `focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,
36
+ props.class
37
+ )
38
+ "
39
+ >
40
+ <span
41
+ class="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center"
42
+ >
43
+ <DropdownMenuItemIndicator>
44
+ <slot name="indicator-icon">
45
+ <CheckIcon class="size-4" />
46
+ </slot>
47
+ </DropdownMenuItemIndicator>
48
+ </span>
49
+ <slot />
50
+ </DropdownMenuCheckboxItem>
51
+ </template>