Compare commits

...

8 Commits

Author SHA1 Message Date
Piyush Gupta
a9411c8ced fixing tailwind 2025-04-14 16:22:35 +05:30
Piyush Gupta
0440aeb143 Merge branch 'main' of https://github.com/formbricks/formbricks into chore/upgrade-web-tailwind4 2025-04-14 13:38:44 +05:30
Piyush Gupta
e982fc5c3e Merge branch 'main' of https://github.com/formbricks/formbricks into chore/upgrade-web-tailwind4 2025-04-11 14:35:34 +05:30
Piyush Gupta
041dce2ec5 Merge branch 'main' of https://github.com/formbricks/formbricks into chore/upgrade-web-tailwind4 2025-04-09 11:29:06 +05:30
Piyush Gupta
d6e30855f6 fix: bg-opacity 2025-04-08 12:24:00 +05:30
Piyush Gupta
f20b412a95 fix: build 2025-04-08 11:07:25 +05:30
Piyush Gupta
99b0713800 Merge branch 'main' of https://github.com/formbricks/formbricks into chore/upgrade-web-tailwind4 2025-04-08 11:01:21 +05:30
Matthias Nannt
a2ffea28a1 chore: upgrade web app to tailwind v4 2025-04-07 11:22:29 +09:00
215 changed files with 890 additions and 957 deletions

View File

