From cd4b6fdae0ebc0e6a6ff18e7ccd7464a71c822fe Mon Sep 17 00:00:00 2001 From: Matti Nannt Date: Thu, 14 Dec 2023 10:51:02 +0100 Subject: [PATCH] chore: add prettier config for import sorting, update packages, migrate to prettier 3 (#1777) --- .prettierrc.js | 7 +- README.md | 1 - apps/demo/package.json | 2 +- apps/demo/pages/_app.tsx | 1 + apps/demo/pages/_document.tsx | 2 +- apps/demo/pages/app/index.tsx | 8 +- apps/formbricks-com/app/docs/layout.tsx | 4 +- apps/formbricks-com/app/providers.tsx | 2 +- .../components/docs/BestPractices.tsx | 10 +- .../formbricks-com/components/docs/Button.tsx | 2 +- apps/formbricks-com/components/docs/Code.tsx | 5 +- .../components/docs/DocsFeedback.tsx | 3 +- .../components/docs/Feedback.tsx | 5 +- .../formbricks-com/components/docs/Footer.tsx | 3 +- .../formbricks-com/components/docs/Header.tsx | 2 +- .../components/docs/Heading.tsx | 4 +- .../formbricks-com/components/docs/Layout.tsx | 6 +- .../components/docs/Libraries.tsx | 4 +- .../components/docs/MobileNavigation.tsx | 6 +- .../components/docs/Navigation.tsx | 2 +- .../formbricks-com/components/docs/Search.tsx | 15 +- .../components/docs/SectionProvider.tsx | 3 +- .../components/docs/ThemeToggle.tsx | 2 +- .../components/docs/docsFaq.tsx | 1 + apps/formbricks-com/components/docs/mdx.tsx | 6 +- .../components/dummyUI/AddEventDummy.tsx | 5 +- .../dummyUI/AddNoCodeEventModalDummy.tsx | 11 +- .../components/dummyUI/CTAQuestion.tsx | 1 + .../components/dummyUI/DemoPreview.tsx | 5 +- .../components/dummyUI/DemoView.tsx | 4 +- .../components/dummyUI/Modal.tsx | 1 + .../dummyUI/MultipleChoiceMultiQuestion.tsx | 4 +- .../dummyUI/MultipleChoiceSingleQuestion.tsx | 4 +- .../components/dummyUI/NPSQuestion.tsx | 2 + .../components/dummyUI/OpenTextQuestion.tsx | 4 +- .../components/dummyUI/PreviewSurvey.tsx | 4 +- .../dummyUI/QuestionConditional.tsx | 9 +- .../components/dummyUI/RatingQuestion.tsx | 4 +- .../components/dummyUI/TemplateList.tsx | 4 +- .../components/dummyUI/templates.ts | 8 +- apps/formbricks-com/components/home/Faq.tsx | 2 +- .../components/home/Features.tsx | 1 + apps/formbricks-com/components/home/Hero.tsx | 4 +- .../components/home/ScrollToTop.tsx | 3 +- .../components/home/SetupTabs.tsx | 1 + apps/formbricks-com/components/home/Steps.tsx | 4 +- .../components/home/VideoWalkThrough.tsx | 2 +- .../shared/BestPracticeNavigation.tsx | 5 +- .../components/shared/BreakerCTA.tsx | 3 +- apps/formbricks-com/components/shared/CTA.tsx | 4 +- .../components/shared/Callout.tsx | 2 +- .../components/shared/EarlyBirdDeal.tsx | 3 +- .../components/shared/FeatureHighlight.tsx | 5 +- .../components/shared/Footer.tsx | 1 + .../components/shared/Header.tsx | 18 +- .../components/shared/HeroAnimation.tsx | 2 +- .../components/shared/LayoutMdx.tsx | 1 + .../formbricks-com/components/shared/Logo.tsx | 8 +- .../components/shared/MdxCTA.tsx | 3 +- .../components/shared/MdxTryItCTA.tsx | 3 +- .../components/shared/Navigation.tsx | 2 +- .../components/shared/NewsletterSignup.tsx | 3 +- .../components/shared/PricingTable.tsx | 3 +- .../components/shared/Search.tsx | 6 +- .../components/shared/SlideInBanner.tsx | 7 +- .../components/shared/Slider.tsx | 2 +- .../components/shared/TryItCTA.tsx | 3 +- .../components/shared/UseCaseCTA.tsx | 3 +- .../components/shared/WhyFormbricks.tsx | 8 +- apps/formbricks-com/pages/_app.tsx | 4 +- .../pages/community/HeaderTribe.tsx | 5 +- .../pages/community/LevelCard.tsx | 3 +- .../pages/community/Roadmap.tsx | 3 +- apps/formbricks-com/pages/community/index.tsx | 6 +- apps/formbricks-com/pages/concierge.tsx | 3 +- .../formbricks-com/pages/demo/HeaderLight.tsx | 4 +- .../pages/docs-feedback/index.tsx | 6 +- .../pages/feature-chaser/index.tsx | 6 +- .../pages/feedback-box/index.tsx | 6 +- .../pages/improve-trial-conversion/index.tsx | 6 +- .../pages/interview-prompt/index.tsx | 6 +- .../pages/learn-from-churn/index.tsx | 6 +- apps/formbricks-com/pages/oss-friends.tsx | 1 + apps/formbricks-com/pages/pricing.tsx | 1 + apps/formbricks-com/tailwind.config.ts | 1 + apps/storybook/.storybook/main.ts | 3 +- apps/storybook/.storybook/preview.ts | 2 + apps/storybook/package.json | 25 +- apps/storybook/src/App.tsx | 1 + apps/storybook/src/main.tsx | 1 + apps/storybook/vite.config.ts | 2 +- .../components/ConfirmationPage.tsx | 5 +- .../app/(app)/billing-confirmation/page.tsx | 4 +- .../app/(app)/components/FormbricksClient.tsx | 5 +- .../app/(app)/components/PosthogIdentify.tsx | 4 +- .../(actionsAndAttributes)/actions/actions.ts | 14 +- .../actions/components/ActionActivityTab.tsx | 21 +- .../actions/components/ActionClassesTable.tsx | 10 +- .../actions/components/ActionDetailModal.tsx | 8 +- .../actions/components/ActionRowData.tsx | 3 +- .../actions/components/ActionSettingsTab.tsx | 16 +- .../actions/components/AddActionModal.tsx | 12 +- .../actions/components/CssSelector.tsx | 3 +- .../actions/components/InnerHtmlSelector.tsx | 3 +- .../actions/components/PageUrlSelector.tsx | 18 +- .../(actionsAndAttributes)/actions/layout.tsx | 1 + .../actions/loading.tsx | 3 +- .../(actionsAndAttributes)/actions/page.tsx | 6 +- .../attributes/actions.ts | 5 +- .../components/AttributeActivityTab.tsx | 7 +- .../components/AttributeClassesTable.tsx | 8 +- .../components/AttributeDetailModal.tsx | 6 +- .../components/AttributeRowData.tsx | 3 +- .../components/AttributeSettingsTab.tsx | 13 +- .../components/HowToAddAttributesButton.tsx | 3 +- .../attributes/components/SecondNavbar.tsx | 6 +- .../attributes/layout.tsx | 1 + .../attributes/loading.tsx | 3 +- .../attributes/page.tsx | 6 +- .../environments/[environmentId]/actions.ts | 7 +- .../components/AddProductModal.tsx | 9 +- .../components/EnvironmentsNavbar.tsx | 7 +- .../[environmentId]/components/Navigation.tsx | 74 +- .../components/UrlShortenerModal.tsx | 18 +- .../components/WidgetStatusIndicator.tsx | 3 +- .../[environmentId]/integrations/actions.ts | 4 +- .../components/AddIntegrationModal.tsx | 32 +- .../airtable/components/AirtableWrapper.tsx | 13 +- .../airtable/components/Connect.tsx | 4 +- .../integrations/airtable/components/Home.tsx | 18 +- .../integrations/airtable/page.tsx | 1 + .../components/IntegrationsPageTitle.tsx | 3 +- .../integrations/google-sheets/actions.ts | 4 +- .../components/AddIntegrationModal.tsx | 16 +- .../google-sheets/components/Connect.tsx | 8 +- .../components/GoogleSheetWrapper.tsx | 4 +- .../google-sheets/components/Home.tsx | 6 +- .../integrations/google-sheets/loading.tsx | 2 +- .../integrations/google-sheets/page.tsx | 1 + .../[environmentId]/integrations/layout.tsx | 3 +- .../[environmentId]/integrations/page.tsx | 32 +- .../integrations/webhooks/actions.ts | 9 +- .../webhooks/components/AddWebhookModal.tsx | 28 +- .../components/SurveyCheckboxGroup.tsx | 3 +- .../components/TriggerCheckboxGroup.tsx | 3 +- .../components/WebhookDetailModal.tsx | 7 +- .../components/WebhookOverviewTab.tsx | 8 +- .../components/WebhookSettingsTab.tsx | 30 +- .../webhooks/components/WebhookTable.tsx | 11 +- .../webhooks/components/testEndpoint.tsx | 1 + .../integrations/webhooks/page.tsx | 8 +- .../environments/[environmentId]/layout.tsx | 10 +- .../people/[personId]/actions.ts | 7 +- .../components/ActivityItemComponents.tsx | 9 +- .../[personId]/components/ActivitySection.tsx | 1 + .../components/ActivityTimeline.tsx | 1 + .../components/AttributesSection.tsx | 6 +- .../components/DeletePersonButton.tsx | 5 +- .../[personId]/components/HeadingSection.tsx | 14 +- .../[personId]/components/ResponseSection.tsx | 3 +- .../components/ResponseTimeline.tsx | 7 +- .../[personId]/components/ResponsesFeed.tsx | 4 +- .../people/[personId]/loading.tsx | 5 +- .../people/[personId]/page.tsx | 8 +- .../[environmentId]/people/layout.tsx | 3 +- .../[environmentId]/people/page.tsx | 10 +- .../settings/api-keys/actions.ts | 7 +- .../api-keys/components/AddApiKeyModal.tsx | 7 +- .../api-keys/components/ApiKeyList.tsx | 5 +- .../api-keys/components/EditApiKeys.tsx | 14 +- .../settings/api-keys/page.tsx | 19 +- .../settings/billing/actions.ts | 11 +- .../billing/components/PricingTable.tsx | 17 +- .../[environmentId]/settings/billing/page.tsx | 21 +- .../settings/billing/unlimited/page.tsx | 8 +- .../settings/components/SettingsNavbar.tsx | 11 +- .../[environmentId]/settings/layout.tsx | 12 +- .../settings/lookandfeel/actions.ts | 9 +- .../lookandfeel/components/EditBrandColor.tsx | 6 +- .../lookandfeel/components/EditBranding.tsx | 8 +- .../components/EditHighlightBorder.tsx | 10 +- .../lookandfeel/components/EditPlacement.tsx | 14 +- .../settings/lookandfeel/loading.tsx | 5 +- .../settings/lookandfeel/page.tsx | 6 +- .../settings/members/actions.ts | 17 +- .../members/components/AddMemberModal.tsx | 7 +- .../members/components/DeleteTeam.tsx | 9 +- .../EditMemberships/EditMemberships.tsx | 11 +- .../EditMemberships/MemberActions.tsx | 13 +- .../EditMemberships/MembersInfo.tsx | 7 +- .../EditMemberships/TeamActions.tsx | 13 +- .../members/components/EditTeamName.tsx | 9 +- .../members/components/ShareInviteModal.tsx | 6 +- .../[environmentId]/settings/members/page.tsx | 6 +- .../settings/notifications/actions.ts | 6 +- .../notifications/components/EditAlerts.tsx | 6 +- .../components/EditWeeklySummary.tsx | 3 +- .../components/NotificationSwitch.tsx | 10 +- .../settings/notifications/page.tsx | 8 +- .../settings/product/actions.ts | 17 +- .../product/components/DeleteProduct.tsx | 9 +- .../components/DeleteProductRender.tsx | 9 +- .../product/components/EditProductName.tsx | 6 +- .../product/components/EditWaitingTime.tsx | 5 +- .../[environmentId]/settings/product/page.tsx | 4 +- .../settings/profile/actions.ts | 7 +- .../profile/components/AccountSecurity.tsx | 3 +- .../profile/components/DeleteAccount.tsx | 12 +- .../components/DisableTwoFactorModal.tsx | 13 +- .../profile/components/EditAvatar.tsx | 12 +- .../settings/profile/components/EditName.tsx | 8 +- .../components/EnableTwoFactorModal.tsx | 11 +- .../[environmentId]/settings/profile/page.tsx | 7 +- .../setup/components/SetupInstructions.tsx | 7 +- .../[environmentId]/settings/setup/page.tsx | 6 +- .../[environmentId]/settings/tags/actions.ts | 7 +- .../tags/components/EditTagsWrapper.tsx | 23 +- .../tags/components/MergeTagsCombobox.tsx | 7 +- .../[environmentId]/settings/tags/page.tsx | 14 +- .../surveys/[surveyId]/(analysis)/actions.ts | 1 + .../components/EmptyInAppSurveys.tsx | 5 +- .../components/SurveyResultsTabs.tsx | 7 +- .../surveys/[surveyId]/(analysis)/layout.tsx | 5 +- .../(analysis)/responses/actions.ts | 12 +- .../responses/components/ResponsePage.tsx | 16 +- .../responses/components/ResponseTimeline.tsx | 8 +- .../[surveyId]/(analysis)/responses/page.tsx | 15 +- .../[surveyId]/(analysis)/summary/actions.ts | 3 +- .../summary/components/CTASummary.tsx | 7 +- .../summary/components/ConsentSummary.tsx | 9 +- .../components/DateQuestionSummary.tsx | 13 +- .../summary/components/FileUploadSummary.tsx | 7 +- .../components/HiddenFieldsSummary.tsx | 7 +- .../summary/components/LinkModalButton.tsx | 10 +- .../components/LinkSingleUseSurveyModal.tsx | 9 +- .../components/MultipleChoiceSummary.tsx | 19 +- .../summary/components/NPSSummary.tsx | 9 +- .../summary/components/OpenTextSummary.tsx | 11 +- .../components/PictureChoiceSummary.tsx | 5 +- .../summary/components/RatingSummary.tsx | 9 +- .../summary/components/ShareEmbedSurvey.tsx | 14 +- .../summary/components/SuccessMessage.tsx | 10 +- .../summary/components/SummaryDropOffs.tsx | 5 +- .../summary/components/SummaryList.tsx | 14 +- .../summary/components/SummaryMetadata.tsx | 5 +- .../summary/components/SummaryPage.tsx | 9 +- .../components/shareEmbedTabs/EmailTab.tsx | 8 +- .../components/shareEmbedTabs/LinkTab.tsx | 11 +- .../components/shareEmbedTabs/WebpageTab.tsx | 7 +- .../(analysis)/summary/lib/emailTemplate.tsx | 12 +- .../[surveyId]/(analysis)/summary/page.tsx | 9 +- .../[surveyId]/components/CustomFilter.tsx | 44 +- .../components/QuestionFilterComboBox.tsx | 15 +- .../components/QuestionsComboBox.tsx | 27 +- .../[surveyId]/components/ResponseFilter.tsx | 10 +- .../[surveyId]/components/SummaryHeader.tsx | 35 +- .../components/SurveyStatusDropdown.tsx | 15 +- .../surveys/[surveyId]/edit/actions.ts | 3 +- .../edit/components/AddQuestionButton.tsx | 5 +- .../edit/components/AdvancedSettings.tsx | 2 + .../edit/components/AnimatedSurveyBg.tsx | 3 +- .../edit/components/CTAQuestionForm.tsx | 3 +- .../edit/components/ColorSurveyBg.tsx | 3 +- .../edit/components/ConsentQuestionForm.tsx | 3 +- .../edit/components/DateQuestionForm.tsx | 12 +- .../edit/components/EditThankYouCard.tsx | 3 +- .../edit/components/EditWelcomeCard.tsx | 8 +- .../components/FileUploadQuestionForm.tsx | 7 +- .../edit/components/HiddenFieldsCard.tsx | 7 +- .../edit/components/HowToSendCard.tsx | 18 +- .../edit/components/ImageSurveyBg.tsx | 2 +- .../edit/components/LogicEditor.tsx | 13 +- .../components/MultipleChoiceMultiForm.tsx | 9 +- .../components/MultipleChoiceSingleForm.tsx | 7 +- .../edit/components/NPSQuestionForm.tsx | 5 +- .../edit/components/OpenQuestionForm.tsx | 19 +- .../edit/components/PictureSelectionForm.tsx | 18 +- .../[surveyId]/edit/components/Placement.tsx | 2 + .../edit/components/QuestionCard.tsx | 28 +- .../edit/components/QuestionFormInput.tsx | 5 +- .../edit/components/QuestionMenu.tsx | 2 +- .../edit/components/QuestionsSettingsTabs.tsx | 3 +- .../edit/components/QuestionsView.tsx | 6 +- .../edit/components/RatingQuestionForm.tsx | 10 +- .../edit/components/RatingTypeDropdown.tsx | 2 +- .../edit/components/RecontactOptionsCard.tsx | 9 +- .../edit/components/ResponseOptionsCard.tsx | 10 +- .../edit/components/SettingsView.tsx | 13 +- .../edit/components/StylingCard.tsx | 8 +- .../edit/components/SurveyBgSelectorTab.tsx | 4 +- .../edit/components/SurveyEditor.tsx | 16 +- .../edit/components/SurveyMenuBar.tsx | 24 +- .../edit/components/UpdateQuestionId.tsx | 5 +- .../[surveyId]/edit/components/Validation.ts | 1 - .../edit/components/WhenToSendCard.tsx | 12 +- .../edit/components/WhoToSendCard.tsx | 11 +- .../surveys/[surveyId]/edit/page.tsx | 7 +- .../[environmentId]/surveys/actions.ts | 3 +- .../surveys/components/Modal.tsx | 11 +- .../surveys/components/PreviewSurvey.tsx | 13 +- .../surveys/components/SurveyDropDownMenu.tsx | 23 +- .../surveys/components/SurveyList.tsx | 11 +- .../surveys/components/SurveyStarter.tsx | 13 +- .../[environmentId]/surveys/page.tsx | 7 +- .../surveys/templates/TemplateContainer.tsx | 18 +- .../surveys/templates/TemplateList.tsx | 38 +- .../surveys/templates/actions.ts | 5 +- .../surveys/templates/page.tsx | 4 +- .../surveys/templates/templates.ts | 3 +- apps/web/app/(app)/layout.tsx | 8 +- apps/web/app/(app)/onboarding/actions.ts | 3 +- .../(app)/onboarding/components/Greeting.tsx | 3 +- .../(app)/onboarding/components/Objective.tsx | 6 +- .../onboarding/components/Onboarding.tsx | 10 +- .../(app)/onboarding/components/Product.tsx | 17 +- .../app/(app)/onboarding/components/Role.tsx | 8 +- apps/web/app/(app)/onboarding/page.tsx | 7 +- .../(auth)/auth/components/AzureButton.tsx | 5 +- .../(auth)/auth/components/GithubButton.tsx | 3 +- .../(auth)/auth/components/GoogleButton.tsx | 3 +- .../auth/components/IsPasswordValid.tsx | 2 +- .../(auth)/auth/components/Testimonial.tsx | 4 +- .../components/PasswordResetForm/index.tsx | 3 +- .../components/ResetPasswordForm/index.tsx | 7 +- apps/web/app/(auth)/auth/layout.tsx | 1 + .../auth/login/components/SigninForm.tsx | 18 +- .../auth/login/components/TwoFactor.tsx | 1 + .../auth/login/components/TwoFactorBackup.tsx | 3 +- apps/web/app/(auth)/auth/login/page.tsx | 9 +- .../auth/signup/components/SignupForm.tsx | 13 +- apps/web/app/(auth)/auth/signup/page.tsx | 8 +- .../components/RequestVerificationEmail.tsx | 3 +- apps/web/app/(auth)/auth/verify/page.tsx | 4 +- apps/web/app/(auth)/invite/page.tsx | 20 +- apps/web/app/(auth)/layout.tsx | 3 +- .../(redirects)/products/[productId]/route.ts | 7 +- .../app/(redirects)/teams/[teamId]/route.ts | 9 +- apps/web/app/[shortUrlId]/page.tsx | 1 + apps/web/app/api/auth/[...nextauth]/route.ts | 1 + .../app/api/billing/stripe-webhook/route.ts | 3 +- apps/web/app/api/cron/close_surveys/route.ts | 3 +- apps/web/app/api/cron/ping/route.ts | 3 +- apps/web/app/api/cron/report-usage/route.ts | 7 +- apps/web/app/api/cron/weekly_summary/email.ts | 6 +- apps/web/app/api/cron/weekly_summary/route.ts | 6 +- .../app/api/google-sheet/callback/route.ts | 15 +- apps/web/app/api/google-sheet/route.ts | 11 +- .../app/api/internal/csv-conversion/route.ts | 5 +- .../api/internal/excel-conversion/route.ts | 3 +- .../api/pipeline/lib/handleIntegrations.ts | 6 +- apps/web/app/api/pipeline/route.ts | 16 +- .../people/[userId]/set-attribute/route.ts | 3 +- .../displays/[displayId]/responded/route.ts | 3 +- .../client/displays/[displayId]/route.ts | 3 +- .../api/v1/(legacy)/client/displays/route.ts | 3 +- .../people/[personId]/set-attribute/route.ts | 3 +- .../client/responses/[responseId]/route.ts | 9 +- .../api/v1/(legacy)/client/responses/route.ts | 5 +- .../people/[personId]/set-attribute/route.ts | 3 +- .../js/people/[personId]/set-user-id/route.ts | 3 +- .../app/api/v1/(legacy)/js/people/route.ts | 3 +- apps/web/app/api/v1/(legacy)/js/sync/route.ts | 3 +- apps/web/app/api/v1/auth.ts | 5 +- .../client/[environmentId]/actions/route.ts | 5 +- .../displays/[displayId]/route.ts | 3 +- .../client/[environmentId]/displays/route.ts | 3 +- .../in-app/sync/[userId]/route.ts | 3 +- .../[environmentId]/in-app/sync/route.ts | 3 +- .../[environmentId]/people/[userId]/route.ts | 3 +- .../v1/client/[environmentId]/people/route.ts | 4 +- .../responses/[responseId]/route.ts | 9 +- .../client/[environmentId]/responses/route.ts | 5 +- .../storage/lib/uploadPrivateFile.ts | 1 + .../[environmentId]/storage/local/route.ts | 7 +- .../client/[environmentId]/storage/route.ts | 4 +- .../integrations/airtable/callback/route.ts | 11 +- .../app/api/v1/integrations/airtable/route.ts | 8 +- .../v1/integrations/airtable/tables/route.ts | 11 +- .../action-classes/[actionClassId]/route.ts | 7 +- .../api/v1/management/action-classes/route.ts | 11 +- .../[attributeClassId]/route.ts | 7 +- .../v1/management/attribute-classes/route.ts | 9 +- apps/web/app/api/v1/management/me/route.ts | 3 +- .../v1/management/people/[personId]/route.ts | 3 +- .../web/app/api/v1/management/people/route.ts | 1 + .../responses/[responseId]/route.ts | 15 +- .../app/api/v1/management/responses/route.ts | 3 +- .../v1/management/storage/lib/getSignedUrl.ts | 3 +- .../api/v1/management/storage/local/route.ts | 9 +- .../app/api/v1/management/storage/route.ts | 4 +- .../v1/management/surveys/[surveyId]/route.ts | 11 +- .../app/api/v1/management/surveys/route.ts | 7 +- apps/web/app/api/v1/memberships/route.ts | 3 +- apps/web/app/api/v1/og/route.tsx | 4 - .../app/api/v1/users/forgot-password/route.ts | 3 +- apps/web/app/api/v1/users/me/route.ts | 3 +- .../app/api/v1/users/reset-password/route.ts | 5 +- apps/web/app/api/v1/users/route.ts | 5 +- .../api/v1/users/verification-email/route.ts | 3 +- .../app/api/v1/webhooks/[webhookId]/route.ts | 3 +- apps/web/app/api/v1/webhooks/route.ts | 9 +- apps/web/app/error.tsx | 3 +- apps/web/app/layout.tsx | 1 + apps/web/app/lib/api/apiHelper.ts | 7 +- apps/web/app/lib/email.ts | 4 +- apps/web/app/lib/questions.ts | 8 +- .../lib/responses/questionResponseMapping.ts | 2 +- apps/web/app/lib/singleUseSurveys.ts | 5 +- apps/web/app/lib/surveys/surveys.ts | 5 +- apps/web/app/middleware/bucket.ts | 1 + apps/web/app/not-found.tsx | 4 +- apps/web/app/page.tsx | 7 +- apps/web/app/s/[surveyId]/actions.ts | 13 +- .../s/[surveyId]/components/LegalFooter.tsx | 3 +- .../s/[surveyId]/components/LinkSurvey.tsx | 7 +- .../[surveyId]/components/MediaBackground.tsx | 3 +- .../app/s/[surveyId]/components/PinScreen.tsx | 5 +- .../[surveyId]/components/SurveyInactive.tsx | 6 +- .../[surveyId]/components/SurveyLinkUsed.tsx | 4 +- .../s/[surveyId]/components/VerifyEmail.tsx | 7 +- apps/web/app/s/[surveyId]/lib/prefilling.ts | 2 +- apps/web/app/s/[surveyId]/not-found.tsx | 8 +- apps/web/app/s/[surveyId]/page.tsx | 19 +- .../[accessType]/[fileName]/lib/deleteFile.ts | 1 + .../[accessType]/[fileName]/lib/getFile.ts | 7 +- .../[accessType]/[fileName]/route.ts | 10 +- apps/web/middleware.ts | 2 +- apps/web/next.config.mjs | 6 +- apps/web/package.json | 14 +- .../displays/[displayId]/responded.ts | 3 +- .../[environmentId]/displays/index.ts | 5 +- .../[environmentId]/events/index.ts | 3 +- .../people/[personId]/attribute.ts | 3 +- .../responses/[responseId]/index.ts | 3 +- .../[environmentId]/responses/index.ts | 3 +- .../api/v1/client/surveys/[surveyId]/index.ts | 3 +- apps/web/sentry.client.config.ts | 1 - apps/web/sentry.edge.config.ts | 1 - apps/web/sentry.server.config.ts | 1 - apps/web/tsconfig.json | 10 +- package.json | 9 +- packages/api/README.md | 2 +- packages/api/package.json | 4 +- packages/api/src/api/client/action.ts | 3 +- packages/api/src/api/client/display.ts | 1 + packages/api/src/api/client/index.ts | 4 +- packages/api/src/api/client/people.ts | 1 + packages/api/src/api/client/response.ts | 1 + packages/api/src/index.ts | 2 +- packages/api/src/utils/makeRequest.ts | 1 + packages/database/jsonTypes.ts | 4 +- packages/database/package.json | 4 +- packages/database/src/index.ts | 1 + .../components/AddMemberRole.tsx | 5 +- .../components/EditMembershipRole.tsx | 18 +- .../components/TransferOwnershipModal.tsx | 3 +- packages/ee/RoleManagement/lib/actions.ts | 9 +- packages/ee/billing/api/stripe-webhook.ts | 1 + .../handlers/checkoutSessionCompleted.ts | 6 +- .../handlers/subscriptionCreatedOrUpdated.ts | 7 +- .../billing/handlers/subscriptionDeleted.ts | 5 +- .../lib/createCustomerPortalSession.ts | 1 + packages/ee/billing/lib/createSubscription.ts | 17 +- packages/ee/billing/lib/removeSubscription.ts | 8 +- packages/ee/billing/lib/reportUsage.ts | 4 +- packages/ee/lib/service.ts | 1 + packages/ee/package.json | 2 +- .../eslint-config-formbricks/package.json | 2 +- packages/js/package.json | 12 +- packages/js/src/index.ts | 1 + packages/js/src/lib/actions.ts | 4 +- packages/js/src/lib/api.ts | 1 + packages/js/src/lib/config.ts | 1 + packages/js/src/lib/initialize.ts | 7 +- packages/js/src/lib/noCodeActions.ts | 3 +- packages/js/src/lib/person.ts | 1 + packages/js/src/lib/sync.ts | 1 + packages/js/src/lib/widget.ts | 1 + packages/js/tests/__mocks__/apiMock.ts | 1 + packages/js/tests/index.test.ts | 8 +- packages/lib/account/service.ts | 5 +- packages/lib/action/service.ts | 12 +- packages/lib/actionClass/auth.ts | 16 +- packages/lib/actionClass/service.ts | 9 +- packages/lib/airtable/service.ts | 4 +- packages/lib/apiKey/auth.ts | 10 +- packages/lib/apiKey/service.ts | 18 +- packages/lib/attributeClass/auth.ts | 10 +- packages/lib/attributeClass/service.ts | 21 +- packages/lib/auth.ts | 3 +- packages/lib/auth/service.ts | 6 +- packages/lib/authOptions.ts | 6 +- packages/lib/constants.ts | 2 + packages/lib/crypto.ts | 3 +- packages/lib/display/service.ts | 10 +- packages/lib/emails/emails.ts | 3 +- packages/lib/environment/auth.ts | 6 +- packages/lib/environment/service.ts | 15 +- packages/lib/googleSheet/service.ts | 6 +- packages/lib/integration/auth.ts | 10 +- packages/lib/integration/service.ts | 6 +- packages/lib/invite/service.ts | 36 +- packages/lib/jwt.ts | 2 + packages/lib/membership/hooks/actions.ts | 7 +- .../membership/hooks/useMembershipRole.tsx | 3 +- packages/lib/membership/service.ts | 16 +- packages/lib/package.json | 10 +- packages/lib/person/auth.ts | 10 +- packages/lib/person/service.ts | 21 +- packages/lib/product/auth.ts | 14 +- packages/lib/product/service.ts | 8 +- packages/lib/response/auth.ts | 6 +- packages/lib/response/service.ts | 6 +- packages/lib/responseNote/auth.ts | 8 +- packages/lib/responseNote/service.ts | 17 +- packages/lib/responseQueue.ts | 1 + packages/lib/responses.ts | 2 +- packages/lib/shortUrl/service.ts | 8 +- packages/lib/storage/service.ts | 24 +- packages/lib/survey/auth.ts | 18 +- packages/lib/survey/service.ts | 6 +- packages/lib/tag/auth.ts | 14 +- packages/lib/tag/service.ts | 7 +- packages/lib/tagOnResponse/auth.ts | 12 +- packages/lib/tagOnResponse/service.ts | 14 +- packages/lib/team/auth.ts | 12 +- packages/lib/team/hooks/actions.ts | 7 +- packages/lib/team/hooks/useGetBillingInfo.ts | 4 +- packages/lib/team/service.ts | 6 +- packages/lib/teamDetail/service.ts | 8 +- packages/lib/tsconfig.json | 9 +- packages/lib/user/service.ts | 9 +- packages/lib/utils/validate.ts | 1 + packages/lib/webhook/auth.ts | 8 +- packages/lib/webhook/cache.ts | 1 + packages/lib/webhook/service.ts | 18 +- .../prettier-config/merged-prettier-plugin.js | 12 - packages/prettier-config/package.json | 5 +- packages/prettier-config/prettier-preset.js | 12 +- packages/surveys/package.json | 10 +- .../src/components/general/FileInput.tsx | 3 +- .../src/components/general/ProgressBar.tsx | 6 +- .../general/QuestionConditional.tsx | 3 +- .../surveys/src/components/general/Survey.tsx | 4 +- .../src/components/general/SurveyInline.tsx | 1 + .../src/components/general/SurveyModal.tsx | 5 +- .../src/components/general/WelcomeCard.tsx | 2 + .../src/components/questions/CTAQuestion.tsx | 12 +- .../components/questions/ConsentQuestion.tsx | 5 +- .../src/components/questions/DateQuestion.tsx | 3 +- .../questions/FileUploadQuestion.tsx | 8 +- .../questions/MultipleChoiceMultiQuestion.tsx | 14 +- .../MultipleChoiceSingleQuestion.tsx | 14 +- .../src/components/questions/NPSQuestion.tsx | 14 +- .../components/questions/OpenTextQuestion.tsx | 13 +- .../questions/PictureSelectionQuestion.tsx | 6 +- .../components/questions/RatingQuestion.tsx | 6 +- .../components/wrappers/AutoCloseWrapper.tsx | 4 +- .../surveys/src/components/wrappers/Modal.tsx | 3 +- packages/surveys/src/lib/styles.ts | 3 +- packages/surveys/src/lib/ttc.ts | 4 +- .../src/sideload/question-date/Question.tsx | 2 +- .../src/sideload/question-date/index.tsx | 5 +- packages/surveys/src/types/props.ts | 2 +- packages/surveys/vite.config.ts | 2 +- packages/tsconfig/package.json | 6 +- packages/types/actions.ts | 1 + packages/types/auth.ts | 1 + packages/types/integration/airtable.ts | 1 + packages/types/integration/googleSheet.ts | 1 + packages/types/integration/index.ts | 2 + packages/types/integration/sharedTypes.ts | 1 + packages/types/invites.ts | 1 + packages/types/js.ts | 1 + packages/types/next-auth.d.ts | 1 + packages/types/pipelines.ts | 1 + packages/types/product.ts | 3 +- packages/types/responses.ts | 1 + packages/types/surveys.ts | 1 + packages/types/templates.ts | 3 +- packages/types/webhooks.ts | 1 + packages/ui/Accordion/index.tsx | 3 +- packages/ui/AdvancedOptionToggle/index.tsx | 1 + packages/ui/Alert/index.tsx | 2 +- packages/ui/AlertDialog/index.tsx | 2 +- packages/ui/BillingSlider/index.tsx | 2 +- packages/ui/Button/index.tsx | 3 +- packages/ui/Calendar/index.tsx | 3 +- packages/ui/Checkbox/index.tsx | 2 +- packages/ui/CodeBlock/index.tsx | 3 +- packages/ui/ColorPicker/index.tsx | 3 +- packages/ui/Command/index.tsx | 3 +- packages/ui/Confetti/index.tsx | 2 +- packages/ui/CreateTeamModal/index.tsx | 11 +- packages/ui/CustomDialog/index.tsx | 2 +- packages/ui/DatePicker/index.tsx | 14 +- packages/ui/DeleteDialog/index.tsx | 2 +- packages/ui/Dialog/index.tsx | 2 +- packages/ui/DropdownMenu/index.tsx | 2 +- .../components/AddVariablesDropdown.tsx | 3 +- packages/ui/Editor/components/Editor.tsx | 2 +- .../ui/Editor/components/ToolbarPlugin.tsx | 25 +- packages/ui/EmptySpaceFiller/index.tsx | 3 +- packages/ui/EnvironmentNotice/index.tsx | 3 +- packages/ui/FileInput/index.tsx | 6 +- packages/ui/FileUploadResponse/index.tsx | 1 + packages/ui/GoBackButton/index.tsx | 3 +- packages/ui/Input/index.tsx | 1 + packages/ui/Label/index.tsx | 2 +- packages/ui/LoadingWrapper/index.tsx | 1 + packages/ui/Modal/index.tsx | 3 +- packages/ui/ModalWithTabs/index.tsx | 3 +- packages/ui/OTPInput/index.tsx | 4 +- packages/ui/PasswordInput/index.tsx | 5 +- .../ui/PictureSelectionResponse/index.tsx | 12 +- packages/ui/Popover/index.tsx | 2 +- packages/ui/PostHogClient/index.tsx | 3 +- packages/ui/PricingCard/index.tsx | 6 +- packages/ui/RadioGroup/index.tsx | 3 +- packages/ui/RatingResponse/index.tsx | 4 +- packages/ui/SearchBox/index.tsx | 5 +- packages/ui/Select/index.tsx | 2 +- packages/ui/SingleResponseCard/actions.ts | 14 +- .../components/QuestionSkip.tsx | 6 +- .../components/ResponseNote.tsx | 18 +- .../components/ResponseTagsWrapper.tsx | 14 +- packages/ui/SingleResponseCard/index.tsx | 30 +- packages/ui/Survey/index.tsx | 3 +- packages/ui/SurveyStatusIndicator/index.tsx | 3 +- packages/ui/Switch/index.tsx | 2 +- packages/ui/Tag/index.tsx | 3 +- packages/ui/TagsCombobox/index.tsx | 9 +- packages/ui/Tooltip/index.tsx | 2 +- packages/ui/UpgradePlanNotice/index.tsx | 1 + packages/ui/package.json | 18 +- packages/ui/v2/Button/index.tsx | 3 +- pnpm-lock.yaml | 7836 +++++++---------- 637 files changed, 5828 insertions(+), 6417 deletions(-) delete mode 100644 packages/prettier-config/merged-prettier-plugin.js diff --git a/.prettierrc.js b/.prettierrc.js index db8e3eee54..5430f66ec3 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1 +1,6 @@ -module.exports = require("./packages/prettier-config/prettier-preset"); +const baseConfig = require("./packages/prettier-config/prettier-preset"); + +module.exports = { + ...baseConfig, + plugins: ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss"], +}; diff --git a/README.md b/README.md index d43219e8f6..19d72ef820 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,6 @@ Harvest user-insights, build irresistible experiences.

-

Trendshift Badge for formbricks/formbricks diff --git a/apps/demo/package.json b/apps/demo/package.json index 67e93c3364..adb1a28123 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -13,7 +13,7 @@ "dependencies": { "@formbricks/js": "workspace:*", "@heroicons/react": "^2.0.18", - "next": "14.0.3", + "next": "14.0.4", "react": "18.2.0", "react-dom": "18.2.0" }, diff --git a/apps/demo/pages/_app.tsx b/apps/demo/pages/_app.tsx index 6b12fe2353..2ce0edb5ce 100644 --- a/apps/demo/pages/_app.tsx +++ b/apps/demo/pages/_app.tsx @@ -1,5 +1,6 @@ import type { AppProps } from "next/app"; import Head from "next/head"; + import "../styles/globals.css"; export default function App({ Component, pageProps }: AppProps) { diff --git a/apps/demo/pages/_document.tsx b/apps/demo/pages/_document.tsx index ac43b6f24d..816404f321 100644 --- a/apps/demo/pages/_document.tsx +++ b/apps/demo/pages/_document.tsx @@ -1,4 +1,4 @@ -import { Html, Head, Main, NextScript } from "next/document"; +import { Head, Html, Main, NextScript } from "next/document"; export default function Document() { return ( diff --git a/apps/demo/pages/app/index.tsx b/apps/demo/pages/app/index.tsx index 9df5d57ed2..07afa60606 100644 --- a/apps/demo/pages/app/index.tsx +++ b/apps/demo/pages/app/index.tsx @@ -1,8 +1,10 @@ -import formbricks from "@formbricks/js"; import Image from "next/image"; -import { useEffect, useState } from "react"; -import fbsetup from "../../public/fb-setup.png"; import { useRouter } from "next/router"; +import { useEffect, useState } from "react"; + +import formbricks from "@formbricks/js"; + +import fbsetup from "../../public/fb-setup.png"; declare const window: any; diff --git a/apps/formbricks-com/app/docs/layout.tsx b/apps/formbricks-com/app/docs/layout.tsx index 351db463ae..6be68ac6af 100644 --- a/apps/formbricks-com/app/docs/layout.tsx +++ b/apps/formbricks-com/app/docs/layout.tsx @@ -1,9 +1,7 @@ -import glob from "fast-glob"; - import { Providers } from "@/app/providers"; import { Layout } from "@/components/docs/Layout"; - import { type Section } from "@/components/docs/SectionProvider"; +import glob from "fast-glob"; import { type Metadata } from "next"; export const metadata: Metadata = { diff --git a/apps/formbricks-com/app/providers.tsx b/apps/formbricks-com/app/providers.tsx index c5666c2268..c295f39d59 100644 --- a/apps/formbricks-com/app/providers.tsx +++ b/apps/formbricks-com/app/providers.tsx @@ -1,7 +1,7 @@ "use client"; -import { useEffect } from "react"; import { ThemeProvider, useTheme } from "next-themes"; +import { useEffect } from "react"; function ThemeWatcher() { let { resolvedTheme, setTheme } = useTheme(); diff --git a/apps/formbricks-com/components/docs/BestPractices.tsx b/apps/formbricks-com/components/docs/BestPractices.tsx index b48d3036e1..04fd4cddf0 100644 --- a/apps/formbricks-com/components/docs/BestPractices.tsx +++ b/apps/formbricks-com/components/docs/BestPractices.tsx @@ -1,14 +1,14 @@ "use client"; -import Link from "next/link"; -import { type MotionValue, motion, useMotionTemplate, useMotionValue } from "framer-motion"; - -import { GridPattern } from "./GridPattern"; -import { Heading } from "./Heading"; import { ChatBubbleIcon } from "@/components/docs/icons/ChatBubbleIcon"; import { EnvelopeIcon } from "@/components/docs/icons/EnvelopeIcon"; import { UserIcon } from "@/components/docs/icons/UserIcon"; import { UsersIcon } from "@/components/docs/icons/UsersIcon"; +import { type MotionValue, motion, useMotionTemplate, useMotionValue } from "framer-motion"; +import Link from "next/link"; + +import { GridPattern } from "./GridPattern"; +import { Heading } from "./Heading"; interface BestPractice { href: string; diff --git a/apps/formbricks-com/components/docs/Button.tsx b/apps/formbricks-com/components/docs/Button.tsx index df5df37a0f..b385731705 100644 --- a/apps/formbricks-com/components/docs/Button.tsx +++ b/apps/formbricks-com/components/docs/Button.tsx @@ -1,5 +1,5 @@ -import Link from "next/link"; import clsx from "clsx"; +import Link from "next/link"; function ArrowIcon(props: React.ComponentPropsWithoutRef<"svg">) { return ( diff --git a/apps/formbricks-com/components/docs/Code.tsx b/apps/formbricks-com/components/docs/Code.tsx index 5199e671c5..03ffcd77b5 100644 --- a/apps/formbricks-com/components/docs/Code.tsx +++ b/apps/formbricks-com/components/docs/Code.tsx @@ -1,12 +1,11 @@ "use client"; -import { Children, createContext, isValidElement, useContext, useEffect, useRef, useState } from "react"; +import { Tag } from "@/components/docs/Tag"; import { Tab } from "@headlessui/react"; import clsx from "clsx"; +import { Children, createContext, isValidElement, useContext, useEffect, useRef, useState } from "react"; import { create } from "zustand"; -import { Tag } from "@/components/docs/Tag"; - const languageNames: Record = { js: "JavaScript", ts: "TypeScript", diff --git a/apps/formbricks-com/components/docs/DocsFeedback.tsx b/apps/formbricks-com/components/docs/DocsFeedback.tsx index 05c30b964d..697cd5df3b 100644 --- a/apps/formbricks-com/components/docs/DocsFeedback.tsx +++ b/apps/formbricks-com/components/docs/DocsFeedback.tsx @@ -1,8 +1,9 @@ "use client"; +import { useState } from "react"; + import { Button } from "@formbricks/ui/Button"; import { Popover, PopoverContent, PopoverTrigger } from "@formbricks/ui/Popover"; -import { useState } from "react"; export const DocsFeedback: React.FC = () => { const [isOpen, setIsOpen] = useState(false); diff --git a/apps/formbricks-com/components/docs/Feedback.tsx b/apps/formbricks-com/components/docs/Feedback.tsx index e18496b0fb..109f7d5d69 100644 --- a/apps/formbricks-com/components/docs/Feedback.tsx +++ b/apps/formbricks-com/components/docs/Feedback.tsx @@ -1,8 +1,9 @@ "use client"; -import { forwardRef, Fragment, useState } from "react"; -import { usePathname } from "next/navigation"; import { Transition } from "@headlessui/react"; +import { usePathname } from "next/navigation"; +import { Fragment, forwardRef, useState } from "react"; + import { handleFeedbackSubmit } from "../../lib/handleFeedbackSubmit"; function CheckIcon(props: React.ComponentPropsWithoutRef<"svg">) { diff --git a/apps/formbricks-com/components/docs/Footer.tsx b/apps/formbricks-com/components/docs/Footer.tsx index e5f78badf6..455b63bc15 100644 --- a/apps/formbricks-com/components/docs/Footer.tsx +++ b/apps/formbricks-com/components/docs/Footer.tsx @@ -2,7 +2,8 @@ import Link from "next/link"; import { usePathname } from "next/navigation"; -import { FaGithub, FaXTwitter, FaDiscord } from "react-icons/fa6"; +import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6"; + import { Button } from "./Button"; import { navigation } from "./Navigation"; diff --git a/apps/formbricks-com/components/docs/Header.tsx b/apps/formbricks-com/components/docs/Header.tsx index 6a6b582aff..f091a24ca8 100644 --- a/apps/formbricks-com/components/docs/Header.tsx +++ b/apps/formbricks-com/components/docs/Header.tsx @@ -1,11 +1,11 @@ "use client"; +import { FooterLogo } from "@/components/shared/Logo"; import clsx from "clsx"; import { motion, useScroll, useTransform } from "framer-motion"; import Link from "next/link"; import { forwardRef } from "react"; -import { FooterLogo } from "@/components/shared/Logo"; import { Button } from "./Button"; import { MobileNavigation, useIsInsideMobileNavigation, useMobileNavigationStore } from "./MobileNavigation"; import { MobileSearch, Search } from "./Search"; diff --git a/apps/formbricks-com/components/docs/Heading.tsx b/apps/formbricks-com/components/docs/Heading.tsx index f9ddf1c5ca..5537e85cfe 100644 --- a/apps/formbricks-com/components/docs/Heading.tsx +++ b/apps/formbricks-com/components/docs/Heading.tsx @@ -1,13 +1,13 @@ "use client"; +import { remToPx } from "@/lib/remToPx"; import { useInView } from "framer-motion"; import Link from "next/link"; +import { usePathname } from "next/navigation"; import { useEffect, useRef } from "react"; -import { remToPx } from "@/lib/remToPx"; import { useSectionStore } from "./SectionProvider"; import { Tag } from "./Tag"; -import { usePathname } from "next/navigation"; function AnchorIcon(props: React.ComponentPropsWithoutRef<"svg">) { return ( diff --git a/apps/formbricks-com/components/docs/Layout.tsx b/apps/formbricks-com/components/docs/Layout.tsx index 429f2d6540..af2b26cb81 100644 --- a/apps/formbricks-com/components/docs/Layout.tsx +++ b/apps/formbricks-com/components/docs/Layout.tsx @@ -1,14 +1,14 @@ "use client"; +import { Navigation } from "@/components/docs/Navigation"; +import { FooterLogo } from "@/components/shared/Logo"; +import { motion } from "framer-motion"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { motion } from "framer-motion"; import { Footer } from "./Footer"; import { Header } from "./Header"; import { type Section, SectionProvider } from "./SectionProvider"; -import { FooterLogo } from "@/components/shared/Logo"; -import { Navigation } from "@/components/docs/Navigation"; export function Layout({ children, diff --git a/apps/formbricks-com/components/docs/Libraries.tsx b/apps/formbricks-com/components/docs/Libraries.tsx index 66443967d6..9eb90b46b7 100644 --- a/apps/formbricks-com/components/docs/Libraries.tsx +++ b/apps/formbricks-com/components/docs/Libraries.tsx @@ -1,9 +1,9 @@ -import Image from "next/image"; - import logoHtml from "@/images/logos/html5.svg"; import logoNextjs from "@/images/logos/nextjs.svg"; import logoReactJs from "@/images/logos/reactjs.svg"; import logoVueJs from "@/images/logos/vuejs.svg"; +import Image from "next/image"; + import { Button } from "./Button"; const libraries = [ diff --git a/apps/formbricks-com/components/docs/MobileNavigation.tsx b/apps/formbricks-com/components/docs/MobileNavigation.tsx index 0c0d702f20..592378f538 100644 --- a/apps/formbricks-com/components/docs/MobileNavigation.tsx +++ b/apps/formbricks-com/components/docs/MobileNavigation.tsx @@ -1,12 +1,12 @@ "use client"; -import { createContext, Fragment, Suspense, useContext, useEffect, useRef } from "react"; -import { usePathname, useSearchParams } from "next/navigation"; +import { Header } from "@/components/docs/Header"; import { Dialog, Transition } from "@headlessui/react"; import { motion } from "framer-motion"; +import { usePathname, useSearchParams } from "next/navigation"; +import { Fragment, Suspense, createContext, useContext, useEffect, useRef } from "react"; import { create } from "zustand"; -import { Header } from "@/components/docs/Header"; import { Navigation } from "./Navigation"; function MenuIcon(props: React.ComponentPropsWithoutRef<"svg">) { diff --git a/apps/formbricks-com/components/docs/Navigation.tsx b/apps/formbricks-com/components/docs/Navigation.tsx index 02c7586541..d67a90820b 100644 --- a/apps/formbricks-com/components/docs/Navigation.tsx +++ b/apps/formbricks-com/components/docs/Navigation.tsx @@ -1,12 +1,12 @@ "use client"; +import { remToPx } from "@/lib/remToPx"; import clsx from "clsx"; import { AnimatePresence, motion, useIsPresent } from "framer-motion"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useRef } from "react"; -import { remToPx } from "@/lib/remToPx"; import { Button } from "./Button"; import { useIsInsideMobileNavigation } from "./MobileNavigation"; import { useSectionStore } from "./SectionProvider"; diff --git a/apps/formbricks-com/components/docs/Search.tsx b/apps/formbricks-com/components/docs/Search.tsx index 6e149f1975..f08a090e44 100644 --- a/apps/formbricks-com/components/docs/Search.tsx +++ b/apps/formbricks-com/components/docs/Search.tsx @@ -1,19 +1,18 @@ "use client"; -import { forwardRef, Fragment, Suspense, useCallback, useEffect, useId, useRef, useState } from "react"; -import Highlighter from "react-highlight-words"; -import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { navigation } from "@/components/docs/Navigation"; +import { type Result } from "@/mdx/search.mjs"; import { type AutocompleteApi, - createAutocomplete, - type AutocompleteState, type AutocompleteCollection, + type AutocompleteState, + createAutocomplete, } from "@algolia/autocomplete-core"; import { Dialog, Transition } from "@headlessui/react"; import clsx from "clsx"; - -import { type Result } from "@/mdx/search.mjs"; -import { navigation } from "@/components/docs/Navigation"; +import { usePathname, useRouter, useSearchParams } from "next/navigation"; +import { Fragment, Suspense, forwardRef, useCallback, useEffect, useId, useRef, useState } from "react"; +import Highlighter from "react-highlight-words"; type EmptyObject = Record; diff --git a/apps/formbricks-com/components/docs/SectionProvider.tsx b/apps/formbricks-com/components/docs/SectionProvider.tsx index 3eb6390e05..ca3b156102 100644 --- a/apps/formbricks-com/components/docs/SectionProvider.tsx +++ b/apps/formbricks-com/components/docs/SectionProvider.tsx @@ -1,10 +1,9 @@ "use client"; +import { remToPx } from "@/lib/remToPx"; import { createContext, useContext, useEffect, useLayoutEffect, useState } from "react"; import { type StoreApi, createStore, useStore } from "zustand"; -import { remToPx } from "@/lib/remToPx"; - export interface Section { id: string; title: string; diff --git a/apps/formbricks-com/components/docs/ThemeToggle.tsx b/apps/formbricks-com/components/docs/ThemeToggle.tsx index 0d33c95dd5..d1cbd39cb5 100644 --- a/apps/formbricks-com/components/docs/ThemeToggle.tsx +++ b/apps/formbricks-com/components/docs/ThemeToggle.tsx @@ -1,7 +1,7 @@ "use client"; -import { useEffect, useState } from "react"; import { useTheme } from "next-themes"; +import { useEffect, useState } from "react"; function SunIcon(props: React.ComponentPropsWithoutRef<"svg">) { return ( diff --git a/apps/formbricks-com/components/docs/docsFaq.tsx b/apps/formbricks-com/components/docs/docsFaq.tsx index 962e01fa9d..81cb4ccd4a 100644 --- a/apps/formbricks-com/components/docs/docsFaq.tsx +++ b/apps/formbricks-com/components/docs/docsFaq.tsx @@ -1,4 +1,5 @@ import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@formbricks/ui/Accordion"; + import FaqJsonLdComponent from "./faQJsonLD"; const FAQ_DATA = [ diff --git a/apps/formbricks-com/components/docs/mdx.tsx b/apps/formbricks-com/components/docs/mdx.tsx index 7d8fa21ac1..f421d93f4b 100644 --- a/apps/formbricks-com/components/docs/mdx.tsx +++ b/apps/formbricks-com/components/docs/mdx.tsx @@ -1,7 +1,7 @@ -import Link from "next/link"; -import clsx from "clsx"; - import { Feedback } from "@/components/docs/Feedback"; +import clsx from "clsx"; +import Link from "next/link"; + import { Heading } from "./Heading"; import { Prose } from "./Prose"; diff --git a/apps/formbricks-com/components/dummyUI/AddEventDummy.tsx b/apps/formbricks-com/components/dummyUI/AddEventDummy.tsx index 827d6bdf5d..29100b10cf 100644 --- a/apps/formbricks-com/components/dummyUI/AddEventDummy.tsx +++ b/apps/formbricks-com/components/dummyUI/AddEventDummy.tsx @@ -1,8 +1,9 @@ -import { Button } from "@formbricks/ui/Button"; -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; import { PlusIcon, TrashIcon } from "@heroicons/react/24/solid"; import { useState } from "react"; +import { Button } from "@formbricks/ui/Button"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; + const DummyUI: React.FC = () => { const actionClasses = [ { id: "1", name: "View Dashboard" }, diff --git a/apps/formbricks-com/components/dummyUI/AddNoCodeEventModalDummy.tsx b/apps/formbricks-com/components/dummyUI/AddNoCodeEventModalDummy.tsx index 093f3788bf..2344abe8f7 100644 --- a/apps/formbricks-com/components/dummyUI/AddNoCodeEventModalDummy.tsx +++ b/apps/formbricks-com/components/dummyUI/AddNoCodeEventModalDummy.tsx @@ -1,10 +1,11 @@ -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; -import { Button } from "@formbricks/ui/Button"; -import { Label } from "@formbricks/ui/Label"; -import { Input } from "@formbricks/ui/Input"; -import { RadioGroup, RadioGroupItem } from "@formbricks/ui/RadioGroup"; import { CursorArrowRaysIcon } from "@heroicons/react/24/solid"; + +import { Button } from "@formbricks/ui/Button"; +import { Input } from "@formbricks/ui/Input"; +import { Label } from "@formbricks/ui/Label"; import { Modal } from "@formbricks/ui/Modal"; +import { RadioGroup, RadioGroupItem } from "@formbricks/ui/RadioGroup"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; interface EventDetailModalProps { open: boolean; diff --git a/apps/formbricks-com/components/dummyUI/CTAQuestion.tsx b/apps/formbricks-com/components/dummyUI/CTAQuestion.tsx index 8f5af6eb3b..2d7817e0fc 100644 --- a/apps/formbricks-com/components/dummyUI/CTAQuestion.tsx +++ b/apps/formbricks-com/components/dummyUI/CTAQuestion.tsx @@ -1,4 +1,5 @@ import { TSurveyCTAQuestion } from "@formbricks/types/surveys"; + import Headline from "./Headline"; import HtmlBody from "./HtmlBody"; diff --git a/apps/formbricks-com/components/dummyUI/DemoPreview.tsx b/apps/formbricks-com/components/dummyUI/DemoPreview.tsx index efb3f94eaf..bf2c6e08ec 100644 --- a/apps/formbricks-com/components/dummyUI/DemoPreview.tsx +++ b/apps/formbricks-com/components/dummyUI/DemoPreview.tsx @@ -1,8 +1,11 @@ "use client"; + import React, { useEffect, useState } from "react"; + +import { TTemplate } from "@formbricks/types/templates"; + import PreviewSurvey from "./PreviewSurvey"; import { findTemplateByName } from "./templates"; -import { TTemplate } from "@formbricks/types/templates"; interface DemoPreviewProps { template: string; diff --git a/apps/formbricks-com/components/dummyUI/DemoView.tsx b/apps/formbricks-com/components/dummyUI/DemoView.tsx index 8f9c1f9aee..a384b1de31 100644 --- a/apps/formbricks-com/components/dummyUI/DemoView.tsx +++ b/apps/formbricks-com/components/dummyUI/DemoView.tsx @@ -1,5 +1,7 @@ -import { TTemplate } from "@formbricks/types/templates"; import { useEffect, useState } from "react"; + +import { TTemplate } from "@formbricks/types/templates"; + import PreviewSurvey from "./PreviewSurvey"; import TemplateList from "./TemplateList"; import { templates } from "./templates"; diff --git a/apps/formbricks-com/components/dummyUI/Modal.tsx b/apps/formbricks-com/components/dummyUI/Modal.tsx index 0468b9f161..a04f2ce3a5 100644 --- a/apps/formbricks-com/components/dummyUI/Modal.tsx +++ b/apps/formbricks-com/components/dummyUI/Modal.tsx @@ -1,4 +1,5 @@ import { ReactNode, useEffect, useState } from "react"; + import { cn } from "@formbricks/lib/cn"; export default function Modal({ diff --git a/apps/formbricks-com/components/dummyUI/MultipleChoiceMultiQuestion.tsx b/apps/formbricks-com/components/dummyUI/MultipleChoiceMultiQuestion.tsx index 961a6f90d3..806627ac24 100644 --- a/apps/formbricks-com/components/dummyUI/MultipleChoiceMultiQuestion.tsx +++ b/apps/formbricks-com/components/dummyUI/MultipleChoiceMultiQuestion.tsx @@ -1,6 +1,8 @@ -import { useState, useEffect } from "react"; +import { useEffect, useState } from "react"; + import { cn } from "@formbricks/lib/cn"; import { TSurveyMultipleChoiceMultiQuestion } from "@formbricks/types/surveys"; + import Headline from "./Headline"; import Subheader from "./Subheader"; diff --git a/apps/formbricks-com/components/dummyUI/MultipleChoiceSingleQuestion.tsx b/apps/formbricks-com/components/dummyUI/MultipleChoiceSingleQuestion.tsx index c5fea00cc3..1ea0112b93 100644 --- a/apps/formbricks-com/components/dummyUI/MultipleChoiceSingleQuestion.tsx +++ b/apps/formbricks-com/components/dummyUI/MultipleChoiceSingleQuestion.tsx @@ -1,6 +1,8 @@ +import { useState } from "react"; + import { cn } from "@formbricks/lib/cn"; import { TSurveyMultipleChoiceSingleQuestion } from "@formbricks/types/surveys"; -import { useState } from "react"; + import Headline from "./Headline"; import Subheader from "./Subheader"; diff --git a/apps/formbricks-com/components/dummyUI/NPSQuestion.tsx b/apps/formbricks-com/components/dummyUI/NPSQuestion.tsx index 825a96606d..15217a4d93 100644 --- a/apps/formbricks-com/components/dummyUI/NPSQuestion.tsx +++ b/apps/formbricks-com/components/dummyUI/NPSQuestion.tsx @@ -1,6 +1,8 @@ import { useState } from "react"; + import { cn } from "@formbricks/lib/cn"; import { TSurveyNPSQuestion } from "@formbricks/types/surveys"; + import Headline from "./Headline"; import Subheader from "./Subheader"; diff --git a/apps/formbricks-com/components/dummyUI/OpenTextQuestion.tsx b/apps/formbricks-com/components/dummyUI/OpenTextQuestion.tsx index 63dd1001b6..f866ce752e 100644 --- a/apps/formbricks-com/components/dummyUI/OpenTextQuestion.tsx +++ b/apps/formbricks-com/components/dummyUI/OpenTextQuestion.tsx @@ -1,5 +1,7 @@ -import { TSurveyOpenTextQuestion } from "@formbricks/types/surveys"; import { useState } from "react"; + +import { TSurveyOpenTextQuestion } from "@formbricks/types/surveys"; + import Headline from "./Headline"; import Subheader from "./Subheader"; diff --git a/apps/formbricks-com/components/dummyUI/PreviewSurvey.tsx b/apps/formbricks-com/components/dummyUI/PreviewSurvey.tsx index 9233deb860..523b029478 100644 --- a/apps/formbricks-com/components/dummyUI/PreviewSurvey.tsx +++ b/apps/formbricks-com/components/dummyUI/PreviewSurvey.tsx @@ -1,7 +1,9 @@ import { useState } from "react"; + +import { TSurvey, TSurveyQuestion } from "@formbricks/types/surveys"; + import Modal from "./Modal"; import QuestionConditional from "./QuestionConditional"; -import { TSurveyQuestion, TSurvey } from "@formbricks/types/surveys"; import ThankYouCard from "./ThankYouCard"; interface PreviewSurveyProps { diff --git a/apps/formbricks-com/components/dummyUI/QuestionConditional.tsx b/apps/formbricks-com/components/dummyUI/QuestionConditional.tsx index fedd8d5e50..4e02d5421c 100644 --- a/apps/formbricks-com/components/dummyUI/QuestionConditional.tsx +++ b/apps/formbricks-com/components/dummyUI/QuestionConditional.tsx @@ -1,9 +1,10 @@ import { TSurveyQuestion, TSurveyQuestionType } from "@formbricks/types/surveys"; -import OpenTextQuestion from "./OpenTextQuestion"; -import MultipleChoiceSingleQuestion from "./MultipleChoiceSingleQuestion"; -import MultipleChoiceMultiQuestion from "./MultipleChoiceMultiQuestion"; -import NPSQuestion from "./NPSQuestion"; + import CTAQuestion from "./CTAQuestion"; +import MultipleChoiceMultiQuestion from "./MultipleChoiceMultiQuestion"; +import MultipleChoiceSingleQuestion from "./MultipleChoiceSingleQuestion"; +import NPSQuestion from "./NPSQuestion"; +import OpenTextQuestion from "./OpenTextQuestion"; import RatingQuestion from "./RatingQuestion"; interface QuestionConditionalProps { diff --git a/apps/formbricks-com/components/dummyUI/RatingQuestion.tsx b/apps/formbricks-com/components/dummyUI/RatingQuestion.tsx index 51bcc64bbc..8c277ca1dc 100644 --- a/apps/formbricks-com/components/dummyUI/RatingQuestion.tsx +++ b/apps/formbricks-com/components/dummyUI/RatingQuestion.tsx @@ -1,6 +1,8 @@ -import { TSurveyRatingQuestion } from "@formbricks/types/surveys"; import { useState } from "react"; + import { cn } from "@formbricks/lib/cn"; +import { TSurveyRatingQuestion } from "@formbricks/types/surveys"; + import Headline from "./Headline"; import Subheader from "./Subheader"; diff --git a/apps/formbricks-com/components/dummyUI/TemplateList.tsx b/apps/formbricks-com/components/dummyUI/TemplateList.tsx index 01e6388066..829d21f87e 100644 --- a/apps/formbricks-com/components/dummyUI/TemplateList.tsx +++ b/apps/formbricks-com/components/dummyUI/TemplateList.tsx @@ -1,6 +1,8 @@ -import { TTemplate } from "@formbricks/types/templates"; import { useEffect, useState } from "react"; + import { cn } from "@formbricks/lib/cn"; +import { TTemplate } from "@formbricks/types/templates"; + import { templates } from "./templates"; type TemplateList = { diff --git a/apps/formbricks-com/components/dummyUI/templates.ts b/apps/formbricks-com/components/dummyUI/templates.ts index 702a4e49a0..bd69a85339 100644 --- a/apps/formbricks-com/components/dummyUI/templates.ts +++ b/apps/formbricks-com/components/dummyUI/templates.ts @@ -1,3 +1,7 @@ +import { createId } from "@paralleldrive/cuid2"; + +import { TSurveyQuestionType } from "@formbricks/types/surveys"; +import { TTemplate } from "@formbricks/types/templates"; import { AppPieChartIcon, ArrowRightCircleIcon, @@ -22,10 +26,6 @@ import { VideoTabletAdjustIcon, } from "@formbricks/ui/icons"; -import { TSurveyQuestionType } from "@formbricks/types/surveys"; -import { TTemplate } from "@formbricks/types/templates"; -import { createId } from "@paralleldrive/cuid2"; - const thankYouCardDefault = { enabled: true, headline: "Thank you!", diff --git a/apps/formbricks-com/components/home/Faq.tsx b/apps/formbricks-com/components/home/Faq.tsx index 21884fb8d8..2d17949383 100644 --- a/apps/formbricks-com/components/home/Faq.tsx +++ b/apps/formbricks-com/components/home/Faq.tsx @@ -1,6 +1,6 @@ +import HeadingCentered from "@/components/shared/HeadingCentered"; import { FAQPageJsonLd } from "next-seo"; -import HeadingCentered from "@/components/shared/HeadingCentered"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "@formbricks/ui/Accordion"; const FAQ_DATA = [ diff --git a/apps/formbricks-com/components/home/Features.tsx b/apps/formbricks-com/components/home/Features.tsx index 77f687f2c2..57826d440e 100644 --- a/apps/formbricks-com/components/home/Features.tsx +++ b/apps/formbricks-com/components/home/Features.tsx @@ -1,4 +1,5 @@ import { CodeFileIcon, EyeIcon, HandPuzzleIcon } from "@formbricks/ui/icons"; + import HeadingCentered from "../shared/HeadingCentered"; const features = [ diff --git a/apps/formbricks-com/components/home/Hero.tsx b/apps/formbricks-com/components/home/Hero.tsx index ec9b642aaa..3a0eb20017 100644 --- a/apps/formbricks-com/components/home/Hero.tsx +++ b/apps/formbricks-com/components/home/Hero.tsx @@ -6,11 +6,13 @@ import FlixbusLogo from "@/images/clients/flixbus-white.svg"; import NILogoDark from "@/images/clients/niLogoDark.svg"; import NILogoLight from "@/images/clients/niLogoWhite.svg"; import AnimationFallback from "@/public/animations/opensource-xm-platform-formbricks-fallback.png"; -import { Button } from "@formbricks/ui/Button"; import { ChevronRightIcon } from "@heroicons/react/24/outline"; import { usePlausible } from "next-plausible"; import Image from "next/image"; import { useRouter } from "next/router"; + +import { Button } from "@formbricks/ui/Button"; + import HeroAnimation from "./HeroAnimation"; export const Hero: React.FC = ({}) => { diff --git a/apps/formbricks-com/components/home/ScrollToTop.tsx b/apps/formbricks-com/components/home/ScrollToTop.tsx index 6c173e6456..7d34f4f479 100644 --- a/apps/formbricks-com/components/home/ScrollToTop.tsx +++ b/apps/formbricks-com/components/home/ScrollToTop.tsx @@ -1,8 +1,9 @@ -import { Button } from "@formbricks/ui/Button"; import { ArrowUpIcon } from "@heroicons/react/24/solid"; import throttle from "lodash/throttle"; import { useCallback, useEffect, useState } from "react"; +import { Button } from "@formbricks/ui/Button"; + const ScrollToTopButton = () => { const [visible, setVisible] = useState(false); diff --git a/apps/formbricks-com/components/home/SetupTabs.tsx b/apps/formbricks-com/components/home/SetupTabs.tsx index eb6f6402ba..6f567233ea 100644 --- a/apps/formbricks-com/components/home/SetupTabs.tsx +++ b/apps/formbricks-com/components/home/SetupTabs.tsx @@ -1,6 +1,7 @@ import clsx from "clsx"; import { useState } from "react"; import { IoLogoHtml5, IoLogoNpm } from "react-icons/io5"; + import CodeBlock from "../shared/CodeBlock"; interface SecondNavbarProps { diff --git a/apps/formbricks-com/components/home/Steps.tsx b/apps/formbricks-com/components/home/Steps.tsx index 7a86d4db06..abc1d18fd9 100644 --- a/apps/formbricks-com/components/home/Steps.tsx +++ b/apps/formbricks-com/components/home/Steps.tsx @@ -1,10 +1,12 @@ import DemoPreview from "@/components/dummyUI/DemoPreview"; import DashboardMockupDark from "@/images/dashboard-mockup-dark.png"; import DashboardMockup from "@/images/dashboard-mockup.png"; -import { Button } from "@formbricks/ui/Button"; import { CursorArrowRaysIcon } from "@heroicons/react/24/solid"; import Image from "next/image"; import { useState } from "react"; + +import { Button } from "@formbricks/ui/Button"; + import AddEventDummy from "../dummyUI/AddEventDummy"; import AddNoCodeEventModalDummy from "../dummyUI/AddNoCodeEventModalDummy"; import HeadingCentered from "../shared/HeadingCentered"; diff --git a/apps/formbricks-com/components/home/VideoWalkThrough.tsx b/apps/formbricks-com/components/home/VideoWalkThrough.tsx index 8dec387a29..4c40872d68 100644 --- a/apps/formbricks-com/components/home/VideoWalkThrough.tsx +++ b/apps/formbricks-com/components/home/VideoWalkThrough.tsx @@ -1,5 +1,5 @@ -import { ResponsiveVideo } from "@formbricks/ui/ResponsiveVideo"; import { Modal } from "@formbricks/ui/Modal"; +import { ResponsiveVideo } from "@formbricks/ui/ResponsiveVideo"; interface VideoWalkThroughProps { open: boolean; diff --git a/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx b/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx index e5246f9ac9..636d938871 100644 --- a/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx +++ b/apps/formbricks-com/components/shared/BestPracticeNavigation.tsx @@ -1,3 +1,6 @@ +import clsx from "clsx"; +import Link from "next/link"; + import { BaseballIcon, CancelSubscriptionIcon, @@ -8,8 +11,6 @@ import { OnboardingIcon, PMFIcon, } from "@formbricks/ui/icons"; -import clsx from "clsx"; -import Link from "next/link"; export default function BestPracticeNavigation() { const BestPractices = [ diff --git a/apps/formbricks-com/components/shared/BreakerCTA.tsx b/apps/formbricks-com/components/shared/BreakerCTA.tsx index 2aa5f2a4f9..7e58507137 100644 --- a/apps/formbricks-com/components/shared/BreakerCTA.tsx +++ b/apps/formbricks-com/components/shared/BreakerCTA.tsx @@ -1,8 +1,9 @@ -import { Button } from "@formbricks/ui/Button"; import clsx from "clsx"; import { usePlausible } from "next-plausible"; import { useRouter } from "next/router"; +import { Button } from "@formbricks/ui/Button"; + interface Props { teaser: string; headline: string; diff --git a/apps/formbricks-com/components/shared/CTA.tsx b/apps/formbricks-com/components/shared/CTA.tsx index 63a9e6aebd..2412cff9bc 100644 --- a/apps/formbricks-com/components/shared/CTA.tsx +++ b/apps/formbricks-com/components/shared/CTA.tsx @@ -1,5 +1,7 @@ -import { Button } from "@formbricks/ui/Button"; import { useRouter } from "next/router"; + +import { Button } from "@formbricks/ui/Button"; + import HeadingCentered from "./HeadingCentered"; export default function CTA() { diff --git a/apps/formbricks-com/components/shared/Callout.tsx b/apps/formbricks-com/components/shared/Callout.tsx index 99be002ec5..4996f840bc 100644 --- a/apps/formbricks-com/components/shared/Callout.tsx +++ b/apps/formbricks-com/components/shared/Callout.tsx @@ -1,5 +1,5 @@ -import clsx from "clsx"; import { Icon } from "@/components/shared/Icon"; +import clsx from "clsx"; const styles = { note: { diff --git a/apps/formbricks-com/components/shared/EarlyBirdDeal.tsx b/apps/formbricks-com/components/shared/EarlyBirdDeal.tsx index c67ac03d86..29f4d7a2db 100644 --- a/apps/formbricks-com/components/shared/EarlyBirdDeal.tsx +++ b/apps/formbricks-com/components/shared/EarlyBirdDeal.tsx @@ -1,8 +1,9 @@ import EarlyBird from "@/images/early bird deal for open source jotform alternative typeform and surveymonkey_v2.svg"; -import { Button } from "@formbricks/ui/Button"; import { usePlausible } from "next-plausible"; import Image from "next/image"; +import { Button } from "@formbricks/ui/Button"; + export default function EarlyBirdDeal() { const plausible = usePlausible(); return ( diff --git a/apps/formbricks-com/components/shared/FeatureHighlight.tsx b/apps/formbricks-com/components/shared/FeatureHighlight.tsx index 8a010f70e4..bec3f6e4a1 100644 --- a/apps/formbricks-com/components/shared/FeatureHighlight.tsx +++ b/apps/formbricks-com/components/shared/FeatureHighlight.tsx @@ -1,6 +1,7 @@ -import { Button } from "@formbricks/ui/Button"; -import { useRouter } from "next/router"; import clsx from "clsx"; +import { useRouter } from "next/router"; + +import { Button } from "@formbricks/ui/Button"; interface Props { featureTitle: string; diff --git a/apps/formbricks-com/components/shared/Footer.tsx b/apps/formbricks-com/components/shared/Footer.tsx index 1c8bace20b..54e237d12b 100644 --- a/apps/formbricks-com/components/shared/Footer.tsx +++ b/apps/formbricks-com/components/shared/Footer.tsx @@ -1,5 +1,6 @@ import Link from "next/link"; import { FaDiscord, FaGithub, FaXTwitter } from "react-icons/fa6"; + import { FooterLogo } from "./Logo"; const navigation = { diff --git a/apps/formbricks-com/components/shared/Header.tsx b/apps/formbricks-com/components/shared/Header.tsx index e6b7b2eeff..f932ba4eaa 100644 --- a/apps/formbricks-com/components/shared/Header.tsx +++ b/apps/formbricks-com/components/shared/Header.tsx @@ -1,5 +1,14 @@ import GitHubMarkWhite from "@/images/github-mark-white.svg"; import GitHubMarkDark from "@/images/github-mark.svg"; +import { Popover, Transition } from "@headlessui/react"; +import { Bars3Icon, ChevronDownIcon, ChevronRightIcon, XMarkIcon } from "@heroicons/react/24/outline"; +import clsx from "clsx"; +import { usePlausible } from "next-plausible"; +import Image from "next/image"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import { Fragment, useEffect, useState } from "react"; + import { Button } from "@formbricks/ui/Button"; import { BaseballIcon, @@ -11,14 +20,7 @@ import { OnboardingIcon, PMFIcon, } from "@formbricks/ui/icons"; -import { Popover, Transition } from "@headlessui/react"; -import { Bars3Icon, ChevronDownIcon, ChevronRightIcon, XMarkIcon } from "@heroicons/react/24/outline"; -import clsx from "clsx"; -import { usePlausible } from "next-plausible"; -import Image from "next/image"; -import Link from "next/link"; -import { useRouter } from "next/router"; -import { Fragment, useEffect, useState } from "react"; + import { FooterLogo } from "./Logo"; function GitHubIcon(props: any) { diff --git a/apps/formbricks-com/components/shared/HeroAnimation.tsx b/apps/formbricks-com/components/shared/HeroAnimation.tsx index 8556664838..bfbd3d6c9e 100644 --- a/apps/formbricks-com/components/shared/HeroAnimation.tsx +++ b/apps/formbricks-com/components/shared/HeroAnimation.tsx @@ -1,5 +1,5 @@ -import { useEffect, useRef, useState } from "react"; import type { LottiePlayer } from "lottie-web"; +import { useEffect, useRef, useState } from "react"; export default function HeroAnimation(props: any) { const ref = useRef(null); diff --git a/apps/formbricks-com/components/shared/LayoutMdx.tsx b/apps/formbricks-com/components/shared/LayoutMdx.tsx index c54d4b48f7..5502ab6422 100644 --- a/apps/formbricks-com/components/shared/LayoutMdx.tsx +++ b/apps/formbricks-com/components/shared/LayoutMdx.tsx @@ -1,5 +1,6 @@ import SlideInBanner from "@/components/shared/SlideInBanner"; import { useEffect } from "react"; + import Footer from "./Footer"; import Header from "./Header"; import MetaInformation from "./MetaInformation"; diff --git a/apps/formbricks-com/components/shared/Logo.tsx b/apps/formbricks-com/components/shared/Logo.tsx index 3f45009ea6..8c80f4bac5 100644 --- a/apps/formbricks-com/components/shared/Logo.tsx +++ b/apps/formbricks-com/components/shared/Logo.tsx @@ -1,9 +1,9 @@ -import Image from "next/image"; -import logomark from "@/images/logo/logomark.svg"; +import footerLogoDark from "@/images/logo/footerlogo-dark.svg"; +import footerLogo from "@/images/logo/footerlogo.svg"; import logo from "@/images/logo/logo.svg"; import logoDark from "@/images/logo/logo_dark.svg"; -import footerLogo from "@/images/logo/footerlogo.svg"; -import footerLogoDark from "@/images/logo/footerlogo-dark.svg"; +import logomark from "@/images/logo/logomark.svg"; +import Image from "next/image"; export function Logomark(props: any) { return Formbricks Open source Forms & Surveys Logomark; diff --git a/apps/formbricks-com/components/shared/MdxCTA.tsx b/apps/formbricks-com/components/shared/MdxCTA.tsx index 2ae624f825..fe52736a45 100644 --- a/apps/formbricks-com/components/shared/MdxCTA.tsx +++ b/apps/formbricks-com/components/shared/MdxCTA.tsx @@ -1,6 +1,7 @@ -import { Button } from "@formbricks/ui/Button"; import { useRouter } from "next/router"; +import { Button } from "@formbricks/ui/Button"; + export default function CTA() { const router = useRouter(); return ( diff --git a/apps/formbricks-com/components/shared/MdxTryItCTA.tsx b/apps/formbricks-com/components/shared/MdxTryItCTA.tsx index 5533a2adf2..abc39e5af9 100644 --- a/apps/formbricks-com/components/shared/MdxTryItCTA.tsx +++ b/apps/formbricks-com/components/shared/MdxTryItCTA.tsx @@ -1,7 +1,8 @@ -import { Button } from "@formbricks/ui/Button"; import { DocumentDuplicateIcon } from "@heroicons/react/24/outline"; import { useRouter } from "next/router"; +import { Button } from "@formbricks/ui/Button"; + export default function HeadingCentered() { const router = useRouter(); return ( diff --git a/apps/formbricks-com/components/shared/Navigation.tsx b/apps/formbricks-com/components/shared/Navigation.tsx index 0befd0b566..b47238a07e 100644 --- a/apps/formbricks-com/components/shared/Navigation.tsx +++ b/apps/formbricks-com/components/shared/Navigation.tsx @@ -1,6 +1,6 @@ +import clsx from "clsx"; import Link from "next/link"; import { useRouter } from "next/router"; -import clsx from "clsx"; interface NavigationProps { navigation: { diff --git a/apps/formbricks-com/components/shared/NewsletterSignup.tsx b/apps/formbricks-com/components/shared/NewsletterSignup.tsx index c1d7c3b861..8d0b90f517 100644 --- a/apps/formbricks-com/components/shared/NewsletterSignup.tsx +++ b/apps/formbricks-com/components/shared/NewsletterSignup.tsx @@ -1,7 +1,8 @@ import Friends from "@/images/newsletter-signup-gif.gif"; -import { Button } from "@formbricks/ui/Button"; import Image from "next/image"; +import { Button } from "@formbricks/ui/Button"; + export default function WaitlistForm() { return (

diff --git a/apps/formbricks-com/components/shared/PricingTable.tsx b/apps/formbricks-com/components/shared/PricingTable.tsx index cd1677690b..d66d525527 100644 --- a/apps/formbricks-com/components/shared/PricingTable.tsx +++ b/apps/formbricks-com/components/shared/PricingTable.tsx @@ -1,6 +1,7 @@ -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui/Tooltip"; import { CheckIcon, XMarkIcon } from "@heroicons/react/24/outline"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui/Tooltip"; + export const PricingTable = ({ leadRow, pricing, endRow }) => { return (
diff --git a/apps/formbricks-com/components/shared/Search.tsx b/apps/formbricks-com/components/shared/Search.tsx index 679185b068..b7c0f4e530 100644 --- a/apps/formbricks-com/components/shared/Search.tsx +++ b/apps/formbricks-com/components/shared/Search.tsx @@ -1,8 +1,8 @@ -import { useCallback, useEffect, useState } from "react"; -import { createPortal } from "react-dom"; +import { DocSearchModal, useDocSearchKeyboardEvents } from "@docsearch/react"; import Link from "next/link"; import Router from "next/router"; -import { DocSearchModal, useDocSearchKeyboardEvents } from "@docsearch/react"; +import { useCallback, useEffect, useState } from "react"; +import { createPortal } from "react-dom"; const docSearchConfig = { appId: process.env.NEXT_PUBLIC_DOCSEARCH_APP_ID || "", diff --git a/apps/formbricks-com/components/shared/SlideInBanner.tsx b/apps/formbricks-com/components/shared/SlideInBanner.tsx index 01101b3fde..2580ee423d 100644 --- a/apps/formbricks-com/components/shared/SlideInBanner.tsx +++ b/apps/formbricks-com/components/shared/SlideInBanner.tsx @@ -1,9 +1,10 @@ import LFGLuigi from "@/images/blog/lfg-luigi-200px.webp"; -import { Button } from "@formbricks/ui/Button"; import { XMarkIcon } from "@heroicons/react/24/solid"; import Image from "next/image"; import React, { useEffect, useState } from "react"; +import { Button } from "@formbricks/ui/Button"; + interface Props { delay?: number; scrollPercentage?: number; @@ -46,8 +47,8 @@ const SlideInBanner: React.FC = ({ delay = 5000, scrollPercentage = 10, U showBanner && !isExiting ? "visible translate-y-0 opacity-100" : isExiting - ? "visible translate-y-full opacity-0" - : "invisible translate-y-full opacity-0" + ? "visible translate-y-full opacity-0" + : "invisible translate-y-full opacity-0" }`}>
LFG Luigi diff --git a/apps/formbricks-com/components/shared/Slider.tsx b/apps/formbricks-com/components/shared/Slider.tsx index 07bce61744..4879826aba 100644 --- a/apps/formbricks-com/components/shared/Slider.tsx +++ b/apps/formbricks-com/components/shared/Slider.tsx @@ -1,7 +1,7 @@ "use client"; -import * as React from "react"; import * as SliderPrimitive from "@radix-ui/react-slider"; +import * as React from "react"; import { cn } from "@formbricks/lib/cn"; diff --git a/apps/formbricks-com/components/shared/TryItCTA.tsx b/apps/formbricks-com/components/shared/TryItCTA.tsx index 3669a55c7d..ab804538c7 100644 --- a/apps/formbricks-com/components/shared/TryItCTA.tsx +++ b/apps/formbricks-com/components/shared/TryItCTA.tsx @@ -1,7 +1,8 @@ -import { Button } from "@formbricks/ui/Button"; import { DocumentDuplicateIcon } from "@heroicons/react/24/outline"; import { useRouter } from "next/router"; +import { Button } from "@formbricks/ui/Button"; + export default function HeadingCentered() { const router = useRouter(); return ( diff --git a/apps/formbricks-com/components/shared/UseCaseCTA.tsx b/apps/formbricks-com/components/shared/UseCaseCTA.tsx index 9399a3b796..09c9d00280 100644 --- a/apps/formbricks-com/components/shared/UseCaseCTA.tsx +++ b/apps/formbricks-com/components/shared/UseCaseCTA.tsx @@ -1,6 +1,7 @@ -import { Button } from "@formbricks/ui/Button"; import { useRouter } from "next/router"; +import { Button } from "@formbricks/ui/Button"; + interface UseCaseCTAProps { href: string; } diff --git a/apps/formbricks-com/components/shared/WhyFormbricks.tsx b/apps/formbricks-com/components/shared/WhyFormbricks.tsx index 78d29c8d65..e99578f508 100644 --- a/apps/formbricks-com/components/shared/WhyFormbricks.tsx +++ b/apps/formbricks-com/components/shared/WhyFormbricks.tsx @@ -1,10 +1,10 @@ import { - UsersIcon, - CubeTransparentIcon, - UserGroupIcon, CommandLineIcon, - SwatchIcon, + CubeTransparentIcon, SquaresPlusIcon, + SwatchIcon, + UserGroupIcon, + UsersIcon, } from "@heroicons/react/24/outline"; const features = [ diff --git a/apps/formbricks-com/pages/_app.tsx b/apps/formbricks-com/pages/_app.tsx index 2c8715556b..c399d5687e 100644 --- a/apps/formbricks-com/pages/_app.tsx +++ b/apps/formbricks-com/pages/_app.tsx @@ -1,9 +1,9 @@ import PlausibleProvider from "next-plausible"; import type { AppProps } from "next/app"; -import "../styles/globals.css"; - import { Jost } from "next/font/google"; +import "../styles/globals.css"; + const jost = Jost({ weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"], style: ["normal", "italic"], diff --git a/apps/formbricks-com/pages/community/HeaderTribe.tsx b/apps/formbricks-com/pages/community/HeaderTribe.tsx index 445743c3a0..8845c1a500 100644 --- a/apps/formbricks-com/pages/community/HeaderTribe.tsx +++ b/apps/formbricks-com/pages/community/HeaderTribe.tsx @@ -1,11 +1,12 @@ import footerLogoDark from "@/images/logo/footerlogo-dark.svg"; -import { Button } from "@formbricks/ui/Button"; -import { Popover, PopoverContent, PopoverTrigger } from "@formbricks/ui/Popover"; import { Bars3Icon } from "@heroicons/react/24/solid"; import Image from "next/image"; import Link from "next/link"; import { useState } from "react"; +import { Button } from "@formbricks/ui/Button"; +import { Popover, PopoverContent, PopoverTrigger } from "@formbricks/ui/Popover"; + const navigation = [ { name: "Roadmap", href: "#roadmap" }, { name: "Levels", href: "#levels" }, diff --git a/apps/formbricks-com/pages/community/LevelCard.tsx b/apps/formbricks-com/pages/community/LevelCard.tsx index ea2c82075a..f624d2b923 100644 --- a/apps/formbricks-com/pages/community/LevelCard.tsx +++ b/apps/formbricks-com/pages/community/LevelCard.tsx @@ -1,7 +1,6 @@ import Image from "next/image"; -import React from "react"; - import { StaticImageData } from "next/image"; +import React from "react"; type Task = { title: string; diff --git a/apps/formbricks-com/pages/community/Roadmap.tsx b/apps/formbricks-com/pages/community/Roadmap.tsx index 90adb02629..420a7f7552 100644 --- a/apps/formbricks-com/pages/community/Roadmap.tsx +++ b/apps/formbricks-com/pages/community/Roadmap.tsx @@ -1,8 +1,9 @@ -import { Button } from "@formbricks/ui/Button"; import { ChevronDownIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; import { FaGithub } from "react-icons/fa6"; +import { Button } from "@formbricks/ui/Button"; + interface Event { name: string; link?: string; diff --git a/apps/formbricks-com/pages/community/index.tsx b/apps/formbricks-com/pages/community/index.tsx index 714e685492..dd8ba37b8c 100644 --- a/apps/formbricks-com/pages/community/index.tsx +++ b/apps/formbricks-com/pages/community/index.tsx @@ -7,11 +7,13 @@ import PrimeBadge from "@/images/formtribe/prime-batch.png"; import RookieBadge from "@/images/formtribe/rookie-batch.png"; import HallOfFame from "@/pages/community/HallOfFame"; import Roadmap from "@/pages/community/Roadmap"; -import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui/Tooltip"; import Image from "next/image"; import Link from "next/link"; import { useEffect } from "react"; + +import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@formbricks/ui/Tooltip"; + import ContributorGrid from "./ContributorGrid"; import LayoutTribe from "./LayoutTribe"; import LevelCard from "./LevelCard"; diff --git a/apps/formbricks-com/pages/concierge.tsx b/apps/formbricks-com/pages/concierge.tsx index c3a5a9c6cd..bdddb85bf0 100644 --- a/apps/formbricks-com/pages/concierge.tsx +++ b/apps/formbricks-com/pages/concierge.tsx @@ -1,9 +1,10 @@ import HeroTitle from "@/components/shared/HeroTitle"; import Layout from "@/components/shared/Layout"; import Cal, { getCalApi } from "@calcom/embed-react"; -import { Button } from "@formbricks/ui/Button"; import { useEffect } from "react"; +import { Button } from "@formbricks/ui/Button"; + const XMOffer = [ { step: "1", diff --git a/apps/formbricks-com/pages/demo/HeaderLight.tsx b/apps/formbricks-com/pages/demo/HeaderLight.tsx index 107bf9283e..f55a837c5a 100644 --- a/apps/formbricks-com/pages/demo/HeaderLight.tsx +++ b/apps/formbricks-com/pages/demo/HeaderLight.tsx @@ -1,8 +1,10 @@ -import { Button } from "@formbricks/ui/Button"; import { Popover } from "@headlessui/react"; import { usePlausible } from "next-plausible"; import Link from "next/link"; import { useRouter } from "next/router"; + +import { Button } from "@formbricks/ui/Button"; + import { FooterLogo } from "../../components/shared/Logo"; export default function HeaderLight() { diff --git a/apps/formbricks-com/pages/docs-feedback/index.tsx b/apps/formbricks-com/pages/docs-feedback/index.tsx index 113507f244..91ba2a6b40 100644 --- a/apps/formbricks-com/pages/docs-feedback/index.tsx +++ b/apps/formbricks-com/pages/docs-feedback/index.tsx @@ -1,8 +1,8 @@ -import Layout from "@/components/shared/Layout"; -import UseCaseHeader from "@/components/shared/UseCaseHeader"; -import UseCaseCTA from "@/components/shared/UseCaseCTA"; import DocsFeedback from "@/components/docs/DocsFeedback"; import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation"; +import Layout from "@/components/shared/Layout"; +import UseCaseCTA from "@/components/shared/UseCaseCTA"; +import UseCaseHeader from "@/components/shared/UseCaseHeader"; export default function DocsFeedbackPage() { return ( diff --git a/apps/formbricks-com/pages/feature-chaser/index.tsx b/apps/formbricks-com/pages/feature-chaser/index.tsx index 393989fc35..2f053acdd3 100644 --- a/apps/formbricks-com/pages/feature-chaser/index.tsx +++ b/apps/formbricks-com/pages/feature-chaser/index.tsx @@ -1,8 +1,8 @@ -import Layout from "@/components/shared/Layout"; -import UseCaseHeader from "@/components/shared/UseCaseHeader"; -import UseCaseCTA from "@/components/shared/UseCaseCTA"; import DemoPreview from "@/components/dummyUI/DemoPreview"; import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation"; +import Layout from "@/components/shared/Layout"; +import UseCaseCTA from "@/components/shared/UseCaseCTA"; +import UseCaseHeader from "@/components/shared/UseCaseHeader"; export default function FeatureChaserPage() { return ( diff --git a/apps/formbricks-com/pages/feedback-box/index.tsx b/apps/formbricks-com/pages/feedback-box/index.tsx index 8f6ca36186..3c51c455b4 100644 --- a/apps/formbricks-com/pages/feedback-box/index.tsx +++ b/apps/formbricks-com/pages/feedback-box/index.tsx @@ -1,8 +1,8 @@ -import Layout from "@/components/shared/Layout"; -import UseCaseHeader from "@/components/shared/UseCaseHeader"; -import UseCaseCTA from "@/components/shared/UseCaseCTA"; import DemoPreview from "@/components/dummyUI/DemoPreview"; import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation"; +import Layout from "@/components/shared/Layout"; +import UseCaseCTA from "@/components/shared/UseCaseCTA"; +import UseCaseHeader from "@/components/shared/UseCaseHeader"; export default function FeedbackBoxPage() { return ( diff --git a/apps/formbricks-com/pages/improve-trial-conversion/index.tsx b/apps/formbricks-com/pages/improve-trial-conversion/index.tsx index 3ab56f8e59..cfb9a6749a 100644 --- a/apps/formbricks-com/pages/improve-trial-conversion/index.tsx +++ b/apps/formbricks-com/pages/improve-trial-conversion/index.tsx @@ -1,8 +1,8 @@ -import Layout from "@/components/shared/Layout"; -import UseCaseHeader from "@/components/shared/UseCaseHeader"; -import UseCaseCTA from "@/components/shared/UseCaseCTA"; import DemoPreview from "@/components/dummyUI/DemoPreview"; import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation"; +import Layout from "@/components/shared/Layout"; +import UseCaseCTA from "@/components/shared/UseCaseCTA"; +import UseCaseHeader from "@/components/shared/UseCaseHeader"; export default function MissedTrialPagePage() { return ( diff --git a/apps/formbricks-com/pages/interview-prompt/index.tsx b/apps/formbricks-com/pages/interview-prompt/index.tsx index 4efe5f6e8d..417194ce68 100644 --- a/apps/formbricks-com/pages/interview-prompt/index.tsx +++ b/apps/formbricks-com/pages/interview-prompt/index.tsx @@ -1,8 +1,8 @@ -import Layout from "@/components/shared/Layout"; -import UseCaseHeader from "@/components/shared/UseCaseHeader"; -import UseCaseCTA from "@/components/shared/UseCaseCTA"; import DemoPreview from "@/components/dummyUI/DemoPreview"; import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation"; +import Layout from "@/components/shared/Layout"; +import UseCaseCTA from "@/components/shared/UseCaseCTA"; +import UseCaseHeader from "@/components/shared/UseCaseHeader"; export default function InterviewPromptPage() { return ( diff --git a/apps/formbricks-com/pages/learn-from-churn/index.tsx b/apps/formbricks-com/pages/learn-from-churn/index.tsx index cf1c6a69c0..cc8ca28199 100644 --- a/apps/formbricks-com/pages/learn-from-churn/index.tsx +++ b/apps/formbricks-com/pages/learn-from-churn/index.tsx @@ -1,8 +1,8 @@ -import Layout from "@/components/shared/Layout"; -import UseCaseHeader from "@/components/shared/UseCaseHeader"; -import UseCaseCTA from "@/components/shared/UseCaseCTA"; import DemoPreview from "@/components/dummyUI/DemoPreview"; import BestPracticeNavigation from "@/components/shared/BestPracticeNavigation"; +import Layout from "@/components/shared/Layout"; +import UseCaseCTA from "@/components/shared/UseCaseCTA"; +import UseCaseHeader from "@/components/shared/UseCaseHeader"; export default function LearnFromChurnPage() { return ( diff --git a/apps/formbricks-com/pages/oss-friends.tsx b/apps/formbricks-com/pages/oss-friends.tsx index 2da1b8621a..792a9d9d9c 100644 --- a/apps/formbricks-com/pages/oss-friends.tsx +++ b/apps/formbricks-com/pages/oss-friends.tsx @@ -1,5 +1,6 @@ import HeroTitle from "@/components/shared/HeroTitle"; import Layout from "@/components/shared/Layout"; + import { Button } from "@formbricks/ui/Button"; type OSSFriend = { diff --git a/apps/formbricks-com/pages/pricing.tsx b/apps/formbricks-com/pages/pricing.tsx index c0d6da9124..67e7f39b39 100644 --- a/apps/formbricks-com/pages/pricing.tsx +++ b/apps/formbricks-com/pages/pricing.tsx @@ -2,6 +2,7 @@ import HeroTitle from "@/components/shared/HeroTitle"; import Layout from "@/components/shared/Layout"; import { OpenSourceInfo } from "@/components/shared/OpenSourceInfo"; import { GetStartedWithPricing } from "@/components/shared/PricingGetStarted"; + import { PricingTable } from "../components/shared/PricingTable"; const inProductSurveys = { diff --git a/apps/formbricks-com/tailwind.config.ts b/apps/formbricks-com/tailwind.config.ts index 25d3466b7f..f2fc328b51 100644 --- a/apps/formbricks-com/tailwind.config.ts +++ b/apps/formbricks-com/tailwind.config.ts @@ -3,6 +3,7 @@ import forms from "@tailwindcss/forms"; import typographyPlugin from "@tailwindcss/typography"; import { type Config } from "tailwindcss"; import defaultTheme from "tailwindcss/defaultTheme"; + import typographyStyles from "./typography"; export default { diff --git a/apps/storybook/.storybook/main.ts b/apps/storybook/.storybook/main.ts index 0b2d4b73bc..b43427219c 100644 --- a/apps/storybook/.storybook/main.ts +++ b/apps/storybook/.storybook/main.ts @@ -1,6 +1,5 @@ import type { StorybookConfig } from "@storybook/react-vite"; - -import { join, dirname } from "path"; +import { dirname, join } from "path"; /** * This function is used to resolve the absolute path of a package. diff --git a/apps/storybook/.storybook/preview.ts b/apps/storybook/.storybook/preview.ts index 51e55951de..2367511d1e 100644 --- a/apps/storybook/.storybook/preview.ts +++ b/apps/storybook/.storybook/preview.ts @@ -1,5 +1,7 @@ import type { Preview } from "@storybook/react"; + import "../src/index.css"; + const preview: Preview = { parameters: { actions: { argTypesRegex: "^on[A-Z].*" }, diff --git a/apps/storybook/package.json b/apps/storybook/package.json index e62bf5f876..3b67b5dee6 100644 --- a/apps/storybook/package.json +++ b/apps/storybook/package.json @@ -14,24 +14,23 @@ "dependencies": { "@formbricks/ui": "workspace:*", "react": "^18.2.0", - "react-dom": "^18.2.0", - "storybook": "^7.6.3" + "react-dom": "^18.2.0" }, "devDependencies": { "@formbricks/tsconfig": "workspace:*", - "@storybook/addon-essentials": "^7.6.3", - "@storybook/addon-interactions": "^7.6.3", - "@storybook/addon-links": "^7.6.3", - "@storybook/addon-onboarding": "^1.0.9", - "@storybook/blocks": "^7.6.3", - "@storybook/react": "^7.6.3", - "@storybook/react-vite": "^7.6.3", + "@storybook/addon-essentials": "^7.6.4", + "@storybook/addon-interactions": "^7.6.4", + "@storybook/addon-links": "^7.6.4", + "@storybook/addon-onboarding": "^1.0.10", + "@storybook/blocks": "^7.6.4", + "@storybook/react": "^7.6.4", + "@storybook/react-vite": "^7.6.4", "@storybook/testing-library": "^0.2.2", - "@typescript-eslint/eslint-plugin": "^6.13.2", - "@typescript-eslint/parser": "^6.13.2", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", "@vitejs/plugin-react": "^4.2.1", - "esbuild": "^0.19.8", + "esbuild": "^0.19.9", "tsup": "^8.0.1", - "vite": "^5.0.6" + "vite": "^5.0.8" } } diff --git a/apps/storybook/src/App.tsx b/apps/storybook/src/App.tsx index c880ac7f3f..1c359f8f1a 100644 --- a/apps/storybook/src/App.tsx +++ b/apps/storybook/src/App.tsx @@ -1,6 +1,7 @@ import { useState } from "react"; import "./App.css"; + function App() { const [count, setCount] = useState(0); diff --git a/apps/storybook/src/main.tsx b/apps/storybook/src/main.tsx index 966f17a4b2..51f96d81a6 100644 --- a/apps/storybook/src/main.tsx +++ b/apps/storybook/src/main.tsx @@ -1,5 +1,6 @@ import React from "react"; import ReactDOM from "react-dom/client"; + import App from "./App.tsx"; import "./index.css"; diff --git a/apps/storybook/vite.config.ts b/apps/storybook/vite.config.ts index cd7f7a8af3..208b2d1c7f 100644 --- a/apps/storybook/vite.config.ts +++ b/apps/storybook/vite.config.ts @@ -1,5 +1,5 @@ -import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; // https://vitejs.dev/config/ export default defineConfig({ diff --git a/apps/web/app/(app)/billing-confirmation/components/ConfirmationPage.tsx b/apps/web/app/(app)/billing-confirmation/components/ConfirmationPage.tsx index 8306587d4a..20d4945275 100644 --- a/apps/web/app/(app)/billing-confirmation/components/ConfirmationPage.tsx +++ b/apps/web/app/(app)/billing-confirmation/components/ConfirmationPage.tsx @@ -1,9 +1,10 @@ "use client"; -import ContentWrapper from "@formbricks/ui/ContentWrapper"; +import { useEffect, useState } from "react"; + import { Button } from "@formbricks/ui/Button"; import { Confetti } from "@formbricks/ui/Confetti"; -import { useEffect, useState } from "react"; +import ContentWrapper from "@formbricks/ui/ContentWrapper"; interface ConfirmationPageProps { environmentId: string; diff --git a/apps/web/app/(app)/billing-confirmation/page.tsx b/apps/web/app/(app)/billing-confirmation/page.tsx index 4c36b6f1c1..6ba109cafd 100644 --- a/apps/web/app/(app)/billing-confirmation/page.tsx +++ b/apps/web/app/(app)/billing-confirmation/page.tsx @@ -1,7 +1,7 @@ -export const dynamic = "force-dynamic"; - import ConfirmationPage from "./components/ConfirmationPage"; +export const dynamic = "force-dynamic"; + export default function BillingConfirmation({ searchParams }) { const { environmentId } = searchParams; diff --git a/apps/web/app/(app)/components/FormbricksClient.tsx b/apps/web/app/(app)/components/FormbricksClient.tsx index 4b50e91034..69299b6703 100644 --- a/apps/web/app/(app)/components/FormbricksClient.tsx +++ b/apps/web/app/(app)/components/FormbricksClient.tsx @@ -1,10 +1,11 @@ "use client"; -import { env } from "@formbricks/lib/env.mjs"; import { formbricksEnabled } from "@/app/lib/formbricks"; -import formbricks from "@formbricks/js"; import { useEffect } from "react"; +import formbricks from "@formbricks/js"; +import { env } from "@formbricks/lib/env.mjs"; + type UsageAttributesUpdaterProps = { numSurveys: number; }; diff --git a/apps/web/app/(app)/components/PosthogIdentify.tsx b/apps/web/app/(app)/components/PosthogIdentify.tsx index 57444b192f..7e8186c12c 100644 --- a/apps/web/app/(app)/components/PosthogIdentify.tsx +++ b/apps/web/app/(app)/components/PosthogIdentify.tsx @@ -1,9 +1,11 @@ "use client"; -import { env } from "@formbricks/lib/env.mjs"; + import type { Session } from "next-auth"; import { usePostHog } from "posthog-js/react"; import { useEffect } from "react"; +import { env } from "@formbricks/lib/env.mjs"; + const posthogEnabled = env.NEXT_PUBLIC_POSTHOG_API_KEY && env.NEXT_PUBLIC_POSTHOG_API_HOST; export default function PosthogIdentify({ session }: { session: Session }) { diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/actions.ts b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/actions.ts index b8333e5140..dec7d8d87e 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/actions.ts +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/actions.ts @@ -1,20 +1,20 @@ "use server"; -import { authOptions } from "@formbricks/lib/authOptions"; -import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; -import { createActionClass, deleteActionClass, updateActionClass } from "@formbricks/lib/actionClass/service"; -import { canUserUpdateActionClass, verifyUserRoleAccess } from "@formbricks/lib/actionClass/auth"; import { getServerSession } from "next-auth"; -import { TActionClassInput } from "@formbricks/types/actionClasses"; import { - getActionCountInLast24Hours, getActionCountInLast7Days, + getActionCountInLast24Hours, getActionCountInLastHour, } from "@formbricks/lib/action/service"; +import { canUserUpdateActionClass, verifyUserRoleAccess } from "@formbricks/lib/actionClass/auth"; +import { createActionClass, deleteActionClass, updateActionClass } from "@formbricks/lib/actionClass/service"; +import { authOptions } from "@formbricks/lib/authOptions"; +import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; import { getSurveysByActionClassId } from "@formbricks/lib/survey/service"; -import { AuthorizationError } from "@formbricks/types/errors"; import { getTeamByEnvironmentId } from "@formbricks/lib/team/service"; +import { TActionClassInput } from "@formbricks/types/actionClasses"; +import { AuthorizationError } from "@formbricks/types/errors"; export async function deleteActionClassAction(environmentId, actionClassId: string) { const session = await getServerSession(authOptions); diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionActivityTab.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionActivityTab.tsx index 6f2e0cf364..7fe4a4e350 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionActivityTab.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionActivityTab.tsx @@ -1,19 +1,22 @@ "use client"; -import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; +import { CodeBracketIcon, CursorArrowRaysIcon, SparklesIcon } from "@heroicons/react/24/solid"; +import { useEffect, useState } from "react"; + +import { capitalizeFirstLetter } from "@formbricks/lib/strings"; +import { convertDateTimeStringShort } from "@formbricks/lib/time"; +import { TActionClass } from "@formbricks/types/actionClasses"; import { ErrorComponent } from "@formbricks/ui/ErrorComponent"; import { Label } from "@formbricks/ui/Label"; -import { convertDateTimeStringShort } from "@formbricks/lib/time"; -import { capitalizeFirstLetter } from "@formbricks/lib/strings"; -import { CodeBracketIcon, CursorArrowRaysIcon, SparklesIcon } from "@heroicons/react/24/solid"; -import { TActionClass } from "@formbricks/types/actionClasses"; -import { useEffect, useState } from "react"; +import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; + import { - getActionCountInLastHourAction, - getActionCountInLast24HoursAction, - getActionCountInLast7DaysAction, GetActiveInactiveSurveysAction, + getActionCountInLast7DaysAction, + getActionCountInLast24HoursAction, + getActionCountInLastHourAction, } from "../actions"; + interface ActivityTabProps { actionClass: TActionClass; environmentId: string; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionClassesTable.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionClassesTable.tsx index eb586e8a4c..1d9b23dd2c 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionClassesTable.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionClassesTable.tsx @@ -1,15 +1,17 @@ "use client"; -import { Button } from "@formbricks/ui/Button"; import { CursorArrowRaysIcon } from "@heroicons/react/24/solid"; import { useState } from "react"; -import AddNoCodeActionModal from "./AddActionModal"; -import ActionDetailModal from "./ActionDetailModal"; -import { TActionClass } from "@formbricks/types/actionClasses"; + import { useMembershipRole } from "@formbricks/lib/membership/hooks/useMembershipRole"; import { getAccessFlags } from "@formbricks/lib/membership/utils"; +import { TActionClass } from "@formbricks/types/actionClasses"; +import { Button } from "@formbricks/ui/Button"; import { LoadingWrapper } from "@formbricks/ui/LoadingWrapper"; +import ActionDetailModal from "./ActionDetailModal"; +import AddNoCodeActionModal from "./AddActionModal"; + export default function ActionClassesTable({ environmentId, actionClasses, diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionDetailModal.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionDetailModal.tsx index f41b86df9e..a4fb8a65ee 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionDetailModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionDetailModal.tsx @@ -1,9 +1,11 @@ -import ModalWithTabs from "@formbricks/ui/ModalWithTabs"; import { CodeBracketIcon, CursorArrowRaysIcon, SparklesIcon } from "@heroicons/react/24/solid"; -import EventActivityTab from "./ActionActivityTab"; -import ActionSettingsTab from "./ActionSettingsTab"; + import { TActionClass } from "@formbricks/types/actionClasses"; import { TMembershipRole } from "@formbricks/types/memberships"; +import ModalWithTabs from "@formbricks/ui/ModalWithTabs"; + +import EventActivityTab from "./ActionActivityTab"; +import ActionSettingsTab from "./ActionSettingsTab"; interface ActionDetailModalProps { environmentId: string; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionRowData.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionRowData.tsx index 8740001dce..3bb477d967 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionRowData.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionRowData.tsx @@ -1,6 +1,7 @@ +import { CodeBracketIcon, CursorArrowRaysIcon, SparklesIcon } from "@heroicons/react/24/solid"; + import { timeSinceConditionally } from "@formbricks/lib/time"; import { TActionClass } from "@formbricks/types/actionClasses"; -import { CodeBracketIcon, CursorArrowRaysIcon, SparklesIcon } from "@heroicons/react/24/solid"; export default function ActionClassDataRow({ actionClass }: { actionClass: TActionClass }) { return ( diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionSettingsTab.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionSettingsTab.tsx index 0db0b81c68..9923bbae39 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionSettingsTab.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionSettingsTab.tsx @@ -7,19 +7,21 @@ import { import { CssSelector } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/CssSelector"; import { InnerHtmlSelector } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/InnerHtmlSelector"; import { PageUrlSelector } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/PageUrlSelector"; -import { TActionClassInput, TActionClassNoCodeConfig, TNoCodeConfig } from "@formbricks/types/actionClasses"; -import { Button } from "@formbricks/ui/Button"; -import { DeleteDialog } from "@formbricks/ui/DeleteDialog"; -import { Input } from "@formbricks/ui/Input"; -import { Label } from "@formbricks/ui/Label"; import { TrashIcon } from "@heroicons/react/24/outline"; import { useRouter } from "next/navigation"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { toast } from "react-hot-toast"; -import { testURLmatch } from "../lib/testURLmatch"; -import { TMembershipRole } from "@formbricks/types/memberships"; + import { getAccessFlags } from "@formbricks/lib/membership/utils"; +import { TActionClassInput, TActionClassNoCodeConfig, TNoCodeConfig } from "@formbricks/types/actionClasses"; +import { TMembershipRole } from "@formbricks/types/memberships"; +import { Button } from "@formbricks/ui/Button"; +import { DeleteDialog } from "@formbricks/ui/DeleteDialog"; +import { Input } from "@formbricks/ui/Input"; +import { Label } from "@formbricks/ui/Label"; + +import { testURLmatch } from "../lib/testURLmatch"; interface ActionSettingsTabProps { environmentId: string; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/AddActionModal.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/AddActionModal.tsx index 8f0db6de35..6120d69b53 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/AddActionModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/AddActionModal.tsx @@ -4,6 +4,12 @@ import { createActionClassAction } from "@/app/(app)/environments/[environmentId import { CssSelector } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/CssSelector"; import { InnerHtmlSelector } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/InnerHtmlSelector"; import { PageUrlSelector } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/PageUrlSelector"; +import { CursorArrowRaysIcon } from "@heroicons/react/24/solid"; +import { Terminal } from "lucide-react"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import toast from "react-hot-toast"; + import { TActionClass, TActionClassInput, TActionClassNoCodeConfig } from "@formbricks/types/actionClasses"; import { Alert, AlertDescription, AlertTitle } from "@formbricks/ui/Alert"; import { Button } from "@formbricks/ui/Button"; @@ -11,11 +17,7 @@ import { Input } from "@formbricks/ui/Input"; import { Label } from "@formbricks/ui/Label"; import { Modal } from "@formbricks/ui/Modal"; import { TabBar } from "@formbricks/ui/TabBar"; -import { CursorArrowRaysIcon } from "@heroicons/react/24/solid"; -import { Terminal } from "lucide-react"; -import { useState } from "react"; -import { useForm } from "react-hook-form"; -import toast from "react-hot-toast"; + import { testURLmatch } from "../lib/testURLmatch"; interface AddNoCodeActionModalProps { diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/CssSelector.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/CssSelector.tsx index 8cca983b7a..af3f82c934 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/CssSelector.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/CssSelector.tsx @@ -1,6 +1,7 @@ +import { UseFormRegister } from "react-hook-form"; + import { AdvancedOptionToggle } from "@formbricks/ui/AdvancedOptionToggle"; import { Input } from "@formbricks/ui/Input"; -import { UseFormRegister } from "react-hook-form"; interface CssSelectorProps { isCssSelector: boolean; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/InnerHtmlSelector.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/InnerHtmlSelector.tsx index e8e6205f60..cb8f8ded2d 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/InnerHtmlSelector.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/InnerHtmlSelector.tsx @@ -1,6 +1,7 @@ +import { UseFormRegister } from "react-hook-form"; + import { AdvancedOptionToggle } from "@formbricks/ui/AdvancedOptionToggle"; import { Input } from "@formbricks/ui/Input"; -import { UseFormRegister } from "react-hook-form"; interface InnerHtmlSelectorProps { isInnerHtml: boolean; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/PageUrlSelector.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/PageUrlSelector.tsx index 491cbfd885..1918c4b9c3 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/PageUrlSelector.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/PageUrlSelector.tsx @@ -1,12 +1,12 @@ -import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; -import { Button } from "@formbricks/ui/Button"; -import { AdvancedOptionToggle } from "@formbricks/ui/AdvancedOptionToggle"; -import { Input } from "@formbricks/ui/Input"; - import { Label } from "@radix-ui/react-dropdown-menu"; import clsx from "clsx"; import { Control, Controller, UseFormRegister } from "react-hook-form"; +import { AdvancedOptionToggle } from "@formbricks/ui/AdvancedOptionToggle"; +import { Button } from "@formbricks/ui/Button"; +import { Input } from "@formbricks/ui/Input"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; + interface PageUrlSelectorProps { isPageUrl: boolean; setIsPageUrl: (value: boolean) => void; @@ -91,10 +91,10 @@ export const PageUrlSelector = ({ isMatch === "yes" ? "border-green-500 bg-green-50" : isMatch === "no" - ? "border-red-200 bg-red-50" - : isMatch === "default" - ? "border-slate-200" - : "bg-white" + ? "border-red-200 bg-red-50" + : isMatch === "default" + ? "border-slate-200" + : "bg-white" )} placeholder="e.g. https://app.com/dashboard" /> diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/layout.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/layout.tsx index b23d40d297..754e715cff 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/layout.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/layout.tsx @@ -1,4 +1,5 @@ import ActionsAttributesTabs from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/ActionsAttributesTabs"; + import ContentWrapper from "@formbricks/ui/ContentWrapper"; export default function ActionsAndAttributesLayout({ params, children }) { diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/loading.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/loading.tsx index dabe1549c5..e4a8fbd549 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/loading.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/loading.tsx @@ -1,6 +1,7 @@ -import { Button } from "@formbricks/ui/Button"; import { CursorArrowRaysIcon } from "@heroicons/react/24/solid"; +import { Button } from "@formbricks/ui/Button"; + export default function Loading() { return ( <> diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/page.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/page.tsx index 325e0fbf92..67d59b8c66 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/page.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/page.tsx @@ -1,12 +1,10 @@ -export const revalidate = REVALIDATION_INTERVAL; - import ActionClassesTable from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionClassesTable"; import ActionClassDataRow from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionRowData"; import ActionTableHeading from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/actions/components/ActionTableHeading"; -import { REVALIDATION_INTERVAL } from "@formbricks/lib/constants"; -import { getActionClasses } from "@formbricks/lib/actionClass/service"; import { Metadata } from "next"; +import { getActionClasses } from "@formbricks/lib/actionClass/service"; + export const metadata: Metadata = { title: "Actions", }; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/actions.ts b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/actions.ts index c74baab22d..20f26af5fb 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/actions.ts +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/actions.ts @@ -1,10 +1,11 @@ "use server"; import { getServerSession } from "next-auth"; -import { AuthorizationError } from "@formbricks/types/errors"; + +import { canUserAccessAttributeClass } from "@formbricks/lib/attributeClass/auth"; import { authOptions } from "@formbricks/lib/authOptions"; import { getSurveysByAttributeClassId } from "@formbricks/lib/survey/service"; -import { canUserAccessAttributeClass } from "@formbricks/lib/attributeClass/auth"; +import { AuthorizationError } from "@formbricks/types/errors"; export const GetActiveInactiveSurveysAction = async ( attributeClassId: string diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeActivityTab.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeActivityTab.tsx index fc038943ae..f4dd773a13 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeActivityTab.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeActivityTab.tsx @@ -1,14 +1,15 @@ "use client"; import { GetActiveInactiveSurveysAction } from "@/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/actions"; -import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; +import { TagIcon } from "@heroicons/react/24/solid"; +import { useEffect, useState } from "react"; + import { capitalizeFirstLetter } from "@formbricks/lib/strings"; import { convertDateTimeStringShort } from "@formbricks/lib/time"; import { TAttributeClass } from "@formbricks/types/attributeClasses"; import { ErrorComponent } from "@formbricks/ui/ErrorComponent"; import { Label } from "@formbricks/ui/Label"; -import { TagIcon } from "@heroicons/react/24/solid"; -import { useEffect, useState } from "react"; +import LoadingSpinner from "@formbricks/ui/LoadingSpinner"; interface EventActivityTabProps { attributeClass: TAttributeClass; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeClassesTable.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeClassesTable.tsx index d09f98b4c0..e549e605e5 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeClassesTable.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeClassesTable.tsx @@ -1,11 +1,13 @@ "use client"; -import { Switch } from "@formbricks/ui/Switch"; import { useState } from "react"; +import { useMemo } from "react"; + +import { TAttributeClass } from "@formbricks/types/attributeClasses"; +import { Switch } from "@formbricks/ui/Switch"; + import AttributeDetailModal from "./AttributeDetailModal"; import UploadAttributesModal from "./UploadAttributesModal"; -import { useMemo } from "react"; -import { TAttributeClass } from "@formbricks/types/attributeClasses"; export default function AttributeClassesTable({ attributeClasses, diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeDetailModal.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeDetailModal.tsx index cda82863fa..b105d3c62c 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeDetailModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeDetailModal.tsx @@ -1,8 +1,10 @@ -import ModalWithTabs from "@formbricks/ui/ModalWithTabs"; import { TagIcon } from "@heroicons/react/24/solid"; + +import { TAttributeClass } from "@formbricks/types/attributeClasses"; +import ModalWithTabs from "@formbricks/ui/ModalWithTabs"; + import AttributeActivityTab from "./AttributeActivityTab"; import AttributeSettingsTab from "./AttributeSettingsTab"; -import { TAttributeClass } from "@formbricks/types/attributeClasses"; interface AttributeDetailModalProps { open: boolean; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeRowData.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeRowData.tsx index e7e8de8200..57655f311e 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeRowData.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeRowData.tsx @@ -1,6 +1,7 @@ +import { TagIcon } from "@heroicons/react/24/solid"; + import { timeSinceConditionally } from "@formbricks/lib/time"; import { Badge } from "@formbricks/ui/Badge"; -import { TagIcon } from "@heroicons/react/24/solid"; export default function AttributeClassDataRow({ attributeClass }) { return ( diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeSettingsTab.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeSettingsTab.tsx index faf6917e19..0fe7f45d02 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeSettingsTab.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/AttributeSettingsTab.tsx @@ -1,14 +1,15 @@ "use client"; +import { ArchiveBoxArrowDownIcon, ArchiveBoxXMarkIcon } from "@heroicons/react/24/solid"; +import type { AttributeClass } from "@prisma/client"; +import { useRouter } from "next/navigation"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; + +import { updateAttributeClass } from "@formbricks/lib/attributeClass/service"; import { Button } from "@formbricks/ui/Button"; import { Input } from "@formbricks/ui/Input"; import { Label } from "@formbricks/ui/Label"; -import type { AttributeClass } from "@prisma/client"; -import { useForm } from "react-hook-form"; -import { ArchiveBoxArrowDownIcon, ArchiveBoxXMarkIcon } from "@heroicons/react/24/solid"; -import { useRouter } from "next/navigation"; -import { updateAttributeClass } from "@formbricks/lib/attributeClass/service"; -import { useState } from "react"; interface AttributeSettingsTabProps { attributeClass: AttributeClass; diff --git a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/HowToAddAttributesButton.tsx b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/HowToAddAttributesButton.tsx index 7f66b12eeb..fe2ae09460 100644 --- a/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/HowToAddAttributesButton.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/(actionsAndAttributes)/attributes/components/HowToAddAttributesButton.tsx @@ -1,6 +1,7 @@ -import { Button } from "@formbricks/ui/Button"; import { QuestionMarkCircleIcon } from "@heroicons/react/24/solid"; +import { Button } from "@formbricks/ui/Button"; + export default function HowToAddAttributesButton() { return (