@devvistatech/devvista-kit 0.0.10 → 0.0.13

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 (337) hide show
  1. package/CHANGELOG.md +12 -12
  2. package/LICENSE +6 -6
  3. package/README.md +55 -15
  4. package/app/ClientLayout.tsx +66 -0
  5. package/app/about/page.tsx +61 -298
  6. package/app/adRequest/page.tsx +625 -549
  7. package/app/admin-profile/page.tsx +123 -0
  8. package/app/analytics/page.tsx +382 -346
  9. package/app/api/about/route.ts +290 -306
  10. package/app/api/adRequest/route.ts +547 -567
  11. package/app/api/analytics/[reportType]/route.ts +274 -337
  12. package/app/api/bio/route.ts +297 -313
  13. package/app/api/blog/route.ts +288 -306
  14. package/app/api/chat/route.ts +14 -14
  15. package/app/api/contact/route.ts +409 -409
  16. package/app/api/contacts/route.ts +179 -224
  17. package/app/api/files/route.ts +415 -429
  18. package/app/api/gallery-data/route.ts +727 -735
  19. package/app/api/schedule/route.ts +439 -455
  20. package/app/api/signup/route.ts +129 -0
  21. package/app/api/sync-user/route.ts +306 -132
  22. package/app/api/trial-request/route.ts +297 -297
  23. package/app/api/verify-admin/route.ts +46 -0
  24. package/app/blog/[id]/page.tsx +307 -288
  25. package/app/blog/page.tsx +249 -216
  26. package/app/contact/page.tsx +284 -284
  27. package/app/faq/page.tsx +191 -191
  28. package/app/favicon.ico +0 -0
  29. package/app/gallery/page.tsx +336 -315
  30. package/app/globals.css +58 -58
  31. package/app/layout.tsx +59 -110
  32. package/app/not-found.tsx +20 -20
  33. package/app/page.tsx +47 -338
  34. package/app/products/constants/product.ts +27 -0
  35. package/app/products/page.tsx +296 -0
  36. package/app/products/productOne/page.tsx +266 -0
  37. package/app/products/productTwo/page.tsx +272 -0
  38. package/app/schedule/page.tsx +698 -660
  39. package/bin/init.js +207 -219
  40. package/components/addOns/functional/CalendlyWidget.tsx +107 -107
  41. package/components/addOns/functional/ClassList.tsx +149 -145
  42. package/components/addOns/functional/ClassPopup.tsx +398 -398
  43. package/components/addOns/functional/ContactForm.tsx +284 -284
  44. package/components/addOns/functional/NewUserAnalytics.tsx +100 -100
  45. package/components/addOns/functional/ProductList.tsx +1027 -0
  46. package/components/addOns/functional/aboutSections/AboutSection.tsx +581 -544
  47. package/components/addOns/functional/aboutSections/constants/aboutSection.ts +70 -65
  48. package/components/addOns/functional/banner/Banner.tsx +150 -0
  49. package/components/addOns/functional/banner/BannerDashboard.tsx +283 -0
  50. package/components/addOns/functional/bioSections/BioEditor.tsx +471 -0
  51. package/components/addOns/functional/bioSections/constants/bioEditor.ts +36 -0
  52. package/components/addOns/functional/blogSections/BlogDashboard.tsx +184 -184
  53. package/components/addOns/functional/blogSections/BlogFormPopUp.tsx +555 -554
  54. package/components/addOns/functional/blogSections/BlogList.tsx +148 -148
  55. package/components/addOns/functional/blogSections/BlogSidebar.tsx +58 -58
  56. package/components/addOns/functional/blogSections/constants/blogDashboard.ts +28 -28
  57. package/components/addOns/functional/blogSections/constants/blogFormPopUp.ts +97 -97
  58. package/components/addOns/functional/blogSections/constants/blogList.ts +22 -22
  59. package/components/addOns/functional/blogSections/constants/blogSidebar.ts +15 -15
  60. package/components/addOns/functional/{ImageDescCarousel.tsx → carousels/ImageDescCarousel.tsx} +839 -730
  61. package/components/addOns/functional/carousels/ProductDescCarousel.tsx +1129 -0
  62. package/components/addOns/functional/{ScheduleCarousel.tsx → carousels/ScheduleCarousel.tsx} +231 -171
  63. package/components/addOns/functional/carousels/constants.ts/productDescCarousel.ts +197 -0
  64. package/components/addOns/functional/carousels/constants.ts/scheduleCarousel.ts +20 -0
  65. package/components/addOns/functional/contactsDashboard/ContactsDashboard.tsx +366 -366
  66. package/components/addOns/functional/contactsDashboard/constants/contactsDashboard.ts +70 -70
  67. package/components/addOns/functional/fileUploaders/FileUploader.tsx +437 -0
  68. package/components/addOns/functional/fileUploaders/constants/fileUploader.ts +45 -0
  69. package/components/addOns/functional/galleries/GalleryComplex.tsx +1037 -836
  70. package/components/addOns/functional/galleries/GallerySimple.tsx +537 -509
  71. package/components/addOns/functional/galleries/ThreeSetGallery.tsx +260 -0
  72. package/components/addOns/functional/galleries/constants/galleryComplex.ts +106 -106
  73. package/components/addOns/functional/galleries/constants/gallerySimple.ts +76 -76
  74. package/components/addOns/functional/schedules/ScheduleGridOne.tsx +276 -262
  75. package/components/addOns/functional/schedules/ScheduleGridTwo.tsx +299 -294
  76. package/components/addOns/functional/schedules/ScheduleGridTwoBasic.tsx +293 -288
  77. package/components/addOns/functional/schedules/SchedulerForm.tsx +428 -428
  78. package/components/addOns/functional/schedules/constants/ScheduleGridTwo.ts +40 -40
  79. package/components/addOns/functional/schedules/constants/ScheduleGridTwoBasic.ts +40 -40
  80. package/components/addOns/functional/schedules/constants/SchedulerForm.ts +65 -65
  81. package/components/addOns/functional/schedules/constants/scheduleGridOne.ts +54 -54
  82. package/components/addOns/non-functional/AnnouncementBanner.tsx +46 -46
  83. package/components/addOns/non-functional/IconBubble.tsx +49 -49
  84. package/components/addOns/non-functional/SampleCarousel.tsx +204 -204
  85. package/components/addOns/non-functional/Testimonials.tsx +334 -334
  86. package/components/addOns/non-functional/ThreeSetGallery.tsx +63 -63
  87. package/components/addOns/non-functional/aboutSections/AboutSection.tsx +62 -62
  88. package/components/addOns/non-functional/aboutSections/constants/aboutSection.ts +24 -24
  89. package/components/addOns/non-functional/featureSections/FeaturesSection.tsx +74 -0
  90. package/components/addOns/non-functional/featureSections/constants/featuresSection.ts +30 -0
  91. package/components/addOns/non-functional/{Heros/HeroSection.tsx → heros/HomeHero.tsx} +144 -142
  92. package/components/addOns/non-functional/heros/ProductHero.tsx +111 -0
  93. package/components/addOns/non-functional/heros/constants/hero.ts +62 -0
  94. package/components/addOns/non-functional/imageCarousels/ProductSlider.tsx +117 -117
  95. package/components/addOns/non-functional/imageCarousels/ProgramCarousel.tsx +232 -232
  96. package/components/addOns/non-functional/imageCarousels/constants/programCarousel.ts +39 -39
  97. package/components/addOns/non-functional/imageCarousels/constants/programSlider.ts +36 -36
  98. package/components/addOns/non-functional/spinner.tsx +21 -21
  99. package/components/footers/footer.tsx +416 -453
  100. package/components/navBars/navbar.tsx +310 -310
  101. package/components/other/accordion.tsx +58 -58
  102. package/components/other/admin-menu.tsx +68 -68
  103. package/components/other/alert-dialog.tsx +141 -141
  104. package/components/other/alert.tsx +59 -59
  105. package/components/other/aspect-ratio.tsx +7 -7
  106. package/components/other/avatar.tsx +50 -50
  107. package/components/other/badge.tsx +36 -36
  108. package/components/other/breadcrumb.tsx +115 -115
  109. package/components/other/button.tsx +738 -738
  110. package/components/other/calendar.tsx +66 -66
  111. package/components/other/card.tsx +86 -86
  112. package/components/other/carousel.tsx +274 -274
  113. package/components/other/chart.tsx +363 -363
  114. package/components/other/checkbox.tsx +30 -30
  115. package/components/other/collapsible.tsx +11 -11
  116. package/components/other/command.tsx +155 -155
  117. package/components/other/context-menu.tsx +200 -200
  118. package/components/other/dialog.tsx +122 -122
  119. package/components/other/drawer.tsx +118 -118
  120. package/components/other/dropdown-menu.tsx +200 -200
  121. package/components/other/form.tsx +179 -179
  122. package/components/other/hover-card.tsx +29 -29
  123. package/components/other/input-otp.tsx +71 -71
  124. package/components/other/input.tsx +25 -25
  125. package/components/other/label.tsx +26 -26
  126. package/components/other/menubar.tsx +236 -236
  127. package/components/other/mobile-icon.tsx +21 -21
  128. package/components/other/navigation-menu.tsx +128 -128
  129. package/components/other/pagination.tsx +117 -117
  130. package/components/other/popover.tsx +31 -31
  131. package/components/other/progress.tsx +28 -28
  132. package/components/other/radio-group.tsx +44 -44
  133. package/components/other/resizable.tsx +45 -45
  134. package/components/other/scroll-area.tsx +48 -48
  135. package/components/other/select.tsx +160 -160
  136. package/components/other/separator.tsx +31 -31
  137. package/components/other/sheet.tsx +140 -140
  138. package/components/other/skeleton.tsx +15 -15
  139. package/components/other/slider.tsx +28 -28
  140. package/components/other/social-icons.tsx +39 -39
  141. package/components/other/sonner.tsx +31 -31
  142. package/components/other/switch.tsx +29 -29
  143. package/components/other/table.tsx +117 -117
  144. package/components/other/tabs.tsx +55 -55
  145. package/components/other/textarea.tsx +24 -24
  146. package/components/other/toast.tsx +122 -122
  147. package/components/other/toaster.tsx +35 -35
  148. package/components/other/toggle-group.tsx +61 -61
  149. package/components/other/toggle.tsx +45 -45
  150. package/components/other/tooltip.tsx +30 -30
  151. package/components/theme-provider.tsx +8 -8
  152. package/hooks/use-toast.ts +188 -188
  153. package/lib/auth/auth-context.tsx +225 -0
  154. package/lib/auth/auth-utils.tsx +30 -0
  155. package/lib/constants/about.ts +34 -34
  156. package/lib/constants/adRequest.ts +256 -113
  157. package/lib/constants/admin-profile.ts +12 -0
  158. package/lib/constants/contact.ts +40 -40
  159. package/lib/constants/faq.ts +34 -34
  160. package/lib/constants/gallery.ts +42 -42
  161. package/lib/constants/page.ts +69 -69
  162. package/lib/constants/schedule.ts +71 -71
  163. package/lib/google/google-analytics-tracking.tsx +44 -0
  164. package/lib/{google-analytics.tsx → google/google-analytics.tsx} +97 -97
  165. package/lib/types.ts +235 -0
  166. package/lib/utils/compressImage.tsx +32 -0
  167. package/middleware.ts +46 -42
  168. package/netlify.toml +5 -5
  169. package/next.config.js +10 -10
  170. package/package.json +117 -116
  171. package/public/images/test.png +0 -0
  172. package/tailwind.config.ts +89 -89
  173. package/tsconfig.json +23 -23
  174. package/components/addOns/functional/BioEditor.tsx +0 -447
  175. package/components/addOns/functional/FileUploader.tsx +0 -295
  176. package/components/addOns/non-functional/FeaturesSection.tsx +0 -63
  177. package/components/types.ts +0 -50
  178. package/dist/.next/types/app/api/about/route.js +0 -52
  179. package/dist/.next/types/app/api/blog/route.js +0 -52
  180. package/dist/.next/types/app/api/files/route.js +0 -52
  181. package/dist/.next/types/app/api/schedule/route.js +0 -52
  182. package/dist/.next/types/app/api/sync-user/route.js +0 -52
  183. package/dist/.next/types/app/layout.js +0 -22
  184. package/dist/.next/types/app/page.js +0 -22
  185. package/dist/app/about/page.jsx +0 -258
  186. package/dist/app/adRequest/page.jsx +0 -531
  187. package/dist/app/analytics/page.jsx +0 -298
  188. package/dist/app/api/about/route.js +0 -285
  189. package/dist/app/api/adRequest/route.js +0 -440
  190. package/dist/app/api/analytics/[reportType]/route.js +0 -357
  191. package/dist/app/api/bio/route.js +0 -293
  192. package/dist/app/api/blog/route.js +0 -366
  193. package/dist/app/api/chat/route.js +0 -58
  194. package/dist/app/api/contact/route.js +0 -163
  195. package/dist/app/api/contacts/route.js +0 -234
  196. package/dist/app/api/files/route.js +0 -444
  197. package/dist/app/api/gallery-data/route.js +0 -719
  198. package/dist/app/api/schedule/route.js +0 -461
  199. package/dist/app/api/sync-user/route.js +0 -186
  200. package/dist/app/api/trial-request/route.js +0 -165
  201. package/dist/app/blog/[id]/page.jsx +0 -312
  202. package/dist/app/blog/page.jsx +0 -210
  203. package/dist/app/constants/about.js +0 -32
  204. package/dist/app/constants/adRequest.js +0 -113
  205. package/dist/app/constants/contact.js +0 -40
  206. package/dist/app/constants/faq.js +0 -36
  207. package/dist/app/constants/gallery.js +0 -42
  208. package/dist/app/constants/page.js +0 -69
  209. package/dist/app/constants/schedule.js +0 -71
  210. package/dist/app/contact/page.jsx +0 -119
  211. package/dist/app/faq/page.jsx +0 -97
  212. package/dist/app/gallery/page.jsx +0 -281
  213. package/dist/app/layout.jsx +0 -45
  214. package/dist/app/not-found.jsx +0 -14
  215. package/dist/app/page.jsx +0 -324
  216. package/dist/app/schedule/page.jsx +0 -500
  217. package/dist/components/addOns/functional/BioEditor.jsx +0 -187
  218. package/dist/components/addOns/functional/CalendlyWidget.jsx +0 -61
  219. package/dist/components/addOns/functional/ClassList.jsx +0 -158
  220. package/dist/components/addOns/functional/ClassPopup.jsx +0 -300
  221. package/dist/components/addOns/functional/ContactForm.jsx +0 -219
  222. package/dist/components/addOns/functional/FileUploader.jsx +0 -222
  223. package/dist/components/addOns/functional/ImageDescCarousel.jsx +0 -491
  224. package/dist/components/addOns/functional/NewUserAnalytics.jsx +0 -71
  225. package/dist/components/addOns/functional/ScheduleCarousel.jsx +0 -68
  226. package/dist/components/addOns/functional/aboutSections/AboutSection.jsx +0 -372
  227. package/dist/components/addOns/functional/aboutSections/constants/aboutSection.js +0 -65
  228. package/dist/components/addOns/functional/blogSections/BlogDashboard.jsx +0 -111
  229. package/dist/components/addOns/functional/blogSections/BlogFormPopUp.jsx +0 -465
  230. package/dist/components/addOns/functional/blogSections/BlogList.jsx +0 -170
  231. package/dist/components/addOns/functional/blogSections/BlogSidebar.jsx +0 -35
  232. package/dist/components/addOns/functional/blogSections/constants/blogDashboard.js +0 -28
  233. package/dist/components/addOns/functional/blogSections/constants/blogFormPopUp.js +0 -97
  234. package/dist/components/addOns/functional/blogSections/constants/blogList.js +0 -22
  235. package/dist/components/addOns/functional/blogSections/constants/blogSidebar.js +0 -15
  236. package/dist/components/addOns/functional/contactsDashboard/ContactsDashboard.jsx +0 -355
  237. package/dist/components/addOns/functional/contactsDashboard/constants/contactsDashboard.js +0 -70
  238. package/dist/components/addOns/functional/galleries/GalleryComplex.jsx +0 -605
  239. package/dist/components/addOns/functional/galleries/GallerySimple.jsx +0 -363
  240. package/dist/components/addOns/functional/galleries/constants/galleryComplex.js +0 -106
  241. package/dist/components/addOns/functional/galleries/constants/gallerySimple.js +0 -76
  242. package/dist/components/addOns/functional/schedules/ScheduleGridOne.jsx +0 -167
  243. package/dist/components/addOns/functional/schedules/ScheduleGridTwo.jsx +0 -100
  244. package/dist/components/addOns/functional/schedules/ScheduleGridTwoBasic.jsx +0 -97
  245. package/dist/components/addOns/functional/schedules/SchedulerForm.jsx +0 -188
  246. package/dist/components/addOns/functional/schedules/constants/ScheduleGridTwo.js +0 -40
  247. package/dist/components/addOns/functional/schedules/constants/ScheduleGridTwoBasic.js +0 -40
  248. package/dist/components/addOns/functional/schedules/constants/SchedulerForm.js +0 -65
  249. package/dist/components/addOns/functional/schedules/constants/scheduleGridOne.js +0 -54
  250. package/dist/components/addOns/non-functional/AnnouncementBanner.jsx +0 -24
  251. package/dist/components/addOns/non-functional/FeaturesSection.jsx +0 -38
  252. package/dist/components/addOns/non-functional/HeroSection.jsx +0 -71
  253. package/dist/components/addOns/non-functional/Heros/HeroSection.jsx +0 -71
  254. package/dist/components/addOns/non-functional/IconBubble.jsx +0 -36
  255. package/dist/components/addOns/non-functional/SampleCarousel.jsx +0 -114
  256. package/dist/components/addOns/non-functional/Testimonials.jsx +0 -177
  257. package/dist/components/addOns/non-functional/ThreeSetGallery.jsx +0 -40
  258. package/dist/components/addOns/non-functional/aboutSections/AboutSection.jsx +0 -35
  259. package/dist/components/addOns/non-functional/aboutSections/constants/aboutSection.js +0 -24
  260. package/dist/components/addOns/non-functional/imageCarousels/ProductSlider.jsx +0 -80
  261. package/dist/components/addOns/non-functional/imageCarousels/ProgramCarousel.jsx +0 -155
  262. package/dist/components/addOns/non-functional/imageCarousels/constants/programCarousel.js +0 -39
  263. package/dist/components/addOns/non-functional/imageCarousels/constants/programSlider.js +0 -36
  264. package/dist/components/addOns/non-functional/spinner.jsx +0 -13
  265. package/dist/components/footers/footer.jsx +0 -217
  266. package/dist/components/navBars/navbar.jsx +0 -159
  267. package/dist/components/other/accordion.jsx +0 -40
  268. package/dist/components/other/admin-menu.jsx +0 -34
  269. package/dist/components/other/alert-dialog.jsx +0 -64
  270. package/dist/components/other/alert.jsx +0 -41
  271. package/dist/components/other/aspect-ratio.jsx +0 -4
  272. package/dist/components/other/avatar.jsx +0 -31
  273. package/dist/components/other/badge.jsx +0 -32
  274. package/dist/components/other/breadcrumb.jsx +0 -57
  275. package/dist/components/other/button.jsx +0 -322
  276. package/dist/components/other/calendar.jsx +0 -43
  277. package/dist/components/other/card.jsx +0 -44
  278. package/dist/components/other/carousel.jsx +0 -140
  279. package/dist/components/other/chart.jsx +0 -182
  280. package/dist/components/other/checkbox.jsx +0 -26
  281. package/dist/components/other/collapsible.jsx +0 -6
  282. package/dist/components/other/command.jsx +0 -68
  283. package/dist/components/other/context-menu.jsx +0 -88
  284. package/dist/components/other/dialog.jsx +0 -60
  285. package/dist/components/other/drawer.jsx +0 -60
  286. package/dist/components/other/dropdown-menu.jsx +0 -90
  287. package/dist/components/other/form.jsx +0 -89
  288. package/dist/components/other/hover-card.jsx +0 -23
  289. package/dist/components/other/input-otp.jsx +0 -46
  290. package/dist/components/other/input.jsx +0 -19
  291. package/dist/components/other/label.jsx +0 -23
  292. package/dist/components/other/login-popup.jsx +0 -1
  293. package/dist/components/other/menubar.jsx +0 -96
  294. package/dist/components/other/mobile-icon.jsx +0 -11
  295. package/dist/components/other/navigation-menu.jsx +0 -62
  296. package/dist/components/other/pagination.jsx +0 -63
  297. package/dist/components/other/popover.jsx +0 -25
  298. package/dist/components/other/progress.jsx +0 -23
  299. package/dist/components/other/radio-group.jsx +0 -31
  300. package/dist/components/other/resizable.jsx +0 -29
  301. package/dist/components/other/scroll-area.jsx +0 -36
  302. package/dist/components/other/select.jsx +0 -83
  303. package/dist/components/other/separator.jsx +0 -21
  304. package/dist/components/other/sheet.jsx +0 -74
  305. package/dist/components/other/signup-popup.jsx +0 -1
  306. package/dist/components/other/skeleton.jsx +0 -17
  307. package/dist/components/other/slider.jsx +0 -26
  308. package/dist/components/other/social-icons.jsx +0 -15
  309. package/dist/components/other/sonner.jsx +0 -27
  310. package/dist/components/other/switch.jsx +0 -23
  311. package/dist/components/other/table.jsx +0 -56
  312. package/dist/components/other/tabs.jsx +0 -32
  313. package/dist/components/other/textarea.jsx +0 -19
  314. package/dist/components/other/toast.jsx +0 -58
  315. package/dist/components/other/toaster.jsx +0 -31
  316. package/dist/components/other/toggle-group.jsx +0 -41
  317. package/dist/components/other/toggle.jsx +0 -39
  318. package/dist/components/other/tooltip.jsx +0 -24
  319. package/dist/components/theme-provider.jsx +0 -18
  320. package/dist/components/types.js +0 -1
  321. package/dist/hooks/use-toast.js +0 -135
  322. package/dist/lib/auth-context.jsx +0 -144
  323. package/dist/lib/constants/about.js +0 -32
  324. package/dist/lib/constants/adRequest.js +0 -113
  325. package/dist/lib/constants/contact.js +0 -40
  326. package/dist/lib/constants/faq.js +0 -36
  327. package/dist/lib/constants/gallery.js +0 -42
  328. package/dist/lib/constants/page.js +0 -69
  329. package/dist/lib/constants/schedule.js +0 -71
  330. package/dist/lib/google-analytics.jsx +0 -148
  331. package/dist/lib/utils.js +0 -9
  332. package/dist/lib/verify-user.js +0 -142
  333. package/dist/middleware.js +0 -37
  334. package/dist/tailwind.config.js +0 -86
  335. package/dist/tsconfig.tsbuildinfo +0 -1
  336. package/lib/auth-context.tsx +0 -131
  337. package/lib/verify-user.ts +0 -118
