@digilogiclabs/create-saas-app 1.10.0 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/cli/commands/create.d.ts +7 -0
  3. package/dist/cli/commands/create.d.ts.map +1 -1
  4. package/dist/cli/commands/create.js +32 -1
  5. package/dist/cli/commands/create.js.map +1 -1
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +2 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/generators/template-generator.d.ts +9 -0
  10. package/dist/generators/template-generator.d.ts.map +1 -1
  11. package/dist/generators/template-generator.js +15 -1
  12. package/dist/generators/template-generator.js.map +1 -1
  13. package/dist/templates/web/ui-auth-ai/template/.env.example +18 -0
  14. package/dist/templates/web/ui-auth-ai/template/README.md +170 -0
  15. package/dist/templates/web/ui-auth-ai/template/next.config.js +13 -0
  16. package/dist/templates/web/ui-auth-ai/template/package.json +39 -0
  17. package/dist/templates/web/ui-auth-ai/template/postcss.config.js +6 -0
  18. package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +40 -0
  19. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +41 -0
  20. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +193 -0
  21. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +141 -0
  22. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +158 -0
  23. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +106 -0
  24. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +44 -0
  25. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +24 -0
  26. package/dist/templates/web/ui-auth-ai/template/src/components/ui/label.tsx +21 -0
  27. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +37 -0
  28. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +23 -0
  29. package/dist/templates/web/ui-auth-ai/template/src/hooks/useAuth.ts +1 -0
  30. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +8 -0
  31. package/dist/templates/web/ui-auth-ai/template/src/lib/utils.ts +5 -0
  32. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +55 -0
  33. package/dist/templates/web/ui-auth-ai/template/tailwind.config.js +22 -0
  34. package/dist/templates/web/ui-auth-ai/template/tsconfig.json +28 -0
  35. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +15 -15
  36. package/package.json +1 -1
  37. package/src/templates/web/ui-auth-ai/template/.env.example +18 -0
  38. package/src/templates/web/ui-auth-ai/template/README.md +170 -0
  39. package/src/templates/web/ui-auth-ai/template/next.config.js +13 -0
  40. package/src/templates/web/ui-auth-ai/template/package.json +39 -0
  41. package/src/templates/web/ui-auth-ai/template/postcss.config.js +6 -0
  42. package/src/templates/web/ui-auth-ai/template/src/app/globals.css +40 -0
  43. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +41 -0
  44. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +193 -0
  45. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +141 -0
  46. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +158 -0
  47. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +106 -0
  48. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +44 -0
  49. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +24 -0
  50. package/src/templates/web/ui-auth-ai/template/src/components/ui/label.tsx +21 -0
  51. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +37 -0
  52. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +23 -0
  53. package/src/templates/web/ui-auth-ai/template/src/hooks/useAuth.ts +1 -0
  54. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +8 -0
  55. package/src/templates/web/ui-auth-ai/template/src/lib/utils.ts +5 -0
  56. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +55 -0
  57. package/src/templates/web/ui-auth-ai/template/tailwind.config.js +22 -0
  58. package/src/templates/web/ui-auth-ai/template/tsconfig.json +28 -0
  59. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +15 -15
