@digilogiclabs/create-saas-app 2.11.0 → 2.12.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.
Files changed (358) hide show
  1. package/CHANGELOG.md +6 -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.map +1 -1
  6. package/dist/generators/template-generator.js +15 -8
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  9. package/dist/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  10. package/dist/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  11. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  12. package/dist/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  13. package/dist/templates/shared/email/web/src/lib/email/client.ts +1 -1
  14. package/dist/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  15. package/dist/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  16. package/dist/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  17. package/dist/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  18. package/dist/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  19. package/dist/templates/shared/loading/web/components/skeleton.tsx +4 -4
  20. package/dist/templates/shared/mock/web/.env.local +55 -0
  21. package/dist/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  22. package/dist/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  23. package/dist/templates/shared/mock/web/src/lib/mock.ts +147 -0
  24. package/dist/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  25. package/dist/templates/shared/redis/web/src/lib/redis.ts +1 -1
  26. package/dist/templates/web/base/template/eslint.config.mjs +14 -0
  27. package/dist/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  28. package/dist/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  29. package/dist/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  30. package/dist/templates/web/base/template/src/app/layout.tsx +40 -38
  31. package/dist/templates/web/base/template/src/app/login/page.tsx +116 -66
  32. package/dist/templates/web/base/template/src/app/page.tsx +97 -193
  33. package/dist/templates/web/base/template/src/app/settings/page.tsx +154 -0
  34. package/dist/templates/web/base/template/src/app/signup/page.tsx +117 -66
  35. package/dist/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  36. package/dist/templates/web/base/template/src/components/shared/header.tsx +229 -63
  37. package/dist/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  38. package/dist/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  39. package/dist/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  40. package/dist/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  41. package/dist/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  42. package/dist/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  43. package/dist/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  44. package/dist/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  45. package/dist/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  46. package/dist/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  47. package/dist/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  48. package/dist/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  49. package/dist/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  50. package/dist/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  51. package/dist/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  52. package/dist/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  53. package/dist/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  54. package/dist/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  55. package/dist/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  56. package/dist/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  57. package/dist/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  58. package/dist/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  59. package/dist/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  60. package/dist/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  61. package/dist/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  62. package/dist/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  63. package/dist/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  64. package/dist/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  65. package/dist/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  66. package/dist/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  67. package/dist/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  68. package/dist/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  69. package/dist/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  70. package/dist/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  71. package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  72. package/dist/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  73. package/dist/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  74. package/dist/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  75. package/dist/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  76. package/dist/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  77. package/dist/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  78. package/dist/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  79. package/dist/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  80. package/dist/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  81. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  82. package/dist/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  83. package/dist/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  84. package/dist/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  85. package/dist/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  86. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  87. package/dist/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  88. package/dist/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  89. package/dist/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  90. package/dist/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  91. package/dist/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  92. package/dist/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  93. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  94. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  95. package/dist/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  96. package/dist/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  97. package/dist/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  98. package/dist/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  99. package/dist/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  100. package/dist/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  101. package/dist/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  102. package/dist/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  103. package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  104. package/dist/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  105. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  106. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  107. package/dist/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  108. package/dist/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  109. package/dist/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  110. package/dist/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  111. package/dist/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  112. package/dist/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  113. package/dist/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  114. package/dist/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  115. package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  116. package/dist/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  117. package/dist/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  118. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  119. package/dist/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  120. package/dist/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  121. package/dist/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  122. package/dist/templates/web/ui-only/template/eslint.config.mjs +14 -0
  123. package/dist/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  124. package/dist/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  125. package/dist/templates/web/ui-only/template/src/app/page.tsx +69 -91
  126. package/dist/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  127. package/dist/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  128. package/dist/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  129. package/dist/templates/web/ui-package-test/template/package.json +19 -23
  130. package/dist/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  131. package/dist/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  132. package/dist/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  133. package/dist/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  134. package/package.json +1 -1
  135. package/src/templates/shared/admin/web/src/components/admin-nav.tsx +3 -3
  136. package/src/templates/shared/auth/supabase/web/src/lib/auth-session.ts +36 -16
  137. package/src/templates/shared/auth/supabase/web/src/middleware.ts +6 -0
  138. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +5 -5
  139. package/src/templates/shared/design/web/src/components/ui/button.tsx +56 -0
  140. package/src/templates/shared/email/web/src/lib/email/client.ts +1 -1
  141. package/src/templates/shared/error-pages/web/src/app/error.tsx +13 -11
  142. package/src/templates/shared/error-pages/web/src/app/global-error.tsx +2 -0
  143. package/src/templates/shared/error-pages/web/src/app/not-found.tsx +6 -6
  144. package/src/templates/shared/legal/web/src/app/(legal)/privacy/page.tsx +4 -4
  145. package/src/templates/shared/legal/web/src/app/(legal)/terms/page.tsx +4 -4
  146. package/src/templates/shared/loading/web/components/skeleton.tsx +4 -4
  147. package/src/templates/shared/mock/web/.env.local +55 -0
  148. package/src/templates/shared/mock/web/src/components/mock-auth-provider.tsx +72 -0
  149. package/src/templates/shared/mock/web/src/components/mock-banner.tsx +29 -0
  150. package/src/templates/shared/mock/web/src/lib/mock.ts +147 -0
  151. package/src/templates/shared/payments/web/src/app/api/webhooks/stripe/route.ts +10 -4
  152. package/src/templates/shared/redis/web/src/lib/redis.ts +1 -1
  153. package/src/templates/web/base/template/eslint.config.mjs +14 -0
  154. package/src/templates/web/base/template/src/app/auth/callback/route.ts +1 -1
  155. package/src/templates/web/base/template/src/app/checkout/page.tsx +76 -103
  156. package/src/templates/web/base/template/src/app/dashboard/page.tsx +145 -329
  157. package/src/templates/web/base/template/src/app/layout.tsx +40 -38
  158. package/src/templates/web/base/template/src/app/login/page.tsx +116 -66
  159. package/src/templates/web/base/template/src/app/page.tsx +97 -193
  160. package/src/templates/web/base/template/src/app/settings/page.tsx +154 -0
  161. package/src/templates/web/base/template/src/app/signup/page.tsx +117 -66
  162. package/src/templates/web/base/template/src/components/providers/app-providers.tsx +8 -3
  163. package/src/templates/web/base/template/src/components/shared/header.tsx +229 -63
  164. package/src/templates/web/ui-auth/template/eslint.config.mjs +14 -0
  165. package/src/templates/web/ui-auth/template/src/app/checkout/page.tsx +3 -3
  166. package/src/templates/web/ui-auth/template/src/app/dev-setup/page.tsx +81 -91
  167. package/src/templates/web/ui-auth/template/src/app/layout.tsx +38 -36
  168. package/src/templates/web/ui-auth/template/src/app/login/page.tsx +22 -45
  169. package/src/templates/web/ui-auth/template/src/app/page.tsx +106 -306
  170. package/src/templates/web/ui-auth/template/src/app/setup/page.tsx +387 -402
  171. package/src/templates/web/ui-auth/template/src/app/signup/page.tsx +24 -47
  172. package/src/templates/web/ui-auth/template/src/components/providers/app-providers.tsx +8 -3
  173. package/src/templates/web/ui-auth/template/src/components/shared/header.tsx +229 -94
  174. package/src/templates/web/ui-auth-ai/template/src/app/layout.tsx +38 -45
  175. package/src/templates/web/ui-auth-ai/template/src/app/login/page.tsx +86 -0
  176. package/src/templates/web/ui-auth-ai/template/src/app/page.tsx +107 -193
  177. package/src/templates/web/ui-auth-ai/template/src/app/signup/page.tsx +105 -0
  178. package/src/templates/web/ui-auth-ai/template/src/components/ai/audio-generator.tsx +144 -140
  179. package/src/templates/web/ui-auth-ai/template/src/components/ai/video-generator.tsx +156 -157
  180. package/src/templates/web/ui-auth-ai/template/src/components/auth/login-form.tsx +7 -3
  181. package/src/templates/web/ui-auth-ai/template/src/components/providers/app-providers.tsx +25 -0
  182. package/src/templates/web/ui-auth-ai/template/src/components/shared/footer.tsx +36 -0
  183. package/src/templates/web/ui-auth-ai/template/src/components/shared/header.tsx +228 -0
  184. package/src/templates/web/ui-auth-ai/template/src/components/ui/button.tsx +5 -5
  185. package/src/templates/web/ui-auth-ai/template/src/components/ui/input.tsx +1 -1
  186. package/src/templates/web/ui-auth-ai/template/src/components/ui/select.tsx +1 -1
  187. package/src/templates/web/ui-auth-ai/template/src/components/ui/textarea.tsx +1 -1
  188. package/src/templates/web/ui-auth-ai/template/src/components/ui/theme-toggle.tsx +34 -0
  189. package/src/templates/web/ui-auth-ai/template/src/lib/supabase.ts +6 -4
  190. package/src/templates/web/ui-auth-ai/template/src/providers/auth-provider.tsx +7 -5
  191. package/src/templates/web/ui-auth-payments/template/src/app/billing/page.tsx +63 -192
  192. package/src/templates/web/ui-auth-payments/template/src/app/checkout/page.tsx +104 -296
  193. package/src/templates/web/ui-auth-payments/template/src/app/dashboard/page.tsx +27 -27
  194. package/src/templates/web/ui-auth-payments/template/src/app/dev-setup/page.tsx +70 -81
  195. package/src/templates/web/ui-auth-payments/template/src/app/layout.tsx +38 -36
  196. package/src/templates/web/ui-auth-payments/template/src/app/login/loading.tsx +9 -9
  197. package/src/templates/web/ui-auth-payments/template/src/app/login/page.tsx +4 -104
  198. package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +69 -337
  199. package/src/templates/web/ui-auth-payments/template/src/app/setup/page.tsx +55 -68
  200. package/src/templates/web/ui-auth-payments/template/src/app/signup/loading.tsx +13 -13
  201. package/src/templates/web/ui-auth-payments/template/src/app/signup/page.tsx +4 -123
  202. package/src/templates/web/ui-auth-payments/template/src/components/client/auth-status.tsx +37 -52
  203. package/src/templates/web/ui-auth-payments/template/src/components/client/login-form.tsx +49 -103
  204. package/src/templates/web/ui-auth-payments/template/src/components/client/newsletter-signup.tsx +4 -4
  205. package/src/templates/web/ui-auth-payments/template/src/components/client/signup-form.tsx +60 -140
  206. package/src/templates/web/ui-auth-payments/template/src/components/providers/app-providers.tsx +25 -28
  207. package/src/templates/web/ui-auth-payments/template/src/components/shared/header.tsx +229 -230
  208. package/src/templates/web/ui-auth-payments/template/src/lib/actions/auth.ts +245 -245
  209. package/src/templates/web/ui-auth-payments/template/src/lib/actions/index.ts +339 -339
  210. package/src/templates/web/ui-auth-payments-ai/template/src/app/ai/page.tsx +305 -309
  211. package/src/templates/web/ui-auth-payments-ai/template/src/app/billing/page.tsx +62 -312
  212. package/src/templates/web/ui-auth-payments-ai/template/src/app/checkout/page.tsx +109 -125
  213. package/src/templates/web/ui-auth-payments-ai/template/src/app/dashboard/page.tsx +27 -27
  214. package/src/templates/web/ui-auth-payments-ai/template/src/app/dev-setup/page.tsx +68 -83
  215. package/src/templates/web/ui-auth-payments-ai/template/src/app/layout.tsx +40 -38
  216. package/src/templates/web/ui-auth-payments-ai/template/src/app/onboarding/page.tsx +20 -20
  217. package/src/templates/web/ui-auth-payments-ai/template/src/app/page.tsx +140 -394
  218. package/src/templates/web/ui-auth-payments-ai/template/src/app/settings/page.tsx +28 -27
  219. package/src/templates/web/ui-auth-payments-ai/template/src/app/setup/page.tsx +51 -66
  220. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/auth-status.tsx +37 -52
  221. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/login-form.tsx +50 -79
  222. package/src/templates/web/ui-auth-payments-ai/template/src/components/client/signup-form.tsx +58 -111
  223. package/src/templates/web/ui-auth-payments-ai/template/src/components/providers/app-providers.tsx +8 -3
  224. package/src/templates/web/ui-auth-payments-ai/template/src/components/shared/header.tsx +229 -252
  225. package/src/templates/web/ui-auth-payments-ai/template/src/lib/actions/auth.ts +245 -245
  226. package/src/templates/web/ui-auth-payments-audio/template/src/app/billing/page.tsx +63 -192
  227. package/src/templates/web/ui-auth-payments-audio/template/src/app/checkout/page.tsx +109 -125
  228. package/src/templates/web/ui-auth-payments-audio/template/src/app/dashboard/page.tsx +27 -27
  229. package/src/templates/web/ui-auth-payments-audio/template/src/app/layout.tsx +40 -38
  230. package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +122 -385
  231. package/src/templates/web/ui-auth-payments-audio/template/src/app/setup/page.tsx +340 -344
  232. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/auth-status.tsx +37 -52
  233. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/login-form.tsx +49 -103
  234. package/src/templates/web/ui-auth-payments-audio/template/src/components/client/signup-form.tsx +60 -140
  235. package/src/templates/web/ui-auth-payments-audio/template/src/components/providers/app-providers.tsx +8 -3
  236. package/src/templates/web/ui-auth-payments-audio/template/src/components/shared/header.tsx +229 -252
  237. package/src/templates/web/ui-auth-payments-audio/template/src/lib/actions/auth.ts +3 -3
  238. package/src/templates/web/ui-auth-payments-video/template/src/app/billing/page.tsx +63 -192
  239. package/src/templates/web/ui-auth-payments-video/template/src/app/checkout/page.tsx +109 -125
  240. package/src/templates/web/ui-auth-payments-video/template/src/app/layout.tsx +38 -36
  241. package/src/templates/web/ui-auth-payments-video/template/src/app/login/page.tsx +9 -109
  242. package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +132 -392
  243. package/src/templates/web/ui-auth-payments-video/template/src/app/setup/page.tsx +346 -350
  244. package/src/templates/web/ui-auth-payments-video/template/src/app/signup/page.tsx +9 -128
  245. package/src/templates/web/ui-auth-payments-video/template/src/components/client/login-form.tsx +90 -0
  246. package/src/templates/web/ui-auth-payments-video/template/src/components/client/signup-form.tsx +105 -0
  247. package/src/templates/web/ui-auth-payments-video/template/src/components/providers/app-providers.tsx +8 -3
  248. package/src/templates/web/ui-auth-payments-video/template/src/components/shared/header.tsx +229 -246
  249. package/src/templates/web/ui-only/template/eslint.config.mjs +14 -0
  250. package/src/templates/web/ui-only/template/src/app/checkout/page.tsx +2 -2
  251. package/src/templates/web/ui-only/template/src/app/login/page.tsx +69 -63
  252. package/src/templates/web/ui-only/template/src/app/page.tsx +69 -91
  253. package/src/templates/web/ui-only/template/src/app/signup/page.tsx +94 -79
  254. package/src/templates/web/ui-only/template/src/components/providers/app-providers.tsx +1 -6
  255. package/src/templates/web/ui-only/template/src/components/shared/header.tsx +90 -53
  256. package/src/templates/web/ui-package-test/template/package.json +19 -23
  257. package/src/templates/web/ui-package-test/template/postcss.config.mjs +8 -0
  258. package/src/templates/web/ui-package-test/template/src/app/globals.css +88 -0
  259. package/src/templates/web/ui-package-test/template/src/app/layout.tsx +27 -0
  260. package/src/templates/web/ui-package-test/template/src/app/page.tsx +46 -106
  261. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  262. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  263. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  264. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  265. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  266. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  267. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  268. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  269. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  270. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  271. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  272. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  273. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  274. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  275. package/dist/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  276. package/dist/templates/web/base/template/.eslintrc.js +0 -8
  277. package/dist/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  278. package/dist/templates/web/base/template/src/test/setup.ts +0 -74
  279. package/dist/templates/web/base/template/vitest.config.ts +0 -17
  280. package/dist/templates/web/ui-auth/template/.eslintrc.js +0 -8
  281. package/dist/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  282. package/dist/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  283. package/dist/templates/web/ui-auth/template/vitest.config.ts +0 -17
  284. package/dist/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  285. package/dist/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  286. package/dist/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  287. package/dist/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  288. package/dist/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  289. package/dist/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  290. package/dist/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  291. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  292. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  293. package/dist/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  294. package/dist/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  295. package/dist/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  296. package/dist/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  297. package/dist/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  298. package/dist/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  299. package/dist/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  300. package/dist/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  301. package/dist/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  302. package/dist/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  303. package/dist/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  304. package/dist/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  305. package/dist/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  306. package/dist/templates/web/ui-only/template/.eslintrc.js +0 -8
  307. package/dist/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  308. package/dist/templates/web/ui-only/template/src/test/setup.ts +0 -74
  309. package/dist/templates/web/ui-only/template/vitest.config.ts +0 -17
  310. package/src/templates/mobile/ui-auth-payments-ai-rag/template/README.md +0 -655
  311. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/(tabs)/ai.tsx +0 -683
  312. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app/_layout.tsx +0 -124
  313. package/src/templates/mobile/ui-auth-payments-ai-rag/template/app.json +0 -74
  314. package/src/templates/mobile/ui-auth-payments-ai-rag/template/babel.config.js +0 -25
  315. package/src/templates/mobile/ui-auth-payments-ai-rag/template/docs/MOBILE-SETUP.md +0 -787
  316. package/src/templates/mobile/ui-auth-payments-ai-rag/template/eas.json +0 -25
  317. package/src/templates/mobile/ui-auth-payments-ai-rag/template/expo-env.d.ts +0 -3
  318. package/src/templates/mobile/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -346
  319. package/src/templates/mobile/ui-auth-payments-ai-rag/template/jest-setup.ts +0 -37
  320. package/src/templates/mobile/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -180
  321. package/src/templates/mobile/ui-auth-payments-ai-rag/template/metro.config.js +0 -11
  322. package/src/templates/mobile/ui-auth-payments-ai-rag/template/package.json +0 -122
  323. package/src/templates/mobile/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -599
  324. package/src/templates/mobile/ui-auth-payments-ai-rag/template/tsconfig.json +0 -32
  325. package/src/templates/web/base/template/.eslintrc.js +0 -8
  326. package/src/templates/web/base/template/src/components/__tests__/example.test.tsx +0 -49
  327. package/src/templates/web/base/template/src/test/setup.ts +0 -74
  328. package/src/templates/web/base/template/vitest.config.ts +0 -17
  329. package/src/templates/web/ui-auth/template/.eslintrc.js +0 -8
  330. package/src/templates/web/ui-auth/template/src/components/__tests__/example.test.tsx +0 -49
  331. package/src/templates/web/ui-auth/template/src/test/setup.ts +0 -74
  332. package/src/templates/web/ui-auth/template/vitest.config.ts +0 -17
  333. package/src/templates/web/ui-auth-payments/template/src/components/__tests__/example.test.tsx +0 -49
  334. package/src/templates/web/ui-auth-payments/template/src/test/setup.ts +0 -74
  335. package/src/templates/web/ui-auth-payments/template/vitest.config.ts +0 -17
  336. package/src/templates/web/ui-auth-payments-ai/template/src/components/__tests__/example.test.tsx +0 -49
  337. package/src/templates/web/ui-auth-payments-ai/template/src/test/setup.ts +0 -74
  338. package/src/templates/web/ui-auth-payments-ai/template/vitest.config.ts +0 -17
  339. package/src/templates/web/ui-auth-payments-ai-rag/template/README.md +0 -434
  340. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/KnowledgeManager.tsx +0 -642
  341. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGAnalytics.tsx +0 -466
  342. package/src/templates/web/ui-auth-payments-ai-rag/template/components/rag/RAGChatInterface.tsx +0 -393
  343. package/src/templates/web/ui-auth-payments-ai-rag/template/docs/GETTING-STARTED.md +0 -457
  344. package/src/templates/web/ui-auth-payments-ai-rag/template/hooks/useRAGSystem.ts +0 -478
  345. package/src/templates/web/ui-auth-payments-ai-rag/template/lib/rag/config.ts +0 -250
  346. package/src/templates/web/ui-auth-payments-ai-rag/template/package.json +0 -73
  347. package/src/templates/web/ui-auth-payments-ai-rag/template/scripts/setup-rag.js +0 -622
  348. package/src/templates/web/ui-auth-payments-ai-rag/template/src/app/ai/page.tsx +0 -396
  349. package/src/templates/web/ui-auth-payments-audio/template/src/components/__tests__/example.test.tsx +0 -49
  350. package/src/templates/web/ui-auth-payments-audio/template/src/test/setup.ts +0 -74
  351. package/src/templates/web/ui-auth-payments-audio/template/vitest.config.ts +0 -17
  352. package/src/templates/web/ui-auth-payments-video/template/src/components/__tests__/example.test.tsx +0 -49
  353. package/src/templates/web/ui-auth-payments-video/template/src/test/setup.ts +0 -74
  354. package/src/templates/web/ui-auth-payments-video/template/vitest.config.ts +0 -17
  355. package/src/templates/web/ui-only/template/.eslintrc.js +0 -8
  356. package/src/templates/web/ui-only/template/src/components/__tests__/example.test.tsx +0 -49
  357. package/src/templates/web/ui-only/template/src/test/setup.ts +0 -74
  358. package/src/templates/web/ui-only/template/vitest.config.ts +0 -17