@@ -1,89 +1,89 @@
1
- import type { Config } from 'tailwindcss';
2
-
3
- const config: Config = {
4
- content: [
5
- './pages/**/*.{js,ts,jsx,tsx,mdx}',
6
- './components/**/*.{js,ts,jsx,tsx,mdx}',
7
- './app/**/*.{js,ts,jsx,tsx,mdx}',
8
- ],
9
- theme: {
10
- extend: {
11
- backgroundImage: {
12
- 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
13
- 'gradient-conic':
14
- 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
15
- },
16
- borderRadius: {
17
- lg: 'var(--radius)',
18
- md: 'calc(var(--radius) - 2px)',
19
- sm: 'calc(var(--radius) - 4px)',
20
- },
21
- colors: {
22
- background: 'hsl(var(--background))',
23
- foreground: 'hsl(var(--foreground))',
24
- card: {
25
- DEFAULT: 'hsl(var(--card))',
26
- foreground: 'hsl(var(--card-foreground))',
27
- },
28
- popover: {
29
- DEFAULT: 'hsl(var(--popover))',
30
- foreground: 'hsl(var(--popover-foreground))',
31
- },
32
- primary: {
33
- DEFAULT: 'hsl(var(--primary))',
34
- foreground: 'hsl(var(--primary-foreground))',
35
- },
36
- secondary: {
37
- DEFAULT: 'hsl(var(--secondary))',
38
- foreground: 'hsl(var(--secondary-foreground))',
39
- },
40
- muted: {
41
- DEFAULT: 'hsl(var(--muted))',
42
- foreground: 'hsl(var(--muted-foreground))',
43
- },
44
- accent: {
45
- DEFAULT: 'hsl(var(--accent))',
46
- foreground: 'hsl(var(--accent-foreground))',
47
- },
48
- destructive: {
49
- DEFAULT: 'hsl(var(--destructive))',
50
- foreground: 'hsl(var(--destructive-foreground))',
51
- },
52
- border: 'hsl(var(--border))',
53
- input: 'hsl(var(--input))',
54
- ring: 'hsl(var(--ring))',
55
- chart: {
56
- '1': 'hsl(var(--chart-1))',
57
- '2': 'hsl(var(--chart-2))',
58
- '3': 'hsl(var(--chart-3))',
59
- '4': 'hsl(var(--chart-4))',
60
- '5': 'hsl(var(--chart-5))',
61
- },
62
- },
63
- keyframes: {
64
- 'accordion-down': {
65
- from: {
66
- height: '0',
67
- },
68
- to: {
69
- height: 'var(--radix-accordion-content-height)',
70
- },
71
- },
72
- 'accordion-up': {
73
- from: {
74
- height: 'var(--radix-accordion-content-height)',
75
- },
76
- to: {
77
- height: '0',
78
- },
79
- },
80
- },
81
- animation: {
82
- 'accordion-down': 'accordion-down 0.2s ease-out',
83
- 'accordion-up': 'accordion-up 0.2s ease-out',
84
- },
85
- },
86
- },
87
- plugins: [require('tailwindcss-animate')],
88
- };
89
- export default config;
1
+ import type { Config } from 'tailwindcss';
2
+
3
+ const config: Config = {
4
+ content: [
5
+ './pages/**/*.{js,ts,jsx,tsx,mdx}',
6
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
7
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
8
+ ],
9
+ theme: {
10
+ extend: {
11
+ backgroundImage: {
12
+ 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
13
+ 'gradient-conic':
14
+ 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
15
+ },
16
+ borderRadius: {
17
+ lg: 'var(--radius)',
18
+ md: 'calc(var(--radius) - 2px)',
19
+ sm: 'calc(var(--radius) - 4px)',
20
+ },
21
+ colors: {
22
+ background: 'hsl(var(--background))',
23
+ foreground: 'hsl(var(--foreground))',
24
+ card: {
25
+ DEFAULT: 'hsl(var(--card))',
26
+ foreground: 'hsl(var(--card-foreground))',
27
+ },
28
+ popover: {
29
+ DEFAULT: 'hsl(var(--popover))',
30
+ foreground: 'hsl(var(--popover-foreground))',
31
+ },
32
+ primary: {
33
+ DEFAULT: 'hsl(var(--primary))',
34
+ foreground: 'hsl(var(--primary-foreground))',
35
+ },
36
+ secondary: {
37
+ DEFAULT: 'hsl(var(--secondary))',
38
+ foreground: 'hsl(var(--secondary-foreground))',
39
+ },
40
+ muted: {
41
+ DEFAULT: 'hsl(var(--muted))',
42
+ foreground: 'hsl(var(--muted-foreground))',
43
+ },
44
+ accent: {
45
+ DEFAULT: 'hsl(var(--accent))',
46
+ foreground: 'hsl(var(--accent-foreground))',
47
+ },
48
+ destructive: {
49
+ DEFAULT: 'hsl(var(--destructive))',
50
+ foreground: 'hsl(var(--destructive-foreground))',
51
+ },
52
+ border: 'hsl(var(--border))',
53
+ input: 'hsl(var(--input))',
54
+ ring: 'hsl(var(--ring))',
55
+ chart: {
56
+ '1': 'hsl(var(--chart-1))',
57
+ '2': 'hsl(var(--chart-2))',
58
+ '3': 'hsl(var(--chart-3))',
59
+ '4': 'hsl(var(--chart-4))',
60
+ '5': 'hsl(var(--chart-5))',
61
+ },
62
+ },
63
+ keyframes: {
64
+ 'accordion-down': {
65
+ from: {
66
+ height: '0',
67
+ },
68
+ to: {
69
+ height: 'var(--radix-accordion-content-height)',
70
+ },
71
+ },
72
+ 'accordion-up': {
73
+ from: {
74
+ height: 'var(--radix-accordion-content-height)',
75
+ },
76
+ to: {
77
+ height: '0',
78
+ },
79
+ },
80
+ },
81
+ animation: {
82
+ 'accordion-down': 'accordion-down 0.2s ease-out',
83
+ 'accordion-up': 'accordion-up 0.2s ease-out',
84
+ },
85
+ },
86
+ },
87
+ plugins: [require('tailwindcss-animate')],
88
+ };
89
+ export default config;
package/tsconfig.json CHANGED
@@ -1,24 +1,24 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es5",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "noEmit": false,
9
- "outDir": "./dist",
10
- "esModuleInterop": true,
11
- "module": "esnext",
12
- "moduleResolution": "bundler",
13
- "resolveJsonModule": true,
14
- "isolatedModules": true,
15
- "jsx": "preserve",
16
- "incremental": true,
17
- "plugins": [{"name": "next"}],
18
- "paths": {
19
- "@/*": ["./*"]
20
- }
21
- },
22
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
23
- "exclude": ["node_modules"]
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es5",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": false,
9
+ "outDir": "./dist",
10
+ "esModuleInterop": true,
11
+ "module": "esnext",
12
+ "moduleResolution": "bundler",
13
+ "resolveJsonModule": true,
14
+ "isolatedModules": true,
15
+ "jsx": "preserve",
16
+ "incremental": true,
17
+ "plugins": [{"name": "next"}],
18
+ "paths": {
19
+ "@/*": ["./*"]
20
+ }
21
+ },
22
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
23
+ "exclude": ["node_modules"]
24
24
  }
