@digilogiclabs/create-saas-app 2.9.1 → 2.10.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/dist/.tsbuildinfo +1 -1
- package/dist/generators/template-generator.d.ts.map +1 -1
- package/dist/generators/template-generator.js +6 -3
- package/dist/generators/template-generator.js.map +1 -1
- package/dist/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
- package/dist/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
- package/dist/templates/shared/design/web/src/config/design.config.ts +14 -14
- package/dist/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
- package/dist/templates/shared/security/web/src/lib/api-security.ts +2 -2
- package/dist/templates/web/ai-platform/template/next.config.js +14 -14
- package/dist/templates/web/ai-platform/template/package.json +11 -22
- package/dist/templates/web/ai-platform/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
- package/dist/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
- package/dist/templates/web/ai-platform/template/src/app/error.tsx +13 -13
- package/dist/templates/web/ai-platform/template/src/app/globals.css +97 -34
- package/dist/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
- package/dist/templates/web/ai-platform/template/src/app/page.tsx +248 -154
- package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/base/template/next.config.js +14 -15
- package/dist/templates/web/base/template/package.json +16 -31
- package/dist/templates/web/base/template/postcss.config.mjs +8 -0
- package/dist/templates/web/base/template/src/app/error.tsx +97 -97
- package/dist/templates/web/base/template/src/app/globals.css +87 -148
- package/dist/templates/web/base/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/base/template/src/app/loading.tsx +52 -52
- package/dist/templates/web/base/template/tsconfig.json +27 -33
- package/dist/templates/web/iot-dashboard/template/next.config.js +14 -14
- package/dist/templates/web/iot-dashboard/template/package.json +12 -16
- package/dist/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
- package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
- package/dist/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
- package/dist/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
- package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
- package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
- package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/marketplace/template/next.config.js +14 -14
- package/dist/templates/web/marketplace/template/package.json +11 -18
- package/dist/templates/web/marketplace/template/postcss.config.mjs +8 -0
- package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
- package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
- package/dist/templates/web/marketplace/template/src/app/error.tsx +7 -7
- package/dist/templates/web/marketplace/template/src/app/globals.css +97 -20
- package/dist/templates/web/marketplace/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/marketplace/template/src/app/loading.tsx +5 -5
- package/dist/templates/web/marketplace/template/src/app/page.tsx +370 -169
- package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
- package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/micro-saas/template/next.config.js +14 -14
- package/dist/templates/web/micro-saas/template/package.json +9 -8
- package/dist/templates/web/micro-saas/template/postcss.config.mjs +8 -0
- package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
- package/dist/templates/web/micro-saas/template/src/app/error.tsx +7 -7
- package/dist/templates/web/micro-saas/template/src/app/globals.css +97 -20
- package/dist/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
- package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
- package/dist/templates/web/micro-saas/template/src/app/page.tsx +227 -137
- package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
- package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
- package/dist/templates/web/ui-auth/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth/template/package.json +16 -26
- package/dist/templates/web/ui-auth/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth/template/src/app/globals.css +85 -84
- package/dist/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
- package/dist/templates/web/ui-auth/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-ai/template/next.config.js +15 -13
- package/dist/templates/web/ui-auth-ai/template/package.json +25 -21
- package/dist/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
- package/dist/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
- package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
- package/dist/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
- package/dist/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
- package/dist/templates/web/ui-auth-payments/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments/template/package.json +16 -29
- package/dist/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
- package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments-ai/template/package.json +17 -33
- package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments-audio/template/package.json +17 -30
- package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
- package/dist/templates/web/ui-auth-payments-video/template/package.json +17 -30
- package/dist/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
- package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
- package/dist/templates/web/ui-only/template/next.config.js +14 -12
- package/dist/templates/web/ui-only/template/package.json +15 -25
- package/dist/templates/web/ui-only/template/postcss.config.mjs +8 -0
- package/dist/templates/web/ui-only/template/src/app/error.tsx +67 -67
- package/dist/templates/web/ui-only/template/src/app/globals.css +85 -31
- package/dist/templates/web/ui-only/template/src/app/layout.tsx +4 -1
- package/dist/templates/web/ui-only/template/src/app/loading.tsx +20 -20
- package/dist/templates/web/ui-only/template/tsconfig.json +27 -33
- package/package.json +1 -1
- package/src/templates/shared/auth/supabase/web/src/middleware.ts +63 -0
- package/src/templates/shared/database/supabase/web/src/lib/supabase/server.ts +3 -1
- package/src/templates/shared/design/web/src/config/design.config.ts +14 -14
- package/src/templates/shared/landing/web/src/components/LandingPage.tsx +0 -3
- package/src/templates/shared/security/web/src/lib/api-security.ts +2 -2
- package/src/templates/web/ai-platform/template/next.config.js +14 -14
- package/src/templates/web/ai-platform/template/package.json +11 -22
- package/src/templates/web/ai-platform/template/postcss.config.mjs +8 -0
- package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +234 -235
- package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -142
- package/src/templates/web/ai-platform/template/src/app/error.tsx +13 -13
- package/src/templates/web/ai-platform/template/src/app/globals.css +97 -34
- package/src/templates/web/ai-platform/template/src/app/layout.tsx +3 -0
- package/src/templates/web/ai-platform/template/src/app/loading.tsx +22 -22
- package/src/templates/web/ai-platform/template/src/app/page.tsx +248 -154
- package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/base/template/next.config.js +14 -15
- package/src/templates/web/base/template/package.json +16 -31
- package/src/templates/web/base/template/postcss.config.mjs +8 -0
- package/src/templates/web/base/template/src/app/error.tsx +97 -97
- package/src/templates/web/base/template/src/app/globals.css +87 -148
- package/src/templates/web/base/template/src/app/layout.tsx +4 -1
- package/src/templates/web/base/template/src/app/loading.tsx +52 -52
- package/src/templates/web/base/template/tsconfig.json +27 -33
- package/src/templates/web/iot-dashboard/template/next.config.js +14 -14
- package/src/templates/web/iot-dashboard/template/package.json +12 -16
- package/src/templates/web/iot-dashboard/template/postcss.config.mjs +8 -0
- package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +224 -224
- package/src/templates/web/iot-dashboard/template/src/app/error.tsx +8 -8
- package/src/templates/web/iot-dashboard/template/src/app/globals.css +97 -20
- package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +3 -0
- package/src/templates/web/iot-dashboard/template/src/app/loading.tsx +5 -5
- package/src/templates/web/iot-dashboard/template/src/app/page.tsx +266 -189
- package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/marketplace/template/next.config.js +14 -14
- package/src/templates/web/marketplace/template/package.json +11 -18
- package/src/templates/web/marketplace/template/postcss.config.mjs +8 -0
- package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -147
- package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -149
- package/src/templates/web/marketplace/template/src/app/error.tsx +7 -7
- package/src/templates/web/marketplace/template/src/app/globals.css +97 -20
- package/src/templates/web/marketplace/template/src/app/layout.tsx +3 -0
- package/src/templates/web/marketplace/template/src/app/loading.tsx +5 -5
- package/src/templates/web/marketplace/template/src/app/page.tsx +370 -169
- package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -129
- package/src/templates/web/marketplace/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/micro-saas/template/next.config.js +14 -14
- package/src/templates/web/micro-saas/template/package.json +9 -8
- package/src/templates/web/micro-saas/template/postcss.config.mjs +8 -0
- package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +145 -117
- package/src/templates/web/micro-saas/template/src/app/error.tsx +7 -7
- package/src/templates/web/micro-saas/template/src/app/globals.css +97 -20
- package/src/templates/web/micro-saas/template/src/app/layout.tsx +3 -0
- package/src/templates/web/micro-saas/template/src/app/loading.tsx +43 -27
- package/src/templates/web/micro-saas/template/src/app/login/page.tsx +101 -87
- package/src/templates/web/micro-saas/template/src/app/page.tsx +227 -137
- package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +122 -108
- package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +32 -33
- package/src/templates/web/ui-auth/template/next.config.js +14 -12
- package/src/templates/web/ui-auth/template/package.json +16 -26
- package/src/templates/web/ui-auth/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth/template/src/app/globals.css +85 -84
- package/src/templates/web/ui-auth/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth/template/src/app/loading.tsx +20 -38
- package/src/templates/web/ui-auth/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-ai/template/next.config.js +15 -13
- package/src/templates/web/ui-auth-ai/template/package.json +25 -21
- package/src/templates/web/ui-auth-ai/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-ai/template/src/app/error.tsx +7 -7
- package/src/templates/web/ui-auth-ai/template/src/app/globals.css +87 -25
- package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +3 -0
- package/src/templates/web/ui-auth-ai/template/src/app/loading.tsx +4 -4
- package/src/templates/web/ui-auth-ai/template/tsconfig.json +27 -28
- package/src/templates/web/ui-auth-payments/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments/template/package.json +16 -29
- package/src/templates/web/ui-auth-payments/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments/template/src/app/globals.css +89 -204
- package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-payments-ai/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments-ai/template/package.json +17 -33
- package/src/templates/web/ui-auth-payments-ai/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments-ai/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments-ai/template/src/app/globals.css +85 -85
- package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments-ai/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments-ai/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-payments-audio/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments-audio/template/package.json +17 -30
- package/src/templates/web/ui-auth-payments-audio/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments-audio/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments-audio/template/src/app/globals.css +85 -85
- package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments-audio/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments-audio/template/tsconfig.json +27 -33
- package/src/templates/web/ui-auth-payments-video/template/next.config.js +14 -12
- package/src/templates/web/ui-auth-payments-video/template/package.json +17 -30
- package/src/templates/web/ui-auth-payments-video/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-auth-payments-video/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-auth-payments-video/template/src/app/globals.css +89 -221
- package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-auth-payments-video/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-auth-payments-video/template/tsconfig.json +27 -33
- package/src/templates/web/ui-only/template/next.config.js +14 -12
- package/src/templates/web/ui-only/template/package.json +15 -25
- package/src/templates/web/ui-only/template/postcss.config.mjs +8 -0
- package/src/templates/web/ui-only/template/src/app/error.tsx +67 -67
- package/src/templates/web/ui-only/template/src/app/globals.css +85 -31
- package/src/templates/web/ui-only/template/src/app/layout.tsx +4 -1
- package/src/templates/web/ui-only/template/src/app/loading.tsx +20 -20
- package/src/templates/web/ui-only/template/tsconfig.json +27 -33
- package/dist/templates/web/ai-platform/template/middleware.ts +0 -55
- package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
- package/dist/templates/web/base/template/postcss.config.js +0 -7
- package/dist/templates/web/base/template/tailwind.config.js +0 -77
- package/dist/templates/web/iot-dashboard/template/middleware.ts +0 -56
- package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
- package/dist/templates/web/marketplace/template/middleware.ts +0 -56
- package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
- package/dist/templates/web/micro-saas/template/middleware.ts +0 -53
- package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
- package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
- package/dist/templates/web/ui-auth/template/.claude +0 -21
- package/dist/templates/web/ui-auth/template/context.md +0 -105
- package/dist/templates/web/ui-auth/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
- package/dist/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
- package/dist/templates/web/ui-auth-payments/template/middleware.ts +0 -68
- package/dist/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
- package/dist/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
- package/dist/templates/web/ui-auth-payments-ai/template/.claude +0 -21
- package/dist/templates/web/ui-auth-payments-ai/template/context.md +0 -169
- package/dist/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
- package/dist/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
- package/dist/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
- package/dist/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
- package/dist/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
- package/dist/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
- package/dist/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
- package/dist/templates/web/ui-only/template/postcss.config.js +0 -7
- package/dist/templates/web/ui-only/template/tailwind.config.js +0 -77
- package/src/templates/web/ai-platform/template/middleware.ts +0 -55
- package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +0 -27
- package/src/templates/web/base/template/postcss.config.js +0 -7
- package/src/templates/web/base/template/tailwind.config.js +0 -77
- package/src/templates/web/iot-dashboard/template/middleware.ts +0 -56
- package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +0 -27
- package/src/templates/web/marketplace/template/middleware.ts +0 -56
- package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +0 -27
- package/src/templates/web/micro-saas/template/middleware.ts +0 -53
- package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +0 -8
- package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +0 -29
- package/src/templates/web/ui-auth/template/.claude +0 -21
- package/src/templates/web/ui-auth/template/context.md +0 -105
- package/src/templates/web/ui-auth/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-ai/template/postcss.config.js +0 -6
- package/src/templates/web/ui-auth-ai/template/tailwind.config.js +0 -22
- package/src/templates/web/ui-auth-payments/template/middleware.ts +0 -68
- package/src/templates/web/ui-auth-payments/template/package-lock.json +0 -12240
- package/src/templates/web/ui-auth-payments/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-payments/template/tsconfig.tsbuildinfo +0 -1
- package/src/templates/web/ui-auth-payments-ai/template/.claude +0 -21
- package/src/templates/web/ui-auth-payments-ai/template/context.md +0 -169
- package/src/templates/web/ui-auth-payments-ai/template/middleware.ts +0 -68
- package/src/templates/web/ui-auth-payments-ai/template/package-lock.json +0 -12241
- package/src/templates/web/ui-auth-payments-ai/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments-ai/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-payments-ai/template/tsconfig.tsbuildinfo +0 -1
- package/src/templates/web/ui-auth-payments-audio/template/middleware.ts +0 -68
- package/src/templates/web/ui-auth-payments-audio/template/package-lock.json +0 -12241
- package/src/templates/web/ui-auth-payments-audio/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments-audio/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-auth-payments-audio/template/tsconfig.tsbuildinfo +0 -1
- package/src/templates/web/ui-auth-payments-video/template/postcss.config.js +0 -7
- package/src/templates/web/ui-auth-payments-video/template/tailwind.config.js +0 -77
- package/src/templates/web/ui-only/template/postcss.config.js +0 -7
- package/src/templates/web/ui-only/template/tailwind.config.js +0 -77
- /package/dist/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
- /package/dist/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
- /package/dist/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
- /package/dist/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
- /package/src/templates/shared/admin/web/{components → src/components}/admin-nav.tsx +0 -0
- /package/src/templates/shared/auth/keycloak/web/{auth.config.ts → src/auth.config.ts} +0 -0
- /package/src/templates/shared/auth/keycloak/web/{auth.ts → src/auth.ts} +0 -0
- /package/src/templates/shared/middleware/web/{middleware.ts → src/middleware.ts} +0 -0
|
@@ -8,39 +8,35 @@
|
|
|
8
8
|
"build": "next build",
|
|
9
9
|
"start": "next start",
|
|
10
10
|
"lint": "next lint",
|
|
11
|
-
"type-check": "tsc --noEmit"
|
|
12
|
-
"test": "vitest",
|
|
13
|
-
"test:run": "vitest run"
|
|
11
|
+
"type-check": "tsc --noEmit"
|
|
14
12
|
},
|
|
15
13
|
"dependencies": {
|
|
16
|
-
"next": "^15.
|
|
14
|
+
"next": "^15.5.0",
|
|
17
15
|
"react": "^19.0.0",
|
|
18
16
|
"react-dom": "^19.0.0",
|
|
19
|
-
"@digilogiclabs/platform-core": "^1.
|
|
20
|
-
"@digilogiclabs/app-sdk": "^1.
|
|
21
|
-
"@digilogiclabs/saas-factory-ui": "^1.
|
|
22
|
-
"tailwindcss": "^4.
|
|
23
|
-
"
|
|
17
|
+
"@digilogiclabs/platform-core": "^1.14.0",
|
|
18
|
+
"@digilogiclabs/app-sdk": "^1.1.0",
|
|
19
|
+
"@digilogiclabs/saas-factory-ui": "^1.8.1",
|
|
20
|
+
"tailwindcss": "^4.1.0",
|
|
21
|
+
"@tailwindcss/postcss": "^4.1.0",
|
|
22
|
+
"clsx": "^2.1.0",
|
|
24
23
|
"class-variance-authority": "^0.7.0",
|
|
25
|
-
"tailwind-merge": "^2.
|
|
24
|
+
"tailwind-merge": "^2.6.0",
|
|
26
25
|
"next-themes": "^0.4.0",
|
|
27
26
|
"lucide-react": "^0.460.0",
|
|
28
27
|
"zod": "^4.1.0",
|
|
29
28
|
"zustand": "^4.5.0",
|
|
30
|
-
"recharts": "^2.
|
|
29
|
+
"recharts": "^2.14.0",
|
|
31
30
|
"date-fns": "^4.1.0"
|
|
32
31
|
},
|
|
33
32
|
"devDependencies": {
|
|
34
|
-
"typescript": "^5.
|
|
33
|
+
"typescript": "^5.8.0",
|
|
35
34
|
"@types/node": "^22.0.0",
|
|
36
35
|
"@types/react": "^19.0.0",
|
|
37
36
|
"@types/react-dom": "^19.0.0",
|
|
38
37
|
"eslint": "^9.0.0",
|
|
39
38
|
"eslint-config-next": "^15.0.0",
|
|
40
|
-
"prettier": "^3.4.0"
|
|
41
|
-
"vitest": "^2.1.0",
|
|
42
|
-
"@testing-library/react": "^16.0.0",
|
|
43
|
-
"@testing-library/jest-dom": "^6.6.0"
|
|
39
|
+
"prettier": "^3.4.0"
|
|
44
40
|
},
|
|
45
41
|
"engines": {
|
|
46
42
|
"node": ">=20.0.0"
|
|
@@ -1,224 +1,224 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import { useState, useEffect } from 'react'
|
|
4
|
-
import { Button, Card, PulseIndicator } from '@digilogiclabs/saas-factory-ui'
|
|
5
|
-
import { Cpu, Activity, Signal, Bell, AlertTriangle, CheckCircle, Clock, ThermometerSun, Gauge, Wifi, Plus } from 'lucide-react'
|
|
6
|
-
import Link from 'next/link'
|
|
7
|
-
|
|
8
|
-
// Simulated real-time data
|
|
9
|
-
const generateTelemetryData = () => ({
|
|
10
|
-
temperature: (20 + Math.random() * 10).toFixed(1),
|
|
11
|
-
pressure: (100 + Math.random() * 20).toFixed(1),
|
|
12
|
-
humidity: (40 + Math.random() * 30).toFixed(0),
|
|
13
|
-
signalStrength: (-50 - Math.random() * 40).toFixed(0),
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
const DEVICES = [
|
|
17
|
-
{ id: 1, name: 'Sensor Hub A1', type: 'Gateway', status: 'online', lastSeen: '2 min ago' },
|
|
18
|
-
{ id: 2, name: 'Temp Sensor T-001', type: 'Temperature', status: 'online', lastSeen: '1 min ago' },
|
|
19
|
-
{ id: 3, name: 'Pressure Gauge P-001', type: 'Pressure', status: 'online', lastSeen: '3 min ago' },
|
|
20
|
-
{ id: 4, name: 'Motion Detector M-001', type: 'Motion', status: 'offline', lastSeen: '15 min ago' },
|
|
21
|
-
{ id: 5, name: 'Humidity Sensor H-001', type: 'Humidity', status: 'online', lastSeen: '30 sec ago' },
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
const RECENT_ALERTS = [
|
|
25
|
-
{ id: 1, message: 'Temperature threshold exceeded on T-001', severity: 'warning', time: '5 min ago' },
|
|
26
|
-
{ id: 2, message: 'Motion Detector M-001 offline', severity: 'error', time: '15 min ago' },
|
|
27
|
-
{ id: 3, message: 'System backup completed', severity: 'info', time: '1 hour ago' },
|
|
28
|
-
]
|
|
29
|
-
|
|
30
|
-
export default function DashboardPage() {
|
|
31
|
-
const [telemetry, setTelemetry] = useState(generateTelemetryData())
|
|
32
|
-
|
|
33
|
-
// Simulate real-time updates
|
|
34
|
-
useEffect(() => {
|
|
35
|
-
const interval = setInterval(() => {
|
|
36
|
-
setTelemetry(generateTelemetryData())
|
|
37
|
-
}, 3000)
|
|
38
|
-
return () => clearInterval(interval)
|
|
39
|
-
}, [])
|
|
40
|
-
|
|
41
|
-
const onlineDevices = DEVICES.filter(d => d.status === 'online').length
|
|
42
|
-
const offlineDevices = DEVICES.filter(d => d.status === 'offline').length
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<div className="min-h-screen bg-
|
|
46
|
-
{/* Header */}
|
|
47
|
-
<header className="bg-
|
|
48
|
-
<div className="flex items-center justify-between">
|
|
49
|
-
<div>
|
|
50
|
-
<h1 className="text-2xl font-bold text-
|
|
51
|
-
<p className="text-
|
|
52
|
-
</div>
|
|
53
|
-
<Link href="/devices/new">
|
|
54
|
-
<Button
|
|
55
|
-
<Plus className="w-4 h-4 mr-2" />
|
|
56
|
-
Add Device
|
|
57
|
-
</Button>
|
|
58
|
-
</Link>
|
|
59
|
-
</div>
|
|
60
|
-
</header>
|
|
61
|
-
|
|
62
|
-
<div className="p-6">
|
|
63
|
-
{/* Stats */}
|
|
64
|
-
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
65
|
-
<Card className="p-6">
|
|
66
|
-
<div className="flex items-center justify-between">
|
|
67
|
-
<div>
|
|
68
|
-
<p className="text-sm text-
|
|
69
|
-
<p className="text-3xl font-bold text-
|
|
70
|
-
</div>
|
|
71
|
-
<div className="w-12 h-12 bg-
|
|
72
|
-
<Cpu className="w-6 h-6 text-
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
</Card>
|
|
76
|
-
|
|
77
|
-
<Card className="p-6">
|
|
78
|
-
<div className="flex items-center justify-between">
|
|
79
|
-
<div>
|
|
80
|
-
<p className="text-sm text-
|
|
81
|
-
<p className="text-3xl font-bold text-green-600">{onlineDevices}</p>
|
|
82
|
-
</div>
|
|
83
|
-
<div className="w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center">
|
|
84
|
-
<CheckCircle className="w-6 h-6 text-green-600" />
|
|
85
|
-
</div>
|
|
86
|
-
</div>
|
|
87
|
-
</Card>
|
|
88
|
-
|
|
89
|
-
<Card className="p-6">
|
|
90
|
-
<div className="flex items-center justify-between">
|
|
91
|
-
<div>
|
|
92
|
-
<p className="text-sm text-
|
|
93
|
-
<p className="text-3xl font-bold text-
|
|
94
|
-
</div>
|
|
95
|
-
<div className="w-12 h-12 bg-
|
|
96
|
-
<AlertTriangle className="w-6 h-6 text-
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</Card>
|
|
100
|
-
|
|
101
|
-
<Card className="p-6">
|
|
102
|
-
<div className="flex items-center justify-between">
|
|
103
|
-
<div>
|
|
104
|
-
<p className="text-sm text-
|
|
105
|
-
<p className="text-3xl font-bold text-amber-600">{RECENT_ALERTS.length}</p>
|
|
106
|
-
</div>
|
|
107
|
-
<div className="w-12 h-12 bg-amber-100 dark:bg-amber-900/30 rounded-lg flex items-center justify-center">
|
|
108
|
-
<Bell className="w-6 h-6 text-amber-600" />
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
111
|
-
</Card>
|
|
112
|
-
</div>
|
|
113
|
-
|
|
114
|
-
{/* Live Telemetry */}
|
|
115
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
|
116
|
-
<Card className="p-6">
|
|
117
|
-
<h2 className="text-lg font-semibold text-
|
|
118
|
-
<Activity className="w-5 h-5 mr-2 text-
|
|
119
|
-
Live Telemetry
|
|
120
|
-
</h2>
|
|
121
|
-
<div className="grid grid-cols-2 gap-4">
|
|
122
|
-
<div className="p-4 bg-
|
|
123
|
-
<div className="flex items-center gap-2 mb-2">
|
|
124
|
-
<ThermometerSun className="w-4 h-4 text-orange-500" />
|
|
125
|
-
<span className="text-sm text-
|
|
126
|
-
</div>
|
|
127
|
-
<p className="text-2xl font-bold text-
|
|
128
|
-
</div>
|
|
129
|
-
<div className="p-4 bg-
|
|
130
|
-
<div className="flex items-center gap-2 mb-2">
|
|
131
|
-
<Gauge className="w-4 h-4 text-blue-500" />
|
|
132
|
-
<span className="text-sm text-
|
|
133
|
-
</div>
|
|
134
|
-
<p className="text-2xl font-bold text-
|
|
135
|
-
</div>
|
|
136
|
-
<div className="p-4 bg-
|
|
137
|
-
<div className="flex items-center gap-2 mb-2">
|
|
138
|
-
<Activity className="w-4 h-4 text-cyan-500" />
|
|
139
|
-
<span className="text-sm text-
|
|
140
|
-
</div>
|
|
141
|
-
<p className="text-2xl font-bold text-
|
|
142
|
-
</div>
|
|
143
|
-
<div className="p-4 bg-
|
|
144
|
-
<div className="flex items-center gap-2 mb-2">
|
|
145
|
-
<Signal className="w-4 h-4 text-purple-500" />
|
|
146
|
-
<span className="text-sm text-
|
|
147
|
-
</div>
|
|
148
|
-
<p className="text-2xl font-bold text-
|
|
149
|
-
</div>
|
|
150
|
-
</div>
|
|
151
|
-
</Card>
|
|
152
|
-
|
|
153
|
-
<Card className="p-6">
|
|
154
|
-
<h2 className="text-lg font-semibold text-
|
|
155
|
-
<Bell className="w-5 h-5 mr-2 text-amber-600" />
|
|
156
|
-
Recent Alerts
|
|
157
|
-
</h2>
|
|
158
|
-
<div className="space-y-4">
|
|
159
|
-
{RECENT_ALERTS.map((alert) => (
|
|
160
|
-
<div key={alert.id} className="flex items-start gap-3 p-3 bg-
|
|
161
|
-
<div className={`w-2 h-2 rounded-full mt-2 ${
|
|
162
|
-
alert.severity === 'error' ? 'bg-red-500' :
|
|
163
|
-
alert.severity === 'warning' ? 'bg-amber-500' :
|
|
164
|
-
'bg-blue-500'
|
|
165
|
-
}`} />
|
|
166
|
-
<div className="flex-1">
|
|
167
|
-
<p className="text-sm text-
|
|
168
|
-
<p className="text-xs text-
|
|
169
|
-
</div>
|
|
170
|
-
</div>
|
|
171
|
-
))}
|
|
172
|
-
</div>
|
|
173
|
-
</Card>
|
|
174
|
-
</div>
|
|
175
|
-
|
|
176
|
-
{/* Device List */}
|
|
177
|
-
<Card className="p-6">
|
|
178
|
-
<div className="flex items-center justify-between mb-6">
|
|
179
|
-
<h2 className="text-lg font-semibold text-
|
|
180
|
-
<Cpu className="w-5 h-5 mr-2 text-
|
|
181
|
-
Devices
|
|
182
|
-
</h2>
|
|
183
|
-
<Link href="/devices">
|
|
184
|
-
<Button variant="outline" size="sm">View All</Button>
|
|
185
|
-
</Link>
|
|
186
|
-
</div>
|
|
187
|
-
<div className="overflow-x-auto">
|
|
188
|
-
<table className="w-full">
|
|
189
|
-
<thead>
|
|
190
|
-
<tr className="border-b border-
|
|
191
|
-
<th className="text-left py-3 px-4 text-sm font-medium text-
|
|
192
|
-
<th className="text-left py-3 px-4 text-sm font-medium text-
|
|
193
|
-
<th className="text-left py-3 px-4 text-sm font-medium text-
|
|
194
|
-
<th className="text-left py-3 px-4 text-sm font-medium text-
|
|
195
|
-
</tr>
|
|
196
|
-
</thead>
|
|
197
|
-
<tbody>
|
|
198
|
-
{DEVICES.map((device) => (
|
|
199
|
-
<tr key={device.id} className="border-b border-
|
|
200
|
-
<td className="py-3 px-4">
|
|
201
|
-
<span className="font-medium text-
|
|
202
|
-
</td>
|
|
203
|
-
<td className="py-3 px-4 text-
|
|
204
|
-
<td className="py-3 px-4">
|
|
205
|
-
<PulseIndicator
|
|
206
|
-
status={device.status === 'online' ? 'success' : 'error'}
|
|
207
|
-
label={device.status}
|
|
208
|
-
size="sm"
|
|
209
|
-
/>
|
|
210
|
-
</td>
|
|
211
|
-
<td className="py-3 px-4 text-
|
|
212
|
-
<Clock className="w-3 h-3 mr-1" />
|
|
213
|
-
{device.lastSeen}
|
|
214
|
-
</td>
|
|
215
|
-
</tr>
|
|
216
|
-
))}
|
|
217
|
-
</tbody>
|
|
218
|
-
</table>
|
|
219
|
-
</div>
|
|
220
|
-
</Card>
|
|
221
|
-
</div>
|
|
222
|
-
</div>
|
|
223
|
-
)
|
|
224
|
-
}
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from 'react'
|
|
4
|
+
import { Button, Card, PulseIndicator } from '@digilogiclabs/saas-factory-ui'
|
|
5
|
+
import { Cpu, Activity, Signal, Bell, AlertTriangle, CheckCircle, Clock, ThermometerSun, Gauge, Wifi, Plus } from 'lucide-react'
|
|
6
|
+
import Link from 'next/link'
|
|
7
|
+
|
|
8
|
+
// Simulated real-time data
|
|
9
|
+
const generateTelemetryData = () => ({
|
|
10
|
+
temperature: (20 + Math.random() * 10).toFixed(1),
|
|
11
|
+
pressure: (100 + Math.random() * 20).toFixed(1),
|
|
12
|
+
humidity: (40 + Math.random() * 30).toFixed(0),
|
|
13
|
+
signalStrength: (-50 - Math.random() * 40).toFixed(0),
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const DEVICES = [
|
|
17
|
+
{ id: 1, name: 'Sensor Hub A1', type: 'Gateway', status: 'online', lastSeen: '2 min ago' },
|
|
18
|
+
{ id: 2, name: 'Temp Sensor T-001', type: 'Temperature', status: 'online', lastSeen: '1 min ago' },
|
|
19
|
+
{ id: 3, name: 'Pressure Gauge P-001', type: 'Pressure', status: 'online', lastSeen: '3 min ago' },
|
|
20
|
+
{ id: 4, name: 'Motion Detector M-001', type: 'Motion', status: 'offline', lastSeen: '15 min ago' },
|
|
21
|
+
{ id: 5, name: 'Humidity Sensor H-001', type: 'Humidity', status: 'online', lastSeen: '30 sec ago' },
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
const RECENT_ALERTS = [
|
|
25
|
+
{ id: 1, message: 'Temperature threshold exceeded on T-001', severity: 'warning', time: '5 min ago' },
|
|
26
|
+
{ id: 2, message: 'Motion Detector M-001 offline', severity: 'error', time: '15 min ago' },
|
|
27
|
+
{ id: 3, message: 'System backup completed', severity: 'info', time: '1 hour ago' },
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
export default function DashboardPage() {
|
|
31
|
+
const [telemetry, setTelemetry] = useState(generateTelemetryData())
|
|
32
|
+
|
|
33
|
+
// Simulate real-time updates
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const interval = setInterval(() => {
|
|
36
|
+
setTelemetry(generateTelemetryData())
|
|
37
|
+
}, 3000)
|
|
38
|
+
return () => clearInterval(interval)
|
|
39
|
+
}, [])
|
|
40
|
+
|
|
41
|
+
const onlineDevices = DEVICES.filter(d => d.status === 'online').length
|
|
42
|
+
const offlineDevices = DEVICES.filter(d => d.status === 'offline').length
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div className="min-h-screen bg-background">
|
|
46
|
+
{/* Header */}
|
|
47
|
+
<header className="bg-card border-b border-border px-6 py-4">
|
|
48
|
+
<div className="flex items-center justify-between">
|
|
49
|
+
<div>
|
|
50
|
+
<h1 className="text-2xl font-bold text-foreground">Dashboard</h1>
|
|
51
|
+
<p className="text-muted-foreground text-sm">Real-time IoT monitoring</p>
|
|
52
|
+
</div>
|
|
53
|
+
<Link href="/devices/new">
|
|
54
|
+
<Button>
|
|
55
|
+
<Plus className="w-4 h-4 mr-2" />
|
|
56
|
+
Add Device
|
|
57
|
+
</Button>
|
|
58
|
+
</Link>
|
|
59
|
+
</div>
|
|
60
|
+
</header>
|
|
61
|
+
|
|
62
|
+
<div className="p-6">
|
|
63
|
+
{/* Stats */}
|
|
64
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
|
65
|
+
<Card className="p-6">
|
|
66
|
+
<div className="flex items-center justify-between">
|
|
67
|
+
<div>
|
|
68
|
+
<p className="text-sm text-muted-foreground">Total Devices</p>
|
|
69
|
+
<p className="text-3xl font-bold text-foreground">{DEVICES.length}</p>
|
|
70
|
+
</div>
|
|
71
|
+
<div className="w-12 h-12 bg-primary/10 rounded-lg flex items-center justify-center">
|
|
72
|
+
<Cpu className="w-6 h-6 text-primary" />
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
</Card>
|
|
76
|
+
|
|
77
|
+
<Card className="p-6">
|
|
78
|
+
<div className="flex items-center justify-between">
|
|
79
|
+
<div>
|
|
80
|
+
<p className="text-sm text-muted-foreground">Online</p>
|
|
81
|
+
<p className="text-3xl font-bold text-green-600">{onlineDevices}</p>
|
|
82
|
+
</div>
|
|
83
|
+
<div className="w-12 h-12 bg-green-100 dark:bg-green-900/30 rounded-lg flex items-center justify-center">
|
|
84
|
+
<CheckCircle className="w-6 h-6 text-green-600" />
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</Card>
|
|
88
|
+
|
|
89
|
+
<Card className="p-6">
|
|
90
|
+
<div className="flex items-center justify-between">
|
|
91
|
+
<div>
|
|
92
|
+
<p className="text-sm text-muted-foreground">Offline</p>
|
|
93
|
+
<p className="text-3xl font-bold text-destructive">{offlineDevices}</p>
|
|
94
|
+
</div>
|
|
95
|
+
<div className="w-12 h-12 bg-destructive/10 rounded-lg flex items-center justify-center">
|
|
96
|
+
<AlertTriangle className="w-6 h-6 text-destructive" />
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</Card>
|
|
100
|
+
|
|
101
|
+
<Card className="p-6">
|
|
102
|
+
<div className="flex items-center justify-between">
|
|
103
|
+
<div>
|
|
104
|
+
<p className="text-sm text-muted-foreground">Active Alerts</p>
|
|
105
|
+
<p className="text-3xl font-bold text-amber-600">{RECENT_ALERTS.length}</p>
|
|
106
|
+
</div>
|
|
107
|
+
<div className="w-12 h-12 bg-amber-100 dark:bg-amber-900/30 rounded-lg flex items-center justify-center">
|
|
108
|
+
<Bell className="w-6 h-6 text-amber-600" />
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
</Card>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
{/* Live Telemetry */}
|
|
115
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
|
116
|
+
<Card className="p-6">
|
|
117
|
+
<h2 className="text-lg font-semibold text-foreground mb-6 flex items-center">
|
|
118
|
+
<Activity className="w-5 h-5 mr-2 text-primary" />
|
|
119
|
+
Live Telemetry
|
|
120
|
+
</h2>
|
|
121
|
+
<div className="grid grid-cols-2 gap-4">
|
|
122
|
+
<div className="p-4 bg-muted rounded-lg">
|
|
123
|
+
<div className="flex items-center gap-2 mb-2">
|
|
124
|
+
<ThermometerSun className="w-4 h-4 text-orange-500" />
|
|
125
|
+
<span className="text-sm text-muted-foreground">Temperature</span>
|
|
126
|
+
</div>
|
|
127
|
+
<p className="text-2xl font-bold text-foreground">{telemetry.temperature}°C</p>
|
|
128
|
+
</div>
|
|
129
|
+
<div className="p-4 bg-muted rounded-lg">
|
|
130
|
+
<div className="flex items-center gap-2 mb-2">
|
|
131
|
+
<Gauge className="w-4 h-4 text-blue-500" />
|
|
132
|
+
<span className="text-sm text-muted-foreground">Pressure</span>
|
|
133
|
+
</div>
|
|
134
|
+
<p className="text-2xl font-bold text-foreground">{telemetry.pressure} kPa</p>
|
|
135
|
+
</div>
|
|
136
|
+
<div className="p-4 bg-muted rounded-lg">
|
|
137
|
+
<div className="flex items-center gap-2 mb-2">
|
|
138
|
+
<Activity className="w-4 h-4 text-cyan-500" />
|
|
139
|
+
<span className="text-sm text-muted-foreground">Humidity</span>
|
|
140
|
+
</div>
|
|
141
|
+
<p className="text-2xl font-bold text-foreground">{telemetry.humidity}%</p>
|
|
142
|
+
</div>
|
|
143
|
+
<div className="p-4 bg-muted rounded-lg">
|
|
144
|
+
<div className="flex items-center gap-2 mb-2">
|
|
145
|
+
<Signal className="w-4 h-4 text-purple-500" />
|
|
146
|
+
<span className="text-sm text-muted-foreground">Signal</span>
|
|
147
|
+
</div>
|
|
148
|
+
<p className="text-2xl font-bold text-foreground">{telemetry.signalStrength} dBm</p>
|
|
149
|
+
</div>
|
|
150
|
+
</div>
|
|
151
|
+
</Card>
|
|
152
|
+
|
|
153
|
+
<Card className="p-6">
|
|
154
|
+
<h2 className="text-lg font-semibold text-foreground mb-6 flex items-center">
|
|
155
|
+
<Bell className="w-5 h-5 mr-2 text-amber-600" />
|
|
156
|
+
Recent Alerts
|
|
157
|
+
</h2>
|
|
158
|
+
<div className="space-y-4">
|
|
159
|
+
{RECENT_ALERTS.map((alert) => (
|
|
160
|
+
<div key={alert.id} className="flex items-start gap-3 p-3 bg-muted rounded-lg">
|
|
161
|
+
<div className={`w-2 h-2 rounded-full mt-2 ${
|
|
162
|
+
alert.severity === 'error' ? 'bg-red-500' :
|
|
163
|
+
alert.severity === 'warning' ? 'bg-amber-500' :
|
|
164
|
+
'bg-blue-500'
|
|
165
|
+
}`} />
|
|
166
|
+
<div className="flex-1">
|
|
167
|
+
<p className="text-sm text-foreground">{alert.message}</p>
|
|
168
|
+
<p className="text-xs text-muted-foreground mt-1">{alert.time}</p>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
))}
|
|
172
|
+
</div>
|
|
173
|
+
</Card>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
{/* Device List */}
|
|
177
|
+
<Card className="p-6">
|
|
178
|
+
<div className="flex items-center justify-between mb-6">
|
|
179
|
+
<h2 className="text-lg font-semibold text-foreground flex items-center">
|
|
180
|
+
<Cpu className="w-5 h-5 mr-2 text-primary" />
|
|
181
|
+
Devices
|
|
182
|
+
</h2>
|
|
183
|
+
<Link href="/devices">
|
|
184
|
+
<Button variant="outline" size="sm">View All</Button>
|
|
185
|
+
</Link>
|
|
186
|
+
</div>
|
|
187
|
+
<div className="overflow-x-auto">
|
|
188
|
+
<table className="w-full">
|
|
189
|
+
<thead>
|
|
190
|
+
<tr className="border-b border-border">
|
|
191
|
+
<th className="text-left py-3 px-4 text-sm font-medium text-muted-foreground">Name</th>
|
|
192
|
+
<th className="text-left py-3 px-4 text-sm font-medium text-muted-foreground">Type</th>
|
|
193
|
+
<th className="text-left py-3 px-4 text-sm font-medium text-muted-foreground">Status</th>
|
|
194
|
+
<th className="text-left py-3 px-4 text-sm font-medium text-muted-foreground">Last Seen</th>
|
|
195
|
+
</tr>
|
|
196
|
+
</thead>
|
|
197
|
+
<tbody>
|
|
198
|
+
{DEVICES.map((device) => (
|
|
199
|
+
<tr key={device.id} className="border-b border-border/50 hover:bg-muted/50">
|
|
200
|
+
<td className="py-3 px-4">
|
|
201
|
+
<span className="font-medium text-foreground">{device.name}</span>
|
|
202
|
+
</td>
|
|
203
|
+
<td className="py-3 px-4 text-muted-foreground">{device.type}</td>
|
|
204
|
+
<td className="py-3 px-4">
|
|
205
|
+
<PulseIndicator
|
|
206
|
+
status={device.status === 'online' ? 'success' : 'error'}
|
|
207
|
+
label={device.status}
|
|
208
|
+
size="sm"
|
|
209
|
+
/>
|
|
210
|
+
</td>
|
|
211
|
+
<td className="py-3 px-4 text-muted-foreground flex items-center">
|
|
212
|
+
<Clock className="w-3 h-3 mr-1" />
|
|
213
|
+
{device.lastSeen}
|
|
214
|
+
</td>
|
|
215
|
+
</tr>
|
|
216
|
+
))}
|
|
217
|
+
</tbody>
|
|
218
|
+
</table>
|
|
219
|
+
</div>
|
|
220
|
+
</Card>
|
|
221
|
+
</div>
|
|
222
|
+
</div>
|
|
223
|
+
)
|
|
224
|
+
}
|
|
@@ -16,27 +16,27 @@ export default function Error({ error, reset }: ErrorProps) {
|
|
|
16
16
|
}, [error])
|
|
17
17
|
|
|
18
18
|
return (
|
|
19
|
-
<div className="min-h-screen bg-
|
|
19
|
+
<div className="min-h-screen bg-background flex items-center justify-center p-4">
|
|
20
20
|
<Card className="p-8 max-w-lg w-full">
|
|
21
21
|
<div className="flex flex-col items-center space-y-6 text-center">
|
|
22
|
-
<div className="w-16 h-16 bg-
|
|
23
|
-
<AlertTriangle className="w-8 h-8 text-
|
|
22
|
+
<div className="w-16 h-16 bg-destructive/10 rounded-full flex items-center justify-center">
|
|
23
|
+
<AlertTriangle className="w-8 h-8 text-destructive" />
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
<div>
|
|
27
|
-
<h1 className="text-2xl font-bold text-
|
|
27
|
+
<h1 className="text-2xl font-bold text-foreground mb-2">
|
|
28
28
|
Something went wrong!
|
|
29
29
|
</h1>
|
|
30
|
-
<p className="text-
|
|
30
|
+
<p className="text-muted-foreground mb-4">
|
|
31
31
|
We encountered an unexpected error. This has been logged and our team will look into it.
|
|
32
32
|
</p>
|
|
33
33
|
|
|
34
34
|
{process.env.NODE_ENV === 'development' && (
|
|
35
35
|
<details className="mt-4 text-left">
|
|
36
|
-
<summary className="cursor-pointer text-sm text-
|
|
36
|
+
<summary className="cursor-pointer text-sm text-muted-foreground hover:text-foreground">
|
|
37
37
|
Error details (development only)
|
|
38
38
|
</summary>
|
|
39
|
-
<div className="mt-2 p-3 bg-
|
|
39
|
+
<div className="mt-2 p-3 bg-muted rounded text-xs font-mono text-muted-foreground overflow-auto max-h-40">
|
|
40
40
|
<div className="mb-2">
|
|
41
41
|
<strong>Message:</strong> {error.message}
|
|
42
42
|
</div>
|
|
@@ -57,7 +57,7 @@ export default function Error({ error, reset }: ErrorProps) {
|
|
|
57
57
|
</div>
|
|
58
58
|
|
|
59
59
|
<div className="flex flex-col sm:flex-row gap-3 w-full">
|
|
60
|
-
<Button onClick={reset} className="flex-1
|
|
60
|
+
<Button onClick={reset} className="flex-1" size="lg">
|
|
61
61
|
<RefreshCw className="w-4 h-4 mr-2" />
|
|
62
62
|
Try again
|
|
63
63
|
</Button>
|