@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.
- package/CHANGELOG.md +12 -12
- package/LICENSE +6 -6
- package/README.md +55 -15
- package/app/ClientLayout.tsx +66 -0
- package/app/about/page.tsx +61 -298
- package/app/adRequest/page.tsx +625 -549
- package/app/admin-profile/page.tsx +123 -0
- package/app/analytics/page.tsx +382 -346
- package/app/api/about/route.ts +290 -306
- package/app/api/adRequest/route.ts +547 -567
- package/app/api/analytics/[reportType]/route.ts +274 -337
- package/app/api/bio/route.ts +297 -313
- package/app/api/blog/route.ts +288 -306
- package/app/api/chat/route.ts +14 -14
- package/app/api/contact/route.ts +409 -409
- package/app/api/contacts/route.ts +179 -224
- package/app/api/files/route.ts +415 -429
- package/app/api/gallery-data/route.ts +727 -735
- package/app/api/schedule/route.ts +439 -455
- package/app/api/signup/route.ts +129 -0
- package/app/api/sync-user/route.ts +306 -132
- package/app/api/trial-request/route.ts +297 -297
- package/app/api/verify-admin/route.ts +46 -0
- package/app/blog/[id]/page.tsx +307 -288
- package/app/blog/page.tsx +249 -216
- package/app/contact/page.tsx +284 -284
- package/app/faq/page.tsx +191 -191
- package/app/favicon.ico +0 -0
- package/app/gallery/page.tsx +336 -315
- package/app/globals.css +58 -58
- package/app/layout.tsx +59 -110
- package/app/not-found.tsx +20 -20
- package/app/page.tsx +47 -338
- package/app/products/constants/product.ts +27 -0
- package/app/products/page.tsx +296 -0
- package/app/products/productOne/page.tsx +266 -0
- package/app/products/productTwo/page.tsx +272 -0
- package/app/schedule/page.tsx +698 -660
- package/bin/init.js +207 -219
- package/components/addOns/functional/CalendlyWidget.tsx +107 -107
- package/components/addOns/functional/ClassList.tsx +149 -145
- package/components/addOns/functional/ClassPopup.tsx +398 -398
- package/components/addOns/functional/ContactForm.tsx +284 -284
- package/components/addOns/functional/NewUserAnalytics.tsx +100 -100
- package/components/addOns/functional/ProductList.tsx +1027 -0
- package/components/addOns/functional/aboutSections/AboutSection.tsx +581 -544
- package/components/addOns/functional/aboutSections/constants/aboutSection.ts +70 -65
- package/components/addOns/functional/banner/Banner.tsx +150 -0
- package/components/addOns/functional/banner/BannerDashboard.tsx +283 -0
- package/components/addOns/functional/bioSections/BioEditor.tsx +471 -0
- package/components/addOns/functional/bioSections/constants/bioEditor.ts +36 -0
- package/components/addOns/functional/blogSections/BlogDashboard.tsx +184 -184
- package/components/addOns/functional/blogSections/BlogFormPopUp.tsx +555 -554
- package/components/addOns/functional/blogSections/BlogList.tsx +148 -148
- package/components/addOns/functional/blogSections/BlogSidebar.tsx +58 -58
- package/components/addOns/functional/blogSections/constants/blogDashboard.ts +28 -28
- package/components/addOns/functional/blogSections/constants/blogFormPopUp.ts +97 -97
- package/components/addOns/functional/blogSections/constants/blogList.ts +22 -22
- package/components/addOns/functional/blogSections/constants/blogSidebar.ts +15 -15
- package/components/addOns/functional/{ImageDescCarousel.tsx → carousels/ImageDescCarousel.tsx} +839 -730
- package/components/addOns/functional/carousels/ProductDescCarousel.tsx +1129 -0
- package/components/addOns/functional/{ScheduleCarousel.tsx → carousels/ScheduleCarousel.tsx} +231 -171
- package/components/addOns/functional/carousels/constants.ts/productDescCarousel.ts +197 -0
- package/components/addOns/functional/carousels/constants.ts/scheduleCarousel.ts +20 -0
- package/components/addOns/functional/contactsDashboard/ContactsDashboard.tsx +366 -366
- package/components/addOns/functional/contactsDashboard/constants/contactsDashboard.ts +70 -70
- package/components/addOns/functional/fileUploaders/FileUploader.tsx +437 -0
- package/components/addOns/functional/fileUploaders/constants/fileUploader.ts +45 -0
- package/components/addOns/functional/galleries/GalleryComplex.tsx +1037 -836
- package/components/addOns/functional/galleries/GallerySimple.tsx +537 -509
- package/components/addOns/functional/galleries/ThreeSetGallery.tsx +260 -0
- package/components/addOns/functional/galleries/constants/galleryComplex.ts +106 -106
- package/components/addOns/functional/galleries/constants/gallerySimple.ts +76 -76
- package/components/addOns/functional/schedules/ScheduleGridOne.tsx +276 -262
- package/components/addOns/functional/schedules/ScheduleGridTwo.tsx +299 -294
- package/components/addOns/functional/schedules/ScheduleGridTwoBasic.tsx +293 -288
- package/components/addOns/functional/schedules/SchedulerForm.tsx +428 -428
- package/components/addOns/functional/schedules/constants/ScheduleGridTwo.ts +40 -40
- package/components/addOns/functional/schedules/constants/ScheduleGridTwoBasic.ts +40 -40
- package/components/addOns/functional/schedules/constants/SchedulerForm.ts +65 -65
- package/components/addOns/functional/schedules/constants/scheduleGridOne.ts +54 -54
- package/components/addOns/non-functional/AnnouncementBanner.tsx +46 -46
- package/components/addOns/non-functional/IconBubble.tsx +49 -49
- package/components/addOns/non-functional/SampleCarousel.tsx +204 -204
- package/components/addOns/non-functional/Testimonials.tsx +334 -334
- package/components/addOns/non-functional/ThreeSetGallery.tsx +63 -63
- package/components/addOns/non-functional/aboutSections/AboutSection.tsx +62 -62
- package/components/addOns/non-functional/aboutSections/constants/aboutSection.ts +24 -24
- package/components/addOns/non-functional/featureSections/FeaturesSection.tsx +74 -0
- package/components/addOns/non-functional/featureSections/constants/featuresSection.ts +30 -0
- package/components/addOns/non-functional/{Heros/HeroSection.tsx → heros/HomeHero.tsx} +144 -142
- package/components/addOns/non-functional/heros/ProductHero.tsx +111 -0
- package/components/addOns/non-functional/heros/constants/hero.ts +62 -0
- package/components/addOns/non-functional/imageCarousels/ProductSlider.tsx +117 -117
- package/components/addOns/non-functional/imageCarousels/ProgramCarousel.tsx +232 -232
- package/components/addOns/non-functional/imageCarousels/constants/programCarousel.ts +39 -39
- package/components/addOns/non-functional/imageCarousels/constants/programSlider.ts +36 -36
- package/components/addOns/non-functional/spinner.tsx +21 -21
- package/components/footers/footer.tsx +416 -453
- package/components/navBars/navbar.tsx +310 -310
- package/components/other/accordion.tsx +58 -58
- package/components/other/admin-menu.tsx +68 -68
- package/components/other/alert-dialog.tsx +141 -141
- package/components/other/alert.tsx +59 -59
- package/components/other/aspect-ratio.tsx +7 -7
- package/components/other/avatar.tsx +50 -50
- package/components/other/badge.tsx +36 -36
- package/components/other/breadcrumb.tsx +115 -115
- package/components/other/button.tsx +738 -738
- package/components/other/calendar.tsx +66 -66
- package/components/other/card.tsx +86 -86
- package/components/other/carousel.tsx +274 -274
- package/components/other/chart.tsx +363 -363
- package/components/other/checkbox.tsx +30 -30
- package/components/other/collapsible.tsx +11 -11
- package/components/other/command.tsx +155 -155
- package/components/other/context-menu.tsx +200 -200
- package/components/other/dialog.tsx +122 -122
- package/components/other/drawer.tsx +118 -118
- package/components/other/dropdown-menu.tsx +200 -200
- package/components/other/form.tsx +179 -179
- package/components/other/hover-card.tsx +29 -29
- package/components/other/input-otp.tsx +71 -71
- package/components/other/input.tsx +25 -25
- package/components/other/label.tsx +26 -26
- package/components/other/menubar.tsx +236 -236
- package/components/other/mobile-icon.tsx +21 -21
- package/components/other/navigation-menu.tsx +128 -128
- package/components/other/pagination.tsx +117 -117
- package/components/other/popover.tsx +31 -31
- package/components/other/progress.tsx +28 -28
- package/components/other/radio-group.tsx +44 -44
- package/components/other/resizable.tsx +45 -45
- package/components/other/scroll-area.tsx +48 -48
- package/components/other/select.tsx +160 -160
- package/components/other/separator.tsx +31 -31
- package/components/other/sheet.tsx +140 -140
- package/components/other/skeleton.tsx +15 -15
- package/components/other/slider.tsx +28 -28
- package/components/other/social-icons.tsx +39 -39
- package/components/other/sonner.tsx +31 -31
- package/components/other/switch.tsx +29 -29
- package/components/other/table.tsx +117 -117
- package/components/other/tabs.tsx +55 -55
- package/components/other/textarea.tsx +24 -24
- package/components/other/toast.tsx +122 -122
- package/components/other/toaster.tsx +35 -35
- package/components/other/toggle-group.tsx +61 -61
- package/components/other/toggle.tsx +45 -45
- package/components/other/tooltip.tsx +30 -30
- package/components/theme-provider.tsx +8 -8
- package/hooks/use-toast.ts +188 -188
- package/lib/auth/auth-context.tsx +225 -0
- package/lib/auth/auth-utils.tsx +30 -0
- package/lib/constants/about.ts +34 -34
- package/lib/constants/adRequest.ts +256 -113
- package/lib/constants/admin-profile.ts +12 -0
- package/lib/constants/contact.ts +40 -40
- package/lib/constants/faq.ts +34 -34
- package/lib/constants/gallery.ts +42 -42
- package/lib/constants/page.ts +69 -69
- package/lib/constants/schedule.ts +71 -71
- package/lib/google/google-analytics-tracking.tsx +44 -0
- package/lib/{google-analytics.tsx → google/google-analytics.tsx} +97 -97
- package/lib/types.ts +235 -0
- package/lib/utils/compressImage.tsx +32 -0
- package/middleware.ts +46 -42
- package/netlify.toml +5 -5
- package/next.config.js +10 -10
- package/package.json +117 -116
- package/public/images/test.png +0 -0
- package/tailwind.config.ts +89 -89
- package/tsconfig.json +23 -23
- package/components/addOns/functional/BioEditor.tsx +0 -447
- package/components/addOns/functional/FileUploader.tsx +0 -295
- package/components/addOns/non-functional/FeaturesSection.tsx +0 -63
- package/components/types.ts +0 -50
- package/dist/.next/types/app/api/about/route.js +0 -52
- package/dist/.next/types/app/api/blog/route.js +0 -52
- package/dist/.next/types/app/api/files/route.js +0 -52
- package/dist/.next/types/app/api/schedule/route.js +0 -52
- package/dist/.next/types/app/api/sync-user/route.js +0 -52
- package/dist/.next/types/app/layout.js +0 -22
- package/dist/.next/types/app/page.js +0 -22
- package/dist/app/about/page.jsx +0 -258
- package/dist/app/adRequest/page.jsx +0 -531
- package/dist/app/analytics/page.jsx +0 -298
- package/dist/app/api/about/route.js +0 -285
- package/dist/app/api/adRequest/route.js +0 -440
- package/dist/app/api/analytics/[reportType]/route.js +0 -357
- package/dist/app/api/bio/route.js +0 -293
- package/dist/app/api/blog/route.js +0 -366
- package/dist/app/api/chat/route.js +0 -58
- package/dist/app/api/contact/route.js +0 -163
- package/dist/app/api/contacts/route.js +0 -234
- package/dist/app/api/files/route.js +0 -444
- package/dist/app/api/gallery-data/route.js +0 -719
- package/dist/app/api/schedule/route.js +0 -461
- package/dist/app/api/sync-user/route.js +0 -186
- package/dist/app/api/trial-request/route.js +0 -165
- package/dist/app/blog/[id]/page.jsx +0 -312
- package/dist/app/blog/page.jsx +0 -210
- package/dist/app/constants/about.js +0 -32
- package/dist/app/constants/adRequest.js +0 -113
- package/dist/app/constants/contact.js +0 -40
- package/dist/app/constants/faq.js +0 -36
- package/dist/app/constants/gallery.js +0 -42
- package/dist/app/constants/page.js +0 -69
- package/dist/app/constants/schedule.js +0 -71
- package/dist/app/contact/page.jsx +0 -119
- package/dist/app/faq/page.jsx +0 -97
- package/dist/app/gallery/page.jsx +0 -281
- package/dist/app/layout.jsx +0 -45
- package/dist/app/not-found.jsx +0 -14
- package/dist/app/page.jsx +0 -324
- package/dist/app/schedule/page.jsx +0 -500
- package/dist/components/addOns/functional/BioEditor.jsx +0 -187
- package/dist/components/addOns/functional/CalendlyWidget.jsx +0 -61
- package/dist/components/addOns/functional/ClassList.jsx +0 -158
- package/dist/components/addOns/functional/ClassPopup.jsx +0 -300
- package/dist/components/addOns/functional/ContactForm.jsx +0 -219
- package/dist/components/addOns/functional/FileUploader.jsx +0 -222
- package/dist/components/addOns/functional/ImageDescCarousel.jsx +0 -491
- package/dist/components/addOns/functional/NewUserAnalytics.jsx +0 -71
- package/dist/components/addOns/functional/ScheduleCarousel.jsx +0 -68
- package/dist/components/addOns/functional/aboutSections/AboutSection.jsx +0 -372
- package/dist/components/addOns/functional/aboutSections/constants/aboutSection.js +0 -65
- package/dist/components/addOns/functional/blogSections/BlogDashboard.jsx +0 -111
- package/dist/components/addOns/functional/blogSections/BlogFormPopUp.jsx +0 -465
- package/dist/components/addOns/functional/blogSections/BlogList.jsx +0 -170
- package/dist/components/addOns/functional/blogSections/BlogSidebar.jsx +0 -35
- package/dist/components/addOns/functional/blogSections/constants/blogDashboard.js +0 -28
- package/dist/components/addOns/functional/blogSections/constants/blogFormPopUp.js +0 -97
- package/dist/components/addOns/functional/blogSections/constants/blogList.js +0 -22
- package/dist/components/addOns/functional/blogSections/constants/blogSidebar.js +0 -15
- package/dist/components/addOns/functional/contactsDashboard/ContactsDashboard.jsx +0 -355
- package/dist/components/addOns/functional/contactsDashboard/constants/contactsDashboard.js +0 -70
- package/dist/components/addOns/functional/galleries/GalleryComplex.jsx +0 -605
- package/dist/components/addOns/functional/galleries/GallerySimple.jsx +0 -363
- package/dist/components/addOns/functional/galleries/constants/galleryComplex.js +0 -106
- package/dist/components/addOns/functional/galleries/constants/gallerySimple.js +0 -76
- package/dist/components/addOns/functional/schedules/ScheduleGridOne.jsx +0 -167
- package/dist/components/addOns/functional/schedules/ScheduleGridTwo.jsx +0 -100
- package/dist/components/addOns/functional/schedules/ScheduleGridTwoBasic.jsx +0 -97
- package/dist/components/addOns/functional/schedules/SchedulerForm.jsx +0 -188
- package/dist/components/addOns/functional/schedules/constants/ScheduleGridTwo.js +0 -40
- package/dist/components/addOns/functional/schedules/constants/ScheduleGridTwoBasic.js +0 -40
- package/dist/components/addOns/functional/schedules/constants/SchedulerForm.js +0 -65
- package/dist/components/addOns/functional/schedules/constants/scheduleGridOne.js +0 -54
- package/dist/components/addOns/non-functional/AnnouncementBanner.jsx +0 -24
- package/dist/components/addOns/non-functional/FeaturesSection.jsx +0 -38
- package/dist/components/addOns/non-functional/HeroSection.jsx +0 -71
- package/dist/components/addOns/non-functional/Heros/HeroSection.jsx +0 -71
- package/dist/components/addOns/non-functional/IconBubble.jsx +0 -36
- package/dist/components/addOns/non-functional/SampleCarousel.jsx +0 -114
- package/dist/components/addOns/non-functional/Testimonials.jsx +0 -177
- package/dist/components/addOns/non-functional/ThreeSetGallery.jsx +0 -40
- package/dist/components/addOns/non-functional/aboutSections/AboutSection.jsx +0 -35
- package/dist/components/addOns/non-functional/aboutSections/constants/aboutSection.js +0 -24
- package/dist/components/addOns/non-functional/imageCarousels/ProductSlider.jsx +0 -80
- package/dist/components/addOns/non-functional/imageCarousels/ProgramCarousel.jsx +0 -155
- package/dist/components/addOns/non-functional/imageCarousels/constants/programCarousel.js +0 -39
- package/dist/components/addOns/non-functional/imageCarousels/constants/programSlider.js +0 -36
- package/dist/components/addOns/non-functional/spinner.jsx +0 -13
- package/dist/components/footers/footer.jsx +0 -217
- package/dist/components/navBars/navbar.jsx +0 -159
- package/dist/components/other/accordion.jsx +0 -40
- package/dist/components/other/admin-menu.jsx +0 -34
- package/dist/components/other/alert-dialog.jsx +0 -64
- package/dist/components/other/alert.jsx +0 -41
- package/dist/components/other/aspect-ratio.jsx +0 -4
- package/dist/components/other/avatar.jsx +0 -31
- package/dist/components/other/badge.jsx +0 -32
- package/dist/components/other/breadcrumb.jsx +0 -57
- package/dist/components/other/button.jsx +0 -322
- package/dist/components/other/calendar.jsx +0 -43
- package/dist/components/other/card.jsx +0 -44
- package/dist/components/other/carousel.jsx +0 -140
- package/dist/components/other/chart.jsx +0 -182
- package/dist/components/other/checkbox.jsx +0 -26
- package/dist/components/other/collapsible.jsx +0 -6
- package/dist/components/other/command.jsx +0 -68
- package/dist/components/other/context-menu.jsx +0 -88
- package/dist/components/other/dialog.jsx +0 -60
- package/dist/components/other/drawer.jsx +0 -60
- package/dist/components/other/dropdown-menu.jsx +0 -90
- package/dist/components/other/form.jsx +0 -89
- package/dist/components/other/hover-card.jsx +0 -23
- package/dist/components/other/input-otp.jsx +0 -46
- package/dist/components/other/input.jsx +0 -19
- package/dist/components/other/label.jsx +0 -23
- package/dist/components/other/login-popup.jsx +0 -1
- package/dist/components/other/menubar.jsx +0 -96
- package/dist/components/other/mobile-icon.jsx +0 -11
- package/dist/components/other/navigation-menu.jsx +0 -62
- package/dist/components/other/pagination.jsx +0 -63
- package/dist/components/other/popover.jsx +0 -25
- package/dist/components/other/progress.jsx +0 -23
- package/dist/components/other/radio-group.jsx +0 -31
- package/dist/components/other/resizable.jsx +0 -29
- package/dist/components/other/scroll-area.jsx +0 -36
- package/dist/components/other/select.jsx +0 -83
- package/dist/components/other/separator.jsx +0 -21
- package/dist/components/other/sheet.jsx +0 -74
- package/dist/components/other/signup-popup.jsx +0 -1
- package/dist/components/other/skeleton.jsx +0 -17
- package/dist/components/other/slider.jsx +0 -26
- package/dist/components/other/social-icons.jsx +0 -15
- package/dist/components/other/sonner.jsx +0 -27
- package/dist/components/other/switch.jsx +0 -23
- package/dist/components/other/table.jsx +0 -56
- package/dist/components/other/tabs.jsx +0 -32
- package/dist/components/other/textarea.jsx +0 -19
- package/dist/components/other/toast.jsx +0 -58
- package/dist/components/other/toaster.jsx +0 -31
- package/dist/components/other/toggle-group.jsx +0 -41
- package/dist/components/other/toggle.jsx +0 -39
- package/dist/components/other/tooltip.jsx +0 -24
- package/dist/components/theme-provider.jsx +0 -18
- package/dist/components/types.js +0 -1
- package/dist/hooks/use-toast.js +0 -135
- package/dist/lib/auth-context.jsx +0 -144
- package/dist/lib/constants/about.js +0 -32
- package/dist/lib/constants/adRequest.js +0 -113
- package/dist/lib/constants/contact.js +0 -40
- package/dist/lib/constants/faq.js +0 -36
- package/dist/lib/constants/gallery.js +0 -42
- package/dist/lib/constants/page.js +0 -69
- package/dist/lib/constants/schedule.js +0 -71
- package/dist/lib/google-analytics.jsx +0 -148
- package/dist/lib/utils.js +0 -9
- package/dist/lib/verify-user.js +0 -142
- package/dist/middleware.js +0 -37
- package/dist/tailwind.config.js +0 -86
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/lib/auth-context.tsx +0 -131
- package/lib/verify-user.ts +0 -118
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
// components/addOns/functional/schedules/constants/scheduleGridTwo.ts
|
|
2
|
-
// Constants for hardcoded text in ScheduleGridTwo.tsx, organized by purpose
|
|
3
|
-
|
|
4
|
-
export const SCHEDULE_GRID_TWO = {
|
|
5
|
-
// UI Text for ScheduleGridTwo
|
|
6
|
-
UI: {
|
|
7
|
-
// Heading for schedule section
|
|
8
|
-
CLASS_SCHEDULE_HEADING: "Class Schedule",
|
|
9
|
-
// Text when no classes exist for a day
|
|
10
|
-
NO_CLASSES_MESSAGE: "No classes",
|
|
11
|
-
// Footer text before phone number
|
|
12
|
-
COMPLIMENTARY_CLASS_TEXT: "Your first class is complimentary! Questions? Call ",
|
|
13
|
-
// Phone number in footer link
|
|
14
|
-
PHONE_NUMBER: "123-456-7892",
|
|
15
|
-
// Footer disclaimer
|
|
16
|
-
SCHEDULE_DISCLAIMER: "*Management reserves the right to cancel or alter class schedules based on attendance.",
|
|
17
|
-
// Days of the week for headers
|
|
18
|
-
DAYS_OF_WEEK: [
|
|
19
|
-
"Monday",
|
|
20
|
-
"Tuesday",
|
|
21
|
-
"Wednesday",
|
|
22
|
-
"Thursday",
|
|
23
|
-
"Friday",
|
|
24
|
-
"Saturday",
|
|
25
|
-
"Sunday",
|
|
26
|
-
],
|
|
27
|
-
// Hardcoded age group for popup
|
|
28
|
-
ALL_AGES_TEXT: "All Ages",
|
|
29
|
-
// DeleteIconButton aria-label template
|
|
30
|
-
DELETE_BUTTON_ARIA: "Delete ${cls.name} class",
|
|
31
|
-
},
|
|
32
|
-
// Button Text for ScheduleGridTwo
|
|
33
|
-
BUTTONS: {
|
|
34
|
-
// AddButton text for adding new class
|
|
35
|
-
ADD_NEW_CLASS_BUTTON: "Add New Class",
|
|
36
|
-
},
|
|
37
|
-
// Error Messages for ScheduleGridTwo
|
|
38
|
-
ERRORS: {
|
|
39
|
-
// No hardcoded errors
|
|
40
|
-
},
|
|
1
|
+
// components/addOns/functional/schedules/constants/scheduleGridTwo.ts
|
|
2
|
+
// Constants for hardcoded text in ScheduleGridTwo.tsx, organized by purpose
|
|
3
|
+
|
|
4
|
+
export const SCHEDULE_GRID_TWO = {
|
|
5
|
+
// UI Text for ScheduleGridTwo
|
|
6
|
+
UI: {
|
|
7
|
+
// Heading for schedule section
|
|
8
|
+
CLASS_SCHEDULE_HEADING: "Class Schedule",
|
|
9
|
+
// Text when no classes exist for a day
|
|
10
|
+
NO_CLASSES_MESSAGE: "No classes",
|
|
11
|
+
// Footer text before phone number
|
|
12
|
+
COMPLIMENTARY_CLASS_TEXT: "Your first class is complimentary! Questions? Call ",
|
|
13
|
+
// Phone number in footer link
|
|
14
|
+
PHONE_NUMBER: "123-456-7892",
|
|
15
|
+
// Footer disclaimer
|
|
16
|
+
SCHEDULE_DISCLAIMER: "*Management reserves the right to cancel or alter class schedules based on attendance.",
|
|
17
|
+
// Days of the week for headers
|
|
18
|
+
DAYS_OF_WEEK: [
|
|
19
|
+
"Monday",
|
|
20
|
+
"Tuesday",
|
|
21
|
+
"Wednesday",
|
|
22
|
+
"Thursday",
|
|
23
|
+
"Friday",
|
|
24
|
+
"Saturday",
|
|
25
|
+
"Sunday",
|
|
26
|
+
],
|
|
27
|
+
// Hardcoded age group for popup
|
|
28
|
+
ALL_AGES_TEXT: "All Ages",
|
|
29
|
+
// DeleteIconButton aria-label template
|
|
30
|
+
DELETE_BUTTON_ARIA: "Delete ${cls.name} class",
|
|
31
|
+
},
|
|
32
|
+
// Button Text for ScheduleGridTwo
|
|
33
|
+
BUTTONS: {
|
|
34
|
+
// AddButton text for adding new class
|
|
35
|
+
ADD_NEW_CLASS_BUTTON: "Add New Class",
|
|
36
|
+
},
|
|
37
|
+
// Error Messages for ScheduleGridTwo
|
|
38
|
+
ERRORS: {
|
|
39
|
+
// No hardcoded errors
|
|
40
|
+
},
|
|
41
41
|
};
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
// components/addOns/functional/schedules/constants/scheduleGridTwoBasic.ts
|
|
2
|
-
// Constants for hardcoded text in ScheduleGridTwoBasic.tsx, organized by purpose
|
|
3
|
-
|
|
4
|
-
export const SCHEDULE_GRID_TWO_BASIC = {
|
|
5
|
-
// UI Text for ScheduleGridTwoBasic
|
|
6
|
-
UI: {
|
|
7
|
-
// Heading for schedule section
|
|
8
|
-
CLASS_SCHEDULE_HEADING: "Class Schedule",
|
|
9
|
-
// Text when no classes exist for a day
|
|
10
|
-
NO_CLASSES_MESSAGE: "No classes",
|
|
11
|
-
// Footer text before phone number
|
|
12
|
-
COMPLIMENTARY_CLASS_TEXT: "Your first class is complimentary! Questions? Call ",
|
|
13
|
-
// Phone number in footer link
|
|
14
|
-
PHONE_NUMBER: "123-456-7892",
|
|
15
|
-
// Footer disclaimer
|
|
16
|
-
SCHEDULE_DISCLAIMER: "*Management reserves the right to cancel or alter class schedules based on attendance.",
|
|
17
|
-
// Days of the week for headers
|
|
18
|
-
DAYS_OF_WEEK: [
|
|
19
|
-
"Monday",
|
|
20
|
-
"Tuesday",
|
|
21
|
-
"Wednesday",
|
|
22
|
-
"Thursday",
|
|
23
|
-
"Friday",
|
|
24
|
-
"Saturday",
|
|
25
|
-
"Sunday",
|
|
26
|
-
],
|
|
27
|
-
// Hardcoded age group for popup
|
|
28
|
-
ALL_AGES_TEXT: "All Ages",
|
|
29
|
-
// DeleteIconButton aria-label template
|
|
30
|
-
DELETE_BUTTON_ARIA: "Delete ${cls.name} class",
|
|
31
|
-
},
|
|
32
|
-
// Button Text for ScheduleGridTwoBasic
|
|
33
|
-
BUTTONS: {
|
|
34
|
-
// AddButton text for adding new class
|
|
35
|
-
ADD_NEW_CLASS_BUTTON: "Add New Class",
|
|
36
|
-
},
|
|
37
|
-
// Error Messages for ScheduleGridTwoBasic
|
|
38
|
-
ERRORS: {
|
|
39
|
-
// No hardcoded errors
|
|
40
|
-
},
|
|
1
|
+
// components/addOns/functional/schedules/constants/scheduleGridTwoBasic.ts
|
|
2
|
+
// Constants for hardcoded text in ScheduleGridTwoBasic.tsx, organized by purpose
|
|
3
|
+
|
|
4
|
+
export const SCHEDULE_GRID_TWO_BASIC = {
|
|
5
|
+
// UI Text for ScheduleGridTwoBasic
|
|
6
|
+
UI: {
|
|
7
|
+
// Heading for schedule section
|
|
8
|
+
CLASS_SCHEDULE_HEADING: "Class Schedule",
|
|
9
|
+
// Text when no classes exist for a day
|
|
10
|
+
NO_CLASSES_MESSAGE: "No classes",
|
|
11
|
+
// Footer text before phone number
|
|
12
|
+
COMPLIMENTARY_CLASS_TEXT: "Your first class is complimentary! Questions? Call ",
|
|
13
|
+
// Phone number in footer link
|
|
14
|
+
PHONE_NUMBER: "123-456-7892",
|
|
15
|
+
// Footer disclaimer
|
|
16
|
+
SCHEDULE_DISCLAIMER: "*Management reserves the right to cancel or alter class schedules based on attendance.",
|
|
17
|
+
// Days of the week for headers
|
|
18
|
+
DAYS_OF_WEEK: [
|
|
19
|
+
"Monday",
|
|
20
|
+
"Tuesday",
|
|
21
|
+
"Wednesday",
|
|
22
|
+
"Thursday",
|
|
23
|
+
"Friday",
|
|
24
|
+
"Saturday",
|
|
25
|
+
"Sunday",
|
|
26
|
+
],
|
|
27
|
+
// Hardcoded age group for popup
|
|
28
|
+
ALL_AGES_TEXT: "All Ages",
|
|
29
|
+
// DeleteIconButton aria-label template
|
|
30
|
+
DELETE_BUTTON_ARIA: "Delete ${cls.name} class",
|
|
31
|
+
},
|
|
32
|
+
// Button Text for ScheduleGridTwoBasic
|
|
33
|
+
BUTTONS: {
|
|
34
|
+
// AddButton text for adding new class
|
|
35
|
+
ADD_NEW_CLASS_BUTTON: "Add New Class",
|
|
36
|
+
},
|
|
37
|
+
// Error Messages for ScheduleGridTwoBasic
|
|
38
|
+
ERRORS: {
|
|
39
|
+
// No hardcoded errors
|
|
40
|
+
},
|
|
41
41
|
};
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
// components/addOns/functional/schedules/constants/schedulerForm.ts
|
|
2
|
-
// Constants for hardcoded text in Schedule.tsx (SchedulerForm), organized by purpose
|
|
3
|
-
|
|
4
|
-
export const SCHEDULER_FORM = {
|
|
5
|
-
// UI Text for SchedulerForm
|
|
6
|
-
UI: {
|
|
7
|
-
// Heading for edit class modal
|
|
8
|
-
EDIT_CLASS_HEADING: "Edit Class",
|
|
9
|
-
// Heading for add new class modal
|
|
10
|
-
ADD_NEW_CLASS_HEADING: "Add New Class",
|
|
11
|
-
// Label for class name input
|
|
12
|
-
CLASS_NAME_LABEL: "Class Name",
|
|
13
|
-
// Placeholder for class name input
|
|
14
|
-
CLASS_NAME_PLACEHOLDER: "Enter class name",
|
|
15
|
-
// Label for start time inputs
|
|
16
|
-
START_TIME_LABEL: "Start Time",
|
|
17
|
-
// Default option for hour select
|
|
18
|
-
HOUR_OPTION: "Hour",
|
|
19
|
-
// Default option for minute select
|
|
20
|
-
MINUTE_OPTION: "Minute",
|
|
21
|
-
// Options for period select
|
|
22
|
-
AM_OPTION: "AM",
|
|
23
|
-
PM_OPTION: "PM",
|
|
24
|
-
// Label for end time inputs
|
|
25
|
-
END_TIME_LABEL: "End Time",
|
|
26
|
-
// Label for days of week checkboxes
|
|
27
|
-
DAYS_OF_WEEK_LABEL: "Days of the Week",
|
|
28
|
-
// Checkbox labels for days of the week
|
|
29
|
-
DAYS_OF_WEEK: [
|
|
30
|
-
{ value: 1, label: "Monday" },
|
|
31
|
-
{ value: 2, label: "Tuesday" },
|
|
32
|
-
{ value: 3, label: "Wednesday" },
|
|
33
|
-
{ value: 4, label: "Thursday" },
|
|
34
|
-
{ value: 5, label: "Friday" },
|
|
35
|
-
{ value: 6, label: "Saturday" },
|
|
36
|
-
{ value: 7, label: "Sunday" },
|
|
37
|
-
],
|
|
38
|
-
// Label for class description textarea
|
|
39
|
-
CLASS_DESCRIPTION_LABEL: "Class Description (optional)",
|
|
40
|
-
// Placeholder for class description textarea
|
|
41
|
-
CLASS_DESCRIPTION_PLACEHOLDER: "Enter class description",
|
|
42
|
-
// Heading for delete confirmation modal
|
|
43
|
-
DELETE_CONFIRMATION_HEADING: "Confirm Deletion",
|
|
44
|
-
// Text in delete confirmation modal
|
|
45
|
-
DELETE_CONFIRMATION_MESSAGE: "Are you sure you want to delete this class? This action cannot be undone.",
|
|
46
|
-
},
|
|
47
|
-
// Button Text for SchedulerForm
|
|
48
|
-
BUTTONS: {
|
|
49
|
-
// AddButton text when loading
|
|
50
|
-
SAVING_BUTTON: "Saving...",
|
|
51
|
-
// AddButton text when editing a class
|
|
52
|
-
UPDATE_BUTTON: "Update",
|
|
53
|
-
// AddButton text when adding a new class
|
|
54
|
-
ADD_BUTTON: "Add",
|
|
55
|
-
// DeleteButton text when loading
|
|
56
|
-
DELETING_BUTTON: "Deleting...",
|
|
57
|
-
// DeleteButton text for delete confirmation
|
|
58
|
-
DELETE_BUTTON: "Delete",
|
|
59
|
-
// CancelButton text for both modals
|
|
60
|
-
CANCEL_BUTTON: "Cancel",
|
|
61
|
-
},
|
|
62
|
-
// Error Messages for SchedulerForm
|
|
63
|
-
ERRORS: {
|
|
64
|
-
// No hardcoded errors
|
|
65
|
-
},
|
|
1
|
+
// components/addOns/functional/schedules/constants/schedulerForm.ts
|
|
2
|
+
// Constants for hardcoded text in Schedule.tsx (SchedulerForm), organized by purpose
|
|
3
|
+
|
|
4
|
+
export const SCHEDULER_FORM = {
|
|
5
|
+
// UI Text for SchedulerForm
|
|
6
|
+
UI: {
|
|
7
|
+
// Heading for edit class modal
|
|
8
|
+
EDIT_CLASS_HEADING: "Edit Class",
|
|
9
|
+
// Heading for add new class modal
|
|
10
|
+
ADD_NEW_CLASS_HEADING: "Add New Class",
|
|
11
|
+
// Label for class name input
|
|
12
|
+
CLASS_NAME_LABEL: "Class Name",
|
|
13
|
+
// Placeholder for class name input
|
|
14
|
+
CLASS_NAME_PLACEHOLDER: "Enter class name",
|
|
15
|
+
// Label for start time inputs
|
|
16
|
+
START_TIME_LABEL: "Start Time",
|
|
17
|
+
// Default option for hour select
|
|
18
|
+
HOUR_OPTION: "Hour",
|
|
19
|
+
// Default option for minute select
|
|
20
|
+
MINUTE_OPTION: "Minute",
|
|
21
|
+
// Options for period select
|
|
22
|
+
AM_OPTION: "AM",
|
|
23
|
+
PM_OPTION: "PM",
|
|
24
|
+
// Label for end time inputs
|
|
25
|
+
END_TIME_LABEL: "End Time",
|
|
26
|
+
// Label for days of week checkboxes
|
|
27
|
+
DAYS_OF_WEEK_LABEL: "Days of the Week",
|
|
28
|
+
// Checkbox labels for days of the week
|
|
29
|
+
DAYS_OF_WEEK: [
|
|
30
|
+
{ value: 1, label: "Monday" },
|
|
31
|
+
{ value: 2, label: "Tuesday" },
|
|
32
|
+
{ value: 3, label: "Wednesday" },
|
|
33
|
+
{ value: 4, label: "Thursday" },
|
|
34
|
+
{ value: 5, label: "Friday" },
|
|
35
|
+
{ value: 6, label: "Saturday" },
|
|
36
|
+
{ value: 7, label: "Sunday" },
|
|
37
|
+
],
|
|
38
|
+
// Label for class description textarea
|
|
39
|
+
CLASS_DESCRIPTION_LABEL: "Class Description (optional)",
|
|
40
|
+
// Placeholder for class description textarea
|
|
41
|
+
CLASS_DESCRIPTION_PLACEHOLDER: "Enter class description",
|
|
42
|
+
// Heading for delete confirmation modal
|
|
43
|
+
DELETE_CONFIRMATION_HEADING: "Confirm Deletion",
|
|
44
|
+
// Text in delete confirmation modal
|
|
45
|
+
DELETE_CONFIRMATION_MESSAGE: "Are you sure you want to delete this class? This action cannot be undone.",
|
|
46
|
+
},
|
|
47
|
+
// Button Text for SchedulerForm
|
|
48
|
+
BUTTONS: {
|
|
49
|
+
// AddButton text when loading
|
|
50
|
+
SAVING_BUTTON: "Saving...",
|
|
51
|
+
// AddButton text when editing a class
|
|
52
|
+
UPDATE_BUTTON: "Update",
|
|
53
|
+
// AddButton text when adding a new class
|
|
54
|
+
ADD_BUTTON: "Add",
|
|
55
|
+
// DeleteButton text when loading
|
|
56
|
+
DELETING_BUTTON: "Deleting...",
|
|
57
|
+
// DeleteButton text for delete confirmation
|
|
58
|
+
DELETE_BUTTON: "Delete",
|
|
59
|
+
// CancelButton text for both modals
|
|
60
|
+
CANCEL_BUTTON: "Cancel",
|
|
61
|
+
},
|
|
62
|
+
// Error Messages for SchedulerForm
|
|
63
|
+
ERRORS: {
|
|
64
|
+
// No hardcoded errors
|
|
65
|
+
},
|
|
66
66
|
};
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
// components/addOns/functional/schedules/constants/scheduleGridOne.ts
|
|
2
|
-
// Constants for hardcoded text in ScheduleGridOne.tsx, organized by purpose
|
|
3
|
-
|
|
4
|
-
export const SCHEDULE_GRID_ONE = {
|
|
5
|
-
// UI Text for ScheduleGridOne
|
|
6
|
-
UI: {
|
|
7
|
-
// Label for search input
|
|
8
|
-
SEARCH_LABEL: "Search by Class Name",
|
|
9
|
-
// Placeholder for search input
|
|
10
|
-
SEARCH_PLACEHOLDER: "Search classes...",
|
|
11
|
-
// Label for time filter select
|
|
12
|
-
TIME_FILTER_LABEL: "Time of Day",
|
|
13
|
-
// Default option for time filter select
|
|
14
|
-
ALL_TIMES_OPTION: "All Times",
|
|
15
|
-
// Time filter options
|
|
16
|
-
MORNING_OPTION: "Morning (Before 12:00 PM)",
|
|
17
|
-
AFTERNOON_OPTION: "Afternoon (12:00 PM - 5:00 PM)",
|
|
18
|
-
EVENING_OPTION: "Evening (After 5:00 PM)",
|
|
19
|
-
// Heading for schedule section
|
|
20
|
-
CLASS_SCHEDULE_HEADING: "Class Schedule",
|
|
21
|
-
// Text when no classes exist for a day
|
|
22
|
-
NO_CLASSES_MESSAGE: "No classes",
|
|
23
|
-
// Footer text before phone number
|
|
24
|
-
COMPLIMENTARY_CLASS_TEXT: "Your first class is complimentary! Questions? Call ",
|
|
25
|
-
// Phone number in footer link
|
|
26
|
-
PHONE_NUMBER: "123-456-7892",
|
|
27
|
-
// Footer disclaimer
|
|
28
|
-
SCHEDULE_DISCLAIMER: "*Management reserves the right to cancel or alter class schedules based on attendance.",
|
|
29
|
-
// Days of the week for headers
|
|
30
|
-
DAYS_OF_WEEK: [
|
|
31
|
-
"Monday",
|
|
32
|
-
"Tuesday",
|
|
33
|
-
"Wednesday",
|
|
34
|
-
"Thursday",
|
|
35
|
-
"Friday",
|
|
36
|
-
"Saturday",
|
|
37
|
-
"Sunday",
|
|
38
|
-
],
|
|
39
|
-
// Hardcoded age group for popup
|
|
40
|
-
ALL_AGES_TEXT: "All Ages",
|
|
41
|
-
// DeleteIconButton aria-label template
|
|
42
|
-
DELETE_BUTTON_ARIA: "Delete ${cls.name} class",
|
|
43
|
-
},
|
|
44
|
-
// Button Text for ScheduleGridOne
|
|
45
|
-
BUTTONS: {
|
|
46
|
-
// SubmitButton text for resetting filters
|
|
47
|
-
RESET_FILTERS_BUTTON: "Reset Filters",
|
|
48
|
-
// AddButton text for adding new class
|
|
49
|
-
ADD_NEW_CLASS_BUTTON: "Add New Class",
|
|
50
|
-
},
|
|
51
|
-
// Error Messages for ScheduleGridOne
|
|
52
|
-
ERRORS: {
|
|
53
|
-
// No hardcoded errors
|
|
54
|
-
},
|
|
1
|
+
// components/addOns/functional/schedules/constants/scheduleGridOne.ts
|
|
2
|
+
// Constants for hardcoded text in ScheduleGridOne.tsx, organized by purpose
|
|
3
|
+
|
|
4
|
+
export const SCHEDULE_GRID_ONE = {
|
|
5
|
+
// UI Text for ScheduleGridOne
|
|
6
|
+
UI: {
|
|
7
|
+
// Label for search input
|
|
8
|
+
SEARCH_LABEL: "Search by Class Name",
|
|
9
|
+
// Placeholder for search input
|
|
10
|
+
SEARCH_PLACEHOLDER: "Search classes...",
|
|
11
|
+
// Label for time filter select
|
|
12
|
+
TIME_FILTER_LABEL: "Time of Day",
|
|
13
|
+
// Default option for time filter select
|
|
14
|
+
ALL_TIMES_OPTION: "All Times",
|
|
15
|
+
// Time filter options
|
|
16
|
+
MORNING_OPTION: "Morning (Before 12:00 PM)",
|
|
17
|
+
AFTERNOON_OPTION: "Afternoon (12:00 PM - 5:00 PM)",
|
|
18
|
+
EVENING_OPTION: "Evening (After 5:00 PM)",
|
|
19
|
+
// Heading for schedule section
|
|
20
|
+
CLASS_SCHEDULE_HEADING: "Class Schedule",
|
|
21
|
+
// Text when no classes exist for a day
|
|
22
|
+
NO_CLASSES_MESSAGE: "No classes",
|
|
23
|
+
// Footer text before phone number
|
|
24
|
+
COMPLIMENTARY_CLASS_TEXT: "Your first class is complimentary! Questions? Call ",
|
|
25
|
+
// Phone number in footer link
|
|
26
|
+
PHONE_NUMBER: "123-456-7892",
|
|
27
|
+
// Footer disclaimer
|
|
28
|
+
SCHEDULE_DISCLAIMER: "*Management reserves the right to cancel or alter class schedules based on attendance.",
|
|
29
|
+
// Days of the week for headers
|
|
30
|
+
DAYS_OF_WEEK: [
|
|
31
|
+
"Monday",
|
|
32
|
+
"Tuesday",
|
|
33
|
+
"Wednesday",
|
|
34
|
+
"Thursday",
|
|
35
|
+
"Friday",
|
|
36
|
+
"Saturday",
|
|
37
|
+
"Sunday",
|
|
38
|
+
],
|
|
39
|
+
// Hardcoded age group for popup
|
|
40
|
+
ALL_AGES_TEXT: "All Ages",
|
|
41
|
+
// DeleteIconButton aria-label template
|
|
42
|
+
DELETE_BUTTON_ARIA: "Delete ${cls.name} class",
|
|
43
|
+
},
|
|
44
|
+
// Button Text for ScheduleGridOne
|
|
45
|
+
BUTTONS: {
|
|
46
|
+
// SubmitButton text for resetting filters
|
|
47
|
+
RESET_FILTERS_BUTTON: "Reset Filters",
|
|
48
|
+
// AddButton text for adding new class
|
|
49
|
+
ADD_NEW_CLASS_BUTTON: "Add New Class",
|
|
50
|
+
},
|
|
51
|
+
// Error Messages for ScheduleGridOne
|
|
52
|
+
ERRORS: {
|
|
53
|
+
// No hardcoded errors
|
|
54
|
+
},
|
|
55
55
|
};
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { motion } from "framer-motion";
|
|
4
|
-
import { X } from "lucide-react";
|
|
5
|
-
import { useState } from "react";
|
|
6
|
-
|
|
7
|
-
export default function AnnouncementBanner() {
|
|
8
|
-
const [isVisible, setIsVisible] = useState(true);
|
|
9
|
-
|
|
10
|
-
if (!isVisible) return null;
|
|
11
|
-
|
|
12
|
-
return (
|
|
13
|
-
<motion.div
|
|
14
|
-
className="fixed top-0 left-0 right-0 bg-blue-500/80 backdrop-blur-sm text-white py-3 sm:py-6 px-4 sm:px-6 z-50 shadow-md"
|
|
15
|
-
style={{
|
|
16
|
-
maskImage: "linear-gradient(to right, transparent 0%, black 20%, black 80%, transparent 100%)",
|
|
17
|
-
WebkitMaskImage: "linear-gradient(to right, transparent 0%, black 20%, black 80%, transparent 100%)",
|
|
18
|
-
}}
|
|
19
|
-
initial={{ y: -100, opacity: 0 }}
|
|
20
|
-
animate={{ y: 0, opacity: 1 }}
|
|
21
|
-
exit={{ y: -100, opacity: 0 }}
|
|
22
|
-
transition={{ duration: 0.5, ease: "easeOut" }}
|
|
23
|
-
>
|
|
24
|
-
<div className="max-w-7xl mx-auto flex items-center justify-between relative pr-10 sm:pr-14">
|
|
25
|
-
<p className="text-xs sm:text-sm md:text-base font-medium text-center flex-1">
|
|
26
|
-
We will be closed this Friday and Saturday (July 4–5) in observance of Independence Day.
|
|
27
|
-
</p>
|
|
28
|
-
<button
|
|
29
|
-
onClick={() => setIsVisible(false)}
|
|
30
|
-
className="absolute right-2 sm:right-4 bg-blue-600/50 hover:bg-blue-700/70 text-white rounded-full p-1.5 sm:p-2 focus:outline-none focus:ring-2 focus:ring-blue-300 transition-colors"
|
|
31
|
-
aria-label="Close announcement"
|
|
32
|
-
>
|
|
33
|
-
<X className="w-5 h-5 sm:w-8 sm:h-8" />
|
|
34
|
-
</button>
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<style jsx>{`
|
|
38
|
-
.gradient-text {
|
|
39
|
-
background: linear-gradient(45deg, #80ff80 25%, #80ff80 50%, #00b7eb 85%, #00b7eb 75%);
|
|
40
|
-
-webkit-background-clip: text;
|
|
41
|
-
background-clip: text;
|
|
42
|
-
color: transparent;
|
|
43
|
-
}
|
|
44
|
-
`}</style>
|
|
45
|
-
</motion.div>
|
|
46
|
-
);
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { motion } from "framer-motion";
|
|
4
|
+
import { X } from "lucide-react";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
|
|
7
|
+
export default function AnnouncementBanner() {
|
|
8
|
+
const [isVisible, setIsVisible] = useState(true);
|
|
9
|
+
|
|
10
|
+
if (!isVisible) return null;
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<motion.div
|
|
14
|
+
className="fixed top-0 left-0 right-0 bg-blue-500/80 backdrop-blur-sm text-white py-3 sm:py-6 px-4 sm:px-6 z-50 shadow-md"
|
|
15
|
+
style={{
|
|
16
|
+
maskImage: "linear-gradient(to right, transparent 0%, black 20%, black 80%, transparent 100%)",
|
|
17
|
+
WebkitMaskImage: "linear-gradient(to right, transparent 0%, black 20%, black 80%, transparent 100%)",
|
|
18
|
+
}}
|
|
19
|
+
initial={{ y: -100, opacity: 0 }}
|
|
20
|
+
animate={{ y: 0, opacity: 1 }}
|
|
21
|
+
exit={{ y: -100, opacity: 0 }}
|
|
22
|
+
transition={{ duration: 0.5, ease: "easeOut" }}
|
|
23
|
+
>
|
|
24
|
+
<div className="max-w-7xl mx-auto flex items-center justify-between relative pr-10 sm:pr-14">
|
|
25
|
+
<p className="text-xs sm:text-sm md:text-base font-medium text-center flex-1">
|
|
26
|
+
We will be closed this Friday and Saturday (July 4–5) in observance of Independence Day.
|
|
27
|
+
</p>
|
|
28
|
+
<button
|
|
29
|
+
onClick={() => setIsVisible(false)}
|
|
30
|
+
className="absolute right-2 sm:right-4 bg-blue-600/50 hover:bg-blue-700/70 text-white rounded-full p-1.5 sm:p-2 focus:outline-none focus:ring-2 focus:ring-blue-300 transition-colors"
|
|
31
|
+
aria-label="Close announcement"
|
|
32
|
+
>
|
|
33
|
+
<X className="w-5 h-5 sm:w-8 sm:h-8" />
|
|
34
|
+
</button>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<style jsx>{`
|
|
38
|
+
.gradient-text {
|
|
39
|
+
background: linear-gradient(45deg, #80ff80 25%, #80ff80 50%, #00b7eb 85%, #00b7eb 75%);
|
|
40
|
+
-webkit-background-clip: text;
|
|
41
|
+
background-clip: text;
|
|
42
|
+
color: transparent;
|
|
43
|
+
}
|
|
44
|
+
`}</style>
|
|
45
|
+
</motion.div>
|
|
46
|
+
);
|
|
47
47
|
}
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useState, useEffect } from 'react';
|
|
4
|
-
import { ScrollToTopButton, PhoneButton } from '@/components/other/button';
|
|
5
|
-
|
|
6
|
-
export default function IconBubble() {
|
|
7
|
-
const [isPhoneHovered, setIsPhoneHovered] = useState(false);
|
|
8
|
-
const [showScrollButton, setShowScrollButton] = useState(false);
|
|
9
|
-
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
const handleScroll = () => {
|
|
12
|
-
if (window.scrollY > 200) {
|
|
13
|
-
setShowScrollButton(true);
|
|
14
|
-
} else {
|
|
15
|
-
setShowScrollButton(false);
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
window.addEventListener('scroll', handleScroll);
|
|
19
|
-
return () => window.removeEventListener('scroll', handleScroll);
|
|
20
|
-
}, []);
|
|
21
|
-
|
|
22
|
-
const handleScrollToTop = () => {
|
|
23
|
-
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<div className="fixed bottom-4 right-4 z-50 flex flex-col space-y-4">
|
|
28
|
-
{/* Scroll to Top Button */}
|
|
29
|
-
{showScrollButton && (
|
|
30
|
-
<ScrollToTopButton onClick={handleScrollToTop} />
|
|
31
|
-
)}
|
|
32
|
-
|
|
33
|
-
{/* Phone Button */}
|
|
34
|
-
<div
|
|
35
|
-
className="relative flex items-center"
|
|
36
|
-
onMouseEnter={() => setIsPhoneHovered(true)}
|
|
37
|
-
onMouseLeave={() => setIsPhoneHovered(false)}
|
|
38
|
-
>
|
|
39
|
-
<a href="tel:1234567891" aria-label="Call us">
|
|
40
|
-
<PhoneButton />
|
|
41
|
-
</a>
|
|
42
|
-
{isPhoneHovered && (
|
|
43
|
-
<div className="absolute right-20 bg-gray-900 text-white px-4 py-2 rounded-md text-base font-medium shadow-lg whitespace-nowrap">
|
|
44
|
-
(123) 456-7891
|
|
45
|
-
</div>
|
|
46
|
-
)}
|
|
47
|
-
</div>
|
|
48
|
-
</div>
|
|
49
|
-
);
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { ScrollToTopButton, PhoneButton } from '@/components/other/button';
|
|
5
|
+
|
|
6
|
+
export default function IconBubble() {
|
|
7
|
+
const [isPhoneHovered, setIsPhoneHovered] = useState(false);
|
|
8
|
+
const [showScrollButton, setShowScrollButton] = useState(false);
|
|
9
|
+
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
const handleScroll = () => {
|
|
12
|
+
if (window.scrollY > 200) {
|
|
13
|
+
setShowScrollButton(true);
|
|
14
|
+
} else {
|
|
15
|
+
setShowScrollButton(false);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
window.addEventListener('scroll', handleScroll);
|
|
19
|
+
return () => window.removeEventListener('scroll', handleScroll);
|
|
20
|
+
}, []);
|
|
21
|
+
|
|
22
|
+
const handleScrollToTop = () => {
|
|
23
|
+
window.scrollTo({ top: 0, behavior: 'smooth' });
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div className="fixed bottom-4 right-4 z-50 flex flex-col space-y-4">
|
|
28
|
+
{/* Scroll to Top Button */}
|
|
29
|
+
{showScrollButton && (
|
|
30
|
+
<ScrollToTopButton onClick={handleScrollToTop} />
|
|
31
|
+
)}
|
|
32
|
+
|
|
33
|
+
{/* Phone Button */}
|
|
34
|
+
<div
|
|
35
|
+
className="relative flex items-center"
|
|
36
|
+
onMouseEnter={() => setIsPhoneHovered(true)}
|
|
37
|
+
onMouseLeave={() => setIsPhoneHovered(false)}
|
|
38
|
+
>
|
|
39
|
+
<a href="tel:1234567891" aria-label="Call us">
|
|
40
|
+
<PhoneButton />
|
|
41
|
+
</a>
|
|
42
|
+
{isPhoneHovered && (
|
|
43
|
+
<div className="absolute right-20 bg-gray-900 text-white px-4 py-2 rounded-md text-base font-medium shadow-lg whitespace-nowrap">
|
|
44
|
+
(123) 456-7891
|
|
45
|
+
</div>
|
|
46
|
+
)}
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
50
|
}
|