@@ -0,0 +1,37 @@
1
+ import * as React from "react"
2
+ import { cn } from "@/lib/utils"
3
+
4
+ export interface SelectProps
5
+ extends React.SelectHTMLAttributes<HTMLSelectElement> {}
6
+
7
+ const Select = React.forwardRef<HTMLSelectElement, SelectProps>(
8
+ ({ className, children, ...props }, ref) => {
9
+ return (
10
+ <select
11
+ className={cn(
12
+ "flex h-10 w-full items-center justify-between rounded-md border border-gray-300 bg-white px-3 py-2 text-sm placeholder:text-gray-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
13
+ className
14
+ )}
15
+ ref={ref}
16
+ {...props}
17
+ >
18
+ {children}
19
+ </select>
20
+ )
21
+ }
22
+ )
23
+ Select.displayName = "Select"
24
+
25
+ // Simplified Select components for the template
26
+ const SelectTrigger = Select
27
+ const SelectValue = ({ children, ...props }: React.HTMLAttributes<HTMLSpanElement>) => (
28
+ <span {...props}>{children}</span>
29
+ )
30
+ const SelectContent = ({ children, ...props }: React.HTMLAttributes<HTMLDivElement>) => (
31
+ <div {...props}>{children}</div>
32
+ )
33
+ const SelectItem = ({ value, children, ...props }: React.OptionHTMLAttributes<HTMLOptionElement>) => (
34
+ <option value={value} {...props}>{children}</option>
35
+ )
36
+
37
+ export { Select, SelectTrigger, SelectValue, SelectContent, SelectItem }
@@ -0,0 +1,23 @@
1
+ import * as React from "react"
2
+ import { cn } from "@/lib/utils"
3
+
4
+ export interface TextareaProps
5
+ extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
6
+
7
+ const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
8
+ ({ className, ...props }, ref) => {
9
+ return (
10
+ <textarea
11
+ className={cn(
12
+ "flex min-h-[80px] w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm placeholder:text-gray-400 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
13
+ className
14
+ )}
15
+ ref={ref}
16
+ {...props}
17
+ />
18
+ )
19
+ }
20
+ )
21
+ Textarea.displayName = "Textarea"
22
+
23
+ export { Textarea }
@@ -0,0 +1 @@
1
+ export { useAuth } from '@/providers/auth-provider'
@@ -0,0 +1,8 @@
1
+ import { createBrowserClient } from '@supabase/ssr'
2
+
3
+ export function createClient() {
4
+ return createBrowserClient(
5
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
6
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
7
+ )
8
+ }
@@ -0,0 +1,5 @@
1
+ import { type ClassValue, clsx } from "clsx"
2
+
3
+ export function cn(...inputs: ClassValue[]) {
4
+ return clsx(inputs)
5
+ }
@@ -0,0 +1,55 @@
1
+ 'use client'
2
+
3
+ import { createContext, useContext, useEffect, useState } from 'react'
4
+ import { createClient } from '@/lib/supabase'
5
+ import type { User } from '@supabase/supabase-js'
6
+
7
+ interface AuthContextType {
8
+ user: User | null
9
+ loading: boolean
10
+ signOut: () => Promise<void>
11
+ }
12
+
13
+ const AuthContext = createContext<AuthContextType | undefined>(undefined)
14
+
15
+ export function AuthProvider({ children }: { children: React.ReactNode }) {
16
+ const [user, setUser] = useState<User | null>(null)
17
+ const [loading, setLoading] = useState(true)
18
+ const supabase = createClient()
19
+
20
+ useEffect(() => {
21
+ // Get initial session
22
+ supabase.auth.getSession().then(({ data: { session } }) => {
23
+ setUser(session?.user ?? null)
24
+ setLoading(false)
25
+ })
26
+
27
+ // Listen for auth changes
28
+ const {
29
+ data: { subscription },
30
+ } = supabase.auth.onAuthStateChange((_event, session) => {
31
+ setUser(session?.user ?? null)
32
+ setLoading(false)
33
+ })
34
+
35
+ return () => subscription.unsubscribe()
36
+ }, [supabase.auth])
37
+
38
+ const signOut = async () => {
39
+ await supabase.auth.signOut()
40
+ }
41
+
42
+ return (
43
+ <AuthContext.Provider value={{ user, loading, signOut }}>
44
+ {children}
45
+ </AuthContext.Provider>
46
+ )
47
+ }
48
+
49
+ export function useAuth() {
50
+ const context = useContext(AuthContext)
51
+ if (context === undefined) {
52
+ throw new Error('useAuth must be used within an AuthProvider')
53
+ }
54
+ return context
55
+ }
@@ -0,0 +1,22 @@
1
+ /** @type {import('tailwindcss').Config} */
2
+ module.exports = {
3
+ content: [
4
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
5
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
6
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
7
+ './src/**/*.{js,ts,jsx,tsx,mdx}',
8
+ ],
9
+ theme: {
10
+ extend: {
11
+ colors: {
12
+ primary: {
13
+ 50: '#eff6ff',
14
+ 500: '#3b82f6',
15
+ 600: '#2563eb',
16
+ 700: '#1d4ed8',
17
+ },
18
+ },
19
+ },
20
+ },
21
+ plugins: [],
22
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5",
4
+ "lib": ["dom", "dom.iterable", "es6"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "esModuleInterop": true,
10
+ "module": "esnext",
11
+ "moduleResolution": "bundler",
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "jsx": "preserve",
15
+ "incremental": true,
16
+ "plugins": [
17
+ {
18
+ "name": "next"
19
+ }
20
+ ],
21
+ "baseUrl": ".",
22
+ "paths": {
23
+ "@/*": ["./src/*"]
24
+ }
25
+ },
26
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
27
+ "exclude": ["node_modules"]
28
+ }
@@ -224,7 +224,7 @@ export default function Home() {
224
224
  {/* Main Content */}
225
225
  <div className="lg:col-span-3 space-y-8">
226
226
  {/* Now Playing Card with Enhanced Glassmorphism */}
227
- <div className="${glass.card} ${glass.border} rounded-3xl p-6 mb-8 ${animations.hover.lift} ${animations.transition.smooth}">
227
+ <div className={`${glass.card} ${glass.border} rounded-3xl p-6 mb-8 ${animations.hover.lift} ${animations.transition.smooth}">
228
228
  <NowPlayingCard
229
229
  track={currentTrack || demoPlaylist[0]}
230
230
  isPlaying={isPlaying}
@@ -236,7 +236,7 @@ export default function Home() {
236
236
 
237
237
  {/* Featured Playlists with Staggered Animation */}
238
238
  <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
239
- <div className="${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.short}">
239
+ <div className={`${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.short}">
240
240
  <PlaylistCard
241
241
  title="Today's Top Hits"
242
242
  description="The most played songs today"
@@ -246,7 +246,7 @@ export default function Home() {
246
246
  className="bg-transparent border-none"
247
247
  />
248
248
  </div>
249
- <div className="${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.medium}">
249
+ <div className={`${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.medium}">
250
250
  <PlaylistCard
251
251
  title="Chill Vibes"
252
252
  description="Relaxing music for focus and creativity"
@@ -256,7 +256,7 @@ export default function Home() {
256
256
  className="bg-transparent border-none"
257
257
  />
258
258
  </div>
259
- <div className="${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.long}">
259
+ <div className={`${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.long}">
260
260
  <PlaylistCard
261
261
  title="Electronic Pulse"
262
262
  description="High-energy electronic and dance music"
@@ -269,7 +269,7 @@ export default function Home() {
269
269
  </div>
270
270
 
271
271
  {/* Track List with Glassmorphism */}
272
- <div className="${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.transition.smooth}">
272
+ <div className={`${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.transition.smooth}">
273
273
  <TrackList
274
274
  tracks={demoPlaylist}
275
275
  currentTrackId={currentTrack?.id}
@@ -288,7 +288,7 @@ export default function Home() {
288
288
 
289
289
  {/* Sidebar with Glassmorphism */}
290
290
  <div className="lg:col-span-1">
291
- <div className="${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.lift} ${animations.transition.smooth}">
291
+ <div className={`${glass.card} ${glass.border} rounded-2xl overflow-hidden ${animations.hover.lift} ${animations.transition.smooth}">
292
292
  <PlaylistSidebar
293
293
  playlists={[
294
294
  { id: '1', name: 'Liked Songs', trackCount: 47 },
@@ -306,8 +306,8 @@ export default function Home() {
306
306
 
307
307
  {/* Features Overview with Enhanced Glassmorphism */}
308
308
  <ResponsiveGrid columns={gridConfig.columns_1_sm2_md4} gap="lg" className="mb-16">
309
- <div className="${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.short}">
310
- <div className="mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}">
309
+ <div className={`${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.short}">
310
+ <div className={`mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}`}>
311
311
  <Zap className="h-6 w-6 text-blue-400" />
312
312
  </div>
313
313
  <h3 className="text-lg font-semibold mb-2">High-Quality Streaming</h3>
@@ -316,8 +316,8 @@ export default function Home() {
316
316
  </p>
317
317
  </div>
318
318
 
319
- <div className="${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.medium}">
320
- <div className="mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}">
319
+ <div className={`${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.medium}">
320
+ <div className={`mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}`}>
321
321
  <Shield className="h-6 w-6 text-green-400" />
322
322
  </div>
323
323
  <h3 className="text-lg font-semibold mb-2">Secure & Private</h3>
@@ -326,8 +326,8 @@ export default function Home() {
326
326
  </p>
327
327
  </div>
328
328
 
329
- <div className="${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.long}">
330
- <div className="mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}">
329
+ <div className={`${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.long}">
330
+ <div className={`mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}`}>
331
331
  <Rocket className="h-6 w-6 text-purple-400" />
332
332
  </div>
333
333
  <h3 className="text-lg font-semibold mb-2">Offline Support</h3>
@@ -336,8 +336,8 @@ export default function Home() {
336
336
  </p>
337
337
  </div>
338
338
 
339
- <div className="${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.extra}">
340
- <div className="mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}">
339
+ <div className={`${glass.card} ${glass.border} text-center p-6 rounded-2xl ${animations.hover.scale} ${animations.transition.smooth} ${animations.delay.extra}">
340
+ <div className={`mx-auto w-12 h-12 ${glass.accent} rounded-xl flex items-center justify-center mb-4 ${animations.hover.glow}`}>
341
341
  <svg className="h-6 w-6 text-orange-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
342
342
  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
343
343
  </svg>
@@ -355,7 +355,7 @@ export default function Home() {
355
355
  </OfflineWrapper>
356
356
 
357
357
  {/* Fixed Audio Player Bar with Enhanced Glassmorphism */}
358
- <div className="fixed bottom-0 left-0 right-0 z-50 ${glass.card} ${glass.border} border-t backdrop-blur-xl">
358
+ <div className={`fixed bottom-0 left-0 right-0 z-50 ${glass.card} ${glass.border} border-t backdrop-blur-xl`}>
359
359
  <FixedAudioBar
360
360
  track={currentTrack || demoPlaylist[0]}
361
361
  isPlaying={isPlaying}