@digilogiclabs/create-saas-app 1.5.3 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -49
- package/bin/index.js +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/templates/mobile/base/template/App.tsx +113 -23
- package/dist/templates/mobile/base/template/package.json +41 -38
- package/dist/templates/web/base/template/package.json +2 -2
- package/dist/templates/web/base/template/src/app/checkout/page.tsx +99 -8
- package/dist/templates/web/base/template/src/app/dashboard/page.tsx +309 -0
- package/dist/templates/web/base/template/src/app/globals.css +97 -0
- package/dist/templates/web/base/template/src/app/login/page.tsx +36 -8
- package/dist/templates/web/base/template/src/app/page.tsx +123 -83
- package/dist/templates/web/base/template/src/app/signup/page.tsx +36 -8
- package/dist/templates/web/base/template/src/components/shared/header.tsx +49 -30
- package/dist/templates/web/ui-auth/template/package.json +3 -3
- package/dist/templates/web/ui-auth/template/src/app/page.tsx +203 -61
- package/dist/templates/web/ui-auth-payments/template/package.json +3 -3
- package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +253 -87
- package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +129 -0
- package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +246 -74
- package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +106 -40
- package/dist/templates/web/ui-auth-payments-audio/template/package.json +3 -3
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +221 -82
- package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +132 -40
- package/dist/templates/web/ui-auth-payments-video/template/package.json +3 -3
- package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +146 -0
- package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +259 -85
- package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +133 -41
- package/dist/templates/web/ui-only/template/package.json +1 -1
- package/package.json +106 -106
- package/src/templates/mobile/base/template/App.tsx +113 -23
- package/src/templates/mobile/base/template/package.json +41 -38
- package/src/templates/web/base/template/package.json +2 -2
- package/src/templates/web/base/template/src/app/checkout/page.tsx +99 -8
- package/src/templates/web/base/template/src/app/dashboard/page.tsx +309 -0
- package/src/templates/web/base/template/src/app/globals.css +97 -0
- package/src/templates/web/base/template/src/app/login/page.tsx +36 -8
- package/src/templates/web/base/template/src/app/page.tsx +123 -83
- package/src/templates/web/base/template/src/app/signup/page.tsx +36 -8
- package/src/templates/web/base/template/src/components/shared/header.tsx +49 -30
- package/src/templates/web/ui-auth/template/package.json +3 -3
- package/src/templates/web/ui-auth/template/src/app/page.tsx +203 -61
- package/src/templates/web/ui-auth-payments/template/package.json +3 -3
- package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +253 -87
- package/src/templates/web/ui-auth-payments/template/src/app/globals.css +129 -0
- package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +246 -74
- package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +106 -40
- package/src/templates/web/ui-auth-payments-audio/template/package.json +3 -3
- package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +221 -82
- package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +132 -40
- package/src/templates/web/ui-auth-payments-video/template/package.json +3 -3
- package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +146 -0
- package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +259 -85
- package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +133 -41
- package/src/templates/web/ui-only/template/package.json +1 -1
- package/dist/index.js +0 -1173
- package/dist/index.js.map +0 -1
|
@@ -40,3 +40,149 @@
|
|
|
40
40
|
@apply bg-background text-foreground;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
|
|
44
|
+
/* Mobile-first optimizations */
|
|
45
|
+
@media (max-width: 768px) {
|
|
46
|
+
.mobile-optimized {
|
|
47
|
+
touch-action: manipulation;
|
|
48
|
+
-webkit-tap-highlight-color: transparent;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Better touch targets */
|
|
52
|
+
button,
|
|
53
|
+
a,
|
|
54
|
+
input,
|
|
55
|
+
select,
|
|
56
|
+
textarea {
|
|
57
|
+
min-height: 44px;
|
|
58
|
+
min-width: 44px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* Smooth scrolling for mobile */
|
|
62
|
+
html {
|
|
63
|
+
scroll-behavior: smooth;
|
|
64
|
+
-webkit-overflow-scrolling: touch;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* Animated moving banner */
|
|
69
|
+
@keyframes marquee {
|
|
70
|
+
0% {
|
|
71
|
+
transform: translate3d(100%, 0, 0);
|
|
72
|
+
}
|
|
73
|
+
100% {
|
|
74
|
+
transform: translate3d(-100%, 0, 0);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.animate-marquee {
|
|
79
|
+
animation: marquee 15s linear infinite;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* Network-aware styles */
|
|
83
|
+
@media (prefers-reduced-data: reduce) {
|
|
84
|
+
.high-bandwidth-content {
|
|
85
|
+
display: none;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Reduced motion preferences */
|
|
90
|
+
@media (prefers-reduced-motion: reduce) {
|
|
91
|
+
*,
|
|
92
|
+
*::before,
|
|
93
|
+
*::after {
|
|
94
|
+
animation-duration: 0.01ms !important;
|
|
95
|
+
animation-iteration-count: 1 !important;
|
|
96
|
+
transition-duration: 0.01ms !important;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.animate-marquee {
|
|
100
|
+
animation: none;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Hamburger menu animations */
|
|
105
|
+
.hamburger-line {
|
|
106
|
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
|
107
|
+
transform-origin: center;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.hamburger-open .hamburger-line:nth-child(1) {
|
|
111
|
+
transform: rotate(45deg) translate(6px, 6px);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.hamburger-open .hamburger-line:nth-child(2) {
|
|
115
|
+
opacity: 0;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.hamburger-open .hamburger-line:nth-child(3) {
|
|
119
|
+
transform: rotate(-45deg) translate(6px, -6px);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Custom animations for mobile interactions */
|
|
123
|
+
@keyframes haptic-feedback {
|
|
124
|
+
0% { transform: scale(1); }
|
|
125
|
+
50% { transform: scale(0.95); }
|
|
126
|
+
100% { transform: scale(1); }
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.haptic-feedback {
|
|
130
|
+
animation: haptic-feedback 0.1s ease-in-out;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Video-specific optimizations */
|
|
134
|
+
.video-container {
|
|
135
|
+
position: relative;
|
|
136
|
+
width: 100%;
|
|
137
|
+
padding-bottom: 56.25%; /* 16:9 aspect ratio */
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.video-player {
|
|
141
|
+
position: absolute;
|
|
142
|
+
top: 0;
|
|
143
|
+
left: 0;
|
|
144
|
+
width: 100%;
|
|
145
|
+
height: 100%;
|
|
146
|
+
border-radius: var(--radius);
|
|
147
|
+
overflow: hidden;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* Offline indicator styles */
|
|
151
|
+
.offline-indicator {
|
|
152
|
+
position: fixed;
|
|
153
|
+
top: 0;
|
|
154
|
+
left: 0;
|
|
155
|
+
right: 0;
|
|
156
|
+
background: #f59e0b;
|
|
157
|
+
color: white;
|
|
158
|
+
text-align: center;
|
|
159
|
+
padding: 8px;
|
|
160
|
+
font-size: 14px;
|
|
161
|
+
z-index: 9999;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/* Loading states */
|
|
165
|
+
.loading-skeleton {
|
|
166
|
+
background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
|
|
167
|
+
background-size: 200% 100%;
|
|
168
|
+
animation: loading 1.5s infinite;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@keyframes loading {
|
|
172
|
+
0% {
|
|
173
|
+
background-position: 200% 0;
|
|
174
|
+
}
|
|
175
|
+
100% {
|
|
176
|
+
background-position: -200% 0;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* Progressive image loading */
|
|
181
|
+
.progressive-image {
|
|
182
|
+
filter: blur(5px);
|
|
183
|
+
transition: filter 0.3s;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.progressive-image.loaded {
|
|
187
|
+
filter: blur(0);
|
|
188
|
+
}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
'use client'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
Button,
|
|
5
|
+
Card,
|
|
6
|
+
VideoPlayer,
|
|
7
|
+
PageTransition,
|
|
8
|
+
MobileContainer,
|
|
9
|
+
MobileHero,
|
|
10
|
+
ResponsiveGrid,
|
|
11
|
+
NetworkAwareContent,
|
|
12
|
+
OfflineWrapper,
|
|
13
|
+
SwipeableCard,
|
|
14
|
+
PullToRefresh,
|
|
15
|
+
ProgressiveImage,
|
|
16
|
+
useNetworkInfo,
|
|
17
|
+
useOfflineState
|
|
18
|
+
} from '@digilogiclabs/saas-factory-ui'
|
|
19
|
+
import { ArrowRight, Zap, Shield, Rocket, CheckCircle, LogOut, User, Video, Wifi, WifiOff, Play, Pause } from 'lucide-react'
|
|
5
20
|
import { useAuth } from '@digilogiclabs/saas-factory-auth'
|
|
6
21
|
import Link from 'next/link'
|
|
22
|
+
import { useState } from 'react'
|
|
7
23
|
|
|
8
24
|
export default function Home() {
|
|
9
25
|
const { user, signOut, loading } = useAuth()
|
|
26
|
+
const networkInfo = useNetworkInfo()
|
|
27
|
+
const isOnline = useOfflineState()
|
|
28
|
+
const [isRefreshing, setIsRefreshing] = useState(false)
|
|
10
29
|
|
|
11
30
|
const handleSignOut = async () => {
|
|
12
31
|
try {
|
|
@@ -16,9 +35,29 @@ export default function Home() {
|
|
|
16
35
|
}
|
|
17
36
|
}
|
|
18
37
|
|
|
38
|
+
const handleRefresh = async () => {
|
|
39
|
+
setIsRefreshing(true)
|
|
40
|
+
// Simulate refresh
|
|
41
|
+
await new Promise(resolve => setTimeout(resolve, 1500))
|
|
42
|
+
setIsRefreshing(false)
|
|
43
|
+
}
|
|
44
|
+
|
|
19
45
|
return (
|
|
20
|
-
<
|
|
21
|
-
<
|
|
46
|
+
<PageTransition type="slide" direction="up" duration={300}>
|
|
47
|
+
<OfflineWrapper
|
|
48
|
+
cacheStrategy="cache-first"
|
|
49
|
+
showOfflineIndicator={true}
|
|
50
|
+
backgroundSync={true}
|
|
51
|
+
>
|
|
52
|
+
<PullToRefresh
|
|
53
|
+
onRefresh={handleRefresh}
|
|
54
|
+
threshold={80}
|
|
55
|
+
loadingIndicator="spinner"
|
|
56
|
+
hapticOnTrigger={true}
|
|
57
|
+
networkAware={true}
|
|
58
|
+
>
|
|
59
|
+
<main className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800">
|
|
60
|
+
<MobileContainer className="py-16">
|
|
22
61
|
{/* Auth Status Bar */}
|
|
23
62
|
<div className="flex justify-end mb-8">
|
|
24
63
|
{loading ? (
|
|
@@ -46,85 +85,217 @@ export default function Home() {
|
|
|
46
85
|
)}
|
|
47
86
|
</div>
|
|
48
87
|
|
|
49
|
-
{/* Hero Section */}
|
|
50
|
-
<div className="
|
|
51
|
-
<div className="
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
</Link>
|
|
69
|
-
<Button variant="outline" size="lg" className="text-lg px-8">
|
|
70
|
-
Learn More
|
|
71
|
-
</Button>
|
|
88
|
+
{/* Hero Section with Network Status */}
|
|
89
|
+
<div className="flex flex-col sm:flex-row justify-between items-center mb-8 gap-4">
|
|
90
|
+
<div className="flex items-center gap-2 text-sm">
|
|
91
|
+
{isOnline ? (
|
|
92
|
+
<div className="flex items-center gap-2 text-green-600">
|
|
93
|
+
<Wifi className="w-4 h-4" />
|
|
94
|
+
<span>Online</span>
|
|
95
|
+
{networkInfo?.effectiveType && (
|
|
96
|
+
<span className="bg-green-100 text-green-800 px-2 py-1 rounded text-xs">
|
|
97
|
+
{networkInfo.effectiveType.toUpperCase()}
|
|
98
|
+
</span>
|
|
99
|
+
)}
|
|
100
|
+
</div>
|
|
101
|
+
) : (
|
|
102
|
+
<div className="flex items-center gap-2 text-red-600">
|
|
103
|
+
<WifiOff className="w-4 h-4" />
|
|
104
|
+
<span>Offline - Cached videos available</span>
|
|
105
|
+
</div>
|
|
106
|
+
)}
|
|
72
107
|
</div>
|
|
73
108
|
</div>
|
|
74
109
|
|
|
110
|
+
<MobileHero
|
|
111
|
+
badge={{
|
|
112
|
+
text: "Video Player App - UI Package v0.13.0 + Auth v1.0.0 + Payments Integrated Successfully",
|
|
113
|
+
variant: "secondary",
|
|
114
|
+
icon: CheckCircle
|
|
115
|
+
}}
|
|
116
|
+
title={{
|
|
117
|
+
text: "Welcome to {{titleCaseName}}",
|
|
118
|
+
highlight: "{{titleCaseName}}",
|
|
119
|
+
size: "xl"
|
|
120
|
+
}}
|
|
121
|
+
description="{{description}}. This mobile-first video streaming app template uses SaaS Factory UI package v0.13.0 with touch-optimized video player components, authentication v1.0.0 and payments integration."
|
|
122
|
+
actions={[
|
|
123
|
+
{
|
|
124
|
+
label: "Start Watching",
|
|
125
|
+
href: "/checkout",
|
|
126
|
+
icon: Play,
|
|
127
|
+
variant: "default",
|
|
128
|
+
size: "lg"
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
label: "Learn More",
|
|
132
|
+
variant: "outline",
|
|
133
|
+
size: "lg"
|
|
134
|
+
}
|
|
135
|
+
]}
|
|
136
|
+
className="text-center mb-16"
|
|
137
|
+
/>
|
|
138
|
+
|
|
75
139
|
{/* Video Player Showcase */}
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
<div className="
|
|
79
|
-
<
|
|
80
|
-
<
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
140
|
+
<NetworkAwareContent
|
|
141
|
+
showOnSlow={
|
|
142
|
+
<div className="max-w-4xl mx-auto mb-16">
|
|
143
|
+
<Card className="p-6">
|
|
144
|
+
<div className="text-center mb-6">
|
|
145
|
+
<div className="mx-auto w-12 h-12 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center mb-4">
|
|
146
|
+
<Video className="h-6 w-6 text-red-600 dark:text-red-400" />
|
|
147
|
+
</div>
|
|
148
|
+
<h2 className="text-xl font-bold mb-2">Mobile Video Player</h2>
|
|
149
|
+
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
150
|
+
Optimized for slower connections - automatically serves lower quality
|
|
151
|
+
</p>
|
|
152
|
+
</div>
|
|
153
|
+
<VideoPlayer
|
|
154
|
+
playlist={[
|
|
155
|
+
{
|
|
156
|
+
id: '1',
|
|
157
|
+
title: 'Sample Video Content',
|
|
158
|
+
description: 'Demo video optimized for mobile',
|
|
159
|
+
duration: 300,
|
|
160
|
+
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
|
|
161
|
+
thumbnail: 'https://via.placeholder.com/320x180?text=Video+1',
|
|
162
|
+
qualities: [
|
|
163
|
+
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
]}
|
|
167
|
+
mobileOptimized={true}
|
|
168
|
+
touchFriendly={true}
|
|
169
|
+
autoQuality="low"
|
|
170
|
+
className="max-w-lg mx-auto"
|
|
171
|
+
/>
|
|
172
|
+
</Card>
|
|
86
173
|
</div>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
174
|
+
}
|
|
175
|
+
showOnOffline={
|
|
176
|
+
<div className="max-w-4xl mx-auto mb-16">
|
|
177
|
+
<Card className="p-6 bg-yellow-50 border-yellow-200">
|
|
178
|
+
<div className="text-center">
|
|
179
|
+
<WifiOff className="mx-auto w-12 h-12 text-yellow-600 mb-4" />
|
|
180
|
+
<h2 className="text-xl font-bold mb-2">Offline Mode</h2>
|
|
181
|
+
<p className="text-gray-600">Videos are cached for offline viewing when connection is restored.</p>
|
|
182
|
+
</div>
|
|
183
|
+
</Card>
|
|
184
|
+
</div>
|
|
185
|
+
}
|
|
186
|
+
>
|
|
187
|
+
<SwipeableCard
|
|
188
|
+
leftActions={[
|
|
189
|
+
{
|
|
190
|
+
id: 'previous',
|
|
191
|
+
label: 'Previous',
|
|
192
|
+
onAction: () => console.log('Previous video'),
|
|
193
|
+
color: 'blue',
|
|
194
|
+
icon: ArrowRight
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: 'quality',
|
|
198
|
+
label: 'Quality',
|
|
199
|
+
onAction: () => console.log('Toggle quality'),
|
|
200
|
+
color: 'purple'
|
|
201
|
+
}
|
|
202
|
+
]}
|
|
203
|
+
rightActions={[
|
|
204
|
+
{
|
|
205
|
+
id: 'next',
|
|
206
|
+
label: 'Next',
|
|
207
|
+
onAction: () => console.log('Next video'),
|
|
208
|
+
color: 'green',
|
|
209
|
+
icon: ArrowRight
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: 'fullscreen',
|
|
213
|
+
label: 'Fullscreen',
|
|
214
|
+
onAction: () => console.log('Toggle fullscreen'),
|
|
215
|
+
color: 'orange'
|
|
216
|
+
}
|
|
217
|
+
]}
|
|
218
|
+
threshold={60}
|
|
219
|
+
hapticFeedback={true}
|
|
220
|
+
showActionLabels={true}
|
|
221
|
+
className="max-w-4xl mx-auto mb-16"
|
|
222
|
+
>
|
|
223
|
+
<Card className="p-8">
|
|
224
|
+
<div className="text-center mb-8">
|
|
225
|
+
<div className="mx-auto w-16 h-16 bg-red-100 dark:bg-red-900 rounded-full flex items-center justify-center mb-4">
|
|
226
|
+
<Video className="h-8 w-8 text-red-600 dark:text-red-400" />
|
|
227
|
+
</div>
|
|
228
|
+
<h2 className="text-3xl font-bold mb-4">Touch-Optimized Video Player</h2>
|
|
229
|
+
<p className="text-gray-600 dark:text-gray-300 mb-2">
|
|
230
|
+
Experience our mobile-first video player with gesture controls, adaptive quality, and offline caching
|
|
231
|
+
</p>
|
|
232
|
+
<p className="text-sm text-gray-500">
|
|
233
|
+
Swipe for controls • Double tap for fullscreen • Pull to refresh playlist
|
|
234
|
+
</p>
|
|
235
|
+
</div>
|
|
236
|
+
<VideoPlayer
|
|
237
|
+
playlist={[
|
|
238
|
+
{
|
|
239
|
+
id: '1',
|
|
240
|
+
title: 'Sample Video Content',
|
|
241
|
+
description: 'Demo video showcasing mobile video player functionality',
|
|
242
|
+
duration: 300,
|
|
243
|
+
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
|
|
244
|
+
thumbnail: 'https://via.placeholder.com/640x360?text=Video+1',
|
|
245
|
+
qualities: [
|
|
246
|
+
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
|
|
247
|
+
{ label: '480p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
|
|
248
|
+
{ label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
id: '2',
|
|
253
|
+
title: 'Another Great Video',
|
|
254
|
+
description: 'Mobile-optimized video streaming experience',
|
|
255
|
+
duration: 240,
|
|
256
|
+
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4',
|
|
257
|
+
thumbnail: 'https://via.placeholder.com/640x360?text=Video+2',
|
|
258
|
+
qualities: [
|
|
259
|
+
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' },
|
|
260
|
+
{ label: '480p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' },
|
|
261
|
+
{ label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4' }
|
|
262
|
+
]
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
id: '3',
|
|
266
|
+
title: 'Touch-Friendly Content',
|
|
267
|
+
description: 'Optimized for touch devices with gesture controls',
|
|
268
|
+
duration: 180,
|
|
269
|
+
url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4',
|
|
270
|
+
thumbnail: 'https://via.placeholder.com/640x360?text=Video+3',
|
|
271
|
+
qualities: [
|
|
272
|
+
{ label: '360p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' },
|
|
273
|
+
{ label: '720p', url: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
]}
|
|
277
|
+
mobileOptimized={true}
|
|
278
|
+
touchFriendly={true}
|
|
279
|
+
hapticFeedback={true}
|
|
280
|
+
gestureControls={true}
|
|
281
|
+
networkAware={true}
|
|
282
|
+
offlineSupport={true}
|
|
283
|
+
autoQuality="adaptive"
|
|
284
|
+
className="max-w-4xl mx-auto"
|
|
285
|
+
/>
|
|
286
|
+
</Card>
|
|
287
|
+
</SwipeableCard>
|
|
288
|
+
</NetworkAwareContent>
|
|
118
289
|
|
|
119
290
|
{/* Component Showcase */}
|
|
120
|
-
<
|
|
291
|
+
<ResponsiveGrid columns={{ base: 1, sm: 2, md: 4 }} gap="lg" className="mb-16">
|
|
121
292
|
<Card className="text-center p-6">
|
|
122
293
|
<div className="mx-auto w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center mb-4">
|
|
123
294
|
<Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
|
|
124
295
|
</div>
|
|
125
|
-
<h3 className="text-
|
|
126
|
-
<p className="text-gray-600 dark:text-gray-300">
|
|
127
|
-
Video Player
|
|
296
|
+
<h3 className="text-lg font-semibold mb-2">Mobile Video UI</h3>
|
|
297
|
+
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
298
|
+
Touch-optimized Video Player with gesture controls from @digilogiclabs/saas-factory-ui v0.13.0
|
|
128
299
|
</p>
|
|
129
300
|
</Card>
|
|
130
301
|
|
|
@@ -132,9 +303,9 @@ export default function Home() {
|
|
|
132
303
|
<div className="mx-auto w-12 h-12 bg-green-100 dark:bg-green-900 rounded-lg flex items-center justify-center mb-4">
|
|
133
304
|
<Shield className="h-6 w-6 text-green-600 dark:text-green-400" />
|
|
134
305
|
</div>
|
|
135
|
-
<h3 className="text-
|
|
136
|
-
<p className="text-gray-600 dark:text-gray-300">
|
|
137
|
-
Secure
|
|
306
|
+
<h3 className="text-lg font-semibold mb-2">Cross-Device Auth</h3>
|
|
307
|
+
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
308
|
+
Secure authentication across all devices with @digilogiclabs/saas-factory-auth v1.0.0
|
|
138
309
|
</p>
|
|
139
310
|
</Card>
|
|
140
311
|
|
|
@@ -142,9 +313,9 @@ export default function Home() {
|
|
|
142
313
|
<div className="mx-auto w-12 h-12 bg-purple-100 dark:bg-purple-900 rounded-lg flex items-center justify-center mb-4">
|
|
143
314
|
<Rocket className="h-6 w-6 text-purple-600 dark:text-purple-400" />
|
|
144
315
|
</div>
|
|
145
|
-
<h3 className="text-
|
|
146
|
-
<p className="text-gray-600 dark:text-gray-300">
|
|
147
|
-
|
|
316
|
+
<h3 className="text-lg font-semibold mb-2">Performance First</h3>
|
|
317
|
+
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
318
|
+
Network-aware video streaming with adaptive quality and caching
|
|
148
319
|
</p>
|
|
149
320
|
</Card>
|
|
150
321
|
|
|
@@ -154,12 +325,12 @@ export default function Home() {
|
|
|
154
325
|
<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" />
|
|
155
326
|
</svg>
|
|
156
327
|
</div>
|
|
157
|
-
<h3 className="text-
|
|
158
|
-
<p className="text-gray-600 dark:text-gray-300">
|
|
159
|
-
|
|
328
|
+
<h3 className="text-lg font-semibold mb-2">Mobile Payments</h3>
|
|
329
|
+
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
330
|
+
Touch-optimized subscription flows with @digilogiclabs/saas-factory-payments v1.0.0
|
|
160
331
|
</p>
|
|
161
332
|
</Card>
|
|
162
|
-
</
|
|
333
|
+
</ResponsiveGrid>
|
|
163
334
|
|
|
164
335
|
{/* Button Variants Showcase */}
|
|
165
336
|
<Card className="max-w-4xl mx-auto p-8">
|
|
@@ -177,11 +348,14 @@ export default function Home() {
|
|
|
177
348
|
</div>
|
|
178
349
|
<div className="text-center">
|
|
179
350
|
<p className="text-sm text-gray-500">
|
|
180
|
-
All components from @digilogiclabs/saas-factory-ui v0.
|
|
351
|
+
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.0 + auth v1.0.0 + payments
|
|
181
352
|
</p>
|
|
182
353
|
</div>
|
|
183
354
|
</Card>
|
|
184
|
-
|
|
185
|
-
|
|
355
|
+
</MobileContainer>
|
|
356
|
+
</main>
|
|
357
|
+
</PullToRefresh>
|
|
358
|
+
</OfflineWrapper>
|
|
359
|
+
</PageTransition>
|
|
186
360
|
)
|
|
187
361
|
}
|