django-cfg 1.4.82__py3-none-any.whl → 1.4.83__py3-none-any.whl
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.
Potentially problematic release.
This version of django-cfg might be problematic. Click here for more details.
- django_cfg/__init__.py +1 -1
- django_cfg/apps/centrifugo/serializers/channels.py +3 -0
- django_cfg/apps/centrifugo/serializers/publishes.py +2 -0
- django_cfg/apps/centrifugo/views/admin_api.py +1 -1
- django_cfg/apps/centrifugo/views/monitoring.py +116 -6
- django_cfg/apps/centrifugo/views/testing_api.py +1 -1
- django_cfg/apps/frontend/JWT_AUTO_INJECTION.md +224 -0
- django_cfg/apps/frontend/views.py +116 -7
- django_cfg/apps/tasks/api/serializers.py +82 -0
- django_cfg/apps/tasks/api/views.py +571 -0
- django_cfg/middleware/README.md +12 -0
- django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/function.ts.jinja +1 -1
- django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +7 -10
- django_cfg/modules/django_client/core/parser/openapi30.py +19 -1
- django_cfg/modules/django_client/core/parser/openapi31.py +19 -1
- django_cfg/pyproject.toml +1 -1
- django_cfg/static/frontend/admin/404.html +1 -1
- django_cfg/static/frontend/admin/500.html +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/404-c283223d1afd02a2.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/500-389d6d3e1f2f7fda.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/{_app-9c5ca2471de6b000.js → _app-16701a4e1bc3e6ac.js} +81 -81
- django_cfg/static/frontend/admin/_next/static/chunks/pages/_error-5291033275c26d09.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/index-88751d9f44a32105.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{cookies-24588bf5551f30df.js → cookies-bb5507a122775f30.js} +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{privacy-354dae34a4c4da59.js → privacy-f8a3d8db1a197be3.js} +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{security-0a5d7fa591ebb1ae.js → security-aba50addd2179f8f.js} +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/{terms-c3d80322f52dc112.js → terms-4aa35cd30b5c08ad.js} +1 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/private/centrifugo-1c5f00c26c77a47b.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/private/profile-e93a65e8e7d9022b.js +1 -0
- django_cfg/static/frontend/admin/_next/static/chunks/pages/ui-0e6c0e35862789ec.js +1 -0
- django_cfg/static/frontend/admin/_next/static/css/806300fb98c42afb.css +3 -0
- django_cfg/static/frontend/admin/_next/static/ibMHm1p66p0UGKsKnDWxn/_buildManifest.js +1 -0
- django_cfg/static/frontend/admin/auth.html +1 -1
- django_cfg/static/frontend/admin/index.html +1 -1
- django_cfg/static/frontend/admin/legal/cookies.html +1 -1
- django_cfg/static/frontend/admin/legal/privacy.html +1 -1
- django_cfg/static/frontend/admin/legal/security.html +1 -1
- django_cfg/static/frontend/admin/legal/terms.html +1 -1
- django_cfg/static/frontend/admin/private/centrifugo.html +1 -0
- django_cfg/static/frontend/admin/private/profile.html +1 -0
- django_cfg/static/frontend/admin/private.html +1 -1
- django_cfg/static/frontend/admin/ui.html +2 -2
- django_cfg/templatetags/django_cfg.py +57 -10
- {django_cfg-1.4.82.dist-info → django_cfg-1.4.83.dist-info}/METADATA +1 -1
- {django_cfg-1.4.82.dist-info → django_cfg-1.4.83.dist-info}/RECORD +49 -42
- django_cfg/static/frontend/admin/_next/static/chunks/pages/404-7cdad2942c3fb179.js +0 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/500-6cdb27b00678364f.js +0 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/_error-b8071a05cabe1c2d.js +0 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/index-bf88192a30e013a9.js +0 -1
- django_cfg/static/frontend/admin/_next/static/chunks/pages/ui-73632f2d9c6b11ab.js +0 -1
- django_cfg/static/frontend/admin/_next/static/css/e201974f9a4d64e6.css +0 -3
- django_cfg/static/frontend/admin/_next/static/qEBrQJUidlI_maQ4xQnI0/_buildManifest.js +0 -1
- /django_cfg/static/frontend/admin/_next/static/{qEBrQJUidlI_maQ4xQnI0 → ibMHm1p66p0UGKsKnDWxn}/_ssgManifest.js +0 -0
- {django_cfg-1.4.82.dist-info → django_cfg-1.4.83.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.82.dist-info → django_cfg-1.4.83.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.82.dist-info → django_cfg-1.4.83.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/875ae681bfde4580-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">Django CFG</title><meta name="description" content="Django CFG Admin Panel" data-next-head=""/><link rel="icon" type="image/png" href="/cfg/admin/static/logos/192x192.png" data-next-head=""/><meta property="og:title" content="Django CFG" data-next-head=""/><meta property="og:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:type" content="website" data-next-head=""/><meta name="twitter:card" content="summary_large_image" data-next-head=""/><meta name="twitter:title" content="Django CFG" data-next-head=""/><meta name="twitter:description" content="Django CFG Admin Panel" data-next-head=""/><meta property="og:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><meta property="og:image:width" content="1200" data-next-head=""/><meta property="og:image:height" content="630" data-next-head=""/><meta property="og:image:type" content="image/png" data-next-head=""/><meta name="twitter:image" content="/cfg/admin//api/og?data=eyJ0aXRsZSI6IkRqYW5nbyBDRkciLCJzdWJ0aXRsZSI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwiLCJkZXNjcmlwdGlvbiI6IkRqYW5nbyBDRkcgQWRtaW4gUGFuZWwifQ==" data-next-head=""/><link rel="preload" href="/cfg/admin/_next/static/media/875ae681bfde4580-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/cfg/admin/_next/static/css/806300fb98c42afb.css" as="style"/><link rel="stylesheet" href="/cfg/admin/_next/static/css/806300fb98c42afb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/cfg/admin/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/cfg/admin/_next/static/chunks/webpack-905bba30877f6490.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/framework-46f25b115ad0e595.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/main-f9b6d451d9991f19.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/_app-16701a4e1bc3e6ac.js" defer=""></script><script src="/cfg/admin/_next/static/chunks/pages/ui-0e6c0e35862789ec.js" defer=""></script><script src="/cfg/admin/_next/static/ibMHm1p66p0UGKsKnDWxn/_buildManifest.js" defer=""></script><script src="/cfg/admin/_next/static/ibMHm1p66p0UGKsKnDWxn/_ssgManifest.js" defer=""></script></head><body><link rel="preload" as="image" href="/cfg/admin/static/logos/vector.svg"/><div id="__next"><style>html { font-family: 'Manrope', 'Manrope Fallback'; }</style><div class="min-h-screen flex flex-col"><nav class="sticky top-0 w-full border-b backdrop-blur-xl z-[100] bg-background/80 border-border/30 isolate"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="flex items-center justify-between py-2 min-h-[40px]"><div class="flex items-center gap-6"><a class="flex items-center gap-3 group" href="/cfg/admin"><img src="/cfg/admin/static/logos/vector.svg" alt="Django CFG Logo" class="h-8 w-auto object-contain transition-transform duration-300 group-hover:scale-105"/><span class="text-xl font-bold transition-colors duration-300 text-foreground group-hover:text-primary">Django CFG</span></a><div class="flex items-center gap-1"><a class="inline-flex h-9 items-center justify-center rounded-md px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50" href="/cfg/admin">Home</a><div><button type="button" id="radix-«Rklr6»" aria-haspopup="menu" aria-expanded="false" data-state="closed" class="inline-flex h-9 items-center justify-center gap-1 rounded-md px-4 py-2 text-sm font-medium transition-colors focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground">Resources<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down h-3 w-3 transition-transform duration-200 group-data-[state=open]:rotate-180"><path d="m6 9 6 6 6-6"></path></svg></button></div><div><button type="button" id="radix-«Rslr6»" aria-haspopup="menu" aria-expanded="false" data-state="closed" class="inline-flex h-9 items-center justify-center gap-1 rounded-md px-4 py-2 text-sm font-medium transition-colors focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground">Security<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down h-3 w-3 transition-transform duration-200 group-data-[state=open]:rotate-180"><path d="m6 9 6 6 6-6"></path></svg></button></div></div></div><div class="flex items-center gap-2"><div class="flex items-center gap-3"><a class="inline-flex cursor-pointer items-center justify-center whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 rounded-md px-3 text-sm h-9 gap-1.5" href="/cfg/admin/auth"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user w-4 h-4"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg>Sign In</a></div></div></div></div></nav><main class="flex-1"><div class="min-h-screen"><div class="dark" style="--background:0 0% 4%;--foreground:0 0% 98%;--card:0 0% 8%;--card-foreground:0 0% 98%;--popover:0 0% 12%;--popover-foreground:0 0% 98%;--primary:217 91% 60%;--primary-foreground:0 0% 100%;--secondary:0 0% 98%;--secondary-foreground:0 0% 9%;--muted:0 0% 10%;--muted-foreground:0 0% 60%;--accent:0 0% 15%;--accent-foreground:0 0% 98%;--destructive:0 84% 60%;--destructive-foreground:0 0% 98%;--border:0 0% 15%;--input:0 0% 15%;--ring:217 91% 60%;--color-background:hsl(0 0% 4%);--color-foreground:hsl(0 0% 98%);--color-card:hsl(0 0% 8%);--color-card-foreground:hsl(0 0% 98%);--color-primary:hsl(217 91% 60%);--color-primary-foreground:hsl(0 0% 100%);--color-secondary:hsl(0 0% 98%);--color-secondary-foreground:hsl(0 0% 9%);--color-muted:hsl(0 0% 10%);--color-muted-foreground:hsl(0 0% 60%);--color-accent:hsl(0 0% 15%);--color-accent-foreground:hsl(0 0% 98%);--color-destructive:hsl(0 84% 60%);--color-destructive-foreground:hsl(0 0% 98%);--color-border:hsl(0 0% 15%);--color-input:hsl(0 0% 15%);--color-ring:hsl(217 91% 60%)"><section class="relative overflow-hidden bg-background text-foreground z-0 isolate"><div class="absolute inset-0 -z-10"><div class="absolute overflow-hidden pointer-events-none" style="inset:0;width:100%;height:100%"><div class="absolute inset-0 bg-gradient-to-br from-primary/7 via-transparent to-primary/7"></div><div class="absolute top-0 right-1/4 w-[600px] h-[600px] bg-gradient-to-br from-primary/25 to-transparent rounded-full blur-3xl" style="animation:float 20s ease-in-out infinite"></div><div class="absolute bottom-0 left-1/4 w-[600px] h-[600px] bg-gradient-to-tr from-primary/20 to-transparent rounded-full blur-3xl" style="animation:float 25s ease-in-out infinite reverse"></div><div class="absolute top-1/3 left-1/2 w-[400px] h-[400px] bg-primary/15 rounded-full blur-2xl" style="animation:float-diagonal 22s ease-in-out infinite"></div><style>
|
|
2
2
|
@keyframes float {
|
|
3
3
|
0%, 100% { transform: translate(0, 0); }
|
|
4
4
|
33% { transform: translate(30px, -30px); }
|
|
@@ -89,4 +89,4 @@
|
|
|
89
89
|
opacity: 0;
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
</style></div></div><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 sm:py-24 lg:py-32 relative z-10"><div class="text-center"><div class="inline-flex items-center gap-2 px-4 py-2 bg-primary/10 text-primary rounded-full text-sm font-medium mb-6 border border-primary/20 hover:bg-primary/20 transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles w-4 h-4"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg>56+ Components · 7 Blocks · 11 Hooks</div><h1 class="text-4xl sm:text-5xl lg:text-6xl xl:text-7xl font-bold text-foreground mb-6 leading-tight">Django CFG<br/><span class="bg-gradient-to-r from-primary via-primary/80 to-secondary bg-clip-text text-transparent animate-pulse">UI Library</span></h1><p class="text-xl sm:text-2xl lg:text-3xl text-muted-foreground mb-8 max-w-4xl mx-auto leading-relaxed">Modern React component library built with Next.js 15, Radix UI, and Tailwind CSS 4</p><div class="flex flex-wrap justify-center gap-6 mb-8"><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>⚛️</span><span>React 19</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>📘</span><span>TypeScript</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🎨</span><span>Tailwind CSS 4</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🌙</span><span>Dark Mode</span></div></div><div class="flex flex-col sm:flex-row gap-4 justify-center mb-12"><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-14 rounded-md px-10 text-lg group" href="/cfg/admin/ui#">Explore Components<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right group-hover:translate-x-1 transition-transform duration-300" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-14 rounded-md px-10 text-lg group" href="/cfg/admin/ui#">View Blocks<span class="group-hover:rotate-12 transition-transform duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open w-5 h-5"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></span></a></div><div class="flex flex-wrap justify-center gap-x-6 gap-y-3 md:gap-x-8 md:gap-y-4 max-w-3xl mx-auto"><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">56+</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Components</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">7</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Blocks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">11</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Hooks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">100%</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Type Safe</div></div></div></div></div><div class="absolute bottom-8 right-8 z-10 flex gap-2"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Switch to light theme"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun w-4 h-4" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><div class="relative"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Change background animation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wand-sparkles w-4 h-4" aria-hidden="true"><path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72"></path><path d="m14 7 3 3"></path><path d="M5 6v4"></path><path d="M19 14v4"></path><path d="M10 2v2"></path><path d="M7 8H3"></path><path d="M21 16h-4"></path><path d="M11 3H9"></path></svg></button></div></div></section></div><section class="py-12 sm:py-16 lg:py-24 bg-card"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Everything You Need</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">A comprehensive component library with all the building blocks for modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-package w-6 h-6"><path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"></path><path d="M12 22V12"></path><path d="m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7"></path><path d="m7.5 4.27 9 5.15"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">56+ Components</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">From basic buttons to complex data tables, we've got you covered with production-ready components</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Landing Page Blocks</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Pre-built sections like Hero, Features, CTA, Testimonials to ship landing pages faster</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-6 h-6"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Lightning Fast</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Optimized for performance with React 19 and Next.js 15 for blazing fast user experiences</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield w-6 h-6"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Fully Accessible</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Built on Radix UI primitives ensuring WCAG compliance and keyboard navigation support</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette w-6 h-6"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Themeable</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Dark mode built-in with CSS variables. Customize colors, spacing, and typography easily</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">TypeScript First</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Fully typed with TypeScript for better DX, autocomplete, and fewer runtime errors</div></div></div></div></div></section><section class="py-12 sm:py-16 lg:py-24 bg-background"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16 animate-fade-in"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Built for Scale</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">Everything you need to build modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-2 sm:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panels-top-left w-6 h-6"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M9 21V9"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">56+</div><div class="text-sm sm:text-base text-muted-foreground font-medium">UI Components</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Production-ready</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.1s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">7</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Landing Blocks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Pre-built sections</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.2s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">11</div><div class="text-sm sm:text-base text-muted-foreground font-medium">React Hooks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Custom utilities</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.30000000000000004s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check w-6 h-6"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">100%</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Type Safe</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Full TypeScript</p></div></div></div></div></section><section class="relative py-16 sm:py-20 md:py-24 lg:py-32 bg-gradient-to-b from-background via-primary/5 to-background"><div class="absolute inset-0 -z-10 overflow-hidden pointer-events-none" aria-hidden="true"><div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-4xl aspect-square bg-primary/10 rounded-full blur-3xl"></div></div><div class="container max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"><div class="text-center space-y-6 sm:space-y-8"><h2 class="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight">Ready to Build Something Amazing?</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto leading-relaxed">Start exploring our component library and ship your next project faster with pre-built, accessible components</p><div class="flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center items-center pt-4"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-11 rounded-md px-8 w-full sm:w-auto">Browse Components</button><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-11 rounded-md px-8 w-full sm:w-auto">View Blocks</button></div></div></div></section></div></main><footer class="max-lg:hidden bg-background border-t border-border mt-auto"><div class="w-full px-8 lg:px-16 xl:px-24 py-12"><div class="flex flex-col gap-8"><div class="flex gap-8"><div class="space-y-4" style="width:30%;min-width:300px"><div class="flex items-center gap-2"><div class="w-8 h-8 flex items-center justify-center"><img src="/cfg/admin/static/logos/vector.svg" alt="Django CFG Logo" class="w-full h-full object-contain"/></div><span class="text-xl font-bold text-foreground">Django CFG</span></div><p class="text-muted-foreground text-sm leading-relaxed">Django CFG Admin Panel</p><div class="pt-2"><span class="inline-flex items-center gap-2 px-3 py-1.5 rounded-sm bg-primary/10 hover:bg-primary/15 border border-primary/20 text-xs font-medium text-primary transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-car w-3.5 h-3.5" aria-hidden="true"><path d="M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2"></path><circle cx="7" cy="17" r="2"></circle><path d="M9 17h6"></path><circle cx="17" cy="17" r="2"></circle></svg>Django CFG</span></div></div><div class="grid grid-cols-2 md:grid-cols-4 gap-8 flex-1"><div><h3 class="text-sm font-semibold text-foreground mb-3">Legal</h3><ul class="space-y-2"><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/docs">Documentation</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/privacy">Privacy Policy</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/terms">Terms of Service</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/security">Security Policy</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/cookies">Cookie Policy</a></li></ul></div></div></div><div class="border-t border-border" style="margin-top:2rem;padding-top:2rem"><div class="flex justify-between items-center gap-4"><div class="text-xs text-muted-foreground">© <!-- -->2025<!-- --> <!-- -->Django CFG<!-- -->. All rights reserved.</div><div class="text-xs text-muted-foreground flex items-center gap-1">Made with ❤️ by<!-- --> <a href="https://reforms.ai" target="_blank" rel="noopener noreferrer" class="hover:text-primary transition-colors">ReformsAI</a></div><div class="flex flex-wrap items-center gap-4"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent h-auto w-auto p-1 text-muted-foreground hover:text-primary transition-colors" title="Package Versions" type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-«R3rr6»" data-state="closed"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info h-3 w-3"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg></button><a href="/docs" target="_blank" rel="noopener noreferrer" class="text-xs text-muted-foreground hover:text-primary transition-colors" title="Documentation">Docs</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/privacy">Privacy Policy</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/terms">Terms of Service</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/security">Security</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/cookies">Cookies</a></div></div></div></div></div></footer></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/ui","query":{},"buildId":"qEBrQJUidlI_maQ4xQnI0","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
92
|
+
</style></div></div><div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-20 sm:py-24 lg:py-32 relative z-10"><div class="text-center"><div class="inline-flex items-center gap-2 px-4 py-2 bg-primary/10 text-primary rounded-full text-sm font-medium mb-6 border border-primary/20 hover:bg-primary/20 transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sparkles w-4 h-4"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"></path><path d="M20 3v4"></path><path d="M22 5h-4"></path><path d="M4 17v2"></path><path d="M5 18H3"></path></svg>56+ Components · 7 Blocks · 11 Hooks</div><h1 class="text-4xl sm:text-5xl lg:text-6xl xl:text-7xl font-bold text-foreground mb-6 leading-tight">Django CFG<br/><span class="bg-gradient-to-r from-primary via-primary/80 to-secondary bg-clip-text text-transparent animate-pulse">UI Library</span></h1><p class="text-xl sm:text-2xl lg:text-3xl text-muted-foreground mb-8 max-w-4xl mx-auto leading-relaxed">Modern React component library built with Next.js 15, Radix UI, and Tailwind CSS 4</p><div class="flex flex-wrap justify-center gap-6 mb-8"><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>⚛️</span><span>React 19</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>📘</span><span>TypeScript</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🎨</span><span>Tailwind CSS 4</span></div><div class="flex items-center gap-2 text-sm text-muted-foreground bg-card/50 px-4 py-2 rounded-full border border-border/50 hover:border-primary/30 hover:bg-card transition-all duration-300"><span>🌙</span><span>Dark Mode</span></div></div><div class="flex flex-col sm:flex-row gap-4 justify-center mb-12"><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-14 rounded-md px-10 text-lg group" href="/cfg/admin/ui#">Explore Components<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right group-hover:translate-x-1 transition-transform duration-300" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-14 rounded-md px-10 text-lg group" href="/cfg/admin/ui#">View Blocks<span class="group-hover:rotate-12 transition-transform duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open w-5 h-5"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></span></a></div><div class="flex flex-wrap justify-center gap-x-6 gap-y-3 md:gap-x-8 md:gap-y-4 max-w-3xl mx-auto"><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">56+</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Components</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">7</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Blocks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">11</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Hooks</div></div><div class="text-center min-w-[80px] md:min-w-[100px] px-4 py-2 md:px-5 md:py-3 rounded-lg border border-foreground/8 bg-background/10 backdrop-blur-sm"><div class="text-lg md:text-xl font-bold text-foreground mb-0.5 md:mb-1">100%</div><div class="text-[10px] md:text-xs text-foreground/50 uppercase tracking-wide">Type Safe</div></div></div></div></div><div class="absolute bottom-8 right-8 z-10 flex gap-2"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Switch to light theme"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun w-4 h-4" aria-hidden="true"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><div class="relative"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input hover:text-accent-foreground h-9 w-9 bg-background/80 backdrop-blur-sm hover:bg-background shadow-lg" title="Change background animation"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wand-sparkles w-4 h-4" aria-hidden="true"><path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 0 0-1.72 0L2.36 18.64a1.21 1.21 0 0 0 0 1.72l1.28 1.28a1.2 1.2 0 0 0 1.72 0L21.64 5.36a1.2 1.2 0 0 0 0-1.72"></path><path d="m14 7 3 3"></path><path d="M5 6v4"></path><path d="M19 14v4"></path><path d="M10 2v2"></path><path d="M7 8H3"></path><path d="M21 16h-4"></path><path d="M11 3H9"></path></svg></button></div></div></section></div><section class="py-12 sm:py-16 lg:py-24 bg-card"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Everything You Need</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">A comprehensive component library with all the building blocks for modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-package w-6 h-6"><path d="M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z"></path><path d="M12 22V12"></path><path d="m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7"></path><path d="m7.5 4.27 9 5.15"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">56+ Components</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">From basic buttons to complex data tables, we've got you covered with production-ready components</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Landing Page Blocks</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Pre-built sections like Hero, Features, CTA, Testimonials to ship landing pages faster</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap w-6 h-6"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Lightning Fast</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Optimized for performance with React 19 and Next.js 15 for blazing fast user experiences</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield w-6 h-6"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Fully Accessible</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Built on Radix UI primitives ensuring WCAG compliance and keyboard navigation support</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-palette w-6 h-6"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"></circle><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"></circle><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"></circle><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"></circle><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">Themeable</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Dark mode built-in with CSS variables. Customize colors, spacing, and typography easily</div></div></div><div class="rounded-xl border bg-card text-card-foreground shadow h-full hover:shadow-lg transition-all duration-300 backdrop-blur-sm border-border/50 hover:border-primary/30 group"><div class="flex flex-col space-y-1.5 p-6 pb-4"><div class="w-12 h-12 sm:w-16 sm:h-16 rounded-lg flex items-center justify-center mb-4 sm:mb-6 group-hover:scale-110 transition-all duration-300 bg-primary/10 text-primary group-hover:bg-primary/20"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="font-semibold tracking-tight text-lg sm:text-xl text-foreground group-hover:text-primary transition-colors duration-300">TypeScript First</div></div><div class="p-6 pt-0"><div class="text-sm sm:text-base text-muted-foreground leading-relaxed">Fully typed with TypeScript for better DX, autocomplete, and fewer runtime errors</div></div></div></div></div></section><section class="py-12 sm:py-16 lg:py-24 bg-background"><div class="w-full px-4 sm:px-6 lg:px-8"><div class="text-center mb-12 sm:mb-16 animate-fade-in"><h2 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold text-foreground mb-4 sm:mb-6">Built for Scale</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-3xl mx-auto px-2">Everything you need to build modern web applications</p></div><div class="grid gap-6 sm:gap-8 grid-cols-2 sm:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panels-top-left w-6 h-6"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M9 21V9"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">56+</div><div class="text-sm sm:text-base text-muted-foreground font-medium">UI Components</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Production-ready</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.1s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-blocks w-6 h-6"><rect width="7" height="7" x="14" y="3" rx="1"></rect><path d="M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">7</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Landing Blocks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Pre-built sections</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.2s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml w-6 h-6"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">11</div><div class="text-sm sm:text-base text-muted-foreground font-medium">React Hooks</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Custom utilities</p></div></div><div class="rounded-xl border bg-card text-card-foreground shadow text-center hover:shadow-large transition-all duration-300 animate-scale-in backdrop-blur-sm border-border/50 hover:border-primary/30 group" style="animation-delay:0.30000000000000004s"><div class="p-6 sm:p-8"><div class="w-12 h-12 sm:w-16 sm:h-16 bg-primary/10 text-primary rounded-lg flex items-center justify-center mx-auto mb-4 sm:mb-6 group-hover:scale-110 group-hover:bg-primary/20 transition-all duration-300"><div class="text-xl sm:text-2xl"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check w-6 h-6"><circle cx="12" cy="12" r="10"></circle><path d="m9 12 2 2 4-4"></path></svg></div></div><div class="text-3xl sm:text-4xl lg:text-5xl font-bold text-foreground mb-2 sm:mb-3 group-hover:text-primary transition-colors duration-300">100%</div><div class="text-sm sm:text-base text-muted-foreground font-medium">Type Safe</div><p class="text-xs sm:text-sm text-muted-foreground mt-2">Full TypeScript</p></div></div></div></div></section><section class="relative py-16 sm:py-20 md:py-24 lg:py-32 bg-gradient-to-b from-background via-primary/5 to-background"><div class="absolute inset-0 -z-10 overflow-hidden pointer-events-none" aria-hidden="true"><div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full max-w-4xl aspect-square bg-primary/10 rounded-full blur-3xl"></div></div><div class="container max-w-4xl mx-auto px-4 sm:px-6 lg:px-8"><div class="text-center space-y-6 sm:space-y-8"><h2 class="text-3xl sm:text-4xl md:text-5xl lg:text-6xl font-bold tracking-tight">Ready to Build Something Amazing?</h2><p class="text-base sm:text-lg md:text-xl text-muted-foreground max-w-2xl mx-auto leading-relaxed">Start exploring our component library and ship your next project faster with pre-built, accessible components</p><div class="flex flex-col sm:flex-row gap-3 sm:gap-4 justify-center items-center pt-4"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground shadow hover:bg-primary/90 h-11 rounded-md px-8 w-full sm:w-auto">Browse Components</button><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground h-11 rounded-md px-8 w-full sm:w-auto">View Blocks</button></div></div></div></section></div></main><footer class="max-lg:hidden bg-background border-t border-border mt-auto"><div class="w-full px-8 lg:px-16 xl:px-24 py-12"><div class="flex flex-col gap-8"><div class="flex gap-8"><div class="space-y-4" style="width:30%;min-width:300px"><div class="flex items-center gap-2"><div class="w-8 h-8 flex items-center justify-center"><img src="/cfg/admin/static/logos/vector.svg" alt="Django CFG Logo" class="w-full h-full object-contain"/></div><span class="text-xl font-bold text-foreground">Django CFG</span></div><p class="text-muted-foreground text-sm leading-relaxed">Django CFG Admin Panel</p><div class="pt-2"><span class="inline-flex items-center gap-2 px-3 py-1.5 rounded-sm bg-primary/10 hover:bg-primary/15 border border-primary/20 text-xs font-medium text-primary transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-car w-3.5 h-3.5" aria-hidden="true"><path d="M19 17h2c.6 0 1-.4 1-1v-3c0-.9-.7-1.7-1.5-1.9C18.7 10.6 16 10 16 10s-1.3-1.4-2.2-2.3c-.5-.4-1.1-.7-1.8-.7H5c-.6 0-1.1.4-1.4.9l-1.4 2.9A3.7 3.7 0 0 0 2 12v4c0 .6.4 1 1 1h2"></path><circle cx="7" cy="17" r="2"></circle><path d="M9 17h6"></path><circle cx="17" cy="17" r="2"></circle></svg>Django CFG</span></div></div><div class="grid grid-cols-2 md:grid-cols-4 gap-8 flex-1"><div><h3 class="text-sm font-semibold text-foreground mb-3">Legal</h3><ul class="space-y-2"><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/docs">Documentation</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/privacy">Privacy Policy</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/terms">Terms of Service</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/security">Security Policy</a></li><li><a class="text-muted-foreground hover:text-primary text-sm transition-colors" href="/cfg/admin/cookies">Cookie Policy</a></li></ul></div></div></div><div class="border-t border-border" style="margin-top:2rem;padding-top:2rem"><div class="flex justify-between items-center gap-4"><div class="text-xs text-muted-foreground">© <!-- -->2025<!-- --> <!-- -->Django CFG<!-- -->. All rights reserved.</div><div class="text-xs text-muted-foreground flex items-center gap-1">Made with ❤️ by<!-- --> <a href="https://reforms.ai" target="_blank" rel="noopener noreferrer" class="hover:text-primary transition-colors">ReformsAI</a></div><div class="flex flex-wrap items-center gap-4"><button class="inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-semibold focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent h-auto w-auto p-1 text-muted-foreground hover:text-primary transition-colors" title="Package Versions" type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-«R3rr6»" data-state="closed"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-info h-3 w-3"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg></button><a href="/docs" target="_blank" rel="noopener noreferrer" class="text-xs text-muted-foreground hover:text-primary transition-colors" title="Documentation">Docs</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/privacy">Privacy Policy</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/terms">Terms of Service</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/security">Security</a><a class="text-xs text-muted-foreground hover:text-primary transition-colors" href="/cfg/admin/cookies">Cookies</a></div></div></div></div></div></footer></div><div role="region" aria-label="Notifications (F8)" tabindex="-1" style="pointer-events:none"><ol tabindex="-1" class="fixed top-0 z-[9999] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]"></ol></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/ui","query":{},"buildId":"ibMHm1p66p0UGKsKnDWxn","assetPrefix":"/cfg/admin","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -5,11 +5,8 @@ Provides template tags for accessing django-cfg configuration constants.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from django import template
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
from rest_framework_simplejwt.tokens import RefreshToken
|
|
11
|
-
except ImportError:
|
|
12
|
-
RefreshToken = None
|
|
8
|
+
from django.utils.safestring import mark_safe
|
|
9
|
+
from rest_framework_simplejwt.tokens import RefreshToken
|
|
13
10
|
|
|
14
11
|
register = template.Library()
|
|
15
12
|
|
|
@@ -75,15 +72,65 @@ def user_jwt_token(context):
|
|
|
75
72
|
window.USER_JWT_TOKEN = '{% user_jwt_token %}';
|
|
76
73
|
</script>
|
|
77
74
|
"""
|
|
78
|
-
|
|
75
|
+
request = context.get('request')
|
|
76
|
+
if not request or not request.user or not request.user.is_authenticated:
|
|
79
77
|
return ''
|
|
80
78
|
|
|
79
|
+
refresh = RefreshToken.for_user(request.user)
|
|
80
|
+
return str(refresh.access_token)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@register.simple_tag(takes_context=True)
|
|
84
|
+
def user_jwt_refresh_token(context):
|
|
85
|
+
"""
|
|
86
|
+
Generate JWT refresh token for the current authenticated user.
|
|
87
|
+
|
|
88
|
+
Returns JWT refresh token that can be used to obtain new access tokens.
|
|
89
|
+
|
|
90
|
+
Usage in template:
|
|
91
|
+
{% load django_cfg %}
|
|
92
|
+
<script>
|
|
93
|
+
window.USER_JWT_REFRESH_TOKEN = '{% user_jwt_refresh_token %}';
|
|
94
|
+
</script>
|
|
95
|
+
"""
|
|
81
96
|
request = context.get('request')
|
|
82
97
|
if not request or not request.user or not request.user.is_authenticated:
|
|
83
98
|
return ''
|
|
84
99
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
100
|
+
refresh = RefreshToken.for_user(request.user)
|
|
101
|
+
return str(refresh)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@register.simple_tag(takes_context=True)
|
|
105
|
+
def inject_jwt_tokens_script(context):
|
|
106
|
+
"""
|
|
107
|
+
Generate complete script tag that injects JWT tokens into localStorage.
|
|
108
|
+
|
|
109
|
+
Automatically stores auth_token and refresh_token in localStorage
|
|
110
|
+
for the current authenticated user.
|
|
111
|
+
|
|
112
|
+
Usage in template (usually in <head> or before </body>):
|
|
113
|
+
{% load django_cfg %}
|
|
114
|
+
{% inject_jwt_tokens_script %}
|
|
115
|
+
"""
|
|
116
|
+
request = context.get('request')
|
|
117
|
+
if not request or not request.user or not request.user.is_authenticated:
|
|
89
118
|
return ''
|
|
119
|
+
|
|
120
|
+
refresh = RefreshToken.for_user(request.user)
|
|
121
|
+
access_token = str(refresh.access_token)
|
|
122
|
+
refresh_token = str(refresh)
|
|
123
|
+
|
|
124
|
+
script = f"""<script>
|
|
125
|
+
(function() {{
|
|
126
|
+
try {{
|
|
127
|
+
// Store JWT tokens in localStorage for Next.js app
|
|
128
|
+
localStorage.setItem('auth_token', '{access_token}');
|
|
129
|
+
localStorage.setItem('refresh_token', '{refresh_token}');
|
|
130
|
+
console.log('JWT tokens injected successfully');
|
|
131
|
+
}} catch (e) {{
|
|
132
|
+
console.error('Failed to inject JWT tokens:', e);
|
|
133
|
+
}}
|
|
134
|
+
}})();
|
|
135
|
+
</script>"""
|
|
136
|
+
return mark_safe(script)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-cfg
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.83
|
|
4
4
|
Summary: Django AI framework with built-in agents, type-safe Pydantic v2 configuration, and 8 enterprise apps. Replace settings.py, validate at startup, 90% less code. Production-ready AI workflows for Django.
|
|
5
5
|
Project-URL: Homepage, https://djangocfg.com
|
|
6
6
|
Project-URL: Documentation, https://djangocfg.com
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
django_cfg/__init__.py,sha256=
|
|
2
|
+
django_cfg/__init__.py,sha256=kSJVbrVEgcls0REj1NiXg8cBspvSglkIZh1fRbdpypg,1620
|
|
3
3
|
django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
|
|
4
4
|
django_cfg/config.py,sha256=y4Z3rnYsHBE0TehpwAIPaxr---mkvyKrZGGsNwYso74,1398
|
|
5
5
|
django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
|
|
@@ -178,9 +178,9 @@ django_cfg/apps/centrifugo/models/__init__.py,sha256=vav0ToNcSDcwwpJ-7_npM1oBSbh
|
|
|
178
178
|
django_cfg/apps/centrifugo/models/centrifugo_log.py,sha256=VAUrfXZzPO7rR-6wbSySpKSnbMvCptOKlnTT2umF2KY,5656
|
|
179
179
|
django_cfg/apps/centrifugo/serializers/__init__.py,sha256=AjNEgSrCqiRtI4_bbLnGeuwdB-84btJDyqYuunwLWBI,1161
|
|
180
180
|
django_cfg/apps/centrifugo/serializers/admin_api.py,sha256=oKhMAes1GswpJnO9sXN7zPSyA1vtneeO8JYVO4dKodY,7769
|
|
181
|
-
django_cfg/apps/centrifugo/serializers/channels.py,sha256=
|
|
181
|
+
django_cfg/apps/centrifugo/serializers/channels.py,sha256=_U1SnvQ1MTTJnioo0DMo4OnHnnDpyvaE39lziLPtJpI,1003
|
|
182
182
|
django_cfg/apps/centrifugo/serializers/health.py,sha256=2vmtHwSEedU91IhAvAcx-SJS2X5Ud-bJoU2FVRjFXBQ,493
|
|
183
|
-
django_cfg/apps/centrifugo/serializers/publishes.py,sha256=
|
|
183
|
+
django_cfg/apps/centrifugo/serializers/publishes.py,sha256=J59H9U7Iu44D7FOKQ8qgqCcESpJV9zDEhbtiHtz2anQ,609
|
|
184
184
|
django_cfg/apps/centrifugo/serializers/stats.py,sha256=po3sR0EGOWj9C8F8cFatGrDugebF3J66-klJW-2ZMIg,784
|
|
185
185
|
django_cfg/apps/centrifugo/services/__init__.py,sha256=IKtNnDDRMOQdOhAP41GgUIDPpEspF1dW87IE9Jc80vI,247
|
|
186
186
|
django_cfg/apps/centrifugo/services/config_helper.py,sha256=d2eT8AczcCRl-v2OqZUu0n-MvSt42GWJOD7tJTHKiSg,1583
|
|
@@ -211,15 +211,16 @@ django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/tags/connection_scrip
|
|
|
211
211
|
django_cfg/apps/centrifugo/templatetags/__init__.py,sha256=W0mT4SMe7uZ3wInk88xVw1LP2vYWBsVV1U3EFt9uW7k,32
|
|
212
212
|
django_cfg/apps/centrifugo/templatetags/centrifugo_tags.py,sha256=0t9cZjxBgKJ3JDh9moRwnPEFkaXwB7gnk2LLwofLgmE,1873
|
|
213
213
|
django_cfg/apps/centrifugo/views/__init__.py,sha256=k4gAQehwJOF6RE-wqgEISdtTRjT4iMw9NoLqh4AeNqk,364
|
|
214
|
-
django_cfg/apps/centrifugo/views/admin_api.py,sha256=
|
|
214
|
+
django_cfg/apps/centrifugo/views/admin_api.py,sha256=4IUaPuzUSB9oN4wbpVUKsOZiYK6ZQGGWLmt-XfRvkfg,13970
|
|
215
215
|
django_cfg/apps/centrifugo/views/dashboard.py,sha256=9FTZDJu-4RsAyc2G5udpsK-ffn3uBlxY3z_TSPfUB4E,757
|
|
216
|
-
django_cfg/apps/centrifugo/views/monitoring.py,sha256=
|
|
217
|
-
django_cfg/apps/centrifugo/views/testing_api.py,sha256=
|
|
216
|
+
django_cfg/apps/centrifugo/views/monitoring.py,sha256=eFjoZDvnfwZh-Fw2OwFDii-SZTReHswi_hqAQeVOLk4,14502
|
|
217
|
+
django_cfg/apps/centrifugo/views/testing_api.py,sha256=fOGc1I7XxOuRIIOnDQ9T1E0GwS5UuyR_YVJxw685UdE,16954
|
|
218
|
+
django_cfg/apps/frontend/JWT_AUTO_INJECTION.md,sha256=vw4M49mijxjd1ANlumPbye3d2XIaYuc_3jYRbmWsb-8,8018
|
|
218
219
|
django_cfg/apps/frontend/__init__.py,sha256=QMFJM9mpjiPcU0e5EnuLZb6xpCWi3cbSnihyPS9U2Ik,394
|
|
219
220
|
django_cfg/apps/frontend/apps.py,sha256=9eEK0Tq2nOsol7xSK5aobdwTDJTJrWx6Iy1I1DQb_Yk,391
|
|
220
221
|
django_cfg/apps/frontend/setup.py,sha256=TxKQwQw4xTF6VSyhrQBzbUsdsVQR9JHdjc36LZKeQh4,2444
|
|
221
222
|
django_cfg/apps/frontend/urls.py,sha256=Vz22_2i2w1J0KQYDCxHnTF5rUf32kUUSBDJZrP07XgY,284
|
|
222
|
-
django_cfg/apps/frontend/views.py,sha256=
|
|
223
|
+
django_cfg/apps/frontend/views.py,sha256=5oYPvrsmOqUUiUNI8uoW-19REgpJyqaVzFkQ7m-LaRE,5983
|
|
223
224
|
django_cfg/apps/knowbase/README.md,sha256=HXt_J6WCN-LsMhA7p9mdvih07_vp_r_hkPdmqHhNEeo,3965
|
|
224
225
|
django_cfg/apps/knowbase/__init__.py,sha256=cfGnxDQwjajPhUoleKkgvdabJcB0LdXEglnsBojKkPo,1045
|
|
225
226
|
django_cfg/apps/knowbase/apps.py,sha256=GAYw98_rQdGHoak58xN-0vjdDcRNpJuND3kV-FfM1II,3290
|
|
@@ -495,6 +496,8 @@ django_cfg/apps/tasks/urls_admin.py,sha256=qSKV-Oo1TRwS1i_f9tXLL7uU6HSxGFKrQx2O5
|
|
|
495
496
|
django_cfg/apps/tasks/admin/__init__.py,sha256=vn7ddiQYGTl3HA9C_WixLmhmRF0W13Mtu2O9up1cGjc,208
|
|
496
497
|
django_cfg/apps/tasks/admin/actions.py,sha256=csxHx2UALp4iiqlHPHf-QSovE3zkPYaEAy158tTQGGA,860
|
|
497
498
|
django_cfg/apps/tasks/admin/tasks_admin.py,sha256=kzDA5hBULAZEBy8lQMxRxGsJOoa5tweTlY8UMoMv7TQ,6669
|
|
499
|
+
django_cfg/apps/tasks/api/serializers.py,sha256=zmh99EM2rkPW21vlnwUupruxLWFdehnq0H0joimUfBQ,2703
|
|
500
|
+
django_cfg/apps/tasks/api/views.py,sha256=ft8eaRoMYz_iStPxcHg7d_3dvjaNxNZyzyh0RJq8f1g,21869
|
|
498
501
|
django_cfg/apps/tasks/static/tasks/css/dashboard-alpine.css,sha256=NKuZh8Qcq3zt_hoTiJyrpS2dh8p7q4A9MPpNwmq5PpQ,5242
|
|
499
502
|
django_cfg/apps/tasks/static/tasks/css/dashboard.css,sha256=1ULA4LGX40dWrpiv86my0ATmixkyIpGLyRjMfPmqy-0,2166
|
|
500
503
|
django_cfg/apps/tasks/static/tasks/js/dashboard-alpine.js,sha256=pw2vlekIdzsePW9x4_7Ybk7UcXM1d-tXVhzr09hHMJY,25506
|
|
@@ -627,7 +630,7 @@ django_cfg/management/commands/test_telegram.py,sha256=aLnGM4oArXhQekNNWoPMU5vu6
|
|
|
627
630
|
django_cfg/management/commands/test_twilio.py,sha256=Wn-vp9pI1gDyl1rmuvzk-s2NSarGaQOsyua53nJG6QI,632
|
|
628
631
|
django_cfg/management/commands/tree.py,sha256=CoUFAVrABWuRlZ6movUuDKHoj48DRazPxZh4ucqOdt8,12729
|
|
629
632
|
django_cfg/management/commands/validate_openapi.py,sha256=CdcoMhtxQhjTL6nCifAYkn02uqvo9hmKeyPJxlhz4Iw,342
|
|
630
|
-
django_cfg/middleware/README.md,sha256=
|
|
633
|
+
django_cfg/middleware/README.md,sha256=OLnK_Lto3tWnvjlrovmXU_nXTS2fQZyNzMFvTErlNB8,13501
|
|
631
634
|
django_cfg/middleware/__init__.py,sha256=EVah9AYIWT3R8inTqPY20oB4xb-KejhwqngM1Z4UrD8,465
|
|
632
635
|
django_cfg/middleware/admin_notifications.py,sha256=EVoXjSLaDz4r-lL5hy6V9sC1BpNF0rKsa-s6L31foRQ,6856
|
|
633
636
|
django_cfg/middleware/authentication.py,sha256=1deekm3lyAMJ2pK7Usd5q1FtUN1aDq_CGJuZrJuHZtE,6139
|
|
@@ -793,7 +796,7 @@ django_cfg/modules/django_client/core/generator/typescript/templates/api_instanc
|
|
|
793
796
|
django_cfg/modules/django_client/core/generator/typescript/templates/app_index.ts.jinja,sha256=gLsoYyEzKD6Gv64vsO9sQHMPiFMGdaB5XVufLHeRyvQ,62
|
|
794
797
|
django_cfg/modules/django_client/core/generator/typescript/templates/client_file.ts.jinja,sha256=LHUt72fO2eRNAHYEscIYvqVR69GC6mxqjcgSlUzeCtc,251
|
|
795
798
|
django_cfg/modules/django_client/core/generator/typescript/templates/index.ts.jinja,sha256=OtQxzqV_6SYvugk_oS0F9_WXty2tnKY_wl2n9-WeJqo,127
|
|
796
|
-
django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja,sha256=
|
|
799
|
+
django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja,sha256=5B_X07RJF0k7to78I_KC9buHFvzYlLFZaQZNnFa-oog,7396
|
|
797
800
|
django_cfg/modules/django_client/core/generator/typescript/templates/package.json.jinja,sha256=XOgZJG3twzWJ8gsZ5VZ_gQx7zBvrnwXy-yUFHfdyBBs,1280
|
|
798
801
|
django_cfg/modules/django_client/core/generator/typescript/templates/tsconfig.json.jinja,sha256=QKbo6hYoVdRXrm7psRzBGStzAP5omQrnamSQT6b44gE,482
|
|
799
802
|
django_cfg/modules/django_client/core/generator/typescript/templates/client/app_client.ts.jinja,sha256=jaFN_QIQU2eyu-6uiwUjwACYNr06LI14XGJN0Dgv-9E,260
|
|
@@ -803,7 +806,7 @@ django_cfg/modules/django_client/core/generator/typescript/templates/client/main
|
|
|
803
806
|
django_cfg/modules/django_client/core/generator/typescript/templates/client/operation.ts.jinja,sha256=z6GD-r7Y-S_yhDtlOAjMgDSL10AF3YrBLLNLPiCt8rE,1869
|
|
804
807
|
django_cfg/modules/django_client/core/generator/typescript/templates/client/sub_client.ts.jinja,sha256=1rtFMqJO8ynjNNblhMPwCbVFhbSbLJJwiMhuJJYf9Lw,215
|
|
805
808
|
django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/fetchers.ts.jinja,sha256=HNeYh8LnTTmeKTQS7uup37Oq-_HwBPZH8qE1kneaJsg,1296
|
|
806
|
-
django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/function.ts.jinja,sha256=
|
|
809
|
+
django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/function.ts.jinja,sha256=cR4Y4eJ1ENcON9BcfI-ttnJfKxv61efMW2oVDrmJga8,580
|
|
807
810
|
django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/index.ts.jinja,sha256=DoAVm8EoglJKtLrE917Fk7Na6rn5Bt9L1nI39o9AwzM,747
|
|
808
811
|
django_cfg/modules/django_client/core/generator/typescript/templates/hooks/hooks.ts.jinja,sha256=_iyvJBEQviLLtZ5z1qXNUM976zXPW-v9DXFyHJdrpCQ,802
|
|
809
812
|
django_cfg/modules/django_client/core/generator/typescript/templates/hooks/index.ts.jinja,sha256=c4Jru6DAKD-y8nzig1my0iE-BO3OwjSCENALbHvAp7E,694
|
|
@@ -829,8 +832,8 @@ django_cfg/modules/django_client/core/ir/operation.py,sha256=gwvTciqIAUS0Hb7TqVU
|
|
|
829
832
|
django_cfg/modules/django_client/core/ir/schema.py,sha256=TfG6iLlAJVa8Jtxis_nPmz4TrfTqRlocZFlv8pvBNj8,12561
|
|
830
833
|
django_cfg/modules/django_client/core/parser/__init__.py,sha256=8luZt53hRdtLRPVMWG3zpaWK53sKGBabQGmkDCye4ow,2312
|
|
831
834
|
django_cfg/modules/django_client/core/parser/base.py,sha256=-6xCCxc7Y33TtcgFYsGKDpvABkNLUlZTA8iSXksnjdw,23471
|
|
832
|
-
django_cfg/modules/django_client/core/parser/openapi30.py,sha256=
|
|
833
|
-
django_cfg/modules/django_client/core/parser/openapi31.py,sha256=
|
|
835
|
+
django_cfg/modules/django_client/core/parser/openapi30.py,sha256=CBkl4ppQ0lvirkLmLGIn5GIFBbu3jUsV6t4vlI44vto,2323
|
|
836
|
+
django_cfg/modules/django_client/core/parser/openapi31.py,sha256=K-ru1AOG0a9rVTTdt7Wa_iQJbRYwUcAGB8Oj-dz6eio,2614
|
|
834
837
|
django_cfg/modules/django_client/core/parser/models/__init__.py,sha256=GrGazWB-rr-e_HBtOTFNRA2WjkyGM5MH85iAMs_cs7s,1690
|
|
835
838
|
django_cfg/modules/django_client/core/parser/models/base.py,sha256=orOGoX3zUglZt_vCk0JJycmmsAFG5zN-KAYy9cwp8Ao,5467
|
|
836
839
|
django_cfg/modules/django_client/core/parser/models/components.py,sha256=BCgUL_OlnRKYLJ2ea47o1YJnVeP5F4gNNCeHcZ_WWhk,4473
|
|
@@ -1058,14 +1061,14 @@ django_cfg/static/admin/js/alpine/commands-section.js,sha256=8z2MQNwZF9Tx_2EK1AY
|
|
|
1058
1061
|
django_cfg/static/admin/js/alpine/dashboard-tabs.js,sha256=ob8Q_I9lFLDv_hFERXgTyvqMDBspAGfzCxI_7slRur4,1354
|
|
1059
1062
|
django_cfg/static/admin/js/alpine/system-metrics.js,sha256=m-Fg55K_vpHXToD46PXL9twl4OBF_V9MONvbSWbQqDw,440
|
|
1060
1063
|
django_cfg/static/admin/js/alpine/toggle-section.js,sha256=T141NFmy0fRJyGGuuaCJRjJXwPam-xxtQNW1hi8BJbc,672
|
|
1061
|
-
django_cfg/static/frontend/admin/404.html,sha256=
|
|
1062
|
-
django_cfg/static/frontend/admin/500.html,sha256=
|
|
1063
|
-
django_cfg/static/frontend/admin/auth.html,sha256=
|
|
1064
|
+
django_cfg/static/frontend/admin/404.html,sha256=WD4L5foHVPTrZszlZQZmvYlejmqMSek56g-p3uZYPiQ,13148
|
|
1065
|
+
django_cfg/static/frontend/admin/500.html,sha256=WGJErMSt8FwjU0kC0R8Qu3w4rFAcjP1l9N7lRWDZwhc,13245
|
|
1066
|
+
django_cfg/static/frontend/admin/auth.html,sha256=ObqXcxYAMLQ3MhhOGZCN6FlJLM3t6xbLzNfyhEUy5Nc,8446
|
|
1064
1067
|
django_cfg/static/frontend/admin/favicon.png,sha256=k_yaCRYwsPBknQkEIdpakdMGbORiOrpvrBQyC_SN5NM,33530
|
|
1065
|
-
django_cfg/static/frontend/admin/index.html,sha256=
|
|
1068
|
+
django_cfg/static/frontend/admin/index.html,sha256=Ahb4o2-NxCCmMVWOoXQgUESN7MhzKem0j4s2TEelHQ0,11615
|
|
1066
1069
|
django_cfg/static/frontend/admin/manifest.json,sha256=Jc3Eu0qeRafLub6jlsmzQLD-g8sm1b1IU2GEu1yZz-8,663
|
|
1067
|
-
django_cfg/static/frontend/admin/private.html,sha256=
|
|
1068
|
-
django_cfg/static/frontend/admin/ui.html,sha256=
|
|
1070
|
+
django_cfg/static/frontend/admin/private.html,sha256=rEXny5hWbn20PklKp_kF8F63YEADAmdbEozHLCJnNNw,8249
|
|
1071
|
+
django_cfg/static/frontend/admin/ui.html,sha256=PNAgnIwrRm6C02b7b-aHYSCDpDmzKzYie8k_W8SC1jQ,39540
|
|
1069
1072
|
django_cfg/static/frontend/admin/_next/static/chunks/10004.28e6c5f4c1878a7f.js,sha256=SDxi6Bnx_spdfbZmruPtX-b2CkBPk6NZWuN908PJy00,1970
|
|
1070
1073
|
django_cfg/static/frontend/admin/_next/static/chunks/10045.c0de73a7d5e3b776.js,sha256=mUUE9DVL67cYOOCH5prwZEttparzaHaBCRFvBGURgAk,1661
|
|
1071
1074
|
django_cfg/static/frontend/admin/_next/static/chunks/1010.b05c484e9c210a35.js,sha256=ztx1p7LeQUHI1apKRPUThrFWGHPNuO3GRqm_Lh0p5n4,50539
|
|
@@ -3205,31 +3208,35 @@ django_cfg/static/frontend/admin/_next/static/chunks/framework-46f25b115ad0e595.
|
|
|
3205
3208
|
django_cfg/static/frontend/admin/_next/static/chunks/main-f9b6d451d9991f19.js,sha256=n0uA5eK_7TEJxH2edZGsDWjLcln4qIOFRz5A6ZCVxl8,128050
|
|
3206
3209
|
django_cfg/static/frontend/admin/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
|
|
3207
3210
|
django_cfg/static/frontend/admin/_next/static/chunks/webpack-905bba30877f6490.js,sha256=1_XaWBFS4ofNLjFc6xoGeUVMmR-_IoJJcvDfDY3igoI,56750
|
|
3208
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/404-
|
|
3209
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/500-
|
|
3210
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/_app-
|
|
3211
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/_error-
|
|
3211
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/404-c283223d1afd02a2.js,sha256=oaxFxJ8o8GUiRsCBwhna0eBnb345FanlUTpzvrhjs5Q,400
|
|
3212
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/500-389d6d3e1f2f7fda.js,sha256=DyJHmOprhI1awBfcVh9Mi12vE56A4a_bPsuJFv4kXjU,402
|
|
3213
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/_app-16701a4e1bc3e6ac.js,sha256=SFcRYxFuaq1EIt9Jm3d4HmeQWvoGHTLObFpovCkXf4c,2971904
|
|
3214
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/_error-5291033275c26d09.js,sha256=YDUKht9kE0boy6cRWENr0smhLKdFAT6oD05MW4CokKQ,454
|
|
3212
3215
|
django_cfg/static/frontend/admin/_next/static/chunks/pages/auth-a872607f98742e5a.js,sha256=RhpzAFpGuXVTrg935pLfhLoMJXrMlwxw_1al5nzs4d8,613
|
|
3213
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/index-
|
|
3216
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/index-88751d9f44a32105.js,sha256=N5EsnScJh5bv735oLXsGbZqgEv1KrJu0akrk7iAi1DQ,977
|
|
3214
3217
|
django_cfg/static/frontend/admin/_next/static/chunks/pages/private-2f58633ddf63a5bc.js,sha256=C5fSXw9hKFyMCbbvvrPfqORZqmkcWPJZgqfUACAf-dI,450
|
|
3215
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/ui-
|
|
3216
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/cookies-
|
|
3217
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/privacy-
|
|
3218
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/security-
|
|
3219
|
-
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/terms-
|
|
3220
|
-
django_cfg/static/frontend/admin/_next/static/
|
|
3218
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/ui-0e6c0e35862789ec.js,sha256=0jqj1mR7hNs14w3pU7R3EFvFcEyNuKdxZWMInle0MXk,457
|
|
3219
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/cookies-bb5507a122775f30.js,sha256=eAtXieRRprPLCyk2hmWTRfi_Vh-_QJuUJp4oWIHyHtc,3246
|
|
3220
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/privacy-f8a3d8db1a197be3.js,sha256=g6IDtbozrPQOIgPYgVfS1lpvY2AWJakQ3RgQkXtJMeU,3193
|
|
3221
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/security-aba50addd2179f8f.js,sha256=niU1F4OwnFMxtTLZCl2-8gNyQPBRpHeg65DhS0i9yEM,3402
|
|
3222
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/legal/terms-4aa35cd30b5c08ad.js,sha256=HpF0hwzoRoCSmpO2Hzd0Nb-L9p5KnR6a8B5fIKby5yw,2846
|
|
3223
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/private/centrifugo-1c5f00c26c77a47b.js,sha256=HlDqU13Fm5LySao_xuHHF6BwVUylxoCvN2Hd9TPgz5k,311888
|
|
3224
|
+
django_cfg/static/frontend/admin/_next/static/chunks/pages/private/profile-e93a65e8e7d9022b.js,sha256=VFofW3pgKqrjSUR-4WjYw49-gBpehdxTR6nNVvb6w8w,472
|
|
3225
|
+
django_cfg/static/frontend/admin/_next/static/css/806300fb98c42afb.css,sha256=dgYD3RpHRYhZS44r9weKiefCwgEYe8tKYd2ZOAY4qH0,124312
|
|
3226
|
+
django_cfg/static/frontend/admin/_next/static/ibMHm1p66p0UGKsKnDWxn/_buildManifest.js,sha256=qdg3bKiWRnZB9DrxijGk59Z_TkeM4oa6DddLuzI36q4,1376
|
|
3227
|
+
django_cfg/static/frontend/admin/_next/static/ibMHm1p66p0UGKsKnDWxn/_ssgManifest.js,sha256=b1tKoA0vjWrtmTW0cYBr96zvRk0MHTkCYOX-J_gAxn4,77
|
|
3221
3228
|
django_cfg/static/frontend/admin/_next/static/media/438aa629764e75f3-s.woff2,sha256=6MCzmZLwaz3JqYNElAiAFIWfNjv2yoeStrsH4Xx5ZfM,2592
|
|
3222
3229
|
django_cfg/static/frontend/admin/_next/static/media/4c9affa5bc8f420e-s.p.woff2,sha256=4xC1Wn_ZZ39eNVXmxsTQZPofHSQ5Pw3b4hfOoSqMQy8,24576
|
|
3223
3230
|
django_cfg/static/frontend/admin/_next/static/media/51251f8b9793cdb3-s.woff2,sha256=QK8RMn_lMIFmxstXh4CLBC222oiav2AvCkh2xJZ12H4,9360
|
|
3224
3231
|
django_cfg/static/frontend/admin/_next/static/media/875ae681bfde4580-s.p.woff2,sha256=laSTBh_gqNDQJ8KJJ0cTS6dHFBES075NUCLnCrfToaY,14544
|
|
3225
3232
|
django_cfg/static/frontend/admin/_next/static/media/cc978ac5ee68c2b6-s.woff2,sha256=zgk7NB2cEGWO4eqoXF-AQv8zB7xsz8X0BWFutDfwAJ4,15240
|
|
3226
3233
|
django_cfg/static/frontend/admin/_next/static/media/e857b654a2caa584-s.woff2,sha256=urdX-KChvAQFXumMtXd_MlSqsR9tIiNm4fQKNvOQUGo,8492
|
|
3227
|
-
django_cfg/static/frontend/admin/
|
|
3228
|
-
django_cfg/static/frontend/admin/
|
|
3229
|
-
django_cfg/static/frontend/admin/legal/
|
|
3230
|
-
django_cfg/static/frontend/admin/legal/
|
|
3231
|
-
django_cfg/static/frontend/admin/
|
|
3232
|
-
django_cfg/static/frontend/admin/
|
|
3234
|
+
django_cfg/static/frontend/admin/legal/cookies.html,sha256=ToDETyeSYHt9j8ZoCYPRR7yFxISjiLifxiEAwX955B0,13839
|
|
3235
|
+
django_cfg/static/frontend/admin/legal/privacy.html,sha256=6yexv9xsOna9ih0p8yfnz8WqqYPmdEeqUykNd9gaSOw,13880
|
|
3236
|
+
django_cfg/static/frontend/admin/legal/security.html,sha256=HdNewhk5CQS9BpPdjV-B9f3AaOjqpNoqA859i4FKo-E,14201
|
|
3237
|
+
django_cfg/static/frontend/admin/legal/terms.html,sha256=X1BMU3FDWjE4D3jkiMxti8SMWt-WgESG_C-kku3vHMI,13615
|
|
3238
|
+
django_cfg/static/frontend/admin/private/centrifugo.html,sha256=upxi_yYHASYeIKP2l4PNd0W_2L9cE7kxAtaE5AlIUWo,8271
|
|
3239
|
+
django_cfg/static/frontend/admin/private/profile.html,sha256=QmbySMkaO5oSQa0cxVx8HVJAyG12mial2N7B9aVU-ns,8265
|
|
3233
3240
|
django_cfg/static/frontend/admin/static/logos/192x192.png,sha256=k_yaCRYwsPBknQkEIdpakdMGbORiOrpvrBQyC_SN5NM,33530
|
|
3234
3241
|
django_cfg/static/frontend/admin/static/logos/384x384.png,sha256=T2JZG0LfPv-k-8brPjbKPTlTQqfivmak1qr2ijJ6ckg,133486
|
|
3235
3242
|
django_cfg/static/frontend/admin/static/logos/512x512.png,sha256=_fYvtvBJTTef8nUlZ-YyCa7L6Tt8eZTt14N4LCRJPA0,244293
|
|
@@ -3307,7 +3314,7 @@ django_cfg/templates/admin/snippets/tabs/widgets_tab.html,sha256=1TxvLPjydcOQRVd
|
|
|
3307
3314
|
django_cfg/templates/admin/snippets/zones/zones_table.html,sha256=WtaI-x16LijochRy7uFj8xyUeqcCqhenF9xKRW_JQWE,11879
|
|
3308
3315
|
django_cfg/templates/emails/base_email.html,sha256=TWcvYa2IHShlF_E8jf1bWZStRO0v8G4L_GexPxvz6XQ,8836
|
|
3309
3316
|
django_cfg/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3310
|
-
django_cfg/templatetags/django_cfg.py,sha256=
|
|
3317
|
+
django_cfg/templatetags/django_cfg.py,sha256=dPCcuZySSNvDlsiFkyeZ1b_GkhhybNLY-bHHF9Wmm-w,3907
|
|
3311
3318
|
django_cfg/utils/__init__.py,sha256=64wwXJuXytvwt8Ze_erSR2HmV07nGWJ6DV5wloRBvYE,435
|
|
3312
3319
|
django_cfg/utils/path_resolution.py,sha256=2n0I04lQkSssFaELu3A93YyMAl1K10KPdpxMt5k4Iy0,13341
|
|
3313
3320
|
django_cfg/utils/smart_defaults.py,sha256=ZUj6K_Deq-fp5O0Dy_Emt257UWFn0f9bkgFv9YCR58U,9239
|
|
@@ -3315,9 +3322,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
|
|
|
3315
3322
|
django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
|
|
3316
3323
|
django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
|
|
3317
3324
|
django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
3318
|
-
django_cfg/pyproject.toml,sha256=
|
|
3319
|
-
django_cfg-1.4.
|
|
3320
|
-
django_cfg-1.4.
|
|
3321
|
-
django_cfg-1.4.
|
|
3322
|
-
django_cfg-1.4.
|
|
3323
|
-
django_cfg-1.4.
|
|
3325
|
+
django_cfg/pyproject.toml,sha256=osZ_C6FoyVkgNjrU43ZoWeUjCy0IbPbpYcTbrtaaJ_4,8164
|
|
3326
|
+
django_cfg-1.4.83.dist-info/METADATA,sha256=BTzOBAuo3-2e9oLu_kKOwiK8Jgzs2lMs3-Oje_p_y0U,22624
|
|
3327
|
+
django_cfg-1.4.83.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
3328
|
+
django_cfg-1.4.83.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
|
|
3329
|
+
django_cfg-1.4.83.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
3330
|
+
django_cfg-1.4.83.dist-info/RECORD,,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[32336],{5539:(_,n,u)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/404",function(){return u(95022)}])},95022:(_,n,u)=>{"use strict";u.r(n),u.d(n,{default:()=>c});var e=u(94513),t=u(56781),s=u(4758);function c(){return(0,e.jsx)(s.x$,{code:404,supportEmail:t.W0.contact.email})}}},_=>{_.O(0,[90636,46593,38792],()=>_(_.s=5539)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[40421],{80315:(_,n,u)=>{"use strict";u.r(n),u.d(n,{default:()=>c});var e=u(94513),t=u(56781),s=u(4758);function c(){return(0,e.jsx)(s.x$,{code:500,supportEmail:t.W0.contact.email})}},80883:(_,n,u)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/500",function(){return u(80315)}])}},_=>{_.O(0,[90636,46593,38792],()=>_(_.s=80883)),_N_E=_.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[12731],{83953:(e,t,_)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_error",function(){return _(94437)}])},94437:(e,t,_)=>{"use strict";_.r(t),_.d(t,{default:()=>i});var n=_(94513),r=_(56781),s=_(4758);function u(e){let{statusCode:t}=e;return(0,n.jsx)(s.x$,{code:t,supportEmail:r.W0.contact.email})}u.getInitialProps=s.sL;let i=u}},e=>{e.O(0,[90636,46593,38792],()=>e(e.s=83953)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[93332],{27923:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>f});var a=s(94513),l=s(4758),n=s(30512),r=s(94285),i=s(84553),c=s(58380);let d=(0,s(25365).A)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);var u=s(44754);let h=()=>{let{isAuthenticated:e}=(0,l.h7)(),t=(0,c.useRouter)();return(0,r.useEffect)(()=>{e||u.yz||t.push((0,n.OJ)(i.JZ))},[e,t.asPath]),(0,a.jsx)("div",{className:"flex items-center justify-center min-h-screen bg-background",children:(0,a.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,a.jsx)(d,{className:"animate-spin text-primary",style:{width:"48px",height:"48px"}}),(0,a.jsx)("span",{className:"text-lg font-medium text-muted-foreground",children:"Loading..."})]})})};h.pageConfig={title:"Portal"};let f=h},59409:(e,t,s)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return s(27923)}])}},e=>{e.O(0,[90636,46593,38792],()=>e(e.s=59409)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[66038],{2731:(e,o,n)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/ui",function(){return n(5232)}])},5232:(e,o,n)=>{"use strict";n.r(o),n.d(o,{default:()=>c});var t=n(94513),s=n(4758);let _=()=>(0,t.jsx)(s.QP,{});_.pageConfig={title:"Component Showcase",description:"Explore our comprehensive collection of React components"};let c=_}},e=>{e.O(0,[90636,46593,38792],()=>e(e.s=2731)),_N_E=e.O()}]);
|