@mrigx/ui 0.1.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 (93) hide show
  1. package/package.json +73 -0
  2. package/src/blocks/ContactPanel.tsx +99 -0
  3. package/src/blocks/FeatureGrid.tsx +38 -0
  4. package/src/blocks/OpticalCTA.tsx +33 -0
  5. package/src/blocks/OpticalHero.tsx +51 -0
  6. package/src/blocks/styles.ts +175 -0
  7. package/src/components/accordion/optical-accordion.tsx +199 -0
  8. package/src/components/alert/optical-alert.tsx +59 -0
  9. package/src/components/alert-dialog/optical-alert-dialog.tsx +143 -0
  10. package/src/components/ambient-light.tsx +27 -0
  11. package/src/components/aspect-ratio/optical-aspect-ratio.tsx +7 -0
  12. package/src/components/attachment/optical-attachment.tsx +25 -0
  13. package/src/components/avatar/optical-avatar.tsx +50 -0
  14. package/src/components/badge/optical-badge.tsx +36 -0
  15. package/src/components/breadcrumb/optical-breadcrumb.tsx +115 -0
  16. package/src/components/bubble/optical-bubble.tsx +25 -0
  17. package/src/components/button/optical-button.tsx +67 -0
  18. package/src/components/button-group/optical-button-group.tsx +83 -0
  19. package/src/components/calendar/optical-calendar.tsx +214 -0
  20. package/src/components/card/optical-card.tsx +44 -0
  21. package/src/components/carousel/optical-carousel.tsx +262 -0
  22. package/src/components/chart/optical-chart.tsx +369 -0
  23. package/src/components/checkbox/optical-checkbox.tsx +42 -0
  24. package/src/components/collapsible/optical-collapsible.tsx +11 -0
  25. package/src/components/combobox/optical-combobox.tsx +25 -0
  26. package/src/components/command/optical-command.tsx +153 -0
  27. package/src/components/context-menu/optical-context-menu.tsx +201 -0
  28. package/src/components/cursor/optical-cursor.tsx +10 -0
  29. package/src/components/data-table/optical-data-table.tsx +25 -0
  30. package/src/components/date-picker/optical-date-picker.tsx +25 -0
  31. package/src/components/dialog/optical-dialog.tsx +110 -0
  32. package/src/components/direction/optical-direction.tsx +25 -0
  33. package/src/components/drawer/optical-drawer.tsx +120 -0
  34. package/src/components/dropdown-menu/optical-dropdown-menu.tsx +194 -0
  35. package/src/components/empty/optical-empty.tsx +104 -0
  36. package/src/components/field/optical-field.tsx +244 -0
  37. package/src/components/glass-card.tsx +13 -0
  38. package/src/components/hover-card/optical-hover-card.tsx +30 -0
  39. package/src/components/icon-button/optical-icon-button.tsx +22 -0
  40. package/src/components/input/optical-input.tsx +29 -0
  41. package/src/components/input-group/optical-input-group.tsx +170 -0
  42. package/src/components/input-otp/optical-input-otp.tsx +71 -0
  43. package/src/components/item/optical-item.tsx +193 -0
  44. package/src/components/kbd/optical-kbd.tsx +28 -0
  45. package/src/components/label/optical-label.tsx +25 -0
  46. package/src/components/marker/optical-marker.tsx +25 -0
  47. package/src/components/menubar/optical-menubar.tsx +257 -0
  48. package/src/components/message/optical-message.tsx +25 -0
  49. package/src/components/message-scroller/optical-message-scroller.tsx +25 -0
  50. package/src/components/native-select/optical-native-select.tsx +25 -0
  51. package/src/components/navigation-menu/optical-navigation-menu.tsx +68 -0
  52. package/src/components/pagination/optical-pagination.tsx +118 -0
  53. package/src/components/panel/optical-panel.tsx +26 -0
  54. package/src/components/popover/optical-popover.tsx +32 -0
  55. package/src/components/prism-button.tsx +17 -0
  56. package/src/components/progress/optical-progress.tsx +28 -0
  57. package/src/components/questionnaire/optical-questionnaire.tsx +25 -0
  58. package/src/components/radio-group/optical-radio-group.tsx +25 -0
  59. package/src/components/resizable/optical-resizable.tsx +45 -0
  60. package/src/components/scroll-area/optical-scroll-area.tsx +48 -0
  61. package/src/components/select/optical-select.tsx +110 -0
  62. package/src/components/separator/optical-separator.tsx +31 -0
  63. package/src/components/sheet/optical-sheet.tsx +143 -0
  64. package/src/components/sidebar/optical-sidebar.tsx +762 -0
  65. package/src/components/skeleton/optical-skeleton.tsx +15 -0
  66. package/src/components/slider/optical-slider.tsx +34 -0
  67. package/src/components/sonner/optical-toast.tsx +45 -0
  68. package/src/components/spinner/optical-spinner.tsx +16 -0
  69. package/src/components/stained-glass-card.tsx +93 -0
  70. package/src/components/switch/optical-switch.tsx +31 -0
  71. package/src/components/table/optical-table.tsx +83 -0
  72. package/src/components/tabs/optical-tabs.tsx +56 -0
  73. package/src/components/text/liquid-tension-text.tsx +65 -0
  74. package/src/components/text/optical-tension-text.tsx +65 -0
  75. package/src/components/text/optical-text.tsx +20 -0
  76. package/src/components/text/prismatic-selection.tsx +5 -0
  77. package/src/components/textarea/optical-textarea.tsx +22 -0
  78. package/src/components/theme-toggle/optical-theme-toggle.tsx +45 -0
  79. package/src/components/toast/optical-toast.tsx +25 -0
  80. package/src/components/toggle/optical-toggle.tsx +45 -0
  81. package/src/components/toggle-group/optical-toggle-group.tsx +61 -0
  82. package/src/components/tooltip/optical-tooltip.tsx +33 -0
  83. package/src/components/typography/optical-typography.tsx +49 -0
  84. package/src/hooks/use-mobile.ts +19 -0
  85. package/src/index.ts +88 -0
  86. package/src/templates/ContactPageTemplate.tsx +42 -0
  87. package/src/templates/LandingPageTemplate.tsx +29 -0
  88. package/src/templates/ProductPageTemplate.tsx +46 -0
  89. package/src/templates/styles.ts +23 -0
  90. package/src/utils/button-variants.ts +26 -0
  91. package/src/utils/cn.ts +6 -0
  92. package/tsconfig.json +27 -0
  93. package/vite.config.ts +42 -0
