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 (