@digilogiclabs/create-saas-app 2.11.0 → 2.12.1

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 (413) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/index.js +1 -1
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/generators/template-generator.d.ts +0 -2
  6. package/dist/generators/template-generator.d.ts.map +1 -1
  7. package/dist/generators/template-generator.js +18 -17
  8. package/dist/generators/template-generator.js.map +1 -1
  9. package/dist/templates/mobile/base/template/App.tsx +7 -4
  10. package/dist/templates/mobile/base/template/app/checkout.tsx +5 -2
  11. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/_layout.tsx +6 -2
  12. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/billing.tsx +7 -3
  13. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/index.tsx +5 -2
  14. package/dist/templates/mobile/ui-auth-payments/template/app/(tabs)/profile.tsx +7 -2
  15. package/dist/templates/mobile/ui-auth-payments/template/app/_layout.tsx +2 -4
  16. package/dist/templates/mobile/ui-auth-payments/template/app/auth/login.tsx +6 -3
  17. package/dist/templates/mobile/ui-auth-payments/template/app/auth/signup.tsx +6 -3
  18. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/_layout.tsx +6 -2
  19. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/billing.tsx +7 -3
  20. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/index.tsx +5 -2
  21. package/dist/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/profile.tsx +7 -2
  22. package/dist/templates/mobile/ui-auth-payments-ai/template/app/_layout.tsx +2 -4
  23. package/dist/templates/mobile/ui-auth-payments-ai/template/app/auth/login.tsx +6 -3
  24. package/dist/templates/mobile/ui-auth-payments-ai/template/app/auth/signup.tsx +6 -3
  25. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  26. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  27. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  28. package/dist/templates/shared/config/web/next.config.mjs +0 -1
  29. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  30. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  31. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  32. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  33. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  34. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  35. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  36. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  37. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  38. package/dist/templates/shared/mock/web/.env.local +55 -0
  39. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  40. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  41. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  42. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  43. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  44. package/dist/templates/web/ai-platform/template/package.json +0 -1
  45. package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +5 -2
  46. package/dist/templates/web/ai-platform/template/src/app/playground/page.tsx +5 -2
  47. package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +2 -5
  48. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  49. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  50. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  51. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  52. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  53. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  54. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  55. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  56. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  57. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  58. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  59. package/dist/templates/web/iot-dashboard/template/package.json +0 -1
  60. package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +2 -5
  61. package/dist/templates/web/marketplace/template/package.json +0 -1
  62. package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +2 -5
  63. package/dist/templates/web/micro-saas/template/package.json +0 -1
  64. package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +2 -5
  65. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  66. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  67. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  68. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  69. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  70. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  71. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  72. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  73. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  74. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  75. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  76. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  77. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  78. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  79. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  80. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  81. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  82. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  83. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  84. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  85. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  86. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  87. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  88. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  89. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  90. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  91. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  92. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  93. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  94. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  95. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  96. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  97. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  98. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  99. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  100. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  101. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  102. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  103. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  104. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  105. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  106. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  107. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  108. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  109. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  110. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  111. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  112. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  113. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  114. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  115. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  116. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  117. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  118. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  119. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  120. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  121. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  122. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  123. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  124. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  125. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  126. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  127. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  128. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  129. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  130. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  131. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  132. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  133. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  134. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  135. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  136. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  137. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  138. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  139. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  140. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  141. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  142. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  143. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  144. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  145. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  146. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  147. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  148. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  149. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  150. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  151. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  152. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  153. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  154. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  155. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  156. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  157. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  158. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  159. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  160. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  161. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  162. package/package.json +1 -1
  163. package/src/templates/mobile/base/template/App.tsx +7 -4
  164. package/src/templates/mobile/base/template/app/checkout.tsx +5 -2
  165. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/_layout.tsx +6 -2
  166. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/billing.tsx +7 -3
  167. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/index.tsx +5 -2
  168. package/src/templates/mobile/ui-auth-payments/template/app/(tabs)/profile.tsx +7 -2
  169. package/src/templates/mobile/ui-auth-payments/template/app/_layout.tsx +2 -4
  170. package/src/templates/mobile/ui-auth-payments/template/app/auth/login.tsx +6 -3
  171. package/src/templates/mobile/ui-auth-payments/template/app/auth/signup.tsx +6 -3
  172. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/_layout.tsx +6 -2
  173. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/billing.tsx +7 -3
  174. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/index.tsx +5 -2
  175. package/src/templates/mobile/ui-auth-payments-ai/template/app/(tabs)/profile.tsx +7 -2
  176. package/src/templates/mobile/ui-auth-payments-ai/template/app/_layout.tsx +2 -4
  177. package/src/templates/mobile/ui-auth-payments-ai/template/app/auth/login.tsx +6 -3
  178. package/src/templates/mobile/ui-auth-payments-ai/template/app/auth/signup.tsx +6 -3
  179. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  180. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  181. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  182. package/src/templates/shared/config/web/next.config.mjs +0 -1
  183. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  184. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  185. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  186. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  187. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  188. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  189. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  190. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  191. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  192. package/src/templates/shared/mock/web/.env.local +55 -0
  193. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  194. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  195. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  196. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  197. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  198. package/src/templates/web/ai-platform/template/package.json +0 -1
  199. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +5 -2
  200. package/src/templates/web/ai-platform/template/src/app/playground/page.tsx +5 -2
  201. package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +2 -5
  202. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  203. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  204. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  205. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  206. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  207. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  208. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  209. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  210. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  211. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  212. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  213. package/src/templates/web/iot-dashboard/template/package.json +0 -1
  214. package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +2 -5
  215. package/src/templates/web/marketplace/template/package.json +0 -1
  216. package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +2 -5
  217. package/src/templates/web/micro-saas/template/package.json +0 -1
  218. package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +2 -5
  219. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  220. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  221. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  222. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  223. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  224. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  225. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  226. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  227. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  228. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  229. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  230. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  231. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  232. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  233. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  234. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  235. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  236. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  237. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  238. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  239. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  240. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  241. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  242. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  243. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  244. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  245. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  246. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  247. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  248. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  249. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  250. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  251. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  252. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  253. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  254. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  255. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  256. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  257. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  258. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  259. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  260. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  261. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  262. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  263. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  264. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  265. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  266. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  267. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  268. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  269. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  270. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  271. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  272. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  273. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  274. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  275. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  276. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  277. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  278. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  279. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  280. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  281. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  282. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  283. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  284. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  285. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  286. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  287. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  288. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  289. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  290. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  291. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  292. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  293. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  294. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  295. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  296. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  297. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  298. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  299. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  300. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  301. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  302. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  303. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  304. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  305. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  306. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  307. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  308. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  309. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  310. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  311. package/src/templates/web/ui-package-test/template/package.json +19 -23
  312. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  313. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  314. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  315. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  316. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  317. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  318. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  319. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  320. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  321. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  322. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  323. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  324. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  325. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  326. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  327. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  328. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  329. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  330. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  331. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  332. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  333. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  334. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  335. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  336. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  337. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  338. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  339. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  340. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  341. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  342. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  343. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  344. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  345. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  346. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  347. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  348. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  349. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  350. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  351. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  352. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  353. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  354. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  355. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  356. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  357. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  358. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  359. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  360. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  361. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  362. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  363. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  364. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  365. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  366. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  367. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  368. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  369. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  370. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  371. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  372. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  373. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  374. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  375. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  376. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  377. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  378. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  379. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  380. package/src/templates/web/base/template/.eslintrc.js +0 -8
  381. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  382. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  383. package/src/templates/web/base/template/vitest.config.ts +0 -17
  384. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  385. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  386. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  387. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  388. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  389. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  390. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  391. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  392. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  393. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  394. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  395. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  396. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  397. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  398. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  399. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  400. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  401. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  402. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  403. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  404. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  405. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  406. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  407. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  408. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  409. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  410. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  411. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  412. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  413. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,66 +1,117 @@
