@dinachi/cli 0.5.0 → 0.6.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.
- package/README.md +13 -5
- package/dist/index.js +1086 -349
- package/package.json +17 -9
- package/templates/accordion/accordion.tsx +8 -3
- package/templates/alert-dialog/alert-dialog.tsx +24 -25
- package/templates/alert-dialog/index.ts +1 -1
- package/templates/autocomplete/autocomplete.tsx +0 -1
- package/templates/avatar/avatar.tsx +1 -3
- package/templates/badge/badge.tsx +167 -0
- package/templates/badge/index.ts +2 -0
- package/templates/button/button.tsx +6 -6
- package/templates/button/index.ts +2 -2
- package/templates/card/card.tsx +78 -0
- package/templates/card/index.ts +1 -0
- package/templates/checkbox/checkbox.tsx +2 -3
- package/templates/checkbox-group/checkbox-group.tsx +1 -3
- package/templates/collapsible/collapsible.tsx +1 -2
- package/templates/combobox/combobox.tsx +0 -1
- package/templates/context-menu/context-menu.tsx +0 -1
- package/templates/dialog/dialog.tsx +1 -1
- package/templates/drawer/drawer.tsx +0 -1
- package/templates/field/field.tsx +69 -85
- package/templates/fieldset/fieldset.tsx +0 -1
- package/templates/form/form.tsx +36 -28
- package/templates/input/index.ts +1 -2
- package/templates/input/input.tsx +0 -1
- package/templates/menu/menu.tsx +0 -1
- package/templates/menubar/menubar.tsx +21 -22
- package/templates/meter/meter.tsx +0 -1
- package/templates/navigation-menu/index.ts +1 -13
- package/templates/navigation-menu/navigation-menu.tsx +1 -3
- package/templates/number-field/number-field.tsx +0 -1
- package/templates/popover/popover.tsx +0 -1
- package/templates/preview-card/preview-card.tsx +0 -1
- package/templates/progress/progress.tsx +0 -1
- package/templates/radio/radio.tsx +0 -1
- package/templates/scroll-area/scroll-area.tsx +0 -1
- package/templates/select/select.tsx +1 -4
- package/templates/separator/separator.tsx +0 -1
- package/templates/slider/index.ts +10 -0
- package/templates/slider/slider.tsx +1 -3
- package/templates/switch/switch.tsx +0 -1
- package/templates/tabs/index.ts +8 -0
- package/templates/tabs/tabs.tsx +8 -3
- package/templates/textarea/index.ts +2 -0
- package/templates/textarea/textarea.tsx +23 -0
- package/templates/toast/toast.tsx +3 -2
- package/templates/toggle/toggle.tsx +0 -1
- package/templates/toggle-group/toggle-group.tsx +0 -1
- package/templates/toolbar/toolbar.tsx +0 -1
- package/templates/tooltip/tooltip.tsx +0 -1
- package/templates/tsconfig.json +20 -0
- package/templates/utils/utils.ts +0 -1
- package/templates/utils/variants.ts +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dinachi/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "CLI for adding Dinachi UI components to your project",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -15,30 +15,37 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"repository": {
|
|
17
17
|
"type": "git",
|
|
18
|
-
"url": "https://github.com/dinachi/ui"
|
|
18
|
+
"url": "git+https://github.com/dinachi/ui.git"
|
|
19
19
|
},
|
|
20
20
|
"homepage": "https://dinachi.dev",
|
|
21
21
|
"bin": {
|
|
22
|
-
"dinachi": "
|
|
23
|
-
"dinachi-ui": "
|
|
22
|
+
"dinachi": "dist/index.js",
|
|
23
|
+
"dinachi-ui": "dist/index.js"
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
"dist",
|
|
27
27
|
"templates"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"commander": "^14.0.2",
|
|
31
30
|
"chalk": "^5.3.0",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
31
|
+
"commander": "^14.0.2",
|
|
32
|
+
"execa": "^9.6.1",
|
|
34
33
|
"fs-extra": "^11.2.0",
|
|
35
34
|
"node-fetch": "^3.3.2",
|
|
36
|
-
"
|
|
35
|
+
"ora": "^9.0.0",
|
|
36
|
+
"prompts": "^2.4.2",
|
|
37
37
|
"ts-morph": "^27.0.2"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
+
"@base-ui/react": "1.2.0",
|
|
40
41
|
"@types/fs-extra": "^11.0.4",
|
|
41
42
|
"@types/prompts": "^2.4.9",
|
|
43
|
+
"@types/react": "^19.2.14",
|
|
44
|
+
"class-variance-authority": "^0.7.1",
|
|
45
|
+
"clsx": "^2.1.1",
|
|
46
|
+
"lucide-react": "0.552.0",
|
|
47
|
+
"react": "19.2.4",
|
|
48
|
+
"tailwind-merge": "^3.5.0",
|
|
42
49
|
"tsup": "^8.0.1",
|
|
43
50
|
"typescript": "^5.5.3"
|
|
44
51
|
},
|
|
@@ -51,6 +58,7 @@
|
|
|
51
58
|
"scripts": {
|
|
52
59
|
"build": "tsup src/index.ts --format esm --dts --clean",
|
|
53
60
|
"dev": "tsup src/index.ts --format esm --dts --watch",
|
|
54
|
-
"type-check": "tsc --noEmit"
|
|
61
|
+
"type-check": "tsc --noEmit",
|
|
62
|
+
"test": "pnpm run build && node --test test/**/*.test.mjs"
|
|
55
63
|
}
|
|
56
64
|
}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import * as React from "react";
|
|
3
2
|
import { Accordion as BaseAccordion } from "@base-ui/react/accordion";
|
|
4
|
-
import { cn } from "@/lib/utils"
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
5
4
|
import { ChevronDown } from "lucide-react";
|
|
6
5
|
|
|
7
|
-
const Accordion =
|
|
6
|
+
const Accordion = React.forwardRef<
|
|
7
|
+
React.ComponentRef<typeof BaseAccordion.Root>,
|
|
8
|
+
React.ComponentProps<typeof BaseAccordion.Root>
|
|
9
|
+
>(({ className, ...props }, ref) => (
|
|
10
|
+
<BaseAccordion.Root ref={ref} className={cn(className)} {...props} />
|
|
11
|
+
));
|
|
12
|
+
Accordion.displayName = "Accordion";
|
|
8
13
|
|
|
9
14
|
const AccordionItem = React.forwardRef<
|
|
10
15
|
HTMLDivElement,
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { cn } from "@/lib/utils"
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { AlertDialog as BaseAlertDialog } from "@base-ui/react";
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
5
4
|
|
|
6
|
-
const AlertDialog = BaseAlertDialog.Root
|
|
5
|
+
const AlertDialog = BaseAlertDialog.Root;
|
|
7
6
|
|
|
8
7
|
const AlertDialogTrigger = React.forwardRef<
|
|
9
8
|
HTMLButtonElement,
|
|
@@ -21,10 +20,10 @@ const AlertDialogTrigger = React.forwardRef<
|
|
|
21
20
|
)}
|
|
22
21
|
{...props}
|
|
23
22
|
/>
|
|
24
|
-
))
|
|
25
|
-
AlertDialogTrigger.displayName = "AlertDialogTrigger"
|
|
23
|
+
));
|
|
24
|
+
AlertDialogTrigger.displayName = "AlertDialogTrigger";
|
|
26
25
|
|
|
27
|
-
const AlertDialogPortal = BaseAlertDialog.Portal
|
|
26
|
+
const AlertDialogPortal = BaseAlertDialog.Portal;
|
|
28
27
|
|
|
29
28
|
const AlertDialogBackdrop = React.forwardRef<
|
|
30
29
|
HTMLDivElement,
|
|
@@ -40,8 +39,8 @@ const AlertDialogBackdrop = React.forwardRef<
|
|
|
40
39
|
)}
|
|
41
40
|
{...props}
|
|
42
41
|
/>
|
|
43
|
-
))
|
|
44
|
-
AlertDialogBackdrop.displayName = "AlertDialogBackdrop"
|
|
42
|
+
));
|
|
43
|
+
AlertDialogBackdrop.displayName = "AlertDialogBackdrop";
|
|
45
44
|
|
|
46
45
|
const AlertDialogPopup = React.forwardRef<
|
|
47
46
|
HTMLDivElement,
|
|
@@ -58,8 +57,8 @@ const AlertDialogPopup = React.forwardRef<
|
|
|
58
57
|
)}
|
|
59
58
|
{...props}
|
|
60
59
|
/>
|
|
61
|
-
))
|
|
62
|
-
AlertDialogPopup.displayName = "AlertDialogPopup"
|
|
60
|
+
));
|
|
61
|
+
AlertDialogPopup.displayName = "AlertDialogPopup";
|
|
63
62
|
|
|
64
63
|
const AlertDialogTitle = React.forwardRef<
|
|
65
64
|
HTMLHeadingElement,
|
|
@@ -70,8 +69,8 @@ const AlertDialogTitle = React.forwardRef<
|
|
|
70
69
|
className={cn("text-lg font-semibold", className)}
|
|
71
70
|
{...props}
|
|
72
71
|
/>
|
|
73
|
-
))
|
|
74
|
-
AlertDialogTitle.displayName = "AlertDialogTitle"
|
|
72
|
+
));
|
|
73
|
+
AlertDialogTitle.displayName = "AlertDialogTitle";
|
|
75
74
|
|
|
76
75
|
const AlertDialogDescription = React.forwardRef<
|
|
77
76
|
HTMLParagraphElement,
|
|
@@ -82,8 +81,8 @@ const AlertDialogDescription = React.forwardRef<
|
|
|
82
81
|
className={cn("text-sm text-muted-foreground", className)}
|
|
83
82
|
{...props}
|
|
84
83
|
/>
|
|
85
|
-
))
|
|
86
|
-
AlertDialogDescription.displayName = "AlertDialogDescription"
|
|
84
|
+
));
|
|
85
|
+
AlertDialogDescription.displayName = "AlertDialogDescription";
|
|
87
86
|
|
|
88
87
|
const AlertDialogAction = React.forwardRef<
|
|
89
88
|
HTMLButtonElement,
|
|
@@ -99,8 +98,8 @@ const AlertDialogAction = React.forwardRef<
|
|
|
99
98
|
)}
|
|
100
99
|
{...props}
|
|
101
100
|
/>
|
|
102
|
-
))
|
|
103
|
-
AlertDialogAction.displayName = "AlertDialogAction"
|
|
101
|
+
));
|
|
102
|
+
AlertDialogAction.displayName = "AlertDialogAction";
|
|
104
103
|
|
|
105
104
|
const AlertDialogCancel = React.forwardRef<
|
|
106
105
|
HTMLButtonElement,
|
|
@@ -116,8 +115,8 @@ const AlertDialogCancel = React.forwardRef<
|
|
|
116
115
|
)}
|
|
117
116
|
{...props}
|
|
118
117
|
/>
|
|
119
|
-
))
|
|
120
|
-
AlertDialogCancel.displayName = "AlertDialogCancel"
|
|
118
|
+
));
|
|
119
|
+
AlertDialogCancel.displayName = "AlertDialogCancel";
|
|
121
120
|
|
|
122
121
|
const AlertDialogHeader = ({
|
|
123
122
|
className,
|
|
@@ -130,8 +129,8 @@ const AlertDialogHeader = ({
|
|
|
130
129
|
)}
|
|
131
130
|
{...props}
|
|
132
131
|
/>
|
|
133
|
-
)
|
|
134
|
-
AlertDialogHeader.displayName = "AlertDialogHeader"
|
|
132
|
+
);
|
|
133
|
+
AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
135
134
|
|
|
136
135
|
const AlertDialogFooter = ({
|
|
137
136
|
className,
|
|
@@ -144,8 +143,8 @@ const AlertDialogFooter = ({
|
|
|
144
143
|
)}
|
|
145
144
|
{...props}
|
|
146
145
|
/>
|
|
147
|
-
)
|
|
148
|
-
AlertDialogFooter.displayName = "AlertDialogFooter"
|
|
146
|
+
);
|
|
147
|
+
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
149
148
|
|
|
150
149
|
export {
|
|
151
150
|
AlertDialog,
|
|
@@ -159,4 +158,4 @@ export {
|
|
|
159
158
|
AlertDialogCancel,
|
|
160
159
|
AlertDialogHeader,
|
|
161
160
|
AlertDialogFooter,
|
|
162
|
-
}
|
|
161
|
+
};
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import * as React from "react";
|
|
3
2
|
import { Avatar as BaseAvatar } from "@base-ui/react";
|
|
4
3
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
5
|
-
import { cn } from "@/lib/utils"
|
|
6
|
-
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
7
5
|
|
|
8
6
|
const avatarVariants = cva(
|
|
9
7
|
"relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
5
|
+
import { useRender } from '@base-ui/react/use-render'
|
|
6
|
+
import { cn } from "@/lib/utils"
|
|
7
|
+
|
|
8
|
+
const badgeVariants = cva(
|
|
9
|
+
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
10
|
+
{
|
|
11
|
+
variants: {
|
|
12
|
+
variant: {
|
|
13
|
+
default:
|
|
14
|
+
"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
15
|
+
secondary:
|
|
16
|
+
"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
17
|
+
destructive:
|
|
18
|
+
"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
19
|
+
outline: "text-foreground",
|
|
20
|
+
success:
|
|
21
|
+
"border-transparent bg-green-500 text-white hover:bg-green-600",
|
|
22
|
+
warning:
|
|
23
|
+
"border-transparent bg-yellow-500 text-yellow-900 hover:bg-yellow-600",
|
|
24
|
+
info:
|
|
25
|
+
"border-transparent bg-blue-500 text-white hover:bg-blue-600",
|
|
26
|
+
},
|
|
27
|
+
size: {
|
|
28
|
+
sm: "px-2 py-0.5 text-xs",
|
|
29
|
+
default: "px-2.5 py-0.5 text-xs",
|
|
30
|
+
lg: "px-3 py-1 text-sm",
|
|
31
|
+
},
|
|
32
|
+
rounded: {
|
|
33
|
+
default: "rounded-full",
|
|
34
|
+
sm: "rounded-sm",
|
|
35
|
+
md: "rounded-md",
|
|
36
|
+
lg: "rounded-lg",
|
|
37
|
+
none: "rounded-none",
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
defaultVariants: {
|
|
41
|
+
variant: "default",
|
|
42
|
+
size: "default",
|
|
43
|
+
rounded: "default",
|
|
44
|
+
},
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
type BadgeElement = React.ComponentRef<"div">
|
|
49
|
+
|
|
50
|
+
export interface BadgeProps
|
|
51
|
+
extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'>,
|
|
52
|
+
VariantProps<typeof badgeVariants> {
|
|
53
|
+
/**
|
|
54
|
+
* The content of the badge
|
|
55
|
+
*/
|
|
56
|
+
children?: React.ReactNode
|
|
57
|
+
/**
|
|
58
|
+
* Custom render prop for composition
|
|
59
|
+
*/
|
|
60
|
+
render?: React.ReactElement
|
|
61
|
+
/**
|
|
62
|
+
* Whether the badge should be interactive (clickable)
|
|
63
|
+
*/
|
|
64
|
+
interactive?: boolean
|
|
65
|
+
/**
|
|
66
|
+
* Icon to display before the content
|
|
67
|
+
*/
|
|
68
|
+
icon?: React.ReactNode
|
|
69
|
+
/**
|
|
70
|
+
* Whether to show a close button
|
|
71
|
+
*/
|
|
72
|
+
dismissible?: boolean
|
|
73
|
+
/**
|
|
74
|
+
* Callback when close button is clicked
|
|
75
|
+
*/
|
|
76
|
+
onDismiss?: () => void
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const Badge = React.forwardRef<BadgeElement, BadgeProps>(
|
|
80
|
+
({
|
|
81
|
+
className,
|
|
82
|
+
variant,
|
|
83
|
+
size,
|
|
84
|
+
rounded,
|
|
85
|
+
children,
|
|
86
|
+
render = <div />,
|
|
87
|
+
interactive = false,
|
|
88
|
+
icon,
|
|
89
|
+
dismissible = false,
|
|
90
|
+
onDismiss,
|
|
91
|
+
onClick,
|
|
92
|
+
...props
|
|
93
|
+
}, ref) => {
|
|
94
|
+
// Handle keyboard interaction for dismissible badges
|
|
95
|
+
const handleKeyDown = React.useCallback((event: React.KeyboardEvent) => {
|
|
96
|
+
if (dismissible && onDismiss && (event.key === 'Delete' || event.key === 'Backspace')) {
|
|
97
|
+
event.preventDefault()
|
|
98
|
+
onDismiss()
|
|
99
|
+
}
|
|
100
|
+
}, [dismissible, onDismiss])
|
|
101
|
+
|
|
102
|
+
// Handle click for interactive badges
|
|
103
|
+
const handleClick = React.useCallback((event: React.MouseEvent<HTMLDivElement>) => {
|
|
104
|
+
if (interactive && onClick) {
|
|
105
|
+
onClick(event)
|
|
106
|
+
}
|
|
107
|
+
}, [interactive, onClick])
|
|
108
|
+
|
|
109
|
+
// Compute classes once
|
|
110
|
+
const badgeClasses = React.useMemo(() =>
|
|
111
|
+
cn(
|
|
112
|
+
badgeVariants({ variant, size, rounded }),
|
|
113
|
+
{
|
|
114
|
+
'cursor-pointer hover:opacity-80': interactive,
|
|
115
|
+
'focus:ring-2 focus:ring-offset-2': interactive || dismissible,
|
|
116
|
+
},
|
|
117
|
+
className
|
|
118
|
+
),
|
|
119
|
+
[variant, size, rounded, interactive, dismissible, className]
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
const content = (
|
|
123
|
+
<>
|
|
124
|
+
{icon && <span className="mr-1 shrink-0">{icon}</span>}
|
|
125
|
+
{children}
|
|
126
|
+
{dismissible && (
|
|
127
|
+
<button
|
|
128
|
+
type="button"
|
|
129
|
+
onClick={onDismiss}
|
|
130
|
+
className="ml-1 shrink-0 rounded-full p-0.5 hover:bg-black/10 focus:outline-none focus:ring-1 focus:ring-black/20"
|
|
131
|
+
aria-label="Remove badge"
|
|
132
|
+
>
|
|
133
|
+
<svg
|
|
134
|
+
className="h-3 w-3"
|
|
135
|
+
fill="none"
|
|
136
|
+
stroke="currentColor"
|
|
137
|
+
viewBox="0 0 24 24"
|
|
138
|
+
aria-hidden="true"
|
|
139
|
+
>
|
|
140
|
+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
|
|
141
|
+
</svg>
|
|
142
|
+
</button>
|
|
143
|
+
)}
|
|
144
|
+
</>
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
return useRender({
|
|
148
|
+
render: React.cloneElement(render, {
|
|
149
|
+
ref,
|
|
150
|
+
className: badgeClasses,
|
|
151
|
+
onClick: handleClick,
|
|
152
|
+
onKeyDown: handleKeyDown,
|
|
153
|
+
tabIndex: interactive || dismissible ? 0 : undefined,
|
|
154
|
+
role: interactive ? 'button' : dismissible ? 'button' : undefined,
|
|
155
|
+
'aria-label': interactive ? 'Interactive badge' : dismissible ? 'Dismissible badge' : undefined,
|
|
156
|
+
...props,
|
|
157
|
+
}),
|
|
158
|
+
props: {
|
|
159
|
+
children: content,
|
|
160
|
+
},
|
|
161
|
+
})
|
|
162
|
+
}
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
Badge.displayName = "Badge"
|
|
166
|
+
|
|
167
|
+
export { Badge, badgeVariants }
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import * as React from "react"
|
|
2
|
+
import { Button as BaseButton } from "@base-ui/react/button"
|
|
3
3
|
import { cva, type VariantProps } from "class-variance-authority"
|
|
4
4
|
import { cn } from "@/lib/utils"
|
|
5
5
|
|
|
@@ -33,15 +33,15 @@ const buttonVariants = cva(
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
export interface ButtonProps
|
|
36
|
-
extends React.
|
|
36
|
+
extends Omit<React.ComponentPropsWithoutRef<typeof BaseButton>, 'className'>,
|
|
37
37
|
VariantProps<typeof buttonVariants> {
|
|
38
|
-
|
|
38
|
+
className?: string
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
const Button = React.forwardRef<
|
|
42
|
-
({ className, variant, size,
|
|
41
|
+
const Button = React.forwardRef<HTMLElement, ButtonProps>(
|
|
42
|
+
({ className, variant, size, ...props }, ref) => {
|
|
43
43
|
return (
|
|
44
|
-
<
|
|
44
|
+
<BaseButton
|
|
45
45
|
className={cn(buttonVariants({ variant, size, className }))}
|
|
46
46
|
ref={ref}
|
|
47
47
|
{...props}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Button, buttonVariants } from
|
|
2
|
-
export type { ButtonProps } from
|
|
1
|
+
export { Button, buttonVariants } from './button'
|
|
2
|
+
export type { ButtonProps } from './button'
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { cn } from "@/lib/utils"
|
|
3
|
+
|
|
4
|
+
const Card = React.forwardRef<
|
|
5
|
+
HTMLDivElement,
|
|
6
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
7
|
+
>(({ className, ...props }, ref) => (
|
|
8
|
+
<div
|
|
9
|
+
ref={ref}
|
|
10
|
+
className={cn(
|
|
11
|
+
"rounded-lg border bg-card text-card-foreground shadow-sm",
|
|
12
|
+
className
|
|
13
|
+
)}
|
|
14
|
+
{...props}
|
|
15
|
+
/>
|
|
16
|
+
))
|
|
17
|
+
Card.displayName = "Card"
|
|
18
|
+
|
|
19
|
+
const CardHeader = React.forwardRef<
|
|
20
|
+
HTMLDivElement,
|
|
21
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
22
|
+
>(({ className, ...props }, ref) => (
|
|
23
|
+
<div
|
|
24
|
+
ref={ref}
|
|
25
|
+
className={cn("flex flex-col space-y-1.5 p-6", className)}
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
))
|
|
29
|
+
CardHeader.displayName = "CardHeader"
|
|
30
|
+
|
|
31
|
+
const CardTitle = React.forwardRef<
|
|
32
|
+
HTMLParagraphElement,
|
|
33
|
+
React.HTMLAttributes<HTMLHeadingElement>
|
|
34
|
+
>(({ className, ...props }, ref) => (
|
|
35
|
+
<h3
|
|
36
|
+
ref={ref}
|
|
37
|
+
className={cn(
|
|
38
|
+
"text-2xl font-semibold leading-none tracking-tight",
|
|
39
|
+
className
|
|
40
|
+
)}
|
|
41
|
+
{...props}
|
|
42
|
+
/>
|
|
43
|
+
))
|
|
44
|
+
CardTitle.displayName = "CardTitle"
|
|
45
|
+
|
|
46
|
+
const CardDescription = React.forwardRef<
|
|
47
|
+
HTMLParagraphElement,
|
|
48
|
+
React.HTMLAttributes<HTMLParagraphElement>
|
|
49
|
+
>(({ className, ...props }, ref) => (
|
|
50
|
+
<p
|
|
51
|
+
ref={ref}
|
|
52
|
+
className={cn("text-sm text-muted-foreground", className)}
|
|
53
|
+
{...props}
|
|
54
|
+
/>
|
|
55
|
+
))
|
|
56
|
+
CardDescription.displayName = "CardDescription"
|
|
57
|
+
|
|
58
|
+
const CardContent = React.forwardRef<
|
|
59
|
+
HTMLDivElement,
|
|
60
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
61
|
+
>(({ className, ...props }, ref) => (
|
|
62
|
+
<div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
|
|
63
|
+
))
|
|
64
|
+
CardContent.displayName = "CardContent"
|
|
65
|
+
|
|
66
|
+
const CardFooter = React.forwardRef<
|
|
67
|
+
HTMLDivElement,
|
|
68
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
69
|
+
>(({ className, ...props }, ref) => (
|
|
70
|
+
<div
|
|
71
|
+
ref={ref}
|
|
72
|
+
className={cn("flex items-center p-6 pt-0", className)}
|
|
73
|
+
{...props}
|
|
74
|
+
/>
|
|
75
|
+
))
|
|
76
|
+
CardFooter.displayName = "CardFooter"
|
|
77
|
+
|
|
78
|
+
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } from './card'
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import * as React from "react";
|
|
3
|
-
import { Checkbox as BaseCheckbox } from
|
|
4
|
-
import { cn } from "@/lib/utils"
|
|
2
|
+
import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
5
4
|
import { Check } from "lucide-react";
|
|
6
5
|
|
|
7
6
|
const Checkbox = React.forwardRef<
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
1
|
import * as React from "react";
|
|
3
2
|
import { CheckboxGroup as BaseCheckboxGroup } from "@base-ui/react/checkbox-group";
|
|
4
|
-
import { cn } from "@/lib/utils"
|
|
5
|
-
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
6
4
|
|
|
7
5
|
const CheckboxGroup = React.forwardRef<
|
|
8
6
|
React.ComponentRef<typeof BaseCheckboxGroup>,
|