@@ -1,447 +0,0 @@
1
- "use client";
2
-
3
- import { motion } from "framer-motion";
4
- import Image from "next/image";
5
- import { useState, useEffect } from "react";
6
- import { EditIconButton, ToggleButton, UpdateButton, CancelButton, CloseButton } from "@/components/other/button";
7
- import Spinner from "@/components/addOns/non-functional/spinner";
8
- import { X } from "lucide-react";
9
-
10
- interface BioContent {
11
- id: number;
12
- documentId: string;
13
- title: string;
14
- description: string;
15
- bio: boolean;
16
- image?: { url: string; id: number };
17
- createdAt: string;
18
- }
19
-
20
- interface StrapiUser {
21
- id: number;
22
- username: string;
23
- email: string;
24
- businessAdminId?: string;
25
- }
26
-
27
- interface BioSectionProps {
28
- user: StrapiUser | null;
29
- authLoading: boolean;
30
- bioImageUrl: string | null;
31
- bioText: string | null;
32
- bioTitle: string | null;
33
- error: string | null;
34
- isLoading: boolean;
35
- setBioImageUrl: (url: string | null) => void;
36
- setBioText: (text: string | null) => void;
37
- setBioTitle: (title: string | null) => void;
38
- setError: (error: string | null) => void;
39
- handlePatchSubmit: (
40
- e: React.FormEvent,
41
- formTitle: string,
42
- formDescription: string,
43
- formImage: File | null,
44
- onSuccess: () => void
45
- ) => Promise<void>;
46
- }
47
-
48
- export function BioSection({
49
- user,
50
- authLoading,
51
- bioImageUrl,
52
- bioText,
53
- bioTitle,
54
- error,
55
- isLoading,
56
- setBioImageUrl,
57
- setBioText,
58
- setBioTitle,
59
- setError,
60
- handlePatchSubmit,
61
- }: BioSectionProps) {
62
- const [isMobile, setIsMobile] = useState(false);
63
- const [isEditModalOpen, setIsEditModalOpen] = useState(false);
64
- const [formTitle, setFormTitle] = useState<string>(bioTitle || "");
65
- const [formDescription, setFormDescription] = useState<string>(bioText || "");
66
- const [formImage, setFormImage] = useState<File | null>(null);
67
- const [isSubmitting, setIsSubmitting] = useState(false);
68
- const [isExpanded, setIsExpanded] = useState(false);
69
-
70
- useEffect(() => {
71
- const debounce = (fn: () => void, delay: number) => {
72
- let timeout: NodeJS.Timeout;
73
- return () => {
74
- clearTimeout(timeout);
75
- timeout = setTimeout(fn, delay);
76
- };
77
- };
78
-
79
- const checkMobile = debounce(() => {
80
- setIsMobile(window.innerWidth < 768);
81
- }, 100);
82
-
83
- checkMobile();
84
- window.addEventListener("resize", checkMobile);
85
- return () => window.removeEventListener("resize", checkMobile);
86
- }, []);
87
-
88
- useEffect(() => {
89
- const event = new CustomEvent("modalStateChange", {
90
- detail: { isOpen: isEditModalOpen },
91
- });
92
- window.dispatchEvent(event);
93
- }, [isEditModalOpen]);
94
-
95
- useEffect(() => {
96
- if (isEditModalOpen) {
97
- // Store current scroll position
98
- const scrollY = window.scrollY;
99
- // Prevent background scrolling
100
- document.body.style.position = "fixed";
101
- document.body.style.top = `-${scrollY}px`;
102
- document.body.style.width = "100%";
103
- document.body.classList.add("overflow-hidden");
104
-
105
- return () => {
106
- // Restore scroll position and remove styles
107
- const scrollYRestored = parseInt(document.body.style.top || "0", 10) * -1;
108
- document.body.style.position = "";
109
- document.body.style.top = "";
110
- document.body.style.width = "";
111
- document.body.classList.remove("overflow-hidden");
112
- window.scrollTo(0, scrollYRestored);
113
- };
114
- }
115
- }, [isEditModalOpen]);
116
-
117
- const openEditModal = () => {
118
- setFormTitle(bioTitle || "");
119
- setFormDescription(bioText || "");
120
- setFormImage(null);
121
- setIsEditModalOpen(true);
122
- };
123
-
124
- const handleCancelEdit = () => {
125
- setIsEditModalOpen(false);
126
- setFormTitle(bioTitle || "");
127
- setFormDescription(bioText || "");
128
- setFormImage(null);
129
- };
130
-
131
- useEffect(() => {
132
- const handleEsc = (e: KeyboardEvent) => {
133
- if (e.key === "Escape" && isEditModalOpen) {
134
- handleCancelEdit();
135
- }
136
- };
137
- window.addEventListener("keydown", handleEsc);
138
- return () => window.removeEventListener("keydown", handleEsc);
139
- }, [isEditModalOpen]);
140
-
141
- const isAdmin = !!user?.businessAdminId;
142
-
143
- const sectionVariants = {
144
- hidden: { opacity: 0, y: 20 },
145
- visible: {
146
- opacity: 1,
147
- y: 0,
148
- transition: { duration: isMobile ? 0.3 : 0.5, ease: "easeOut" },
149
- },
150
- };
151
-
152
- const itemVariants = {
153
- hidden: { opacity: 0, y: 10 },
154
- visible: {
155
- opacity: 1,
156
- y: 0,
157
- transition: { duration: isMobile ? 0.3 : 0.5, ease: "easeOut" },
158
- },
159
- };
160
-
161
- const modalVariants = {
162
- hidden: { opacity: 0, y: "100vh" },
163
- visible: { opacity: 1, y: 0, transition: { duration: 0.5, ease: [0.16, 1, 0.3, 1] } },
164
- exit: { opacity: 0, y: "100vh", transition: { duration: 0.3, ease: "easeIn" } },
165
- };
166
-
167
- const paragraphs = bioText
168
- ? bioText.split("\n").filter((paragraph) => paragraph.trim() !== "")
169
- : [];
170
-
171
- return (
172
- <div className="w-full">
173
- <style jsx>{`
174
- :root {
175
- --jubilee: #F47C7C;
176
- --exuberant-blue: #FF69B4;
177
- --modern-purple: #D946EF;
178
- --green-primary: #1a3c34;
179
- }
180
-
181
- .glassmorphism {
182
- background: rgba(255, 255, 255, 0.08);
183
- backdrop-filter: blur(10px);
184
- border: 2px solid transparent;
185
- border-image: linear-gradient(45deg, var(--exuberant-blue), var(--jubilee), var(--modern-purple)) 1;
186
- box-shadow: 0 16px 48px rgba(0, 0, 0, 0.1);
187
- }
188
-
189
- .modal-form {
190
- max-height: 90vh;
191
- overflow-y: auto;
192
- -webkit-overflow-scrolling: touch; /* Smooth scrolling on iOS */
193
- }
194
-
195
- .modal-form input,
196
- .modal-form textarea {
197
- font-size: 0.875rem;
198
- padding: 0.5rem;
199
- border-radius: 0.375rem;
200
- background: #374151;
201
- color: #f3f4f6;
202
- border: 1px solid #4b5563;
203
- }
204
-
205
- .modal-form input:focus,
206
- .modal-form textarea:focus {
207
- outline: none;
208
- ring: 2px solid #3b82f6;
209
- }
210
-
211
- .modal-form label {
212
- font-size: 0.875rem;
213
- color: #d1d5db;
214
- }
215
-
216
- body.overflow-hidden {
217
- overflow: hidden;
218
- }
219
-
220
- @supports not (backdrop-filter: blur(10px)) {
221
- .glassmorphism {
222
- background: rgba(255, 255, 255, 0.2);
223
- }
224
- }
225
-
226
- @media (max-width: 768px) {
227
- .glassmorphism {
228
- backdrop-filter: none;
229
- background: rgba(255, 255, 255, 0.2);
230
- }
231
-
232
- .modal-form input,
233
- .modal-form textarea {
234
- font-size: 0.875rem;
235
- padding: 0.5rem;
236
- border-radius: 0.375rem;
237
- }
238
-
239
- .modal-form label {
240
- font-size: 0.875rem;
241
- }
242
-
243
- .modal-form .flex {
244
- flex-direction: column;
245
- gap: 0.5rem;
246
- }
247
-
248
- .modal-form textarea {
249
- min-height: 80px;
250
- }
251
- }
252
-
253
- @media (max-width: 320px) {
254
- .modal-form input,
255
- .modal-form textarea {
256
- font-size: 0.75rem;
257
- padding: 0.5rem;
258
- }
259
-
260
- .modal-form label {
261
- font-size: 0.75rem;
262
- }
263
- }
264
- `}</style>
265
- <motion.div
266
- variants={sectionVariants}
267
- initial="hidden"
268
- animate="visible"
269
- className="mb-24 max-w-[200rem] mx-auto px-8 sm:px-10"
270
- >
271
- <div className="flex flex-col md:flex-row gap-10 items-start min-h-[fit-content]">
272
- <motion.div
273
- variants={itemVariants}
274
- className="relative h-[40vh] min-h-[400px] sm:h-[50vh] lg:h-[600px] rounded-[1.5rem] overflow-hidden glassmorphism w-full mx-auto max-w-3xl md:max-w-none md:mx-0"
275
- >
276
- {bioImageUrl ? (
277
- <div className="relative w-full h-full">
278
- <Image
279
- src={bioImageUrl}
280
- alt="Portrait of Kathy Caiello"
281
- fill
282
- className="object-cover rounded-[1rem] transition-transform duration-700 hover:scale-110"
283
- sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"
284
- loading="lazy"
285
- quality={85}
286
- />
287
- <div className="absolute inset-0 bg-gradient-to-t from-black/40 to-transparent opacity-0 hover:opacity-100 transition-opacity duration-500"></div>
288
- {isAdmin && (
289
- <div className="absolute top-2 right-0 flex">
290
- <EditIconButton
291
- onClick={(e) => {
292
- e.stopPropagation();
293
- openEditModal();
294
- }}
295
- />
296
- </div>
297
- )}
298
- </div>
299
- ) : (
300
- <div className="w-full h-full flex items-center justify-center">
301
- <p className="text-gray-600 text-lg">No image available</p>
302
- </div>
303
- )}
304
- </motion.div>
305
- <motion.div
306
- variants={itemVariants}
307
- className="space-y-6 min-h-[fit-content] h-auto w-full relative"
308
- >
309
- {bioTitle && (
310
- <motion.h2
311
- variants={itemVariants}
312
- className="text-2xl sm:text-3xl font-bold text-gray-800"
313
- >
314
- {bioTitle}
315
- </motion.h2>
316
- )}
317
- {paragraphs.length > 0 ? (
318
- <>
319
- {paragraphs
320
- .slice(0, isExpanded ? paragraphs.length : 3)
321
- .map((paragraph, index) => (
322
- <motion.p
323
- key={index}
324
- variants={itemVariants}
325
- className="text-gray-800 text-base sm:text-lg md:text-xl leading-relaxed font-medium"
326
- >
327
- {paragraph}
328
- </motion.p>
329
- ))}
330
- {paragraphs.length > 3 && (
331
- <motion.div variants={itemVariants} className="mt-4">
332
- <ToggleButton
333
- variant="toggle-bio"
334
- onClick={() => setIsExpanded(!isExpanded)}
335
- >
336
- {isExpanded ? "Read Less" : "Read More"}
337
- </ToggleButton>
338
- </motion.div>
339
- )}
340
- </>
341
- ) : (
342
- <motion.p
343
- variants={itemVariants}
344
- className="text-gray-600 text-base sm:text-lg md:text-xl leading-relaxed font-medium"
345
- >
346
- No bio description available.
347
- </motion.p>
348
- )}
349
- </motion.div>
350
- </div>
351
- {error && (
352
- <p className="text-red-400 text-base sm:text-lg md:text-xl text-center mt-4">{error}</p>
353
- )}
354
- </motion.div>
355
- {isEditModalOpen && (
356
- <motion.div
357
- variants={modalVariants}
358
- initial="hidden"
359
- animate="visible"
360
- exit="exit"
361
- className="fixed inset-0 bg-black/90 flex items-center justify-center z-[10000] p-4 isolate"
362
- onClick={handleCancelEdit}
363
- aria-modal="true"
364
- role="dialog"
365
- >
366
- <div
367
- className="relative max-w-5xl w-full mx-4 p-6 bg-gray-800/50 border border-gray-700/50 rounded-lg shadow-lg max-h-[90vh] overflow-y-auto modal-form"
368
- onClick={(e) => e.stopPropagation()}
369
- >
370
- <CloseButton onClick={handleCancelEdit}>
371
- <X className="h-6 w-6 sm:h-8 sm:w-8" />
372
- </CloseButton>
373
- <h3 className="text-xl font-bold text-white mb-4">Edit Bio</h3>
374
- <form
375
- onSubmit={(e) => {
376
- setIsSubmitting(true);
377
- handlePatchSubmit(e, formTitle, formDescription, formImage, () => {
378
- setIsEditModalOpen(false);
379
- }).finally(() => setIsSubmitting(false));
380
- }}
381
- className="space-y-4 modal-form"
382
- >
383
- <div>
384
- <label
385
- htmlFor="bioTitle"
386
- className="block text-sm font-medium text-gray-300 mb-1"
387
- >
388
- Bio Title
389
- </label>
390
- <input
391
- id="bioTitle"
392
- type="text"
393
- value={formTitle}
394
- onChange={(e) => setFormTitle(e.target.value)}
395
- className="w-full p-2 rounded bg-gray-700 text-white border border-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm"
396
- placeholder="Enter the bio title"
397
- />
398
- </div>
399
- <div>
400
- <label
401
- htmlFor="bioImage"
402
- className="block text-sm font-medium text-gray-300 mb-1"
403
- >
404
- Update Image (optional)
405
- </label>
406
- <input
407
- id="bioImage"
408
- type="file"
409
- accept="image/jpeg,image/png,image/gif"
410
- onChange={(e) => setFormImage(e.target.files?.[0] || null)}
411
- className="w-full p-2 rounded bg-gray-700 text-white border border-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm"
412
- />
413
- {formImage && (
414
- <p className="mt-2 text-gray-300 text-sm">Selected: {formImage.name}</p>
415
- )}
416
- </div>
417
- <div>
418
- <label
419
- htmlFor="bioDescription"
420
- className="block text-sm font-medium text-gray-300 mb-1"
421
- >
422
- Update Description
423
- </label>
424
- <textarea
425
- id="bioDescription"
426
- value={formDescription}
427
- onChange={(e) => setFormDescription(e.target.value)}
428
- className="w-full p-2 rounded bg-gray-700 text-white border border-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm min-h-[80px]"
429
- placeholder="Enter the bio description"
430
- />
431
- </div>
432
- <div className="flex flex-col sm:flex-row space-y-2 sm:space-y-0 sm:space-x-3">
433
- <UpdateButton type="submit" disabled={isSubmitting}>
434
- {isSubmitting ? "Saving..." : "Update"}
435
- </UpdateButton>
436
- <CancelButton type="button" onClick={handleCancelEdit}>
437
- Cancel
438
- </CancelButton>
439
- </div>
440
- {error && <p className="text-red-400 text-sm font-medium">{error}</p>}
441
- </form>
442
- </div>
443
- </motion.div>
444
- )}
445
- </div>
446
- );
447
- }