@@ -101,17 +101,17 @@ export const OnboardingSetupInstructions = ({
<div> <div>
{activeTab === "npm" ? ( {activeTab === "npm" ? (
<div className="prose prose-slate w-full"> <div className="prose prose-slate w-full">
<CodeBlock customEditorClass="!bg-white border border-slate-200" language="sh"> <CodeBlock customEditorClass="bg-white! border border-slate-200" language="sh">
npm install @formbricks/js npm install @formbricks/js
</CodeBlock> </CodeBlock>
<p>{t("common.or")}</p> <p>{t("common.or")}</p>
<CodeBlock customEditorClass="!bg-white border border-slate-200" language="sh"> <CodeBlock customEditorClass="bg-white! border border-slate-200" language="sh">
yarn add @formbricks/js yarn add @formbricks/js
</CodeBlock> </CodeBlock>
<p className="text-sm text-slate-700"> <p className="text-sm text-slate-700">
{t("environments.connect.import_formbricks_and_initialize_the_widget_in_your_component")} {t("environments.connect.import_formbricks_and_initialize_the_widget_in_your_component")}
</p> </p>
<CodeBlock customEditorClass="!bg-white border border-slate-200" language="js"> <CodeBlock customEditorClass="bg-white! border border-slate-200" language="js">
{channel === "app" ? npmSnippetForAppSurveys : npmSnippetForWebsiteSurveys} {channel === "app" ? npmSnippetForAppSurveys : npmSnippetForWebsiteSurveys}
</CodeBlock> </CodeBlock>
<Button id="onboarding-inapp-connect-read-npm-docs" className="mt-3" variant="secondary" asChild> <Button id="onboarding-inapp-connect-read-npm-docs" className="mt-3" variant="secondary" asChild>
@@ -125,11 +125,11 @@ export const OnboardingSetupInstructions = ({
</div> </div>
) : activeTab === "html" ? ( ) : activeTab === "html" ? (
<div className="prose prose-slate"> <div className="prose prose-slate">
<p className="-mb-1 mt-6 text-sm text-slate-700"> <p className="mt-6 -mb-1 text-sm text-slate-700">
{t("environments.connect.insert_this_code_into_the_head_tag_of_your_website")} {t("environments.connect.insert_this_code_into_the_head_tag_of_your_website")}
</p> </p>
<div> <div>
<CodeBlock customEditorClass="!bg-white border border-slate-200" language="js"> <CodeBlock customEditorClass="bg-white! border border-slate-200" language="js">
{channel === "app" ? htmlSnippetForAppSurveys : htmlSnippetForWebsiteSurveys} {channel === "app" ? htmlSnippetForAppSurveys : htmlSnippetForWebsiteSurveys}
</CodeBlock> </CodeBlock>
</div> </div>

View File

@@ -44,7 +44,7 @@ const Page = async (props: ConnectPageProps) => {
channel={channel} channel={channel}
/> />
<Button <Button
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700" className="absolute top-5 right-5 mt-0! text-slate-500 hover:text-slate-700"
variant="ghost" variant="ghost"
asChild> asChild>
<Link href={`/environments/${environment.id}`}> <Link href={`/environments/${environment.id}`}>

View File

@@ -49,7 +49,7 @@ const Page = async (props: XMTemplatePageProps) => {
<XMTemplateList project={project} user={user} environmentId={environment.id} /> <XMTemplateList project={project} user={user} environmentId={environment.id} />
{projects.length >= 2 && ( {projects.length >= 2 && (
<Button <Button
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700" className="absolute top-5 right-5 mt-0! text-slate-500 hover:text-slate-700"
variant="ghost" variant="ghost"
asChild> asChild>
<Link href={`/environments/${environment.id}/surveys`}> <Link href={`/environments/${environment.id}/surveys`}>

View File

@@ -80,7 +80,7 @@ export const LandingSidebar = ({
<DropdownMenuTrigger <DropdownMenuTrigger
asChild asChild
id="userDropdownTrigger" id="userDropdownTrigger"
className="w-full rounded-br-xl border-t py-4 pl-4 transition-colors duration-200 hover:bg-slate-50 focus:outline-none"> className="w-full rounded-br-xl border-t py-4 pl-4 transition-colors duration-200 hover:bg-slate-50 focus:outline-hidden">
<div tabIndex={0} className={cn("flex cursor-pointer flex-row items-center space-x-3")}> <div tabIndex={0} className={cn("flex cursor-pointer flex-row items-center space-x-3")}>
<ProfileAvatar userId={user.id} imageUrl={user.imageUrl} /> <ProfileAvatar userId={user.id} imageUrl={user.imageUrl} />
<> <>

View File

@@ -50,7 +50,7 @@ const Page = async (props: ChannelPageProps) => {
<OnboardingOptionsContainer options={channelOptions} /> <OnboardingOptionsContainer options={channelOptions} />
{projects.length >= 1 && ( {projects.length >= 1 && (
<Button <Button
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700" className="absolute top-5 right-5 mt-0! text-slate-500 hover:text-slate-700"
variant="ghost" variant="ghost"
asChild> asChild>
<Link href={"/"}> <Link href={"/"}>

View File

@@ -47,7 +47,7 @@ const Page = async (props: ModePageProps) => {
<OnboardingOptionsContainer options={channelOptions} /> <OnboardingOptionsContainer options={channelOptions} />
{projects.length >= 1 && ( {projects.length >= 1 && (
<Button <Button
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700" className="absolute top-5 right-5 mt-0! text-slate-500 hover:text-slate-700"
variant="ghost" variant="ghost"
asChild> asChild>
<Link href={"/"}> <Link href={"/"}>

View File

@@ -218,14 +218,14 @@ export const ProjectSettings = ({
</FormProvider> </FormProvider>
</div> </div>
<div className="relative flex h-[30rem] w-1/2 flex-col items-center justify-center space-y-2 rounded-lg border bg-slate-200 shadow"> <div className="relative flex h-[30rem] w-1/2 flex-col items-center justify-center space-y-2 rounded-lg border bg-slate-200 shadow-sm">
{logoUrl && ( {logoUrl && (
<Image <Image
src={logoUrl} src={logoUrl}
alt="Logo" alt="Logo"
width={256} width={256}
height={56} height={56}
className="absolute left-2 top-2 -mb-6 h-20 w-auto max-w-64 rounded-lg border object-contain p-1" className="absolute top-2 left-2 -mb-6 h-20 w-auto max-w-64 rounded-lg border object-contain p-1"
/> />
)} )}
<p className="text-sm text-slate-400">{t("common.preview")}</p> <p className="text-sm text-slate-400">{t("common.preview")}</p>

View File

@@ -65,7 +65,7 @@ const Page = async (props: ProjectSettingsPageProps) => {
/> />
{projects.length >= 1 && ( {projects.length >= 1 && (
<Button <Button
className="absolute right-5 top-5 !mt-0 text-slate-500 hover:text-slate-700" className="absolute top-5 right-5 mt-0! text-slate-500 hover:text-slate-700"
variant="ghost" variant="ghost"
asChild> asChild>
<Link href={"/"}> <Link href={"/"}>

View File

@@ -36,7 +36,7 @@ export const ActionClassesTable = ({
return ( return (
<> <>
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
{TableHeading} {TableHeading}
<div id="actionClassesWrapper" className="flex flex-col"> <div id="actionClassesWrapper" className="flex flex-col">
{actionClasses.length > 0 ? ( {actionClasses.length > 0 ? (

View File

@@ -14,16 +14,14 @@ export const ActionClassDataRow = ({
<div className="m-2 grid h-16 grid-cols-6 content-center rounded-lg transition-colors ease-in-out hover:bg-slate-100"> <div className="m-2 grid h-16 grid-cols-6 content-center rounded-lg transition-colors ease-in-out hover:bg-slate-100">
<div className="col-span-4 flex items-center pl-6 text-sm"> <div className="col-span-4 flex items-center pl-6 text-sm">
<div className="flex items-center"> <div className="flex items-center">
<div className="h-5 w-5 flex-shrink-0 text-slate-500"> <div className="h-5 w-5 shrink-0 text-slate-500">{ACTION_TYPE_ICON_LOOKUP[actionClass.type]}</div>
{ACTION_TYPE_ICON_LOOKUP[actionClass.type]}
</div>
<div className="ml-4 text-left"> <div className="ml-4 text-left">
<div className="font-medium text-slate-900">{actionClass.name}</div> <div className="font-medium text-slate-900">{actionClass.name}</div>
<div className="text-xs text-slate-400">{actionClass.description}</div> <div className="text-xs text-slate-400">{actionClass.description}</div>
</div> </div>
</div> </div>
</div> </div>
<div className="col-span-2 my-auto whitespace-nowrap text-center text-sm text-slate-500"> <div className="col-span-2 my-auto text-center text-sm whitespace-nowrap text-slate-500">
{timeSince(actionClass.createdAt.toString(), locale)} {timeSince(actionClass.createdAt.toString(), locale)}
</div> </div>
<div className="text-center"></div> <div className="text-center"></div>

View File

@@ -10,7 +10,7 @@ const Loading = () => {
<> <>
<PageContentWrapper> <PageContentWrapper>
<PageHeader pageTitle={t("common.actions")} /> <PageHeader pageTitle={t("common.actions")} />
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<div className="grid h-12 grid-cols-6 content-center border-b border-slate-200 text-left text-sm font-semibold text-slate-900"> <div className="grid h-12 grid-cols-6 content-center border-b border-slate-200 text-left text-sm font-semibold text-slate-900">
<span className="sr-only">{t("common.edit")}</span> <span className="sr-only">{t("common.edit")}</span>
<div className="col-span-4 pl-6">{t("environments.actions.user_actions")}</div> <div className="col-span-4 pl-6">{t("environments.actions.user_actions")}</div>
@@ -22,7 +22,7 @@ const Loading = () => {
className="m-2 grid h-16 grid-cols-6 content-center rounded-lg transition-colors ease-in-out hover:bg-slate-100"> className="m-2 grid h-16 grid-cols-6 content-center rounded-lg transition-colors ease-in-out hover:bg-slate-100">
<div className="col-span-4 flex items-center pl-6 text-sm"> <div className="col-span-4 flex items-center pl-6 text-sm">
<div className="flex items-center"> <div className="flex items-center">
<div className="h-6 w-6 flex-shrink-0 animate-pulse rounded-full bg-slate-200 text-slate-500" /> <div className="h-6 w-6 shrink-0 animate-pulse rounded-full bg-slate-200 text-slate-500" />
<div className="ml-4 text-left"> <div className="ml-4 text-left">
<div className="font-medium text-slate-900"> <div className="font-medium text-slate-900">
<div className="mt-0 h-4 w-48 animate-pulse rounded-full bg-slate-200"></div> <div className="mt-0 h-4 w-48 animate-pulse rounded-full bg-slate-200"></div>
@@ -33,7 +33,7 @@ const Loading = () => {
</div> </div>
</div> </div>
</div> </div>
<div className="col-span-2 my-auto flex justify-center whitespace-nowrap text-center text-sm text-slate-500"> <div className="col-span-2 my-auto flex justify-center text-center text-sm whitespace-nowrap text-slate-500">
<div className="h-4 w-28 animate-pulse rounded-full bg-slate-200"></div> <div className="h-4 w-28 animate-pulse rounded-full bg-slate-200"></div>
</div> </div>
</div> </div>

View File

@@ -265,7 +265,7 @@ export const MainNavigation = ({
size="icon" size="icon"
onClick={toggleSidebar} onClick={toggleSidebar}
className={cn( className={cn(
"rounded-xl bg-slate-50 p-1 text-slate-600 transition-all hover:bg-slate-100 focus:ring-0 focus:ring-transparent focus:outline-none" "rounded-xl bg-slate-50 p-1 text-slate-600 transition-all hover:bg-slate-100 focus:ring-0 focus:ring-transparent focus:outline-hidden"
)}> )}>
{isCollapsed ? ( {isCollapsed ? (
<PanelLeftOpenIcon strokeWidth={1.5} /> <PanelLeftOpenIcon strokeWidth={1.5} />
@@ -332,7 +332,7 @@ export const MainNavigation = ({
<DropdownMenuTrigger <DropdownMenuTrigger
asChild asChild
id="userDropdownTrigger" id="userDropdownTrigger"
className="w-full rounded-br-xl border-t py-4 transition-colors duration-200 hover:bg-slate-50 focus:outline-none"> className="w-full rounded-br-xl border-t py-4 transition-colors duration-200 hover:bg-slate-50 focus:outline-hidden">
<div <div
tabIndex={0} tabIndex={0}
className={cn( className={cn(

View File

@@ -18,7 +18,7 @@ export const TopControlBar = ({
}: SideBarProps) => { }: SideBarProps) => {
return ( return (
<div className="fixed inset-0 top-0 z-30 flex h-14 w-full items-center justify-end bg-slate-50 px-6"> <div className="fixed inset-0 top-0 z-30 flex h-14 w-full items-center justify-end bg-slate-50 px-6">
<div className="shadow-xs z-10"> <div className="z-10 shadow-2xs">
<div className="flex w-fit items-center space-x-2 py-2"> <div className="flex w-fit items-center space-x-2 py-2">
<TopControlButtons <TopControlButtons
environment={environment} environment={environment}

View File

@@ -56,7 +56,7 @@ export const EditAlerts = ({
<TooltipTrigger> <TooltipTrigger>
<div className="col-span-1 flex cursor-default items-center justify-center space-x-2"> <div className="col-span-1 flex cursor-default items-center justify-center space-x-2">
<span>{t("environments.settings.notifications.every_response")}</span> <span>{t("environments.settings.notifications.every_response")}</span>
<HelpCircleIcon className="h-4 w-4 flex-shrink-0 text-slate-500" /> <HelpCircleIcon className="h-4 w-4 shrink-0 text-slate-500" />
</div> </div>
</TooltipTrigger> </TooltipTrigger>
<TooltipContent> <TooltipContent>
@@ -99,7 +99,7 @@ export const EditAlerts = ({
))} ))}
</div> </div>
) : ( ) : (
<div className="m-2 flex h-16 items-center justify-center rounded bg-slate-50 text-sm text-slate-500"> <div className="m-2 flex h-16 items-center justify-center rounded-sm bg-slate-50 text-sm text-slate-500">
<p>{t("common.no_surveys_found")}</p> <p>{t("common.no_surveys_found")}</p>
</div> </div>
)} )}

View File

@@ -11,7 +11,7 @@ export const IntegrationsTip = ({ environmentId }: IntegrationsTipProps) => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div> <div>
<div className="flex max-w-4xl items-center space-y-3 rounded-lg border border-blue-100 bg-blue-50 p-4 text-sm text-blue-900 shadow-sm md:space-y-0 md:text-base"> <div className="flex max-w-4xl items-center space-y-3 rounded-lg border border-blue-100 bg-blue-50 p-4 text-sm text-blue-900 shadow-xs md:space-y-0 md:text-base">
<SlackIcon className="mr-3 h-4 w-4 text-blue-400" /> <SlackIcon className="mr-3 h-4 w-4 text-blue-400" />
<p className="text-sm"> <p className="text-sm">
{t("environments.settings.notifications.need_slack_or_discord_notifications")}? {t("environments.settings.notifications.need_slack_or_discord_notifications")}?

View File

@@ -105,7 +105,7 @@ export const EditProfileAvatarForm = ({ session, environmentId, imageUrl }: Edit
<div> <div>
<div className="relative h-10 w-10 overflow-hidden rounded-full"> <div className="relative h-10 w-10 overflow-hidden rounded-full">
{isLoading && ( {isLoading && (
<div className="absolute inset-0 flex items-center justify-center bg-black bg-opacity-30"> <div className="absolute inset-0 flex items-center justify-center bg-black/30">
<svg className="h-7 w-7 animate-spin text-slate-200" viewBox="0 0 24 24"> <svg className="h-7 w-7 animate-spin text-slate-200" viewBox="0 0 24 24">
<circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" /> <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4" />
<path <path

View File

@@ -97,7 +97,7 @@ const Page = async (props) => {
</PageHeader> </PageHeader>
{isEnterpriseEdition ? ( {isEnterpriseEdition ? (
<div> <div>
<div className="mt-8 max-w-4xl rounded-lg border border-slate-300 bg-slate-100 shadow-sm"> <div className="mt-8 max-w-4xl rounded-lg border border-slate-300 bg-slate-100 shadow-xs">
<div className="space-y-4 p-8"> <div className="space-y-4 p-8">
<div className="flex items-center gap-x-2"> <div className="flex items-center gap-x-2">
<div className="rounded-full border border-green-300 bg-green-100 p-0.5 dark:bg-green-800"> <div className="rounded-full border border-green-300 bg-green-100 p-0.5 dark:bg-green-800">
@@ -123,7 +123,7 @@ const Page = async (props) => {
<div className="relative isolate mt-8 overflow-hidden rounded-lg bg-slate-900 px-3 pt-8 shadow-2xl sm:px-8 md:pt-12 lg:flex lg:gap-x-10 lg:px-12 lg:pt-0"> <div className="relative isolate mt-8 overflow-hidden rounded-lg bg-slate-900 px-3 pt-8 shadow-2xl sm:px-8 md:pt-12 lg:flex lg:gap-x-10 lg:px-12 lg:pt-0">
<svg <svg
viewBox="0 0 1024 1024" viewBox="0 0 1024 1024"
className="absolute left-1/2 top-1/2 -z-10 h-[64rem] w-[64rem] -translate-y-1/2 [mask-image:radial-gradient(closest-side,white,transparent)] sm:left-full sm:-ml-80 lg:left-1/2 lg:ml-0 lg:-translate-x-1/2 lg:translate-y-0" className="absolute top-1/2 left-1/2 -z-10 h-[64rem] w-[64rem] -translate-y-1/2 [mask-image:radial-gradient(closest-side,white,transparent)] sm:left-full sm:-ml-80 lg:left-1/2 lg:ml-0 lg:-translate-x-1/2 lg:translate-y-0"
aria-hidden="true"> aria-hidden="true">
<circle <circle
cx={512} cx={512}
@@ -152,7 +152,7 @@ const Page = async (props) => {
</p> </p>
</div> </div>
</div> </div>
<div className="mt-8 rounded-lg border border-slate-300 bg-slate-100 shadow-sm"> <div className="mt-8 rounded-lg border border-slate-300 bg-slate-100 shadow-xs">
<div className="p-8"> <div className="p-8">
<h2 className="mr-2 inline-flex text-2xl font-bold text-slate-700"> <h2 className="mr-2 inline-flex text-2xl font-bold text-slate-700">
{t("environments.settings.enterprise.enterprise_features")} {t("environments.settings.enterprise.enterprise_features")}

View File

@@ -25,13 +25,13 @@ export const SettingsCard = ({
return ( return (
<div <div
className={cn( className={cn(
"relative my-4 w-full max-w-4xl rounded-xl border border-slate-200 bg-white py-4 text-left shadow-sm", "relative my-4 w-full max-w-4xl rounded-xl border border-slate-200 bg-white py-4 text-left shadow-xs",
className className
)} )}
id={title}> id={title}>
<div className="border-b border-slate-200 px-4 pb-4"> <div className="border-b border-slate-200 px-4 pb-4">
<div className="flex"> <div className="flex">
<h3 className="text-lg font-medium capitalize leading-6 text-slate-900">{title}</h3> <h3 className="text-lg leading-6 font-medium text-slate-900 capitalize">{title}</h3>
<div className="ml-2"> <div className="ml-2">
{beta && <Badge size="normal" type="warning" text="Beta" />} {beta && <Badge size="normal" type="warning" text="Beta" />}
{soon && ( {soon && (

View File

@@ -36,7 +36,7 @@ export const ResponseTableCell = ({
// Conditional rendering of maximize icon // Conditional rendering of maximize icon
const renderMaximizeIcon = cell.column.id === "createdAt" && ( const renderMaximizeIcon = cell.column.id === "createdAt" && (
<div <div
className="hidden flex-shrink-0 cursor-pointer items-center rounded-md border border-slate-200 bg-white p-2 hover:border-slate-300 group-hover:flex" className="hidden shrink-0 cursor-pointer items-center rounded-md border border-slate-200 bg-white p-2 group-hover:flex hover:border-slate-300"
onClick={handleCellClick}> onClick={handleCellClick}>
<Maximize2Icon className="h-4 w-4" /> <Maximize2Icon className="h-4 w-4" />
</div> </div>

View File

@@ -20,7 +20,7 @@ interface AddressSummaryProps {
export const AddressSummary = ({ questionSummary, environmentId, survey, locale }: AddressSummaryProps) => { export const AddressSummary = ({ questionSummary, environmentId, survey, locale }: AddressSummaryProps) => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div> <div>
<div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600"> <div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600">

View File

@@ -16,7 +16,7 @@ export const CTASummary = ({ questionSummary, survey }: CTASummaryProps) => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader <QuestionSummaryHeader
survey={survey} survey={survey}
questionSummary={questionSummary} questionSummary={questionSummary}
@@ -40,7 +40,7 @@ export const CTASummary = ({ questionSummary, survey }: CTASummaryProps) => {
</> </>
} }
/> />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
<div className="text flex justify-between px-2 pb-2"> <div className="text flex justify-between px-2 pb-2">
<div className="mr-8 flex space-x-1"> <div className="mr-8 flex space-x-1">
<p className="font-semibold text-slate-700">CTR</p> <p className="font-semibold text-slate-700">CTR</p>

View File

@@ -16,9 +16,9 @@ export const CalSummary = ({ questionSummary, survey }: CalSummaryProps) => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
<div> <div>
<div className="text flex justify-between px-2 pb-2"> <div className="text flex justify-between px-2 pb-2">
<div className="mr-8 flex space-x-1"> <div className="mr-8 flex space-x-1">

View File

@@ -39,9 +39,9 @@ export const ConsentSummary = ({ questionSummary, survey, setFilter }: ConsentSu
}, },
]; ];
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
{summaryItems.map((summaryItem) => { {summaryItems.map((summaryItem) => {
return ( return (
<div <div

View File

@@ -25,7 +25,7 @@ export const ContactInfoSummary = ({
}: ContactInfoSummaryProps) => { }: ContactInfoSummaryProps) => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div> <div>
<div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600"> <div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600">

View File

@@ -46,7 +46,7 @@ export const DateQuestionSummary = ({
}; };
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className=""> <div className="">
<div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600"> <div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600">

View File

@@ -36,7 +36,7 @@ export const FileUploadSummary = ({
}; };
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className=""> <div className="">
<div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600"> <div className="grid h-10 grid-cols-4 items-center border-y border-slate-200 bg-slate-100 text-sm font-bold text-slate-600">
@@ -80,7 +80,7 @@ export const FileUploadSummary = ({
return ( return (
<div className="relative m-2 rounded-lg bg-slate-200" key={fileUrl}> <div className="relative m-2 rounded-lg bg-slate-200" key={fileUrl}>
<a href={fileUrl} key={index} target="_blank" rel="noopener noreferrer"> <a href={fileUrl} key={index} target="_blank" rel="noopener noreferrer">
<div className="absolute right-0 top-0 m-2"> <div className="absolute top-0 right-0 m-2">
<div className="flex h-8 w-8 items-center justify-center rounded-lg bg-slate-50 hover:bg-white"> <div className="flex h-8 w-8 items-center justify-center rounded-lg bg-slate-50 hover:bg-white">
<DownloadIcon className="h-6 text-slate-500" /> <DownloadIcon className="h-6 text-slate-500" />
</div> </div>

View File

@@ -27,8 +27,8 @@ export const HiddenFieldsSummary = ({ environment, questionSummary, locale }: Hi
); );
}; };
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<div className="space-y-2 px-4 pb-5 pt-6 md:px-6"> <div className="space-y-2 px-4 pt-6 pb-5 md:px-6">
<div className={"align-center flex justify-between gap-4"}> <div className={"align-center flex justify-between gap-4"}>
<h3 className="pb-1 text-lg font-semibold text-slate-900 md:text-xl">{questionSummary.id}</h3> <h3 className="pb-1 text-lg font-semibold text-slate-900 md:text-xl">{questionSummary.id}</h3>
</div> </div>
@@ -76,7 +76,7 @@ export const HiddenFieldsSummary = ({ environment, questionSummary, locale }: Hi
</div> </div>
)} )}
</div> </div>
<div className="ph-no-capture col-span-2 whitespace-pre-wrap pl-6 font-semibold"> <div className="ph-no-capture col-span-2 pl-6 font-semibold whitespace-pre-wrap">
{response.value} {response.value}
</div> </div>
<div className="px-4 text-slate-500 md:px-6"> <div className="px-4 text-slate-500 md:px-6">

View File

@@ -45,14 +45,14 @@ export const MatrixQuestionSummary = ({ questionSummary, survey, setFilter }: Ma
: []; : [];
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className="overflow-x-auto p-6"> <div className="overflow-x-auto p-6">
{/* Summary Table */} {/* Summary Table */}
<table className="mx-auto border-collapse cursor-default text-left"> <table className="mx-auto border-collapse cursor-default text-left">
<thead> <thead>
<tr> <tr>
<th className="p-4 pb-3 pt-0 font-medium text-slate-400 dark:border-slate-600 dark:text-slate-200"></th> <th className="p-4 pt-0 pb-3 font-medium text-slate-400 dark:border-slate-600 dark:text-slate-200"></th>
{columns.map((column) => ( {columns.map((column) => (
<th key={column} className="text-center font-medium"> <th key={column} className="text-center font-medium">
<TooltipRenderer tooltipContent={getTooltipContent(column)} shouldRender={true}> <TooltipRenderer tooltipContent={getTooltipContent(column)} shouldRender={true}>
@@ -65,7 +65,7 @@ export const MatrixQuestionSummary = ({ questionSummary, survey, setFilter }: Ma
<tbody> <tbody>
{questionSummary.data.map(({ rowLabel, columnPercentages }, rowIndex) => ( {questionSummary.data.map(({ rowLabel, columnPercentages }, rowIndex) => (
<tr key={rowLabel}> <tr key={rowLabel}>
<td className="max-w-60 overflow-hidden text-ellipsis whitespace-nowrap p-4"> <td className="max-w-60 overflow-hidden p-4 text-ellipsis whitespace-nowrap">
<TooltipRenderer tooltipContent={getTooltipContent(rowLabel)} shouldRender={true}> <TooltipRenderer tooltipContent={getTooltipContent(rowLabel)} shouldRender={true}>
<p className="max-w-40 overflow-hidden text-ellipsis whitespace-nowrap">{rowLabel}</p> <p className="max-w-40 overflow-hidden text-ellipsis whitespace-nowrap">{rowLabel}</p>
</TooltipRenderer> </TooltipRenderer>
@@ -83,7 +83,7 @@ export const MatrixQuestionSummary = ({ questionSummary, survey, setFilter }: Ma
)}> )}>
<div <div
style={{ backgroundColor: `rgba(0,196,184,${getOpacityLevel(percentage)})` }} style={{ backgroundColor: `rgba(0,196,184,${getOpacityLevel(percentage)})` }}
className="hover:outline-brand-dark m-1 flex h-full w-40 cursor-pointer items-center justify-center rounded p-4 text-sm text-slate-950 hover:outline" className="hover:outline-brand-dark m-1 flex h-full w-40 cursor-pointer items-center justify-center rounded-sm p-4 text-sm text-slate-950 hover:outline"
onClick={() => onClick={() =>
setFilter( setFilter(
questionSummary.question.id, questionSummary.question.id,

View File

@@ -65,7 +65,7 @@ export const MultipleChoiceSummary = ({
}; };
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader <QuestionSummaryHeader
questionSummary={questionSummary} questionSummary={questionSummary}
survey={survey} survey={survey}
@@ -78,7 +78,7 @@ export const MultipleChoiceSummary = ({
) : undefined ) : undefined
} }
/> />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
{results.map((result, resultsIdx) => ( {results.map((result, resultsIdx) => (
<div <div
key={result.value} key={result.value}

View File

@@ -60,16 +60,16 @@ export const NPSSummary = ({ questionSummary, survey, setFilter }: NPSSummaryPro
}; };
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
{["promoters", "passives", "detractors", "dismissed"].map((group) => ( {["promoters", "passives", "detractors", "dismissed"].map((group) => (
<div className="cursor-pointer hover:opacity-80" key={group} onClick={() => applyFilter(group)}> <div className="cursor-pointer hover:opacity-80" key={group} onClick={() => applyFilter(group)}>
<div <div
className={`mb-2 flex justify-between ${group === "dismissed" ? "mb-2 border-t bg-white pt-4 text-sm md:text-base" : ""}`}> className={`mb-2 flex justify-between ${group === "dismissed" ? "mb-2 border-t bg-white pt-4 text-sm md:text-base" : ""}`}>
<div className="mr-8 flex space-x-1"> <div className="mr-8 flex space-x-1">
<p <p
className={`font-semibold capitalize text-slate-700 ${group === "dismissed" ? "" : "text-slate-700"}`}> className={`font-semibold text-slate-700 capitalize ${group === "dismissed" ? "" : "text-slate-700"}`}>
{group} {group}
</p> </p>
<div> <div>
@@ -91,7 +91,7 @@ export const NPSSummary = ({ questionSummary, survey, setFilter }: NPSSummaryPro
))} ))}
</div> </div>
<div className="flex justify-center pb-4 pt-4"> <div className="flex justify-center pt-4 pb-4">
<HalfCircle value={questionSummary.score} /> <HalfCircle value={questionSummary.score} />
</div> </div>
</div> </div>

View File

@@ -60,7 +60,7 @@ export const OpenTextSummary = ({
]; ];
return ( return (
<div className="overflow-hidden rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="overflow-hidden rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader <QuestionSummaryHeader
questionSummary={questionSummary} questionSummary={questionSummary}
survey={survey} survey={survey}

View File

@@ -30,7 +30,7 @@ export const PictureChoiceSummary = ({ questionSummary, survey, setFilter }: Pic
const results = questionSummary.choices; const results = questionSummary.choices;
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader <QuestionSummaryHeader
questionSummary={questionSummary} questionSummary={questionSummary}
survey={survey} survey={survey}
@@ -43,7 +43,7 @@ export const PictureChoiceSummary = ({ questionSummary, survey, setFilter }: Pic
) : undefined ) : undefined
} }
/> />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
{results.map((result, index) => ( {results.map((result, index) => (
<div <div
className="cursor-pointer hover:opacity-80" className="cursor-pointer hover:opacity-80"

View File

@@ -17,16 +17,16 @@ export const RankingSummary = ({ questionSummary, surveyType, survey }: RankingS
}); });
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader questionSummary={questionSummary} survey={survey} /> <QuestionSummaryHeader questionSummary={questionSummary} survey={survey} />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
{results.map((result, resultsIdx) => ( {results.map((result, resultsIdx) => (
<div key={result.value} className="group cursor-pointer"> <div key={result.value} className="group cursor-pointer">
<div className="text flex flex-col justify-between px-2 pb-2 sm:flex-row"> <div className="text flex flex-col justify-between px-2 pb-2 sm:flex-row">
<div className="mr-8 flex w-full justify-between space-x-1 sm:justify-normal"> <div className="mr-8 flex w-full justify-between space-x-1 sm:justify-normal">
<div className="flex w-full items-center"> <div className="flex w-full items-center">
<span className="mr-2 text-slate-400">#{resultsIdx + 1}</span> <span className="mr-2 text-slate-400">#{resultsIdx + 1}</span>
<div className="rounded bg-slate-100 px-2 py-1">{result.value}</div> <div className="rounded-sm bg-slate-100 px-2 py-1">{result.value}</div>
<span className="ml-auto flex items-center space-x-1"> <span className="ml-auto flex items-center space-x-1">
<span className="font-bold text-slate-600"> <span className="font-bold text-slate-600">
#{convertFloatToNDecimal(result.avgRanking, 2)} #{convertFloatToNDecimal(result.avgRanking, 2)}

View File

@@ -37,7 +37,7 @@ export const RatingSummary = ({ questionSummary, survey, setFilter }: RatingSumm
}, [questionSummary]); }, [questionSummary]);
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<QuestionSummaryHeader <QuestionSummaryHeader
questionSummary={questionSummary} questionSummary={questionSummary}
survey={survey} survey={survey}
@@ -50,7 +50,7 @@ export const RatingSummary = ({ questionSummary, survey, setFilter }: RatingSumm
</div> </div>
} }
/> />
<div className="space-y-5 px-4 pb-6 pt-4 text-sm md:px-6 md:text-base"> <div className="space-y-5 px-4 pt-4 pb-6 text-sm md:px-6 md:text-base">
{questionSummary.choices.map((result) => ( {questionSummary.choices.map((result) => (
<div <div
className="cursor-pointer hover:opacity-80" className="cursor-pointer hover:opacity-80"

View File

@@ -43,7 +43,7 @@ const ScrollToTop: React.FC<ScrollToTopProps> = ({ containerId }) => {
return ( return (
<button <button
onClick={scrollToTop} onClick={scrollToTop}
className={`fixed bottom-4 right-4 z-[1] flex h-10 w-10 justify-center rounded-md bg-slate-500 p-2 text-white transition-opacity ${ className={`fixed right-4 bottom-4 z-1 flex h-10 w-10 justify-center rounded-md bg-slate-500 p-2 text-white transition-opacity ${
showButton ? "opacity-80" : "opacity-0" showButton ? "opacity-80" : "opacity-0"
}`}> }`}>

View File

@@ -39,7 +39,7 @@ export const SummaryDropOffs = ({ dropOff, survey }: SummaryDropOffsProps) => {
}; };
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<div className=""> <div className="">
<div className="grid h-10 grid-cols-6 items-center border-y border-slate-200 bg-slate-100 text-sm font-semibold text-slate-600"> <div className="grid h-10 grid-cols-6 items-center border-y border-slate-200 bg-slate-100 text-sm font-semibold text-slate-600">
<div className="col-span-3 pl-4 md:pl-6">{t("common.questions")}</div> <div className="col-span-3 pl-4 md:pl-6">{t("common.questions")}</div>
@@ -77,10 +77,10 @@ export const SummaryDropOffs = ({ dropOff, survey }: SummaryDropOffsProps) => {
)} )}
</p> </p>
</div> </div>
<div className="whitespace-pre-wrap text-center font-semibold"> <div className="text-center font-semibold whitespace-pre-wrap">
{quesDropOff.ttc > 0 ? (quesDropOff.ttc / 1000).toFixed(2) + "s" : "N/A"} {quesDropOff.ttc > 0 ? (quesDropOff.ttc / 1000).toFixed(2) + "s" : "N/A"}
</div> </div>
<div className="whitespace-pre-wrap text-center font-semibold">{quesDropOff.impressions}</div> <div className="text-center font-semibold whitespace-pre-wrap">{quesDropOff.impressions}</div>
<div className="pl-6 text-center md:px-6"> <div className="pl-6 text-center md:px-6">
<span className="mr-1.5 font-semibold">{quesDropOff.dropOffCount}</span> <span className="mr-1.5 font-semibold">{quesDropOff.dropOffCount}</span>
<span>({Math.round(quesDropOff.dropOffPercentage)}%)</span> <span>({Math.round(quesDropOff.dropOffPercentage)}%)</span>

View File

@@ -17,7 +17,7 @@ const StatCard = ({ label, percentage, value, tooltipText, isLoading }) => {
<TooltipProvider delayDuration={50}> <TooltipProvider delayDuration={50}>
<Tooltip> <Tooltip>
<TooltipTrigger> <TooltipTrigger>
<div className="flex h-full cursor-default flex-col justify-between space-y-2 rounded-xl border border-slate-200 bg-white p-4 text-left shadow-sm"> <div className="flex h-full cursor-default flex-col justify-between space-y-2 rounded-xl border border-slate-200 bg-white p-4 text-left shadow-xs">
<p className="flex items-center gap-1 text-sm text-slate-600"> <p className="flex items-center gap-1 text-sm text-slate-600">
{label} {label}
{typeof percentage === "number" && !isNaN(percentage) && !isLoading && ( {typeof percentage === "number" && !isNaN(percentage) && !isLoading && (
@@ -101,7 +101,7 @@ export const SummaryMetadata = ({
<TooltipTrigger> <TooltipTrigger>
<div <div
onClick={() => setShowDropOffs(!showDropOffs)} onClick={() => setShowDropOffs(!showDropOffs)}
className="group flex h-full w-full cursor-pointer flex-col justify-between space-y-2 rounded-lg border border-slate-200 bg-white p-4 text-left shadow-sm"> className="group flex h-full w-full cursor-pointer flex-col justify-between space-y-2 rounded-lg border border-slate-200 bg-white p-4 text-left shadow-xs">
<span className="text-sm text-slate-600"> <span className="text-sm text-slate-600">
{t("environments.surveys.summary.drop_offs")} {t("environments.surveys.summary.drop_offs")}
{`${Math.round(dropOffPercentage)}%` !== "NaN%" && !isLoading && ( {`${Math.round(dropOffPercentage)}%` !== "NaN%" && !isLoading && (

View File

@@ -99,7 +99,7 @@ export const EmbedView = ({
className={cn( className={cn(
"rounded-md px-4 py-2", "rounded-md px-4 py-2",
tab.id === activeId tab.id === activeId
? "bg-white text-slate-900 shadow-sm" ? "bg-white text-slate-900 shadow-xs"
: "border-transparent text-slate-700 hover:text-slate-900" : "border-transparent text-slate-700 hover:text-slate-900"
)}> )}>
{tab.label} {tab.label}

View File

@@ -389,7 +389,7 @@ export const CustomFilter = ({ survey }: CustomFilterProps) => {
onOpenChange={(value) => { onOpenChange={(value) => {
value && handleDatePickerClose(); value && handleDatePickerClose();
}}> }}>
<DropdownMenuTrigger asChild className="focus:bg-muted cursor-pointer outline-none"> <DropdownMenuTrigger asChild className="focus:bg-muted cursor-pointer outline-hidden">
<div className="h-auto min-w-auto rounded-md border border-slate-200 bg-white p-3 hover:border-slate-300 sm:flex sm:px-6 sm:py-3"> <div className="h-auto min-w-auto rounded-md border border-slate-200 bg-white p-3 hover:border-slate-300 sm:flex sm:px-6 sm:py-3">
<div className="hidden w-full items-center justify-between sm:flex"> <div className="hidden w-full items-center justify-between sm:flex">
<span className="text-sm text-slate-700">{t("common.download")}</span> <span className="text-sm text-slate-700">{t("common.download")}</span>

View File

@@ -96,7 +96,7 @@ export const QuestionFilterComboBox = ({
<DropdownMenuTrigger <DropdownMenuTrigger
disabled={disabled} disabled={disabled}
className={clsx( className={clsx(
"h-9 max-w-fit rounded-md rounded-r-none border-r-[1px] border-slate-300 bg-white p-2 text-sm text-slate-600 focus:outline-transparent focus:ring-0", "h-9 max-w-fit rounded-md rounded-r-none border-r-[1px] border-slate-300 bg-white p-2 text-sm text-slate-600 focus:ring-0 focus:outline-transparent",
!disabled ? "cursor-pointer" : "opacity-50" !disabled ? "cursor-pointer" : "opacity-50"
)}> )}>
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
@@ -146,7 +146,7 @@ export const QuestionFilterComboBox = ({
key={`${o}-${index}`} key={`${o}-${index}`}
type="button" type="button"
onClick={() => handleRemoveMultiSelect(filterComboBoxValue.filter((i) => i !== o))} onClick={() => handleRemoveMultiSelect(filterComboBoxValue.filter((i) => i !== o))}
className="w-30 flex items-center whitespace-nowrap bg-slate-100 px-2 text-slate-600"> className="flex w-30 items-center bg-slate-100 px-2 whitespace-nowrap text-slate-600">
{o} {o}
<X width={14} height={14} className="ml-2" /> <X width={14} height={14} className="ml-2" />
</button> </button>
@@ -166,7 +166,7 @@ export const QuestionFilterComboBox = ({
</div> </div>
<div className="relative mt-2 h-full"> <div className="relative mt-2 h-full">
{open && ( {open && (
<div className="animate-in bg-popover absolute top-0 z-10 max-h-52 w-full overflow-auto rounded-md bg-white outline-none"> <div className="animate-in bg-popover absolute top-0 z-10 max-h-52 w-full overflow-auto rounded-md bg-white outline-hidden">
<CommandList> <CommandList>
<div className="p-2"> <div className="p-2">
<Input <Input

View File

@@ -164,7 +164,7 @@ export const QuestionsComboBox = ({ options, selected, onChangeValue }: Question
value={inputValue} value={inputValue}
onValueChange={setInputValue} onValueChange={setInputValue}
placeholder={t("common.search") + "..."} placeholder={t("common.search") + "..."}
className="h-5 border-none border-transparent p-0 shadow-none outline-0 ring-offset-transparent focus:border-none focus:border-transparent focus:shadow-none focus:outline-0 focus:ring-offset-transparent" className="h-5 border-none border-transparent p-0 shadow-none ring-offset-transparent outline-0 focus:border-none focus:border-transparent focus:shadow-none focus:ring-offset-transparent focus:outline-0"
/> />
)} )}
<div> <div>
@@ -177,7 +177,7 @@ export const QuestionsComboBox = ({ options, selected, onChangeValue }: Question
</div> </div>
<div className="relative mt-2 h-full"> <div className="relative mt-2 h-full">
{open && ( {open && (
<div className="animate-in bg-popover absolute top-0 z-50 max-h-52 w-full overflow-auto rounded-md bg-white outline-none"> <div className="animate-in bg-popover absolute top-0 z-50 max-h-52 w-full overflow-auto rounded-md bg-white outline-hidden">
<CommandList> <CommandList>
<CommandEmpty>{t("common.no_result_found")}</CommandEmpty> <CommandEmpty>{t("common.no_result_found")}</CommandEmpty>
{options?.map((data) => ( {options?.map((data) => (

View File

@@ -199,7 +199,7 @@ export const ResponseFilter = ({ survey }: ResponseFilterProps) => {
return ( return (
<Popover open={isOpen} onOpenChange={handleOpenChange}> <Popover open={isOpen} onOpenChange={handleOpenChange}>
<PopoverTrigger className="flex min-w-[8rem] items-center justify-between rounded border border-slate-200 bg-white p-3 text-sm text-slate-600 hover:border-slate-300 sm:min-w-[11rem] sm:px-6 sm:py-3"> <PopoverTrigger className="flex min-w-[8rem] items-center justify-between rounded-sm border border-slate-200 bg-white p-3 text-sm text-slate-600 hover:border-slate-300 sm:min-w-[11rem] sm:px-6 sm:py-3">
<span> <span>
Filter <b>{filterValue.filter.length > 0 && `(${filterValue.filter.length})`}</b> Filter <b>{filterValue.filter.length > 0 && `(${filterValue.filter.length})`}</b>
</span> </span>

View File

@@ -86,8 +86,8 @@ export const ResultsShareButton = ({ survey, webAppUrl }: ResultsShareButtonProp
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger <DropdownMenuTrigger
asChild asChild
className="focus:bg-muted cursor-pointer border border-slate-200 outline-none hover:border-slate-300"> className="focus:bg-muted cursor-pointer border border-slate-200 outline-hidden hover:border-slate-300">
<div className="min-w-auto h-auto rounded-md border bg-white p-3 sm:flex sm:min-w-[7rem] sm:px-6 sm:py-3"> <div className="h-auto min-w-auto rounded-md border bg-white p-3 sm:flex sm:min-w-[7rem] sm:px-6 sm:py-3">
<div className="hidden w-full items-center justify-between sm:flex"> <div className="hidden w-full items-center justify-between sm:flex">
<span className="text-sm text-slate-700"> <span className="text-sm text-slate-700">
{t("environments.surveys.summary.share_results")} {t("environments.surveys.summary.share_results")}

View File

@@ -35,7 +35,7 @@ export const GET = async (req: NextRequest) => {
<div tw="flex rounded-2xl absolute -right-2 mt-2"> <div tw="flex rounded-2xl absolute -right-2 mt-2">
<a tw={`rounded-xl border border-transparent bg-[${brandColor}] h-18 w-38 opacity-50`}></a> <a tw={`rounded-xl border border-transparent bg-[${brandColor}] h-18 w-38 opacity-50`}></a>
</div> </div>
<div tw="flex rounded-2xl shadow "> <div tw="flex rounded-2xl shadow-sm ">
<a <a
tw={`flex items-center justify-center rounded-xl border border-transparent bg-[${brandColor}] text-2xl text-white h-18 w-38`}> tw={`flex items-center justify-center rounded-xl border border-transparent bg-[${brandColor}] text-2xl text-white h-18 w-38`}>
Begin! Begin!

View File

@@ -88,7 +88,7 @@ export const QuestionSkip = ({
{status === "aborted" && ( {status === "aborted" && (
<div className="flex"> <div className="flex">
<div <div
className="flex w-0.5 flex-grow items-start justify-center" className="flex w-0.5 grow items-start justify-center"
style={{ style={{
background: background:
"repeating-linear-gradient(to bottom, rgb(148 163 184), rgb(148 163 184) 2px, transparent 2px, transparent 10px)", // adjust the 2px to change dot size and 10px to change space between dots "repeating-linear-gradient(to bottom, rgb(148 163 184), rgb(148 163 184) 2px, transparent 2px, transparent 10px)", // adjust the 2px to change dot size and 10px to change space between dots

View File

@@ -100,14 +100,14 @@ export const ResponseNotes = ({
return ( return (
<div <div
className={clsx( className={clsx(
"absolute w-1/4 rounded-lg border border-slate-200 shadow-sm transition-all", "absolute w-1/4 rounded-lg border border-slate-200 shadow-xs transition-all",
!isOpen && unresolvedNotes.length && "group/hint cursor-pointer bg-white hover:-right-3", !isOpen && unresolvedNotes.length && "group/hint cursor-pointer bg-white hover:-right-3",
!isOpen && !unresolvedNotes.length && "cursor-pointer bg-slate-50", !isOpen && !unresolvedNotes.length && "cursor-pointer bg-slate-50",
isOpen isOpen
? "top-0 -right-2 h-5/6 max-h-[600px] w-1/4 bg-white" ? "top-0 -right-2 h-5/6 max-h-[600px] w-1/4 bg-white"
: unresolvedNotes.length : unresolvedNotes.length
? "top-[8.33%] right-0 h-5/6 max-h-[600px] w-1/12" ? "top-[8.33%] right-0 h-5/6 max-h-[600px] w-1/12"
: "top-[8.333%] right-[120px] h-5/6 max-h-[600px] w-1/12 group-hover:right-[0]" : "top-[8.333%] right-[120px] h-5/6 max-h-[600px] w-1/12 group-hover:right-0"
)} )}
onClick={() => { onClick={() => {
if (!isOpen) setIsOpen(true); if (!isOpen) setIsOpen(true);
@@ -215,7 +215,7 @@ export const ResponseNotes = ({
<textarea <textarea
rows={2} rows={2}
className={cn( className={cn(
"block w-full resize-none rounded-md border border-slate-100 bg-slate-50 p-2 shadow-sm focus:border-slate-500 focus:ring-0 sm:text-sm", "block w-full resize-none rounded-md border border-slate-100 bg-slate-50 p-2 shadow-xs focus:border-slate-500 focus:ring-0 sm:text-sm",
!isTextAreaOpen && "scale-y-0 transition-all duration-1000", !isTextAreaOpen && "scale-y-0 transition-all duration-1000",
!isTextAreaOpen && "translate-y-8 transition-all duration-300", !isTextAreaOpen && "translate-y-8 transition-all duration-300",
isTextAreaOpen && "scale-y-1 transition-all duration-1000", isTextAreaOpen && "scale-y-1 transition-all duration-1000",

View File

@@ -116,7 +116,7 @@ export const SingleResponseCard = ({
<div className={clsx("group relative", isOpen && "min-h-[300px]")}> <div className={clsx("group relative", isOpen && "min-h-[300px]")}>
<div <div
className={clsx( className={clsx(
"relative z-20 my-6 rounded-xl border border-slate-200 bg-white shadow-sm transition-all", "relative z-20 my-6 rounded-xl border border-slate-200 bg-white shadow-xs transition-all",
pageType === "response" && pageType === "response" &&
(isOpen (isOpen
? "w-3/4" ? "w-3/4"

View File

@@ -7,7 +7,7 @@ import Image from "next/image";
export const Testimonial = async () => { export const Testimonial = async () => {
const t = await getTranslate(); const t = await getTranslate();
return ( return (
<div className="flex flex-col items-center justify-center bg-gradient-to-tr from-slate-100 to-slate-300"> <div className="flex flex-col items-center justify-center bg-linear-to-tr from-slate-100 to-slate-300">
<div className="3xl:w-2/3 mb-10 space-y-8 px-12 xl:px-20"> <div className="3xl:w-2/3 mb-10 space-y-8 px-12 xl:px-20">
<div> <div>
<h2 className="text-3xl font-bold text-slate-800">{t("auth.testimonial_title")}</h2> <h2 className="text-3xl font-bold text-slate-800">{t("auth.testimonial_title")}</h2>
@@ -31,13 +31,13 @@ export const Testimonial = async () => {
</div> </div>
</div> </div>
<div className="rounded-xl border border-slate-200 bg-gradient-to-tr from-slate-100 to-slate-200 p-8"> <div className="rounded-xl border border-slate-200 bg-linear-to-tr from-slate-100 to-slate-200 p-8">
<p className="italic text-slate-700">{t("auth.testimonial_1")}</p> <p className="text-slate-700 italic">{t("auth.testimonial_1")}</p>
<div className="mt-4 flex items-center space-x-6"> <div className="mt-4 flex items-center space-x-6">
<Image <Image
src={Peer} src={Peer}
alt="Cal.com Co-Founder Peer Richelsen" alt="Cal.com Co-Founder Peer Richelsen"
className="h-28 w-28 rounded-full border border-slate-200 shadow-sm" className="h-28 w-28 rounded-full border border-slate-200 shadow-xs"
/> />
<div> <div>
<p className="mb-1.5 text-sm text-slate-500">Peer Richelsen, Co-Founder Cal.com</p> <p className="mb-1.5 text-sm text-slate-500">Peer Richelsen, Co-Founder Cal.com</p>

View File

@@ -60,7 +60,7 @@ export const ForgotPasswordForm = () => {
onChange={(e) => field.onChange(e)} onChange={(e) => field.onChange(e)}
autoComplete="email" autoComplete="email"
required required
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-xs sm:text-sm"
/> />
</FormControl> </FormControl>
{error?.message && <FormError className="text-left">{error.message}</FormError>} {error?.message && <FormError className="text-left">{error.message}</FormError>}

View File

@@ -26,7 +26,7 @@ const passwordInputProps = {
placeholder: "*******", placeholder: "*******",
required: true, required: true,
className: className:
"focus:border-brand-dark focus:ring-brand-dark mt-2 block w-full rounded-md border-slate-300 shadow-sm sm:text-sm", "focus:border-brand-dark focus:ring-brand-dark mt-2 block w-full rounded-md border-slate-300 shadow-xs sm:text-sm",
}; };
export const ResetPasswordForm = () => { export const ResetPasswordForm = () => {

View File

@@ -181,7 +181,7 @@ export const LoginForm = ({
value={field.value} value={field.value}
onChange={(email) => field.onChange(email)} onChange={(email) => field.onChange(email)}
placeholder="work@email.com" placeholder="work@email.com"
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-xs sm:text-sm"
/> />
{error?.message && <FormError className="text-left">{error.message}</FormError>} {error?.message && <FormError className="text-left">{error.message}</FormError>}
</div> </div>
@@ -204,7 +204,7 @@ export const LoginForm = ({
aria-label="password" aria-label="password"
aria-required="true" aria-required="true"
required required
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-xs sm:text-sm"
value={field.value} value={field.value}
onChange={(password) => field.onChange(password)} onChange={(password) => field.onChange(password)}
/> />

View File

@@ -35,7 +35,7 @@ export const LoginPage = async () => {
const samlSsoEnabled = isSamlSsoEnabled && SAML_OAUTH_ENABLED; const samlSsoEnabled = isSamlSsoEnabled && SAML_OAUTH_ENABLED;
return ( return (
<div className="grid min-h-screen w-full bg-gradient-to-tr from-slate-100 to-slate-50 lg:grid-cols-5"> <div className="grid min-h-screen w-full bg-linear-to-tr from-slate-100 to-slate-50 lg:grid-cols-5">
<div className="col-span-2 hidden lg:flex"> <div className="col-span-2 hidden lg:flex">
<Testimonial /> <Testimonial />
</div> </div>

View File

@@ -222,7 +222,7 @@ export const SignupForm = ({
placeholder="*******" placeholder="*******"
aria-placeholder="password" aria-placeholder="password"
required required
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md shadow-xs sm:text-sm"
/> />
{error?.message && <FormError className="text-left">{error.message}</FormError>} {error?.message && <FormError className="text-left">{error.message}</FormError>}
</div> </div>

View File

@@ -58,7 +58,7 @@ export const SignupPage = async ({ searchParams: searchParamsProps }) => {
const emailFromSearchParams = searchParams["email"]; const emailFromSearchParams = searchParams["email"];
return ( return (
<div className="grid min-h-screen w-full bg-gradient-to-tr from-slate-100 to-slate-50 lg:grid-cols-5"> <div className="grid min-h-screen w-full bg-linear-to-tr from-slate-100 to-slate-50 lg:grid-cols-5">
<div className="col-span-2 hidden lg:flex"> <div className="col-span-2 hidden lg:flex">
<Testimonial /> <Testimonial />
</div> </div>

View File

@@ -146,7 +146,7 @@ export const PricingTable = ({
<div className="flex flex-col gap-8"> <div className="flex flex-col gap-8">
<div className="flex flex-col"> <div className="flex flex-col">
<div className="flex w-full"> <div className="flex w-full">
<h2 className="mb-3 mr-2 inline-flex w-full text-2xl font-bold text-slate-700"> <h2 className="mr-2 mb-3 inline-flex w-full text-2xl font-bold text-slate-700">
{t("environments.settings.billing.current_plan")}:{" "} {t("environments.settings.billing.current_plan")}:{" "}
{capitalizeFirstLetter(organization.billing.plan)} {capitalizeFirstLetter(organization.billing.plan)}
{cancellingOn && ( {cancellingOn && (
@@ -164,7 +164,7 @@ export const PricingTable = ({
<Button <Button
size="sm" size="sm"
variant="secondary" variant="secondary"
className="justify-center py-2 shadow-sm" className="justify-center py-2 shadow-xs"
onClick={openCustomerPortal}> onClick={openCustomerPortal}>
{t("environments.settings.billing.manage_card_details")} {t("environments.settings.billing.manage_card_details")}
</Button> </Button>
@@ -172,7 +172,7 @@ export const PricingTable = ({
)} )}
</div> </div>
<div className="mt-2 flex flex-col rounded-xl border border-slate-200 bg-white py-4 capitalize shadow-sm dark:bg-slate-800"> <div className="mt-2 flex flex-col rounded-xl border border-slate-200 bg-white py-4 capitalize shadow-xs dark:bg-slate-800">
<div <div
className={cn( className={cn(
"relative mx-8 mb-8 flex flex-col gap-4", "relative mx-8 mb-8 flex flex-col gap-4",
@@ -201,7 +201,7 @@ export const PricingTable = ({
<div <div
className={cn( className={cn(
"relative mx-8 mb-8 flex flex-col gap-4", "relative mx-8 mb-8 flex flex-col gap-4",
peopleUnlimitedCheck && "mb-0 mt-4 flex-row pb-0" peopleUnlimitedCheck && "mt-4 mb-0 flex-row pb-0"
)}> )}>
<p className="text-md font-semibold text-slate-700"> <p className="text-md font-semibold text-slate-700">
{t("environments.settings.billing.monthly_identified_users")} {t("environments.settings.billing.monthly_identified_users")}
@@ -224,7 +224,7 @@ export const PricingTable = ({
<div <div
className={cn( className={cn(
"relative mx-8 flex flex-col gap-4 pb-12", "relative mx-8 flex flex-col gap-4 pb-12",
projectsUnlimitedCheck && "mb-0 mt-4 flex-row pb-0" projectsUnlimitedCheck && "mt-4 mb-0 flex-row pb-0"
)}> )}>
<p className="text-md font-semibold text-slate-700">{t("common.projects")}</p> <p className="text-md font-semibold text-slate-700">{t("common.projects")}</p>
{organization.billing.limits.projects && ( {organization.billing.limits.projects && (
@@ -260,7 +260,7 @@ export const PricingTable = ({
{t("environments.settings.billing.monthly")} {t("environments.settings.billing.monthly")}
</div> </div>
<div <div
className={`flex-1 items-center whitespace-nowrap rounded-md py-0.5 pl-4 pr-2 text-center ${ className={`flex-1 items-center rounded-md py-0.5 pr-2 pl-4 text-center whitespace-nowrap ${
planPeriod === "yearly" ? "bg-slate-200 font-semibold" : "bg-transparent" planPeriod === "yearly" ? "bg-slate-200 font-semibold" : "bg-transparent"
}`} }`}
onClick={() => handleMonthlyToggle("yearly")}> onClick={() => handleMonthlyToggle("yearly")}>
@@ -272,7 +272,7 @@ export const PricingTable = ({
</div> </div>
<div className="relative mx-auto grid max-w-md grid-cols-1 gap-y-8 lg:mx-0 lg:-mb-14 lg:max-w-none lg:grid-cols-4"> <div className="relative mx-auto grid max-w-md grid-cols-1 gap-y-8 lg:mx-0 lg:-mb-14 lg:max-w-none lg:grid-cols-4">
<div <div
className="hidden lg:absolute lg:inset-x-px lg:bottom-0 lg:top-4 lg:block lg:rounded-xl lg:rounded-t-2xl lg:border lg:border-slate-200 lg:bg-slate-100 lg:pb-8 lg:ring-1 lg:ring-white/10" className="hidden lg:absolute lg:inset-x-px lg:top-4 lg:bottom-0 lg:block lg:rounded-xl lg:rounded-t-2xl lg:border lg:border-slate-200 lg:bg-slate-100 lg:pb-8 lg:ring-1 lg:ring-white/10"
aria-hidden="true" aria-hidden="true"
/> />
{getCloudPricingData(t).plans.map((plan) => ( {getCloudPricingData(t).plans.map((plan) => (

View File

@@ -293,7 +293,7 @@ export const UploadContactsCSVButton = ({
<div className="sticky top-0 flex h-full flex-col rounded-lg"> <div className="sticky top-0 flex h-full flex-col rounded-lg">
<button <button
className={cn( className={cn(
"absolute right-0 top-0 hidden pr-4 pt-4 text-slate-400 hover:text-slate-500 focus:outline-none focus:ring-0 sm:block" "absolute top-0 right-0 hidden pt-4 pr-4 text-slate-400 hover:text-slate-500 focus:ring-0 focus:outline-hidden sm:block"
)} )}
onClick={() => { onClick={() => {
resetState(true); resetState(true);
@@ -339,7 +339,7 @@ export const UploadContactsCSVButton = ({
)} )}
onDragOver={(e) => handleDragOver(e)} onDragOver={(e) => handleDragOver(e)}
onDrop={(e) => handleDrop(e)}> onDrop={(e) => handleDrop(e)}>
<div className="flex flex-col items-center justify-center pb-6 pt-5"> <div className="flex flex-col items-center justify-center pt-5 pb-6">
<ArrowUpFromLineIcon className="h-6 text-slate-500" /> <ArrowUpFromLineIcon className="h-6 text-slate-500" />
<p className={cn("mt-2 text-center text-sm text-slate-500")}> <p className={cn("mt-2 text-center text-sm text-slate-500")}>
<span className="font-semibold">{t("common.upload_input_description")}</span> <span className="font-semibold">{t("common.upload_input_description")}</span>

View File

@@ -33,7 +33,7 @@ export const SegmentTableDataRow = ({
onClick={() => setIsEditSegmentModalOpen(true)}> onClick={() => setIsEditSegmentModalOpen(true)}>
<div className="col-span-4 flex items-center pl-6 text-sm"> <div className="col-span-4 flex items-center pl-6 text-sm">
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<div className="ph-no-capture w-8 flex-shrink-0 text-slate-500"> <div className="ph-no-capture w-8 shrink-0 text-slate-500">
<UsersIcon className="h-5 w-5" /> <UsersIcon className="h-5 w-5" />
</div> </div>
<div className="flex flex-col"> <div className="flex flex-col">
@@ -42,7 +42,7 @@ export const SegmentTableDataRow = ({
</div> </div>
</div> </div>
</div> </div>
<div className="col-span-1 my-auto hidden whitespace-nowrap text-center text-sm text-slate-500 sm:block"> <div className="col-span-1 my-auto hidden text-center text-sm whitespace-nowrap text-slate-500 sm:block">
<div className="ph-no-capture text-slate-900">{surveys?.length}</div> <div className="ph-no-capture text-slate-900">{surveys?.length}</div>
</div> </div>
<div className="whitespace-wrap col-span-1 my-auto hidden text-center text-sm text-slate-500 sm:block"> <div className="whitespace-wrap col-span-1 my-auto hidden text-center text-sm text-slate-500 sm:block">
@@ -52,7 +52,7 @@ export const SegmentTableDataRow = ({
}).replace("about", "")} }).replace("about", "")}
</div> </div>
</div> </div>
<div className="col-span-1 my-auto hidden whitespace-normal text-center text-sm text-slate-500 sm:block"> <div className="col-span-1 my-auto hidden text-center text-sm whitespace-normal text-slate-500 sm:block">
<div className="ph-no-capture text-slate-900">{format(createdAt, "do 'of' MMMM, yyyy")}</div> <div className="ph-no-capture text-slate-900">{format(createdAt, "do 'of' MMMM, yyyy")}</div>
</div> </div>
</div> </div>

View File

@@ -18,7 +18,7 @@ export const SegmentTable = async ({
}: TSegmentTableProps) => { }: TSegmentTableProps) => {
const t = await getTranslate(); const t = await getTranslate();
return ( return (
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<div className="grid h-12 grid-cols-7 content-center border-b text-left text-sm font-semibold text-slate-900"> <div className="grid h-12 grid-cols-7 content-center border-b text-left text-sm font-semibold text-slate-900">
<div className="col-span-4 pl-6">{t("common.title")}</div> <div className="col-span-4 pl-6">{t("common.title")}</div>
<div className="col-span-1 hidden text-center sm:block">{t("common.surveys")}</div> <div className="col-span-1 hidden text-center sm:block">{t("common.surveys")}</div>

View File

@@ -12,7 +12,7 @@ const Loading = async () => {
<PageHeader pageTitle="Contacts"> <PageHeader pageTitle="Contacts">
<ContactsSecondaryNavigation activeId="segments" loading /> <ContactsSecondaryNavigation activeId="segments" loading />
</PageHeader> </PageHeader>
<div className="rounded-xl border border-slate-200 bg-white shadow-sm"> <div className="rounded-xl border border-slate-200 bg-white shadow-xs">
<div className="grid h-12 grid-cols-7 content-center border-b text-left text-sm font-semibold text-slate-900"> <div className="grid h-12 grid-cols-7 content-center border-b text-left text-sm font-semibold text-slate-900">
<div className="col-span-4 pl-6">{t("common.title")}</div> <div className="col-span-4 pl-6">{t("common.title")}</div>
<div className="col-span-1 hidden text-center sm:block">{t("common.surveys")}</div> <div className="col-span-1 hidden text-center sm:block">{t("common.surveys")}</div>
@@ -26,7 +26,7 @@ const Loading = async () => {
className="m-2 grid h-16 grid-cols-7 content-center rounded-lg transition-colors ease-in-out hover:bg-slate-100"> className="m-2 grid h-16 grid-cols-7 content-center rounded-lg transition-colors ease-in-out hover:bg-slate-100">
<div className="col-span-4 flex items-center pl-6 text-sm"> <div className="col-span-4 flex items-center pl-6 text-sm">
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<UsersIcon className="h-5 w-5 flex-shrink-0 animate-pulse text-slate-500" /> <UsersIcon className="h-5 w-5 shrink-0 animate-pulse text-slate-500" />
<div className="flex flex-col"> <div className="flex flex-col">
<div className="font-medium text-slate-900"> <div className="font-medium text-slate-900">
<div className="mt-0 h-4 w-48 animate-pulse rounded-full bg-slate-200"></div> <div className="mt-0 h-4 w-48 animate-pulse rounded-full bg-slate-200"></div>
@@ -37,13 +37,13 @@ const Loading = async () => {
</div> </div>
</div> </div>
</div> </div>
<div className="col-span-1 my-auto whitespace-nowrap text-center text-sm text-slate-500"> <div className="col-span-1 my-auto text-center text-sm whitespace-nowrap text-slate-500">
<div className="m-4 h-4 animate-pulse rounded-full bg-slate-200"></div> <div className="m-4 h-4 animate-pulse rounded-full bg-slate-200"></div>
</div> </div>
<div className="whitespace-wrap col-span-1 my-auto text-center text-sm text-slate-500"> <div className="whitespace-wrap col-span-1 my-auto text-center text-sm text-slate-500">
<div className="m-4 h-4 animate-pulse rounded-full bg-slate-200"></div> <div className="m-4 h-4 animate-pulse rounded-full bg-slate-200"></div>
</div> </div>
<div className="col-span-1 my-auto whitespace-normal text-center text-sm text-slate-500"> <div className="col-span-1 my-auto text-center text-sm whitespace-normal text-slate-500">
<div className="m-4 h-4 animate-pulse rounded-full bg-slate-200"></div> <div className="m-4 h-4 animate-pulse rounded-full bg-slate-200"></div>
</div> </div>
</div> </div>

View File

@@ -44,7 +44,7 @@ export function LanguageIndicator({
}); });
return ( return (
<div className="absolute right-2 top-2"> <div className="absolute top-2 right-2">
<button <button
aria-expanded={showLanguageDropdown} aria-expanded={showLanguageDropdown}
aria-haspopup="true" aria-haspopup="true"
@@ -64,7 +64,7 @@ export function LanguageIndicator({
language.language.code !== languageToBeDisplayed?.language.code && language.language.code !== languageToBeDisplayed?.language.code &&
language.enabled && ( language.enabled && (
<button <button
className="block w-full rounded-sm p-1 text-left hover:bg-slate-700" className="block w-full rounded-xs p-1 text-left hover:bg-slate-700"
key={language.language.id} key={language.language.id}
onClick={() => { onClick={() => {
changeLanguage(language); changeLanguage(language);

View File

@@ -15,17 +15,17 @@ export const TeamsLoading = () => {
</PageHeader> </PageHeader>
<div className="p-4"> <div className="p-4">
<div className="mb-4"> <div className="mb-4">
<div className="h-6 w-1/3 animate-pulse rounded bg-slate-200" /> <div className="h-6 w-1/3 animate-pulse rounded-sm bg-slate-200" />
</div> </div>
<div className="space-y-4"> <div className="space-y-4">
{[...Array(3)].map((_, idx) => ( {[...Array(3)].map((_, idx) => (
<div <div
key={idx} key={idx}
className="flex animate-pulse items-center space-x-4 rounded border border-slate-200 p-4"> className="flex animate-pulse items-center space-x-4 rounded-sm border border-slate-200 p-4">
<div className="h-10 w-10 rounded-full bg-slate-300" /> <div className="h-10 w-10 rounded-full bg-slate-300" />
<div className="flex-1 space-y-2"> <div className="flex-1 space-y-2">
<div className="h-4 w-3/4 rounded bg-slate-200" /> <div className="h-4 w-3/4 rounded-sm bg-slate-200" />
<div className="h-4 w-1/2 rounded bg-slate-200" /> <div className="h-4 w-1/2 rounded-sm bg-slate-200" />
</div> </div>
</div> </div>
))} ))}

View File

@@ -207,7 +207,7 @@ export const TeamSettingsModal = ({
<div className="sticky top-0 flex h-full flex-col rounded-lg"> <div className="sticky top-0 flex h-full flex-col rounded-lg">
<button <button
className={cn( className={cn(
"absolute right-0 top-0 hidden pr-4 pt-4 text-slate-400 hover:text-slate-500 focus:outline-none focus:ring-0 sm:block" "absolute top-0 right-0 hidden pt-4 pr-4 text-slate-400 hover:text-slate-500 focus:ring-0 focus:outline-hidden sm:block"
)} )}
onClick={closeSettingsModal}> onClick={closeSettingsModal}>
<XIcon className="h-6 w-6 rounded-md bg-white" /> <XIcon className="h-6 w-6 rounded-md bg-white" />

View File

@@ -86,7 +86,7 @@ export const ConfirmPasswordForm = ({
required required
onChange={(password) => field.onChange(password)} onChange={(password) => field.onChange(password)}
value={field.value} value={field.value}
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-xs sm:text-sm"
/> />
{error?.message && <FormError className="text-left">{error.message}</FormError>} {error?.message && <FormError className="text-left">{error.message}</FormError>}
</FormItem> </FormItem>

View File

@@ -101,7 +101,7 @@ export const DisableTwoFactorModal = ({ open, setOpen }: DisableTwoFactorModalPr
required required
onChange={(password) => field.onChange(password)} onChange={(password) => field.onChange(password)}
value={field.value} value={field.value}
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-xs sm:text-sm"
/> />
{error?.message && <FormError className="text-left">{error.message}</FormError>} {error?.message && <FormError className="text-left">{error.message}</FormError>}
</FormItem> </FormItem>

View File

@@ -37,7 +37,7 @@ export const TwoFactorBackup = ({ form }: TwoFactorBackupProps) => {
id="totpBackup" id="totpBackup"
required required
placeholder="XXXXX-XXXXX" placeholder="XXXXX-XXXXX"
className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-sm sm:text-sm" className="focus:border-brand-dark focus:ring-brand-dark block w-full rounded-md border-slate-300 shadow-xs sm:text-sm"
value={field.value} value={field.value}
onChange={(e) => field.onChange(e.target.value)} onChange={(e) => field.onChange(e.target.value)}
/> />

View File

@@ -24,7 +24,7 @@ export const renderEmailResponseValue = async (
{Array.isArray(response) && {Array.isArray(response) &&
response.map((responseItem) => ( response.map((responseItem) => (
<Link <Link
className="mt-2 flex flex-col items-center justify-center rounded-lg bg-slate-200 p-2 text-black shadow-sm" className="mt-2 flex flex-col items-center justify-center rounded-lg bg-slate-200 p-2 text-black shadow-xs"
href={responseItem} href={responseItem}
key={responseItem}> key={responseItem}>
<FileIcon /> <FileIcon />
@@ -58,7 +58,7 @@ export const renderEmailResponseValue = async (
item && ( item && (
<Row key={item} className="mb-1 flex items-center"> <Row key={item} className="mb-1 flex items-center">
<Column className="w-6 text-slate-400">#{index + 1}</Column> <Column className="w-6 text-slate-400">#{index + 1}</Column>
<Column className="rounded bg-slate-100 px-2 py-1">{item}</Column> <Column className="rounded-sm bg-slate-100 px-2 py-1">{item}</Column>
</Row> </Row>
) )
)} )}
@@ -67,7 +67,7 @@ export const renderEmailResponseValue = async (
); );
default: default:
return <Text className="mt-0 whitespace-pre-wrap break-words font-bold">{response}</Text>; return <Text className="mt-0 font-bold break-words whitespace-pre-wrap">{response}</Text>;
} }
}; };
@@ -128,7 +128,7 @@ export async function ResponseFinishedEmail({
)} )}
{variable.name} {variable.name}
</Text> </Text>
<Text className="mt-0 whitespace-pre-wrap break-words font-bold"> <Text className="mt-0 font-bold break-words whitespace-pre-wrap">
{variableResponse} {variableResponse}
</Text> </Text>
</Column> </Column>
@@ -146,7 +146,7 @@ export async function ResponseFinishedEmail({
<Text className="mb-2 flex items-center gap-2 font-medium"> <Text className="mb-2 flex items-center gap-2 font-medium">
{hiddenFieldId} <EyeOffIcon /> {hiddenFieldId} <EyeOffIcon />
</Text> </Text>
<Text className="mt-0 whitespace-pre-wrap break-words font-bold"> <Text className="mt-0 font-bold break-words whitespace-pre-wrap">
{hiddenFieldResponse} {hiddenFieldResponse}
</Text> </Text>
</Column> </Column>

View File

@@ -246,7 +246,7 @@ export const AddApiKeyModal = ({
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden">
<span className="flex w-4/5 flex-1"> <span className="flex w-4/5 flex-1">
<span className="w-full truncate text-left">{permission.projectName}</span> <span className="w-full truncate text-left">{permission.projectName}</span>
</span> </span>
@@ -275,7 +275,7 @@ export const AddApiKeyModal = ({
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden">
<span className="flex w-4/5 flex-1"> <span className="flex w-4/5 flex-1">
<span className="w-full truncate text-left capitalize"> <span className="w-full truncate text-left capitalize">
{permission.environmentType} {permission.environmentType}
@@ -306,7 +306,7 @@ export const AddApiKeyModal = ({
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden">
<span className="flex w-4/5 flex-1"> <span className="flex w-4/5 flex-1">
<span className="w-full truncate text-left capitalize"> <span className="w-full truncate text-left capitalize">
{permission.permission} {permission.permission}

View File

@@ -129,14 +129,14 @@ export const EditAPIKeys = ({ organizationId, apiKeys, locale, isReadOnly, proje
</div> </div>
<div className="grid-cols-9"> <div className="grid-cols-9">
{apiKeysLocal?.length === 0 ? ( {apiKeysLocal?.length === 0 ? (
<div className="flex h-12 items-center justify-center whitespace-nowrap px-6 text-sm font-medium text-slate-400"> <div className="flex h-12 items-center justify-center px-6 text-sm font-medium whitespace-nowrap text-slate-400">
{t("environments.project.api_keys.no_api_keys_yet")} {t("environments.project.api_keys.no_api_keys_yet")}
</div> </div>
) : ( ) : (
apiKeysLocal?.map((apiKey) => ( apiKeysLocal?.map((apiKey) => (
<div <div
role="button" role="button"
className="grid h-12 w-full grid-cols-10 content-center items-center rounded-lg px-6 text-left text-sm text-slate-900 hover:bg-slate-50 focus:bg-slate-50 focus:outline-none" className="grid h-12 w-full grid-cols-10 content-center items-center rounded-lg px-6 text-left text-sm text-slate-900 hover:bg-slate-50 focus:bg-slate-50 focus:outline-hidden"
onClick={() => { onClick={() => {
setActiveKey(apiKey); setActiveKey(apiKey);
setViewPermissionsOpen(true); setViewPermissionsOpen(true);

View File

@@ -62,7 +62,7 @@ export const ViewPermissionModal = ({ open, setOpen, apiKey, projects }: ViewPer
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden">
<span className="flex w-4/5 flex-1"> <span className="flex w-4/5 flex-1">
<span className="w-full truncate text-left"> <span className="w-full truncate text-left">
{getProjectName(permission.environmentId)} {getProjectName(permission.environmentId)}
@@ -79,7 +79,7 @@ export const ViewPermissionModal = ({ open, setOpen, apiKey, projects }: ViewPer
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden">
<span className="flex w-4/5 flex-1"> <span className="flex w-4/5 flex-1">
<span className="w-full truncate text-left capitalize"> <span className="w-full truncate text-left capitalize">
{getEnvironmentName(permission.environmentId)} {getEnvironmentName(permission.environmentId)}
@@ -96,7 +96,7 @@ export const ViewPermissionModal = ({ open, setOpen, apiKey, projects }: ViewPer
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden">
<span className="flex w-4/5 flex-1"> <span className="flex w-4/5 flex-1">
<span className="w-full truncate text-left capitalize"> <span className="w-full truncate text-left capitalize">
{permission.permission} {permission.permission}

View File

@@ -8,9 +8,9 @@ import { useTranslate } from "@tolgee/react";
const LoadingCard = () => { const LoadingCard = () => {
const { t } = useTranslate(); const { t } = useTranslate();
return ( return (
<div className="w-full max-w-4xl rounded-xl border border-slate-200 bg-white py-4 shadow-sm"> <div className="w-full max-w-4xl rounded-xl border border-slate-200 bg-white py-4 shadow-xs">
<div className="grid content-center border-b border-slate-200 px-4 pb-4 text-left text-slate-900"> <div className="grid content-center border-b border-slate-200 px-4 pb-4 text-left text-slate-900">
<h3 className="h-6 w-full max-w-56 animate-pulse rounded-lg bg-slate-100 text-lg font-medium leading-6"></h3> <h3 className="h-6 w-full max-w-56 animate-pulse rounded-lg bg-slate-100 text-lg leading-6 font-medium"></h3>
<p className="mt-3 h-4 w-full max-w-80 animate-pulse rounded-lg bg-slate-100 text-sm text-slate-500"></p> <p className="mt-3 h-4 w-full max-w-80 animate-pulse rounded-lg bg-slate-100 text-sm text-slate-500"></p>
</div> </div>
<div className="w-full"> <div className="w-full">
@@ -45,7 +45,7 @@ const Loading = ({ isFormbricksCloud }: { isFormbricksCloud: boolean }) => {
<PageHeader pageTitle={t("environments.settings.general.organization_settings")}> <PageHeader pageTitle={t("environments.settings.general.organization_settings")}>
<OrganizationSettingsNavbar isFormbricksCloud={isFormbricksCloud} activeId="api-keys" loading /> <OrganizationSettingsNavbar isFormbricksCloud={isFormbricksCloud} activeId="api-keys" loading />
</PageHeader> </PageHeader>
<div className="mt-4 flex max-w-4xl animate-pulse items-center space-y-4 rounded-lg border bg-blue-50 p-6 text-sm text-blue-900 shadow-sm md:space-y-0 md:text-base"></div> <div className="mt-4 flex max-w-4xl animate-pulse items-center space-y-4 rounded-lg border bg-blue-50 p-6 text-sm text-blue-900 shadow-xs md:space-y-0 md:text-base"></div>
<LoadingCard /> <LoadingCard />
</PageContentWrapper> </PageContentWrapper>
); );

View File

@@ -71,7 +71,7 @@ export const InviteMemberModal = ({
<div className="sticky top-0 flex h-full flex-col rounded-lg"> <div className="sticky top-0 flex h-full flex-col rounded-lg">
<button <button
className={cn( className={cn(
"absolute right-0 top-0 hidden pr-4 pt-4 text-slate-400 hover:text-slate-500 focus:outline-none focus:ring-0 sm:block" "absolute top-0 right-0 hidden pt-4 pr-4 text-slate-400 hover:text-slate-500 focus:ring-0 focus:outline-hidden sm:block"
)} )}
onClick={() => { onClick={() => {
setOpen(false); setOpen(false);

View File

@@ -124,7 +124,7 @@ export const ProjectSwitcher = ({
<DropdownMenuTrigger <DropdownMenuTrigger
asChild asChild
id="projectDropdownTrigger" id="projectDropdownTrigger"
className="w-full rounded-br-xl border-t py-4 transition-colors duration-200 hover:bg-slate-50 focus:outline-none"> className="w-full rounded-br-xl border-t py-4 transition-colors duration-200 hover:bg-slate-50 focus:outline-hidden">
<div <div
tabIndex={0} tabIndex={0}
className={cn( className={cn(

View File

@@ -38,7 +38,7 @@ export const AppConnectionLoading = () => {
<PageHeader pageTitle={t("common.project_configuration")}> <PageHeader pageTitle={t("common.project_configuration")}>
<ProjectConfigNavigation activeId="app-connection" loading /> <ProjectConfigNavigation activeId="app-connection" loading />
</PageHeader> </PageHeader>
<div className="mt-4 flex max-w-4xl animate-pulse items-center space-y-4 rounded-lg border bg-blue-50 p-6 text-sm text-blue-900 shadow-sm md:space-y-0 md:text-base"></div> <div className="mt-4 flex max-w-4xl animate-pulse items-center space-y-4 rounded-lg border bg-blue-50 p-6 text-sm text-blue-900 shadow-xs md:space-y-0 md:text-base"></div>
{cards.map((card, index) => ( {cards.map((card, index) => (
<LoadingCard key={index} {...card} /> <LoadingCard key={index} {...card} />
))} ))}

View File

@@ -114,12 +114,12 @@ export const EditPlacementForm = ({ project, isReadOnly }: EditPlacementProps) =
<div <div
className={cn( className={cn(
clickOutsideClose ? "" : "cursor-not-allowed", clickOutsideClose ? "" : "cursor-not-allowed",
"relative ml-8 h-40 w-full rounded", "relative ml-8 h-40 w-full rounded-sm",
overlayStyle overlayStyle
)}> )}>
<div <div
className={cn( className={cn(
"absolute h-16 w-16 cursor-default rounded bg-slate-700", "absolute h-16 w-16 cursor-default rounded-sm bg-slate-700",
getPlacementStyle(currentPlacement) getPlacementStyle(currentPlacement)
)}></div> )}></div>
</div> </div>

View File

@@ -145,11 +145,11 @@ export const ProjectLookSettingsLoading = () => {
</div> </div>
))} ))}
</RadioGroup> </RadioGroup>
<div className="relative ml-8 h-40 w-full rounded bg-slate-200"> <div className="relative ml-8 h-40 w-full rounded-sm bg-slate-200">
<div className={cn("absolute bottom-3 h-16 w-16 rounded bg-slate-700 sm:right-3")}></div> <div className={cn("absolute bottom-3 h-16 w-16 rounded-sm bg-slate-700 sm:right-3")}></div>
</div> </div>
</div> </div>
<Button className="pointer-events-none mt-4 animate-pulse cursor-not-allowed select-none bg-slate-200"> <Button className="pointer-events-none mt-4 animate-pulse cursor-not-allowed bg-slate-200 select-none">
{t("common.loading")} {t("common.loading")}
</Button> </Button>
</div> </div>
@@ -159,7 +159,7 @@ export const ProjectLookSettingsLoading = () => {
title="Formbricks Signature" title="Formbricks Signature"
description="We love your support but understand if you toggle it off."> description="We love your support but understand if you toggle it off.">
<div className="w-full items-center"> <div className="w-full items-center">
<div className="pointer-events-none flex cursor-not-allowed select-none items-center space-x-2"> <div className="pointer-events-none flex cursor-not-allowed items-center space-x-2 select-none">
<Switch id="signature" checked={false} /> <Switch id="signature" checked={false} />
<Label htmlFor="signature">{t("environments.project.look.show_powered_by_formbricks")}</Label> <Label htmlFor="signature">{t("environments.project.look.show_powered_by_formbricks")}</Label>
</div> </div>

View File

@@ -179,7 +179,7 @@ export const RecallItemSelect = ({
} }
}} }}
/> />
<div className="max-h-72 overflow-y-auto overflow-x-hidden"> <div className="max-h-72 overflow-x-hidden overflow-y-auto">
{filteredRecallItems.map((recallItem, index) => { {filteredRecallItems.map((recallItem, index) => {
const IconComponent = getRecallItemIcon(recallItem); const IconComponent = getRecallItemIcon(recallItem);
return ( return (
@@ -192,7 +192,7 @@ export const RecallItemSelect = ({
setShowRecallItemSelect(false); setShowRecallItemSelect(false);
}} }}
autoFocus={false} autoFocus={false}
className="flex w-full cursor-pointer items-center rounded-md p-2 focus:bg-slate-200 focus:outline-none" className="flex w-full cursor-pointer items-center rounded-md p-2 focus:bg-slate-200 focus:outline-hidden"
onKeyDown={(e) => { onKeyDown={(e) => {
if (e.key === "ArrowUp" && index === 0) { if (e.key === "ArrowUp" && index === 0) {
document.getElementById("recallItemSearchInput")?.focus(); document.getElementById("recallItemSearchInput")?.focus();
@@ -201,7 +201,7 @@ export const RecallItemSelect = ({
} }
}}> }}>
<div>{IconComponent && <IconComponent className="mr-2 w-4" />}</div> <div>{IconComponent && <IconComponent className="mr-2 w-4" />}</div>
<p className="max-w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm"> <p className="max-w-full overflow-hidden text-sm text-ellipsis whitespace-nowrap">
{getRecallLabel(recallItem.label)} {getRecallLabel(recallItem.label)}
</p> </p>
</DropdownMenuItem> </DropdownMenuItem>

View File

@@ -220,7 +220,7 @@ export const RecallWrapper = ({
} }
parts.push( parts.push(
<span <span
className="z-30 flex h-fit cursor-pointer justify-center whitespace-pre rounded-md bg-slate-100 text-sm text-transparent" className="z-30 flex h-fit cursor-pointer justify-center rounded-md bg-slate-100 text-sm whitespace-pre text-transparent"
key={`recall-${parts.length}`}> key={`recall-${parts.length}`}>
{"@" + label} {"@" + label}
</span> </span>
@@ -255,7 +255,7 @@ export const RecallWrapper = ({
<Button <Button
variant="ghost" variant="ghost"
type="button" type="button"
className="absolute right-2 top-full z-[1] flex h-6 cursor-pointer items-center rounded-b-lg rounded-t-none bg-slate-100 px-2.5 py-0 text-xs hover:bg-slate-200" className="absolute top-full right-2 z-1 flex h-6 cursor-pointer items-center rounded-t-none rounded-b-lg bg-slate-100 px-2.5 py-0 text-xs hover:bg-slate-200"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();
setShowFallbackInput(true); setShowFallbackInput(true);

View File

@@ -41,8 +41,8 @@ export const TemplateFilters = ({
className={cn( className={cn(
selectedFilter[index] === null selectedFilter[index] === null
? "bg-slate-800 font-semibold text-white" ? "bg-slate-800 font-semibold text-white"
: "bg-white text-slate-700 hover:bg-slate-100 focus:scale-105 focus:bg-slate-100 focus:outline-none focus:ring-0", : "bg-white text-slate-700 hover:bg-slate-100 focus:scale-105 focus:bg-slate-100 focus:ring-0 focus:outline-hidden",
"rounded border border-slate-800 px-2 py-1 text-xs transition-all duration-150" "rounded-sm border border-slate-800 px-2 py-1 text-xs transition-all duration-150"
)}> )}>
{index === 0 {index === 0
? t("environments.surveys.templates.all_channels") ? t("environments.surveys.templates.all_channels")
@@ -59,8 +59,8 @@ export const TemplateFilters = ({
className={cn( className={cn(
selectedFilter[index] === filter.value selectedFilter[index] === filter.value
? "bg-slate-800 font-semibold text-white" ? "bg-slate-800 font-semibold text-white"
: "bg-white text-slate-700 hover:bg-slate-100 focus:scale-105 focus:bg-slate-100 focus:outline-none focus:ring-0", : "bg-white text-slate-700 hover:bg-slate-100 focus:scale-105 focus:bg-slate-100 focus:ring-0 focus:outline-hidden",
"rounded border border-slate-800 px-2 py-1 text-xs transition-all duration-150" "rounded-sm border border-slate-800 px-2 py-1 text-xs transition-all duration-150"
)}> )}>
{t(filter.label)} {t(filter.label)}
</button> </button>

View File

@@ -93,17 +93,21 @@ export const TemplateTags = ({ template, selectedFilter }: TemplateTagsProps) =>
return ( return (
<div className="flex flex-wrap gap-1.5"> <div className="flex flex-wrap gap-1.5">
<div className={cn("rounded border px-1.5 py-0.5 text-xs", roleBasedStyling)}>{t(roleTag ?? "")}</div> <div className={cn("rounded-sm border px-1.5 py-0.5 text-xs", roleBasedStyling)}>
{t(roleTag ?? "")}
</div>
{industryTag && ( {industryTag && (
<div <div
className={cn("rounded border border-slate-300 bg-slate-50 px-1.5 py-0.5 text-xs text-slate-500")}> className={cn(
"rounded-sm border border-slate-300 bg-slate-50 px-1.5 py-0.5 text-xs text-slate-500"
)}>
{industryTag} {industryTag}
</div> </div>
)} )}
{channelTag && ( {channelTag && (
<div <div
className={cn( className={cn(
"flex-nowrap rounded border border-slate-300 bg-slate-50 px-1.5 py-0.5 text-xs text-slate-500" "flex-nowrap rounded-sm border border-slate-300 bg-slate-50 px-1.5 py-0.5 text-xs text-slate-500"
)}> )}>
{channelTag} {channelTag}
</div> </div>
@@ -112,7 +116,7 @@ export const TemplateTags = ({ template, selectedFilter }: TemplateTagsProps) =>
<TooltipRenderer <TooltipRenderer
tooltipContent={t("environments.surveys.templates.uses_branching_logic")} tooltipContent={t("environments.surveys.templates.uses_branching_logic")}
shouldRender={true}> shouldRender={true}>
<SplitIcon className="h-5 w-5 rounded border border-slate-300 bg-slate-50 p-0.5 text-slate-400" /> <SplitIcon className="h-5 w-5 rounded-sm border border-slate-300 bg-slate-50 p-0.5 text-slate-400" />
</TooltipRenderer> </TooltipRenderer>
)} )}
</div> </div>

View File

@@ -46,10 +46,10 @@ export const Template = ({
key={template.name} key={template.name}
className={cn( className={cn(
activeTemplate?.name === template.name && "ring-2 ring-slate-400", activeTemplate?.name === template.name && "ring-2 ring-slate-400",
"duration-120 group relative cursor-pointer rounded-lg bg-white p-6 shadow transition-all duration-150 hover:ring-2 hover:ring-slate-300" "group relative cursor-pointer rounded-lg bg-white p-6 shadow-sm transition-all duration-120 duration-150 hover:ring-2 hover:ring-slate-300"
)}> )}>
<TemplateTags template={template} selectedFilter={selectedFilter} /> <TemplateTags template={template} selectedFilter={selectedFilter} />
<h3 className="text-md mb-1 mt-3 text-left font-bold text-slate-700">{template.name}</h3> <h3 className="text-md mt-3 mb-1 text-left font-bold text-slate-700">{template.name}</h3>
<p className="text-left text-xs text-slate-600">{template.description}</p> <p className="text-left text-xs text-slate-600">{template.description}</p>
{activeTemplate?.name === template.name && ( {activeTemplate?.name === template.name && (
<div className="flex justify-start"> <div className="flex justify-start">

View File

@@ -105,7 +105,7 @@ export const TemplateList = ({
}; };
return ( return (
<main className="relative z-0 flex-1 overflow-y-auto px-6 pb-6 pt-2 focus:outline-none"> <main className="relative z-0 flex-1 overflow-y-auto px-6 pt-2 pb-6 focus:outline-hidden">
{showFilters && !templateSearch && ( {showFilters && !templateSearch && (
<TemplateFilters <TemplateFilters
selectedFilter={selectedFilter} selectedFilter={selectedFilter}

View File

@@ -38,7 +38,7 @@ export const AddQuestionButton = ({ addQuestion, project, isCxMode }: AddQuestio
)}> )}>
<Collapsible.CollapsibleTrigger asChild className="group h-full w-full"> <Collapsible.CollapsibleTrigger asChild className="group h-full w-full">
<div className="inline-flex"> <div className="inline-flex">
<div className="bg-brand-dark flex w-10 items-center justify-center rounded-l-lg group-aria-expanded:rounded-bl-none group-aria-expanded:rounded-br"> <div className="bg-brand-dark flex w-10 items-center justify-center rounded-l-lg group-aria-expanded:rounded-br group-aria-expanded:rounded-bl-none">
<PlusIcon className="h-5 w-5 text-white" /> <PlusIcon className="h-5 w-5 text-white" />
</div> </div>
<div className="px-4 py-3"> <div className="px-4 py-3">
@@ -55,7 +55,7 @@ export const AddQuestionButton = ({ addQuestion, project, isCxMode }: AddQuestio
<button <button
type="button" type="button"
key={questionType.id} key={questionType.id}
className="group relative mx-2 inline-flex items-center justify-between rounded p-0.5 px-4 py-2 text-sm font-medium text-slate-700 last:mb-2 hover:bg-slate-100 hover:text-slate-800" className="group relative mx-2 inline-flex items-center justify-between rounded-sm p-0.5 px-4 py-2 text-sm font-medium text-slate-700 last:mb-2 hover:bg-slate-100 hover:text-slate-800"
onClick={() => { onClick={() => {
addQuestion({ addQuestion({
...universalQuestionPresets, ...universalQuestionPresets,
@@ -68,7 +68,7 @@ export const AddQuestionButton = ({ addQuestion, project, isCxMode }: AddQuestio
onMouseEnter={() => setHoveredQuestionId(questionType.id)} onMouseEnter={() => setHoveredQuestionId(questionType.id)}
onMouseLeave={() => setHoveredQuestionId(null)}> onMouseLeave={() => setHoveredQuestionId(null)}>
<div className="flex items-center"> <div className="flex items-center">
<questionType.icon className="text-brand-dark -ml-0.5 mr-2 h-4 w-4" aria-hidden="true" /> <questionType.icon className="text-brand-dark mr-2 -ml-0.5 h-4 w-4" aria-hidden="true" />
{questionType.label} {questionType.label}
</div> </div>
<div <div

View File

@@ -88,7 +88,7 @@ export const AnimatedSurveyBg = ({ handleBgChange, background }: AnimatedSurveyB
<source src={`${key}`} type="video/mp4" /> <source src={`${key}`} type="video/mp4" />
</video> </video>
<input <input
className="absolute right-2 top-2 h-4 w-4 rounded-sm bg-white" className="absolute top-2 right-2 h-4 w-4 rounded-xs bg-white"
type="checkbox" type="checkbox"
checked={animation === value} checked={animation === value}
onChange={() => handleBg(value)} onChange={() => handleBg(value)}

View File

@@ -50,12 +50,12 @@ export const Placement = ({
<div <div
className={cn( className={cn(
clickOutsideClose ? "" : "cursor-not-allowed", clickOutsideClose ? "" : "cursor-not-allowed",
"relative ml-8 h-40 w-full rounded", "relative ml-8 h-40 w-full rounded-sm",
overlayStyle overlayStyle
)}> )}>
<div <div
className={cn( className={cn(
"absolute h-16 w-16 cursor-default rounded bg-slate-700", "absolute h-16 w-16 cursor-default rounded-sm bg-slate-700",
getPlacementStyle(currentPlacement) getPlacementStyle(currentPlacement)
)}></div> )}></div>
</div> </div>

View File

@@ -35,7 +35,7 @@ export const Dropdown = ({ options, defaultValue, onSelect, disabled = false }:
<DropdownMenu.Trigger asChild> <DropdownMenu.Trigger asChild>
<button <button
type="button" type="button"
className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-500 dark:text-slate-300"> className="flex h-10 w-full rounded-md border border-slate-300 bg-transparent px-3 py-2 text-sm text-slate-800 placeholder:text-slate-400 focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-500 dark:text-slate-300">
<span className="flex flex-1"> <span className="flex flex-1">
{selectedOption.icon && <selectedOption.icon className="mr-3 h-5 w-5" />} {selectedOption.icon && <selectedOption.icon className="mr-3 h-5 w-5" />}
<span>{selectedOption ? selectedOption.label : "Select an option"}</span> <span>{selectedOption ? selectedOption.label : "Select an option"}</span>
@@ -53,7 +53,7 @@ export const Dropdown = ({ options, defaultValue, onSelect, disabled = false }:
{options.map((option) => ( {options.map((option) => (
<DropdownMenu.Item <DropdownMenu.Item
key={option.value} key={option.value}
className="flex cursor-pointer items-center p-3 hover:bg-slate-100 hover:outline-none data-[disabled]:cursor-default data-[disabled]:opacity-50" className="flex cursor-pointer items-center p-3 hover:bg-slate-100 hover:outline-hidden data-disabled:cursor-default data-disabled:opacity-50"
disabled={disabled || option.disabled} disabled={disabled || option.disabled}
onSelect={() => handleSelect(option)}> onSelect={() => handleSelect(option)}>
{option.icon && <option.icon className="mr-3 h-5 w-5" />} {option.icon && <option.icon className="mr-3 h-5 w-5" />}

View File

@@ -160,7 +160,7 @@ export const SurveyEditor = ({
/> />
<div className="relative z-0 flex flex-1 overflow-hidden"> <div className="relative z-0 flex flex-1 overflow-hidden">
<main <main
className="relative z-0 w-1/2 flex-1 overflow-y-auto bg-slate-50 focus:outline-none" className="relative z-0 w-1/2 flex-1 overflow-y-auto bg-slate-50 focus:outline-hidden"
ref={surveyEditorRef}> ref={surveyEditorRef}>
<SurveyEditorTabs <SurveyEditorTabs
activeId={activeView} activeId={activeView}
@@ -235,7 +235,7 @@ export const SurveyEditor = ({
)} )}
</main> </main>
<aside className="group hidden flex-1 flex-shrink-0 items-center justify-center overflow-hidden border-l border-slate-200 bg-slate-100 shadow-inner md:flex md:flex-col"> <aside className="group hidden flex-1 shrink-0 items-center justify-center overflow-hidden border-l border-slate-200 bg-slate-100 shadow-inner md:flex md:flex-col">
<PreviewSurvey <PreviewSurvey
survey={localSurvey} survey={localSurvey}
questionId={activeQuestionId} questionId={activeQuestionId}

View File

@@ -188,7 +188,7 @@ export const SurveyMenuBar = ({
toast.error(`${messageSplit} ${invalidLanguageLabels.join(", ")}`); toast.error(`${messageSplit} ${invalidLanguageLabels.join(", ")}`);
} else { } else {
toast.error(currentError.message, { toast.error(currentError.message, {
className: "w-fit !max-w-md", className: "w-fit max-w-md!",
}); });
} }
@@ -329,7 +329,7 @@ export const SurveyMenuBar = ({
/> />
</div> </div>
{responseCount > 0 && ( {responseCount > 0 && (
<div className="flex items-center rounded-lg border border-amber-200 bg-amber-100 p-1.5 text-amber-800 shadow-sm lg:mx-auto"> <div className="flex items-center rounded-lg border border-amber-200 bg-amber-100 p-1.5 text-amber-800 shadow-xs lg:mx-auto">
<TooltipProvider delayDuration={50}> <TooltipProvider delayDuration={50}>
<Tooltip> <Tooltip>
<TooltipTrigger> <TooltipTrigger>
@@ -340,12 +340,12 @@ export const SurveyMenuBar = ({
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
</TooltipProvider> </TooltipProvider>
<p className="hidden text-ellipsis whitespace-nowrap pl-1.5 text-xs md:text-sm lg:block"> <p className="hidden pl-1.5 text-xs text-ellipsis whitespace-nowrap md:text-sm lg:block">
{cautionText} {cautionText}
</p> </p>
</div> </div>
)} )}
<div className="mt-3 flex sm:ml-4 sm:mt-0"> <div className="mt-3 flex sm:mt-0 sm:ml-4">
{!isCxMode && ( {!isCxMode && (
<Button <Button
disabled={disableSave} disabled={disableSave}

View File

@@ -192,7 +192,7 @@ export const ImageFromUnsplashSurveyBg = ({ handleBgChange }: ImageFromUnsplashS
return ( return (
<div className="relative mt-2 w-full"> <div className="relative mt-2 w-full">
<div className="relative"> <div className="relative">
<SearchIcon className="absolute left-2 top-1/2 h-6 w-4 -translate-y-1/2 text-slate-500" /> <SearchIcon className="absolute top-1/2 left-2 h-6 w-4 -translate-y-1/2 text-slate-500" />
<Input <Input
value={query} value={query}
onChange={handleChange} onChange={handleChange}
@@ -215,7 +215,7 @@ export const ImageFromUnsplashSurveyBg = ({ handleBgChange }: ImageFromUnsplashS
className="h-full cursor-pointer rounded-lg object-cover" className="h-full cursor-pointer rounded-lg object-cover"
/> />
{image.authorName && ( {image.authorName && (
<span className="absolute bottom-1 right-1 hidden rounded bg-black bg-opacity-75 px-2 py-1 text-xs text-white group-hover:block"> <span className="absolute right-1 bottom-1 hidden rounded-sm bg-black/75 px-2 py-1 text-xs text-white group-hover:block">
{image.authorName} {image.authorName}
</span> </span>
)} )}

View File

@@ -73,11 +73,11 @@ const FollowUpActionMultiEmailInput = ({
{emails.map((email, index) => ( {emails.map((email, index) => (
<div <div
key={index} key={index}
className="group flex items-center gap-1 rounded border border-slate-200 bg-slate-100 px-2 py-1 text-sm"> className="group flex items-center gap-1 rounded-sm border border-slate-200 bg-slate-100 px-2 py-1 text-sm">
<span className="text-slate-900">{email}</span> <span className="text-slate-900">{email}</span>
<button <button
onClick={() => removeEmail(index)} onClick={() => removeEmail(index)}
className="px-1 text-lg font-medium leading-none text-slate-500"> className="px-1 text-lg leading-none font-medium text-slate-500">
× ×
</button> </button>
</div> </div>

View File

@@ -20,7 +20,7 @@ export const LegalFooter = ({
if (!IMPRINT_URL && !PRIVACY_URL && !IS_FORMBRICKS_CLOUD) return null; if (!IMPRINT_URL && !PRIVACY_URL && !IS_FORMBRICKS_CLOUD) return null;
return ( return (
<div className="absolute bottom-0 z-[1500] h-10 w-full" role="contentinfo"> <div className="absolute bottom-0 z-1500 h-10 w-full" role="contentinfo">
<div className="mx-auto flex h-full max-w-2xl items-center justify-center p-2 text-center text-xs text-slate-500"> <div className="mx-auto flex h-full max-w-2xl items-center justify-center p-2 text-center text-xs text-slate-500">
{IMPRINT_URL && ( {IMPRINT_URL && (
<Link href={IMPRINT_URL} target="_blank" className="hover:underline" tabIndex={-1}> <Link href={IMPRINT_URL} target="_blank" className="hover:underline" tabIndex={-1}>

View File

@@ -82,7 +82,7 @@ export const LinkSurveyWrapper = ({
{!styling.isLogoHidden && project.logo?.url && <ClientLogo projectLogo={project.logo} />} {!styling.isLogoHidden && project.logo?.url && <ClientLogo projectLogo={project.logo} />}
<div className="h-full w-full max-w-4xl space-y-6 px-1.5"> <div className="h-full w-full max-w-4xl space-y-6 px-1.5">
{isPreview && ( {isPreview && (
<div className="fixed left-0 top-0 flex w-full items-center justify-between bg-slate-600 p-2 px-4 text-center text-sm text-white shadow-sm"> <div className="fixed top-0 left-0 flex w-full items-center justify-between bg-slate-600 p-2 px-4 text-center text-sm text-white shadow-xs">
<div /> <div />
Survey Preview 👀 Survey Preview 👀
<ResetProgressButton onClick={handleResetSurvey} /> <ResetProgressButton onClick={handleResetSurvey} />

View File

@@ -29,7 +29,7 @@ export const SurveyInactive = async ({
}; };
return ( return (
<div className="flex h-full flex-col items-center justify-between bg-gradient-to-br from-slate-200 to-slate-50 px-4 py-8 text-center"> <div className="flex h-full flex-col items-center justify-between bg-linear-to-br from-slate-200 to-slate-50 px-4 py-8 text-center">
<div></div> <div></div>
<div className="flex flex-col items-center space-y-3 text-slate-300"> <div className="flex flex-col items-center space-y-3 text-slate-300">
{icons[status]} {icons[status]}

View File

@@ -16,7 +16,7 @@ export const SurveyLinkUsed = ({ singleUseMessage }: SurveyLinkUsedProps) => {
const defaultHeading = t("s.survey_already_answered_heading"); const defaultHeading = t("s.survey_already_answered_heading");
const defaultSubheading = t("s.survey_already_answered_subheading"); const defaultSubheading = t("s.survey_already_answered_subheading");
return ( return (
<div className="flex min-h-screen flex-col items-center justify-between bg-gradient-to-tr from-slate-200 to-slate-50 py-8 text-center"> <div className="flex min-h-screen flex-col items-center justify-between bg-linear-to-tr from-slate-200 to-slate-50 py-8 text-center">
<div></div> <div></div>
<div className="flex flex-col items-center space-y-3 text-slate-300"> <div className="flex flex-col items-center space-y-3 text-slate-300">
<CheckCircle2Icon className="h-20 w-20" /> <CheckCircle2Icon className="h-20 w-20" />

View File

@@ -113,7 +113,7 @@ export const SurveyLoadingAnimation = ({
return ( return (
<div <div
className={cn( className={cn(
"absolute inset-0 z-[5000] flex items-center justify-center transition-colors duration-1000", "absolute inset-0 z-5000 flex items-center justify-center transition-colors duration-1000",
isReadyToTransition ? "bg-transparent" : "bg-white", isReadyToTransition ? "bg-transparent" : "bg-white",
isHidden && "hidden" isHidden && "hidden"
)}> )}>

View File

@@ -170,7 +170,7 @@ export const VerifyEmail = ({
{!emailSent && showPreviewQuestions && ( {!emailSent && showPreviewQuestions && (
<div> <div>
<p className="text-2xl font-bold">{t("s.question_preview")}</p> <p className="text-2xl font-bold">{t("s.question_preview")}</p>
<div className="mt-4 flex w-full flex-col justify-center rounded-lg border border-slate-200 bg-slate-50 bg-opacity-20 p-8 text-slate-700"> <div className="mt-4 flex w-full flex-col justify-center rounded-lg border border-slate-200 bg-slate-50/20 p-8 text-slate-700">
{localSurvey.questions.map((question, index) => ( {localSurvey.questions.map((question, index) => (
<p <p
key={index} key={index}

View File

@@ -7,7 +7,7 @@ import footerLogo from "./lib/footerlogo.svg";
export const LinkSurveyNotFound = () => { export const LinkSurveyNotFound = () => {
return ( return (
<div className="flex h-full flex-col items-center justify-between bg-gradient-to-br from-slate-200 to-slate-50 py-8 text-center"> <div className="flex h-full flex-col items-center justify-between bg-linear-to-br from-slate-200 to-slate-50 py-8 text-center">
<div></div> <div></div>
<div className="flex flex-col items-center space-y-3 text-slate-300"> <div className="flex flex-col items-center space-y-3 text-slate-300">
<HelpCircleIcon className="h-20 w-20" />, <HelpCircleIcon className="h-20 w-20" />,

View File

@@ -64,7 +64,7 @@ export const SurveyCard = ({
<> <>
<div <div
className={cn( className={cn(
"grid w-full grid-cols-8 place-items-center gap-3 rounded-xl border border-slate-200 bg-white p-4 pr-8 shadow-sm transition-colors ease-in-out", "grid w-full grid-cols-8 place-items-center gap-3 rounded-xl border border-slate-200 bg-white p-4 pr-8 shadow-xs transition-colors ease-in-out",
!isDraftAndReadOnly && "hover:border-slate-400" !isDraftAndReadOnly && "hover:border-slate-400"
)}> )}>
<div className="col-span-2 flex max-w-full items-center justify-self-start text-sm font-medium text-slate-900"> <div className="col-span-2 flex max-w-full items-center justify-self-start text-sm font-medium text-slate-900">
@@ -72,7 +72,7 @@ export const SurveyCard = ({
</div> </div>
<div <div
className={cn( className={cn(
"col-span-1 flex w-fit items-center gap-2 whitespace-nowrap rounded-full py-1 pl-1 pr-2 text-sm text-slate-800", "col-span-1 flex w-fit items-center gap-2 rounded-full py-1 pr-2 pl-1 text-sm whitespace-nowrap text-slate-800",
surveyStatusLabel === "Scheduled" && "bg-slate-200", surveyStatusLabel === "Scheduled" && "bg-slate-200",
surveyStatusLabel === "In Progress" && "bg-emerald-50", surveyStatusLabel === "In Progress" && "bg-emerald-50",
surveyStatusLabel === "Completed" && "bg-slate-200", surveyStatusLabel === "Completed" && "bg-slate-200",
@@ -81,23 +81,23 @@ export const SurveyCard = ({
)}> )}>
<SurveyStatusIndicator status={survey.status} /> {surveyStatusLabel}{" "} <SurveyStatusIndicator status={survey.status} /> {surveyStatusLabel}{" "}
</div> </div>
<div className="col-span-1 max-w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm text-slate-600"> <div className="col-span-1 max-w-full overflow-hidden text-sm text-ellipsis whitespace-nowrap text-slate-600">
{survey.responseCount} {survey.responseCount}
</div> </div>
<div className="col-span-1 flex justify-between"> <div className="col-span-1 flex justify-between">
<SurveyTypeIndicator type={survey.type} /> <SurveyTypeIndicator type={survey.type} />
</div> </div>
<div className="col-span-1 max-w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm text-slate-600"> <div className="col-span-1 max-w-full overflow-hidden text-sm text-ellipsis whitespace-nowrap text-slate-600">
{convertDateString(survey.createdAt.toString())} {convertDateString(survey.createdAt.toString())}
</div> </div>
<div className="col-span-1 max-w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm text-slate-600"> <div className="col-span-1 max-w-full overflow-hidden text-sm text-ellipsis whitespace-nowrap text-slate-600">
{timeSince(survey.updatedAt.toString(), locale)} {timeSince(survey.updatedAt.toString(), locale)}
</div> </div>
<div className="col-span-1 max-w-full overflow-hidden text-ellipsis whitespace-nowrap text-sm text-slate-600"> <div className="col-span-1 max-w-full overflow-hidden text-sm text-ellipsis whitespace-nowrap text-slate-600">
{survey.creator ? survey.creator.name : "-"} {survey.creator ? survey.creator.name : "-"}
</div> </div>
</div> </div>
<div className="absolute right-3 top-3.5"> <div className="absolute top-3.5 right-3">
<SurveyDropDownMenu <SurveyDropDownMenu
survey={survey} survey={survey}
key={`surveys-${survey.id}`} key={`surveys-${survey.id}`}

View File

@@ -31,7 +31,7 @@ export const SurveyFilterDropdown = ({
toggleDropdown, toggleDropdown,
}: SurveyFilterDropdownProps) => { }: SurveyFilterDropdownProps) => {
const { t } = useTranslate(); const { t } = useTranslate();
const triggerClasses = `surveyFilterDropdown min-w-auto h-8 rounded-md border border-slate-700 sm:px-2 cursor-pointer outline-none const triggerClasses = `surveyFilterDropdown min-w-auto h-8 rounded-md border border-slate-700 sm:px-2 cursor-pointer outline-hidden
${selectedOptions.length > 0 ? "bg-slate-900 text-white" : "hover:bg-slate-900"}`; ${selectedOptions.length > 0 ? "bg-slate-900 text-white" : "hover:bg-slate-900"}`;
return ( return (

View File

@@ -177,8 +177,8 @@ export const SurveyFilters = ({
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger <DropdownMenuTrigger
asChild asChild
className="surveyFilterDropdown h-full cursor-pointer border border-slate-700 outline-none hover:bg-slate-900"> className="surveyFilterDropdown h-full cursor-pointer border border-slate-700 outline-hidden hover:bg-slate-900">
<div className="min-w-auto h-8 rounded-md border sm:flex sm:px-2"> <div className="h-8 min-w-auto rounded-md border sm:flex sm:px-2">
<div className="hidden w-full items-center justify-between hover:text-white sm:flex"> <div className="hidden w-full items-center justify-between hover:text-white sm:flex">
<span className="text-sm"> <span className="text-sm">
{t("common.sort_by")}:{" "} {t("common.sort_by")}:{" "}

View File

@@ -7,7 +7,7 @@ export const SurveyLoading = () => {
return ( return (
<div <div
key={i} key={i}
className="relative flex h-16 flex-col justify-between rounded-xl border border-slate-200 bg-white p-4 shadow-sm transition-all ease-in-out"> className="relative flex h-16 flex-col justify-between rounded-xl border border-slate-200 bg-white p-4 shadow-xs transition-all ease-in-out">
<div className="flex w-full items-center justify-between"> <div className="flex w-full items-center justify-between">
<div className="h-4 w-32 rounded-xl bg-slate-400"></div> <div className="h-4 w-32 rounded-xl bg-slate-400"></div>
<div className="h-4 w-20 rounded-xl bg-slate-200"></div> <div className="h-4 w-20 rounded-xl bg-slate-200"></div>

Some files were not shown because too many files have changed in this diff Show More