@@ -1,396 +0,0 @@
1
- 'use client'
2
-
3
- import { useState } from 'react'
4
- import {
5
- Card,
6
- PageTransition,
7
- MobileContainer,
8
- ResponsiveGrid,
9
- useAnimationTokens,
10
- useGlassmorphism
11
- } from '@digilogiclabs/saas-factory-ui'
12
- import {
13
- ArrowLeft,
14
- MessageSquare,
15
- Database,
16
- BookOpen,
17
- BarChart3,
18
- Settings,
19
- Search,
20
- Plus,
21
- Zap,
22
- Brain,
23
- Activity,
24
- FileText,
25
- Lightbulb,
26
- Sparkles,
27
- Clock,
28
- TrendingUp,
29
- Users,
30
- Download,
31
- Share2,
32
- RefreshCw,
33
- AlertCircle,
34
- CheckCircle,
35
- Loader2
36
- } from 'lucide-react'
37
- import { useAuth } from '@digilogiclabs/app-sdk'
38
- import Link from 'next/link'
39
- import { useRAGSystem } from '../../../hooks/useRAGSystem'
40
- import { RAGChatInterface } from '../../../components/rag/RAGChatInterface'
41
- import { KnowledgeManager } from '../../../components/rag/KnowledgeManager'
42
- import { RAGAnalytics } from '../../../components/rag/RAGAnalytics'
43
- import type { GenericRAGDocumentSchema } from '@digilogiclabs/saas-factory-ai-types'
44
- import { toast } from 'sonner'
45
-
46
- export default function AIPage() {
47
- const { user, loading } = useAuth()
48
- const [activeTab, setActiveTab] = useState<'dashboard' | 'chat' | 'knowledge' | 'analytics' | 'settings'>('dashboard')
49
-
50
- const animations = useAnimationTokens()
51
- const glass = useGlassmorphism()
52
-
53
- // Initialize RAG system
54
- const ragSystem = useRAGSystem<GenericRAGDocumentSchema>({
55
- domain: 'generic', // Can be configured: 'plants', 'ecommerce', 'education'
56
- enableStreaming: true,
57
- enableCache: true,
58
- autoInitialize: true
59
- })
60
-
61
- const handleSync = async () => {
62
- try {
63
- await ragSystem.syncKnowledgeBase()
64
- } catch (error) {
65
- console.error('Sync failed:', error)
66
- }
67
- }
68
-
69
- const getHealthColor = (health: string) => {
70
- switch (health) {
71
- case 'healthy': return 'text-green-500'
72
- case 'degraded': return 'text-yellow-500'
73
- case 'down': return 'text-red-500'
74
- default: return 'text-gray-500'
75
- }
76
- }
77
-
78
- const getHealthIcon = (health: string) => {
79
- switch (health) {
80
- case 'healthy': return CheckCircle
81
- case 'degraded': return AlertCircle
82
- case 'down': return AlertCircle
83
- default: return Loader2
84
- }
85
- }
86
-
87
- if (loading) {
88
- return (
89
- <div className="min-h-screen flex items-center justify-center">
90
- <div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500"></div>
91
- </div>
92
- )
93
- }
94
-
95
- if (!user) {
96
- return (
97
- <div className="min-h-screen flex items-center justify-center">
98
- <div className="text-center">
99
- <h2 className="text-2xl font-bold mb-4">Access Denied</h2>
100
- <p className="mb-4">You need to sign in to access the AI dashboard.</p>
101
- <Link href="/login" className="text-blue-500 hover:underline">
102
- Sign In
103
- </Link>
104
- </div>
105
- </div>
106
- )
107
- }
108
-
109
- const renderDashboard = () => {
110
- const HealthIcon = getHealthIcon(ragSystem.health)
111
-
112
- return (
113
- <div className="space-y-6">
114
- {/* System Status */}
115
- <Card className={`${glass.card} ${glass.border} p-6`}>
116
- <div className="flex items-center justify-between mb-4">
117
- <h3 className="text-xl font-semibold">System Status</h3>
118
- <button
119
- onClick={handleSync}
120
- disabled={ragSystem.isLoading}
121
- className={`p-2 rounded-xl ${glass.card} ${glass.border} ${animations.hover.scale} disabled:opacity-50`}
122
- >
123
- {ragSystem.isLoading ? (
124
- <Loader2 className="w-4 h-4 animate-spin" />
125
- ) : (
126
- <RefreshCw className="w-4 h-4" />
127
- )}
128
- </button>
129
- </div>
130
-
131
- <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
132
- <div className="flex items-center gap-3">
133
- <HealthIcon className={`w-5 h-5 ${getHealthColor(ragSystem.health)}`} />
134
- <div>
135
- <p className="font-medium">System Health</p>
136
- <p className="text-sm text-gray-600 dark:text-gray-300 capitalize">
137
- {ragSystem.health}
138
- </p>
139
- </div>
140
- </div>
141
-
142
- <div className="flex items-center gap-3">
143
- <Activity className="w-5 h-5 text-blue-500" />
144
- <div>
145
- <p className="font-medium">Status</p>
146
- <p className="text-sm text-gray-600 dark:text-gray-300">
147
- {ragSystem.isReady ? 'Ready' : 'Initializing...'}
148
- </p>
149
- </div>
150
- </div>
151
-
152
- <div className="flex items-center gap-3">
153
- <Clock className="w-5 h-5 text-purple-500" />
154
- <div>
155
- <p className="font-medium">Last Sync</p>
156
- <p className="text-sm text-gray-600 dark:text-gray-300">
157
- {ragSystem.lastSyncAt
158
- ? ragSystem.lastSyncAt.toLocaleString()
159
- : 'Never'
160
- }
161
- </p>
162
- </div>
163
- </div>
164
- </div>
165
- </Card>
166
-
167
- {/* Statistics Overview */}
168
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
169
- <Card className={`${glass.card} ${glass.border} p-6 text-center ${animations.hover.lift}`}>
170
- <div className="text-3xl font-bold text-blue-500 mb-2">
171
- {ragSystem.totalQueries}
172
- </div>
173
- <div className="text-sm text-gray-600 dark:text-gray-300">Total Queries</div>
174
- </Card>
175
-
176
- <Card className={`${glass.card} ${glass.border} p-6 text-center ${animations.hover.lift}`}>
177
- <div className="text-3xl font-bold text-green-500 mb-2">
178
- {ragSystem.totalDocuments}
179
- </div>
180
- <div className="text-sm text-gray-600 dark:text-gray-300">Knowledge Docs</div>
181
- </Card>
182
-
183
- <Card className={`${glass.card} ${glass.border} p-6 text-center ${animations.hover.lift}`}>
184
- <div className="text-3xl font-bold text-purple-500 mb-2">
185
- {ragSystem.cacheSize}
186
- </div>
187
- <div className="text-sm text-gray-600 dark:text-gray-300">Cached Responses</div>
188
- </Card>
189
-
190
- <Card className={`${glass.card} ${glass.border} p-6 text-center ${animations.hover.lift}`}>
191
- <div className="text-3xl font-bold text-orange-500 mb-2">
192
- {ragSystem.queryHistory.length}
193
- </div>
194
- <div className="text-sm text-gray-600 dark:text-gray-300">Recent Queries</div>
195
- </Card>
196
- </div>
197
-
198
- {/* Quick Actions */}
199
- <Card className={`${glass.card} ${glass.border} p-6`}>
200
- <h3 className="text-xl font-semibold mb-4">Quick Actions</h3>
201
-
202
- <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
203
- <button
204
- onClick={() => setActiveTab('chat')}
205
- disabled={!ragSystem.canQuery}
206
- className={`p-4 rounded-xl ${glass.card} ${glass.border} ${animations.hover.lift} ${animations.transition.smooth} disabled:opacity-50 text-left`}
207
- >
208
- <MessageSquare className="w-8 h-8 text-blue-500 mb-3" />
209
- <h4 className="font-semibold mb-1">AI Chat</h4>
210
- <p className="text-sm text-gray-600 dark:text-gray-300">
211
- Chat with your knowledge base
212
- </p>
213
- </button>
214
-
215
- <button
216
- onClick={() => setActiveTab('knowledge')}
217
- className={`p-4 rounded-xl ${glass.card} ${glass.border} ${animations.hover.lift} ${animations.transition.smooth} text-left`}
218
- >
219
- <Database className="w-8 h-8 text-green-500 mb-3" />
220
- <h4 className="font-semibold mb-1">Knowledge Base</h4>
221
- <p className="text-sm text-gray-600 dark:text-gray-300">
222
- Manage your documents
223
- </p>
224
- </button>
225
-
226
- <button
227
- onClick={() => setActiveTab('analytics')}
228
- className={`p-4 rounded-xl ${glass.card} ${glass.border} ${animations.hover.lift} ${animations.transition.smooth} text-left`}
229
- >
230
- <BarChart3 className="w-8 h-8 text-purple-500 mb-3" />
231
- <h4 className="font-semibold mb-1">Analytics</h4>
232
- <p className="text-sm text-gray-600 dark:text-gray-300">
233
- View usage insights
234
- </p>
235
- </button>
236
-
237
- <button
238
- onClick={() => ragSystem.clearCache()}
239
- className={`p-4 rounded-xl ${glass.card} ${glass.border} ${animations.hover.lift} ${animations.transition.smooth} text-left`}
240
- >
241
- <RefreshCw className="w-8 h-8 text-orange-500 mb-3" />
242
- <h4 className="font-semibold mb-1">Clear Cache</h4>
243
- <p className="text-sm text-gray-600 dark:text-gray-300">
244
- Reset cached responses
245
- </p>
246
- </button>
247
- </div>
248
- </Card>
249
-
250
- {/* Recent Query History */}
251
- {ragSystem.queryHistory.length > 0 && (
252
- <Card className={`${glass.card} ${glass.border} p-6`}>
253
- <h3 className="text-xl font-semibold mb-4">Recent Queries</h3>
254
-
255
- <div className="space-y-3">
256
- {ragSystem.queryHistory.slice(0, 5).map((query, index) => (
257
- <div
258
- key={index}
259
- className={`p-3 rounded-lg bg-gray-50 dark:bg-gray-800/50 ${animations.hover.lift}`}
260
- >
261
- <div className="flex items-start justify-between">
262
- <div className="flex-1">
263
- <p className="font-medium line-clamp-1">{query.query}</p>
264
- <div className="flex items-center gap-2 mt-1 text-sm text-gray-600 dark:text-gray-300">
265
- <Clock className="w-3 h-3" />
266
- {new Date(query.timestamp).toLocaleTimeString()}
267
- {query.category && (
268
- <>
269
- <span>•</span>
270
- <span className="capitalize">{query.category}</span>
271
- </>
272
- )}
273
- </div>
274
- </div>
275
- <button
276
- onClick={() => {
277
- setActiveTab('chat')
278
- // Would trigger a new query with this text
279
- }}
280
- className={`p-1 rounded ${animations.hover.scale}`}
281
- >
282
- <RefreshCw className="w-4 h-4" />
283
- </button>
284
- </div>
285
- </div>
286
- ))}
287
- </div>
288
- </Card>
289
- )}
290
- </div>
291
- )
292
- }
293
-
294
- const renderChat = () => (
295
- <Card className={`${glass.card} ${glass.border} p-6 h-[calc(100vh-200px)]`}>
296
- <RAGChatInterface
297
- ragSystem={ragSystem}
298
- enableStreaming={true}
299
- showSources={true}
300
- showConfidence={true}
301
- onError={(error) => toast.error(error.message)}
302
- />
303
- </Card>
304
- )
305
-
306
- const renderKnowledge = () => (
307
- <Card className={`${glass.card} ${glass.border} p-6`}>
308
- <KnowledgeManager
309
- ragSystem={ragSystem}
310
- enableBulkOperations={true}
311
- enableExport={true}
312
- onSuccess={(message) => toast.success(message)}
313
- onError={(error) => toast.error(error)}
314
- />
315
- </Card>
316
- )
317
-
318
- const renderAnalytics = () => (
319
- <Card className={`${glass.card} ${glass.border} p-6`}>
320
- <RAGAnalytics
321
- ragSystem={ragSystem}
322
- timeRange="7d"
323
- showDetailedMetrics={true}
324
- />
325
- </Card>
326
- )
327
-
328
- const tabs = [
329
- { id: 'dashboard', label: 'Dashboard', icon: Brain },
330
- { id: 'chat', label: 'AI Chat', icon: MessageSquare },
331
- { id: 'knowledge', label: 'Knowledge', icon: BookOpen },
332
- { id: 'analytics', label: 'Analytics', icon: BarChart3 },
333
- ]
334
-
335
- return (
336
- <PageTransition type="slide" direction="up" duration={300}>
337
- <main className={`min-h-screen ${glass.background.primary} relative overflow-hidden`}>
338
- <div className={`absolute inset-0 ${glass.background.accent} opacity-30`} />
339
- <div className="relative z-10">
340
- <MobileContainer className="py-8">
341
- {/* Header */}
342
- <div className="flex items-center justify-between mb-8">
343
- <div className="flex items-center gap-4">
344
- <Link href="/" className={`${glass.card} ${glass.border} p-2 rounded-xl ${animations.hover.scale}`}>
345
- <ArrowLeft className="w-5 h-5" />
346
- </Link>
347
- <div>
348
- <h1 className="text-2xl font-bold">AI Knowledge Assistant</h1>
349
- <p className="text-gray-600 dark:text-gray-300">
350
- Powered by RAG v4.0.0
351
- </p>
352
- </div>
353
- </div>
354
-
355
- {ragSystem.hasError && (
356
- <div className="flex items-center gap-2 text-red-500">
357
- <AlertCircle className="w-5 h-5" />
358
- <span className="text-sm">System Error</span>
359
- </div>
360
- )}
361
- </div>
362
-
363
- {/* Tab Navigation */}
364
- <div className={`${glass.card} ${glass.border} rounded-2xl p-1 mb-8 inline-flex`}>
365
- {tabs.map((tab) => {
366
- const Icon = tab.icon
367
- return (
368
- <button
369
- key={tab.id}
370
- onClick={() => setActiveTab(tab.id as any)}
371
- className={`flex items-center gap-2 px-4 py-2 rounded-xl text-sm font-medium transition-all duration-200 ${
372
- activeTab === tab.id
373
- ? 'bg-blue-500 text-white shadow-lg'
374
- : 'text-gray-600 dark:text-gray-300 hover:bg-white/10'
375
- }`}
376
- >
377
- <Icon className="w-4 h-4" />
378
- {tab.label}
379
- </button>
380
- )
381
- })}
382
- </div>
383
-
384
- {/* Tab Content */}
385
- <div className="space-y-6">
386
- {activeTab === 'dashboard' && renderDashboard()}
387
- {activeTab === 'chat' && renderChat()}
388
- {activeTab === 'knowledge' && renderKnowledge()}
389
- {activeTab === 'analytics' && renderAnalytics()}
390
- </div>
391
- </MobileContainer>
392
- </div>
393
- </main>
394
- </PageTransition>
395
- )
396
- }
@@ -1,49 +0,0 @@
1
- /**
2
- * Example test file demonstrating testing patterns for SaaS Factory components
3
- *
4
- * This is optional and serves as a reference for testing your components.
5
- * You can delete this file if you don't need example tests.
6
- */
7
-
8
- import { render, screen } from '@testing-library/react'
9
- import { Button } from '@digilogiclabs/saas-factory-ui'
10
-
11
- // Example: Testing UI components
12
- describe('UI Components', () => {
13
- it('renders button with correct text', () => {
14
- render(<Button>Click me</Button>)
15
- expect(screen.getByRole('button', { name: /click me/i })).toBeInTheDocument()
16
- })
17
-
18
- it('button can be disabled', () => {
19
- render(<Button disabled>Disabled button</Button>)
20
- expect(screen.getByRole('button')).toBeDisabled()
21
- })
22
- })
23
-
24
- // Example: Testing custom components
25
- function MockComponent({ title }: { title: string }) {
26
- return <h1>{title}</h1>
27
- }
28
-
29
- describe('Custom Components', () => {
30
- it('renders with correct title', () => {
31
- render(<MockComponent title="Test Title" />)
32
- expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Test Title')
33
- })
34
- })
35
-
36
- // Example: Testing utilities
37
- function formatCurrency(amount: number): string {
38
- return new Intl.NumberFormat('en-US', {
39
- style: 'currency',
40
- currency: 'USD',
41
- }).format(amount)
42
- }
43
-
44
- describe('Utilities', () => {
45
- it('formats currency correctly', () => {
46
- expect(formatCurrency(1000)).toBe('$1,000.00')
47
- expect(formatCurrency(0)).toBe('$0.00')
48
- })
49
- })
@@ -1,74 +0,0 @@
1
- import '@testing-library/jest-dom'
2
- import { vi, beforeEach, afterAll } from 'vitest'
3
-
4
- // Mock Next.js router
5
- vi.mock('next/navigation', () => ({
6
- useRouter: () => ({
7
- push: vi.fn(),
8
- back: vi.fn(),
9
- forward: vi.fn(),
10
- refresh: vi.fn(),
11
- replace: vi.fn(),
12
- prefetch: vi.fn(),
13
- }),
14
- useSearchParams: () => new URLSearchParams(),
15
- usePathname: () => '/',
16
- }))
17
-
18
- // Mock App SDK (optional - only if testing auth/payment components)
19
- vi.mock('@digilogiclabs/app-sdk', () => ({
20
- useAuth: () => ({
21
- user: null,
22
- loading: false,
23
- error: null,
24
- signIn: vi.fn(),
25
- signUp: vi.fn(),
26
- signOut: vi.fn(),
27
- signInWithOAuth: vi.fn(),
28
- }),
29
- usePayments: () => ({
30
- createCheckoutSession: vi.fn(),
31
- createPortalSession: vi.fn(),
32
- subscription: null,
33
- loading: false,
34
- }),
35
- DLLProvider: ({ children }: { children: React.ReactNode }) => children,
36
- }))
37
-
38
- // Global test utilities
39
- global.ResizeObserver = vi.fn().mockImplementation(() => ({
40
- observe: vi.fn(),
41
- unobserve: vi.fn(),
42
- disconnect: vi.fn(),
43
- }))
44
-
45
- // Suppress console warnings in tests unless needed
46
- const originalConsoleError = console.error
47
- const originalConsoleWarn = console.warn
48
-
49
- beforeEach(() => {
50
- console.error = (...args: any[]) => {
51
- if (
52
- typeof args[0] === 'string' &&
53
- args[0].includes('Warning: ReactDOM.render is no longer supported')
54
- ) {
55
- return
56
- }
57
- originalConsoleError.call(console, ...args)
58
- }
59
-
60
- console.warn = (...args: any[]) => {
61
- if (
62
- typeof args[0] === 'string' &&
63
- args[0].includes('useLayoutEffect does nothing on the server')
64
- ) {
65
- return
66
- }
67
- originalConsoleWarn.call(console, ...args)
68
- }
69
- })
70
-
71
- afterAll(() => {
72
- console.error = originalConsoleError
73
- console.warn = originalConsoleWarn
74
- })
@@ -1,17 +0,0 @@
1
- import { defineConfig } from 'vitest/config'
2
- import react from '@vitejs/plugin-react'
3
- import path from 'path'
4
-
5
- export default defineConfig({
6
- plugins: [react()],
7
- test: {
8
- environment: 'jsdom',
9
- setupFiles: ['./src/test/setup.ts'],
10
- globals: true,
11
- },
12
- resolve: {
13
- alias: {
14
- '@': path.resolve(__dirname, './src'),
15
- },
16
- },
17
- })
@@ -1,49 +0,0 @@
1
- /**
2
- * Example test file demonstrating testing patterns for SaaS Factory components
3
- *
4
- * This is optional and serves as a reference for testing your components.
5
- * You can delete this file if you don't need example tests.
6
- */
7
-
8
- import { render, screen } from '@testing-library/react'
9
- import { Button } from '@digilogiclabs/saas-factory-ui'
10
-
11
- // Example: Testing UI components
12
- describe('UI Components', () => {
13
- it('renders button with correct text', () => {
14
- render(<Button>Click me</Button>)
15
- expect(screen.getByRole('button', { name: /click me/i })).toBeInTheDocument()
16
- })
17
-
18
- it('button can be disabled', () => {
19
- render(<Button disabled>Disabled button</Button>)
20
- expect(screen.getByRole('button')).toBeDisabled()
21
- })
22
- })
23
-
24
- // Example: Testing custom components
25
- function MockComponent({ title }: { title: string }) {
26
- return <h1>{title}</h1>
27
- }
28
-
29
- describe('Custom Components', () => {
30
- it('renders with correct title', () => {
31
- render(<MockComponent title="Test Title" />)
32
- expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent('Test Title')
33
- })
34
- })
35
-
36
- // Example: Testing utilities
37
- function formatCurrency(amount: number): string {
38
- return new Intl.NumberFormat('en-US', {
39
- style: 'currency',
40
- currency: 'USD',
41
- }).format(amount)
42
- }
43
-
44
- describe('Utilities', () => {
45
- it('formats currency correctly', () => {
46
- expect(formatCurrency(1000)).toBe('$1,000.00')
47
- expect(formatCurrency(0)).toBe('$0.00')
48
- })
49
- })
@@ -1,74 +0,0 @@
1
- import '@testing-library/jest-dom'
2
- import { vi, beforeEach, afterAll } from 'vitest'
3
-
4
- // Mock Next.js router
5
- vi.mock('next/navigation', () => ({
6
- useRouter: () => ({
7
- push: vi.fn(),
8
- back: vi.fn(),
9
- forward: vi.fn(),
10
- refresh: vi.fn(),
11
- replace: vi.fn(),
12
- prefetch: vi.fn(),
13
- }),
14
- useSearchParams: () => new URLSearchParams(),
15
- usePathname: () => '/',
16
- }))
17
-
18
- // Mock App SDK (optional - only if testing auth/payment components)
19
- vi.mock('@digilogiclabs/app-sdk', () => ({
20
- useAuth: () => ({
21
- user: null,
22
- loading: false,
23
- error: null,
24
- signIn: vi.fn(),
25
- signUp: vi.fn(),
26
- signOut: vi.fn(),
27
- signInWithOAuth: vi.fn(),
28
- }),
29
- usePayments: () => ({
30
- createCheckoutSession: vi.fn(),
31
- createPortalSession: vi.fn(),
32
- subscription: null,
33
- loading: false,
34
- }),
35
- DLLProvider: ({ children }: { children: React.ReactNode }) => children,
36
- }))
37
-
38
- // Global test utilities
39
- global.ResizeObserver = vi.fn().mockImplementation(() => ({
40
- observe: vi.fn(),
41
- unobserve: vi.fn(),
42
- disconnect: vi.fn(),
43
- }))
44
-
45
- // Suppress console warnings in tests unless needed
46
- const originalConsoleError = console.error
47
- const originalConsoleWarn = console.warn
48
-
49
- beforeEach(() => {
50
- console.error = (...args: any[]) => {
51
- if (
52
- typeof args[0] === 'string' &&
53
- args[0].includes('Warning: ReactDOM.render is no longer supported')
54
- ) {
55
- return
56
- }
57
- originalConsoleError.call(console, ...args)
58
- }
59
-
60
- console.warn = (...args: any[]) => {
61
- if (
62
- typeof args[0] === 'string' &&
63
- args[0].includes('useLayoutEffect does nothing on the server')
64
- ) {
65
- return
66
- }
67
- originalConsoleWarn.call(console, ...args)
68
- }
69
- })
70
-
71
- afterAll(() => {
72
- console.error = originalConsoleError
73
- console.warn = originalConsoleWarn
74
- })
@@ -1,17 +0,0 @@
1
- import { defineConfig } from 'vitest/config'
2
- import react from '@vitejs/plugin-react'
3
- import path from 'path'
4
-
5
- export default defineConfig({
6
- plugins: [react()],
7
- test: {
8
- environment: 'jsdom',
9
- setupFiles: ['./src/test/setup.ts'],
10
- globals: true,
11
- },
12
- resolve: {
13
- alias: {
14
- '@': path.resolve(__dirname, './src'),
15
- },
16
- },
17
- })
@@ -1,8 +0,0 @@
1
- /** @type {import('eslint').Linter.Config} */
2
- module.exports = {
3
- extends: ['next/core-web-vitals'],
4
- rules: {
5
- // Add any custom rules here
6
- },
7
- }
8
-