@@ -0,0 +1,45 @@
1
+ "use client"
2
+
3
+ import { GripVertical } from "lucide-react"
4
+ import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels"
5
+
6
+ import { cn } from '../../utils/cn';
7
+
8
+ const ResizablePanelGroup = ({
9
+ className,
10
+ ...props
11
+ }: React.ComponentProps<typeof PanelGroup>) => (
12
+ <PanelGroup
13
+ className={cn(
14
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
15
+ className
16
+ )}
17
+ {...props}
18
+ />
19
+ )
20
+
21
+ const ResizablePanel = Panel
22
+
23
+ const ResizableHandle = ({
24
+ withHandle,
25
+ className,
26
+ ...props
27
+ }: React.ComponentProps<typeof PanelResizeHandle> & {
28
+ withHandle?: boolean
29
+ }) => (
30
+ <PanelResizeHandle
31
+ className={cn(
32
+ "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
33
+ className
34
+ )}
35
+ {...props}
36
+ >
37
+ {withHandle && (
38
+ <div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
39
+ <GripVertical className="h-2.5 w-2.5" />
40
+ </div>
41
+ )}
42
+ </PanelResizeHandle>
43
+ )
44
+
45
+ export { ResizablePanelGroup, ResizablePanel, ResizableHandle }
@@ -0,0 +1,48 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
5
+
6
+ import { cn } from '../../utils/cn';
7
+
8
+ const OpticalScrollArea = React.forwardRef<
9
+ React.ElementRef<typeof ScrollAreaPrimitive.Root>,
10
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
11
+ >(({ className, children, ...props }, ref) => (
12
+ <ScrollAreaPrimitive.Root
13
+ ref={ref}
14
+ className={cn("relative overflow-hidden", className)}
15
+ {...props}
16
+ >
17
+ <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
18
+ {children}
19
+ </ScrollAreaPrimitive.Viewport>
20
+ <ScrollBar />
21
+ <ScrollAreaPrimitive.Corner />
22
+ </ScrollAreaPrimitive.Root>
23
+ ))
24
+ OpticalScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
25
+
26
+ const ScrollBar = React.forwardRef<
27
+ React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
28
+ React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
29
+ >(({ className, orientation = "vertical", ...props }, ref) => (
30
+ <ScrollAreaPrimitive.ScrollAreaScrollbar
31
+ ref={ref}
32
+ orientation={orientation}
33
+ className={cn(
34
+ "flex touch-none select-none transition-colors",
35
+ orientation === "vertical" &&
36
+ "h-full w-2.5 border-l border-l-transparent p-[1px]",
37
+ orientation === "horizontal" &&
38
+ "h-2.5 flex-col border-t border-t-transparent p-[1px]",
39
+ className
40
+ )}
41
+ {...props}
42
+ >
43
+ <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-white/20 hover:bg-white/40 active:bg-white/60 transition-colors" />
44
+ </ScrollAreaPrimitive.ScrollAreaScrollbar>
45
+ ))
46
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
47
+
48
+ export { OpticalScrollArea, ScrollBar }
@@ -0,0 +1,110 @@
1
+ import * as React from "react"
2
+ import * as SelectPrimitive from "@radix-ui/react-select"
3
+ import { GlassSurface } from '@mrigx/fx';
4
+
5
+ const OpticalSelect = SelectPrimitive.Root
6
+ const OpticalSelectGroup = SelectPrimitive.Group
7
+ const OpticalSelectValue = SelectPrimitive.Value
8
+
9
+ const OpticalSelectTrigger = React.forwardRef<
10
+ React.ElementRef<typeof SelectPrimitive.Trigger>,
11
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & { material?: string; materialStrength?: number; borderRadius?: number }
12
+ >(({ className, children, material = "glass", materialStrength = 0.5, borderRadius = 8, ...props }, ref) => (
13
+ <SelectPrimitive.Trigger
14
+ ref={ref}
15
+ className={`flex h-10 w-full items-center justify-between rounded-md border border-white/10 bg-white/[0.02] px-3 py-2 text-sm text-white/90 ring-offset-background placeholder:text-white/40 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 relative ${className}`}
16
+ {...props}
17
+ >
18
+ <GlassSurface material={material} materialStrength={materialStrength} borderRadius={borderRadius} className="absolute inset-0 -z-10" />
19
+ {children}
20
+ <SelectPrimitive.Icon asChild>
21
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="opacity-50"><path d="m6 9 6 6 6-6"/></svg>
22
+ </SelectPrimitive.Icon>
23
+ </SelectPrimitive.Trigger>
24
+ ))
25
+ OpticalSelectTrigger.displayName = SelectPrimitive.Trigger.displayName
26
+
27
+ const OpticalSelectContent = React.forwardRef<
28
+ React.ElementRef<typeof SelectPrimitive.Content>,
29
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content> & { material?: string; materialStrength?: number; borderRadius?: number }
30
+ >(({ className, children, position = "popper", material = "crystal", materialStrength = 1.0, borderRadius = 12, ...props }, ref) => (
31
+ <SelectPrimitive.Portal>
32
+ <SelectPrimitive.Content
33
+ ref={ref}
34
+ className={`relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-xl border border-white/10 text-white shadow-2xl data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=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 ${
35
+ position === "popper"
36
+ ? "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1"
37
+ : ""
38
+ } ${className}`}
39
+ position={position}
40
+ {...props}
41
+ >
42
+ <GlassSurface material={material} materialStrength={materialStrength} borderRadius={borderRadius} className="absolute inset-0 -z-10" />
43
+ <SelectPrimitive.Viewport
44
+ className={`p-1 ${
45
+ position === "popper"
46
+ ? "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
47
+ : ""
48
+ }`}
49
+ >
50
+ {children}
51
+ </SelectPrimitive.Viewport>
52
+ </SelectPrimitive.Content>
53
+ </SelectPrimitive.Portal>
54
+ ))
55
+ OpticalSelectContent.displayName = SelectPrimitive.Content.displayName
56
+
57
+ const OpticalSelectLabel = React.forwardRef<
58
+ React.ElementRef<typeof SelectPrimitive.Label>,
59
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
60
+ >(({ className, ...props }, ref) => (
61
+ <SelectPrimitive.Label
62
+ ref={ref}
63
+ className={`py-1.5 pl-8 pr-2 text-xs font-semibold tracking-wider uppercase text-white/50 ${className}`}
64
+ {...props}
65
+ />
66
+ ))
67
+ OpticalSelectLabel.displayName = SelectPrimitive.Label.displayName
68
+
69
+ const OpticalSelectItem = React.forwardRef<
70
+ React.ElementRef<typeof SelectPrimitive.Item>,
71
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
72
+ >(({ className, children, ...props }, ref) => (
73
+ <SelectPrimitive.Item
74
+ ref={ref}
75
+ className={`relative flex w-full cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-white/10 focus:text-white data-[disabled]:pointer-events-none data-[disabled]:opacity-50 ${className}`}
76
+ {...props}
77
+ >
78
+ <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
79
+ <SelectPrimitive.ItemIndicator>
80
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M20 6 9 17l-5-5"/></svg>
81
+ </SelectPrimitive.ItemIndicator>
82
+ </span>
83
+
84
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
85
+ </SelectPrimitive.Item>
86
+ ))
87
+ OpticalSelectItem.displayName = SelectPrimitive.Item.displayName
88
+
89
+ const OpticalSelectSeparator = React.forwardRef<
90
+ React.ElementRef<typeof SelectPrimitive.Separator>,
91
+ React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
92
+ >(({ className, ...props }, ref) => (
93
+ <SelectPrimitive.Separator
94
+ ref={ref}
95
+ className={`-mx-1 my-1 h-px bg-white/10 ${className}`}
96
+ {...props}
97
+ />
98
+ ))
99
+ OpticalSelectSeparator.displayName = SelectPrimitive.Separator.displayName
100
+
101
+ export {
102
+ OpticalSelect,
103
+ OpticalSelectGroup,
104
+ OpticalSelectValue,
105
+ OpticalSelectTrigger,
106
+ OpticalSelectContent,
107
+ OpticalSelectLabel,
108
+ OpticalSelectItem,
109
+ OpticalSelectSeparator,
110
+ }
@@ -0,0 +1,31 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as SeparatorPrimitive from "@radix-ui/react-separator"
5
+
6
+ import { cn } from '../../utils/cn';
7
+
8
+ const Separator = React.forwardRef<
9
+ React.ElementRef<typeof SeparatorPrimitive.Root>,
10
+ React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
11
+ >(
12
+ (
13
+ { className, orientation = "horizontal", decorative = true, ...props },
14
+ ref
15
+ ) => (
16
+ <SeparatorPrimitive.Root
17
+ ref={ref}
18
+ decorative={decorative}
19
+ orientation={orientation}
20
+ className={cn(
21
+ "shrink-0 bg-border",
22
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
23
+ className
24
+ )}
25
+ {...props}
26
+ />
27
+ )
28
+ )
29
+ Separator.displayName = SeparatorPrimitive.Root.displayName
30
+
31
+ export { Separator }
@@ -0,0 +1,143 @@
1
+ import * as React from "react"
2
+ import * as SheetPrimitive from "@radix-ui/react-dialog"
3
+ import { cva, type VariantProps } from "class-variance-authority"
4
+ import { X } from "lucide-react"
5
+
6
+ import { cn } from '../../utils/cn';
7
+ import { GlassSurface } from '@mrigx/fx';
8
+
9
+ const OpticalSheet = SheetPrimitive.Root
10
+
11
+ const OpticalSheetTrigger = SheetPrimitive.Trigger
12
+
13
+ const OpticalSheetClose = SheetPrimitive.Close
14
+
15
+ const OpticalSheetPortal = SheetPrimitive.Portal
16
+
17
+ const OpticalSheetOverlay = React.forwardRef<
18
+ React.ElementRef<typeof SheetPrimitive.Overlay>,
19
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>
20
+ >(({ className, ...props }, ref) => (
21
+ <SheetPrimitive.Overlay
22
+ className={cn(
23
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
24
+ className
25
+ )}
26
+ {...props}
27
+ ref={ref}
28
+ />
29
+ ))
30
+ OpticalSheetOverlay.displayName = SheetPrimitive.Overlay.displayName
31
+
32
+ const sheetVariants = cva(
33
+ "fixed z-50 gap-4 p-6 shadow-2xl transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
34
+ {
35
+ variants: {
36
+ side: {
37
+ top: "inset-x-0 top-0 border-b border-white/10 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
38
+ bottom:
39
+ "inset-x-0 bottom-0 border-t border-white/10 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
40
+ left: "inset-y-0 left-0 h-full w-3/4 border-r border-white/10 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
41
+ right:
42
+ "inset-y-0 right-0 h-full w-3/4 border-l border-white/10 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
43
+ },
44
+ },
45
+ defaultVariants: {
46
+ side: "right",
47
+ },
48
+ }
49
+ )
50
+
51
+ interface OpticalSheetContentProps
52
+ extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
53
+ VariantProps<typeof sheetVariants> {
54
+ material?: string;
55
+ materialStrength?: number;
56
+ }
57
+
58
+ const OpticalSheetContent = React.forwardRef<
59
+ React.ElementRef<typeof SheetPrimitive.Content>,
60
+ OpticalSheetContentProps
61
+ >(({ side = "right", className, children, material = "crystal", materialStrength = 1.0, ...props }, ref) => (
62
+ <OpticalSheetPortal>
63
+ <OpticalSheetOverlay />
64
+ <SheetPrimitive.Content
65
+ ref={ref}
66
+ className={cn(sheetVariants({ side }), className)}
67
+ {...props}
68
+ >
69
+ <GlassSurface material={material} materialStrength={materialStrength} borderRadius={0} className="absolute inset-0 -z-10" />
70
+ {children}
71
+ <SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-white/10 text-white flex items-center justify-center p-1 cursor-pointer">
72
+ <X className="h-4 w-4" />
73
+ <span className="sr-only">Close</span>
74
+ </SheetPrimitive.Close>
75
+ </SheetPrimitive.Content>
76
+ </OpticalSheetPortal>
77
+ ))
78
+ OpticalSheetContent.displayName = SheetPrimitive.Content.displayName
79
+
80
+ const OpticalSheetHeader = ({
81
+ className,
82
+ ...props
83
+ }: React.HTMLAttributes<HTMLDivElement>) => (
84
+ <div
85
+ className={cn(
86
+ "flex flex-col space-y-2 text-center sm:text-left text-white",
87
+ className
88
+ )}
89
+ {...props}
90
+ />
91
+ )
92
+ OpticalSheetHeader.displayName = "OpticalSheetHeader"
93
+
94
+ const OpticalSheetFooter = ({
95
+ className,
96
+ ...props
97
+ }: React.HTMLAttributes<HTMLDivElement>) => (
98
+ <div
99
+ className={cn(
100
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2 text-white",
101
+ className
102
+ )}
103
+ {...props}
104
+ />
105
+ )
106
+ OpticalSheetFooter.displayName = "OpticalSheetFooter"
107
+
108
+ const OpticalSheetTitle = React.forwardRef<
109
+ React.ElementRef<typeof SheetPrimitive.Title>,
110
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>
111
+ >(({ className, ...props }, ref) => (
112
+ <SheetPrimitive.Title
113
+ ref={ref}
114
+ className={cn("text-lg font-semibold text-white", className)}
115
+ {...props}
116
+ />
117
+ ))
118
+ OpticalSheetTitle.displayName = SheetPrimitive.Title.displayName
119
+
120
+ const OpticalSheetDescription = React.forwardRef<
121
+ React.ElementRef<typeof SheetPrimitive.Description>,
122
+ React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>
123
+ >(({ className, ...props }, ref) => (
124
+ <SheetPrimitive.Description
125
+ ref={ref}
126
+ className={cn("text-sm text-white/50", className)}
127
+ {...props}
128
+ />
129
+ ))
130
+ OpticalSheetDescription.displayName = SheetPrimitive.Description.displayName
131
+
132
+ export {
133
+ OpticalSheet,
134
+ OpticalSheetPortal,
135
+ OpticalSheetOverlay,
136
+ OpticalSheetTrigger,
137
+ OpticalSheetClose,
138
+ OpticalSheetContent,
139
+ OpticalSheetHeader,
140
+ OpticalSheetFooter,
141
+ OpticalSheetTitle,
142
+ OpticalSheetDescription,
143
+ }