From b9521827041d7c616d23a45c9e54a37e5a30a1a2 Mon Sep 17 00:00:00 2001 From: fatihbaltaci Date: Mon, 13 Jan 2025 15:53:50 +0300 Subject: [PATCH] init gurubase frontend --- .../frontend-docker-image-dockerhub.yml | 143 + .github/workflows/frontend-snyk-scan.yml | 20 + src/gurubase-frontend/.dockerignore | 9 + src/gurubase-frontend/.gitignore | 48 + src/gurubase-frontend/.prettierrc | 21 + src/gurubase-frontend/.yarnrc.yml | 3 + src/gurubase-frontend/Dockerfile | 67 + src/gurubase-frontend/Dockerfile.selfhosted | 67 + src/gurubase-frontend/Dockerfile.staging | 67 + src/gurubase-frontend/README.md | 3 + src/gurubase-frontend/components.json | 20 + .../docker_build_push_selfhosted_cloud.sh | 16 + src/gurubase-frontend/eslint.config.mjs | 128 + src/gurubase-frontend/jsconfig.json | 8 + src/gurubase-frontend/next.config.mjs | 179 + src/gurubase-frontend/package.json | 106 + src/gurubase-frontend/postcss.config.mjs | 8 + src/gurubase-frontend/public/favicon.ico | Bin 0 -> 4414 bytes .../public/images/guru-base.svg | 4 + .../public/images/polygon-repeat.png | Bin 0 -> 4753 bytes .../public/kubernetes-guru-cover.png | Bin 0 -> 351175 bytes src/gurubase-frontend/sentry.client.config.js | 14 + src/gurubase-frontend/sentry.edge.config.js | 15 + src/gurubase-frontend/sentry.server.config.js | 14 + .../src/app/StoreProvider.js | 14 + src/gurubase-frontend/src/app/actions.js | 670 + .../src/app/api/auth/[auth0]/route.js | 7 + .../src/app/binge-history/page.js | 35 + .../src/app/fonts/gilroy-semibold.ttf | Bin 0 -> 83948 bytes .../src/app/g/[guruType]/[slug]/_loading.js | 34 + .../[slug]/binge/[bingeId]/_loading.js | 34 + .../[slug]/binge/[bingeId]/action.js | 15 + .../[slug]/binge/[bingeId]/error.js | 24 + .../[slug]/binge/[bingeId]/not-found.js | 5 + .../[guruType]/[slug]/binge/[bingeId]/page.js | 213 + .../src/app/g/[guruType]/[slug]/error.js | 24 + .../src/app/g/[guruType]/[slug]/not-found.js | 5 + .../src/app/g/[guruType]/[slug]/page.js | 212 + .../src/app/g/[guruType]/_loading.js | 34 + .../src/app/g/[guruType]/error.js | 24 + .../src/app/g/[guruType]/not-found.js | 5 + .../src/app/g/[guruType]/page.js | 109 + src/gurubase-frontend/src/app/global-error.js | 36 + src/gurubase-frontend/src/app/globals.css | 967 ++ .../src/app/guru/[customGuru]/page.js | 61 + .../src/app/guru/new-12hsh25ksh2/page.js | 19 + src/gurubase-frontend/src/app/icon.ico | Bin 0 -> 4414 bytes src/gurubase-frontend/src/app/layout.js | 112 + .../src/app/my-gurus/page.js | 12 + src/gurubase-frontend/src/app/not-found.js | 31 + src/gurubase-frontend/src/app/page.js | 19 + .../src/app/privacy-policy/page.js | 27 + src/gurubase-frontend/src/app/providers.js | 26 + src/gurubase-frontend/src/app/robots.js | 29 + .../src/app/sitemap/[mainSitemap]/route.js | 22 + .../[guruType]/[guruTypeDetail]/route.js | 23 + .../src/app/terms-of-use/page.js | 27 + .../src/assets/animations/loading_spinner.gif | Bin 0 -> 16006 bytes .../src/assets/images/GithubWhiteBgIcon.svg | 10 + .../src/assets/images/ai-network-spark.svg | 9 + .../src/assets/images/anteon-logo-text.svg | 8 + .../src/assets/images/anteon-logo.svg | 21 + .../src/assets/images/anteon-only-logo.svg | 8 + .../src/assets/images/binge-map.svg | 6 + .../src/assets/images/guru-base.svg | 4 + .../src/assets/images/magic-stick.svg | 29 + .../src/assets/images/map-arrow-up.svg | 3 + .../src/assets/images/new-question.svg | 3 + .../src/assets/images/polygon-repeat.png | Bin 0 -> 4753 bytes .../src/assets/images/post-question.svg | 3 + .../src/assets/images/stars.svg | 14 + .../src/assets/images/zoom-in-scale-up.svg | 24 + .../components/AnswerLastModified/index.js | 86 + .../components/ArticleSources/SourceItem.jsx | 62 + .../src/components/ArticleSources/index.jsx | 50 + .../src/components/BingeHistory.js | 210 + .../src/components/BingeHistoryMainPage.js | 16 + .../src/components/CommonContentLayout.js | 18 + .../components/Content/DefaultQuerySection.js | 34 + .../components/Content/FollowUpQueryInput.js | 449 + .../Content/FollowUpSearchComponent.js | 66 + .../src/components/Content/LoadingBar.js | 32 + .../src/components/Content/LoadingSkeleton.js | 15 + .../src/components/Content/MainForm.js | 514 + .../src/components/Content/QueryButton.js | 21 + .../src/components/Content/QueryInput.js | 140 + .../Content/TypeSenseSearchComponent.js | 203 + .../src/components/Content/index.js | 804 ++ .../src/components/CreateWidgetModal.js | 73 + .../src/components/CurrentlyAsking/index.js | 97 + .../src/components/CustomToast.jsx | 20 + .../src/components/EndOfContent/index.js | 5 + .../src/components/ErudaLoader.js | 30 + .../src/components/FollowUpQuestions/index.js | 19 + .../src/components/Footer.js | 58 + .../src/components/FooterLink.js | 21 + .../src/components/GuruBaseLogo.js | 31 + .../src/components/GuruList/index.js | 126 + .../src/components/GuruTypeClient.js | 44 + .../src/components/GuruTypeInitializer.js | 23 + .../src/components/Header/MobileSidebar.js | 192 + .../components/Header/SocialMediaHeader.js | 62 + .../src/components/Header/index.js | 311 + .../src/components/Header/utils.js | 39 + .../src/components/HomePageClient.js | 32 + src/gurubase-frontend/src/components/Icons.js | 465 + .../src/components/InfoWarningErrorBanner.js | 90 + .../src/components/LoadingSpinner.js | 90 + .../src/components/LoginModal/index.js | 101 + .../src/components/MyGurus/index.js | 69 + .../NewEditGuru/MonacoUrlEditor.jsx | 105 + .../components/NewEditGuru/SourceDialog.jsx | 149 + .../NewEditGuru/UrlTableContent.jsx | 296 + .../src/components/NewGuru.jsx | 2421 ++++ .../NewGuruClient/NewGuruContent/index.js | 7 + .../src/components/NewGuruClient/index.js | 27 + .../NotificationCard/NotificationCard.jsx | 106 + .../NotificationCard/NotificationHeader.jsx | 20 + .../NotificationCard/NotificationItem.jsx | 29 + .../src/components/OtherGurus/GuruItem.js | 76 + .../components/OtherGurus/MobileOtherGurus.js | 110 + .../src/components/OtherGurus/SearchBar.js | 44 + .../src/components/OtherGurus/index.js | 112 + .../src/components/PageTransition.jsx | 51 + .../src/components/PostContent/CodeBlock.js | 77 + .../components/PostContent/FeedBackOptions.js | 82 + .../components/PostContent/FeedbackSection.js | 8 + .../components/PostContent/ShareOptions.js | 138 + .../src/components/PostContent/index.js | 239 + .../PrivacyPolicy/PrivacyPolicy.jsx | 225 + .../PrivacyPolicy/PrivacyPolicyClient.js | 18 + .../src/components/ResultClient.js | 430 + .../SimilarQuestions/QuestionItem.js | 36 + .../src/components/SimilarQuestions/index.js | 68 + .../src/components/TermsOfUse/TermsOfUse.jsx | 258 + .../components/TermsOfUse/TermsOfUseClient.js | 18 + .../src/components/TrustScore/trust-score.js | 173 + .../src/components/WidgetId.js | 287 + .../src/components/binge-map.jsx | 938 ++ .../src/components/components-url-badge.jsx | 16 + .../src/components/sources/SourceCard.jsx | 44 + .../src/components/sources/Sources.jsx | 47 + .../src/components/ui/Sonner.jsx | 21 + .../src/components/ui/alert-dialog.jsx | 120 + .../src/components/ui/alert.jsx | 54 + .../src/components/ui/avatar.jsx | 44 + .../src/components/ui/badge.jsx | 36 + .../src/components/ui/binge-map-card.jsx | 85 + .../src/components/ui/button.jsx | 56 + .../src/components/ui/card.jsx | 64 + .../src/components/ui/checkbox.jsx | 25 + .../src/components/ui/dialog.jsx | 103 + .../src/components/ui/dropdown-menu.jsx | 185 + .../src/components/ui/form.jsx | 136 + .../src/components/ui/input.jsx | 20 + .../src/components/ui/label.jsx | 37 + .../src/components/ui/modal-dialog.jsx | 107 + .../src/components/ui/radio-button-group.jsx | 38 + .../src/components/ui/scroll-area.jsx | 44 + .../src/components/ui/select.jsx | 147 + .../src/components/ui/table.jsx | 108 + .../src/components/ui/tabs.jsx | 55 + .../src/components/ui/textarea.jsx | 19 + .../src/components/ui/tooltip.jsx | 40 + .../src/hooks/useBingeMap.js | 89 + .../src/hooks/useDebounce.js | 17 + .../src/hooks/useHandleSubmit.js | 267 + .../src/hooks/useMediaQuery.js | 17 + .../src/hooks/useSubmitWithAbort.js | 122 + src/gurubase-frontend/src/instrumentation.js | 15 + src/gurubase-frontend/src/lib/utils.js | 36 + src/gurubase-frontend/src/redux/hooks.js | 6 + .../src/redux/slices/mainFormSlice.js | 222 + src/gurubase-frontend/src/redux/store.js | 13 + src/gurubase-frontend/src/utils/HttpError.js | 9 + .../src/utils/bingeRedirection.js | 57 + .../src/utils/clientActions.js | 160 + src/gurubase-frontend/src/utils/common.js | 107 + src/gurubase-frontend/src/utils/dateUtils.js | 8 + .../src/utils/generateIconSVG.js | 26 + .../src/utils/guruIconGetter.js | 27 + .../src/utils/handleQuestionUpdate.js | 77 + .../src/utils/hooks/useIsInViewport.js | 38 + .../src/utils/hooks/useIsSmallScreen.js | 22 + .../src/utils/hooks/usePreventScroll.js | 56 + .../src/utils/hooks/useResizePanelHook.js | 93 + src/gurubase-frontend/src/utils/treeUtils.js | 24 + src/gurubase-frontend/tailwind.config.js | 297 + src/gurubase-frontend/yarn.lock | 10401 ++++++++++++++++ 189 files changed, 29100 insertions(+) create mode 100644 .github/workflows/frontend-docker-image-dockerhub.yml create mode 100644 .github/workflows/frontend-snyk-scan.yml create mode 100644 src/gurubase-frontend/.dockerignore create mode 100644 src/gurubase-frontend/.gitignore create mode 100644 src/gurubase-frontend/.prettierrc create mode 100644 src/gurubase-frontend/.yarnrc.yml create mode 100644 src/gurubase-frontend/Dockerfile create mode 100644 src/gurubase-frontend/Dockerfile.selfhosted create mode 100644 src/gurubase-frontend/Dockerfile.staging create mode 100644 src/gurubase-frontend/README.md create mode 100644 src/gurubase-frontend/components.json create mode 100755 src/gurubase-frontend/docker_build_push_selfhosted_cloud.sh create mode 100644 src/gurubase-frontend/eslint.config.mjs create mode 100644 src/gurubase-frontend/jsconfig.json create mode 100644 src/gurubase-frontend/next.config.mjs create mode 100644 src/gurubase-frontend/package.json create mode 100644 src/gurubase-frontend/postcss.config.mjs create mode 100644 src/gurubase-frontend/public/favicon.ico create mode 100644 src/gurubase-frontend/public/images/guru-base.svg create mode 100644 src/gurubase-frontend/public/images/polygon-repeat.png create mode 100644 src/gurubase-frontend/public/kubernetes-guru-cover.png create mode 100644 src/gurubase-frontend/sentry.client.config.js create mode 100644 src/gurubase-frontend/sentry.edge.config.js create mode 100644 src/gurubase-frontend/sentry.server.config.js create mode 100644 src/gurubase-frontend/src/app/StoreProvider.js create mode 100644 src/gurubase-frontend/src/app/actions.js create mode 100644 src/gurubase-frontend/src/app/api/auth/[auth0]/route.js create mode 100644 src/gurubase-frontend/src/app/binge-history/page.js create mode 100644 src/gurubase-frontend/src/app/fonts/gilroy-semibold.ttf create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/_loading.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/_loading.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/action.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/error.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/not-found.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/page.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/error.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/not-found.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/[slug]/page.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/_loading.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/error.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/not-found.js create mode 100644 src/gurubase-frontend/src/app/g/[guruType]/page.js create mode 100644 src/gurubase-frontend/src/app/global-error.js create mode 100644 src/gurubase-frontend/src/app/globals.css create mode 100644 src/gurubase-frontend/src/app/guru/[customGuru]/page.js create mode 100644 src/gurubase-frontend/src/app/guru/new-12hsh25ksh2/page.js create mode 100644 src/gurubase-frontend/src/app/icon.ico create mode 100644 src/gurubase-frontend/src/app/layout.js create mode 100644 src/gurubase-frontend/src/app/my-gurus/page.js create mode 100644 src/gurubase-frontend/src/app/not-found.js create mode 100644 src/gurubase-frontend/src/app/page.js create mode 100644 src/gurubase-frontend/src/app/privacy-policy/page.js create mode 100644 src/gurubase-frontend/src/app/providers.js create mode 100644 src/gurubase-frontend/src/app/robots.js create mode 100644 src/gurubase-frontend/src/app/sitemap/[mainSitemap]/route.js create mode 100644 src/gurubase-frontend/src/app/sitemap/gurus/[guruType]/[guruTypeDetail]/route.js create mode 100644 src/gurubase-frontend/src/app/terms-of-use/page.js create mode 100644 src/gurubase-frontend/src/assets/animations/loading_spinner.gif create mode 100644 src/gurubase-frontend/src/assets/images/GithubWhiteBgIcon.svg create mode 100644 src/gurubase-frontend/src/assets/images/ai-network-spark.svg create mode 100644 src/gurubase-frontend/src/assets/images/anteon-logo-text.svg create mode 100644 src/gurubase-frontend/src/assets/images/anteon-logo.svg create mode 100644 src/gurubase-frontend/src/assets/images/anteon-only-logo.svg create mode 100644 src/gurubase-frontend/src/assets/images/binge-map.svg create mode 100644 src/gurubase-frontend/src/assets/images/guru-base.svg create mode 100644 src/gurubase-frontend/src/assets/images/magic-stick.svg create mode 100644 src/gurubase-frontend/src/assets/images/map-arrow-up.svg create mode 100644 src/gurubase-frontend/src/assets/images/new-question.svg create mode 100644 src/gurubase-frontend/src/assets/images/polygon-repeat.png create mode 100644 src/gurubase-frontend/src/assets/images/post-question.svg create mode 100644 src/gurubase-frontend/src/assets/images/stars.svg create mode 100644 src/gurubase-frontend/src/assets/images/zoom-in-scale-up.svg create mode 100644 src/gurubase-frontend/src/components/AnswerLastModified/index.js create mode 100644 src/gurubase-frontend/src/components/ArticleSources/SourceItem.jsx create mode 100644 src/gurubase-frontend/src/components/ArticleSources/index.jsx create mode 100644 src/gurubase-frontend/src/components/BingeHistory.js create mode 100644 src/gurubase-frontend/src/components/BingeHistoryMainPage.js create mode 100644 src/gurubase-frontend/src/components/CommonContentLayout.js create mode 100644 src/gurubase-frontend/src/components/Content/DefaultQuerySection.js create mode 100644 src/gurubase-frontend/src/components/Content/FollowUpQueryInput.js create mode 100644 src/gurubase-frontend/src/components/Content/FollowUpSearchComponent.js create mode 100644 src/gurubase-frontend/src/components/Content/LoadingBar.js create mode 100644 src/gurubase-frontend/src/components/Content/LoadingSkeleton.js create mode 100644 src/gurubase-frontend/src/components/Content/MainForm.js create mode 100644 src/gurubase-frontend/src/components/Content/QueryButton.js create mode 100644 src/gurubase-frontend/src/components/Content/QueryInput.js create mode 100644 src/gurubase-frontend/src/components/Content/TypeSenseSearchComponent.js create mode 100644 src/gurubase-frontend/src/components/Content/index.js create mode 100644 src/gurubase-frontend/src/components/CreateWidgetModal.js create mode 100644 src/gurubase-frontend/src/components/CurrentlyAsking/index.js create mode 100644 src/gurubase-frontend/src/components/CustomToast.jsx create mode 100644 src/gurubase-frontend/src/components/EndOfContent/index.js create mode 100644 src/gurubase-frontend/src/components/ErudaLoader.js create mode 100644 src/gurubase-frontend/src/components/FollowUpQuestions/index.js create mode 100644 src/gurubase-frontend/src/components/Footer.js create mode 100644 src/gurubase-frontend/src/components/FooterLink.js create mode 100644 src/gurubase-frontend/src/components/GuruBaseLogo.js create mode 100644 src/gurubase-frontend/src/components/GuruList/index.js create mode 100644 src/gurubase-frontend/src/components/GuruTypeClient.js create mode 100644 src/gurubase-frontend/src/components/GuruTypeInitializer.js create mode 100644 src/gurubase-frontend/src/components/Header/MobileSidebar.js create mode 100644 src/gurubase-frontend/src/components/Header/SocialMediaHeader.js create mode 100644 src/gurubase-frontend/src/components/Header/index.js create mode 100644 src/gurubase-frontend/src/components/Header/utils.js create mode 100644 src/gurubase-frontend/src/components/HomePageClient.js create mode 100644 src/gurubase-frontend/src/components/Icons.js create mode 100644 src/gurubase-frontend/src/components/InfoWarningErrorBanner.js create mode 100644 src/gurubase-frontend/src/components/LoadingSpinner.js create mode 100644 src/gurubase-frontend/src/components/LoginModal/index.js create mode 100644 src/gurubase-frontend/src/components/MyGurus/index.js create mode 100644 src/gurubase-frontend/src/components/NewEditGuru/MonacoUrlEditor.jsx create mode 100644 src/gurubase-frontend/src/components/NewEditGuru/SourceDialog.jsx create mode 100644 src/gurubase-frontend/src/components/NewEditGuru/UrlTableContent.jsx create mode 100644 src/gurubase-frontend/src/components/NewGuru.jsx create mode 100644 src/gurubase-frontend/src/components/NewGuruClient/NewGuruContent/index.js create mode 100644 src/gurubase-frontend/src/components/NewGuruClient/index.js create mode 100644 src/gurubase-frontend/src/components/NotificationCard/NotificationCard.jsx create mode 100644 src/gurubase-frontend/src/components/NotificationCard/NotificationHeader.jsx create mode 100644 src/gurubase-frontend/src/components/NotificationCard/NotificationItem.jsx create mode 100644 src/gurubase-frontend/src/components/OtherGurus/GuruItem.js create mode 100644 src/gurubase-frontend/src/components/OtherGurus/MobileOtherGurus.js create mode 100644 src/gurubase-frontend/src/components/OtherGurus/SearchBar.js create mode 100644 src/gurubase-frontend/src/components/OtherGurus/index.js create mode 100644 src/gurubase-frontend/src/components/PageTransition.jsx create mode 100644 src/gurubase-frontend/src/components/PostContent/CodeBlock.js create mode 100644 src/gurubase-frontend/src/components/PostContent/FeedBackOptions.js create mode 100644 src/gurubase-frontend/src/components/PostContent/FeedbackSection.js create mode 100644 src/gurubase-frontend/src/components/PostContent/ShareOptions.js create mode 100644 src/gurubase-frontend/src/components/PostContent/index.js create mode 100644 src/gurubase-frontend/src/components/PrivacyPolicy/PrivacyPolicy.jsx create mode 100644 src/gurubase-frontend/src/components/PrivacyPolicy/PrivacyPolicyClient.js create mode 100644 src/gurubase-frontend/src/components/ResultClient.js create mode 100644 src/gurubase-frontend/src/components/SimilarQuestions/QuestionItem.js create mode 100644 src/gurubase-frontend/src/components/SimilarQuestions/index.js create mode 100644 src/gurubase-frontend/src/components/TermsOfUse/TermsOfUse.jsx create mode 100644 src/gurubase-frontend/src/components/TermsOfUse/TermsOfUseClient.js create mode 100644 src/gurubase-frontend/src/components/TrustScore/trust-score.js create mode 100644 src/gurubase-frontend/src/components/WidgetId.js create mode 100644 src/gurubase-frontend/src/components/binge-map.jsx create mode 100644 src/gurubase-frontend/src/components/components-url-badge.jsx create mode 100644 src/gurubase-frontend/src/components/sources/SourceCard.jsx create mode 100644 src/gurubase-frontend/src/components/sources/Sources.jsx create mode 100644 src/gurubase-frontend/src/components/ui/Sonner.jsx create mode 100644 src/gurubase-frontend/src/components/ui/alert-dialog.jsx create mode 100644 src/gurubase-frontend/src/components/ui/alert.jsx create mode 100644 src/gurubase-frontend/src/components/ui/avatar.jsx create mode 100644 src/gurubase-frontend/src/components/ui/badge.jsx create mode 100644 src/gurubase-frontend/src/components/ui/binge-map-card.jsx create mode 100644 src/gurubase-frontend/src/components/ui/button.jsx create mode 100644 src/gurubase-frontend/src/components/ui/card.jsx create mode 100644 src/gurubase-frontend/src/components/ui/checkbox.jsx create mode 100644 src/gurubase-frontend/src/components/ui/dialog.jsx create mode 100644 src/gurubase-frontend/src/components/ui/dropdown-menu.jsx create mode 100644 src/gurubase-frontend/src/components/ui/form.jsx create mode 100644 src/gurubase-frontend/src/components/ui/input.jsx create mode 100644 src/gurubase-frontend/src/components/ui/label.jsx create mode 100644 src/gurubase-frontend/src/components/ui/modal-dialog.jsx create mode 100644 src/gurubase-frontend/src/components/ui/radio-button-group.jsx create mode 100644 src/gurubase-frontend/src/components/ui/scroll-area.jsx create mode 100644 src/gurubase-frontend/src/components/ui/select.jsx create mode 100644 src/gurubase-frontend/src/components/ui/table.jsx create mode 100644 src/gurubase-frontend/src/components/ui/tabs.jsx create mode 100644 src/gurubase-frontend/src/components/ui/textarea.jsx create mode 100644 src/gurubase-frontend/src/components/ui/tooltip.jsx create mode 100644 src/gurubase-frontend/src/hooks/useBingeMap.js create mode 100644 src/gurubase-frontend/src/hooks/useDebounce.js create mode 100644 src/gurubase-frontend/src/hooks/useHandleSubmit.js create mode 100644 src/gurubase-frontend/src/hooks/useMediaQuery.js create mode 100644 src/gurubase-frontend/src/hooks/useSubmitWithAbort.js create mode 100644 src/gurubase-frontend/src/instrumentation.js create mode 100644 src/gurubase-frontend/src/lib/utils.js create mode 100644 src/gurubase-frontend/src/redux/hooks.js create mode 100644 src/gurubase-frontend/src/redux/slices/mainFormSlice.js create mode 100644 src/gurubase-frontend/src/redux/store.js create mode 100644 src/gurubase-frontend/src/utils/HttpError.js create mode 100644 src/gurubase-frontend/src/utils/bingeRedirection.js create mode 100644 src/gurubase-frontend/src/utils/clientActions.js create mode 100644 src/gurubase-frontend/src/utils/common.js create mode 100644 src/gurubase-frontend/src/utils/dateUtils.js create mode 100644 src/gurubase-frontend/src/utils/generateIconSVG.js create mode 100644 src/gurubase-frontend/src/utils/guruIconGetter.js create mode 100644 src/gurubase-frontend/src/utils/handleQuestionUpdate.js create mode 100644 src/gurubase-frontend/src/utils/hooks/useIsInViewport.js create mode 100644 src/gurubase-frontend/src/utils/hooks/useIsSmallScreen.js create mode 100644 src/gurubase-frontend/src/utils/hooks/usePreventScroll.js create mode 100644 src/gurubase-frontend/src/utils/hooks/useResizePanelHook.js create mode 100644 src/gurubase-frontend/src/utils/treeUtils.js create mode 100644 src/gurubase-frontend/tailwind.config.js create mode 100644 src/gurubase-frontend/yarn.lock diff --git a/.github/workflows/frontend-docker-image-dockerhub.yml b/.github/workflows/frontend-docker-image-dockerhub.yml new file mode 100644 index 0000000..ecba9eb --- /dev/null +++ b/.github/workflows/frontend-docker-image-dockerhub.yml @@ -0,0 +1,143 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - '**' + paths: + - 'src/gurubase-frontend/**' + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + defaults: + run: + working-directory: src/gurubase-frontend + + steps: + - uses: actions/checkout@v3 + + - name: Create environment files + run: | + # Create .env.prod + cat << EOF > .env.prod + NEXT_PUBLIC_NODE_ENV=\${{ secrets.NEXT_PUBLIC_NODE_ENV_PROD_FE }} + NEXT_PUBLIC_PROJECT_URL=\${{ secrets.NEXT_PUBLIC_PROJECT_URL_PROD_FE }} + NEXT_PUBLIC_RUNTIME=\${{ secrets.NEXT_PUBLIC_RUNTIME_PROD_FE }} + NEXT_PUBLIC_INSTRUMENTATION_HOOK=\${{ secrets.NEXT_PUBLIC_INSTRUMENTATION_HOOK_PROD_FE }} + NEXT_PUBLIC_BACKEND_AUTH_TOKEN=\${{ secrets.NEXT_PUBLIC_BACKEND_AUTH_TOKEN_PROD_FE }} + NEXT_PUBLIC_MOBILE_DEBUG_CONSOLE=\${{ secrets.NEXT_PUBLIC_MOBILE_DEBUG_CONSOLE_PROD_FE }} + NEXT_PUBLIC_BACKEND_FETCH_URL=\${{ secrets.NEXT_PUBLIC_BACKEND_FETCH_URL_PROD_FE }} + NEXT_PUBLIC_BACKEND_FETCH_URL_CLIENT=\${{ secrets.NEXT_PUBLIC_BACKEND_FETCH_URL_CLIENT_PROD_FE }} + NEXT_PUBLIC_PAGE_VISIT_MODULE=\${{ secrets.NEXT_PUBLIC_PAGE_VISIT_MODULE_PROD_FE }} + NEXT_PUBLIC_MIXPANEL_TOKEN=\${{ secrets.NEXT_PUBLIC_MIXPANEL_TOKEN_PROD_FE }} + NEXT_PUBLIC_SENTRY_DSN=\${{ secrets.NEXT_PUBLIC_SENTRY_DSN_PROD_FE }} + NEXT_PUBLIC_SENTRY_ORG=\${{ secrets.NEXT_PUBLIC_SENTRY_ORG_PROD_FE }} + NEXT_PUBLIC_SENTRY_PROJECT=\${{ secrets.NEXT_PUBLIC_SENTRY_PROJECT_PROD_FE }} + NEXT_TELEMETRY_DEBUG=\${{ secrets.NEXT_TELEMETRY_DEBUG_PROD_FE }} + AUTH0_SECRET=\${{ secrets.AUTH0_SECRET_PROD_FE }} + AUTH0_BASE_URL=\${{ secrets.AUTH0_BASE_URL_PROD_FE }} + AUTH0_ISSUER_BASE_URL=\${{ secrets.AUTH0_ISSUER_BASE_URL_PROD_FE }} + AUTH0_CLIENT_ID=\${{ secrets.AUTH0_CLIENT_ID_PROD_FE }} + AUTH0_CLIENT_SECRET=\${{ secrets.AUTH0_CLIENT_SECRET_PROD_FE }} + AUTH0_AUDIENCE=\${{ secrets.AUTH0_AUDIENCE_PROD_FE }} + AUTH0_ALGORITHMS=\${{ secrets.AUTH0_ALGORITHMS_PROD_FE }} + EOF + + # Create .env.staging + cat << EOF > .env.staging + NEXT_PUBLIC_NODE_ENV=\${{ secrets.NEXT_PUBLIC_NODE_ENV_STAGING_FE }} + NEXT_PUBLIC_PROJECT_URL=\${{ secrets.NEXT_PUBLIC_PROJECT_URL_STAGING_FE }} + NEXT_PUBLIC_RUNTIME=\${{ secrets.NEXT_PUBLIC_RUNTIME_STAGING_FE }} + NEXT_PUBLIC_INSTRUMENTATION_HOOK=\${{ secrets.NEXT_PUBLIC_INSTRUMENTATION_HOOK_STAGING_FE }} + NEXT_PUBLIC_BACKEND_AUTH_TOKEN=\${{ secrets.NEXT_PUBLIC_BACKEND_AUTH_TOKEN_STAGING_FE }} + NEXT_PUBLIC_MOBILE_DEBUG_CONSOLE=\${{ secrets.NEXT_PUBLIC_MOBILE_DEBUG_CONSOLE_STAGING_FE }} + NEXT_PUBLIC_BACKEND_FETCH_URL=\${{ secrets.NEXT_PUBLIC_BACKEND_FETCH_URL_STAGING_FE }} + NEXT_PUBLIC_BACKEND_FETCH_URL_CLIENT=\${{ secrets.NEXT_PUBLIC_BACKEND_FETCH_URL_CLIENT_STAGING_FE }} + NEXT_PUBLIC_PAGE_VISIT_MODULE=\${{ secrets.NEXT_PUBLIC_PAGE_VISIT_MODULE_STAGING_FE }} + NEXT_TELEMETRY_DEBUG=\${{ secrets.NEXT_TELEMETRY_DEBUG_STAGING_FE }} + AUTH0_SECRET=\${{ secrets.AUTH0_SECRET_STAGING_FE }} + AUTH0_BASE_URL=\${{ secrets.AUTH0_BASE_URL_STAGING_FE }} + AUTH0_ISSUER_BASE_URL=\${{ secrets.AUTH0_ISSUER_BASE_URL_STAGING_FE }} + AUTH0_CLIENT_ID=\${{ secrets.AUTH0_CLIENT_ID_STAGING_FE }} + AUTH0_CLIENT_SECRET=\${{ secrets.AUTH0_CLIENT_SECRET_STAGING_FE }} + AUTH0_AUDIENCE=\${{ secrets.AUTH0_AUDIENCE_STAGING_FE }} + AUTH0_ALGORITHMS=\${{ secrets.AUTH0_ALGORITHMS_STAGING_FE }} + EOF + + - name: Check for console statements + run: | + files_with_console=$(grep -rL "use server" --include="*.js" --exclude-dir={node_modules,public,.next} . | xargs grep -nE "^[^/]*console\.(log|error|warn|info|debug|trace|dir|dirxml|table|time|timeEnd|group|groupEnd|count|countReset|assert|profile|profileEnd)" | cut -d: -f1 | sort -u || true) + if [ -n "$files_with_console" ]; then + echo "Console statements found in the following files:" + echo "$files_with_console" + echo "Failing the build." + exit 1 + else + echo "No uncommented console statements found in files without 'use server'." + fi + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Configure Dockerhub credentials + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Get branch name + id: branch-name + uses: tj-actions/branch-names@v8 + + - name: Set image tag and Dockerfile + id: set-vars + run: | + branch=$(echo ${{ steps.branch-name.outputs.current_branch }} | tr '/' '-') + commit_sha=${GITHUB_SHA::7} + echo "image_tag=${branch}-${commit_sha}" >> $GITHUB_OUTPUT + echo "branch_tag=${branch}" >> $GITHUB_OUTPUT + if [ "${{ steps.branch-name.outputs.current_branch }}" = "master" ]; then + echo "dockerfile=Dockerfile" >> $GITHUB_OUTPUT + else + echo "dockerfile=Dockerfile.staging" >> $GITHUB_OUTPUT + fi + + - name: Build and push + uses: docker/build-push-action@v4 + env: + REPOSITORY: ddosify/kubernetesguru_frontend + with: + context: . + push: true + tags: | + ${{ env.REPOSITORY }}:${{ steps.set-vars.outputs.image_tag }} + ${{ env.REPOSITORY }}:${{ steps.set-vars.outputs.branch_tag }} + platforms: linux/amd64 + file: ${{ steps.set-vars.outputs.dockerfile }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + + - name: Image Tags and Dockerfile + run: | + echo "Commit Tag: ${{ steps.set-vars.outputs.image_tag }}" + echo "Branch Tag: ${{ steps.set-vars.outputs.branch_tag }}" + echo "Dockerfile: ${{ steps.set-vars.outputs.dockerfile }}" + echo "Commit Tag: ${{ steps.set-vars.outputs.image_tag }}" >> $GITHUB_STEP_SUMMARY + echo "Branch Tag: ${{ steps.set-vars.outputs.branch_tag }}" >> $GITHUB_STEP_SUMMARY + echo "Dockerfile: ${{ steps.set-vars.outputs.dockerfile }}" >> $GITHUB_STEP_SUMMARY + + - name: Cleanup environment files + if: always() + run: | + rm -f .env.prod .env.staging + echo "Environment files cleaned up" diff --git a/.github/workflows/frontend-snyk-scan.yml b/.github/workflows/frontend-snyk-scan.yml new file mode 100644 index 0000000..afc2015 --- /dev/null +++ b/.github/workflows/frontend-snyk-scan.yml @@ -0,0 +1,20 @@ +name: Snyk Security Scan + +on: + push: + pull_request: + branches: [master] + workflow_dispatch: + +jobs: + security: + # runs-on: ubuntu-latest + runs-on: self-hosted + steps: + - uses: actions/checkout@v3 + - name: Run Snyk to check for vulnerabilities + uses: snyk/actions/node@master + env: + SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} + with: + command: test diff --git a/src/gurubase-frontend/.dockerignore b/src/gurubase-frontend/.dockerignore new file mode 100644 index 0000000..432dfcf --- /dev/null +++ b/src/gurubase-frontend/.dockerignore @@ -0,0 +1,9 @@ +Dockerfile +.dockerignore +node_modules +npm-debug.log +README.md +.next +.git +.yarnrc.yml +.github \ No newline at end of file diff --git a/src/gurubase-frontend/.gitignore b/src/gurubase-frontend/.gitignore new file mode 100644 index 0000000..220d680 --- /dev/null +++ b/src/gurubase-frontend/.gitignore @@ -0,0 +1,48 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local +# .env*.dev + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# Sentry Config File +.env.sentry-build-plugin + +server/* + +src/components/_exampleStreaming.js + +# Environment files +.env* +!.env.example \ No newline at end of file diff --git a/src/gurubase-frontend/.prettierrc b/src/gurubase-frontend/.prettierrc new file mode 100644 index 0000000..0abda57 --- /dev/null +++ b/src/gurubase-frontend/.prettierrc @@ -0,0 +1,21 @@ +{ + "arrowParens": "always", + "bracketSpacing": true, + "endOfLine": "lf", + "htmlWhitespaceSensitivity": "css", + "insertPragma": false, + "singleAttributePerLine": false, + "bracketSameLine": true, + "jsxSingleQuote": false, + "printWidth": 80, + "proseWrap": "preserve", + "quoteProps": "as-needed", + "requirePragma": false, + "semi": true, + "singleQuote": false, + "tabWidth": 2, + "trailingComma": "none", + "useTabs": false, + "embeddedLanguageFormatting": "auto", + "vueIndentScriptAndStyle": false +} diff --git a/src/gurubase-frontend/.yarnrc.yml b/src/gurubase-frontend/.yarnrc.yml new file mode 100644 index 0000000..25b748b --- /dev/null +++ b/src/gurubase-frontend/.yarnrc.yml @@ -0,0 +1,3 @@ +nodeLinker: node-modules + +yarnPath: .yarn/releases/yarn-4.2.2.cjs diff --git a/src/gurubase-frontend/Dockerfile b/src/gurubase-frontend/Dockerfile new file mode 100644 index 0000000..2f526f3 --- /dev/null +++ b/src/gurubase-frontend/Dockerfile @@ -0,0 +1,67 @@ +FROM node:20.11.1-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry during the build. +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN \ + if [ -f yarn.lock ]; then yarn run build-prod; \ + elif [ -f package-lock.json ]; then npm run build-prod; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build-prod; \ + else echo "Lockfile not found." && exit 1; \ + fi + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production +# Uncomment the following line in case you want to disable telemetry during runtime. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +# server.js is created by next build from the standalone output +# https://nextjs.org/docs/pages/api-reference/next-config-js/output +CMD HOSTNAME="0.0.0.0" node server.js diff --git a/src/gurubase-frontend/Dockerfile.selfhosted b/src/gurubase-frontend/Dockerfile.selfhosted new file mode 100644 index 0000000..ec1d389 --- /dev/null +++ b/src/gurubase-frontend/Dockerfile.selfhosted @@ -0,0 +1,67 @@ +FROM node:20.11.1-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry during the build. +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN \ + if [ -f yarn.lock ]; then yarn run build-selfhosted; \ + elif [ -f package-lock.json ]; then npm run build-selfhosted; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build-selfhosted; \ + else echo "Lockfile not found." && exit 1; \ + fi + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production +# Uncomment the following line in case you want to disable telemetry during runtime. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +# server.js is created by next build from the standalone output +# https://nextjs.org/docs/pages/api-reference/next-config-js/output +CMD HOSTNAME="0.0.0.0" node server.js diff --git a/src/gurubase-frontend/Dockerfile.staging b/src/gurubase-frontend/Dockerfile.staging new file mode 100644 index 0000000..ab76887 --- /dev/null +++ b/src/gurubase-frontend/Dockerfile.staging @@ -0,0 +1,67 @@ +FROM node:20.11.1-alpine AS base + +# Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./ +RUN \ + if [ -f yarn.lock ]; then yarn; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i --frozen-lockfile; \ + else echo "Lockfile not found." && exit 1; \ + fi + + +# Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . + +# Next.js collects completely anonymous telemetry data about general usage. +# Learn more here: https://nextjs.org/telemetry +# Uncomment the following line in case you want to disable telemetry during the build. +ENV NEXT_TELEMETRY_DISABLED 1 + +RUN \ + if [ -f yarn.lock ]; then yarn run build-staging; \ + elif [ -f package-lock.json ]; then npm run build-staging; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build-staging; \ + else echo "Lockfile not found." && exit 1; \ + fi + +# Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV production +# Uncomment the following line in case you want to disable telemetry during runtime. +# ENV NEXT_TELEMETRY_DISABLED 1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +COPY --from=builder /app/public ./public + +# Set the correct permission for prerender cache +RUN mkdir .next +RUN chown nextjs:nodejs .next + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + +USER nextjs + +EXPOSE 3000 + +ENV PORT 3000 + +# server.js is created by next build from the standalone output +# https://nextjs.org/docs/pages/api-reference/next-config-js/output +CMD HOSTNAME="0.0.0.0" node server.js diff --git a/src/gurubase-frontend/README.md b/src/gurubase-frontend/README.md new file mode 100644 index 0000000..ead8566 --- /dev/null +++ b/src/gurubase-frontend/README.md @@ -0,0 +1,3 @@ +# Gurubase Frontend + +This is the frontend for Gurubase. It is built with Next.js and Tailwind CSS. diff --git a/src/gurubase-frontend/components.json b/src/gurubase-frontend/components.json new file mode 100644 index 0000000..946c46d --- /dev/null +++ b/src/gurubase-frontend/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": false, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} diff --git a/src/gurubase-frontend/docker_build_push_selfhosted_cloud.sh b/src/gurubase-frontend/docker_build_push_selfhosted_cloud.sh new file mode 100755 index 0000000..6346adf --- /dev/null +++ b/src/gurubase-frontend/docker_build_push_selfhosted_cloud.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Uses https://build.docker.com/ +# ./docker_buildcloud_onprem.sh x.y.z + +# Get version as argument and default to latest +VERSION=${1:-latest-selfhosted} +PLATFORM=${2:-linux/amd64,linux/arm64} +DOCKER_IMAGE_TAG=ddosify/kubernetesguru_frontend:$VERSION +DOCKER_IMAGE_TAG2=ddosify/gurubase-frontend:$VERSION +DOCKERFILE=Dockerfile.selfhosted + +echo "Building $DOCKER_IMAGE_TAG" + +docker buildx create --driver cloud ddosify/builder + +docker buildx build --push --platform=$PLATFORM --builder=cloud-ddosify-builder --tag=$DOCKER_IMAGE_TAG --tag=$DOCKER_IMAGE_TAG2 -f $DOCKERFILE . diff --git a/src/gurubase-frontend/eslint.config.mjs b/src/gurubase-frontend/eslint.config.mjs new file mode 100644 index 0000000..dd7f9f9 --- /dev/null +++ b/src/gurubase-frontend/eslint.config.mjs @@ -0,0 +1,128 @@ +import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; +import _import from "eslint-plugin-import"; +import react from "eslint-plugin-react"; +import prettier from "eslint-plugin-prettier"; +import simpleImportSort from "eslint-plugin-simple-import-sort"; +import globals from "globals"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [...fixupConfigRules(compat.extends( + // "next/core-web-vitals", + "eslint:recommended", + "plugin:import/recommended", + // "plugin:import/typescript", + "plugin:react/recommended", + "plugin:prettier/recommended", + "eslint-config-prettier", +)), { + plugins: { + import: fixupPluginRules(_import), + react: fixupPluginRules(react), + prettier: fixupPluginRules(prettier), + "simple-import-sort": simpleImportSort, + }, + + languageOptions: { + globals: { + ...globals.node, + ...globals.browser, + }, + }, + + settings: { + react: { + version: "detect", + }, + + "import/resolver": { + node: { + extensions: [".js", ".jsx"], + moduleDirectory: ["node_modules", "src/"], + paths: ["src"], + }, + + alias: { + map: [["@", "./src"]], + extensions: [".js", ".jsx"], + }, + }, + }, + + rules: { + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", + "import/first": "error", + "import/newline-after-import": "error", + "import/no-duplicates": "error", + "import/no-unresolved": "error", + "import/no-unused-modules": "error", + "react/prop-types": "off", + "react/react-in-jsx-scope": "off", + + "react/jsx-sort-props": ["error", { + callbacksLast: true, + shorthandFirst: true, + ignoreCase: true, + reservedFirst: true, + }], + + "no-unused-vars": "error", + + "no-console": ["warn", { + allow: ["warn", "error"], + }], + + "prettier/prettier": ["error", { + arrowParens: "always", + bracketSpacing: true, + endOfLine: "lf", + htmlWhitespaceSensitivity: "css", + singleAttributePerLine: false, + bracketSameLine: true, + jsxSingleQuote: false, + printWidth: 80, + proseWrap: "preserve", + quoteProps: "as-needed", + semi: true, + singleQuote: false, + tabWidth: 2, + trailingComma: "none", + useTabs: false, + }], + + "no-multiple-empty-lines": ["error", { + max: 1, + maxEOF: 0, + }], + + "padding-line-between-statements": ["error", { + blankLine: "always", + prev: "*", + next: "return", + }, { + blankLine: "always", + prev: ["const", "let", "var"], + next: "*", + }, { + blankLine: "any", + prev: ["const", "let", "var"], + next: ["const", "let", "var"], + }], + + "import/extensions": ["error", "never", { + js: "never", + jsx: "never", + }], + }, +}]; \ No newline at end of file diff --git a/src/gurubase-frontend/jsconfig.json b/src/gurubase-frontend/jsconfig.json new file mode 100644 index 0000000..abe04df --- /dev/null +++ b/src/gurubase-frontend/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/src/gurubase-frontend/next.config.mjs b/src/gurubase-frontend/next.config.mjs new file mode 100644 index 0000000..52f0abe --- /dev/null +++ b/src/gurubase-frontend/next.config.mjs @@ -0,0 +1,179 @@ +import { withSentryConfig } from "@sentry/nextjs"; +import MonacoWebpackPlugin from "monaco-editor-webpack-plugin"; + +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: "standalone", + env: { + ...(process.env.NEXT_PUBLIC_NODE_ENV !== "selfhosted" + ? { + AUTH0_SECRET: process.env.AUTH0_SECRET, + AUTH0_BASE_URL: process.env.AUTH0_BASE_URL, + AUTH0_ISSUER_BASE_URL: process.env.AUTH0_ISSUER_BASE_URL, + AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID, + AUTH0_CLIENT_SECRET: process.env.AUTH0_CLIENT_SECRET, + AUTH0_AUDIENCE: process.env.AUTH0_AUDIENCE, + AUTH0_ALGORITHMS: process.env.AUTH0_ALGORITHMS, + AUTH0_SCOPE: "openid profile email offline_access" + } + : {}) + }, + eslint: { + ignoreDuringBuilds: true + }, + images: { + dangerouslyAllowSVG: true, + remotePatterns: [ + { + protocol: "https", + hostname: "**" + }, + { + protocol: "http", + hostname: "**" + } + ] + }, + experimental: { + instrumentationHook: + process.env.NEXT_PUBLIC_INSTRUMENTATION_HOOK === "false" ? false : true, + serverActions: { + allowedOrigins: + process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted" + ? ["*"] + : ["kubernetesguru-backend-api.getanteon.com", "*.getanteon.com"], + bodySizeLimit: "5mb" + }, + optimizeCss: true + }, + webpack: (config, { isServer }) => { + if (!isServer) { + config.plugins.push( + new MonacoWebpackPlugin({ + languages: ["javascript", "typescript", "html", "css", "json"], + filename: "static/[name].worker.js" + }) + ); + } + + return config; + }, + async headers() { + return [ + { + // Match all paths + source: "/:path*", + headers: [ + // 1. Content Security Policy (CSP) + { + key: "Content-Security-Policy", + value: [ + "default-src 'self'", + "script-src 'self' 'unsafe-inline' 'unsafe-eval' *.googleapis.com *.gstatic.com *.google.com *.googletagmanager.com *.cloudflare.com *.cloudflareinsights.com *.jsdelivr.net *.posthog.com *.i.posthog.com us-assets.i.posthog.com *.hotjar.com *.mixpanel.com", + "worker-src 'self' blob:", + "style-src 'self' 'unsafe-inline' *.googleapis.com *.jsdelivr.net", + process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted" + ? "img-src 'self' data: blob: *" + : "img-src 'self' data: blob: *.googleusercontent.com *.google-analytics.com *.googletagmanager.com *.hotjar.com *.jsdelivr.net *.googleapis.com *.githubusercontent.com *.amazonaws.com", + "font-src 'self' data: *.gstatic.com *.jsdelivr.net", + "frame-src 'self' *.auth0.com *.hotjar.com", + process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted" + ? "connect-src 'self' *" + : "connect-src 'self' localhost:* 127.0.0.1:* gurubase-backend:* *.getanteon.com *.amazonaws.com *.jsdelivr.net *.auth0.com *.iconify.design *.unisvg.com *.simplesvg.com *.hotjar.com *.hotjar.io wss://*.hotjar.com *.mixpanel.com *.google-analytics.com *.analytics.google.com", + "form-action 'self' *.auth0.com", + "object-src 'none'", + "base-uri 'self'", + "frame-ancestors 'none'", + ...(process.env.NEXT_PUBLIC_NODE_ENV !== "selfhosted" + ? ["upgrade-insecure-requests"] + : []) + ].join("; ") + }, + // 2. X-Frame-Options + { + key: "X-Frame-Options", + value: "DENY" + }, + // 3. HTTP Strict Transport Security (HSTS) + { + key: "Strict-Transport-Security", + value: "max-age=31536000; includeSubDomains; preload" + }, + // 4. X-XSS-Protection + { + key: "X-XSS-Protection", + value: "1; mode=block" + }, + // 5. X-Content-Type-Options + { + key: "X-Content-Type-Options", + value: "nosniff" + }, + // 6. Referrer-Policy + { + key: "Referrer-Policy", + value: "strict-origin-when-cross-origin" + }, + // 7. Permissions-Policy + { + key: "Permissions-Policy", + value: [ + "accelerometer=()", + "camera=()", + "geolocation=()", + "gyroscope=()", + "magnetometer=()", + "microphone=()", + "payment=()", + "usb=()" + ].join(", ") + }, + // 8. Remove or hide server information + { + key: "Server", + value: "" + } + ] + } + ]; + }, + swcMinify: true, + compiler: { + removeConsole: process.env.NODE_ENV === "production" + } +}; + +export default withSentryConfig(nextConfig, { + // For all available options, see: + // https://github.com/getsentry/sentry-webpack-plugin#options + + org: process.env.NEXT_PUBLIC_SENTRY_ORG, + project: process.env.NEXT_PUBLIC_SENTRY_PROJECT, + + // Only print logs for uploading source maps in CI + silent: !process.env.CI, + + // For all available options, see: + // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ + + // Upload a larger set of source maps for prettier stack traces (increases build time) + widenClientFileUpload: false, + + // Route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers. + // This can increase your server load as well as your hosting bill. + // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client- + // side errors will fail. + // tunnelRoute: "/monitoring", + + // Hides source maps from generated client bundles + hideSourceMaps: true, + + // Automatically tree-shake Sentry logger statements to reduce bundle size + disableLogger: true, + + // Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.) + // See the following for more information: + // https://docs.sentry.io/product/crons/ + // https://vercel.com/docs/cron-jobs + automaticVercelMonitors: false +}); diff --git a/src/gurubase-frontend/package.json b/src/gurubase-frontend/package.json new file mode 100644 index 0000000..83e64b8 --- /dev/null +++ b/src/gurubase-frontend/package.json @@ -0,0 +1,106 @@ +{ + "name": "kubernetesguru", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "env-cmd -f .env.dev next dev", + "dev-selfhosted": "NEXT_PUBLIC_TELEMETRY_ENABLED=false env-cmd -f .env.selfhosted.dev next dev", + "build-dev": "env-cmd -f .env.dev next build", + "build-prod": "env-cmd -f .env.prod next build", + "build-staging": "env-cmd -f .env.staging next build", + "build-selfhosted": "env-cmd -f .env.selfhosted next build", + "start": "next start", + "lint": "next lint --fix", + "lint:fix": "eslint src --fix", + "generate-blog": "node blog-generate-server.js", + "format": "prettier --write .", + "prepare": "husky" + }, + "dependencies": { + "@auth0/nextjs-auth0": "^3.5.0", + "@hookform/resolvers": "^3.9.0", + "@iconify/react": "^5.0.2", + "@iconify/utils": "^2.1.32", + "@monaco-editor/react": "^4.6.0", + "@next/third-parties": "^14.2.3", + "@radix-ui/react-avatar": "^1.1.1", + "@radix-ui/react-checkbox": "^1.0.4", + "@radix-ui/react-dialog": "^1.1.1", + "@radix-ui/react-dismissable-layer": "^1.1.1", + "@radix-ui/react-dropdown-menu": "^2.1.1", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-radio-group": "^1.2.1", + "@radix-ui/react-scroll-area": "^1.1.0", + "@radix-ui/react-select": "^2.1.1", + "@radix-ui/react-slot": "^1.1.0", + "@radix-ui/react-tabs": "^1.1.0", + "@radix-ui/react-tooltip": "^1.1.2", + "@radix-ui/react-visually-hidden": "^1.0.3", + "@reduxjs/toolkit": "^2.2.7", + "@sentry/nextjs": "^8", + "@tailwindcss/typography": "^0.5.13", + "axios": "1.7.8", + "class-variance-authority": "^0.7.0", + "clientjs": "^0.2.1", + "clsx": "^2.1.1", + "cookies-next": "4.3.0", + "critters": "^0.0.25", + "date-fns": "^4.1.0", + "env-cmd": "^10.1.0", + "framer-motion": "^11.11.11", + "isbot": "^5.1.17", + "lucide-react": "^0.446.0", + "monaco-editor": "^0.52.0", + "monaco-editor-webpack-plugin": "^7.1.0", + "next": "14.2.23", + "next-runtime-env": "^3.2.2", + "node-cron": "^3.0.3", + "posthog-js": "^1.203.1", + "prism-react-renderer": "^2.4.1", + "react": "^18", + "react-dom": "^18", + "react-hook-form": "^7.53.0", + "react-intersection-observer": "^9.13.1", + "react-loading-skeleton": "^3.4.0", + "react-markdown": "^9.0.3", + "react-redux": "^9.1.2", + "react-sliding-pane": "^7.3.0", + "react-syntax-highlighter": "^15.5.0", + "remark-gfm": "^4.0.0", + "sharp": "^0.33.5", + "sonner": "^1.5.0", + "tailwind-merge": "^2.5.2", + "tailwindcss-animate": "^1.0.7", + "zod": "^3.23.8" + }, + "devDependencies": { + "@babel/preset-react": "^7.26.3", + "@eslint/compat": "^1.2.4", + "eslint": "^9", + "eslint-config-next": "15.1.4", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-import-resolver-node": "^0.3.9", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.3", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-simple-import-sort": "^12.1.1", + "husky": "^9.1.7", + "lint-staged": "^15.3.0", + "prettier": "^3.4.2", + "tailwindcss": "^3.4.17" + }, + "lint-staged": { + "*.{js,jsx,ts,tsx,json,css,md}": [ + "prettier --write", + "git add" + ] + }, + "resolutions": { + "cross-spawn": "^7.0.5", + "cookie": "^0.7.2" + } +} diff --git a/src/gurubase-frontend/postcss.config.mjs b/src/gurubase-frontend/postcss.config.mjs new file mode 100644 index 0000000..df76ed2 --- /dev/null +++ b/src/gurubase-frontend/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {} + } +}; + +export default config; diff --git a/src/gurubase-frontend/public/favicon.ico b/src/gurubase-frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6528916a3130cbc7729210786a173cfa310c2bb5 GIT binary patch literal 4414 zcmd^DO-NNy5WZT9V);vEfBuzb=t61}xTtNkvQ3LNZHzXyXpxH`L1+`A1R8{jf-OX& z0vB3oL1Jo9kt8IdwkWk0xhM^^`g&iVB&>iSs108|>Yh~nnw7S_O2C)tc zog)^bh!d{A#3VL-p$=*DF|n~zC^(fU+kSbf%J4YUcZ=j?~a-e zYvN8xadB_o21ZAL*;(N8XJC9B=;#0v6D5`=;&z=PyKL%dC0)~cw zTerlYo)&&%qiBxr-T@5_Kv@|uI0$_F2+Yg?uU`Yz)sow@N2Av-d$+T+Z=YoD-xo&k zb7TaVoD{dYS+WBIqTjy@zf#b);<9RG9a^>geC1dN~-!GbLMVqCiIuj)&qIrJUzJCW! zof0oK)wM?*Ta)^F$uf7yw>syQVH|8tO_J&B6aDL6>C@tK-8pZu`e7R{l%M9C$#FD%)!P(WCm^~p!eY*wO_x%P8k_j1)_j`>x!Sn`p4BN(#IDU3)Kba@o3(HO8 z`|0@b?EbMSY#%$3==1*Jy?;ewBN83&{p%m!KY0sYy@%RfM3fI3?1|YV2G@M${%!vQ H_&>+r#(imN literal 0 HcmV?d00001 diff --git a/src/gurubase-frontend/public/images/guru-base.svg b/src/gurubase-frontend/public/images/guru-base.svg new file mode 100644 index 0000000..75b5d2f --- /dev/null +++ b/src/gurubase-frontend/public/images/guru-base.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/gurubase-frontend/public/images/polygon-repeat.png b/src/gurubase-frontend/public/images/polygon-repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6d33b261a4151cba3b5ac8dcca8c7a69c7e31d GIT binary patch literal 4753 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%0AU?gd#F$4?-CP(e+Pf^Blt+0|}6Z__AO07D* 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

