@salesforce/templates 66.17.0-beta.3 → 66.17.1
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.
- package/lib/generators/lightningAppGenerator.js +7 -7
- package/lib/generators/lightningAppGenerator.js.map +1 -1
- package/lib/generators/uiBundleGenerator.d.ts +1 -0
- package/lib/generators/uiBundleGenerator.js +12 -0
- package/lib/generators/uiBundleGenerator.js.map +1 -1
- package/lib/generators/visualforceComponentGenerator.js +2 -2
- package/lib/generators/visualforceComponentGenerator.js.map +1 -1
- package/lib/templates/project/angularextapp/_p_/_m_/_w_/_a_/package-lock.json +674 -831
- package/lib/templates/project/angularintapp/_p_/_m_/_w_/_a_/package-lock.json +680 -837
- package/lib/templates/project/reactexternalapp/_p_/_m_/_w_/_a_/package-lock.json +1765 -1639
- package/lib/templates/project/reactinternalapp/_p_/_m_/_w_/_a_/package-lock.json +1771 -1645
- package/lib/templates/uiBundles/angularbasic/package-lock.json +674 -831
- package/lib/templates/uiBundles/reactbasic/package-lock.json +1765 -1639
- package/lib/templates/uiBundles/vuebasic/.forceignore +15 -0
- package/lib/templates/uiBundles/vuebasic/.graphqlrc.yml +2 -0
- package/lib/templates/uiBundles/vuebasic/.prettierignore +9 -0
- package/lib/templates/uiBundles/vuebasic/.prettierrc +11 -0
- package/lib/templates/uiBundles/vuebasic/README.md +43 -0
- package/lib/templates/uiBundles/vuebasic/_uibundle.uibundle-meta.xml +7 -0
- package/lib/templates/uiBundles/vuebasic/codegen.yml +95 -0
- package/lib/templates/uiBundles/vuebasic/components.json +19 -0
- package/lib/templates/uiBundles/vuebasic/eslint.config.js +110 -0
- package/lib/templates/uiBundles/vuebasic/index.html +12 -0
- package/lib/templates/uiBundles/vuebasic/package-lock.json +15489 -0
- package/lib/templates/uiBundles/vuebasic/package.json +72 -0
- package/lib/templates/uiBundles/vuebasic/playwright.config.ts +24 -0
- package/lib/templates/uiBundles/vuebasic/scripts/get-graphql-schema.mjs +71 -0
- package/lib/templates/uiBundles/vuebasic/scripts/rewrite-e2e-assets.mjs +23 -0
- package/lib/templates/uiBundles/vuebasic/src/App.vue +5 -0
- package/lib/templates/uiBundles/vuebasic/src/api/graphqlClient.ts +44 -0
- package/lib/templates/uiBundles/vuebasic/src/appLayout.vue +80 -0
- package/lib/templates/uiBundles/vuebasic/src/components/alerts/status-alert.vue +59 -0
- package/lib/templates/uiBundles/vuebasic/src/components/layouts/card-layout.vue +30 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/Alert.vue +21 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertAction.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertDescription.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/AlertTitle.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/alert/index.ts +25 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/Avatar.vue +23 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/AvatarFallback.vue +31 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/AvatarImage.vue +16 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/avatar/index.ts +3 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/button/Button.vue +33 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/button/index.ts +43 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/Card.vue +29 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardAction.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardContent.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardDescription.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardFooter.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardHeader.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/CardTitle.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/card/index.ts +7 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/checkbox/Checkbox.vue +43 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/checkbox/index.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/Collapsible.vue +19 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/CollapsibleContent.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/collapsible/index.ts +3 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/Dialog.vue +15 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogClose.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogContent.vue +59 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogDescription.vue +31 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogFooter.vue +33 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogHeader.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogOverlay.vue +31 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogPortal.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogTitle.vue +26 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/DialogTrigger.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dialog/index.ts +10 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +51 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuContent.vue +47 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuItem.vue +44 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +30 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuPortal.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +52 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +26 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +19 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +37 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +38 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/dropdown-menu/index.ts +15 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/Field.vue +27 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldContent.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldDescription.vue +24 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldError.vue +48 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldGroup.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldLabel.vue +24 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldLegend.vue +29 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldSeparator.vue +31 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldSet.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/FieldTitle.vue +22 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/field/index.ts +33 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/index.ts +115 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/input/Input.vue +30 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/input/index.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/label/Label.vue +29 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/label/index.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/Pagination.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationContent.vue +15 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationEllipsis.vue +23 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationItem.vue +7 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationLink.vue +31 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationNext.vue +29 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/PaginationPrevious.vue +29 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/pagination/index.ts +7 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/Popover.vue +15 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverAnchor.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverContent.vue +44 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverDescription.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverHeader.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverTitle.vue +14 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/PopoverTrigger.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/popover/index.ts +7 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/Select.vue +15 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectContent.vue +65 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectGroup.vue +26 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectItem.vue +41 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectLabel.vue +26 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectScrollDownButton.vue +32 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectScrollUpButton.vue +32 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectSeparator.vue +24 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectTrigger.vue +45 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/SelectValue.vue +12 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/select/index.ts +10 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/separator/Separator.vue +33 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/separator/index.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/skeleton/Skeleton.vue +15 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/skeleton/index.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/sonner/Sonner.vue +29 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/sonner/index.ts +3 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/spinner/Spinner.vue +17 -0
- package/lib/templates/uiBundles/vuebasic/src/components/ui/spinner/index.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/src/composables/useAsyncData.ts +69 -0
- package/lib/templates/uiBundles/vuebasic/src/lib/utils.ts +6 -0
- package/lib/templates/uiBundles/vuebasic/src/main.ts +6 -0
- package/lib/templates/uiBundles/vuebasic/src/pages/Home.vue +10 -0
- package/lib/templates/uiBundles/vuebasic/src/pages/NotFound.vue +18 -0
- package/lib/templates/uiBundles/vuebasic/src/router-utils.ts +32 -0
- package/lib/templates/uiBundles/vuebasic/src/router.ts +40 -0
- package/lib/templates/uiBundles/vuebasic/src/styles/global.css +134 -0
- package/lib/templates/uiBundles/vuebasic/src/test/setup.ts +1 -0
- package/lib/templates/uiBundles/vuebasic/tsconfig.json +45 -0
- package/lib/templates/uiBundles/vuebasic/tsconfig.node.json +13 -0
- package/lib/templates/uiBundles/vuebasic/ui-bundle.json +7 -0
- package/lib/templates/uiBundles/vuebasic/vite-env.d.ts +14 -0
- package/lib/templates/uiBundles/vuebasic/vite.config.ts +106 -0
- package/lib/templates/uiBundles/vuebasic/vitest-env.d.ts +2 -0
- package/lib/utils/constants.d.ts +1 -1
- package/lib/utils/constants.js +1 -1
- package/package.json +3 -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,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>
|