@djangocfg/ui-core 2.1.106 → 2.1.108
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@djangocfg/ui-core",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.108",
|
|
4
4
|
"description": "Pure React UI component library without Next.js dependencies - for Electron, Vite, CRA apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ui-components",
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
"vaul": "1.1.2"
|
|
123
123
|
},
|
|
124
124
|
"devDependencies": {
|
|
125
|
-
"@djangocfg/typescript-config": "^2.1.
|
|
125
|
+
"@djangocfg/typescript-config": "^2.1.108",
|
|
126
126
|
"@types/node": "^24.7.2",
|
|
127
127
|
"@types/react": "^19.1.0",
|
|
128
128
|
"@types/react-dom": "^19.1.0",
|
package/src/components/index.ts
CHANGED
|
@@ -47,6 +47,7 @@ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent,
|
|
|
47
47
|
export { Popover, PopoverContent, PopoverTrigger } from './popover';
|
|
48
48
|
export { Sheet, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription } from './sheet';
|
|
49
49
|
export { Drawer, DrawerTrigger, DrawerClose, DrawerContent, DrawerHeader, DrawerFooter, DrawerTitle, DrawerDescription } from './drawer';
|
|
50
|
+
export { ResponsiveSheet, ResponsiveSheetContent, ResponsiveSheetHeader, ResponsiveSheetTitle, ResponsiveSheetDescription, ResponsiveSheetFooter } from './responsive-sheet';
|
|
50
51
|
export { HoverCard, HoverCardContent, HoverCardTrigger } from './hover-card';
|
|
51
52
|
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';
|
|
52
53
|
|
package/src/components/item.tsx
CHANGED
|
@@ -62,7 +62,7 @@ function Item({
|
|
|
62
62
|
...props
|
|
63
63
|
}: React.ComponentProps<"div"> &
|
|
64
64
|
VariantProps<typeof itemVariants> & { asChild?: boolean }) {
|
|
65
|
-
const Comp = asChild ? Slot : "div"
|
|
65
|
+
const Comp: React.ElementType = asChild ? Slot : "div"
|
|
66
66
|
return (
|
|
67
67
|
<Comp
|
|
68
68
|
data-slot="item"
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Responsive Sheet
|
|
5
|
+
*
|
|
6
|
+
* Dialog on desktop, Drawer (pull-down) on mobile.
|
|
7
|
+
* Automatically switches based on screen width using useIsMobile hook.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import * as React from 'react';
|
|
11
|
+
|
|
12
|
+
import { useIsMobile } from '../hooks/useMobile';
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
Dialog,
|
|
16
|
+
DialogContent,
|
|
17
|
+
DialogDescription,
|
|
18
|
+
DialogFooter,
|
|
19
|
+
DialogHeader,
|
|
20
|
+
DialogTitle,
|
|
21
|
+
} from './dialog';
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
Drawer,
|
|
25
|
+
DrawerContent,
|
|
26
|
+
DrawerDescription,
|
|
27
|
+
DrawerFooter,
|
|
28
|
+
DrawerHeader,
|
|
29
|
+
DrawerTitle,
|
|
30
|
+
} from './drawer';
|
|
31
|
+
|
|
32
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
// Context
|
|
34
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
35
|
+
|
|
36
|
+
const ResponsiveSheetContext = React.createContext<{ isMobile: boolean }>({
|
|
37
|
+
isMobile: false,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
41
|
+
// Root
|
|
42
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
interface ResponsiveSheetProps {
|
|
45
|
+
open: boolean;
|
|
46
|
+
onOpenChange: (open: boolean) => void;
|
|
47
|
+
children: React.ReactNode;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function ResponsiveSheet({ open, onOpenChange, children }: ResponsiveSheetProps) {
|
|
51
|
+
const isMobile = useIsMobile();
|
|
52
|
+
|
|
53
|
+
if (isMobile) {
|
|
54
|
+
return (
|
|
55
|
+
<ResponsiveSheetContext.Provider value={{ isMobile: true }}>
|
|
56
|
+
<Drawer open={open} onOpenChange={onOpenChange}>
|
|
57
|
+
{children}
|
|
58
|
+
</Drawer>
|
|
59
|
+
</ResponsiveSheetContext.Provider>
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<ResponsiveSheetContext.Provider value={{ isMobile: false }}>
|
|
65
|
+
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
66
|
+
{children}
|
|
67
|
+
</Dialog>
|
|
68
|
+
</ResponsiveSheetContext.Provider>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
ResponsiveSheet.displayName = "ResponsiveSheet"
|
|
72
|
+
|
|
73
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
74
|
+
// Content
|
|
75
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
76
|
+
|
|
77
|
+
interface ResponsiveSheetContentProps {
|
|
78
|
+
children: React.ReactNode;
|
|
79
|
+
className?: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function ResponsiveSheetContent({ children, className }: ResponsiveSheetContentProps) {
|
|
83
|
+
const { isMobile } = React.useContext(ResponsiveSheetContext);
|
|
84
|
+
|
|
85
|
+
if (isMobile) {
|
|
86
|
+
return <DrawerContent className={className}>{children}</DrawerContent>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return <DialogContent className={className}>{children}</DialogContent>;
|
|
90
|
+
}
|
|
91
|
+
ResponsiveSheetContent.displayName = "ResponsiveSheetContent"
|
|
92
|
+
|
|
93
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
94
|
+
// Header
|
|
95
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
96
|
+
|
|
97
|
+
interface ResponsiveSheetHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}
|
|
98
|
+
|
|
99
|
+
function ResponsiveSheetHeader({ className, ...props }: ResponsiveSheetHeaderProps) {
|
|
100
|
+
const { isMobile } = React.useContext(ResponsiveSheetContext);
|
|
101
|
+
|
|
102
|
+
if (isMobile) {
|
|
103
|
+
return <DrawerHeader className={className} {...props} />;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return <DialogHeader className={className} {...props} />;
|
|
107
|
+
}
|
|
108
|
+
ResponsiveSheetHeader.displayName = "ResponsiveSheetHeader"
|
|
109
|
+
|
|
110
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
111
|
+
// Title
|
|
112
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
113
|
+
|
|
114
|
+
interface ResponsiveSheetTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}
|
|
115
|
+
|
|
116
|
+
function ResponsiveSheetTitle({ className, ...props }: ResponsiveSheetTitleProps) {
|
|
117
|
+
const { isMobile } = React.useContext(ResponsiveSheetContext);
|
|
118
|
+
|
|
119
|
+
if (isMobile) {
|
|
120
|
+
return <DrawerTitle className={className} {...props} />;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return <DialogTitle className={className} {...props} />;
|
|
124
|
+
}
|
|
125
|
+
ResponsiveSheetTitle.displayName = "ResponsiveSheetTitle"
|
|
126
|
+
|
|
127
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
128
|
+
// Description
|
|
129
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
130
|
+
|
|
131
|
+
interface ResponsiveSheetDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}
|
|
132
|
+
|
|
133
|
+
function ResponsiveSheetDescription({ className, ...props }: ResponsiveSheetDescriptionProps) {
|
|
134
|
+
const { isMobile } = React.useContext(ResponsiveSheetContext);
|
|
135
|
+
|
|
136
|
+
if (isMobile) {
|
|
137
|
+
return <DrawerDescription className={className} {...props} />;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return <DialogDescription className={className} {...props} />;
|
|
141
|
+
}
|
|
142
|
+
ResponsiveSheetDescription.displayName = "ResponsiveSheetDescription"
|
|
143
|
+
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
145
|
+
// Footer
|
|
146
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
147
|
+
|
|
148
|
+
interface ResponsiveSheetFooterProps extends React.HTMLAttributes<HTMLDivElement> {}
|
|
149
|
+
|
|
150
|
+
function ResponsiveSheetFooter({ className, ...props }: ResponsiveSheetFooterProps) {
|
|
151
|
+
const { isMobile } = React.useContext(ResponsiveSheetContext);
|
|
152
|
+
|
|
153
|
+
if (isMobile) {
|
|
154
|
+
return <DrawerFooter className={className} {...props} />;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return <DialogFooter className={className} {...props} />;
|
|
158
|
+
}
|
|
159
|
+
ResponsiveSheetFooter.displayName = "ResponsiveSheetFooter"
|
|
160
|
+
|
|
161
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
162
|
+
// Exports
|
|
163
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
164
|
+
|
|
165
|
+
export {
|
|
166
|
+
ResponsiveSheet,
|
|
167
|
+
ResponsiveSheetContent,
|
|
168
|
+
ResponsiveSheetHeader,
|
|
169
|
+
ResponsiveSheetTitle,
|
|
170
|
+
ResponsiveSheetDescription,
|
|
171
|
+
ResponsiveSheetFooter,
|
|
172
|
+
};
|