bjYKbn=@Y6(*7$Ju{Mf_$G0 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�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 literal 0 HcmV?d00001 diff --git a/src/gurubase-frontend/sentry.client.config.js b/src/gurubase-frontend/sentry.client.config.js new file mode 100644 index 0000000..108f7c4 --- /dev/null +++ b/src/gurubase-frontend/sentry.client.config.js @@ -0,0 +1,14 @@ +// This file configures the initialization of Sentry on the client. +// The config you add here will be used whenever a users loads a page in their browser. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; + +if (process.env.NEXT_PUBLIC_NODE_ENV === "production") { + Sentry.init({ + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false + }); +} diff --git a/src/gurubase-frontend/sentry.edge.config.js b/src/gurubase-frontend/sentry.edge.config.js new file mode 100644 index 0000000..ea116ec --- /dev/null +++ b/src/gurubase-frontend/sentry.edge.config.js @@ -0,0 +1,15 @@ +// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on). +// The config you add here will be used whenever one of the edge features is loaded. +// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; + +if (process.env.NEXT_PUBLIC_NODE_ENV === "production") { + Sentry.init({ + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false + }); +} diff --git a/src/gurubase-frontend/sentry.server.config.js b/src/gurubase-frontend/sentry.server.config.js new file mode 100644 index 0000000..3a15194 --- /dev/null +++ b/src/gurubase-frontend/sentry.server.config.js @@ -0,0 +1,14 @@ +// This file configures the initialization of Sentry on the server. +// The config you add here will be used whenever the server handles a request. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; + +if (process.env.NEXT_PUBLIC_NODE_ENV === "production") { + Sentry.init({ + dsn: process.env.NEXT_PUBLIC_SENTRY_DSN, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false + }); +} diff --git a/src/gurubase-frontend/src/app/StoreProvider.js b/src/gurubase-frontend/src/app/StoreProvider.js new file mode 100644 index 0000000..2b4cde4 --- /dev/null +++ b/src/gurubase-frontend/src/app/StoreProvider.js @@ -0,0 +1,14 @@ +"use client"; +import { useRef } from "react"; +import { Provider } from "react-redux"; +import { makeStore } from "@/redux/store"; + +export default function StoreProvider({ children }) { + const storeRef = useRef(); + if (!storeRef.current) { + // Create the store instance the first time this renders + storeRef.current = makeStore(); + } + + return {children}; +} diff --git a/src/gurubase-frontend/src/app/actions.js b/src/gurubase-frontend/src/app/actions.js new file mode 100644 index 0000000..5f898e6 --- /dev/null +++ b/src/gurubase-frontend/src/app/actions.js @@ -0,0 +1,670 @@ +"use server"; + +import { getAccessToken, getSession } from "@auth0/nextjs-auth0"; +import { redirect } from "next/navigation"; + +import HttpError from "@/utils/HttpError"; + +const shouldUsePublicRequest = () => { + return process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted"; +}; + +const getUserSession = async () => { + if (process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted") { + return null; + } + + return getSession(); +}; + +// Helper function for handling errors +const handleRequestError = (error, context = {}) => { + console.error("Request failed:", { + error: error.message, + stack: error.stack, + ...context + }); + + if (error.message === "NEXT_REDIRECT") { + throw error; + } + + if ( + error.message === "AuthenticationExpired" || + error.message.includes("access token expired") + ) { + redirect("/api/auth/login", "replace"); + } + + if (error.message.includes("Unauthorized")) { + return null; + } + + const errorMessage = error.message.includes('"msg"') + ? JSON.parse(error.message).msg + : error.message; + + return { error: true, message: errorMessage }; +}; + +// Helper function for authenticated requests +export const makeAuthenticatedRequest = async (url, options = {}) => { + // Early return for selfhosted mode + if (shouldUsePublicRequest()) { + return makePublicRequest(url, options); + } + + try { + const session = await getUserSession(); + + if (!session?.user) { + redirect("/api/auth/login", "replace"); + } + + const { accessToken } = await getAccessToken(); + + const headers = { + Authorization: `Bearer ${accessToken}`, + ...options.headers + }; + + // Extract cache configuration from options or use default no-store + const { next, cache, ...restOptions } = options; + const cacheConfig = + next || (cache !== undefined ? { cache } : { cache: "no-store" }); + + const response = await fetch(url, { + ...restOptions, + headers, + ...cacheConfig + }); + + if (!response.ok) { + if (response.status === 401 || response.status === 403) { + redirect("/api/auth/login", "replace"); + } + throw new Error(await response.text()); + } + + return response; + } catch (error) { + if (error.message === "NEXT_REDIRECT") { + redirect("/api/auth/login", "replace"); + } + + if ( + error.message === "AuthenticationExpired" || + error.message.includes("access token expired") + ) { + redirect("/api/auth/login", "replace"); + } + throw error; + } +}; + +// Helper for public API requests +export const makePublicRequest = async (url, options = {}) => { + const headers = { + // "Content-Type": "application/json", + Authorization: process.env.NEXT_PUBLIC_BACKEND_AUTH_TOKEN, + ...options.headers + }; + + const response = await fetch(url, { + ...options, + headers + }); + + if (response.status === 429) { + throw new HttpError("Server api rate limiting reached!", response.status); + } + + if (response.status === 425) { + throw new HttpError("Reranker model is not available!", response.status); + } + + if (!response.ok) { + let errorDetails; + + try { + errorDetails = await response.json(); + } catch (e) { + errorDetails = response.statusText; + } + console.error("Error details for url", url, errorDetails, response.status); + + if (errorDetails && typeof errorDetails === "object" && errorDetails.msg) { + throw new Error(errorDetails.msg); + } + + throw new Error(`Request failed with status ${response.status}`); + } + + return response; +}; + +// Public API Actions +export async function getAnswerFromMyBackend( + question, + guruType, + bingeId = null +) { + try { + const session = await getUserSession(); + const payload = { question }; + + if (bingeId) { + payload.binge_id = bingeId; + } + + if (session?.user) { + // Authenticated request + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/summary/`, + { + method: "POST", + body: JSON.stringify(payload), + headers: { + "Content-Type": "application/json" + } + } + ); + + return await response.json(); + } else { + // Public request + const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/summary/`, + { + method: "POST", + body: JSON.stringify(payload), + headers: { + "Content-Type": "application/json" + } + } + ); + + return await response.json(); + } + } catch (error) { + return { error: true, message: error.message, status: error.status }; + } +} + +export async function fetchDefaultQuestion(guruType) { + try { + const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/default_questions/`, + { + next: { revalidate: 3600 } + } + ); + + return await response.json(); + } catch (error) { + return { error: true, message: error.message, status: error.status }; + } +} + +// Do not use makePublicRequest for this, it can break the question generation stream +export async function getDataForSlugDetails( + slug, + guruType, + bingeId = null, + question = "" +) { + try { + const session = await getUserSession(); + let url = `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/question/${slug}`; + + // Only add question parameter if it's not empty + if (question) { + url += `?question=${question}`; + } + + // Add bingeId as a query parameter, considering if question was already added + if (bingeId) { + url += `${question ? '&' : '?'}binge_id=${bingeId}`; + } + + if (session?.user) { + // Authenticated request + const response = await makeAuthenticatedRequest(url, { + next: { revalidate: 10 } + }); + + if (!response.ok) { + const data = await response.json(); + + throw new Error(data.msg); + } + + const data = await response.json(); + + return JSON.stringify(data, null, 2); + } else { + // Public request + const response = await makePublicRequest(url, { + next: { revalidate: 10 } + }); + + if (!response.ok) { + const data = await response.json(); + + throw new Error(data.msg); + } + + const data = await response.json(); + + return JSON.stringify(data, null, 2); + } + } catch (error) { + const errorResponse = { msg: error.message }; + + return JSON.stringify(errorResponse, null, 2); + } +} + +export async function getGurutypeResources(guruType) { + try { + const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/resources/`, + { next: { revalidate: 3600 } } + ); + + return await response.json(); + } catch (error) { + return { error: true, message: error.message, status: error.status }; + } +} + +export async function getGuruTypes() { + try { + const cacheConfig = shouldUsePublicRequest() + ? { cache: "no-store" } + : { next: { revalidate: 3600 } }; + + const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/guru_types/`, + cacheConfig + ); + + return await response.json(); + } catch (error) { + return { error: true, message: error.message, status: error.status }; + } +} + +export async function getGuruType(slug) { + try { + const cacheConfig = shouldUsePublicRequest() + ? { cache: "no-store" } + : { next: { revalidate: 3600 } }; + + const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/guru_type/${slug}/`, + cacheConfig + ); + + return await response.json(); + } catch (error) { + return { error: true, message: error.message, status: error.status }; + } +} + +export async function checkGuruReadiness(guruName) { + try { + const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/guru_types/status/${guruName}/`, + { cache: "no-store" } + ); + const data = await response.json(); + + return data?.ready || false; + } catch (error) { + return false; + } +} + +// Authenticated API Actions +export async function getMyGurus() { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/my_gurus/` + ); + + if (!response) return null; + const data = await response.json(); + + return data; + } catch (error) { + return handleRequestError(error, { + url: `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/my_gurus/` + }); + } +} + +export async function createWidgetId(guruSlug, domainUrl) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruSlug}/widget_ids/`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ domain_url: domainUrl }) + } + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error, { domainUrl }); + } +} + +export async function deleteWidgetId(guruSlug, widgetId) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruSlug}/widget_ids/`, + { + method: "DELETE", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ widget_id: widgetId }) + } + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error, { widgetId }); + } +} + +export async function getGuruDataSources(customGuru, page = 1) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${customGuru}/resources/detailed/?page=${page}` + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error, { customGuru, page }); + } +} + +export async function createGuru(formData) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/guru_types/create_frontend/`, + { + method: "POST", + body: formData + } + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error); + } +} + +export async function updateGuru(guruSlug, formData) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/guru_types/update/${guruSlug}/`, + { + method: "PUT", + body: formData + } + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error, { guruSlug }); + } +} + +export async function deleteGuru(guruSlug) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/guru_types/delete/${guruSlug}/`, + { + method: "DELETE", + headers: { "Content-Type": "application/json" } + } + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error, { guruSlug }); + } +} + +export async function deleteGuruSources(guruSlug, sourceIds) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruSlug}/data_sources_frontend/`, + { + method: "DELETE", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ ids: sourceIds }) + } + ); + + if (!response) return null; + + return { success: true }; + } catch (error) { + return handleRequestError(error, { guruSlug, sourceIds }); + } +} + +export async function reindexGuruSources(guruSlug, sourceIds) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruSlug}/data_sources_reindex/`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ ids: sourceIds }) + } + ); + + if (!response) return null; + + return { success: true }; + } catch (error) { + return handleRequestError(error, { guruSlug, sourceIds }); + } +} + +export async function addGuruSources(guruSlug, formData) { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruSlug}/data_sources_frontend/`, + { + method: "POST", + body: formData + } + ); + + if (!response) return null; + + return await response.json(); + } catch (error) { + return handleRequestError(error, { guruSlug }); + } +} + +export async function getSitemapData(slug) { + const res = await fetch( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${slug}`, + { + next: { revalidate: 3600 } + } + ); + + const data = await res.text(); + + return data; +} + +export async function getExampleQuestions( + guruType, + bingeId, + slug, + questionText +) { + if (!slug) return []; + + try { + const session = await getUserSession(); + const endpoint = `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/follow_up/examples/`; + const payload = { + binge_id: bingeId, + question_slug: slug, + question_text: questionText + }; + + const response = session?.user + ? await makeAuthenticatedRequest(endpoint, { + cache: "no-store", + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload) + }) + : await makePublicRequest(endpoint, { + cache: "no-store", + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload) + }); + + if (!response || !response.ok) return []; + + const data = await response.json(); + + // Ensure we return a valid array of strings + return Array.isArray(data) ? data : []; + } catch (error) { + console.error("Error fetching example questions:", error); + + return []; + } +} + +export async function createBinge({ guruType, rootSlug }) { + try { + const response = await makeAuthenticatedRequest( + // const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/follow_up/binge/`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + root_slug: rootSlug + }) + } + ); + + if (!response.ok) { + throw new Error("Failed to initialize binge session"); + } + + const data = await response.json(); + + return data.id; + } catch (error) { + // console.error("Error initializing binge session:", error); + return null; + } +} + +export async function getBingeData(guruType, bingeId) { + const response = await makeAuthenticatedRequest( + // const response = await makePublicRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruType}/follow_up/graph/?binge_id=${bingeId}` + ); + + if (!response) return null; + + return await response.json(); +} + +export async function getBingeHistory(page = 1, query = "") { + try { + const response = await makeAuthenticatedRequest( + process.env.NEXT_PUBLIC_BACKEND_FETCH_URL + + "/binge-history/?page_num=" + + page + + "&search_query=" + + query + ); + + if (response.status === 429) { + throw new HttpError("Server api rate limitig reached!", response.status); + } + + if (!response.ok) { + throw new HttpError( + `HTTP error! status: ${response.status}`, + response.status + ); + } + + const data = await response.json(); + + return data; + } catch (error) { + return { error: true, message: error.message, status: error.status }; + } +} + +export async function getAuthTokenForStream() { + "use server"; + try { + const session = await getUserSession(); + + if (!session?.user) { + return null; + } + const { accessToken } = await getAccessToken(); + + return accessToken; + } catch (error) { + console.error("Error getting auth token:", error); + + return null; + } +} +export const updateGuruDataSourcesPrivacy = async (guruSlug, payload) => { + try { + const response = await makeAuthenticatedRequest( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${guruSlug}/data_sources/update/`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload) + } + ); + + if (!response.ok) { + throw new Error("Failed to update data sources privacy"); + } + + return await response.json(); + } catch (error) { + console.error("Error updating data sources privacy:", error); + } +}; + diff --git a/src/gurubase-frontend/src/app/api/auth/[auth0]/route.js b/src/gurubase-frontend/src/app/api/auth/[auth0]/route.js new file mode 100644 index 0000000..e76228e --- /dev/null +++ b/src/gurubase-frontend/src/app/api/auth/[auth0]/route.js @@ -0,0 +1,7 @@ +import { handleAuth } from "@auth0/nextjs-auth0"; +import { redirect } from "next/navigation"; + +export const GET = + process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted" + ? () => redirect("/not-found") + : handleAuth(); diff --git a/src/gurubase-frontend/src/app/binge-history/page.js b/src/gurubase-frontend/src/app/binge-history/page.js new file mode 100644 index 0000000..8991d6d --- /dev/null +++ b/src/gurubase-frontend/src/app/binge-history/page.js @@ -0,0 +1,35 @@ +import { getSession } from "@auth0/nextjs-auth0"; +import { redirect } from "next/navigation"; + +import { getGuruTypes } from "@/app/actions"; +import BingeHistoryMainPage from "@/components/BingeHistoryMainPage"; + +const Home = async () => { + // get guru types + const allGuruTypes = await getGuruTypes(); + + // Filter guru types to include only those with ready state true + // const readyGuruTypes = Array.isArray(allGuruTypes) + // ? allGuruTypes.filter((guruType) => guruType.ready === true) + // : []; + + // process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted"; + let session = null; + + if (process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted") { + session = null; + } else { + session = await getSession(); + if (!session?.user) { + redirect("/not-found"); + } + } + + return ( +

+ ); +}; + +export default Home; diff --git a/src/gurubase-frontend/src/app/fonts/gilroy-semibold.ttf b/src/gurubase-frontend/src/app/fonts/gilroy-semibold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8268469559da273cee84f56fbac005ad1c494071 GIT binary patch literal 83948 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�<$=nCLI=LIt|Rm#gru+)0S{1 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 { + dispatch(setIsLoading(true)); // to give loading skeleton + }, [dispatch]); + + const { guruType } = useParams(); // Use useParams to get the dynamic route parameters + + // You can add any UI inside Loading, including a Skeleton. + return ( + // Keep same UI while getting data from the server for instant questions +
+
+
+
+
+ +
+
+
+
+
+ ); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/_loading.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/_loading.js new file mode 100644 index 0000000..6b059d4 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/_loading.js @@ -0,0 +1,34 @@ +"use client"; +import Content from "@/components/Content"; +import Footer from "@/components/Footer"; +import Header from "@/components/Header"; +import { useEffect } from "react"; +import { useAppDispatch } from "@/redux/hooks"; +import { setIsLoading } from "@/redux/slices/mainFormSlice"; +import LoadingSkeleton from "@/components/Content/LoadingSkeleton"; +import { useParams } from "next/navigation"; + +export default function Loading() { + const dispatch = useAppDispatch(); + useEffect(() => { + dispatch(setIsLoading(true)); // to give loading skeleton + }, [dispatch]); + + const { guruType } = useParams(); // Use useParams to get the dynamic route parameters + + // You can add any UI inside Loading, including a Skeleton. + return ( + // Keep same UI while getting data from the server for instant questions +
+
+
+
+
+ +
+
+
+
+
+ ); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/action.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/action.js new file mode 100644 index 0000000..f8a7499 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/action.js @@ -0,0 +1,15 @@ +"use server"; + +export async function getSitemapData(slug) { + + const res = await fetch( + `${process.env.NEXT_PUBLIC_BACKEND_FETCH_URL}/${slug}`, + { + next: { revalidate: 1 } + } + ); + + const data = await res.text(); + + return data; +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/error.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/error.js new file mode 100644 index 0000000..7a85b60 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/error.js @@ -0,0 +1,24 @@ +"use client"; // Error components must be Client Components + +import { ExclamationCircleIcon } from "@/components/Icons"; + +export default function Error() { + return ( +
+ ); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/not-found.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/not-found.js new file mode 100644 index 0000000..0bf26ee --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/not-found.js @@ -0,0 +1,5 @@ +import { notFound } from "next/navigation"; + +export default function NotFound() { + notFound(); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/page.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/page.js new file mode 100644 index 0000000..0f53ec4 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/binge/[bingeId]/page.js @@ -0,0 +1,213 @@ +import * as Sentry from "@sentry/nextjs"; +import { cookies } from "next/headers"; +import { notFound, redirect } from "next/navigation"; + +import { getDataForSlugDetails, getGuruTypes } from "@/app/actions"; +import { ResultClient } from "@/components/ResultClient"; + +export async function generateMetadata(context) { + const { params, searchParams } = context; + let mainOgImage = + "https://s3.eu-central-1.amazonaws.com/anteon-strapi-cms-wuby8hpna3bdecoduzfibtrucp5x/Og_image_06c9ac418a.png"; + + let guruTypeOgImage = null; + + try { + let question = null; + let description = null; + let error = null; + let answerValid = null; + let resultNoIndex = null; + let questionCookieSummaryMatch = true; + + // if question exists in the searchParams + if (searchParams.question) { + const cookieStore = cookies(); + + const questionCookieSummary = cookieStore.get("questionSummary"); // get questionSummary cookie + + const { + question: streamQuestion, + description: streamDescription, + answerValid: streamAnswerValid, + noindex: streamNoIndex, + question_slug: streamSlug + } = JSON.parse(questionCookieSummary.value); + + if (streamSlug !== searchParams.question_slug) { + questionCookieSummaryMatch = false; // if slug in the cookie and slug in the params does not match + + if (searchParams.question_slug) { + // if slug exists in the params + //console.log("binge id is null"); + const response = await getDataForSlugDetails( + // get data for the slug from the backend and set it them as metadata + searchParams.question_slug, + params.guruType, + params.bingeId, + searchParams.question + ); + const { msg } = JSON.parse(response); + + if (msg?.toLowerCase() === "guru type is invalid.") { + notFound(); + } + if (response) { + const { + question: instantQuestion, + description: instantDescription, + noindex: instantNoIndex + } = JSON.parse(response); + + question = instantQuestion; + description = instantDescription; + resultNoIndex = instantNoIndex; + } + } + } + if (questionCookieSummaryMatch) { + question = streamQuestion; + description = streamDescription; + answerValid = streamAnswerValid; + resultNoIndex = streamNoIndex; + } + + if (!answerValid) { + // send to sentry if answer is not valid + Sentry.captureException( + new Error( + `Answer is not valid for slug:${searchParams.question_slug}` + ) + ); + } + } else if (searchParams.question_slug && !searchParams.question) { + // if only slug exists in the params and question not exists in the searchParams + try { + //console.log("binge id is null"); + const response = await getDataForSlugDetails( + searchParams.question_slug, + params.guruType, + null, + searchParams.question + ); + + const { msg } = JSON.parse(response); + + if (msg?.toLowerCase() === "guru type is invalid.") { + notFound(); + } + if (response) { + const { + question: instantQuestion, + description: instantDescription, + noindex: instantNoIndex, + og_image_url: instantOgImage + } = JSON.parse(response); + + question = instantQuestion; + description = instantDescription; + resultNoIndex = instantNoIndex; + guruTypeOgImage = instantOgImage; // when instant quesiton response has og:image specific to question use it + } + } catch (error) { + // console.error("error in generateMetadata", error); + notFound(); + } + } + + if (question && description) { + const canonicalUrl = `${process.env.NEXT_PUBLIC_PROJECT_URL}g/${params.guruType}/${searchParams.question_slug}`; + + return { + title: question + " | Gurubase", + description: description, + openGraph: { + title: question + " | Gurubase", + description: description, + images: guruTypeOgImage || mainOgImage, + url: canonicalUrl + }, + robots: { + index: false + }, + alternates: { + canonical: canonicalUrl + } + }; + } + } catch (error) { + // redirecto to 404 page + // console.error("error in generateMetadata", error); + } +} + +const Result = async ({ params, searchParams }) => { + if (!searchParams.question_slug) { + return redirect(`/not-found`); + } + + //console.log("Using bingeId:", params.bingeId); + const response = await getDataForSlugDetails( + searchParams.question_slug, + params.guruType, + params.bingeId, // Pass bingeId to the function + searchParams.question + ); + + const { msg: responseMsg } = JSON.parse(response); + + if (responseMsg?.toLowerCase() === "guru type is invalid.") { + notFound(); + } + + // get guru types + const allGuruTypes = await getGuruTypes(); + + const { + msg, + question, + content, + description, + references, + similar_questions, + date_updated, + trust_score + } = JSON.parse(response); + + const isInstantContentExist = !( + response && msg?.toLowerCase() === "question not found" + ); + + if (msg?.toLowerCase() === "guru type is invalid.") { + return redirect(`/not-found`); + } + + // const exampleQuestions = await getExampleQuestions( + // params.guruType, + // params.bingeId, + // searchParams.question_slug, + // question + // ); + + const exampleQuestions = []; + + return ( + + ); +}; + +export default Result; diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/error.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/error.js new file mode 100644 index 0000000..7a85b60 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/error.js @@ -0,0 +1,24 @@ +"use client"; // Error components must be Client Components + +import { ExclamationCircleIcon } from "@/components/Icons"; + +export default function Error() { + return ( +
+
+ +

+ 404 - Page Not Found +

+
+

+ Sorry, the page you are looking for does not exist. +

+ + Return Home + +
+ ); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/not-found.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/not-found.js new file mode 100644 index 0000000..0bf26ee --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/not-found.js @@ -0,0 +1,5 @@ +import { notFound } from "next/navigation"; + +export default function NotFound() { + notFound(); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/[slug]/page.js b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/page.js new file mode 100644 index 0000000..1f489b7 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/[slug]/page.js @@ -0,0 +1,212 @@ +import * as Sentry from "@sentry/nextjs"; +import { isbot } from "isbot"; +import { cookies, headers } from "next/headers"; +import { notFound, redirect } from "next/navigation"; + +import { getDataForSlugDetails, getGuruTypes } from "@/app/actions"; +import { ResultClient } from "@/components/ResultClient"; + +export async function generateMetadata(context) { + const { params, searchParams } = context; + let mainOgImage = + "https://s3.eu-central-1.amazonaws.com/anteon-strapi-cms-wuby8hpna3bdecoduzfibtrucp5x/Og_image_06c9ac418a.png"; + + let guruTypeOgImage = null; + + try { + let question = null; + let description = null; + let answerValid = null; + let resultNoIndex = null; + let questionCookieSummaryMatch = true; + let dateCreated = null; + let dateUpdated = null; + + // if question exists in the searchParams + if (searchParams.question) { + const cookieStore = cookies(); + + const questionCookieSummary = cookieStore.get("questionSummary"); // get questionSummary cookie + + const { + question: streamQuestion, + description: streamDescription, + answerValid: streamAnswerValid, + noindex: streamNoIndex, + question_slug: streamSlug + } = JSON.parse(questionCookieSummary.value); + + if (streamSlug !== params.slug) { + questionCookieSummaryMatch = false; // if slug in the cookie and slug in the params does not match + + if (params.slug) { + // if slug exists in the params + //console.log("binge id is null"); + const response = await getDataForSlugDetails( + // get data for the slug from the backend and set it them as metadata + params.slug, + params.guruType, + null, + searchParams.question + ); + const { msg } = JSON.parse(response); + + if (msg?.toLowerCase() === "guru type is invalid.") { + notFound(); + } + if (response) { + const { + question: instantQuestion, + description: instantDescription, + noindex: instantNoIndex + } = JSON.parse(response); + + question = instantQuestion; + description = instantDescription; + resultNoIndex = instantNoIndex; + } + } + } + if (questionCookieSummaryMatch) { + question = streamQuestion; + description = streamDescription; + answerValid = streamAnswerValid; + resultNoIndex = streamNoIndex; + } + + if (!answerValid) { + // send to sentry if answer is not valid + Sentry.captureException( + new Error(`Answer is not valid for slug:${params.slug}`) + ); + } + } else if (params.slug && !searchParams.question) { + // if only slug exists in the params and question not exists in the searchParams + try { + //console.log("binge id is null"); + const response = await getDataForSlugDetails( + params.slug, + params.guruType, + null, + searchParams.question + ); + + const { msg } = JSON.parse(response); + + if (msg?.toLowerCase() === "guru type is invalid.") { + notFound(); + } + if (response) { + const { + question: instantQuestion, + description: instantDescription, + noindex: instantNoIndex, + og_image_url: instantOgImage, + date_created_meta: instantDateCreated, + date_updated_meta: instantDateUpdated + } = JSON.parse(response); + + question = instantQuestion; + description = instantDescription; + resultNoIndex = instantNoIndex; + guruTypeOgImage = instantOgImage; + dateCreated = instantDateCreated; + dateUpdated = instantDateUpdated; + } + } catch (error) { + // console.error("error in generateMetadata", error); + notFound(); + } + } + + if (question && description) { + const canonicalUrl = `${process.env.NEXT_PUBLIC_PROJECT_URL}g/${params.guruType}/${params.slug}`; + + return { + title: question + " | Gurubase", + description: description, + openGraph: { + title: question + " | Gurubase", + description: description, + images: guruTypeOgImage || mainOgImage, + url: canonicalUrl, + type: "article", + publishedTime: dateCreated, + modifiedTime: dateUpdated, + section: params.guruType, + tags: [params.guruType] + }, + robots: { + index: resultNoIndex ? false : true + }, + alternates: { + canonical: canonicalUrl + } + }; + } + } catch (error) { + // redirecto to 404 page + // console.error("error in generateMetadata", error); + } +} + +const Result = async ({ params, searchParams }) => { + // Early return for missing slug + if (!params.slug) { + return redirect(`/not-found`); + } + + // Get all data first + const [response, allGuruTypes] = await Promise.all([ + getDataForSlugDetails(params.slug, params.guruType, null, searchParams.question), + getGuruTypes() + ]); + + const parsedResponse = JSON.parse(response); + const { msg: responseMsg } = parsedResponse; + + // Handle invalid guru type + if (responseMsg?.toLowerCase() === "guru type is invalid.") { + notFound(); + } + + const { + msg, + question, + content, + description, + references, + similar_questions, + trust_score, + dirty, + date_updated + } = parsedResponse; + + const headersList = headers(); + const userAgent = headersList.get("user-agent") || ""; + const isBot = isbot(userAgent); + + const reload = dirty && !isBot; + const isInstantContentExist = !(response && msg?.toLowerCase() === "question not found") && !reload; + const exampleQuestions = []; + + return ( + + ); +}; + +export default Result; diff --git a/src/gurubase-frontend/src/app/g/[guruType]/_loading.js b/src/gurubase-frontend/src/app/g/[guruType]/_loading.js new file mode 100644 index 0000000..e9a7999 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/_loading.js @@ -0,0 +1,34 @@ +"use client"; +import Content from "@/components/Content"; +import Footer from "@/components/Footer"; +import Header from "@/components/Header"; +import { useEffect } from "react"; +import { useAppDispatch } from "@/redux/hooks"; +import { setIsLoading } from "@/redux/slices/mainFormSlice"; +import LoadingSkeleton from "@/components/Content/LoadingSkeleton"; +import { useParams } from "next/navigation"; + +export default function Loading() { + const dispatch = useAppDispatch(); + const { guruType } = useParams(); // Use useParams to get the dynamic route parameters + + useEffect(() => { + dispatch(setIsLoading(true)); // to give loading skeleton + }, [dispatch]); + + // You can add any UI inside Loading, including a Skeleton. + return ( + // Keep same UI while getting data from the server for instant questions +
+
+
+
+
+ +
+
+
+
+
+ ); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/error.js b/src/gurubase-frontend/src/app/g/[guruType]/error.js new file mode 100644 index 0000000..7a85b60 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/error.js @@ -0,0 +1,24 @@ +"use client"; // Error components must be Client Components + +import { ExclamationCircleIcon } from "@/components/Icons"; + +export default function Error() { + return ( +
+
+ +

+ 404 - Page Not Found +

+
+

+ Sorry, the page you are looking for does not exist. +

+ + Return Home + +
+ ); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/not-found.js b/src/gurubase-frontend/src/app/g/[guruType]/not-found.js new file mode 100644 index 0000000..0bf26ee --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/not-found.js @@ -0,0 +1,5 @@ +import { notFound } from "next/navigation"; + +export default function NotFound() { + notFound(); +} diff --git a/src/gurubase-frontend/src/app/g/[guruType]/page.js b/src/gurubase-frontend/src/app/g/[guruType]/page.js new file mode 100644 index 0000000..98416e2 --- /dev/null +++ b/src/gurubase-frontend/src/app/g/[guruType]/page.js @@ -0,0 +1,109 @@ +// import { getGuruPromptMap } from "@/components/Header/utils"; +import { redirect } from "next/navigation"; + +import { + fetchDefaultQuestion, + getGuruType, + getGurutypeResources, + getGuruTypes +} from "@/app/actions"; +import GuruTypeClient from "@/components/GuruTypeClient"; +import GuruTypeInitializer from "@/components/GuruTypeInitializer"; + +export async function generateMetadata({ params, searchParams }) { + const { guruType, slug } = params; + let mainOgImage = + "https://s3.eu-central-1.amazonaws.com/anteon-strapi-cms-wuby8hpna3bdecoduzfibtrucp5x/Og_image_06c9ac418a.png"; + + const data = await getGuruType(guruType); + + // Create OG image URL based on environment + let guruTypeOgImage; + const env = process.env.NEXT_PUBLIC_NODE_ENV; + + if (env === "development" || env === "staging" || env === "production") { + const envFolder = env === "development" ? "dev" : env; + + guruTypeOgImage = `https://storage.googleapis.com/gurubase-og-images/${envFolder}/custom-base-templates/${guruType}.jpg`; + } + + if (guruType && !slug) { + const guruName = data?.name || guruType; + const canonicalUrl = `${process.env.NEXT_PUBLIC_PROJECT_URL}g/${guruType}`; + + return { + title: `Your Shortcut Search for ${guruName} | Gurubase`, + description: `Search for anything related to ${guruName} and receive instant answers.`, + openGraph: { + title: `Your Shortcut Search for ${guruName} | Gurubase`, + description: `Search for anything related to ${guruName} and receive instant answers.`, + images: guruTypeOgImage || mainOgImage, + url: canonicalUrl + }, + alternates: { + canonical: canonicalUrl + } + }; + } +} + +const Home = async (context) => { + const { params } = context; + const { guruType } = params; + + // get guru types + + const allGuruTypes = await getGuruTypes(); + + // Filter guru types to include only those with ready state true + // const readyGuruTypes = allGuruTypes.filter( + // (guruType) => guruType.ready === true + // ); + + // if guruType is not found in allGuruTypes, return 404 + if (!allGuruTypes?.find((guru) => guru.slug === guruType)) { + return redirect(`/not-found`); + } + + const readyGuruTypes = allGuruTypes; + + // get default questions + let defaultQuestions = []; + + try { + const data = await fetchDefaultQuestion(guruType); + + if (data && data.length > 3) { + defaultQuestions = data.slice(0, 3); + } else { + defaultQuestions = data ? data : []; + } + } catch (error) { + // console.error("Error occurred in default questions get:", error); + } + + // get guruType resources + let resources = []; + + try { + const data = await getGurutypeResources(guruType); + + resources = data; + } catch (error) { + // console.error("Error occurred in guru Type resources get:", error); + } + + return ( + <> + + + + ); +}; + +export default Home; diff --git a/src/gurubase-frontend/src/app/global-error.js b/src/gurubase-frontend/src/app/global-error.js new file mode 100644 index 0000000..08a1bc0 --- /dev/null +++ b/src/gurubase-frontend/src/app/global-error.js @@ -0,0 +1,36 @@ +"use client"; + +import * as Sentry from "@sentry/nextjs"; +import Error from "next/error"; +import { useEffect } from "react"; + +export default function GlobalError({ error }) { + let statusCode = error.statusCode; + let errorMessage = "An unexpected error occurred"; + + if ( + statusCode === 500 || + (error instanceof SyntaxError && + error.message.includes("is not valid JSON")) + ) { + statusCode = 404; + errorMessage = "Bad Request: Invalid JSON received"; + } + + useEffect(() => { + if ( + process.env.NEXT_PUBLIC_SENTRY_AUTH_TOKEN && + process.env.NEXT_PUBLIC_NODE_ENV === "production" + ) { + Sentry.captureException(error); + } + }, [error]); + + return ( + + + + + + ); +} diff --git a/src/gurubase-frontend/src/app/globals.css b/src/gurubase-frontend/src/app/globals.css new file mode 100644 index 0000000..6ea4e46 --- /dev/null +++ b/src/gurubase-frontend/src/app/globals.css @@ -0,0 +1,967 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +:root { + --foreground-rgb: 0, 0, 0; + --background-start-rgb: 214, 219, 220; + --background-end-rgb: 255, 255, 255; +} + +@layer base { + .dark { + /* Fonts */ + --fs-h1: 3rem; + --lh-h1: 3.125rem; + + --fs-h2: 2.4375rem; + --lh-h2: 2.9375rem; + + --fs-h3: 1.9375rem; + --lh-h3: 2.375rem; + + --fs-h4: 1.5625rem; + --lh-h4: 1.875rem; + + --fs-h5: 1.25rem; + --lh-h5: 1.5rem; + + --fs-body: 1rem; + --lh-body: 1.1875rem; + --fs-body-2: 0.875rem; + --lh-body-2: 1.0625rem; + + --fs-body-3: 0.75rem; + --lh-body-3: 0.9375rem; + + --fs-body-4: 0.625rem; + --lh-body-4: 0.75rem; + + --fs-caption: 0.5rem; + --lh-caption: 0.625rem; + + /* Colors */ + --primary: 0 0% 98%; + --primary-lighten-2: #a4a7ab; + --primary-lighten-1: #5f666c; + --primary-base: #1b242d; + --primary-darken-1: #13191f; + --primary-darken-2: #0b0e12; + + --secondary: 0 0% 14.9%; + --secondary-lighten-2: #faca77; + --secondary-lighten-1: #f9b949; + --secondary-base: #f7a71c; + --secondary-darken-1: #c68616; + --secondary-darken-2: #946411; + + --black-base: #000000; + --black-50: #f6f6f6; + --black-100: #e2e2e2; + --black-200: #d4d4d4; + --black-400: #242629; + --black-500: #0a0a0c; + + --gray: #6d6d6d; + --gray-25: #fafafa; + --gray-50: #f0f1f3; + --gray-100: ##d1d4da; + --gray-200: #babfc8; + --gray-300: #9aa6b8; + --gray-400: #6d6d6d; + --gray-500: #697488; + --gray-700: #4b5261; + + --white: #ffffff; + + --success: #16a34a; + --success-50: #f0fdf4; + + --error: #dc2626; + --error-50: #fef2f2; + + --warning: #f8aa1c; + --warning-50: #fef7e8; + + --blue: #2563eb; + --blue-50: #eff6ff; + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: #e2e2e2; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --foreground-rgb: 255, 255, 255; + --background-start-rgb: 0, 0, 0; + --background-end-rgb: 0, 0, 0; + --aa-input-background-color-rgb: 0, 0, 0, 0 !important; + .aa-ClearButton .aa-ClearIcon { + width: 24px; + height: 24px; + } + /* --aa-detached-modal-media-query: (min-width: 768px) !important; */ + --fs-body-3: 0.75rem; + --lh-body-3: 0.9375rem; + --fs-body-4: 0.625rem; + --lh-body-4: 0.75rem; + --fs-body-2: 0.875rem; + --lh-body-2: 1.0625rem; + --fs-body: 1rem; + --lh-body: 1.1875rem; + + --fs-h1: 3rem; + --lh-h1: 3.125rem; + + --fs-h2: 2.4375rem; + --lh-h2: 2.9375rem; + + --fs-h3: 1.9375rem; + --lh-h3: 2.375rem; + + --fs-h4: 1.5625rem; + --lh-h4: 1.875rem; + + --fs-h5: 1.25rem; + --lh-h5: 1.5rem; + + --fs-caption: 0.5rem; + --lh-caption: 0.625rem; + } +} + +.polygon-fill { + background-image: url("/images/polygon-repeat.png"); + background-size: 31px 29px; + background-repeat: repeat-x repeat-y; +} + +@layer utilities { + .text-balance { + text-wrap: balance; + } + + .no-scrollbar::-webkit-scrollbar { + display: none; + } + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } + + /* Hide the scrollbar track for Chrome, Safari, and Opera */ + .featured-scrollbar::-webkit-scrollbar-track { + margin-right: -10px; + display: none !important; /* Hide the track by setting its background to none */ + } + + .featured-scrollbar { + scrollbar-gutter: stable; + overflow-y: scroll !important; + scrollbar-width: thin; + } + + .featured-scrollbar::-webkit-scrollbar { + overscroll-behavior: contain !important; + width: 5px !important; + height: 10px !important; + } + + .featured-scrollbar::-webkit-scrollbar-thumb { + overscroll-behavior: contain !important; + width: 5px !important; + background: #888 !important; + border-radius: 10px !important; + cursor: pointer !important; + background-clip: content-box; + } + + .featured-scrollbar::-webkit-scrollbar-thumb:hover { + background: #888 !important; + } +} + +@keyframes gradient-border { + 0% { + border-color: white; + } + 50% { + border-color: blue; + } + 100% { + border-color: white; + } +} + +#autocomplete .aa-Panel { + position: absolute !important; + width: 100% !important; + left: 0 !important; + right: 0 !important; + margin: 0 !important; +} + +#autocomplete .aa-Input { + width: 100% !important; +} + +.aa-DetachedSearchButton { + width: 100% !important; +} + +.slide-pane__content { + padding: 0 !important; + border-radius: 16px !important; +} + +.slide-pane { + border-radius: 16px 16px 0 0 !important; +} + +.input-field:focus { + outline: none; + animation: gradient-border 3s linear infinite; + /* linear gradient should be from left to middle and middle to right with white to blue color */ + border-image-source: linear-gradient( + to right, + white 0%, + blue 50%, + white 100% + ); +} + +.anteon-prose { + /* Tailwind CSS for additional styling on code blocks */ + + max-width: 100% !important; + @apply prose prose-invert font-normal; + @apply 2xl:prose-base; + @apply prose-strong:dark:text-gray-100 prose-strong:text-gray-800; + @apply prose-a:text-anteon-react-light-link prose-a:dark:text-anteon-react-dark-link prose-a:font-normal prose-a:no-underline; + + @apply prose-h1:font-bold; + @apply prose-h1:text-gray-800 prose-h1:dark:text-gray-100; + @apply prose-h1:text-h2 prose-h1:leading-[2.15rem]; + @apply xs:prose-h1:text-[1.7rem] xs:prose-h1:leading-[2.5rem]; + @apply prose-h1:mb-4 sm:prose-h1:mb-8; + + @apply prose-h2:font-semibold; + @apply prose-h2:text-gray-800 prose-h2:dark:text-gray-100; + @apply prose-h2:text-h3 prose-h2:leading-[2rem]; + @apply xs:prose-h2:text-[1.5rem] xs:prose-h2:leading-[2rem]; + @apply prose-h2:mb-4 sm:prose-h2:mb-6; + + @apply prose-h3:font-semibold; + @apply prose-h3:text-gray-800 prose-h3:dark:text-gray-100; + @apply prose-h3:text-h4; + @apply xs:prose-h3:text-[1.25rem] xs:prose-h3:leading-[1.75rem]; + @apply prose-h3:mb-4 sm:prose-h3:mb-6; + + @apply prose-h4:font-semibold; + @apply prose-h4:text-gray-800 prose-h4:dark:text-gray-100; + @apply prose-h4:text-h5; + @apply prose-h4:mb-4 sm:prose-h4:mb-6; + + @apply prose-h5:font-semibold; + @apply prose-h5:text-gray-800 prose-h5:dark:text-gray-100; + @apply prose-h5:text-sm; + @apply prose-h5:mb-4 sm:prose-h5:mb-6; + + @apply prose-p:dark:text-gray-100 prose-p:text-gray-800 prose-p:mb-5 prose-p:mt-0; + @apply prose-p:text-base sm:prose-p:leading-7; + + @apply prose-li:text-sm sm:prose-li:text-base; + @apply prose-li:my-0 2xl:prose-li:text-base; + @apply prose-li:pl-0; + @apply prose-ul:pl-[18px] prose-ul:ml-0 prose-ul:dark:text-gray-100 prose-ul:text-gray-800; + @apply prose-ol:pl-[18px] prose-ol:ml-0 prose-ol:dark:text-gray-100 prose-ol:text-gray-800; + + @apply prose-blockquote:last:mb-0 prose-blockquote:border-l-4 prose-blockquote:rounded-lg prose-blockquote:py-4 prose-blockquote:pr-4 prose-blockquote:pl-3 prose-blockquote:font-normal prose-blockquote:not-italic; + @apply prose-blockquote:bg-gray-100 prose-blockquote:text-gray-800 prose-blockquote:border-l-gray-400; + @apply prose-blockquote:dark:bg-gray-700 prose-blockquote:dark:text-gray-100 prose-blockquote:dark:border-l-gray-500; + + @apply prose-code:text-body 2xl:prose-code:text-body; + /* @apply prose-code:translate-y-0.5; */ + @apply prose-code:inline-block; + @apply prose-code:text-gray-700 prose-code:bg-gray-400 prose-code:bg-opacity-10; + @apply prose-code:dark:text-gray-0 prose-code:dark:bg-gray-400 prose-code:dark:bg-opacity-10; + @apply prose-code:px-1 prose-code:py-0 prose-code:rounded prose-code:font-jetBrains-mono prose-code:before:content-none prose-code:after:content-none; + @apply prose-code:font-normal; + @apply prose-code:decoration-clone; + @apply prose-code:border-none; + + @apply max-w-none; +} + +/* .anteon-prose can have code elements and remove margin from them */ + +.anteon-prose pre, +code { + background-color: transparent; + color: #ffffff; +} + +.anteon-prose li code { + @apply align-baseline; +} + +.anteon-prose table code { + @apply !align-baseline; +} + +.anteon-prose li::marker { + @apply text-black-600; +} + +.anteon-prose ul li::marker { + @apply text-xl leading-7; +} + +/* .anteon-prose *:last-child:not(header h1) { + margin-bottom: 0; +} */ + +.anteon-prose h1 code, +.anteon-prose h2 code, +.anteon-prose h3 code, +.anteon-prose h4 code { + font-size: inherit; + line-height: inherit; + vertical-align: bottom; + transform: translateY(0); +} + +.anteon-prose h4 code { + text-transform: none; + letter-spacing: normal; +} + +.anteon-prose code span { + text-decoration: none !important; +} + +.anteon-prose a.hash-link { + position: relative; + width: 0; + padding: 0; + display: inline-flex; + margin-left: 6px; +} + +.anteon-prose a.hash-link::before { + content: ""; + background-size: 12px 12px; + background-image: url('data:image/svg+xml,'); + @apply bg-gray-400 bg-opacity-10; + @apply leading-7; + @apply absolute; + @apply w-7 h-7 inline-flex rounded-[10px]; + @apply bg-center bg-no-repeat bg-[size:0.875rem]; + @apply top-1/2 -translate-y-1/2; + @apply transition-all duration-200 ease-in-out; + @apply -left-px; +} + +.anteon-prose a.hash-link:hover::before { + @apply bg-[size:1rem]; +} + +html[data-theme="dark"] .anteon-prose a.hash-link::before { + background-image: url('data:image/svg+xml,'); +} + +.anteon-prose blockquote, +.anteon-prose blockquote p { + @apply before:content-none after:content-none; +} + +.anteon-prose table { + @apply prose-table:border-none; +} + +.anteon-prose table tr { + border-top: unset; +} + +.anteon-prose table th, +.anteon-prose table td { + @apply border border-gray-300 px-2 py-2 text-gray-800 dark:border-gray-600 dark:text-gray-100; + @apply text-base leading-6; + @apply align-top; +} + +.anteon-prose table th { + @apply font-semibold; + @apply text-gray-800 dark:text-gray-100; + @apply text-base leading-7; +} + +.anteon-prose table th code { + @apply text-base; +} + +.anteon-prose table tbody tr:nth-child(odd) { + @apply bg-gray-400 bg-opacity-10; +} + +.anteon-prose table tbody tr:nth-child(even) { + @apply bg-gray-0 dark:bg-gray-800; +} + +.anteon-prose table thead { + @apply bg-gray-0 dark:bg-gray-800; +} + +.anteon-prose table thead tr { + @apply border-none; +} + +.anteon-prose .table-container { + @apply overflow-auto max-w-full mt-8 mb-4 pb-4; +} + +.anteon-prose .table-container table { + @apply my-0 table table-auto; +} + +.anteon-toc-item { + @apply cursor-pointer; +} + +.anteon-toc-item code::before, +.anteon-toc-item code::after { + content: ""; +} + +.anteon-toc-item code { + @apply rounded !border-none py-0.5 px-1 !align-bottom font-jetBrains-mono !text-inherit dark:bg-gray-600 dark:bg-opacity-30 dark:!text-inherit; + font-size: 12px; +} + +a:has(> code) { + text-decoration: none !important; +} + +a:has(> code) code { + @apply !text-anteon-react-light-link dark:!text-anteon-react-dark-link !align-baseline; +} + +p:has(> code) code { + @apply mx-0.5 !align-baseline; +} + +li a:has(> code) code { + @apply !mx-0 !align-baseline; +} + +/* admonition overrides */ + +.admonition.admonition-caution code:not(pre > code) { + @apply dark:bg-anteon-react-dark-orange dark:bg-opacity-[0.15] bg-anteon-react-dark-orange bg-opacity-[15%]; +} + +.admonition.admonition-caution li::marker { + @apply dark:text-anteon-react-dark-orange text-anteon-react-light-orange text-xl leading-7; +} + +.admonition.admonition-danger code:not(pre > code) { + @apply dark:bg-anteon-red dark:bg-opacity-[0.15] bg-anteon-red bg-opacity-[15%]; +} + +.admonition.admonition-danger li::marker { + @apply dark:text-anteon-red text-anteon-red text-xl leading-7; +} + +.admonition.admonition-info code:not(pre > code) { + @apply dark:bg-anteon-react-dark-purple dark:bg-opacity-[0.15] bg-anteon-react-light-purple bg-opacity-[15%]; +} + +.admonition.admonition-info li::marker { + @apply dark:text-anteon-react-dark-purple text-anteon-react-light-purple text-xl leading-7; +} + +.admonition.admonition-tip code:not(pre > code) { + @apply dark:bg-anteon-react-dark-green-alt dark:bg-opacity-[0.15] bg-anteon-react-light-green-alt bg-opacity-[15%]; +} + +.admonition.admonition-tip li::marker { + @apply dark:text-anteon-react-dark-green-alt text-anteon-react-light-green-alt text-xl leading-7; +} + +.admonition.admonition-note code:not(pre > code) { + @apply dark:bg-anteon-react-dark-green dark:bg-opacity-[0.15] bg-anteon-react-light-green bg-opacity-[15%]; +} + +.admonition.admonition-note li::marker { + @apply dark:text-anteon-react-dark-green text-anteon-react-light-green text-xl leading-7; +} + +.admonition pre.prism-code code { + @apply bg-transparent; +} + +.anteon-prose blockquote li::marker { + @apply dark:text-gray-500 text-gray-400 text-xl leading-7; +} + +.anteon-prose blockquote code:not(pre > code) { + @apply dark:bg-gray-500 dark:bg-opacity-[0.10] bg-gray-400 bg-opacity-[15%]; +} + +.anteon-prose blockquote .anteon-common-code-block { + @apply mx-0; +} + +/* */ + +.anteon-details > summary + div > div { + @apply mt-0 border-t-0 pt-0; +} + +.anteon-details-content { + @apply p-4; +} + +.anteon-details .anteon-details-content > div > *:last-child { + @apply !mb-0; +} + +.anteon-details > summary .anteon-details-triangle { + @apply transition-transform duration-200 ease-in-out; + @apply -rotate-90; +} + +.anteon-details[open] > summary .anteon-details-triangle { + @apply rotate-0; +} + +html .no-underline { + text-decoration: none; +} + +html[data-active-page="index"], +html[data-active-page="index"] body { + @apply bg-gray-800; +} + +@keyframes element-animation { + 0% { + opacity: 0; + } + + 5% { + opacity: 1; + } + + 30% { + opacity: 1; + } + + 35% { + opacity: 0; + } + + 100% { + opacity: 0; + } +} + +.animation-parent { + transform: translate3d(0, 0, 0); + backface-visibility: hidden; + perspective: 1000; +} + +.sp-preview .sp-loading { + display: none; +} + +.sp-preview .sp-custom-loading { + display: none; +} + +.sp-preview .sp-loading + .sp-custom-loading { + display: flex; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + height: 100%; + /* background: white; */ + z-index: calc(var(--sp-zIndices-top) + 1); + justify-content: center; + align-items: center; + pointer-events: none; +} + +.sp-icon-standalone[title="Open in CodeSandbox"] svg + span { + display: none; +} +button.sp-button.sp-icon-standalone[title="Open in CodeSandbox"]:has( + svg + span + ) { + padding-left: 0px; + padding-right: 4px; + width: 26px; +} + +.anteon-tab-content > *:last-child { + @apply mb-0; +} + +.admonition-simple ul { + margin: 0; + list-style-position: outside; + padding-left: 24px; + list-style-type: "- "; +} + +.admonition .anteon-common-code-block { + margin-left: 0; + margin-right: 0; +} + +.admonition-simple * { + @apply text-sm leading-4 sm:leading-5; +} + +.admonition-simple .admonition-content *:last-child { + @apply mb-0; +} + +.admonition-simple .admonition-content ul li::marker { + @apply text-gray-700 dark:text-gray-100; +} + +h4 > del:has(code:only-child) { + @apply no-underline; +} + +h4 > del:has(code:only-child) code { + @apply line-through; +} + +.theme-code-block-highlighted-line { + @apply !bg-anteon-react-light-link !bg-opacity-[0.07] dark:!bg-anteon-react-dark-link dark:!bg-opacity-[0.05]; + @apply relative; +} + +.theme-code-block-highlighted-line::after, +.theme-code-block-highlighted-line::before { + content: ""; + @apply block absolute top-0; + @apply w-0.5 h-full; + @apply bg-anteon-react-light-link bg-opacity-75 dark:!bg-anteon-react-dark-link dark:bg-opacity-50; +} + +.theme-code-block-highlighted-line::after { + @apply left-0; +} + +.theme-code-block-highlighted-line::before { + @apply right-0; +} + +.anteon-prose .table-full-width .table-container, +.anteon-prose .table-full-width .props-table { + /* --preferred-full-table-width */ + --full-width-limit: 1280px; + --applied-full-table-width: min( + var(--preferred-full-table-width, 100%), + var(--full-width-limit) + ); + max-width: var(--applied-full-table-width); + margin-left: calc( + (-1 * ((var(--applied-full-table-width, 100%) - 100%) / 2)) + 16px + ); + margin-right: calc( + (-1 * ((var(--applied-full-table-width, 100%) - 100%) / 2)) + 16px + ); +} + +.anteon-prose code, +.font-mono, +.font-jetBrains-mono { + font-variant-ligatures: none !important; + font-feature-settings: "liga" 0; +} + +h1 del, +h2 del, +h3 del, +h4 del, +h1 del code, +h2 del code, +h3 del code, +h4 del code { + @apply !line-through; + @apply !text-gray-400 dark:!text-gray-500; +} + +.highlight-code code { + @apply !text-white dark:!text-gray-500; +} + +.highlight-code pre { + @apply !bg-gray-700 dark:!text-gray-500 !mb-4; +} + +.docs-wrapper *::selection { + @apply bg-anteon-selection text-gray-800; +} + +.aa-Panel { + z-index: 99; + background-color: #fdfdfd !important; + width: 100%; +} +.aa-Panel .aa-PanelLayout { + padding: 0; +} +.aa-Input, +.aa-ClearButton { + background-color: transparent !important; +} + +.aa-ClearButton { + padding: 0; +} +.aa-ClearIcon { + color: #6d6d6d; + &:hover { + color: #1b242d; + } +} + +.aa-Panel .aa-Item { + border-radius: 0; + padding: 1rem 1.5rem; + background-color: #fdfdfd; +} +.aa-Panel .aa-Item:hover { + background-color: #f0f1f3; +} +.aa-Panel .aa-Item:not(:last-child) { + border-bottom: 1px solid #e2e2e2; +} +.aa-Panel--scrollable { + padding: 0; +} +.privacy-policy ul { + padding-left: 1rem; +} +.privacy-policy ul li { + list-style-type: disc; + list-style-position: inside; +} +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} + +.custom-scrollbar { + scrollbar-width: thin; + scrollbar-color: rgba(155, 155, 155, 0.5) transparent; +} + +.custom-scrollbar::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +.custom-scrollbar::-webkit-scrollbar-track { + background: transparent; +} + +.custom-scrollbar::-webkit-scrollbar-thumb { + background-color: rgba(155, 155, 155, 0.5); + border-radius: 20px; + border: transparent; +} + +.custom-scrollbar::-webkit-scrollbar-thumb:hover { + background-color: rgba(155, 155, 155, 0.7); +} + +#autocomplete .aa-Input { + height: 100% !important; + padding: 0 !important; + font-size: 16px !important; + display: flex !important; + align-items: center !important; +} + +#autocomplete .aa-InputWrapper { + height: 100% !important; + display: flex !important; + align-items: center !important; + padding: 0 !important; +} + +#autocomplete .aa-Form { + border: none !important; +} + +#autocomplete .aa-Form:focus-within { + border: none !important; + box-shadow: none !important; + outline: none !important; +} + +/* Input wrapper */ +.aa-InputWrapper { + flex: 1 !important; + margin-right: 40px !important; /* Clear button için yer */ + position: relative !important; + + outline: none !important; + -webkit-appearance: none !important; + box-shadow: none !important; +} + +/* Input field */ +.aa-Input { + width: 100% !important; + height: 100% !important; + padding: 0 16px !important; + border: none !important; + background: transparent !important; + font-size: 14px !important; + + outline: none !important; + -webkit-appearance: none !important; + box-shadow: none !important; +} + +/* Clear button */ +.aa-ClearButton { + position: absolute !important; + right: 16px !important; + top: 50% !important; + transform: translateY(-50%) !important; + padding: 0 !important; + margin: 0 !important; + display: flex !important; + align-items: center !important; + justify-content: center !important; +} + +/* Panel (suggestions dropdown) */ +.aa-Panel { + width: 100% !important; + margin: 0 !important; + border-radius: 0 0 20px 20px !important; +} + +#autocomplete { + width: 100% !important; + + outline: none !important; + -webkit-appearance: none !important; + box-shadow: none !important; +} + +.aa-Autocomplete { + width: 100% !important; + height: 100% !important; +} + +.aa-InputWrapperPrefix { + display: none !important; +} + +.hidden-cross { + display: none !important; +} + +body.binge-map-open { + overflow: hidden; +} + +input[data-follow-up-input] { + font-size: 16px !important; +} + +@keyframes progress { + 5% { + width: 5%; + } + 40% { + width: 40%; + } + 100% { + width: 98%; + } +} + +@keyframes progress-to-complete { + to { + width: 100%; + } +} + +.animate-progress { + animation: progress 2s ease-in-out infinite; +} + +.anteon-prose + :is(:where(li):not(:where([class~="not-prose"], [class~="not-prose"] *))) { + line-height: 1.75rem !important; +} + +.anteon-prose li { + line-height: 1.75rem !important; +} diff --git a/src/gurubase-frontend/src/app/guru/[customGuru]/page.js b/src/gurubase-frontend/src/app/guru/[customGuru]/page.js new file mode 100644 index 0000000..dfc4ef7 --- /dev/null +++ b/src/gurubase-frontend/src/app/guru/[customGuru]/page.js @@ -0,0 +1,61 @@ +import { revalidateTag } from "next/cache"; +import { notFound, redirect } from "next/navigation"; + +import { getGuruDataSources, getMyGurus } from "@/app/actions"; +import { NewGuruClient } from "@/components/NewGuruClient"; + +export const viewport = { + width: "device-width", + initialScale: 1, + maximumScale: 1, + userScalable: false +}; +// add no index meta tag +export const metadata = { + robots: { + index: false, + follow: false + } +}; + +const CustomGuru = async ({ params }) => { + const { customGuru } = params; + + // Revalidate guru types cache when accessing the page + revalidateTag("my-guru-types"); + + // Fetch guru types and data sources + const guruTypes = await getMyGurus(); + + // Add null check for guruTypes + if (guruTypes.error) { + notFound(); + } + const guru = guruTypes?.find( + (guru) => guru.slug.toLowerCase() === customGuru.toLowerCase() + ); + + if (!guru) { + notFound(); + } + const dataSources = await getGuruDataSources(customGuru); + + // Redirect if unauthorized (dataSources is null) + if (!dataSources) { + redirect("/not-found"); + } + + // Determine if the guru is still processing + const isProcessing = guru.ready === false; + + return ( + + ); +}; + +export default CustomGuru; diff --git a/src/gurubase-frontend/src/app/guru/new-12hsh25ksh2/page.js b/src/gurubase-frontend/src/app/guru/new-12hsh25ksh2/page.js new file mode 100644 index 0000000..d2f375d --- /dev/null +++ b/src/gurubase-frontend/src/app/guru/new-12hsh25ksh2/page.js @@ -0,0 +1,19 @@ +import { NewGuruClient } from "@/components/NewGuruClient"; + +export const viewport = { + width: "device-width", + initialScale: 1, + maximumScale: 1, + userScalable: false +}; +// add no index meta tag +export const metadata = { + robots: { + index: false, + follow: false + } +}; +const NewGuru = async () => { + return ; +}; +export default NewGuru; diff --git a/src/gurubase-frontend/src/app/icon.ico b/src/gurubase-frontend/src/app/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6528916a3130cbc7729210786a173cfa310c2bb5 GIT binary patch literal 4414 zcmd^DO-NNy5WZT9V);vEfBuzb=t61}xTtNkvQ3LNZHzXyXpxH`L1+`A1R8{jf-OX& z0vB3oL1Jo9kt8IdwkWk0xhM^^`g&iVB&>iSs108|>Yh~nnw7S_O2C)tc zog)^bh!d{A#3VL-p$=*DF|n~zC^(fU+kSbf%J4YUcZ=j?~a-e zYvN8xadB_o21ZAL*;(N8XJC9B=;#0v6D5`=;&z=PyKL%dC0)~cw zTerlYo)&&%qiBxr-T@5_Kv@|uI0$_F2+Yg?uU`Yz)sow@N2Av-d$+T+Z=YoD-xo&k zb7TaVoD{dYS+WBIqTjy@zf#b);<9RG9a^>geC1dN~-!GbLMVqCiIuj)&qIrJUzJCW! zof0oK)wM?*Ta)^F$uf7yw>syQVH|8tO_J&B6aDL6>C@tK-8pZu`e7R{l%M9C$#FD%)!P(WCm^~p!eY*wO_x%P8k_j1)_j`>x!Sn`p4BN(#IDU3)Kba@o3(HO8 z`|0@b?EbMSY#%$3==1*Jy?;ewBN83&{p%m!KY0sYy@%RfM3fI3?1|YV2G@M${%!vQ H_&>+r#(imN literal 0 HcmV?d00001 diff --git a/src/gurubase-frontend/src/app/layout.js b/src/gurubase-frontend/src/app/layout.js new file mode 100644 index 0000000..e06b01f --- /dev/null +++ b/src/gurubase-frontend/src/app/layout.js @@ -0,0 +1,112 @@ +import "./globals.css"; + +import { UserProvider } from "@auth0/nextjs-auth0/client"; +import { GoogleAnalytics } from "@next/third-parties/google"; +import dynamic from "next/dynamic"; +import { Inter } from "next/font/google"; +import localFont from "next/font/local"; +import Script from "next/script"; +import { PublicEnvScript } from "next-runtime-env"; + +import StoreProvider from "@/app/StoreProvider"; + +import { CSPostHogProvider } from "./providers"; + +// Dynamically import non-critical components +const PageTransition = dynamic( + () => import("@/components/PageTransition").then((mod) => mod.PageTransition), + { + ssr: false + } +); + +// Optimize font loading +const inter = Inter({ + subsets: ["latin"], + variable: "--font-inter", + display: "swap", + preload: true, + fallback: ["system-ui", "arial"] +}); + +const gilroy = localFont({ + src: "./fonts/gilroy-semibold.ttf", + display: "swap", + variable: "--gilroy-semibold", + preload: true, + weight: "400", + style: "normal", + fallback: ["system-ui", "arial"] +}); + +export const runtime = process.env.NEXT_PUBLIC_RUNTIME || "edge"; + +export async function generateMetadata() { + let mainOgImage = + "https://s3.eu-central-1.amazonaws.com/anteon-strapi-cms-wuby8hpna3bdecoduzfibtrucp5x/Og_image_06c9ac418a.png"; + + return { + metadataBase: process.env.NEXT_PUBLIC_PROJECT_URL, + title: "The Tech World's Shortcut Search", + description: `Search for comprehensive resources on technical topics and receive instant answers.`, + openGraph: { + url: process.env.NEXT_PUBLIC_PROJECT_URL, + title: "The Tech World's Shortcut Search", + description: `Search for comprehensive resources on technical topics and receive instant answers.`, + images: mainOgImage + }, + alternates: { + canonical: process.env.NEXT_PUBLIC_PROJECT_URL + } + }; +} + +export default function RootLayout({ children }) { + const isSelfHosted = process.env.NEXT_PUBLIC_NODE_ENV === "selfhosted"; + + const content = ( + + + + + + + + +
+ + {children} + {process.env.NEXT_PUBLIC_NODE_ENV === "production" && ( + <> + + `; + + const copyToClipboard = async (text, type) => { + await navigator.clipboard.writeText(text); + setCopied(type); + setTimeout(() => setCopied(null), 2000); + }; + + const handleDeleteClick = () => { + setShowDeleteDialog(true); + }; + + const handleConfirmDelete = async () => { + setIsDeleting(true); + try { + const response = await deleteWidgetId(guruSlug, widgetId); + + if (!response.success) { + throw new Error("Failed to delete widget ID"); + } + } catch (error) { + // console.error("error", error); + } finally { + // First close the dialog + setShowDeleteDialog(false); + // Then after a small delay, reset the deleting state + setTimeout(() => { + setIsDeleting(false); + }, 300); // 300ms matches the dialog's fade-out animation + } + }; + + const CopyIcon = () => ( + + + + + ); + + return ( +
+
+
+
+ + Domain + + +
+ +
+ +
+ {!isLast &&
} + + + + + + Add Widget + + + +
+

+ The Widget ID is a unique identifier for each domain. To add the + widget, inject the Widget Script into your website. Here's a guide + to{" "} + + learn more + + . +

+ +
+

+ Widget ID +

+
+
+ {widgetId} + +
+
+
+ +
+

+ Widget Script +

+
+
+ + {({ + className, + style, + tokens, + getLineProps, + getTokenProps + }) => ( +
+                        {tokens.map((line, i) => (
+                          
+ {line.map((token, key) => ( + + ))} +
+ ))} +
+ )} +
+ +
+
+
+
+
+
+ + + +
+ +
+ +
+ + Delete Widget + + + Are you sure you want to delete this widget? + +
+
+ + +
+
+
+
+
+ ); +} diff --git a/src/gurubase-frontend/src/components/binge-map.jsx b/src/gurubase-frontend/src/components/binge-map.jsx new file mode 100644 index 0000000..13a61cb --- /dev/null +++ b/src/gurubase-frontend/src/components/binge-map.jsx @@ -0,0 +1,938 @@ +"use client"; +import { useState, useEffect, useRef } from "react"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/binge-map-card"; +import { Button } from "@/components/ui/button"; +import MapArrowUp from "@/assets/images/map-arrow-up.svg"; +import Image from "next/image"; +import { useParams, useRouter } from "next/navigation"; +import { useAppDispatch, useAppSelector } from "@/redux/hooks"; +import { + setParentQuestionSlug, + setIsBingeMapOpen, + setInputQuery, + setQuestionText, + setBingeOutdated +} from "@/redux/slices/mainFormSlice"; +import clsx from "clsx"; +import { useBingeMap } from "@/hooks/useBingeMap"; +import { handleQuestionUpdate } from "@/utils/handleQuestionUpdate"; + +export function BingeMap({ + setContent, + setQuestion, + setDescription, + treeData, + bingeOutdated, + ...props +}) { + const [activeNode, setActiveNode] = useState(null); + const [hoveredNode, setHoveredNode] = useState(null); + const [containerWidth, setContainerWidth] = useState(280); + const containerRef = useRef(null); + const { guruType } = useParams(); + const currentQuestionSlug = useAppSelector( + (state) => state.mainForm.currentQuestionSlug + ); + + const parentQuestionSlug = useAppSelector( + (state) => state.mainForm.parentQuestionSlug + ); + const router = useRouter(); + const dispatch = useAppDispatch(); + const streamingStatus = useAppSelector( + (state) => state.mainForm.streamingStatus + ); + + const inputQuery = useAppSelector((state) => state.mainForm.inputQuery); + const questionText = useAppSelector((state) => state.mainForm.questionText); + + const bingeId = useAppSelector((state) => state.mainForm.bingeId); + + const isLoading = useAppSelector((state) => state.mainForm.isLoading); + const isBingeMapOpen = useAppSelector( + (state) => state.mainForm.isBingeMapOpen + ); + + const CONTAINER_HEIGHT = 400; + const PADDING = 20; // Padding from edges + + const [pan, setPan] = useState({ x: 0, y: 0 }); + const [isDragging, setIsDragging] = useState(false); + const [dragStart, setDragStart] = useState({ x: 0, y: 0 }); + const [dragDistance, setDragDistance] = useState(0); + const DRAG_THRESHOLD = 5; // pixels + + // const { treeData, bingeOutdated } = useBingeMap(guruType, bingeId); + + useEffect(() => { + if (!streamingStatus && bingeOutdated !== undefined) { + dispatch(setBingeOutdated(bingeOutdated)); + } + }, [bingeOutdated, dispatch, streamingStatus]); + + useEffect(() => { + //console.log("Will find node by slug", treeData); + if (isLoading || streamingStatus) { + //console.log("is loading or streaming status"); + return; + } + + if (treeData) { + // Find the current node and its parent + const findNodeAndParent = (node, targetSlug, parent = null) => { + if (node.slug === targetSlug) { + return { node, parent }; + } + if (node.children) { + for (const child of node.children) { + const found = findNodeAndParent(child, targetSlug, node); + if (found.node) return found; + } + } + return { node: null, parent: null }; + }; + + const { node: currentNode, parent: parentNode } = findNodeAndParent( + treeData, + currentQuestionSlug + ); + + if (currentNode) { + //console.log("setting parent question slug", parentNode?.slug || null); + dispatch(setParentQuestionSlug(parentNode?.slug || null)); + } + } + }, [treeData, currentQuestionSlug, dispatch]); + + useEffect(() => { + if (isLoading || streamingStatus) return; + + // Reset parent question when on base guru type page (no slug) + //console.log( + // "will reset parent question if guru type and no current question slug" + // ); + if (guruType && !currentQuestionSlug) { + //console.log("setting parent question slug to null"); + dispatch(setParentQuestionSlug(null)); + } + }, [guruType, currentQuestionSlug, dispatch]); + + // Add this effect near the other useEffect hooks + useEffect(() => { + // Reset active node when binge map is closed on mobile + if (!isBingeMapOpen) { + setActiveNode(null); + setHoveredNode(null); + } + }, [isBingeMapOpen]); + + // Add this helper function to calculate total descendants + const countDescendants = (node) => { + if (!node.children || node.children.length === 0) return 0; + return node.children.reduce( + (sum, child) => sum + 1 + countDescendants(child), + 0 + ); + }; + + // Calculate coordinates for each node + const calculateNodePositions = ( + node, + x, + y, + level = 0, + nodes = [], + links = [], + levelHeights = {} + ) => { + if (!node) + return { nodes, links, bounds: { minX: 0, maxX: 0, minY: 0, maxY: 0 } }; + + const isRoot = nodes.length === 0; + const nodeX = isRoot ? containerWidth / 2 : x; + + // Calculate vertical spacing based on level + const verticalSpacing = Math.max( + 150, // minimum spacing + 200 - level * 20 // decrease spacing as we go deeper + ); + + // Store or use the level height + if (levelHeights[level] === undefined) { + levelHeights[level] = y; + } + const nodeY = levelHeights[level]; + + // Calculate required width for this subtree + const calculateSubtreeWidth = (node, level) => { + if (!node.children || node.children.length === 0) { + return 80; // Minimum width for a leaf node + } + + const baseSpacing = Math.max(80, 120 - level * 15); + const subtreeSpacing = 40; + + // Calculate width required for each child's subtree + const childWidths = node.children.map((child) => + calculateSubtreeWidth(child, level + 1) + ); + + // Total width is sum of child widths plus spacing between them + return Math.max( + baseSpacing, + childWidths.reduce((sum, width) => sum + width, 0) + + (node.children.length - 1) * subtreeSpacing + ); + }; + + const subtreeWidth = calculateSubtreeWidth(node, level); + + nodes.push({ ...node, x: nodeX, y: nodeY }); + + let bounds = { + minX: nodeX - subtreeWidth / 2, + maxX: nodeX + subtreeWidth / 2, + minY: nodeY, + maxY: nodeY + }; + + if (node.children && node.children.length > 0) { + const subtreeSpacing = 40; + + // Calculate widths for each child's subtree + const childSubtreeWidths = node.children.map((child) => + calculateSubtreeWidth(child, level + 1) + ); + + // Calculate total width + const totalWidth = + childSubtreeWidths.reduce((sum, width) => sum + width, 0) + + (node.children.length - 1) * subtreeSpacing; + + // Start position for first child + let currentX = nodeX - totalWidth / 2; + + node.children.forEach((child, index) => { + const childSubtreeWidth = childSubtreeWidths[index]; + const childX = currentX + childSubtreeWidth / 2; + const childY = nodeY + verticalSpacing; + + links.push({ + id: `${node.id}-${child.id}`, + x1: nodeX, + y1: nodeY, + x2: childX, + y2: childY + }); + + const childResult = calculateNodePositions( + child, + childX, + childY, + level + 1, + nodes, + links, + levelHeights + ); + + bounds = { + minX: Math.min(bounds.minX, childResult.bounds.minX), + maxX: Math.max(bounds.maxX, childResult.bounds.maxX), + minY: Math.min(bounds.minY, childResult.bounds.minY), + maxY: Math.max(bounds.maxY, childResult.bounds.maxY) + }; + + currentX += childSubtreeWidth + subtreeSpacing; + }); + } + + return { nodes, links, bounds }; + }; + + // Add this helper function to calculate node size + const calculateNodeSize = (totalNodes) => { + // Base size for small trees + const baseSize = 12; + // Minimum size for very large trees + const minSize = 8; + // Scale factor + const scaleFactor = 0.1; + + // Calculate size based on total nodes + const size = Math.max(minSize, baseSize - totalNodes * scaleFactor); + return size; + }; + + // Add this state near the other state declarations + const [initialPanSet, setInitialPanSet] = useState(false); + + // Modify getScaledPositions to be more lenient with scaling + const getScaledPositions = () => { + // Create a modified tree data that includes the streaming node + let modifiedTreeData = treeData; + + if ( + streamingStatus && + currentQuestionSlug && + parentQuestionSlug && + treeData + ) { + // Deep clone the tree and add streaming node to correct parent + const addStreamingNode = (node) => { + if (node.slug === parentQuestionSlug) { + return { + ...node, + children: [ + ...(node.children || []), + { + id: "streaming-temp", + text: currentQuestionSlug, + slug: currentQuestionSlug, + isStreaming: true, + children: [] + } + ] + }; + } + if (node.children) { + return { + ...node, + children: node.children.map(addStreamingNode) + }; + } + return node; + }; + + modifiedTreeData = addStreamingNode(treeData); + } + + // Use existing calculateNodePositions with modified tree + const { nodes, links, bounds } = calculateNodePositions( + modifiedTreeData, + containerWidth / 2, + PADDING + 20, + 0, + [], + [], + {} + ); + + if (!nodes.length) return { nodes: [], links: [], nodeSize: 12 }; + + const graphWidth = bounds.maxX - bounds.minX; + const graphHeight = bounds.maxY - bounds.minY; + + // More lenient scaling - allow for scrolling + const minScale = 0.4; // Minimum scale to ensure nodes aren't too small + const maxScale = 1.2; // Maximum scale to prevent nodes from being too large + + // Calculate scale with more emphasis on width + const scaleX = (containerWidth - PADDING * 2) / graphWidth; + const scaleY = (CONTAINER_HEIGHT - PADDING * 2) / graphHeight; + const scale = Math.min( + Math.max(minScale, Math.min(scaleX, scaleY)), + maxScale + ); + + // Center the graph after scaling + const scaledWidth = graphWidth * scale; + const scaledHeight = graphHeight * scale; + const centerX = (containerWidth - scaledWidth) / 2; + const centerY = + PADDING + (CONTAINER_HEIGHT - PADDING * 2 - scaledHeight) / 2; + + const scaledNodes = nodes.map((node) => ({ + ...node, + x: (node.x - bounds.minX) * scale + centerX, + y: (node.y - bounds.minY) * scale + centerY + })); + + const scaledLinks = links.map((link) => ({ + ...link, + x1: (link.x1 - bounds.minX) * scale + centerX, + y1: (link.y1 - bounds.minY) * scale + centerY, + x2: (link.x2 - bounds.minX) * scale + centerX, + y2: (link.y2 - bounds.minY) * scale + centerY + })); + + return { + nodes: scaledNodes, + links: scaledLinks, + nodeSize: calculateNodeSize(nodes.length) + }; + }; + + // Destructure nodeSize from getScaledPositions + const { nodes, links, nodeSize } = getScaledPositions(); + + // Yeni helper fonksiyon ekle + const areAllNodesVisible = ( + nodes, + containerWidth, + containerHeight, + currentPan + ) => { + return nodes.every((node) => { + const nodeX = node.x + currentPan.x; + const nodeY = node.y + currentPan.y; + + // Node'un görünür alanda olup olmadığını kontrol et + return ( + nodeX >= 0 && + nodeX <= containerWidth && + nodeY >= 0 && + nodeY <= containerHeight + ); + }); + }; + + // Bağlı node'ları bulan yardımcı fonksiyon + const findConnectedNodes = (nodeId, allNodes) => { + if (!nodeId || !allNodes?.length) return []; + + const node = allNodes.find((n) => n.id === nodeId); + if (!node) return []; + + // Parent node'u bul + const parent = allNodes.find((n) => + n.children?.some((child) => child.id === nodeId) + ); + + // Kardeş node'ları bul + const siblings = parent + ? allNodes.filter((n) => + parent.children?.some((child) => child.id === n.id) + ) + : []; + + // Çocuk node'ları bul + const children = allNodes.filter((n) => + node.children?.some((child) => child.id === n.id) + ); + + // Tüm bağlı node'ları unique olarak döndür + return [ + ...new Set([node, ...siblings, ...children, parent].filter(Boolean)) + ]; + }; + + // calculateOptimalPan fonksiyonunu güncelle + const calculateOptimalPan = ( + selectedNode, + nodes, + containerWidth, + containerHeight, + currentPan + ) => { + if (!selectedNode || !nodes.length) return currentPan; + + // Önce tüm node'ların görünür olup olmadığını kontrol et + if ( + areAllNodesVisible(nodes, containerWidth, containerHeight, currentPan) + ) { + return currentPan; // Eğer hepsi görünürse mevcut pan'i koru + } + + // Eğer görünmeyen node'lar varsa, seçili node'u ve bağlı node'ları merkeze al + const connectedNodes = findConnectedNodes(selectedNode.id, nodes); + + const bounds = connectedNodes.reduce( + (acc, node) => ({ + minX: Math.min(acc.minX, node.x), + maxX: Math.max(acc.maxX, node.x), + minY: Math.min(acc.minY, node.y), + maxY: Math.max(acc.maxY, node.y) + }), + { + minX: Infinity, + maxX: -Infinity, + minY: Infinity, + maxY: -Infinity + } + ); + + const centerX = (bounds.minX + bounds.maxX) / 2; + const centerY = (bounds.minY + bounds.maxY) / 2; + + return { + x: containerWidth / 2 - centerX, + y: containerHeight / 2 - centerY + }; + }; + + // handleNodeClick fonksiyonunu güncelle + const handleNodeClick = async (nodeId) => { + if (streamingStatus || isLoading) return; + + const isDesktop = + typeof window !== "undefined" && + window.matchMedia("(min-width: 768px)").matches; + + const clickedNode = nodes.find((node) => node.id === nodeId); + + if (clickedNode) { + // Optimal pan pozisyonunu hesapla (mevcut pan'i de göz önünde bulundurarak) + const optimalPan = calculateOptimalPan( + clickedNode, + nodes, + containerWidth, + CONTAINER_HEIGHT, + pan // Mevcut pan pozisyonunu geçir + ); + + setPan(optimalPan); + + if (isDesktop) { + if (clickedNode.slug) { + dispatch(setIsBingeMapOpen(false)); + dispatch(setInputQuery("")); + + await handleQuestionUpdate({ + guruType, + newSlug: clickedNode.slug, + oldSlug: currentQuestionSlug, + treeData, + dispatch, + setContent, + setQuestion, + setDescription, + bingeId, + questionText + }); + } + } else { + setActiveNode((prevActiveNode) => + prevActiveNode === nodeId ? null : nodeId + ); + } + } + }; + + const handleNodeHover = (nodeId) => { + if ( + typeof window !== "undefined" && + window.matchMedia("(min-width: 768px)").matches + ) { + setHoveredNode(nodeId); + } + }; + + const activeNodeData = + activeNode && nodes?.length + ? nodes.find((node) => node.id === activeNode) + : null; + + // Add these new selectors + const isAnswerValid = useAppSelector((state) => state.mainForm.isAnswerValid); + const contextError = useAppSelector((state) => state.mainForm.contextError); + const streamError = useAppSelector((state) => state.mainForm.streamError); + + // Add a helper function to check if nodes should be disabled + const areNodesDisabled = () => { + return !isAnswerValid || contextError || streamError || isLoading || streamingStatus; + }; + + // Update getNodeColor to handle disabled state + const getNodeColor = (node) => { + if (streamingStatus) { + return node.isStreaming ? "#44E531" : "#BABFC8"; + } + + if (node.id === activeNode || node.id === hoveredNode) { + return "#44E531"; + } else if (node.slug === currentQuestionSlug) { + return "#44E531"; + } else { + return "#BABFC8"; + } + }; + + const handleMouseDown = (e) => { + if (e.button === 0) { + setIsDragging(true); + setDragDistance(0); + setDragStart({ + x: e.clientX - pan.x, + y: e.clientY - pan.y + }); + } + }; + + const handleMouseMove = (e) => { + if (isDragging) { + const newX = e.clientX - dragStart.x; + const newY = e.clientY - dragStart.y; + + // Calculate distance moved + const dx = newX - pan.x; + const dy = newY - pan.y; + const distance = Math.sqrt(dx * dx + dy * dy); + setDragDistance(distance); + + setPan({ x: newX, y: newY }); + } + }; + + const handleMouseUp = (e) => { + if (isDragging) { + // If barely moved, treat as a click + if (dragDistance < DRAG_THRESHOLD) { + // Only reset if clicking on the background + if (e.target.tagName === "svg" || e.target.tagName === "g") { + setActiveNode(null); + } + } + setIsDragging(false); + } + }; + + const handleTouchStart = (e) => { + const touch = e.touches[0]; + setIsDragging(true); + setDragDistance(0); + setDragStart({ + x: touch.clientX - pan.x, + y: touch.clientY - pan.y + }); + }; + + const handleTouchMove = (e) => { + if (isDragging && e.touches.length > 0) { + const touch = e.touches[0]; + const newX = touch.clientX - dragStart.x; + const newY = touch.clientY - dragStart.y; + + // Calculate distance moved + const dx = newX - pan.x; + const dy = newY - pan.y; + const distance = Math.sqrt(dx * dx + dy * dy); + setDragDistance(distance); + + setPan({ x: newX, y: newY }); + } + }; + + useEffect(() => { + const updateContainerWidth = () => { + if (containerRef.current) { + setContainerWidth(containerRef.current.offsetWidth); + } + }; + + // Initial update + updateContainerWidth(); + + // Update on window resize + window.addEventListener("resize", updateContainerWidth); + + // Cleanup + return () => window.removeEventListener("resize", updateContainerWidth); + }, [isBingeMapOpen]); // Re-run when binge map opens/closes + + // Modify the useEffect that handles initial pan to use the same logic + useEffect(() => { + if (isLoading || streamingStatus) return; + + if (nodes?.length && currentQuestionSlug && !initialPanSet) { + const currentNode = nodes.find( + (node) => node.slug === currentQuestionSlug + ); + if (currentNode) { + const optimalPan = calculateOptimalPan( + currentNode, + nodes, + containerWidth, + CONTAINER_HEIGHT, + pan // Mevcut pan pozisyonunu geçir + ); + setPan(optimalPan); + setInitialPanSet(true); + } + } + }, [ + nodes, + currentQuestionSlug, + containerWidth, + initialPanSet, + streamingStatus + ]); + + // Reset initialPanSet when the map is closed + useEffect(() => { + if (!isBingeMapOpen) { + setInitialPanSet(false); + } + }, [isBingeMapOpen]); + + // State eklemeleri (diğer state'lerin yanına) + const [scale, setScale] = useState(1); + const MIN_SCALE = 0.5; + const MAX_SCALE = 2; + + // Zoom fonksiyonları + const handleZoomIn = () => { + setScale((prev) => Math.min(prev + 0.2, MAX_SCALE)); + }; + + const handleZoomOut = () => { + setScale((prev) => Math.max(prev - 0.2, MIN_SCALE)); + }; + + if (!treeData || !nodes?.length) { + return null; + } + + return ( + + + { + <> +
+ + Binge Map + +
+
+ + } + + + {/* Zoom butonlarını drag alanının dışına taşı */} +
+ + +
+ + {/* Drag alanı */} +
+ + + {/* Draw connection lines */} + {links.map((link) => ( + + ))} + + {/* Draw nodes */} + {nodes.map((node) => ( + + { + if (!areNodesDisabled()) { + handleNodeClick(node.id); + } + }} + onMouseEnter={() => { + if (!areNodesDisabled()) { + handleNodeHover(node.id); + } + }} + onMouseLeave={() => { + if (!areNodesDisabled()) { + handleNodeHover(null); + } + }} + /> + + ))} + + + + {/* Tooltip card */} + {(activeNodeData || hoveredNode) && + (() => { + const node = + activeNodeData || nodes.find((n) => n.id === hoveredNode); + const nodeY = node?.y * scale + pan.y; + const nodeX = node?.x * scale + pan.x; + + const isRootNode = !nodes.some((n) => + n.children?.some((child) => child.id === node.id) + ); + + // Root node için false, diğerleri için true + const tooltipOnBottom = !isRootNode; + // console.log(tooltipOnBottom); + + return ( +
+ {/* Triangle pointer */} +
+

+ {node?.text} +

+
+ ); + })()} + + {/* Mobile-only Open button - moved inside the binge map container */} +
+ +
+
+ + + ); +} + +export default BingeMap; diff --git a/src/gurubase-frontend/src/components/components-url-badge.jsx b/src/gurubase-frontend/src/components/components-url-badge.jsx new file mode 100644 index 0000000..e411a6a --- /dev/null +++ b/src/gurubase-frontend/src/components/components-url-badge.jsx @@ -0,0 +1,16 @@ +"use client"; + +import { Link } from "lucide-react"; + +import { Badge } from "@/components/ui/badge"; + +export function UrlBadgeJsx({ count }) { + return ( + + + {count}URL + + ); +} diff --git a/src/gurubase-frontend/src/components/sources/SourceCard.jsx b/src/gurubase-frontend/src/components/sources/SourceCard.jsx new file mode 100644 index 0000000..f5b59e9 --- /dev/null +++ b/src/gurubase-frontend/src/components/sources/SourceCard.jsx @@ -0,0 +1,44 @@ +import clsx from "clsx"; +import Image from "next/image"; +import Link from "next/link"; + +const LinkCard = ({ link, children }) => { + if (!link) return children; + + return ( + + {children} + + ); +}; + +function SourceCard({ icon, title, description, link }) { + return ( + +
+ +
+

+ {title} +

+

+ {description} +

+
+
+
+ ); +} + +export default SourceCard; diff --git a/src/gurubase-frontend/src/components/sources/Sources.jsx b/src/gurubase-frontend/src/components/sources/Sources.jsx new file mode 100644 index 0000000..30ce0f4 --- /dev/null +++ b/src/gurubase-frontend/src/components/sources/Sources.jsx @@ -0,0 +1,47 @@ +import SourceCard from "./SourceCard"; + +function Sources({ resources, guruTypeText }) { + if (!resources?.length) { + return null; + } + + return ( +
+
+

+ Sources +

+

+ {guruTypeText} Guru leverages up-to-date information from the + following sources to answer your questions. +

+
+
= 4 + ? "guru-sm:grid guru-sm:grid-cols-1 guru-md:grid guru-md:grid-cols-3 guru-lg:grid guru-lg:grid-cols-4" + : "" + } + `}> + {resources.map((source, index) => ( + + ))} +
+
+ ); +} + +export default Sources; diff --git a/src/gurubase-frontend/src/components/ui/Sonner.jsx b/src/gurubase-frontend/src/components/ui/Sonner.jsx new file mode 100644 index 0000000..7b1a8f8 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/Sonner.jsx @@ -0,0 +1,21 @@ +import { Toaster as Sonner } from "sonner"; + +export function Toaster({ ...props }) { + return ( + + ); +} diff --git a/src/gurubase-frontend/src/components/ui/alert-dialog.jsx b/src/gurubase-frontend/src/components/ui/alert-dialog.jsx new file mode 100644 index 0000000..ab1fc04 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/alert-dialog.jsx @@ -0,0 +1,120 @@ +"use client"; + +import * as React from "react"; +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"; + +import { cn } from "@/lib/utils"; +import { buttonVariants } from "@/components/ui/button"; + +const AlertDialog = AlertDialogPrimitive.Root; +const AlertDialogTrigger = AlertDialogPrimitive.Trigger; +const AlertDialogPortal = AlertDialogPrimitive.Portal; + +const AlertDialogOverlay = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName; + +const AlertDialogContent = React.forwardRef(({ className, ...props }, ref) => ( + + + + +)); +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName; + +const AlertDialogHeader = ({ + className, + ...props +}) => ( +
+); +AlertDialogHeader.displayName = "AlertDialogHeader"; + +const AlertDialogFooter = ({ + className, + ...props +}) => ( +
+); +AlertDialogFooter.displayName = "AlertDialogFooter"; + +const AlertDialogTitle = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName; + +const AlertDialogDescription = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName; + +const AlertDialogAction = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName; + +const AlertDialogCancel = React.forwardRef(({ className, ...props }, ref) => ( + +)); +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName; + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +}; \ No newline at end of file diff --git a/src/gurubase-frontend/src/components/ui/alert.jsx b/src/gurubase-frontend/src/components/ui/alert.jsx new file mode 100644 index 0000000..40ae6d7 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/alert.jsx @@ -0,0 +1,54 @@ +import { cva } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const alertVariants = cva( + "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7", + { + variants: { + variant: { + default: "bg-[#F5F9FF] text-[#2563EB] border-[#2563EB]", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + warning: "bg-[#FFFCF5] text-[#F8AA1C] border-[#F8AA1C]" + } + }, + defaultVariants: { + variant: "default" + } + } +); + +const Alert = React.forwardRef(({ className, variant, ...props }, ref) => ( +
+)); + +Alert.displayName = "Alert"; + +const AlertTitle = React.forwardRef(({ className, ...props }, ref) => ( +
+)); + +AlertTitle.displayName = "AlertTitle"; + +const AlertDescription = React.forwardRef(({ className, ...props }, ref) => ( +
+)); + +AlertDescription.displayName = "AlertDescription"; + +export { Alert, AlertDescription, AlertTitle }; diff --git a/src/gurubase-frontend/src/components/ui/avatar.jsx b/src/gurubase-frontend/src/components/ui/avatar.jsx new file mode 100644 index 0000000..69df64b --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/avatar.jsx @@ -0,0 +1,44 @@ +"use client"; + +import * as AvatarPrimitive from "@radix-ui/react-avatar"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const Avatar = React.forwardRef(({ className, ...props }, ref) => ( + +)); + +Avatar.displayName = AvatarPrimitive.Root.displayName; + +const AvatarImage = React.forwardRef(({ className, ...props }, ref) => ( + +)); + +AvatarImage.displayName = AvatarPrimitive.Image.displayName; + +const AvatarFallback = React.forwardRef(({ className, ...props }, ref) => ( + +)); + +AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName; + +export { Avatar, AvatarFallback, AvatarImage }; diff --git a/src/gurubase-frontend/src/components/ui/badge.jsx b/src/gurubase-frontend/src/components/ui/badge.jsx new file mode 100644 index 0000000..a998ce0 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/badge.jsx @@ -0,0 +1,36 @@ +import * as React from "react"; +import { cva } from "class-variance-authority"; +import { cn } from "@/lib/utils"; + +const badgeVariants = cva( + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", + secondary: + "border-transparent bg-gray-25 text-secondary-foreground w-fit border border-gray-85 hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", + outline: "text-foreground", + selected: + "border-transparent bg-gray-90 text-secondary-foreground w-fit border border-gray-85 hover:bg-gray-90/80" + } + }, + defaultVariants: { + variant: "default" + } + } +); + +function Badge({ className, variant, icon: Icon, text, iconColor, ...props }) { + return ( +
+ {Icon && } + {text} +
+ ); +} + +export { Badge, badgeVariants }; diff --git a/src/gurubase-frontend/src/components/ui/binge-map-card.jsx b/src/gurubase-frontend/src/components/ui/binge-map-card.jsx new file mode 100644 index 0000000..a456e1f --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/binge-map-card.jsx @@ -0,0 +1,85 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; +import { useAppSelector } from "@/redux/hooks"; + +const Card = React.forwardRef(({ className, ...props }, ref) => { + const isBingeMapOpen = useAppSelector( + (state) => state.mainForm.isBingeMapOpen + ); + + return ( +
+ ); +}); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef( + ({ className, isBingeMapOpen, ...props }, ref) => ( +
+ ) +); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardDescription, + CardContent +}; diff --git a/src/gurubase-frontend/src/components/ui/button.jsx b/src/gurubase-frontend/src/components/ui/button.jsx new file mode 100644 index 0000000..cdb4861 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/button.jsx @@ -0,0 +1,56 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: + "bg-primary text-white rounded-full shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input rounded-full bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + ghostNoSpace: "hover:text-accent-foreground px-0" + }, + size: { + default: + "guru-sm:h-8 guru-md:h-9 guru-lg:h-9 guru-sm:px-2 guru-md:px-4 guru-lg:px-4 py-2 text-sm", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8 text-sm", + icon: "h-9 w-9 text-sm", + action: "h-12 guru-sm:px-2 guru-md:px-4 guru-lg:px-4 py-2 text-sm", + action2: "h-12 px-4 py-2 text-sm", + action3: "h-12 py-2 text-md" + } + }, + defaultVariants: { + variant: "default", + size: "default" + } + } +); + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button"; + return ( + + ); + } +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/src/gurubase-frontend/src/components/ui/card.jsx b/src/gurubase-frontend/src/components/ui/card.jsx new file mode 100644 index 0000000..d6decd7 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/card.jsx @@ -0,0 +1,64 @@ +import * as React from "react"; +import { cn } from "../../lib/utils"; + +const Card = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardDescription, + CardContent +}; diff --git a/src/gurubase-frontend/src/components/ui/checkbox.jsx b/src/gurubase-frontend/src/components/ui/checkbox.jsx new file mode 100644 index 0000000..6a4ac52 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/checkbox.jsx @@ -0,0 +1,25 @@ +"use client"; + +import * as React from "react"; +import * as CheckboxPrimitive from "@radix-ui/react-checkbox"; +import { Check } from "lucide-react"; + +import { cn } from "@/lib/utils"; + +const Checkbox = React.forwardRef(({ className, ...props }, ref) => ( + + + + + +)); +Checkbox.displayName = CheckboxPrimitive.Root.displayName; + +export { Checkbox }; \ No newline at end of file diff --git a/src/gurubase-frontend/src/components/ui/dialog.jsx b/src/gurubase-frontend/src/components/ui/dialog.jsx new file mode 100644 index 0000000..fc24d85 --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/dialog.jsx @@ -0,0 +1,103 @@ +"use client"; + +import * as React from "react"; +import * as DialogPrimitive from "@radix-ui/react-dialog"; +import { cn } from "@/lib/utils"; + +const Dialog = DialogPrimitive.Root; + +const DialogTrigger = DialogPrimitive.Trigger; + +const DialogPortal = DialogPrimitive.Portal; + +const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => ( + +)); +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName; + +const DialogContent = React.forwardRef( + ({ className, children, ...props }, ref) => ( + + + + {children} + + + ) +); +DialogContent.displayName = DialogPrimitive.Content.displayName; + +const DialogHeader = ({ + className, + ...props +}) => ( +
+); +DialogHeader.displayName = "DialogHeader"; + +const DialogFooter = ({ + className, + ...props +}) => ( +
+); +DialogFooter.displayName = "DialogFooter"; + +const DialogTitle = React.forwardRef(({ className, ...props }, ref) => ( + +)); +DialogTitle.displayName = DialogPrimitive.Title.displayName; + +const DialogDescription = React.forwardRef(({ className, ...props }, ref) => ( + +)); +DialogDescription.displayName = DialogPrimitive.Description.displayName; + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +}; \ No newline at end of file diff --git a/src/gurubase-frontend/src/components/ui/dropdown-menu.jsx b/src/gurubase-frontend/src/components/ui/dropdown-menu.jsx new file mode 100644 index 0000000..fcd57fd --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/dropdown-menu.jsx @@ -0,0 +1,185 @@ +"use client"; + +import * as React from "react"; +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; +import { + CheckIcon, + ChevronRightIcon, + DotFilledIcon +} from "@radix-ui/react-icons"; + +import { cn } from "@/lib/utils"; + +const DropdownMenu = DropdownMenuPrimitive.Root; + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger; + +const DropdownMenuGroup = DropdownMenuPrimitive.Group; + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal; + +const DropdownMenuSub = DropdownMenuPrimitive.Sub; + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup; + +const DropdownMenuSubTrigger = React.forwardRef( + ({ className, inset, children, ...props }, ref) => ( + + {children} + + + ) +); +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName; + +const DropdownMenuSubContent = React.forwardRef( + ({ className, ...props }, ref) => ( + + ) +); +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName; + +const DropdownMenuContent = React.forwardRef( + ({ className, sideOffset = 4, ...props }, ref) => ( + + + + ) +); +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName; + +const DropdownMenuItem = React.forwardRef( + ({ className, inset, ...props }, ref) => ( + + ) +); +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName; + +const DropdownMenuCheckboxItem = React.forwardRef( + ({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + + ) +); +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName; + +const DropdownMenuRadioItem = React.forwardRef( + ({ className, children, ...props }, ref) => ( + + + + + + + {children} + + ) +); +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName; + +const DropdownMenuLabel = React.forwardRef( + ({ className, inset, ...props }, ref) => ( + + ) +); +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName; + +const DropdownMenuSeparator = React.forwardRef( + ({ className, ...props }, ref) => ( + + ) +); +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName; + +const DropdownMenuShortcut = ({ className, ...props }) => { + return ( + + ); +}; +DropdownMenuShortcut.displayName = "DropdownMenuShortcut"; + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup +}; diff --git a/src/gurubase-frontend/src/components/ui/form.jsx b/src/gurubase-frontend/src/components/ui/form.jsx new file mode 100644 index 0000000..cc31a6a --- /dev/null +++ b/src/gurubase-frontend/src/components/ui/form.jsx @@ -0,0 +1,136 @@ +"use client"; +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { Controller, FormProvider, useFormContext } from "react-hook-form"; + +import { cn } from "@/lib/utils"; +import { Label } from "@/components/ui/label"; + +const Form = FormProvider; + +const FormFieldContext = React.createContext({}); + +const FormField = ({ ...props }) => { + return ( + + + + ); +}; + +const useFormField = () => { + const fieldContext = React.useContext(FormFieldContext); + const itemContext = React.useContext(FormItemContext); + const { getFieldState, formState } = useFormContext(); + + const fieldState = getFieldState(fieldContext.name, formState); + + if (!fieldContext) { + throw new Error("useFormField should be used within "); + } + + const { id } = itemContext; + + return { + id, + name: fieldContext.name, + formItemId: `${id}-form-item`, + formDescriptionId: `${id}-form-item-description`, + formMessageId: `${id}-form-item-message`, + ...fieldState + }; +}; + +const FormItemContext = React.createContext({}); + +const FormItem = React.forwardRef(({ className, ...props }, ref) => { + const id = React.useId(); + + return ( + +
+ + ); +}); +FormItem.displayName = "FormItem"; + +const FormLabel = React.forwardRef(({ className, ...props }, ref) => { + const { error, formItemId } = useFormField(); + + return ( +