@moontra/moonui-pro 2.2.3 → 2.2.4
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/dist/index.mjs +40977 -39283
- package/package.json +1 -2
- package/src/components/index.ts +4 -2
- package/src/components/internal/index.ts +78 -0
- package/src/components/ui/accordion.tsx +73 -0
- package/src/components/ui/alert.tsx +142 -0
- package/src/components/ui/aspect-ratio.tsx +81 -0
- package/src/components/ui/breadcrumb.tsx +221 -0
- package/src/components/ui/checkbox.tsx +2 -2
- package/src/components/ui/collapsible.tsx +135 -0
- package/src/components/ui/command.tsx +225 -0
- package/src/components/ui/dropdown-menu.tsx +18 -2
- package/src/components/ui/index.ts +157 -35
- package/src/components/ui/pagination.tsx +122 -0
- package/src/components/ui/radio-group.tsx +261 -0
- package/src/components/ui/table.tsx +334 -0
- package/src/components/ui/toggle.tsx +56 -0
- package/dist/index.d.ts +0 -850
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moontra/moonui-pro",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
4
4
|
"description": "Premium React components for MoonUI - Advanced UI library with 50+ pro components including performance, interactive, and gesture components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
@@ -71,7 +71,6 @@
|
|
|
71
71
|
},
|
|
72
72
|
"homepage": "https://moonui.dev",
|
|
73
73
|
"peerDependencies": {
|
|
74
|
-
"@moontra/moonui": "^2.0.10",
|
|
75
74
|
"react": ">=18.0.0 || ^19.0.0",
|
|
76
75
|
"react-dom": ">=18.0.0 || ^19.0.0"
|
|
77
76
|
},
|
package/src/components/index.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// Pro Components Export - Source of Truth: packages/moonui-pro
|
|
2
2
|
|
|
3
|
+
// UI Components (Enhanced versions with Pro suffix)
|
|
4
|
+
export * from "./ui"
|
|
5
|
+
|
|
3
6
|
// Animated Button
|
|
4
7
|
export * from "./animated-button"
|
|
5
8
|
|
|
@@ -54,8 +57,7 @@ export * from "./draggable-list"
|
|
|
54
57
|
// Advanced Forms
|
|
55
58
|
export * from "./advanced-forms"
|
|
56
59
|
|
|
57
|
-
//
|
|
58
|
-
export * from "./color-picker"
|
|
60
|
+
// Note: ColorPicker is available in UI components
|
|
59
61
|
|
|
60
62
|
// GitHub Stars
|
|
61
63
|
export * from "./github-stars"
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Internal Components - Used by Pro components internally
|
|
2
|
+
// These are not exported to the public API
|
|
3
|
+
|
|
4
|
+
// Simple re-exports of basic components for internal use
|
|
5
|
+
export {
|
|
6
|
+
MoonUIAccordionPro as Accordion,
|
|
7
|
+
MoonUIAccordionItemPro as AccordionItem,
|
|
8
|
+
MoonUIAccordionTriggerPro as AccordionTrigger,
|
|
9
|
+
MoonUIAccordionContentPro as AccordionContent,
|
|
10
|
+
} from "../ui/accordion"
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
MoonUIAlertPro as Alert,
|
|
14
|
+
MoonUIAlertDescriptionPro as AlertDescription,
|
|
15
|
+
MoonUIAlertTitlePro as AlertTitle,
|
|
16
|
+
} from "../ui/alert"
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
MoonUIAspectRatioPro as AspectRatio,
|
|
20
|
+
} from "../ui/aspect-ratio"
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
MoonUIBreadcrumbPro as Breadcrumb,
|
|
24
|
+
MoonUIBreadcrumbListPro as BreadcrumbList,
|
|
25
|
+
MoonUIBreadcrumbItemPro as BreadcrumbItem,
|
|
26
|
+
MoonUIBreadcrumbLinkPro as BreadcrumbLink,
|
|
27
|
+
MoonUIBreadcrumbPagePro as BreadcrumbPage,
|
|
28
|
+
MoonUIBreadcrumbSeparatorPro as BreadcrumbSeparator,
|
|
29
|
+
MoonUIBreadcrumbEllipsisPro as BreadcrumbEllipsis,
|
|
30
|
+
} from "../ui/breadcrumb"
|
|
31
|
+
|
|
32
|
+
export {
|
|
33
|
+
MoonUICollapsiblePro as Collapsible,
|
|
34
|
+
MoonUICollapsibleTriggerPro as CollapsibleTrigger,
|
|
35
|
+
MoonUICollapsibleContentPro as CollapsibleContent,
|
|
36
|
+
} from "../ui/collapsible"
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
MoonUICommandPro as Command,
|
|
40
|
+
MoonUICommandDialogPro as CommandDialog,
|
|
41
|
+
MoonUICommandInputPro as CommandInput,
|
|
42
|
+
MoonUICommandListPro as CommandList,
|
|
43
|
+
MoonUICommandEmptyPro as CommandEmpty,
|
|
44
|
+
MoonUICommandGroupPro as CommandGroup,
|
|
45
|
+
MoonUICommandItemPro as CommandItem,
|
|
46
|
+
MoonUICommandShortcutPro as CommandShortcut,
|
|
47
|
+
MoonUICommandSeparatorPro as CommandSeparator,
|
|
48
|
+
} from "../ui/command"
|
|
49
|
+
|
|
50
|
+
export {
|
|
51
|
+
MoonUITablePro as Table,
|
|
52
|
+
MoonUITableHeaderPro as TableHeader,
|
|
53
|
+
MoonUITableBodyPro as TableBody,
|
|
54
|
+
MoonUITableFooterPro as TableFooter,
|
|
55
|
+
MoonUITableHeadPro as TableHead,
|
|
56
|
+
MoonUITableRowPro as TableRow,
|
|
57
|
+
MoonUITableCellPro as TableCell,
|
|
58
|
+
MoonUITableCaptionPro as TableCaption,
|
|
59
|
+
} from "../ui/table"
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
MoonUITogglePro as Toggle,
|
|
63
|
+
} from "../ui/toggle"
|
|
64
|
+
|
|
65
|
+
export {
|
|
66
|
+
MoonUIPaginationPro as Pagination,
|
|
67
|
+
MoonUIPaginationContentPro as PaginationContent,
|
|
68
|
+
MoonUIPaginationEllipsisPro as PaginationEllipsis,
|
|
69
|
+
MoonUIPaginationItemPro as PaginationItem,
|
|
70
|
+
MoonUIPaginationLinkPro as PaginationLink,
|
|
71
|
+
MoonUIPaginationNextPro as PaginationNext,
|
|
72
|
+
MoonUIPaginationPreviousPro as PaginationPrevious,
|
|
73
|
+
} from "../ui/pagination"
|
|
74
|
+
|
|
75
|
+
export {
|
|
76
|
+
MoonUIRadioGroupPro as RadioGroup,
|
|
77
|
+
MoonUIRadioGroupItemPro as RadioGroupItem,
|
|
78
|
+
} from "../ui/radio-group"
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import * as AccordionPrimitive from "@radix-ui/react-accordion"
|
|
5
|
+
import { ChevronDown } from "lucide-react"
|
|
6
|
+
|
|
7
|
+
import { cn } from "../../lib/utils"
|
|
8
|
+
|
|
9
|
+
const MoonUIAccordionPro = AccordionPrimitive.Root
|
|
10
|
+
|
|
11
|
+
const MoonUIAccordionItemPro = React.forwardRef<
|
|
12
|
+
React.ElementRef<typeof AccordionPrimitive.Item>,
|
|
13
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
|
|
14
|
+
>(({ className, ...props }, ref) => (
|
|
15
|
+
<AccordionPrimitive.Item
|
|
16
|
+
ref={ref}
|
|
17
|
+
className={cn("border-b border-gray-200 dark:border-gray-800", className)}
|
|
18
|
+
{...props}
|
|
19
|
+
/>
|
|
20
|
+
))
|
|
21
|
+
MoonUIAccordionItemPro.displayName = "MoonUIAccordionItemPro"
|
|
22
|
+
|
|
23
|
+
const MoonUIAccordionTriggerPro = React.forwardRef<
|
|
24
|
+
React.ElementRef<typeof AccordionPrimitive.Trigger>,
|
|
25
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
|
|
26
|
+
>(({ className, children, ...props }, ref) => (
|
|
27
|
+
<AccordionPrimitive.Header className="flex">
|
|
28
|
+
<AccordionPrimitive.Trigger
|
|
29
|
+
ref={ref}
|
|
30
|
+
className={cn(
|
|
31
|
+
"flex flex-1 items-center justify-between py-4 font-medium transition-all dark:text-gray-100",
|
|
32
|
+
"hover:underline hover:text-primary dark:hover:text-primary-400",
|
|
33
|
+
"[&[data-state=open]>svg]:rotate-180",
|
|
34
|
+
className
|
|
35
|
+
)}
|
|
36
|
+
{...props}
|
|
37
|
+
>
|
|
38
|
+
{children}
|
|
39
|
+
<ChevronDown className="h-4 w-4 shrink-0 transition-transform duration-200 opacity-70 group-hover:opacity-100" />
|
|
40
|
+
</AccordionPrimitive.Trigger>
|
|
41
|
+
</AccordionPrimitive.Header>
|
|
42
|
+
))
|
|
43
|
+
MoonUIAccordionTriggerPro.displayName = "MoonUIAccordionTriggerPro"
|
|
44
|
+
|
|
45
|
+
const MoonUIAccordionContentPro = React.forwardRef<
|
|
46
|
+
React.ElementRef<typeof AccordionPrimitive.Content>,
|
|
47
|
+
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
|
|
48
|
+
>(({ className, children, ...props }, ref) => (
|
|
49
|
+
<AccordionPrimitive.Content
|
|
50
|
+
ref={ref}
|
|
51
|
+
className={cn(
|
|
52
|
+
"overflow-hidden text-sm text-gray-700 dark:text-gray-300 transition-all",
|
|
53
|
+
"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
|
|
54
|
+
className
|
|
55
|
+
)}
|
|
56
|
+
{...props}
|
|
57
|
+
>
|
|
58
|
+
<div className="pb-4 pt-0">{children}</div>
|
|
59
|
+
</AccordionPrimitive.Content>
|
|
60
|
+
))
|
|
61
|
+
MoonUIAccordionContentPro.displayName = "MoonUIAccordionContentPro"
|
|
62
|
+
|
|
63
|
+
// Internal aliases for Pro component usage
|
|
64
|
+
export const AccordionInternal = MoonUIAccordionPro
|
|
65
|
+
export const AccordionItemInternal = MoonUIAccordionItemPro
|
|
66
|
+
export const AccordionTriggerInternal = MoonUIAccordionTriggerPro
|
|
67
|
+
export const AccordionContentInternal = MoonUIAccordionContentPro
|
|
68
|
+
|
|
69
|
+
// Pro exports
|
|
70
|
+
export { MoonUIAccordionPro, MoonUIAccordionItemPro, MoonUIAccordionTriggerPro, MoonUIAccordionContentPro }
|
|
71
|
+
|
|
72
|
+
// Clean exports (without MoonUI prefix for easier usage)
|
|
73
|
+
export { MoonUIAccordionPro as Accordion, MoonUIAccordionItemPro as AccordionItem, MoonUIAccordionTriggerPro as AccordionTrigger, MoonUIAccordionContentPro as AccordionContent }
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
5
|
+
import { AlertCircle, AlertTriangle, Info, Check, X } from "lucide-react";
|
|
6
|
+
|
|
7
|
+
import { cn } from "../../lib/utils";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Alert Component
|
|
11
|
+
*
|
|
12
|
+
* Yüksek kaliteli, özelleştirilebilir ve erişilebilir alert bileşeni.
|
|
13
|
+
* Bildirim, uyarı ve dikkat çekmek gereken içerikler için kullanılır.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const MoonUIalertVariantsPro = cva(
|
|
17
|
+
"relative w-full flex items-center gap-3 p-4 border text-foreground [&>svg]:shrink-0",
|
|
18
|
+
{
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
default: "bg-background text-foreground border-border",
|
|
22
|
+
primary: "bg-primary/10 text-primary border-primary/30",
|
|
23
|
+
success: "bg-success/10 text-success border-success/30",
|
|
24
|
+
warning: "bg-warning/10 text-warning border-warning/30",
|
|
25
|
+
error: "bg-destructive/10 text-destructive border-destructive/30",
|
|
26
|
+
info: "bg-blue-500/10 text-blue-500 border-blue-500/30",
|
|
27
|
+
},
|
|
28
|
+
size: {
|
|
29
|
+
sm: "py-2 text-xs",
|
|
30
|
+
default: "py-3 text-sm",
|
|
31
|
+
lg: "py-4 text-base",
|
|
32
|
+
},
|
|
33
|
+
radius: {
|
|
34
|
+
none: "rounded-none",
|
|
35
|
+
sm: "rounded-sm",
|
|
36
|
+
default: "rounded-md",
|
|
37
|
+
lg: "rounded-lg",
|
|
38
|
+
full: "rounded-full",
|
|
39
|
+
},
|
|
40
|
+
withClose: {
|
|
41
|
+
true: "pr-10",
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
defaultVariants: {
|
|
45
|
+
variant: "default",
|
|
46
|
+
size: "default",
|
|
47
|
+
radius: "default",
|
|
48
|
+
withClose: false,
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
export interface AlertProps
|
|
54
|
+
extends React.HTMLAttributes<HTMLDivElement>,
|
|
55
|
+
VariantProps<typeof MoonUIalertVariantsPro> {
|
|
56
|
+
/** Alert ikonunu gizler */
|
|
57
|
+
hideIcon?: boolean;
|
|
58
|
+
/** Kapatma butonu ekler */
|
|
59
|
+
closable?: boolean;
|
|
60
|
+
/** Kapatma butonu tıklandığında çalışacak fonksiyon */
|
|
61
|
+
onClose?: () => void;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const MoonUIAlertPro = React.forwardRef<HTMLDivElement, AlertProps>(
|
|
65
|
+
({ className, variant = "default", size, radius, hideIcon = false, closable = false, onClose, children, ...props }, ref) => {
|
|
66
|
+
// Alert türüne göre ikon belirleme
|
|
67
|
+
const MoonUIIconPro = React.useMemo(() => {
|
|
68
|
+
switch (variant) {
|
|
69
|
+
case "success":
|
|
70
|
+
return Check;
|
|
71
|
+
case "warning":
|
|
72
|
+
return AlertTriangle;
|
|
73
|
+
case "error":
|
|
74
|
+
return AlertCircle;
|
|
75
|
+
case "info":
|
|
76
|
+
return Info;
|
|
77
|
+
default:
|
|
78
|
+
return Info;
|
|
79
|
+
}
|
|
80
|
+
}, [variant]);
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<div
|
|
84
|
+
ref={ref}
|
|
85
|
+
role="alert"
|
|
86
|
+
className={cn(MoonUIalertVariantsPro({ variant, size, radius, withClose: closable }), className)}
|
|
87
|
+
{...props}
|
|
88
|
+
>
|
|
89
|
+
{!hideIcon && <MoonUIIconPro className="h-5 w-5" />}
|
|
90
|
+
<div className="flex-1">{children}</div>
|
|
91
|
+
{closable && onClose && (
|
|
92
|
+
<button
|
|
93
|
+
onClick={onClose}
|
|
94
|
+
className="absolute right-3 top-3 inline-flex h-6 w-6 items-center justify-center rounded-full opacity-70 transition-opacity hover:opacity-100"
|
|
95
|
+
aria-label="Kapat"
|
|
96
|
+
>
|
|
97
|
+
<X className="h-4 w-4" />
|
|
98
|
+
</button>
|
|
99
|
+
)}
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
MoonUIAlertPro.displayName = "AlertPro";
|
|
105
|
+
|
|
106
|
+
const MoonUIAlertTitlePro = React.forwardRef<
|
|
107
|
+
HTMLParagraphElement,
|
|
108
|
+
React.HTMLAttributes<HTMLHeadingElement>
|
|
109
|
+
>(({ className, ...props }, ref) => (
|
|
110
|
+
<h5
|
|
111
|
+
ref={ref}
|
|
112
|
+
className={cn("font-semibold leading-tight tracking-tight mb-1", className)}
|
|
113
|
+
{...props}
|
|
114
|
+
/>
|
|
115
|
+
));
|
|
116
|
+
MoonUIAlertTitlePro.displayName = "AlertTitlePro";
|
|
117
|
+
|
|
118
|
+
const MoonUIAlertDescriptionPro = React.forwardRef<
|
|
119
|
+
HTMLParagraphElement,
|
|
120
|
+
React.HTMLAttributes<HTMLParagraphElement>
|
|
121
|
+
>(({ className, ...props }, ref) => (
|
|
122
|
+
<div
|
|
123
|
+
ref={ref}
|
|
124
|
+
className={cn("text-sm leading-5 text-muted-foreground", className)}
|
|
125
|
+
{...props}
|
|
126
|
+
/>
|
|
127
|
+
));
|
|
128
|
+
MoonUIAlertDescriptionPro.displayName = "AlertDescriptionPro";
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
// Internal aliases for Pro component usage
|
|
132
|
+
export const alertVariantsInternal = MoonUIalertVariantsPro
|
|
133
|
+
export const AlertInternal = MoonUIAlertPro
|
|
134
|
+
export const IconInternal = MoonUIIconPro
|
|
135
|
+
export const AlertTitleInternal = MoonUIAlertTitlePro
|
|
136
|
+
export const AlertDescriptionInternal = MoonUIAlertDescriptionPro
|
|
137
|
+
|
|
138
|
+
// Pro exports
|
|
139
|
+
export { MoonUIalertVariantsPro, MoonUIAlertPro, MoonUIIconPro, MoonUIAlertTitlePro, MoonUIAlertDescriptionPro }
|
|
140
|
+
|
|
141
|
+
// Clean exports (without MoonUI prefix for easier usage)
|
|
142
|
+
export { MoonUIalertVariantsPro as alertVariants, MoonUIAlertPro as Alert, MoonUIIconPro as Icon, MoonUIAlertTitlePro as AlertTitle, MoonUIAlertDescriptionPro as AlertDescription };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import * as React from "react"
|
|
4
|
+
import { cva, type VariantProps } from "class-variance-authority"
|
|
5
|
+
|
|
6
|
+
import { cn } from "../../lib/utils"
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Aspect Ratio Component
|
|
10
|
+
*
|
|
11
|
+
* A component that maintains a specific aspect ratio for content.
|
|
12
|
+
* Particularly useful for images, videos, and media content in responsive designs.
|
|
13
|
+
* Fully integrated with the theme system, accessible and customizable.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const MoonUIaspectRatioVariantsPro = cva(
|
|
17
|
+
"relative overflow-hidden",
|
|
18
|
+
{
|
|
19
|
+
variants: {
|
|
20
|
+
variant: {
|
|
21
|
+
default: "rounded-md bg-muted/10",
|
|
22
|
+
ghost: "bg-transparent",
|
|
23
|
+
outline: "rounded-md border border-border",
|
|
24
|
+
card: "rounded-md bg-card shadow-sm",
|
|
25
|
+
},
|
|
26
|
+
radius: {
|
|
27
|
+
none: "rounded-none",
|
|
28
|
+
sm: "rounded-sm",
|
|
29
|
+
md: "rounded-md",
|
|
30
|
+
lg: "rounded-lg",
|
|
31
|
+
full: "rounded-full",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
defaultVariants: {
|
|
35
|
+
variant: "default",
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
interface AspectRatioProps
|
|
41
|
+
extends React.HTMLAttributes<HTMLDivElement>,
|
|
42
|
+
VariantProps<typeof MoonUIaspectRatioVariantsPro> {
|
|
43
|
+
/**
|
|
44
|
+
* Aspect ratio (width/height). For example 16/9, 4/3, 1/1 etc.
|
|
45
|
+
* @default 16/9
|
|
46
|
+
*/
|
|
47
|
+
ratio?: number
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const MoonUIAspectRatioPro = React.forwardRef<
|
|
51
|
+
HTMLDivElement,
|
|
52
|
+
AspectRatioProps
|
|
53
|
+
>(({ className, variant, radius, ratio = 16 / 9, style, children, ...props }, ref) => (
|
|
54
|
+
<div
|
|
55
|
+
ref={ref}
|
|
56
|
+
className={cn(MoonUIaspectRatioVariantsPro({ variant, radius }), className)}
|
|
57
|
+
style={{
|
|
58
|
+
position: "relative",
|
|
59
|
+
paddingBottom: `${(1 / ratio) * 100}%`,
|
|
60
|
+
...style
|
|
61
|
+
}}
|
|
62
|
+
{...props}
|
|
63
|
+
>
|
|
64
|
+
<div className="absolute inset-0">
|
|
65
|
+
{children}
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
))
|
|
69
|
+
MoonUIAspectRatioPro.displayName = "AspectRatioPro"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// Internal aliases for Pro component usage
|
|
73
|
+
export const aspectRatioVariantsInternal = MoonUIaspectRatioVariantsPro
|
|
74
|
+
export const AspectRatioInternal = MoonUIAspectRatioPro
|
|
75
|
+
|
|
76
|
+
// Pro exports
|
|
77
|
+
export { MoonUIaspectRatioVariantsPro, MoonUIAspectRatioPro }
|
|
78
|
+
|
|
79
|
+
// Clean exports (without MoonUI prefix for easier usage)
|
|
80
|
+
export { MoonUIaspectRatioVariantsPro as aspectRatioVariants, MoonUIAspectRatioPro as AspectRatio }
|
|
81
|
+
export type { AspectRatioProps }
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ChevronRight, MoreHorizontal } from "lucide-react";
|
|
3
|
+
import { cva, type VariantProps } from "class-variance-authority";
|
|
4
|
+
|
|
5
|
+
import { cn } from "../../lib/utils";
|
|
6
|
+
|
|
7
|
+
const MoonUIbreadcrumbVariantsPro = cva(
|
|
8
|
+
"flex items-center gap-1.5 text-sm",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "dark:text-gray-100 transition-colors",
|
|
13
|
+
muted: "text-muted-foreground dark:text-gray-400 transition-colors",
|
|
14
|
+
ghost: "text-foreground/60 dark:text-gray-300/60 transition-colors",
|
|
15
|
+
},
|
|
16
|
+
size: {
|
|
17
|
+
default: "text-sm",
|
|
18
|
+
sm: "text-xs",
|
|
19
|
+
lg: "text-base",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
defaultVariants: {
|
|
23
|
+
variant: "default",
|
|
24
|
+
size: "default",
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
interface BreadcrumbProps
|
|
30
|
+
extends React.HTMLAttributes<HTMLElement>,
|
|
31
|
+
VariantProps<typeof MoonUIbreadcrumbVariantsPro> {
|
|
32
|
+
separator?: React.ReactNode;
|
|
33
|
+
showHomeIcon?: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface BreadcrumbListProps extends React.HTMLAttributes<HTMLOListElement> {
|
|
37
|
+
collapsed?: boolean;
|
|
38
|
+
collapsedWidth?: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface BreadcrumbItemProps extends React.HTMLAttributes<HTMLLIElement> {
|
|
42
|
+
isCurrent?: boolean;
|
|
43
|
+
href?: string;
|
|
44
|
+
asChild?: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface BreadcrumbSeparatorProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
48
|
+
/** Custom separator icon or text */
|
|
49
|
+
icon?: React.ReactNode;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
interface BreadcrumbEllipsisProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
53
|
+
/** Custom ellipsis icon */
|
|
54
|
+
icon?: React.ReactNode;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const MoonUIBreadcrumbPro = React.forwardRef<HTMLElement, BreadcrumbProps>(
|
|
58
|
+
({ className, variant, size, ...props }, ref) => (
|
|
59
|
+
<nav
|
|
60
|
+
ref={ref}
|
|
61
|
+
className={cn(MoonUIbreadcrumbVariantsPro({ variant, size }), className)}
|
|
62
|
+
aria-label="breadcrumb"
|
|
63
|
+
{...props}
|
|
64
|
+
/>
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
MoonUIBreadcrumbPro.displayName = "BreadcrumbPro";
|
|
68
|
+
|
|
69
|
+
const MoonUIBreadcrumbListPro = React.forwardRef<HTMLOListElement, BreadcrumbListProps>(
|
|
70
|
+
({ className, collapsed, collapsedWidth = 3, ...props }, ref) => {
|
|
71
|
+
const MoonUIchildrenArrayPro = React.Children.toArray(props.children).filter(Boolean);
|
|
72
|
+
const MoonUIchildCountPro = childrenArray.length;
|
|
73
|
+
|
|
74
|
+
if (collapsed && childCount > collapsedWidth) {
|
|
75
|
+
const MoonUIfirstItemPro = childrenArray[0];
|
|
76
|
+
// const MoonUImiddleItemsPro = childrenArray.slice(1, -2); // Uncomment when needed
|
|
77
|
+
const MoonUIlastTwoItemsPro = childrenArray.slice(-2);
|
|
78
|
+
|
|
79
|
+
return (
|
|
80
|
+
<ol
|
|
81
|
+
ref={ref}
|
|
82
|
+
className={cn(
|
|
83
|
+
"flex flex-wrap items-center gap-1.5 sm:gap-2.5",
|
|
84
|
+
className
|
|
85
|
+
)}
|
|
86
|
+
{...props}
|
|
87
|
+
>
|
|
88
|
+
{firstItem}
|
|
89
|
+
<BreadcrumbEllipsis />
|
|
90
|
+
{lastTwoItems}
|
|
91
|
+
</ol>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<ol
|
|
97
|
+
ref={ref}
|
|
98
|
+
className={cn(
|
|
99
|
+
"flex flex-wrap items-center gap-1.5 sm:gap-2.5",
|
|
100
|
+
className
|
|
101
|
+
)}
|
|
102
|
+
{...props}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
MoonUIBreadcrumbListPro.displayName = "BreadcrumbListPro";
|
|
108
|
+
|
|
109
|
+
const MoonUIBreadcrumbItemPro = React.forwardRef<HTMLLIElement, BreadcrumbItemProps>(
|
|
110
|
+
({ className, isCurrent, href, asChild = false, ...props }, ref) => {
|
|
111
|
+
const MoonUICompPro = asChild ? React.Fragment : href ? "a" : "span";
|
|
112
|
+
const MoonUIitemPropsPro = asChild ? {} : href ? { href } : {};
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<li
|
|
116
|
+
ref={ref}
|
|
117
|
+
className={cn("inline-flex items-center gap-1.5", className)}
|
|
118
|
+
aria-current={isCurrent ? "page" : undefined}
|
|
119
|
+
{...props}
|
|
120
|
+
>
|
|
121
|
+
<Comp
|
|
122
|
+
className={cn(
|
|
123
|
+
"transition-colors duration-200 hover:text-foreground",
|
|
124
|
+
isCurrent
|
|
125
|
+
? "font-medium text-foreground dark:text-white dark:text-opacity-95"
|
|
126
|
+
: "text-muted-foreground hover:text-foreground dark:text-gray-400 dark:hover:text-gray-200 dark:hover:text-opacity-95 hover:underline hover:underline-offset-4 hover:decoration-gray-300/30"
|
|
127
|
+
)}
|
|
128
|
+
{...itemProps}
|
|
129
|
+
>
|
|
130
|
+
{props.children}
|
|
131
|
+
</Comp>
|
|
132
|
+
</li>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
);
|
|
136
|
+
MoonUIBreadcrumbItemPro.displayName = "BreadcrumbItemPro";
|
|
137
|
+
|
|
138
|
+
const MoonUIBreadcrumbSeparatorPro = ({
|
|
139
|
+
children,
|
|
140
|
+
className,
|
|
141
|
+
...props
|
|
142
|
+
}: BreadcrumbSeparatorProps) => (
|
|
143
|
+
<span
|
|
144
|
+
role="presentation"
|
|
145
|
+
aria-hidden="true"
|
|
146
|
+
className={cn("text-muted-foreground dark:text-gray-500 opacity-70", className)}
|
|
147
|
+
{...props}
|
|
148
|
+
>
|
|
149
|
+
{children || <ChevronRight className="h-3.5 w-3.5" />}
|
|
150
|
+
</span>
|
|
151
|
+
);
|
|
152
|
+
MoonUIBreadcrumbSeparatorPro.displayName = "BreadcrumbSeparatorPro";
|
|
153
|
+
|
|
154
|
+
const MoonUIBreadcrumbEllipsisPro = ({
|
|
155
|
+
className,
|
|
156
|
+
...props
|
|
157
|
+
}: BreadcrumbEllipsisProps) => (
|
|
158
|
+
<span
|
|
159
|
+
role="presentation"
|
|
160
|
+
aria-hidden="true"
|
|
161
|
+
className={cn("flex items-center text-muted-foreground dark:text-gray-500 dark:hover:text-gray-400 transition-colors duration-200", className)}
|
|
162
|
+
{...props}
|
|
163
|
+
>
|
|
164
|
+
<MoreHorizontal className="h-4 w-4" />
|
|
165
|
+
<span className="sr-only">More pages</span>
|
|
166
|
+
</span>
|
|
167
|
+
);
|
|
168
|
+
MoonUIBreadcrumbEllipsisPro.displayName = "BreadcrumbEllipsisPro";
|
|
169
|
+
|
|
170
|
+
const MoonUIBreadcrumbLinkPro = React.forwardRef<HTMLAnchorElement, React.AnchorHTMLAttributes<HTMLAnchorElement>>(
|
|
171
|
+
({ className, href, ...props }, ref) => (
|
|
172
|
+
<a
|
|
173
|
+
ref={ref}
|
|
174
|
+
href={href}
|
|
175
|
+
className={cn(
|
|
176
|
+
"transition-colors duration-200 hover:text-foreground text-muted-foreground hover:underline hover:underline-offset-4 hover:decoration-gray-300/30 dark:text-gray-400 dark:hover:text-gray-200",
|
|
177
|
+
className
|
|
178
|
+
)}
|
|
179
|
+
{...props}
|
|
180
|
+
/>
|
|
181
|
+
)
|
|
182
|
+
);
|
|
183
|
+
MoonUIBreadcrumbLinkPro.displayName = "BreadcrumbLinkPro";
|
|
184
|
+
|
|
185
|
+
const MoonUIBreadcrumbPagePro = React.forwardRef<HTMLSpanElement, React.HTMLAttributes<HTMLSpanElement>>(
|
|
186
|
+
({ className, ...props }, ref) => (
|
|
187
|
+
<span
|
|
188
|
+
ref={ref}
|
|
189
|
+
className={cn(
|
|
190
|
+
"font-medium text-foreground dark:text-white dark:text-opacity-95",
|
|
191
|
+
className
|
|
192
|
+
)}
|
|
193
|
+
{...props}
|
|
194
|
+
/>
|
|
195
|
+
)
|
|
196
|
+
);
|
|
197
|
+
MoonUIBreadcrumbPagePro.displayName = "BreadcrumbPagePro";
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
// Internal aliases for Pro component usage
|
|
201
|
+
export const breadcrumbVariantsInternal = MoonUIbreadcrumbVariantsPro
|
|
202
|
+
export const BreadcrumbInternal = MoonUIBreadcrumbPro
|
|
203
|
+
export const BreadcrumbListInternal = MoonUIBreadcrumbListPro
|
|
204
|
+
export const childrenArrayInternal = MoonUIchildrenArrayPro
|
|
205
|
+
export const childCountInternal = MoonUIchildCountPro
|
|
206
|
+
export const firstItemInternal = MoonUIfirstItemPro
|
|
207
|
+
export const middleItemsInternal = MoonUImiddleItemsPro
|
|
208
|
+
export const lastTwoItemsInternal = MoonUIlastTwoItemsPro
|
|
209
|
+
export const BreadcrumbItemInternal = MoonUIBreadcrumbItemPro
|
|
210
|
+
export const CompInternal = MoonUICompPro
|
|
211
|
+
export const itemPropsInternal = MoonUIitemPropsPro
|
|
212
|
+
export const BreadcrumbSeparatorInternal = MoonUIBreadcrumbSeparatorPro
|
|
213
|
+
export const BreadcrumbEllipsisInternal = MoonUIBreadcrumbEllipsisPro
|
|
214
|
+
export const BreadcrumbLinkInternal = MoonUIBreadcrumbLinkPro
|
|
215
|
+
export const BreadcrumbPageInternal = MoonUIBreadcrumbPagePro
|
|
216
|
+
|
|
217
|
+
// Pro exports
|
|
218
|
+
export { MoonUIbreadcrumbVariantsPro, MoonUIBreadcrumbPro, MoonUIBreadcrumbListPro, MoonUIchildrenArrayPro, MoonUIchildCountPro, MoonUIfirstItemPro, MoonUImiddleItemsPro, MoonUIlastTwoItemsPro, MoonUIBreadcrumbItemPro, MoonUICompPro, MoonUIitemPropsPro, MoonUIBreadcrumbSeparatorPro, MoonUIBreadcrumbEllipsisPro, MoonUIBreadcrumbLinkPro, MoonUIBreadcrumbPagePro }
|
|
219
|
+
|
|
220
|
+
// Clean exports (without MoonUI prefix for easier usage)
|
|
221
|
+
export { MoonUIbreadcrumbVariantsPro as breadcrumbVariants, MoonUIBreadcrumbPro as Breadcrumb, MoonUIBreadcrumbListPro as BreadcrumbList, MoonUIchildrenArrayPro as childrenArray, MoonUIchildCountPro as childCount, MoonUIfirstItemPro as firstItem, MoonUImiddleItemsPro as middleItems, MoonUIlastTwoItemsPro as lastTwoItems, MoonUIBreadcrumbItemPro as BreadcrumbItem, MoonUICompPro as Comp, MoonUIitemPropsPro as itemProps, MoonUIBreadcrumbSeparatorPro as BreadcrumbSeparator, MoonUIBreadcrumbEllipsisPro as BreadcrumbEllipsis, MoonUIBreadcrumbLinkPro as BreadcrumbLink, MoonUIBreadcrumbPagePro as BreadcrumbPage };
|
|
@@ -255,5 +255,5 @@ MoonUICheckboxWithLabel.displayName = "CheckboxWithLabel";
|
|
|
255
255
|
|
|
256
256
|
export { MoonUICheckboxPro, CheckboxGroup, CheckboxLabel, CheckboxWithLabel };
|
|
257
257
|
|
|
258
|
-
//
|
|
259
|
-
export { MoonUICheckboxPro as Checkbox
|
|
258
|
+
// Clean exports (only checkbox specific)
|
|
259
|
+
export { MoonUICheckboxPro as Checkbox };
|