1
- 'use client';
2
-
3
- import {
4
- SignupForm,
5
- PageTransition,
6
- MobileContainer,
7
- NetworkAwareContent,
8
- OfflineWrapper
9
- } from '@digilogiclabs/saas-factory-ui';
10
- import { createBrowserClient } from '@supabase/ssr';
11
- import React from 'react';
12
-
13
- export default function SignupPage() {
14
- const supabase = createBrowserClient(
15
- process.env.NEXT_PUBLIC_SUPABASE_URL!,
16
- process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
17
- );
18
-
19
- const handleSignup = async (values: any) => {
20
- await supabase.auth.signUp({
21
- email: values.email,
22
- password: values.password,
23
- });
24
- };
25
-
26
- const handleGoogleSignup = async () => {
27
- await supabase.auth.signInWithOAuth({
28
- provider: 'google',
29
- options: {
30
- redirectTo: `${location.origin}/auth/callback`,
31
- },
32
- });
33
- };
34
-
35
- return (
36
- <PageTransition type="slide" direction="horizontal" duration={300}>
37
- <OfflineWrapper
38
- cacheStrategy="network-first"
39
- showOfflineIndicator={true}
40
- >
41
- <NetworkAwareContent
42
- showOnOffline={
43
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
44
- <div className="text-center p-6">
45
- <h2 className="text-xl font-semibold mb-2">You're offline</h2>
46
- <p className="text-gray-600">Please check your connection to sign up.</p>
47
- </div>
48
- </div>
49
- }
50
- >
51
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
52
- <MobileContainer className="w-full max-w-md">
53
- <SignupForm
54
- onSubmit={handleSignup}
55
- onGoogleSignIn={handleGoogleSignup}
56
- authProvider="supabase"
57
- mobileOptimized={true}
58
- touchFriendly={true}
59
- />
60
- </MobileContainer>
61
- </div>
62
- </NetworkAwareContent>
63
- </OfflineWrapper>
64
- </PageTransition>
65
- );
66
- }
1
+ 'use client';
2
+
3
+ import React, { useState, useEffect } from 'react';
4
+ import Link from 'next/link';
5
+ import { useRouter } from 'next/navigation';
6
+ import { Button } from '@/components/ui/button';
7
+ import { useMockAuth } from '@/components/mock-auth-provider';
8
+ import { MOCK_MODE } from '@/lib/mock';
9
+
10
+ export default function SignupPage() {
11
+ const [email, setEmail] = useState('');
12
+ const [password, setPassword] = useState('');
13
+ const [error, setError] = useState('');
14
+ const [loading, setLoading] = useState(false);
15
+ const { signIn, isAuthenticated } = useMockAuth();
16
+ const router = useRouter();
17
+
18
+ // Redirect if already signed in
19
+ useEffect(() => {
20
+ if (isAuthenticated) router.push('/dashboard');
21
+ }, [isAuthenticated, router]);
22
+
23
+ if (isAuthenticated) return null;
24
+
25
+ const handleSignup = async (e: React.FormEvent) => {
26
+ e.preventDefault();
27
+ setLoading(true);
28
+ setError('');
29
+
30
+ if (MOCK_MODE) {
31
+ // Mock mode: sign in immediately (simulates successful signup + auto-login)
32
+ signIn(email, password);
33
+ router.push('/dashboard');
34
+ return;
35
+ }
36
+
37
+ // TODO: [REAL_DATA] Replace with your auth provider's sign up
38
+ // Example (Supabase):
39
+ // const { error } = await supabase.auth.signUp({ email, password });
40
+ // Example (NextAuth):
41
+ // const result = await fetch('/api/auth/register', { ... });
42
+ try {
43
+ const res = await fetch('/api/auth/signup', {
44
+ method: 'POST',
45
+ headers: { 'Content-Type': 'application/json' },
46
+ body: JSON.stringify({ email, password }),
47
+ });
48
+ if (!res.ok) {
49
+ const data = await res.json();
50
+ setError(data.error || 'Sign up failed');
51
+ return;
52
+ }
53
+ router.push('/dashboard');
54
+ } catch {
55
+ setError('An unexpected error occurred');
56
+ } finally {
57
+ setLoading(false);
58
+ }
59
+ };
60
+
61
+ return (
62
+ <div className="flex items-center justify-center min-h-screen bg-background px-4">
63
+ <div className="w-full max-w-sm">
64
+ <div className="rounded-xl border border-border bg-card p-8 shadow-sm">
65
+ <h1 className="text-2xl font-bold text-card-foreground mb-1">Create Account</h1>
66
+ <p className="text-sm text-muted-foreground mb-6">Get started with your free account.</p>
67
+
68
+ {MOCK_MODE && (
69
+ <div className="mb-4 rounded-lg bg-primary/10 p-3 text-xs text-primary">
70
+ <strong>Mock Mode:</strong> Any email/password will work. Click Sign Up to continue.
71
+ </div>
72
+ )}
73
+
74
+ {error && (
75
+ <div className="mb-4 rounded-lg bg-destructive/10 p-3 text-sm text-destructive">{error}</div>
76
+ )}
77
+
78
+ <form onSubmit={handleSignup} className="space-y-4">
79
+ <div>
80
+ <label htmlFor="email" className="block text-sm font-medium text-foreground mb-1">Email</label>
81
+ <input
82
+ id="email"
83
+ type="email"
84
+ value={email}
85
+ onChange={(e) => setEmail(e.target.value)}
86
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
87
+ placeholder="you@example.com"
88
+ required
89
+ />
90
+ </div>
91
+ <div>
92
+ <label htmlFor="password" className="block text-sm font-medium text-foreground mb-1">Password</label>
93
+ <input
94
+ id="password"
95
+ type="password"
96
+ value={password}
97
+ onChange={(e) => setPassword(e.target.value)}
98
+ className="w-full rounded-lg border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
99
+ placeholder="••••••••"
100
+ required
101
+ minLength={8}
102
+ />
103
+ </div>
104
+ <Button type="submit" className="w-full" disabled={loading}>
105
+ {loading ? 'Creating account...' : 'Sign Up'}
106
+ </Button>
107
+ </form>
108
+
109
+ <p className="mt-6 text-center text-sm text-muted-foreground">
110
+ Already have an account?{' '}
111
+ <Link href="/login" className="text-primary hover:underline">Sign in</Link>
112
+ </p>
113
+ </div>
114
+ </div>
115
+ </div>
116
+ );
117
+ }
@@ -2,7 +2,12 @@
2
2
 
