-
- Responses Overview
-
-
- {stats.map((item) => (
-
- ))}
-
-
- {summary.pages.map(
+ <>
+
+ Responses Overview
+
+
+ {stats.map((item) => (
+
+ ))}
+
+
+ {summary?.pages &&
+ summary.pages.map(
(page) =>
page.type === "form" && (
@@ -90,8 +90,7 @@ export default function ResultsSummary({ formId }) {
)
)}
-
-
+ >
);
}
diff --git a/lib/navigation/formCodeSecondNavigation.ts b/lib/navigation/formCodeSecondNavigation.ts
new file mode 100644
index 0000000000..3a40eecb16
--- /dev/null
+++ b/lib/navigation/formCodeSecondNavigation.ts
@@ -0,0 +1,47 @@
+import { DocumentSearchIcon, TerminalIcon } from "@heroicons/react/outline";
+import { useRouter } from "next/router";
+import { FaReact } from "react-icons/fa";
+
+export const useCodeSecondNavigation = (formId) => {
+ const router = useRouter();
+ return [
+ {
+ id: "formId",
+ onClick: () => {
+ router.push(`/forms/${formId}/form`);
+ },
+ Icon: TerminalIcon,
+ label: "Form ID",
+ },
+ {
+ id: "react",
+ onClick: () => {
+ router.push(`/forms/${formId}/form/react`);
+ },
+ Icon: FaReact,
+ label: "React",
+ },
+ {
+ id: "reactNative",
+ onClick: () => {},
+ Icon: FaReact,
+ label: "React Native",
+ disabled: true,
+ },
+ {
+ id: "vueJs",
+ onClick: () => {},
+ Icon: TerminalIcon,
+ label: "VueJs",
+ disabled: true,
+ },
+ {
+ id: "docs",
+ onClick: () => {
+ window.open("https://docs.snoopforms.com", "_ blank");
+ },
+ Icon: DocumentSearchIcon,
+ label: "Docs",
+ },
+ ];
+};
diff --git a/lib/navigation/formMenuSteps.ts b/lib/navigation/formMenuSteps.ts
new file mode 100644
index 0000000000..999a46e1ab
--- /dev/null
+++ b/lib/navigation/formMenuSteps.ts
@@ -0,0 +1,17 @@
+export const useFormMenuSteps = (formId) => [
+ {
+ id: "form",
+ name: "Form",
+ href: `/forms/${formId}/form`,
+ },
+ {
+ id: "pipelines",
+ name: "Pipelines",
+ href: `/forms/${formId}/pipelines`,
+ },
+ {
+ id: "results",
+ name: "Results",
+ href: `/forms/${formId}/results/summary`,
+ },
+];
diff --git a/lib/navigation/formResultsSecondNavigation.ts b/lib/navigation/formResultsSecondNavigation.ts
new file mode 100644
index 0000000000..9937b363f5
--- /dev/null
+++ b/lib/navigation/formResultsSecondNavigation.ts
@@ -0,0 +1,36 @@
+import {
+ ChartBarIcon,
+ InboxIcon,
+ TrendingUpIcon,
+} from "@heroicons/react/outline";
+import { useRouter } from "next/router";
+
+export const useFormResultsSecondNavigation = (formId) => {
+ const router = useRouter();
+ return [
+ {
+ id: "summary",
+ onClick: () => {
+ router.push(`/forms/${formId}/results/summary`);
+ },
+ Icon: ChartBarIcon,
+ label: "Summary",
+ },
+ {
+ id: "responses",
+ onClick: () => {
+ router.push(`/forms/${formId}/results/responses`);
+ },
+ Icon: InboxIcon,
+ label: "Responses",
+ },
+ {
+ id: "analytics",
+ onClick: () => {
+ router.push(`/forms/${formId}/results/analytics`);
+ },
+ Icon: TrendingUpIcon,
+ label: "Analytics",
+ },
+ ];
+};
diff --git a/pages/forms/[id]/form.tsx b/pages/forms/[id]/form.tsx
deleted file mode 100644
index 27bc420ae1..0000000000
--- a/pages/forms/[id]/form.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { GetServerSideProps } from "next";
-import { getSession } from "next-auth/react";
-import { useRouter } from "next/router";
-import Builder from "../../../components/builder/Builder";
-import FormCode from "../../../components/form/FormCode";
-import LayoutFormBasics from "../../../components/layout/LayoutFormBasic";
-import LayoutFormBuilder from "../../../components/layout/LayoutFormBuilder";
-import Loading from "../../../components/Loading";
-import { useForm } from "../../../lib/forms";
-
-export default function FormPage() {
- const router = useRouter();
- const formId = router.query.id.toString();
- const { form, isLoadingForm } = useForm(router.query.id);
-
- if (isLoadingForm) {
- return
;
- }
-
- if (form.formType === "NOCODE") {
- return (
- <>
-
-
-
- >
- );
- } else {
- return (
- <>
-
-
-
- >
- );
- }
-}
-
-export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
- const session = await getSession({ req });
- if (!session) {
- res.statusCode = 403;
- }
- return { props: {} };
-};
diff --git a/pages/forms/[id]/form/index.tsx b/pages/forms/[id]/form/index.tsx
new file mode 100644
index 0000000000..b00570de8f
--- /dev/null
+++ b/pages/forms/[id]/form/index.tsx
@@ -0,0 +1,67 @@
+import { GetServerSideProps } from "next";
+import { getSession } from "next-auth/react";
+import { useRouter } from "next/router";
+import Builder from "../../../../components/builder/Builder";
+import FormCode from "../../../../components/form/FormCode";
+import BaseLayoutAuthorized from "../../../../components/layout/BaseLayoutAuthorized";
+import FullWidth from "../../../../components/layout/FullWidth";
+import LimitedWidth from "../../../../components/layout/LimitedWidth";
+import SecondNavBar from "../../../../components/layout/SecondNavBar";
+import Loading from "../../../../components/Loading";
+import { useForm } from "../../../../lib/forms";
+import { useCodeSecondNavigation } from "../../../../lib/navigation/formCodeSecondNavigation";
+import { useFormMenuSteps } from "../../../../lib/navigation/formMenuSteps";
+
+export default function FormPage() {
+ const router = useRouter();
+ const formId = router.query.id.toString();
+ const { form, isLoadingForm } = useForm(router.query.id);
+ const codeSecondNavigation = useCodeSecondNavigation(formId);
+ const formMenuSteps = useFormMenuSteps(formId);
+
+ if (isLoadingForm) {
+ return
;
+ }
+
+ const breadcrumbs = [{ name: form.name, href: "#", current: true }];
+
+ if (form.formType === "NOCODE") {
+ return (
+ <>
+
+
+
+
+
+ >
+ );
+ } else {
+ return (
+
+
+
+
+
+
+
+ );
+ }
+}
+
+export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
+ const session = await getSession({ req });
+ if (!session) {
+ res.statusCode = 403;
+ }
+ return { props: {} };
+};
diff --git a/pages/forms/[id]/form/react.tsx b/pages/forms/[id]/form/react.tsx
new file mode 100644
index 0000000000..7cca733866
--- /dev/null
+++ b/pages/forms/[id]/form/react.tsx
@@ -0,0 +1,134 @@
+import { GetServerSideProps } from "next";
+import { getSession } from "next-auth/react";
+import { useRouter } from "next/router";
+import { FaDiscord } from "react-icons/fa";
+import BaseLayoutAuthorized from "../../../../components/layout/BaseLayoutAuthorized";
+import LimitedWidth from "../../../../components/layout/LimitedWidth";
+import SecondNavBar from "../../../../components/layout/SecondNavBar";
+import Loading from "../../../../components/Loading";
+import { useForm } from "../../../../lib/forms";
+import { useCodeSecondNavigation } from "../../../../lib/navigation/formCodeSecondNavigation";
+
+export default function ReactPage() {
+ const router = useRouter();
+ const formId = router.query.id.toString();
+ const { form, isLoadingForm } = useForm(router.query.id);
+ const codeSecondNavigation = useCodeSecondNavigation(formId);
+
+ if (isLoadingForm) {
+ return
;
+ }
+
+ return (
+ <>
+
+
+
+
+
+
+ Use our pre-built components to build your form. Manage data in
+ this dashboard.
+
+
+
+
+
+ 1. Get started
+
+
+ Install the snoopReact Library with Node Package Manager via
+ snoopforms/react.
+
+
+
+ {"npm install --save @snoopforms/react"}
+
+
+
+
+
+ 2. Build the form
+
+
+ Use the pre-built components snoopForm, snoopPage and
+ snoopElement to build exactly the form you want.
+
+
+
+ {`{}}>
+
+
+
+
+
+
+ Thank you!
+
+
+ `}
+
+
+
+
+
+ Questions?
+
+
+ Find a more detailed explanation on how to go about build the
+ form and piping your data{" "}
+
+ in the docs.
+ {" "}
+ Or join our Discord and ask us :)
+
+
+
+
+
+
+ >
+ );
+}
+
+export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
+ const session = await getSession({ req });
+ if (!session) {
+ res.statusCode = 403;
+ }
+ return { props: {} };
+};
diff --git a/pages/forms/[id]/index.tsx b/pages/forms/[id]/index.tsx
index 87e5a1f0e3..323c38fb55 100644
--- a/pages/forms/[id]/index.tsx
+++ b/pages/forms/[id]/index.tsx
@@ -13,7 +13,7 @@ export default function FormIndex() {
if (!isLoadingSubmissionSessions) {
// redirect to /results if there is at least one submissionSession
if (submissionSessions.length > 0) {
- router.push(`/forms/${formId}/results`);
+ router.push(`/forms/${formId}/results/summary`);
} else {
// redirect to /form if there isn't one submissionSession
router.push(`/forms/${formId}/form`);
diff --git a/pages/forms/[id]/pipelines.tsx b/pages/forms/[id]/pipelines.tsx
index 35360c1bf0..25f5a554a6 100644
--- a/pages/forms/[id]/pipelines.tsx
+++ b/pages/forms/[id]/pipelines.tsx
@@ -1,27 +1,29 @@
+import { CodeIcon, PuzzleIcon } from "@heroicons/react/outline";
import { GetServerSideProps } from "next";
import { getSession } from "next-auth/react";
import { useRouter } from "next/router";
-import LayoutFormBasics from "../../../components/layout/LayoutFormBasic";
+import {
+ SiAirtable,
+ SiGoogle,
+ SiNotion,
+ SiSlack,
+ SiZapier,
+} from "react-icons/si";
+import BaseLayoutAuthorized from "../../../components/layout/BaseLayoutAuthorized";
+import EmptyPageFiller from "../../../components/layout/EmptyPageFiller";
+import LimitedWidth from "../../../components/layout/LimitedWidth";
import Loading from "../../../components/Loading";
import { useForm } from "../../../lib/forms";
-import {
- SiZapier,
- SiAirtable,
- SiSlack,
- SiNotion,
- SiGoogle,
-} from "react-icons/si";
-import { CodeIcon } from "@heroicons/react/outline";
+import { useFormMenuSteps } from "../../../lib/navigation/formMenuSteps";
import { classNames } from "../../../lib/utils";
-import EmptyPageFiller from "../../../components/layout/EmptyPageFiller";
-import { PuzzleIcon } from "@heroicons/react/outline";
const libs = [
{
id: "webhook",
name: "Webhook",
href: "#",
- bgColor: "bg-red-500",
+ comingSoon: true,
+ bgColor: "bg-ui-gray-light",
icon: CodeIcon,
},
{
@@ -70,6 +72,7 @@ export default function PipelinesPage() {
const router = useRouter();
const formId = router.query.id.toString();
const { form, isLoadingForm } = useForm(router.query.id);
+ const formMenuSteps = useFormMenuSteps(formId);
if (isLoadingForm) {
return
;
@@ -77,92 +80,97 @@ export default function PipelinesPage() {
return (
<>
-
-
-
-
- Data Pipelines
-
+
+
+
+
+ Data Pipelines
+
+
+
+
+
+ Pipe your data exactly where you need it. Add conditions for
+ variable data piping.
+
-
-
-
- Pipe your data exactly where you need it. Add conditions for
- variable data piping.
-
-
-
-
-
-
-
-
-
- Integrations
-
+
+
+
+
+
+
+
+ Integrations
+
-
+
+
+
{lib.name}
+ {lib.comingSoon && (
+
+ )}
+
+
+
+
+ ))}
+
+
-
-
+
+
>
);
}
diff --git a/pages/forms/[id]/react.tsx b/pages/forms/[id]/react.tsx
deleted file mode 100644
index 5ab7ddaab7..0000000000
--- a/pages/forms/[id]/react.tsx
+++ /dev/null
@@ -1,151 +0,0 @@
-import { DocumentSearchIcon, TerminalIcon } from "@heroicons/react/outline";
-import { GetServerSideProps } from "next";
-import { getSession } from "next-auth/react";
-import { useRouter } from "next/router";
-import { FaDiscord, FaReact, FaVuejs } from "react-icons/fa";
-import LayoutFormBasics from "../../../components/layout/LayoutFormBasic";
-import SecondNavBar from "../../../components/layout/SecondNavBar";
-import SecondNavBarItem from "../../../components/layout/SecondNavBarItem";
-import Loading from "../../../components/Loading";
-import { useForm } from "../../../lib/forms";
-
-export default function ReactPage() {
- const router = useRouter();
- const formId = router.query.id.toString();
- const { form, isLoadingForm } = useForm(router.query.id);
-
- if (isLoadingForm) {
- return
;
- }
-
- return (
- <>
-
-
-
-
- formID
-
-
-
- React
-
-
-
- React Native
-
-
-
- Vue
-
-
-
- Docs
-
-
-
-
-
- Use our pre-built components to build your form. Manage data in this
- dashboard.
-
-
-
-
-
- 1. Get started
-
-
- Install the snoopReact Library with Node Package Manager via
- snoopforms/react.
-
-
-
- {"npm install --save @snoopforms/react"}
-
-
-
-
-
- 2. Build the form
-
-
- Use the pre-built components snoopForm, snoopPage and snoopElement
- to build exactly the form you want.
-
-
-
- {`{}}>
-
-
-
-
-
-
- Thank you!
-
-
- `}
-
-
-
-
-
Questions?
-
- Find a more detailed explanation on how to go about build the form
- and piping your data{" "}
-
- in the docs.
- {" "}
- Or join our Discord and ask us :)
-
-
-
-
-
- >
- );
-}
-
-export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
- const session = await getSession({ req });
- if (!session) {
- res.statusCode = 403;
- }
- return { props: {} };
-};
diff --git a/pages/forms/[id]/results.tsx b/pages/forms/[id]/results.tsx
deleted file mode 100644
index 9c7bd8f216..0000000000
--- a/pages/forms/[id]/results.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { GetServerSideProps } from "next";
-import { getSession } from "next-auth/react";
-import { useRouter } from "next/router";
-import { useState } from "react";
-import LayoutFormResults from "../../../components/layout/LayoutFormResults";
-import Loading from "../../../components/Loading";
-import ResultsSummary from "../../../components/results/ResultsSummary";
-import ResultsAnalytics from "../../../components/results/ResultsAnalytics";
-import ResultsResponses from "../../../components/results/ResultsResponses";
-import { useForm } from "../../../lib/forms";
-
-export default function Share() {
- const router = useRouter();
- const formId = router.query.id.toString();
- const { form, isLoadingForm } = useForm(router.query.id);
- const [resultMode, setResultMode] = useState
("summary");
-
- if (isLoadingForm) {
- return ;
- }
-
- return (
- <>
-
- {resultMode === "summary" && }
- {resultMode === "responses" && }
- {resultMode === "analytics" && }
-
- >
- );
-}
-
-export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
- const session = await getSession({ req });
- if (!session) {
- res.statusCode = 403;
- }
- return { props: {} };
-};
diff --git a/pages/forms/[id]/results/analytics.tsx b/pages/forms/[id]/results/analytics.tsx
new file mode 100644
index 0000000000..bf2c83e847
--- /dev/null
+++ b/pages/forms/[id]/results/analytics.tsx
@@ -0,0 +1,50 @@
+import { GetServerSideProps } from "next";
+import { getSession } from "next-auth/react";
+import { useRouter } from "next/router";
+import BaseLayoutAuthorized from "../../../../components/layout/BaseLayoutAuthorized";
+import LimitedWidth from "../../../../components/layout/LimitedWidth";
+import SecondNavBar from "../../../../components/layout/SecondNavBar";
+import Loading from "../../../../components/Loading";
+import ResultsAnalytics from "../../../../components/results/ResultsAnalytics";
+import { useForm } from "../../../../lib/forms";
+import { useFormMenuSteps } from "../../../../lib/navigation/formMenuSteps";
+import { useFormResultsSecondNavigation } from "../../../../lib/navigation/formResultsSecondNavigation";
+
+export default function ResultsAnalyticsPage() {
+ const router = useRouter();
+ const formId = router.query.id.toString();
+ const { form, isLoadingForm } = useForm(router.query.id);
+ const formMenuSteps = useFormMenuSteps(formId);
+ const formResultsSecondNavigation = useFormResultsSecondNavigation(formId);
+
+ if (isLoadingForm) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
+ const session = await getSession({ req });
+ if (!session) {
+ res.statusCode = 403;
+ }
+ return { props: {} };
+};
diff --git a/pages/forms/[id]/results/responses.tsx b/pages/forms/[id]/results/responses.tsx
new file mode 100644
index 0000000000..607973e314
--- /dev/null
+++ b/pages/forms/[id]/results/responses.tsx
@@ -0,0 +1,50 @@
+import { GetServerSideProps } from "next";
+import { getSession } from "next-auth/react";
+import { useRouter } from "next/router";
+import BaseLayoutAuthorized from "../../../../components/layout/BaseLayoutAuthorized";
+import FullWidth from "../../../../components/layout/FullWidth";
+import SecondNavBar from "../../../../components/layout/SecondNavBar";
+import Loading from "../../../../components/Loading";
+import ResultsResponses from "../../../../components/results/ResultsResponses";
+import { useForm } from "../../../../lib/forms";
+import { useFormMenuSteps } from "../../../../lib/navigation/formMenuSteps";
+import { useFormResultsSecondNavigation } from "../../../../lib/navigation/formResultsSecondNavigation";
+
+export default function ResultsResponsesPage() {
+ const router = useRouter();
+ const formId = router.query.id.toString();
+ const { form, isLoadingForm } = useForm(router.query.id);
+ const formMenuSteps = useFormMenuSteps(formId);
+ const formResultsSecondNavigation = useFormResultsSecondNavigation(formId);
+
+ if (isLoadingForm) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
+ const session = await getSession({ req });
+ if (!session) {
+ res.statusCode = 403;
+ }
+ return { props: {} };
+};
diff --git a/pages/forms/[id]/results/summary.tsx b/pages/forms/[id]/results/summary.tsx
new file mode 100644
index 0000000000..5e6111c394
--- /dev/null
+++ b/pages/forms/[id]/results/summary.tsx
@@ -0,0 +1,50 @@
+import { GetServerSideProps } from "next";
+import { getSession } from "next-auth/react";
+import { useRouter } from "next/router";
+import BaseLayoutAuthorized from "../../../../components/layout/BaseLayoutAuthorized";
+import LimitedWidth from "../../../../components/layout/LimitedWidth";
+import SecondNavBar from "../../../../components/layout/SecondNavBar";
+import Loading from "../../../../components/Loading";
+import ResultsSummary from "../../../../components/results/ResultsSummary";
+import { useForm } from "../../../../lib/forms";
+import { useFormMenuSteps } from "../../../../lib/navigation/formMenuSteps";
+import { useFormResultsSecondNavigation } from "../../../../lib/navigation/formResultsSecondNavigation";
+
+export default function ResultsSummaryPage() {
+ const router = useRouter();
+ const formId = router.query.id.toString();
+ const { form, isLoadingForm } = useForm(router.query.id);
+ const formMenuSteps = useFormMenuSteps(formId);
+ const formResultsSecondNavigation = useFormResultsSecondNavigation(formId);
+
+ if (isLoadingForm) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+
+
+ );
+}
+
+export const getServerSideProps: GetServerSideProps = async ({ req, res }) => {
+ const session = await getSession({ req });
+ if (!session) {
+ res.statusCode = 403;
+ }
+ return { props: {} };
+};
diff --git a/pages/forms/index.tsx b/pages/forms/index.tsx
index db8b0b4220..a2d49918d2 100644
--- a/pages/forms/index.tsx
+++ b/pages/forms/index.tsx
@@ -1,8 +1,8 @@
-import LayoutBasic from "../../components/layout/LayoutBasic";
import FormList from "../../components/FormList";
-import Head from "next/head";
-import { useForms } from "../../lib/forms";
+import BaseLayoutAuthorized from "../../components/layout/BaseLayoutAuthorized";
+import LimitedWidth from "../../components/layout/LimitedWidth";
import Loading from "../../components/Loading";
+import { useForms } from "../../lib/forms";
export default function Forms({}) {
const { isLoadingForms } = useForms();
@@ -12,16 +12,14 @@ export default function Forms({}) {
}
return (
<>
-
- Your forms - snoopForms
-
-
-
-
+
+
+
+
+
>
);
}
diff --git a/styles/globals.css b/styles/globals.css
index 03b0e1543f..7e9ca92c89 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -101,3 +101,11 @@
@apply text-transparent bg-clip-text bg-gradient-to-br from-red to-pink-500 hover:to-red;
}
}
+
+.tooltip {
+ @apply absolute invisible;
+}
+
+.has-tooltip:hover .tooltip {
+ @apply z-50 visible;
+}
diff --git a/tailwind.config.js b/tailwind.config.js
index acdc0fa584..93986262d3 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -4,173 +4,6 @@ module.exports = {
"./components/**/*.{js,ts,jsx,tsx}",
],
theme: {
- borderRadius: {
- none: "0",
- sm: "0.25rem", // 4px
- DEFAULT: "0.5rem", //8px
- DEFAULT: "8px",
- md: "1rem", // 16px
- lg: "1.5rem", // 24px
- xl: "2rem", // 32px
- "2xl": "2.5rem", // 40px
- "3xl": "3rem",
- "4xl": "3.5rem",
- full: "9999px",
- },
- colors: {
- red: {
- DEFAULT: "#f53b57",
- 50: "#fff1f2",
- 100: "#ffe4e5",
- 200: "#fecdd2",
- 300: "#fea3ad",
- 400: "#fc7081",
- 500: "#f53b57",
- 600: "#e21c43",
- 700: "#bf1137",
- 800: "#a01136",
- 900: "#891235",
- },
- green: {
- DEFAULT: "#0be881",
- 50: "#eefff6",
- 100: "#d7ffed",
- 200: "#b2ffda",
- 300: "#77febe",
- 400: "#35f39a",
- 500: "#0be881",
- 600: "#02b763",
- 700: "#068f50",
- 800: "#0b7042",
- 900: "#0b5c38",
- },
- pink: {
- DEFAULT: "#ef5777",
- 50: "#fef2f2",
- 100: "#fee5e8",
- 200: "#fccfd6",
- 300: "#faa7b4",
- 400: "#f6768e",
- 500: "#ef5777",
- 600: "#da2453",
- 700: "#b81845",
- 800: "#9a1740",
- 900: "#84173d",
- },
- purple: {
- DEFAULT: "#575fcf",
- 50: "#f2f3fc",
- 100: "#e2e4f7",
- 200: "#cbd0f2",
- 300: "#a8b2e8",
- 400: "#7e8bdc",
- 500: "#575fcf",
- 600: "#4d4cc4",
- 700: "#4842b3",
- 800: "#413a93",
- 900: "#373375",
- },
- blue: {
- DEFAULT: "#4bcffa",
- 50: "#f0faff",
- 100: "#e0f4fe",
- 200: "#baeafd",
- 300: "#7cdbfd",
- 400: "#4bcffa",
- 500: "#0cb4eb",
- 600: "#0190c8",
- 700: "#0273a2",
- 800: "#066186",
- 900: "#0b506f",
- },
- teal: {
- DEFAULT: "#34e7e4",
- 50: "#effefd",
- 100: "#c7fffa",
- 200: "#90fff6",
- 300: "#50f8ef",
- 400: "#34e7e4",
- 500: "#04c8c7",
- 600: "#009da1",
- 700: "#057d80",
- 800: "#0a6065",
- 900: "#0d5154",
- },
- amber: {
- DEFAULT: "#ffc048",
- 50: "#fff9eb",
- 100: "#ffeec6",
- 200: "#ffda88",
- 300: "#ffc048",
- 400: "#ffa820",
- 500: "#f98407",
- 600: "#dd5f02",
- 700: "#b74006",
- 800: "#94300c",
- 900: "#7a290d",
- },
- orange: {
- DEFAULT: "#ffa801",
- 50: "#fffdea",
- 100: "#fff6c5",
- 200: "#ffed85",
- 300: "#ffdc46",
- 400: "#ffca1b",
- 500: "#ffa801",
- 600: "#e27f00",
- 700: "#bb5702",
- 800: "#984308",
- 900: "#7c370b",
- },
- yellow: {
- DEFAULT: "#ffdd59",
- 50: "#fffceb",
- 100: "#fff6c6",
- 200: "#ffeb88",
- 300: "#ffdd59",
- 400: "#ffc820",
- 500: "#f9a607",
- 600: "#dd7d02",
- 700: "#b75806",
- 800: "#94430c",
- 900: "#7a380d",
- },
- gray: {
- DEFAULT: "#d2dae2",
- 50: "#f6f8f9",
- 100: "#eceff2",
- 200: "#d2dae2",
- 300: "#aebdcb",
- 400: "#8299ae",
- 500: "#627d95",
- 600: "#4e657b",
- 700: "#405164",
- 800: "#384654",
- 900: "#323d48",
- },
- "ui-gray": {
- lighter: "#FAFAFB",
- light: "#E5EAEF",
- medium: "#B5BFC8",
- dark: "#6B7177",
- },
- black: {
- DEFAULT: "#1e272e",
- 50: "#f2f7f9",
- 100: "#dfebee",
- 200: "#c2d7df",
- 300: "#98bbc8",
- 400: "#6696aa",
- 500: "#4b7a8f",
- 600: "#416579",
- 700: "#395465",
- 800: "#354855",
- 900: "#1e272e",
- },
- white: {
- DEFAULT: "#ffffff",
- },
- },
extend: {
strokeWidth: {
thin: "0.5px",
@@ -185,6 +18,173 @@ module.exports = {
text: {
KPI: "5rem",
},
+ borderRadius: {
+ none: "0",
+ sm: "0.25rem", // 4px
+ DEFAULT: "0.5rem", //8px
+ DEFAULT: "8px",
+ md: "1rem", // 16px
+ lg: "1.5rem", // 24px
+ xl: "2rem", // 32px
+ "2xl": "2.5rem", // 40px
+ "3xl": "3rem",
+ "4xl": "3.5rem",
+ full: "9999px",
+ },
+ colors: {
+ red: {
+ DEFAULT: "#f53b57",
+ 50: "#fff1f2",
+ 100: "#ffe4e5",
+ 200: "#fecdd2",
+ 300: "#fea3ad",
+ 400: "#fc7081",
+ 500: "#f53b57",
+ 600: "#e21c43",
+ 700: "#bf1137",
+ 800: "#a01136",
+ 900: "#891235",
+ },
+ green: {
+ DEFAULT: "#0be881",
+ 50: "#eefff6",
+ 100: "#d7ffed",
+ 200: "#b2ffda",
+ 300: "#77febe",
+ 400: "#35f39a",
+ 500: "#0be881",
+ 600: "#02b763",
+ 700: "#068f50",
+ 800: "#0b7042",
+ 900: "#0b5c38",
+ },
+ pink: {
+ DEFAULT: "#ef5777",
+ 50: "#fef2f2",
+ 100: "#fee5e8",
+ 200: "#fccfd6",
+ 300: "#faa7b4",
+ 400: "#f6768e",
+ 500: "#ef5777",
+ 600: "#da2453",
+ 700: "#b81845",
+ 800: "#9a1740",
+ 900: "#84173d",
+ },
+ purple: {
+ DEFAULT: "#575fcf",
+ 50: "#f2f3fc",
+ 100: "#e2e4f7",
+ 200: "#cbd0f2",
+ 300: "#a8b2e8",
+ 400: "#7e8bdc",
+ 500: "#575fcf",
+ 600: "#4d4cc4",
+ 700: "#4842b3",
+ 800: "#413a93",
+ 900: "#373375",
+ },
+ blue: {
+ DEFAULT: "#4bcffa",
+ 50: "#f0faff",
+ 100: "#e0f4fe",
+ 200: "#baeafd",
+ 300: "#7cdbfd",
+ 400: "#4bcffa",
+ 500: "#0cb4eb",
+ 600: "#0190c8",
+ 700: "#0273a2",
+ 800: "#066186",
+ 900: "#0b506f",
+ },
+ teal: {
+ DEFAULT: "#34e7e4",
+ 50: "#effefd",
+ 100: "#c7fffa",
+ 200: "#90fff6",
+ 300: "#50f8ef",
+ 400: "#34e7e4",
+ 500: "#04c8c7",
+ 600: "#009da1",
+ 700: "#057d80",
+ 800: "#0a6065",
+ 900: "#0d5154",
+ },
+ amber: {
+ DEFAULT: "#ffc048",
+ 50: "#fff9eb",
+ 100: "#ffeec6",
+ 200: "#ffda88",
+ 300: "#ffc048",
+ 400: "#ffa820",
+ 500: "#f98407",
+ 600: "#dd5f02",
+ 700: "#b74006",
+ 800: "#94300c",
+ 900: "#7a290d",
+ },
+ orange: {
+ DEFAULT: "#ffa801",
+ 50: "#fffdea",
+ 100: "#fff6c5",
+ 200: "#ffed85",
+ 300: "#ffdc46",
+ 400: "#ffca1b",
+ 500: "#ffa801",
+ 600: "#e27f00",
+ 700: "#bb5702",
+ 800: "#984308",
+ 900: "#7c370b",
+ },
+ yellow: {
+ DEFAULT: "#ffdd59",
+ 50: "#fffceb",
+ 100: "#fff6c6",
+ 200: "#ffeb88",
+ 300: "#ffdd59",
+ 400: "#ffc820",
+ 500: "#f9a607",
+ 600: "#dd7d02",
+ 700: "#b75806",
+ 800: "#94430c",
+ 900: "#7a380d",
+ },
+ gray: {
+ DEFAULT: "#d2dae2",
+ 50: "#f6f8f9",
+ 100: "#eceff2",
+ 200: "#d2dae2",
+ 300: "#aebdcb",
+ 400: "#8299ae",
+ 500: "#627d95",
+ 600: "#4e657b",
+ 700: "#405164",
+ 800: "#384654",
+ 900: "#323d48",
+ },
+ "ui-gray": {
+ lighter: "#FAFAFB",
+ light: "#E5EAEF",
+ medium: "#B5BFC8",
+ dark: "#6B7177",
+ },
+ black: {
+ DEFAULT: "#1e272e",
+ 50: "#f2f7f9",
+ 100: "#dfebee",
+ 200: "#c2d7df",
+ 300: "#98bbc8",
+ 400: "#6696aa",
+ 500: "#4b7a8f",
+ 600: "#416579",
+ 700: "#395465",
+ 800: "#354855",
+ 900: "#1e272e",
+ },
+ white: {
+ DEFAULT: "#ffffff",
+ },
+ },
},
},
plugins: [require("@tailwindcss/forms"), require("@tailwindcss/typography")],