@djangocfg/layouts 1.2.45 → 1.2.47

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/layouts",
3
- "version": "1.2.45",
3
+ "version": "1.2.47",
4
4
  "description": "Layout system and components for Unrealon applications",
5
5
  "author": {
6
6
  "name": "DjangoCFG",
@@ -63,9 +63,9 @@
63
63
  "check": "tsc --noEmit"
64
64
  },
65
65
  "peerDependencies": {
66
- "@djangocfg/api": "^1.2.45",
67
- "@djangocfg/og-image": "^1.2.45",
68
- "@djangocfg/ui": "^1.2.45",
66
+ "@djangocfg/api": "^1.2.47",
67
+ "@djangocfg/og-image": "^1.2.47",
68
+ "@djangocfg/ui": "^1.2.47",
69
69
  "@hookform/resolvers": "^5.2.0",
70
70
  "consola": "^3.4.2",
71
71
  "lucide-react": "^0.468.0",
@@ -86,7 +86,7 @@
86
86
  "vidstack": "0.6.15"
87
87
  },
88
88
  "devDependencies": {
89
- "@djangocfg/typescript-config": "^1.2.45",
89
+ "@djangocfg/typescript-config": "^1.2.47",
90
90
  "@types/node": "^24.7.2",
91
91
  "@types/react": "19.2.2",
92
92
  "@types/react-dom": "19.2.1",
@@ -16,36 +16,36 @@ export interface PackageInfo {
16
16
  /**
17
17
  * Package versions registry
18
18
  * Auto-synced from package.json files
19
- * Last updated: 2025-11-20T05:41:09.881Z
19
+ * Last updated: 2025-11-20T16:20:04.792Z
20
20
  */
21
21
  const PACKAGE_VERSIONS: PackageInfo[] = [
22
22
  {
23
23
  "name": "@djangocfg/ui",
24
- "version": "1.2.45"
24
+ "version": "1.2.47"
25
25
  },
26
26
  {
27
27
  "name": "@djangocfg/api",
28
- "version": "1.2.45"
28
+ "version": "1.2.47"
29
29
  },
30
30
  {
31
31
  "name": "@djangocfg/layouts",
32
- "version": "1.2.45"
32
+ "version": "1.2.47"
33
33
  },
34
34
  {
35
35
  "name": "@djangocfg/markdown",
36
- "version": "1.2.45"
36
+ "version": "1.2.47"
37
37
  },
38
38
  {
39
39
  "name": "@djangocfg/og-image",
40
- "version": "1.2.45"
40
+ "version": "1.2.47"
41
41
  },
42
42
  {
43
43
  "name": "@djangocfg/eslint-config",
44
- "version": "1.2.45"
44
+ "version": "1.2.47"
45
45
  },
46
46
  {
47
47
  "name": "@djangocfg/typescript-config",
48
- "version": "1.2.45"
48
+ "version": "1.2.47"
49
49
  }
50
50
  ];
51
51
 
@@ -5,6 +5,7 @@
5
5
  import React from 'react';
6
6
  import {
7
7
  Button,
8
+ ButtonLink,
8
9
  DownloadButton,
9
10
  Input,
10
11
  Checkbox,
@@ -56,22 +57,45 @@ export const FORM_COMPONENTS: ComponentConfig[] = [
56
57
  {
57
58
  name: 'Button',
58
59
  category: 'forms',
59
- description: 'Interactive button with multiple variants and sizes',
60
- importPath: "import { Button } from '@djangocfg/ui';",
61
- example: `<Button variant="default">Click me</Button>
60
+ description: 'Interactive button with multiple variants, sizes, and loading state. Use ButtonLink for navigation.',
61
+ importPath: "import { Button, ButtonLink } from '@djangocfg/ui';",
62
+ example: `// Variants
63
+ <Button variant="default">Click me</Button>
62
64
  <Button variant="destructive">Delete</Button>
63
65
  <Button variant="outline">Outline</Button>
64
66
  <Button variant="ghost">Ghost</Button>
67
+
68
+ // Sizes
65
69
  <Button size="sm">Small</Button>
66
- <Button size="lg">Large</Button>`,
70
+ <Button size="lg">Large</Button>
71
+
72
+ // Loading state
73
+ <Button loading={true}>Saving...</Button>
74
+ <Button loading={false}>Save</Button>
75
+
76
+ // ButtonLink for navigation with Next.js Link
77
+ <ButtonLink href="/dashboard">Go to Dashboard</ButtonLink>
78
+ <ButtonLink href="/settings" variant="outline">Settings</ButtonLink>`,
67
79
  preview: (
68
- <div className="flex flex-wrap gap-3">
69
- <Button variant="default">Click me</Button>
70
- <Button variant="destructive">Delete</Button>
71
- <Button variant="outline">Outline</Button>
72
- <Button variant="ghost">Ghost</Button>
73
- <Button size="sm">Small</Button>
74
- <Button size="lg">Large</Button>
80
+ <div className="flex flex-col gap-4">
81
+ <div className="flex flex-wrap gap-3">
82
+ <Button variant="default">Click me</Button>
83
+ <Button variant="destructive">Delete</Button>
84
+ <Button variant="outline">Outline</Button>
85
+ <Button variant="ghost">Ghost</Button>
86
+ </div>
87
+ <div className="flex flex-wrap gap-3">
88
+ <Button size="sm">Small</Button>
89
+ <Button size="lg">Large</Button>
90
+ </div>
91
+ <div className="flex flex-wrap gap-3">
92
+ <Button loading={true}>Saving...</Button>
93
+ <Button loading={false}>Save</Button>
94
+ </div>
95
+ <div className="flex flex-wrap gap-3">
96
+ <ButtonLink href="#">Go to Dashboard</ButtonLink>
97
+ <ButtonLink href="#" variant="outline">Settings</ButtonLink>
98
+ </div>
75
99
  </div>
76
100
  ),
77
101
  },
@@ -37,7 +37,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
37
37
  {
38
38
  name: 'NavigationMenu',
39
39
  category: 'navigation',
40
- description: 'Accessible navigation menu with dropdown support',
40
+ description: 'Accessible navigation menu with dropdown support and Next.js router integration',
41
41
  importPath: `import {
42
42
  NavigationMenu,
43
43
  NavigationMenuContent,
@@ -53,6 +53,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
53
53
  <NavigationMenuContent>
54
54
  <ul className="grid gap-3 p-6 md:w-[400px]">
55
55
  <li>
56
+ {/* NavigationMenuLink with href uses Next.js Link automatically */}
56
57
  <NavigationMenuLink href="/">
57
58
  <div className="text-sm font-medium">Welcome</div>
58
59
  <p className="text-sm text-muted-foreground">
@@ -64,6 +65,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
64
65
  </NavigationMenuContent>
65
66
  </NavigationMenuItem>
66
67
  <NavigationMenuItem>
68
+ {/* Direct link with client-side navigation */}
67
69
  <NavigationMenuLink href="/docs">
68
70
  Documentation
69
71
  </NavigationMenuLink>
@@ -102,7 +104,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
102
104
  {
103
105
  name: 'Breadcrumb',
104
106
  category: 'navigation',
105
- description: 'Navigation breadcrumbs showing current page hierarchy',
107
+ description: 'Navigation breadcrumbs showing current page hierarchy with Next.js router support',
106
108
  importPath: `import {
107
109
  Breadcrumb,
108
110
  BreadcrumbItem,
@@ -114,6 +116,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
114
116
  example: `<Breadcrumb>
115
117
  <BreadcrumbList>
116
118
  <BreadcrumbItem>
119
+ {/* BreadcrumbLink with href automatically uses Next.js Link */}
117
120
  <BreadcrumbLink href="/">Home</BreadcrumbLink>
118
121
  </BreadcrumbItem>
119
122
  <BreadcrumbSeparator />
@@ -122,6 +125,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
122
125
  </BreadcrumbItem>
123
126
  <BreadcrumbSeparator />
124
127
  <BreadcrumbItem>
128
+ {/* Current page - not a link */}
125
129
  <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
126
130
  </BreadcrumbItem>
127
131
  </BreadcrumbList>
@@ -208,7 +212,7 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
208
212
  {
209
213
  name: 'Pagination',
210
214
  category: 'navigation',
211
- description: 'Page navigation with previous/next controls',
215
+ description: 'Page navigation with previous/next controls and Next.js router support',
212
216
  importPath: `import {
213
217
  Pagination,
214
218
  PaginationContent,
@@ -221,22 +225,23 @@ export const NAVIGATION_COMPONENTS: ComponentConfig[] = [
221
225
  example: `<Pagination>
222
226
  <PaginationContent>
223
227
  <PaginationItem>
224
- <PaginationPrevious href="#" />
228
+ {/* Previous/Next with href automatically use Next.js Link */}
229
+ <PaginationPrevious href="/page/1" />
225
230
  </PaginationItem>
226
231
  <PaginationItem>
227
- <PaginationLink href="#" isActive>1</PaginationLink>
232
+ <PaginationLink href="/page/1" isActive>1</PaginationLink>
228
233
  </PaginationItem>
229
234
  <PaginationItem>
230
- <PaginationLink href="#">2</PaginationLink>
235
+ <PaginationLink href="/page/2">2</PaginationLink>
231
236
  </PaginationItem>
232
237
  <PaginationItem>
233
- <PaginationLink href="#">3</PaginationLink>
238
+ <PaginationLink href="/page/3">3</PaginationLink>
234
239
  </PaginationItem>
235
240
  <PaginationItem>
236
241
  <PaginationEllipsis />
237
242
  </PaginationItem>
238
243
  <PaginationItem>
239
- <PaginationNext href="#" />
244
+ <PaginationNext href="/page/2" />
240
245
  </PaginationItem>
241
246
  </PaginationContent>
242
247
  </Pagination>`,
@@ -466,7 +466,7 @@ export const OVERLAY_COMPONENTS: ComponentConfig[] = [
466
466
  {
467
467
  name: 'DropdownMenu',
468
468
  category: 'overlay',
469
- description: 'Dropdown menu for actions and options',
469
+ description: 'Dropdown menu for actions and options with Next.js router support',
470
470
  importPath: `import {
471
471
  DropdownMenu,
472
472
  DropdownMenuContent,
@@ -483,9 +483,15 @@ export const OVERLAY_COMPONENTS: ComponentConfig[] = [
483
483
  <DropdownMenuContent className="w-56">
484
484
  <DropdownMenuLabel>My Account</DropdownMenuLabel>
485
485
  <DropdownMenuSeparator />
486
- <DropdownMenuItem>Profile</DropdownMenuItem>
487
- <DropdownMenuItem>Billing</DropdownMenuItem>
488
- <DropdownMenuItem>Settings</DropdownMenuItem>
486
+ {/* DropdownMenuItem with href automatically uses Next.js Link */}
487
+ <DropdownMenuItem href="/profile">Profile</DropdownMenuItem>
488
+ <DropdownMenuItem href="/billing">Billing</DropdownMenuItem>
489
+ <DropdownMenuItem href="/settings">Settings</DropdownMenuItem>
490
+ <DropdownMenuSeparator />
491
+ {/* Without href - for actions */}
492
+ <DropdownMenuItem onClick={() => console.log('Logout')}>
493
+ Logout
494
+ </DropdownMenuItem>
489
495
  </DropdownMenuContent>
490
496
  </DropdownMenu>`,
491
497
  preview: (
@@ -506,7 +512,7 @@ export const OVERLAY_COMPONENTS: ComponentConfig[] = [
506
512
  {
507
513
  name: 'Menubar',
508
514
  category: 'overlay',
509
- description: 'Application menubar with multiple menu groups',
515
+ description: 'Application menubar with multiple menu groups and Next.js router support',
510
516
  importPath: `import {
511
517
  Menubar,
512
518
  MenubarContent,
@@ -519,19 +525,21 @@ export const OVERLAY_COMPONENTS: ComponentConfig[] = [
519
525
  <MenubarMenu>
520
526
  <MenubarTrigger>File</MenubarTrigger>
521
527
  <MenubarContent>
522
- <MenubarItem>New Tab</MenubarItem>
523
- <MenubarItem>New Window</MenubarItem>
528
+ {/* MenubarItem with href automatically uses Next.js Link */}
529
+ <MenubarItem href="/new">New Tab</MenubarItem>
530
+ <MenubarItem href="/window">New Window</MenubarItem>
524
531
  <MenubarSeparator />
525
- <MenubarItem>Share</MenubarItem>
532
+ <MenubarItem href="/share">Share</MenubarItem>
526
533
  <MenubarSeparator />
527
- <MenubarItem>Print</MenubarItem>
534
+ {/* Without href - for actions */}
535
+ <MenubarItem onClick={() => window.print()}>Print</MenubarItem>
528
536
  </MenubarContent>
529
537
  </MenubarMenu>
530
538
  <MenubarMenu>
531
539
  <MenubarTrigger>Edit</MenubarTrigger>
532
540
  <MenubarContent>
533
- <MenubarItem>Undo</MenubarItem>
534
- <MenubarItem>Redo</MenubarItem>
541
+ <MenubarItem onClick={() => document.execCommand('undo')}>Undo</MenubarItem>
542
+ <MenubarItem onClick={() => document.execCommand('redo')}>Redo</MenubarItem>
535
543
  </MenubarContent>
536
544
  </MenubarMenu>
537
545
  </Menubar>`,
@@ -25,41 +25,66 @@ export const SPECIALIZED_COMPONENTS: ComponentConfig[] = [
25
25
  {
26
26
  name: 'Sidebar',
27
27
  category: 'specialized',
28
- description: 'Full-featured sidebar navigation component (23KB) with collapsible groups and icons',
29
- importPath: `import { Sidebar } from '@djangocfg/ui';`,
30
- example: `// Note: Sidebar is a complex component used in layouts
31
- // See DashboardLayout in the Layouts section for full implementation
28
+ description: 'Full-featured sidebar navigation component (23KB) with collapsible groups, icons, and Next.js router support',
29
+ importPath: `import {
30
+ Sidebar,
31
+ SidebarContent,
32
+ SidebarGroup,
33
+ SidebarGroupLabel,
34
+ SidebarGroupContent,
35
+ SidebarMenu,
36
+ SidebarMenuItem,
37
+ SidebarMenuButton,
38
+ SidebarMenuSub,
39
+ SidebarMenuSubButton,
40
+ SidebarMenuSubItem,
41
+ } from '@djangocfg/ui';`,
42
+ example: `// SidebarMenuButton with href automatically uses Next.js Link
43
+ <Sidebar>
44
+ <SidebarContent>
45
+ <SidebarGroup>
46
+ <SidebarGroupLabel>Main</SidebarGroupLabel>
47
+ <SidebarGroupContent>
48
+ <SidebarMenu>
49
+ <SidebarMenuItem>
50
+ <SidebarMenuButton href="/" isActive tooltip="Dashboard">
51
+ <HomeIcon />
52
+ <span>Dashboard</span>
53
+ </SidebarMenuButton>
54
+ </SidebarMenuItem>
55
+ <SidebarMenuItem>
56
+ <SidebarMenuButton href="/users" tooltip="Users">
57
+ <UsersIcon />
58
+ <span>Users</span>
59
+ </SidebarMenuButton>
60
+ </SidebarMenuItem>
61
+ </SidebarMenu>
62
+ </SidebarGroupContent>
63
+ </SidebarGroup>
32
64
 
33
- <Sidebar
34
- menuGroups={[
35
- {
36
- label: "Main",
37
- items: [
38
- {
39
- icon: <HomeIcon />,
40
- label: "Dashboard",
41
- href: "/",
42
- isActive: true
43
- },
44
- {
45
- icon: <UsersIcon />,
46
- label: "Users",
47
- href: "/users"
48
- },
49
- ]
50
- },
51
- {
52
- label: "Settings",
53
- items: [
54
- {
55
- icon: <SettingsIcon />,
56
- label: "Preferences",
57
- href: "/settings"
58
- },
59
- ]
60
- }
61
- ]}
62
- />`,
65
+ <SidebarGroup>
66
+ <SidebarGroupLabel>Settings</SidebarGroupLabel>
67
+ <SidebarGroupContent>
68
+ <SidebarMenu>
69
+ <SidebarMenuItem>
70
+ <SidebarMenuButton href="/settings">
71
+ <SettingsIcon />
72
+ <span>Preferences</span>
73
+ </SidebarMenuButton>
74
+ {/* Submenu items also support href */}
75
+ <SidebarMenuSub>
76
+ <SidebarMenuSubItem>
77
+ <SidebarMenuSubButton href="/settings/profile">
78
+ Profile
79
+ </SidebarMenuSubButton>
80
+ </SidebarMenuSubItem>
81
+ </SidebarMenuSub>
82
+ </SidebarMenuItem>
83
+ </SidebarMenu>
84
+ </SidebarGroupContent>
85
+ </SidebarGroup>
86
+ </SidebarContent>
87
+ </Sidebar>`,
63
88
  preview: (
64
89
  <div className="p-6 border rounded-md bg-muted/50">
65
90
  <p className="text-sm text-muted-foreground mb-4">