3
3
  import { ThemeProvider } from 'next-themes'
4
4
  import { Toaster } from '@digilogiclabs/saas-factory-ui'
5
- import { DLLProvider } from '@digilogiclabs/app-sdk'
5
+ import { MockAuthProvider } from '@/components/mock-auth-provider'
6
+
7
+ // TODO: [REAL_DATA] Replace MockAuthProvider with your auth provider:
8
+ // Supabase: import { AuthProvider } from '@/providers/auth-provider'
9
+ // NextAuth: import { SessionProvider } from 'next-auth/react'
10
+ // Keycloak: import { KeycloakProvider } from '@/providers/keycloak'
6
11
 
7
12
  interface AppProvidersProps {
8
13
  children: React.ReactNode
@@ -11,10 +16,10 @@ interface AppProvidersProps {
11
16
  export function AppProviders({ children }: AppProvidersProps) {
12
17
  return (
13
18
  <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
14
- <DLLProvider>
19
+ <MockAuthProvider>
15
20
  {children}
16
21
  <Toaster />
17
- </DLLProvider>
22
+ </MockAuthProvider>
18
23
  </ThemeProvider>
19
24
  )
20
25
  }
@@ -1,63 +1,229 @@
1
- 'use client';
2
-
3
- import React from 'react';
4
- import Link from 'next/link';
5
- import { useAuth } from '@digilogiclabs/app-sdk';
6
- import { Button } from '@/components/ui/button';
7
- import { ThemeToggle } from '@/components/ui/theme-toggle';
8
- import { ResponsiveHeader, MobileNavigation } from '@digilogiclabs/saas-factory-ui';
9
- import { LogOut, Menu, User, Settings } from 'lucide-react';
10
-
11
- export function Header() {
12
- const { user, signOut } = useAuth();
13
-
14
- const navigationItems = [
15
- {
16
- label: 'Dashboard',
17
- href: '/dashboard',
18
- icon: User,
19
- protected: true
20
- },
21
- {
22
- label: 'Settings',
23
- href: '/settings',
24
- icon: Settings,
25
- protected: true
26
- }
27
- ];
28
-
29
- const authActions = user ? [
30
- {
31
- label: 'Sign Out',
32
- icon: LogOut,
33
- onClick: signOut,
34
- variant: 'ghost' as const
35
- }
36
- ] : [
37
- {
38
- label: 'Login',
39
- href: '/login',
40
- variant: 'ghost' as const
41
- },
42
- {
43
- label: 'Sign Up',
44
- href: '/signup',
45
- variant: 'default' as const
46
- }
47
- ];
48
-
49
- return (
50
- <ResponsiveHeader
51
- logo={{
52
- text: '{{titleCaseName}}',
53
- href: '/'
54
- }}
55
- navigationItems={navigationItems}
56
- actions={authActions}
57
- showThemeToggle={true}
58
- user={user}
59
- mobileBreakpoint="md"
60
- className="bg-white dark:bg-gray-800 shadow-md"
61
- />
62
- );
63
- }
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import Link from 'next/link';
5
+ import { usePathname } from 'next/navigation';
6
+ import { ThemeToggle } from '@/components/ui/theme-toggle';
7
+ import { useMockAuth } from '@/components/mock-auth-provider';
8
+ import { MOCK_MODE } from '@/lib/mock';
9
+ import {
10
+ User, LogOut, ChevronDown, Menu, X, MoreHorizontal,
11
+ LayoutDashboard, Settings, CreditCard,
12
+ } from 'lucide-react';
13
+
14
+ /**
15
+ * Navigation links config.
16
+ * - `auth`: if true, only shown when user is authenticated
17
+ * - Links are shown in order; on desktop, the first MAX_DESKTOP_NAV
18
+ * are in the top bar and extras overflow into the user dropdown.
19
+ */
20
+ const NAV_LINKS = [
21
+ { href: '/dashboard', label: 'Dashboard', icon: LayoutDashboard, auth: true },
22
+ { href: '/settings', label: 'Settings', icon: Settings, auth: true },
23
+ { href: '/checkout', label: 'Billing', icon: CreditCard, auth: true },
24
+ // Add more links here — extras automatically overflow to dropdown/mobile
25
+ ];
26
+
27
+ /** Max nav links shown in the desktop top bar before overflow */
28
+ const MAX_DESKTOP_NAV = 3;
29
+
30
+ export function Header() {
31
+ const [dropdownOpen, setDropdownOpen] = useState(false);
32
+ const [mobileOpen, setMobileOpen] = useState(false);
33
+ const { user, signOut, isAuthenticated } = useMockAuth();
34
+ const pathname = usePathname();
35
+
36
+ const handleSignOut = () => {
37
+ signOut();
38
+ setDropdownOpen(false);
39
+ setMobileOpen(false);
40
+ };
41
+
42
+ // Filter links based on auth state
43
+ const visibleLinks = NAV_LINKS.filter((link) => !link.auth || isAuthenticated);
44
+ const desktopLinks = visibleLinks.slice(0, MAX_DESKTOP_NAV);
45
+ const overflowLinks = visibleLinks.slice(MAX_DESKTOP_NAV);
46
+
47
+ const isActive = (href: string) =>
48
+ pathname === href || (href !== '/' && pathname.startsWith(href));
49
+
50
+ return (
51
+ <header className="sticky top-0 z-50 border-b border-border bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
52
+ <div className="mx-auto flex h-14 max-w-6xl items-center px-4">
53
+ {/* Logo — left */}
54
+ <Link href="/" className="mr-auto text-lg font-bold text-foreground">
55
+ {'{{titleCaseName}}'}
56
+ </Link>
57
+
58
+ {/* ═══ Desktop (md+) ═══ */}
59
+ <div className="hidden items-center gap-1 md:flex">
60
+ {/* Primary nav links */}
61
+ {desktopLinks.map((link) => (
62
+ <Link
63
+ key={link.href}
64
+ href={link.href}
65
+ className={`rounded-md px-3 py-2 text-sm transition-colors ${
66
+ isActive(link.href)
67
+ ? 'bg-primary/10 text-primary font-medium'
68
+ : 'text-muted-foreground hover:text-foreground hover:bg-muted'
69
+ }`}
70
+ >
71
+ {link.label}
72
+ </Link>
73
+ ))}
74
+
75
+ <div className="ml-2 flex items-center gap-2">
76
+ <ThemeToggle />
77
+
78
+ {isAuthenticated && user ? (
79
+ <div className="relative">
80
+ <button
81
+ onClick={() => setDropdownOpen(!dropdownOpen)}
82
+ className="flex items-center gap-2 rounded-lg border border-border bg-card px-3 py-1.5 text-sm hover:bg-muted transition-colors"
83
+ >
84
+ <div className="flex h-6 w-6 items-center justify-center rounded-full bg-primary/10">
85
+ <User className="h-3.5 w-3.5 text-primary" />
86
+ </div>
87
+ <span className="text-foreground">{user.name}</span>
88
+ {MOCK_MODE && (
89
+ <span className="rounded bg-primary/10 px-1 py-0.5 text-[10px] text-primary font-medium">Mock</span>
90
+ )}
91
+ <ChevronDown className={`h-3.5 w-3.5 text-muted-foreground transition-transform ${dropdownOpen ? 'rotate-180' : ''}`} />
92
+ </button>
93
+
94
+ {dropdownOpen && (
95
+ <>
96
+ <div className="fixed inset-0 z-40" onClick={() => setDropdownOpen(false)} />
97
+ <div className="absolute right-0 top-full z-50 mt-1 w-56 rounded-lg border border-border bg-card shadow-lg">
98
+ {/* User info */}
99
+ <div className="border-b border-border px-4 py-3">
100
+ <p className="text-sm font-medium text-foreground">{user.name}</p>
101
+ <p className="text-xs text-muted-foreground">{user.email}</p>
102
+ </div>
103
+
104
+ {/* Overflow nav links (4th+ links go here) */}
105
+ {overflowLinks.length > 0 && (
106
+ <div className="border-b border-border py-1">
107
+ {overflowLinks.map((link) => (
108
+ <Link
109
+ key={link.href}
110
+ href={link.href}
111
+ onClick={() => setDropdownOpen(false)}
112
+ className={`flex items-center gap-2 px-4 py-2 text-sm transition-colors ${
113
+ isActive(link.href)
114
+ ? 'text-primary bg-primary/5'
115
+ : 'text-foreground hover:bg-muted'
116
+ }`}
117
+ >
118
+ <link.icon className="h-4 w-4 text-muted-foreground" />
119
+ {link.label}
120
+ </Link>
121
+ ))}
122
+ </div>
123
+ )}
124
+
125
+ {/* Sign out */}
126
+ <div className="py-1">
127
+ <button
128
+ onClick={handleSignOut}
129
+ className="flex w-full items-center gap-2 px-4 py-2 text-sm text-destructive hover:bg-muted transition-colors"
130
+ >
131
+ <LogOut className="h-4 w-4" /> Sign Out
132
+ </button>
133
+ </div>
134
+ </div>
135
+ </>
136
+ )}
137
+ </div>
138
+ ) : (
139
+ <>
140
+ <Link href="/login" className="rounded-md px-3 py-1.5 text-sm text-foreground hover:bg-muted transition-colors">
141
+ Sign In
142
+ </Link>
143
+ <Link href="/signup" className="rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">
144
+ Sign Up
145
+ </Link>
146
+ </>
147
+ )}
148
+ </div>
149
+ </div>
150
+
151
+ {/* ═══ Mobile (<md) ═══ */}
152
+ <div className="flex items-center gap-2 md:hidden">
153
+ <ThemeToggle />
154
+ <button
155
+ className="inline-flex items-center justify-center rounded-md p-2 text-muted-foreground hover:text-foreground hover:bg-muted"
156
+ onClick={() => { setMobileOpen(!mobileOpen); setDropdownOpen(false); }}
157
+ aria-label="Toggle menu"
158
+ >
159
+ {mobileOpen ? <X className="h-5 w-5" /> : <Menu className="h-5 w-5" />}
160
+ </button>
161
+ </div>
162
+ </div>
163
+
164
+ {/* ═══ Mobile overlay panel ═══ */}
165
+ {mobileOpen && (
166
+ <>
167
+ <div className="fixed inset-0 top-14 z-40 bg-background/80 backdrop-blur-sm md:hidden" onClick={() => setMobileOpen(false)} />
168
+ <div className="fixed inset-x-0 top-14 z-50 border-b border-border bg-background shadow-lg md:hidden">
169
+ {/* Nav links — filtered by auth */}
170
+ {visibleLinks.length > 0 && (
171
+ <nav className="px-4 py-2">
172
+ {visibleLinks.map((link) => (
173
+ <Link
174
+ key={link.href}
175
+ href={link.href}
176
+ onClick={() => setMobileOpen(false)}
177
+ className={`flex items-center gap-3 rounded-md px-3 py-2.5 text-sm transition-colors ${
178
+ isActive(link.href)
179
+ ? 'bg-primary/10 text-primary font-medium'
180
+ : 'text-muted-foreground hover:bg-muted hover:text-foreground'
181
+ }`}
182
+ >
183
+ <link.icon className="h-4 w-4" />
184
+ {link.label}
185
+ </Link>
186
+ ))}
187
+ </nav>
188
+ )}
189
+
190
+ {/* User section */}
191
+ <div className="border-t border-border px-4 py-3">
192
+ {isAuthenticated && user ? (
193
+ <>
194
+ <div className="flex items-center gap-3 px-3 py-2">
195
+ <div className="flex h-8 w-8 items-center justify-center rounded-full bg-primary/10">
196
+ <User className="h-4 w-4 text-primary" />
197
+ </div>
198
+ <div className="min-w-0 flex-1">
199
+ <p className="text-sm font-medium text-foreground truncate">{user.name}</p>
200
+ <p className="text-xs text-muted-foreground truncate">{user.email}</p>
201
+ </div>
202
+ {MOCK_MODE && (
203
+ <span className="rounded bg-primary/10 px-1.5 py-0.5 text-[10px] text-primary font-medium">Mock</span>
204
+ )}
205
+ </div>
206
+ <button
207
+ onClick={handleSignOut}
208
+ className="mt-1 flex w-full items-center gap-3 rounded-md px-3 py-2.5 text-sm text-destructive hover:bg-muted transition-colors"
209
+ >
210
+ <LogOut className="h-4 w-4" /> Sign Out
211
+ </button>
212
+ </>
213
+ ) : (
214
+ <div className="flex gap-2">
215
+ <Link href="/login" onClick={() => setMobileOpen(false)} className="flex-1 text-center rounded-md border border-border px-3 py-2.5 text-sm text-foreground hover:bg-muted transition-colors">
216
+ Sign In
217
+ </Link>
218
+ <Link href="/signup" onClick={() => setMobileOpen(false)} className="flex-1 text-center rounded-md bg-primary px-3 py-2.5 text-sm text-primary-foreground hover:bg-primary/90 transition-colors">
219
+ Sign Up
220
+ </Link>
221
+ </div>
222
+ )}
223
+ </div>
224
+ </div>
225
+ </>
226
+ )}
227
+ </header>
228
+ );
229
+ }
@@ -15,7 +15,6 @@
15
15
  "react": "^19.0.0",
16
16
  "react-dom": "^19.0.0",
17
17
  "@digilogiclabs/platform-core": "^1.14.0",
18
- "@digilogiclabs/app-sdk": "^1.1.0",
19
18
  "@digilogiclabs/saas-factory-ui": "^1.8.1",
20
19
  "tailwindcss": "^4.1.0",
21
20
  "@tailwindcss/postcss": "^4.1.0",
@@ -2,7 +2,6 @@
2
2
 
3
3
  import { ThemeProvider } from 'next-themes'
4
4
  import { Toaster } from '@digilogiclabs/saas-factory-ui'
5
- import { DLLProvider } from '@digilogiclabs/app-sdk'
6
5
 
7
6
  interface AppProvidersProps {
8
7
  children: React.ReactNode
@@ -11,10 +10,8 @@ interface AppProvidersProps {
11
10
  export function AppProviders({ children }: AppProvidersProps) {
12
11
  return (
13
12
  <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
14
- <DLLProvider>
15
- {children}
16
- <Toaster />
17
- </DLLProvider>
13
+ {children}
14
+ <Toaster />
18
15
  </ThemeProvider>
19
16
  )
20
17
  }
@@ -15,7 +15,6 @@
15
15
  "react": "^19.0.0",
16
16
  "react-dom": "^19.0.0",
17
17
  "@digilogiclabs/platform-core": "^1.14.0",
18
- "@digilogiclabs/app-sdk": "^1.1.0",
19
18
  "@digilogiclabs/saas-factory-ui": "^1.8.1",
20
19
  "tailwindcss": "^4.1.0",
21
20
  "@tailwindcss/postcss": "^4.1.0",
@@ -2,7 +2,6 @@
2
2
 
3
3
  import { ThemeProvider } from 'next-themes'
4
4
  import { Toaster } from '@digilogiclabs/saas-factory-ui'
5
- import { DLLProvider } from '@digilogiclabs/app-sdk'
6
5
 
7
6
  interface AppProvidersProps {
8
7
  children: React.ReactNode
@@ -11,10 +10,8 @@ interface AppProvidersProps {
11
10
  export function AppProviders({ children }: AppProvidersProps) {
12
11
  return (
13
12
  <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
14
- <DLLProvider>
15
- {children}
16
- <Toaster />
17
- </DLLProvider>
13
+ {children}
14
+ <Toaster />
18
15
  </ThemeProvider>
19
16
  )
20
17
  }
@@ -15,7 +15,6 @@
15
15
  "react": "^19.0.0",
16
16
  "react-dom": "^19.0.0",
17
17
  "@digilogiclabs/platform-core": "^1.14.0",
18
- "@digilogiclabs/app-sdk": "^1.1.0",
19
18
  "@digilogiclabs/saas-factory-ui": "^1.8.1",
20
19
  "tailwindcss": "^4.1.0",
21
20
  "@tailwindcss/postcss": "^4.1.0",
@@ -2,7 +2,6 @@
2
2
 
3
3
  import { ThemeProvider } from 'next-themes'
4
4
  import { Toaster } from '@digilogiclabs/saas-factory-ui'
5
- import { DLLProvider } from '@digilogiclabs/app-sdk'
6
5
 
7
6
  interface AppProvidersProps {
8
7
  children: React.ReactNode
@@ -11,10 +10,8 @@ interface AppProvidersProps {
11
10
  export function AppProviders({ children }: AppProvidersProps) {
12
11
  return (
13
12
  <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>
14
- <DLLProvider>
15
- {children}
16
- <Toaster />
17
- </DLLProvider>
13
+ {children}
14
+ <Toaster />
18
15
  </ThemeProvider>
19
16
  )
20
17
  }
@@ -0,0 +1,14 @@
1
+ import { dirname } from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { FlatCompat } from '@eslint/eslintrc';
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+
8
+ const compat = new FlatCompat({
9
+ baseDirectory: __dirname,
10
+ });
11
+
12
+ const eslintConfig = [...compat.extends('next/core-web-vitals')];
13
+
14
+ export default eslintConfig;
@@ -8,13 +8,13 @@ export default function CheckoutPage() {
8
8
  };
9
9
 
10
10
  return (
11
- <div className="flex items-center justify-center min-h-screen bg-gray-100">
12
- <div className="p-8 bg-white rounded-lg shadow-md">
11
+ <div className="flex items-center justify-center min-h-screen bg-muted">
12
+ <div className="p-8 bg-card rounded-lg shadow-md border border-border">
13
13
  <h1 className="text-2xl font-bold mb-4">Checkout</h1>
14
14
  <p className="mb-6">Click the button below to proceed to payment.</p>
15
15
  <button
16
16
  onClick={onCheckout}
17
- className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
17
+ className="px-4 py-2 bg-primary text-primary-foreground rounded hover:bg-primary/90"
18
18
  >
19
19
  Proceed to Checkout
20
20
  </button>